From 27dccad485194c9c57cc2877f5ed2945cb39c880 Mon Sep 17 00:00:00 2001 From: Joshua Date: Thu, 10 Oct 2024 14:20:55 +0200 Subject: [PATCH] Sup vendor --- .idea/php.xml | 2 - vendor/composer/ClassLoader.php | 585 - vendor/composer/InstalledVersions.php | 359 - vendor/composer/autoload_classmap.php | 656 - vendor/composer/autoload_files.php | 27 - vendor/composer/autoload_namespaces.php | 9 - vendor/composer/autoload_psr4.php | 114 - vendor/composer/autoload_real.php | 50 - vendor/composer/autoload_static.php | 1252 -- vendor/composer/installed.json | 10248 ---------------- vendor/composer/installed.php | 1332 -- vendor/composer/platform_check.php | 26 - vendor/composer/semver/CHANGELOG.md | 229 - vendor/composer/semver/README.md | 99 - vendor/composer/semver/composer.json | 59 - vendor/composer/semver/src/Comparator.php | 113 - .../composer/semver/src/CompilingMatcher.php | 94 - .../composer/semver/src/Constraint/Bound.php | 122 - .../semver/src/Constraint/Constraint.php | 435 - .../src/Constraint/ConstraintInterface.php | 75 - .../src/Constraint/MatchAllConstraint.php | 85 - .../src/Constraint/MatchNoneConstraint.php | 83 - .../semver/src/Constraint/MultiConstraint.php | 325 - vendor/composer/semver/src/Interval.php | 98 - vendor/composer/semver/src/Intervals.php | 478 - vendor/composer/semver/src/Semver.php | 129 - vendor/composer/semver/src/VersionParser.php | 591 - vendor/doctrine/cache/README.md | 13 - vendor/doctrine/cache/UPGRADE-1.11.md | 27 - vendor/doctrine/cache/UPGRADE-1.4.md | 16 - vendor/doctrine/cache/composer.json | 50 - .../cache/lib/Doctrine/Common/Cache/Cache.php | 90 - .../Doctrine/Common/Cache/CacheProvider.php | 325 - .../Doctrine/Common/Cache/ClearableCache.php | 21 - .../Doctrine/Common/Cache/FlushableCache.php | 18 - .../Common/Cache/MultiDeleteCache.php | 22 - .../Doctrine/Common/Cache/MultiGetCache.php | 23 - .../Common/Cache/MultiOperationCache.php | 12 - .../Doctrine/Common/Cache/MultiPutCache.php | 24 - .../Common/Cache/Psr6/CacheAdapter.php | 340 - .../Doctrine/Common/Cache/Psr6/CacheItem.php | 118 - .../Common/Cache/Psr6/DoctrineProvider.php | 135 - .../Common/Cache/Psr6/InvalidArgument.php | 13 - .../Common/Cache/Psr6/TypedCacheItem.php | 99 - vendor/doctrine/collections/CONTRIBUTING.md | 44 - vendor/doctrine/collections/README.md | 6 - vendor/doctrine/collections/UPGRADE.md | 112 - vendor/doctrine/collections/composer.json | 63 - .../docs/en/derived-collections.rst | 26 - .../docs/en/expression-builder.rst | 185 - .../collections/docs/en/expressions.rst | 117 - vendor/doctrine/collections/docs/en/index.rst | 357 - .../collections/docs/en/lazy-collections.rst | 26 - .../collections/docs/en/serialization.rst | 29 - .../doctrine/collections/docs/en/sidebar.rst | 11 - .../src/AbstractLazyCollection.php | 414 - .../collections/src/ArrayCollection.php | 490 - .../doctrine/collections/src/Collection.php | 117 - vendor/doctrine/collections/src/Criteria.php | 285 - .../src/Expr/ClosureExpressionVisitor.php | 222 - .../collections/src/Expr/Comparison.php | 62 - .../src/Expr/CompositeExpression.php | 70 - .../collections/src/Expr/Expression.php | 14 - .../src/Expr/ExpressionVisitor.php | 52 - .../doctrine/collections/src/Expr/Value.php | 26 - .../collections/src/ExpressionBuilder.php | 123 - vendor/doctrine/collections/src/Order.php | 11 - .../collections/src/ReadableCollection.php | 242 - .../doctrine/collections/src/Selectable.php | 32 - vendor/doctrine/dbal/CONTRIBUTING.md | 6 - vendor/doctrine/dbal/README.md | 50 - vendor/doctrine/dbal/bin/doctrine-dbal.php | 55 - vendor/doctrine/dbal/composer.json | 73 - .../doctrine/dbal/src/ArrayParameterType.php | 42 - .../dbal/src/ArrayParameters/Exception.php | 10 - .../Exception/MissingNamedParameter.php | 19 - .../Exception/MissingPositionalParameter.php | 23 - .../doctrine/dbal/src/Cache/ArrayResult.php | 116 - .../dbal/src/Cache/CacheException.php | 21 - .../dbal/src/Cache/QueryCacheProfile.php | 176 - vendor/doctrine/dbal/src/ColumnCase.php | 28 - vendor/doctrine/dbal/src/Configuration.php | 265 - vendor/doctrine/dbal/src/Connection.php | 2001 --- .../doctrine/dbal/src/ConnectionException.php | 31 - .../PrimaryReadReplicaConnection.php | 374 - vendor/doctrine/dbal/src/Driver.php | 57 - .../src/Driver/API/ExceptionConverter.php | 25 - .../Driver/API/IBMDB2/ExceptionConverter.php | 65 - .../Driver/API/MySQL/ExceptionConverter.php | 120 - .../src/Driver/API/OCI/ExceptionConverter.php | 74 - .../API/PostgreSQL/ExceptionConverter.php | 89 - .../Driver/API/SQLSrv/ExceptionConverter.php | 69 - .../Driver/API/SQLite/ExceptionConverter.php | 85 - .../API/SQLite/UserDefinedFunctions.php | 80 - .../dbal/src/Driver/AbstractDB2Driver.php | 100 - .../dbal/src/Driver/AbstractException.php | 44 - .../dbal/src/Driver/AbstractMySQLDriver.php | 231 - .../dbal/src/Driver/AbstractOracleDriver.php | 65 - .../EasyConnectString.php | 116 - .../src/Driver/AbstractPostgreSQLDriver.php | 93 - .../src/Driver/AbstractSQLServerDriver.php | 53 - .../Exception/PortWithoutHost.php | 20 - .../dbal/src/Driver/AbstractSQLiteDriver.php | 52 - .../Middleware/EnableForeignKeys.php | 31 - .../doctrine/dbal/src/Driver/Connection.php | 86 - vendor/doctrine/dbal/src/Driver/Exception.php | 20 - .../Driver/Exception/UnknownParameterType.php | 23 - .../doctrine/dbal/src/Driver/FetchUtils.php | 73 - .../dbal/src/Driver/IBMDB2/Connection.php | 141 - .../dbal/src/Driver/IBMDB2/DataSourceName.php | 84 - .../dbal/src/Driver/IBMDB2/Driver.php | 41 - .../Exception/CannotCopyStreamToStream.php | 27 - .../Exception/CannotCreateTemporaryFile.php | 27 - .../IBMDB2/Exception/ConnectionError.php | 29 - .../IBMDB2/Exception/ConnectionFailed.php | 28 - .../src/Driver/IBMDB2/Exception/Factory.php | 35 - .../Driver/IBMDB2/Exception/PrepareFailed.php | 25 - .../IBMDB2/Exception/StatementError.php | 34 - .../dbal/src/Driver/IBMDB2/Result.php | 113 - .../dbal/src/Driver/IBMDB2/Statement.php | 220 - .../doctrine/dbal/src/Driver/Middleware.php | 12 - .../AbstractConnectionMiddleware.php | 113 - .../Middleware/AbstractDriverMiddleware.php | 73 - .../Middleware/AbstractResultMiddleware.php | 78 - .../AbstractStatementMiddleware.php | 71 - .../dbal/src/Driver/Mysqli/Connection.php | 141 - .../dbal/src/Driver/Mysqli/Driver.php | 117 - .../Mysqli/Exception/ConnectionError.php | 31 - .../Mysqli/Exception/ConnectionFailed.php | 36 - .../Exception/FailedReadingStreamOffset.php | 22 - .../Driver/Mysqli/Exception/HostRequired.php | 20 - .../Mysqli/Exception/InvalidCharset.php | 42 - .../Driver/Mysqli/Exception/InvalidOption.php | 25 - .../NonStreamResourceUsedAsLargeObject.php | 24 - .../Mysqli/Exception/StatementError.php | 31 - .../dbal/src/Driver/Mysqli/Initializer.php | 14 - .../src/Driver/Mysqli/Initializer/Charset.php | 35 - .../src/Driver/Mysqli/Initializer/Options.php | 32 - .../src/Driver/Mysqli/Initializer/Secure.php | 38 - .../dbal/src/Driver/Mysqli/Result.php | 179 - .../dbal/src/Driver/Mysqli/Statement.php | 239 - .../dbal/src/Driver/OCI8/Connection.php | 170 - .../ConvertPositionalToNamedPlaceholders.php | 56 - .../doctrine/dbal/src/Driver/OCI8/Driver.php | 58 - .../OCI8/Exception/ConnectionFailed.php | 26 - .../dbal/src/Driver/OCI8/Exception/Error.php | 27 - .../OCI8/Exception/InvalidConfiguration.php | 20 - .../Exception/NonTerminatedStringLiteral.php | 27 - .../OCI8/Exception/SequenceDoesNotExist.php | 20 - .../OCI8/Exception/UnknownParameterIndex.php | 24 - .../dbal/src/Driver/OCI8/ExecutionMode.php | 30 - .../OCI8/Middleware/InitializeSession.php | 38 - .../doctrine/dbal/src/Driver/OCI8/Result.php | 145 - .../dbal/src/Driver/OCI8/Statement.php | 174 - .../dbal/src/Driver/PDO/Connection.php | 158 - .../dbal/src/Driver/PDO/Exception.php | 30 - .../dbal/src/Driver/PDO/MySQL/Driver.php | 76 - .../dbal/src/Driver/PDO/OCI/Driver.php | 61 - .../dbal/src/Driver/PDO/PDOException.php | 33 - .../dbal/src/Driver/PDO/ParameterTypeMap.php | 49 - .../dbal/src/Driver/PDO/PgSQL/Driver.php | 135 - .../doctrine/dbal/src/Driver/PDO/Result.php | 124 - .../dbal/src/Driver/PDO/SQLSrv/Connection.php | 70 - .../dbal/src/Driver/PDO/SQLSrv/Driver.php | 108 - .../dbal/src/Driver/PDO/SQLSrv/Statement.php | 109 - .../dbal/src/Driver/PDO/SQLite/Driver.php | 77 - .../dbal/src/Driver/PDO/Statement.php | 137 - .../dbal/src/Driver/PgSQL/Connection.php | 161 - .../src/Driver/PgSQL/ConvertParameters.php | 49 - .../doctrine/dbal/src/Driver/PgSQL/Driver.php | 86 - .../dbal/src/Driver/PgSQL/Exception.php | 30 - .../PgSQL/Exception/UnexpectedValue.php | 29 - .../PgSQL/Exception/UnknownParameter.php | 18 - .../doctrine/dbal/src/Driver/PgSQL/Result.php | 282 - .../dbal/src/Driver/PgSQL/Statement.php | 177 - vendor/doctrine/dbal/src/Driver/Result.php | 93 - .../dbal/src/Driver/SQLSrv/Connection.php | 144 - .../dbal/src/Driver/SQLSrv/Driver.php | 73 - .../src/Driver/SQLSrv/Exception/Error.php | 44 - .../dbal/src/Driver/SQLSrv/Result.php | 118 - .../dbal/src/Driver/SQLSrv/Statement.php | 223 - .../dbal/src/Driver/SQLite3/Connection.php | 107 - .../dbal/src/Driver/SQLite3/Driver.php | 49 - .../dbal/src/Driver/SQLite3/Exception.php | 18 - .../dbal/src/Driver/SQLite3/Result.php | 91 - .../dbal/src/Driver/SQLite3/Statement.php | 136 - .../src/Driver/ServerInfoAwareConnection.php | 21 - vendor/doctrine/dbal/src/Driver/Statement.php | 78 - vendor/doctrine/dbal/src/DriverManager.php | 288 - .../dbal/src/Event/ConnectionEventArgs.php | 27 - .../src/Event/Listeners/OracleSessionInit.php | 77 - .../src/Event/Listeners/SQLSessionInit.php | 43 - .../src/Event/Listeners/SQLiteSessionInit.php | 30 - .../SchemaAlterTableAddColumnEventArgs.php | 81 - .../SchemaAlterTableChangeColumnEventArgs.php | 71 - .../src/Event/SchemaAlterTableEventArgs.php | 62 - .../SchemaAlterTableRemoveColumnEventArgs.php | 71 - .../SchemaAlterTableRenameColumnEventArgs.php | 82 - .../Event/SchemaColumnDefinitionEventArgs.php | 87 - .../SchemaCreateTableColumnEventArgs.php | 71 - .../src/Event/SchemaCreateTableEventArgs.php | 87 - .../src/Event/SchemaDropTableEventArgs.php | 64 - .../dbal/src/Event/SchemaEventArgs.php | 29 - .../Event/SchemaIndexDefinitionEventArgs.php | 75 - .../src/Event/TransactionBeginEventArgs.php | 10 - .../src/Event/TransactionCommitEventArgs.php | 10 - .../dbal/src/Event/TransactionEventArgs.php | 24 - .../Event/TransactionRollBackEventArgs.php | 10 - vendor/doctrine/dbal/src/Events.php | 64 - vendor/doctrine/dbal/src/Exception.php | 142 - .../src/Exception/ConnectionException.php | 12 - .../dbal/src/Exception/ConnectionLost.php | 8 - .../ConstraintViolationException.php | 12 - .../src/Exception/DatabaseDoesNotExist.php | 8 - .../DatabaseObjectExistsException.php | 16 - .../DatabaseObjectNotFoundException.php | 16 - .../dbal/src/Exception/DatabaseRequired.php | 18 - .../dbal/src/Exception/DeadlockException.php | 12 - .../dbal/src/Exception/DriverException.php | 57 - ...ForeignKeyConstraintViolationException.php | 12 - .../Exception/InvalidArgumentException.php | 19 - .../Exception/InvalidFieldNameException.php | 12 - .../dbal/src/Exception/InvalidLockMode.php | 22 - .../Exception/LockWaitTimeoutException.php | 12 - .../src/Exception/MalformedDsnException.php | 14 - .../dbal/src/Exception/NoKeyValue.php | 25 - .../Exception/NonUniqueFieldNameException.php | 12 - .../NotNullConstraintViolationException.php | 12 - .../dbal/src/Exception/ReadOnlyException.php | 12 - .../dbal/src/Exception/RetryableException.php | 14 - .../dbal/src/Exception/SchemaDoesNotExist.php | 8 - .../dbal/src/Exception/ServerException.php | 12 - .../src/Exception/SyntaxErrorException.php | 12 - .../src/Exception/TableExistsException.php | 12 - .../src/Exception/TableNotFoundException.php | 12 - .../UniqueConstraintViolationException.php | 12 - .../dbal/src/ExpandArrayParameters.php | 143 - vendor/doctrine/dbal/src/FetchMode.php | 20 - .../doctrine/dbal/src/Id/TableGenerator.php | 169 - .../src/Id/TableGeneratorSchemaVisitor.php | 77 - vendor/doctrine/dbal/src/LockMode.php | 23 - .../doctrine/dbal/src/Logging/Connection.php | 82 - .../doctrine/dbal/src/Logging/DebugStack.php | 75 - vendor/doctrine/dbal/src/Logging/Driver.php | 58 - .../doctrine/dbal/src/Logging/LoggerChain.php | 48 - .../doctrine/dbal/src/Logging/Middleware.php | 24 - .../doctrine/dbal/src/Logging/SQLLogger.php | 32 - .../doctrine/dbal/src/Logging/Statement.php | 100 - vendor/doctrine/dbal/src/ParameterType.php | 57 - .../src/Platforms/AbstractMySQLPlatform.php | 1497 --- .../dbal/src/Platforms/AbstractPlatform.php | 4727 ------- .../dbal/src/Platforms/DB2111Platform.php | 40 - .../dbal/src/Platforms/DB2Platform.php | 1053 -- .../dbal/src/Platforms/DateIntervalUnit.php | 29 - .../src/Platforms/Keywords/DB2Keywords.php | 430 - .../src/Platforms/Keywords/KeywordList.php | 56 - .../Platforms/Keywords/MariaDBKeywords.php | 276 - .../Platforms/Keywords/MariaDb102Keywords.php | 27 - .../Platforms/Keywords/MySQL57Keywords.php | 275 - .../Platforms/Keywords/MySQL80Keywords.php | 75 - .../Platforms/Keywords/MySQL84Keywords.php | 64 - .../src/Platforms/Keywords/MySQLKeywords.php | 275 - .../src/Platforms/Keywords/OracleKeywords.php | 149 - .../Keywords/PostgreSQL100Keywords.php | 27 - .../Keywords/PostgreSQL94Keywords.php | 12 - .../Platforms/Keywords/PostgreSQLKeywords.php | 135 - .../Keywords/ReservedKeywordsValidator.php | 130 - .../Keywords/SQLServer2012Keywords.php | 12 - .../Platforms/Keywords/SQLServerKeywords.php | 224 - .../src/Platforms/Keywords/SQLiteKeywords.php | 157 - .../dbal/src/Platforms/MariaDBPlatform.php | 55 - .../src/Platforms/MariaDb1010Platform.php | 47 - .../src/Platforms/MariaDb1027Platform.php | 13 - .../src/Platforms/MariaDb1043Platform.php | 131 - .../src/Platforms/MariaDb1052Platform.php | 36 - .../src/Platforms/MariaDb1060Platform.php | 16 - .../MySQL/CollationMetadataProvider.php | 11 - .../CachingCollationMetadataProvider.php | 33 - .../ConnectionCollationMetadataProvider.php | 41 - .../dbal/src/Platforms/MySQL/Comparator.php | 94 - .../dbal/src/Platforms/MySQL57Platform.php | 99 - .../dbal/src/Platforms/MySQL80Platform.php | 34 - .../dbal/src/Platforms/MySQL84Platform.php | 28 - .../dbal/src/Platforms/MySQLPlatform.php | 11 - .../dbal/src/Platforms/OraclePlatform.php | 1331 -- .../src/Platforms/PostgreSQL100Platform.php | 36 - .../src/Platforms/PostgreSQL120Platform.php | 30 - .../src/Platforms/PostgreSQL94Platform.php | 12 - .../dbal/src/Platforms/PostgreSQLPlatform.php | 1422 --- .../src/Platforms/SQLServer/Comparator.php | 63 - .../SQL/Builder/SQLServerSelectSQLBuilder.php | 86 - .../src/Platforms/SQLServer2012Platform.php | 13 - .../dbal/src/Platforms/SQLServerPlatform.php | 1841 --- .../dbal/src/Platforms/SQLite/Comparator.php | 61 - .../dbal/src/Platforms/SqlitePlatform.php | 1545 --- .../doctrine/dbal/src/Platforms/TrimMode.php | 21 - .../dbal/src/Portability/Connection.php | 45 - .../dbal/src/Portability/Converter.php | 300 - .../doctrine/dbal/src/Portability/Driver.php | 83 - .../dbal/src/Portability/Middleware.php | 38 - .../dbal/src/Portability/OptimizeFlags.php | 42 - .../doctrine/dbal/src/Portability/Result.php | 81 - .../dbal/src/Portability/Statement.php | 36 - vendor/doctrine/dbal/src/Query.php | 64 - .../Query/Expression/CompositeExpression.php | 183 - .../Query/Expression/ExpressionBuilder.php | 323 - vendor/doctrine/dbal/src/Query/ForUpdate.php | 21 - .../ForUpdate/ConflictResolutionMode.php | 27 - vendor/doctrine/dbal/src/Query/Limit.php | 30 - .../doctrine/dbal/src/Query/QueryBuilder.php | 1759 --- .../dbal/src/Query/QueryException.php | 37 - .../doctrine/dbal/src/Query/SelectQuery.php | 107 - vendor/doctrine/dbal/src/Result.php | 339 - .../Builder/CreateSchemaObjectsSQLBuilder.php | 85 - .../SQL/Builder/DefaultSelectSQLBuilder.php | 95 - .../Builder/DropSchemaObjectsSQLBuilder.php | 62 - .../dbal/src/SQL/Builder/SelectSQLBuilder.php | 12 - vendor/doctrine/dbal/src/SQL/Parser.php | 127 - .../dbal/src/SQL/Parser/Exception.php | 11 - .../Exception/RegularExpressionError.php | 19 - .../doctrine/dbal/src/SQL/Parser/Visitor.php | 26 - .../dbal/src/Schema/AbstractAsset.php | 224 - .../dbal/src/Schema/AbstractSchemaManager.php | 1808 --- vendor/doctrine/dbal/src/Schema/Column.php | 466 - .../doctrine/dbal/src/Schema/ColumnDiff.php | 169 - .../doctrine/dbal/src/Schema/Comparator.php | 716 -- .../doctrine/dbal/src/Schema/Constraint.php | 41 - .../dbal/src/Schema/DB2SchemaManager.php | 451 - .../Schema/DefaultSchemaManagerFactory.php | 20 - .../Schema/Exception/ColumnAlreadyExists.php | 21 - .../Schema/Exception/ColumnDoesNotExist.php | 21 - .../Exception/ForeignKeyDoesNotExist.php | 21 - .../Schema/Exception/IndexAlreadyExists.php | 21 - .../Schema/Exception/IndexDoesNotExist.php | 21 - .../src/Schema/Exception/IndexNameInvalid.php | 21 - .../src/Schema/Exception/InvalidTableName.php | 18 - .../Exception/NamedForeignKeyRequired.php | 30 - .../Exception/NamespaceAlreadyExists.php | 21 - .../Exception/SequenceAlreadyExists.php | 21 - .../Schema/Exception/SequenceDoesNotExist.php | 21 - .../Schema/Exception/TableAlreadyExists.php | 21 - .../Schema/Exception/TableDoesNotExist.php | 21 - .../UniqueConstraintDoesNotExist.php | 21 - .../Schema/Exception/UnknownColumnOption.php | 20 - .../dbal/src/Schema/ForeignKeyConstraint.php | 406 - .../doctrine/dbal/src/Schema/Identifier.php | 27 - vendor/doctrine/dbal/src/Schema/Index.php | 365 - .../src/Schema/LegacySchemaManagerFactory.php | 19 - .../dbal/src/Schema/MySQLSchemaManager.php | 605 - .../dbal/src/Schema/OracleSchemaManager.php | 539 - .../src/Schema/PostgreSQLSchemaManager.php | 771 -- .../src/Schema/SQLServerSchemaManager.php | 611 - vendor/doctrine/dbal/src/Schema/Schema.php | 523 - .../doctrine/dbal/src/Schema/SchemaConfig.php | 120 - .../doctrine/dbal/src/Schema/SchemaDiff.php | 294 - .../dbal/src/Schema/SchemaException.php | 204 - .../dbal/src/Schema/SchemaManagerFactory.php | 17 - vendor/doctrine/dbal/src/Schema/Sequence.php | 151 - .../dbal/src/Schema/SqliteSchemaManager.php | 790 -- vendor/doctrine/dbal/src/Schema/Table.php | 1041 -- vendor/doctrine/dbal/src/Schema/TableDiff.php | 361 - .../dbal/src/Schema/UniqueConstraint.php | 154 - vendor/doctrine/dbal/src/Schema/View.php | 28 - .../src/Schema/Visitor/AbstractVisitor.php | 49 - .../Visitor/CreateSchemaSqlCollector.php | 104 - .../Schema/Visitor/DropSchemaSqlCollector.php | 107 - .../dbal/src/Schema/Visitor/Graphviz.php | 164 - .../src/Schema/Visitor/NamespaceVisitor.php | 20 - .../Schema/Visitor/RemoveNamespacedAssets.php | 103 - .../dbal/src/Schema/Visitor/Visitor.php | 45 - vendor/doctrine/dbal/src/Statement.php | 261 - .../Console/Command/CommandCompatibility.php | 35 - .../Console/Command/ReservedWordsCommand.php | 219 - .../Tools/Console/Command/RunSqlCommand.php | 120 - .../src/Tools/Console/ConnectionNotFound.php | 9 - .../src/Tools/Console/ConnectionProvider.php | 13 - .../SingleConnectionProvider.php | 36 - .../dbal/src/Tools/Console/ConsoleRunner.php | 81 - vendor/doctrine/dbal/src/Tools/DsnParser.php | 218 - .../dbal/src/TransactionIsolationLevel.php | 33 - vendor/doctrine/dbal/src/Types/ArrayType.php | 92 - .../dbal/src/Types/AsciiStringType.php | 29 - vendor/doctrine/dbal/src/Types/BigIntType.php | 50 - vendor/doctrine/dbal/src/Types/BinaryType.php | 67 - vendor/doctrine/dbal/src/Types/BlobType.php | 67 - .../doctrine/dbal/src/Types/BooleanType.php | 79 - .../dbal/src/Types/ConversionException.php | 123 - .../dbal/src/Types/DateImmutableType.php | 92 - .../dbal/src/Types/DateIntervalType.php | 110 - .../dbal/src/Types/DateTimeImmutableType.php | 98 - .../doctrine/dbal/src/Types/DateTimeType.php | 115 - .../src/Types/DateTimeTzImmutableType.php | 92 - .../dbal/src/Types/DateTimeTzType.php | 122 - vendor/doctrine/dbal/src/Types/DateType.php | 104 - .../doctrine/dbal/src/Types/DecimalType.php | 47 - vendor/doctrine/dbal/src/Types/FloatType.php | 38 - vendor/doctrine/dbal/src/Types/GuidType.php | 45 - .../doctrine/dbal/src/Types/IntegerType.php | 50 - vendor/doctrine/dbal/src/Types/JsonType.php | 96 - vendor/doctrine/dbal/src/Types/ObjectType.php | 88 - .../dbal/src/Types/PhpDateTimeMappingType.php | 12 - .../dbal/src/Types/PhpIntegerMappingType.php | 12 - .../dbal/src/Types/SimpleArrayType.php | 88 - .../doctrine/dbal/src/Types/SmallIntType.php | 50 - vendor/doctrine/dbal/src/Types/StringType.php | 27 - vendor/doctrine/dbal/src/Types/TextType.php | 38 - .../dbal/src/Types/TimeImmutableType.php | 92 - vendor/doctrine/dbal/src/Types/TimeType.php | 104 - vendor/doctrine/dbal/src/Types/Type.php | 296 - .../doctrine/dbal/src/Types/TypeRegistry.php | 127 - vendor/doctrine/dbal/src/Types/Types.php | 47 - .../src/Types/VarDateTimeImmutableType.php | 89 - .../dbal/src/Types/VarDateTimeType.php | 42 - .../dbal/src/VersionAwarePlatformDriver.php | 30 - vendor/doctrine/deprecations/README.md | 157 - vendor/doctrine/deprecations/composer.json | 38 - .../lib/Doctrine/Deprecations/Deprecation.php | 313 - .../PHPUnit/VerifyDeprecations.php | 66 - vendor/doctrine/doctrine-bundle/README.md | 24 - .../doctrine/doctrine-bundle/UPGRADE-2.10.md | 27 - .../doctrine/doctrine-bundle/UPGRADE-2.12.md | 13 - .../doctrine/doctrine-bundle/UPGRADE-2.13.md | 13 - .../doctrine/doctrine-bundle/UPGRADE-3.0.md | 19 - vendor/doctrine/doctrine-bundle/composer.json | 107 - .../doctrine/doctrine-bundle/config/dbal.xml | 114 - .../doctrine-bundle/config/messenger.xml | 64 - .../doctrine-bundle/config/middlewares.xml | 26 - .../doctrine/doctrine-bundle/config/orm.xml | 283 - .../config/schema/doctrine-1.0.xsd | 294 - .../src/Attribute/AsDoctrineListener.php | 19 - .../src/Attribute/AsEntityListener.php | 22 - .../src/Attribute/AsMiddleware.php | 16 - .../DoctrineMetadataCacheWarmer.php | 52 - .../Command/CreateDatabaseDoctrineCommand.php | 100 - .../src/Command/DoctrineCommand.php | 84 - .../Command/DropDatabaseDoctrineCommand.php | 131 - .../Command/ImportMappingDoctrineCommand.php | 163 - .../ClearMetadataCacheDoctrineCommand.php | 31 - .../Proxy/ClearQueryCacheDoctrineCommand.php | 31 - .../Proxy/ClearResultCacheDoctrineCommand.php | 31 - .../Proxy/CollectionRegionDoctrineCommand.php | 30 - .../Proxy/ConvertMappingDoctrineCommand.php | 58 - .../Proxy/CreateSchemaDoctrineCommand.php | 32 - .../Command/Proxy/DoctrineCommandHelper.php | 42 - .../Proxy/DropSchemaDoctrineCommand.php | 31 - ...nsureProductionSettingsDoctrineCommand.php | 32 - .../EntityRegionCacheDoctrineCommand.php | 30 - .../src/Command/Proxy/InfoDoctrineCommand.php | 28 - .../src/Command/Proxy/OrmProxyCommand.php | 42 - .../Proxy/QueryRegionCacheDoctrineCommand.php | 30 - .../Command/Proxy/RunDqlDoctrineCommand.php | 46 - .../Command/Proxy/RunSqlDoctrineCommand.php | 43 - .../Proxy/UpdateSchemaDoctrineCommand.php | 31 - .../Command/Proxy/ValidateSchemaCommand.php | 30 - .../doctrine-bundle/src/ConnectionFactory.php | 290 - .../src/Controller/ProfilerController.php | 132 - .../DataCollector/DoctrineDataCollector.php | 305 - .../src/Dbal/BlacklistSchemaAssetFilter.php | 30 - ...ManagerRegistryAwareConnectionProvider.php | 27 - .../src/Dbal/RegexSchemaAssetFilter.php | 27 - .../src/Dbal/SchemaAssetsFilterManager.php | 32 - .../Compiler/CacheCompatibilityPass.php | 125 - .../Compiler/CacheSchemaSubscriberPass.php | 55 - .../Compiler/DbalSchemaFilterPass.php | 53 - .../Compiler/DoctrineOrmMappingsPass.php | 183 - .../Compiler/EntityListenerPass.php | 151 - .../Compiler/IdGeneratorPass.php | 80 - .../Compiler/MiddlewaresPass.php | 88 - .../Compiler/RemoveLoggingMiddlewarePass.php | 19 - .../Compiler/RemoveProfilerControllerPass.php | 20 - .../ServiceRepositoryCompilerPass.php | 36 - .../Compiler/WellKnownSchemaFilterPass.php | 55 - .../src/DependencyInjection/Configuration.php | 893 -- .../DependencyInjection/DoctrineExtension.php | 1241 -- .../doctrine-bundle/src/DoctrineBundle.php | 177 - .../EventSubscriberInterface.php | 10 - .../src/ManagerConfigurator.php | 66 - .../src/Mapping/ClassMetadataCollection.php | 50 - .../src/Mapping/ClassMetadataFactory.php | 33 - .../ContainerEntityListenerResolver.php | 101 - .../Mapping/DisconnectedMetadataFactory.php | 174 - .../Mapping/EntityListenerServiceResolver.php | 15 - .../src/Mapping/MappingDriver.php | 65 - .../Middleware/BacktraceDebugDataHolder.php | 92 - .../ConnectionNameAwareInterface.php | 8 - .../src/Middleware/DebugMiddleware.php | 33 - .../Middleware/IdleConnectionMiddleware.php | 36 - ...agerRegistryAwareEntityManagerProvider.php | 43 - .../doctrine/doctrine-bundle/src/Registry.php | 88 - .../Repository/ContainerRepositoryFactory.php | 111 - .../LazyServiceEntityRepository.php | 82 - .../RepositoryFactoryCompatibility.php | 41 - .../Repository/ServiceEntityRepository.php | 53 - .../ServiceEntityRepositoryInterface.php | 10 - .../ServiceEntityRepositoryProxy.php | 132 - .../src/Twig/DoctrineExtension.php | 197 - .../templates/Collector/database.svg | 6 - .../templates/Collector/db.html.twig | 533 - .../templates/Collector/explain.html.twig | 28 - .../templates/Collector/icon.svg | 4 - .../.symfony.bundle.yaml | 4 - .../Collector/MigrationsCollector.php | 95 - .../Collector/MigrationsFlattener.php | 73 - .../ConfigureDependencyFactoryPass.php | 115 - .../DependencyInjection/Configuration.php | 180 - .../DoctrineMigrationsExtension.php | 201 - .../DoctrineMigrationsBundle.php | 21 - .../ContainerAwareMigrationFactory.php | 41 - .../README.markdown | 9 - .../config/schema/doctrine_migrations-3.0.xsd | 73 - .../Resources/config/services.xml | 151 - .../Resources/doc/index.rst | 467 - .../Resources/views/Collector/icon-v3.svg | 6 - .../Resources/views/Collector/icon.svg | 7 - .../views/Collector/migrations.html.twig | 252 - .../doctrine-migrations-bundle/UPGRADE.md | 86 - .../doctrine-migrations-bundle/composer.json | 60 - .../phpstan-baseline.neon | 26 - vendor/doctrine/event-manager/README.md | 13 - vendor/doctrine/event-manager/UPGRADE.md | 15 - vendor/doctrine/event-manager/composer.json | 68 - .../doctrine/event-manager/psalm-baseline.xml | 8 - .../doctrine/event-manager/src/EventArgs.php | 37 - .../event-manager/src/EventManager.php | 129 - .../event-manager/src/EventSubscriber.php | 21 - vendor/doctrine/inflector/README.md | 7 - vendor/doctrine/inflector/composer.json | 41 - vendor/doctrine/inflector/docs/en/index.rst | 226 - .../Inflector/CachedWordInflector.php | 24 - .../GenericLanguageInflectorFactory.php | 66 - .../lib/Doctrine/Inflector/Inflector.php | 507 - .../Doctrine/Inflector/InflectorFactory.php | 52 - .../lib/Doctrine/Inflector/Language.php | 19 - .../Inflector/LanguageInflectorFactory.php | 33 - .../Doctrine/Inflector/NoopWordInflector.php | 13 - .../Inflector/Rules/English/Inflectible.php | 184 - .../Rules/English/InflectorFactory.php | 21 - .../Inflector/Rules/English/Rules.php | 31 - .../Inflector/Rules/English/Uninflected.php | 189 - .../Inflector/Rules/French/Inflectible.php | 44 - .../Rules/French/InflectorFactory.php | 21 - .../Doctrine/Inflector/Rules/French/Rules.php | 31 - .../Inflector/Rules/French/Uninflected.php | 28 - .../Rules/NorwegianBokmal/Inflectible.php | 34 - .../NorwegianBokmal/InflectorFactory.php | 21 - .../Inflector/Rules/NorwegianBokmal/Rules.php | 31 - .../Rules/NorwegianBokmal/Uninflected.php | 30 - .../lib/Doctrine/Inflector/Rules/Pattern.php | 42 - .../lib/Doctrine/Inflector/Rules/Patterns.php | 34 - .../Rules/Portuguese/Inflectible.php | 98 - .../Rules/Portuguese/InflectorFactory.php | 21 - .../Inflector/Rules/Portuguese/Rules.php | 31 - .../Rules/Portuguese/Uninflected.php | 32 - .../lib/Doctrine/Inflector/Rules/Ruleset.php | 39 - .../Inflector/Rules/Spanish/Inflectible.php | 47 - .../Rules/Spanish/InflectorFactory.php | 21 - .../Inflector/Rules/Spanish/Rules.php | 31 - .../Inflector/Rules/Spanish/Uninflected.php | 30 - .../Doctrine/Inflector/Rules/Substitution.php | 30 - .../Inflector/Rules/Substitutions.php | 57 - .../Inflector/Rules/Transformation.php | 39 - .../Inflector/Rules/Transformations.php | 29 - .../Inflector/Rules/Turkish/Inflectible.php | 34 - .../Rules/Turkish/InflectorFactory.php | 21 - .../Inflector/Rules/Turkish/Rules.php | 31 - .../Inflector/Rules/Turkish/Uninflected.php | 30 - .../lib/Doctrine/Inflector/Rules/Word.php | 21 - .../Doctrine/Inflector/RulesetInflector.php | 56 - .../lib/Doctrine/Inflector/WordInflector.php | 10 - .../instantiator/.doctrine-project.json | 47 - vendor/doctrine/instantiator/CONTRIBUTING.md | 35 - vendor/doctrine/instantiator/README.md | 38 - vendor/doctrine/instantiator/composer.json | 48 - .../doctrine/instantiator/docs/en/index.rst | 68 - .../doctrine/instantiator/docs/en/sidebar.rst | 4 - vendor/doctrine/instantiator/psalm.xml | 16 - .../Exception/ExceptionInterface.php | 14 - .../Exception/InvalidArgumentException.php | 52 - .../Exception/UnexpectedValueException.php | 61 - .../Doctrine/Instantiator/Instantiator.php | 255 - .../Instantiator/InstantiatorInterface.php | 24 - vendor/doctrine/lexer/README.md | 9 - vendor/doctrine/lexer/UPGRADE.md | 22 - vendor/doctrine/lexer/composer.json | 55 - vendor/doctrine/lexer/src/AbstractLexer.php | 328 - vendor/doctrine/lexer/src/Token.php | 56 - vendor/doctrine/migrations/README.md | 11 - vendor/doctrine/migrations/UPGRADE.md | 302 - .../migrations/bin/doctrine-migrations.php | 46 - vendor/doctrine/migrations/composer.json | 81 - .../migrations/src/AbstractMigration.php | 163 - .../src/Configuration/Configuration.php | 212 - .../Connection/ConfigurationFile.php | 51 - .../Connection/ConnectionLoader.php | 23 - .../ConnectionRegistryConnection.php | 39 - .../Exception/ConnectionNotSpecified.php | 17 - .../Connection/Exception/FileNotFound.php | 17 - .../Exception/InvalidConfiguration.php | 28 - .../Connection/Exception/LoaderException.php | 11 - .../Connection/ExistingConnection.php | 24 - .../EntityManager/ConfigurationFile.php | 51 - .../EntityManager/EntityManagerLoader.php | 18 - .../EntityManager/Exception/FileNotFound.php | 17 - .../Exception/InvalidConfiguration.php | 28 - .../Exception/LoaderException.php | 11 - .../EntityManager/ExistingEntityManager.php | 24 - .../ManagerRegistryEntityManager.php | 41 - .../Exception/ConfigurationException.php | 11 - .../Configuration/Exception/FileNotFound.php | 17 - .../Exception/FrozenConfiguration.php | 15 - .../Configuration/Exception/InvalidLoader.php | 31 - .../Exception/UnknownConfigurationValue.php | 25 - .../Migration/ConfigurationArray.php | 110 - .../Migration/ConfigurationFile.php | 35 - .../ConfigurationFileWithFallback.php | 61 - .../Migration/ConfigurationLoader.php | 12 - .../Exception/InvalidConfigurationFormat.php | 18 - .../Exception/InvalidConfigurationKey.php | 18 - .../Migration/Exception/JsonNotValid.php | 16 - .../Exception/MissingConfigurationFile.php | 16 - .../Migration/Exception/XmlNotValid.php | 21 - .../Migration/Exception/YamlNotAvailable.php | 19 - .../Migration/Exception/YamlNotValid.php | 21 - .../Migration/ExistingConfiguration.php | 19 - .../Configuration/Migration/FormattedFile.php | 45 - .../src/Configuration/Migration/JsonFile.php | 46 - .../src/Configuration/Migration/PhpFile.php | 37 - .../Migration/XML/configuration.xsd | 73 - .../src/Configuration/Migration/XmlFile.php | 129 - .../src/Configuration/Migration/YamlFile.php | 55 - .../doctrine/migrations/src/DbalMigrator.php | 140 - .../migrations/src/DependencyFactory.php | 465 - .../Event/Listeners/AutoCommitListener.php | 37 - .../src/Event/MigrationsEventArgs.php | 38 - .../src/Event/MigrationsVersionEventArgs.php | 38 - .../migrations/src/EventDispatcher.php | 73 - vendor/doctrine/migrations/src/Events.php | 17 - .../src/Exception/AbortMigration.php | 11 - .../src/Exception/AlreadyAtVersion.php | 23 - .../src/Exception/ControlException.php | 9 - .../src/Exception/DependencyException.php | 9 - .../Exception/DuplicateMigrationVersion.php | 24 - .../src/Exception/FrozenDependencies.php | 15 - .../src/Exception/FrozenMigration.php | 15 - .../src/Exception/IrreversibleMigration.php | 11 - .../src/Exception/MetadataStorageError.php | 20 - .../src/Exception/MigrationClassNotFound.php | 22 - .../MigrationConfigurationConflict.php | 26 - .../src/Exception/MigrationException.php | 11 - .../src/Exception/MigrationNotAvailable.php | 24 - .../src/Exception/MigrationNotExecuted.php | 23 - .../src/Exception/MissingDependency.php | 20 - .../NoMigrationsFoundWithCriteria.php | 22 - .../src/Exception/NoMigrationsToExecute.php | 20 - .../src/Exception/NoTablesFound.php | 15 - .../src/Exception/PlanAlreadyExecuted.php | 15 - .../migrations/src/Exception/RollupFailed.php | 20 - .../src/Exception/SkipMigration.php | 11 - .../src/Exception/UnknownMigrationVersion.php | 23 - .../migrations/src/FileQueryWriter.php | 58 - .../src/FilesystemMigrationsRepository.php | 139 - .../src/Finder/Exception/FinderException.php | 9 - .../src/Finder/Exception/InvalidDirectory.php | 17 - .../src/Finder/Exception/NameIsReserved.php | 24 - .../doctrine/migrations/src/Finder/Finder.php | 103 - .../migrations/src/Finder/GlobFinder.php | 29 - .../migrations/src/Finder/MigrationFinder.php | 19 - .../src/Finder/RecursiveRegexFinder.php | 70 - .../src/Generator/ClassNameGenerator.php | 25 - .../Generator/ConcatenationFileBuilder.php | 39 - .../src/Generator/DiffGenerator.php | 140 - .../Exception/GeneratorException.php | 11 - .../Exception/InvalidTemplateSpecified.php | 27 - .../Generator/Exception/NoChangesDetected.php | 15 - .../migrations/src/Generator/FileBuilder.php | 19 - .../migrations/src/Generator/Generator.php | 157 - .../migrations/src/Generator/SqlGenerator.php | 96 - .../src/InlineParameterFormatter.php | 83 - .../src/Metadata/AvailableMigration.php | 31 - .../src/Metadata/AvailableMigrationsList.php | 86 - .../src/Metadata/AvailableMigrationsSet.php | 60 - .../src/Metadata/ExecutedMigration.php | 37 - .../src/Metadata/ExecutedMigrationsList.php | 87 - .../migrations/src/Metadata/MigrationPlan.php | 54 - .../src/Metadata/MigrationPlanList.php | 59 - .../src/Metadata/Storage/MetadataStorage.php | 21 - .../Storage/MetadataStorageConfiguration.php | 9 - .../Metadata/Storage/TableMetadataStorage.php | 285 - .../TableMetadataStorageConfiguration.php | 68 - .../migrations/src/MigrationsRepository.php | 18 - vendor/doctrine/migrations/src/Migrator.php | 19 - .../migrations/src/MigratorConfiguration.php | 88 - .../migrations/src/ParameterFormatter.php | 22 - .../src/Provider/DBALSchemaDiffProvider.php | 47 - .../src/Provider/EmptySchemaProvider.php | 28 - .../src/Provider/Exception/NoMappingFound.php | 15 - .../Provider/Exception/ProviderException.php | 11 - .../migrations/src/Provider/LazySchema.php | 14 - .../src/Provider/LazySchemaDiffProvider.php | 52 - .../src/Provider/OrmSchemaProvider.php | 41 - .../src/Provider/SchemaDiffProvider.php | 23 - .../src/Provider/SchemaProvider.php | 16 - .../src/Provider/StubSchemaProvider.php | 26 - .../src/Query/Exception/InvalidArguments.php | 23 - .../doctrine/migrations/src/Query/Query.php | 52 - .../doctrine/migrations/src/QueryWriter.php | 22 - vendor/doctrine/migrations/src/Rollup.php | 48 - .../doctrine/migrations/src/SchemaDumper.php | 158 - .../src/Tools/BooleanStringFormatter.php | 27 - .../migrations/src/Tools/BytesFormatter.php | 27 - .../Tools/Console/Command/CurrentCommand.php | 56 - .../src/Tools/Console/Command/DiffCommand.php | 196 - .../Tools/Console/Command/DoctrineCommand.php | 179 - .../Console/Command/DumpSchemaCommand.php | 133 - .../Tools/Console/Command/ExecuteCommand.php | 178 - .../Tools/Console/Command/GenerateCommand.php | 71 - .../Tools/Console/Command/LatestCommand.php | 53 - .../src/Tools/Console/Command/ListCommand.php | 70 - .../Tools/Console/Command/MigrateCommand.php | 308 - .../Tools/Console/Command/RollupCommand.php | 63 - .../Tools/Console/Command/StatusCommand.php | 42 - .../Console/Command/SyncMetadataCommand.php | 44 - .../Tools/Console/Command/UpToDateCommand.php | 111 - .../Tools/Console/Command/VersionCommand.php | 260 - ...nsoleInputMigratorConfigurationFactory.php | 85 - .../src/Tools/Console/ConsoleLogger.php | 134 - .../src/Tools/Console/ConsoleRunner.php | 154 - .../Console/Exception/ConsoleException.php | 11 - .../Exception/DependenciesNotSatisfied.php | 15 - .../Exception/DirectoryDoesNotExist.php | 17 - .../Exception/FileTypeNotSupported.php | 15 - .../Console/Exception/InvalidOptionUsage.php | 15 - .../SchemaDumpRequiresNoMigrations.php | 20 - .../Exception/VersionAlreadyExists.php | 18 - .../Console/Exception/VersionDoesNotExist.php | 18 - .../Console/Helper/ConfigurationHelper.php | 18 - .../Helper/MigrationDirectoryHelper.php | 59 - .../Helper/MigrationStatusInfosHelper.php | 205 - .../InvalidAllOrNothingConfiguration.php | 16 - .../Console/MigratorConfigurationFactory.php | 13 - .../src/Tools/TransactionHelper.php | 83 - .../migrations/src/Version/AliasResolver.php | 28 - .../src/Version/AlphabeticalComparator.php | 15 - .../migrations/src/Version/Comparator.php | 10 - .../CurrentMigrationStatusCalculator.php | 38 - .../migrations/src/Version/DbalExecutor.php | 324 - .../src/Version/DbalMigrationFactory.php | 31 - .../src/Version/DefaultAliasResolver.php | 115 - .../migrations/src/Version/Direction.php | 23 - .../src/Version/ExecutionResult.php | 155 - .../migrations/src/Version/Executor.php | 21 - .../src/Version/MigrationFactory.php | 15 - .../src/Version/MigrationPlanCalculator.php | 25 - .../src/Version/MigrationStatusCalculator.php | 19 - .../Version/SortedMigrationPlanCalculator.php | 144 - .../doctrine/migrations/src/Version/State.php | 35 - .../migrations/src/Version/Version.php | 24 - vendor/doctrine/orm/README.md | 40 - vendor/doctrine/orm/SECURITY.md | 17 - vendor/doctrine/orm/UPGRADE.md | 2303 ---- vendor/doctrine/orm/composer.json | 65 - vendor/doctrine/orm/doctrine-mapping.xsd | 589 - vendor/doctrine/orm/phpstan-dbal3.neon | 29 - vendor/doctrine/orm/src/AbstractQuery.php | 1116 -- vendor/doctrine/orm/src/Cache.php | 106 - .../orm/src/Cache/AssociationCacheEntry.php | 30 - .../orm/src/Cache/CacheConfiguration.php | 60 - vendor/doctrine/orm/src/Cache/CacheEntry.php | 16 - .../doctrine/orm/src/Cache/CacheException.php | 26 - .../doctrine/orm/src/Cache/CacheFactory.php | 64 - vendor/doctrine/orm/src/Cache/CacheKey.php | 16 - .../orm/src/Cache/CollectionCacheEntry.php | 25 - .../orm/src/Cache/CollectionCacheKey.php | 39 - .../orm/src/Cache/CollectionHydrator.php | 21 - .../orm/src/Cache/ConcurrentRegion.php | 36 - .../doctrine/orm/src/Cache/DefaultCache.php | 245 - .../orm/src/Cache/DefaultCacheFactory.php | 189 - .../src/Cache/DefaultCollectionHydrator.php | 75 - .../orm/src/Cache/DefaultEntityHydrator.php | 176 - .../orm/src/Cache/DefaultQueryCache.php | 414 - .../orm/src/Cache/EntityCacheEntry.php | 50 - .../doctrine/orm/src/Cache/EntityCacheKey.php | 38 - .../doctrine/orm/src/Cache/EntityHydrator.php | 28 - .../src/Cache/Exception/CacheException.php | 14 - .../CannotUpdateReadOnlyCollection.php | 19 - .../Exception/CannotUpdateReadOnlyEntity.php | 15 - .../Cache/Exception/FeatureNotImplemented.php | 23 - .../Cache/Exception/NonCacheableEntity.php | 18 - .../NonCacheableEntityAssociation.php | 19 - vendor/doctrine/orm/src/Cache/Lock.php | 25 - .../doctrine/orm/src/Cache/LockException.php | 14 - .../orm/src/Cache/Logging/CacheLogger.php | 60 - .../src/Cache/Logging/CacheLoggerChain.php | 94 - .../Cache/Logging/StatisticsCacheLogger.php | 174 - .../src/Cache/Persister/CachedPersister.php | 25 - .../AbstractCollectionPersister.php | 168 - .../Collection/CachedCollectionPersister.php | 36 - ...rictReadWriteCachedCollectionPersister.php | 74 - .../ReadOnlyCachedCollectionPersister.php | 24 - .../ReadWriteCachedCollectionPersister.php | 103 - .../Entity/AbstractEntityPersister.php | 557 - .../Entity/CachedEntityPersister.php | 20 - ...onStrictReadWriteCachedEntityPersister.php | 85 - .../Entity/ReadOnlyCachedEntityPersister.php | 19 - .../Entity/ReadWriteCachedEntityPersister.php | 105 - vendor/doctrine/orm/src/Cache/QueryCache.php | 28 - .../orm/src/Cache/QueryCacheEntry.php | 29 - .../doctrine/orm/src/Cache/QueryCacheKey.php | 23 - .../orm/src/Cache/QueryCacheValidator.php | 16 - vendor/doctrine/orm/src/Cache/Region.php | 73 - .../orm/src/Cache/Region/DefaultRegion.php | 113 - .../orm/src/Cache/Region/FileLockRegion.php | 194 - .../src/Cache/Region/UpdateTimestampCache.php | 20 - .../orm/src/Cache/RegionsConfiguration.php | 63 - .../orm/src/Cache/TimestampCacheEntry.php | 29 - .../orm/src/Cache/TimestampCacheKey.php | 17 - .../Cache/TimestampQueryCacheValidator.php | 38 - .../orm/src/Cache/TimestampRegion.php | 18 - vendor/doctrine/orm/src/Configuration.php | 649 - .../src/Decorator/EntityManagerDecorator.php | 174 - vendor/doctrine/orm/src/EntityManager.php | 626 - .../orm/src/EntityManagerInterface.php | 242 - .../orm/src/EntityNotFoundException.php | 46 - vendor/doctrine/orm/src/EntityRepository.php | 236 - .../orm/src/Event/ListenersInvoker.php | 98 - .../src/Event/LoadClassMetadataEventArgs.php | 25 - .../OnClassMetadataNotFoundEventArgs.php | 49 - .../orm/src/Event/OnClearEventArgs.php | 19 - .../orm/src/Event/OnFlushEventArgs.php | 19 - .../orm/src/Event/PostFlushEventArgs.php | 19 - .../orm/src/Event/PostLoadEventArgs.php | 13 - .../orm/src/Event/PostPersistEventArgs.php | 13 - .../orm/src/Event/PostRemoveEventArgs.php | 13 - .../orm/src/Event/PostUpdateEventArgs.php | 13 - .../orm/src/Event/PreFlushEventArgs.php | 19 - .../orm/src/Event/PrePersistEventArgs.php | 13 - .../orm/src/Event/PreRemoveEventArgs.php | 13 - .../orm/src/Event/PreUpdateEventArgs.php | 100 - vendor/doctrine/orm/src/Events.php | 125 - .../src/Exception/ConfigurationException.php | 9 - .../EntityIdentityCollisionException.php | 39 - .../orm/src/Exception/EntityManagerClosed.php | 15 - .../src/Exception/EntityMissingAssignedId.php | 20 - .../src/Exception/InvalidEntityRepository.php | 18 - .../src/Exception/InvalidHydrationMode.php | 17 - .../orm/src/Exception/ManagerException.php | 11 - .../src/Exception/MissingIdentifierField.php | 21 - .../MissingMappingDriverImplementation.php | 18 - .../MultipleSelectorsFoundException.php | 26 - .../orm/src/Exception/NotSupported.php | 44 - .../orm/src/Exception/ORMException.php | 11 - .../orm/src/Exception/PersisterException.php | 11 - .../orm/src/Exception/RepositoryException.php | 13 - .../orm/src/Exception/SchemaToolException.php | 11 - .../Exception/UnexpectedAssociationValue.php | 27 - .../UnrecognizedIdentifierFields.php | 23 - .../orm/src/Id/AbstractIdGenerator.php | 28 - .../doctrine/orm/src/Id/AssignedGenerator.php | 45 - .../src/Id/BigIntegerIdentityGenerator.php | 25 - .../doctrine/orm/src/Id/IdentityGenerator.php | 25 - .../doctrine/orm/src/Id/SequenceGenerator.php | 112 - .../Internal/Hydration/AbstractHydrator.php | 556 - .../src/Internal/Hydration/ArrayHydrator.php | 270 - .../Internal/Hydration/HydrationException.php | 67 - .../src/Internal/Hydration/ObjectHydrator.php | 586 - .../Hydration/ScalarColumnHydrator.php | 34 - .../src/Internal/Hydration/ScalarHydrator.php | 35 - .../Hydration/SimpleObjectHydrator.php | 176 - .../Hydration/SingleScalarHydrator.php | 40 - .../src/Internal/HydrationCompleteHandler.php | 64 - .../src/Internal/NoUnknownNamedArguments.php | 55 - .../doctrine/orm/src/Internal/QueryType.php | 13 - .../orm/src/Internal/SQLResultCasing.php | 30 - .../Internal/StronglyConnectedComponents.php | 159 - .../orm/src/Internal/TopologicalSort.php | 155 - .../CycleDetectedException.php | 47 - .../orm/src/LazyCriteriaCollection.php | 96 - .../orm/src/Mapping/AnsiQuoteStrategy.php | 76 - .../src/Mapping/ArrayAccessImplementation.php | 70 - .../orm/src/Mapping/AssociationMapping.php | 359 - .../orm/src/Mapping/AssociationOverride.php | 51 - .../orm/src/Mapping/AssociationOverrides.php | 38 - .../orm/src/Mapping/AttributeOverride.php | 15 - .../orm/src/Mapping/AttributeOverrides.php | 38 - .../Mapping/Builder/AssociationBuilder.php | 171 - .../Mapping/Builder/ClassMetadataBuilder.php | 426 - .../src/Mapping/Builder/EmbeddedBuilder.php | 46 - .../Mapping/Builder/EntityListenerBuilder.php | 55 - .../orm/src/Mapping/Builder/FieldBuilder.php | 243 - .../Builder/ManyToManyAssociationBuilder.php | 73 - .../Builder/OneToManyAssociationBuilder.php | 46 - vendor/doctrine/orm/src/Mapping/Cache.php | 19 - .../orm/src/Mapping/ChainTypedFieldMapper.php | 35 - .../orm/src/Mapping/ChangeTrackingPolicy.php | 17 - .../orm/src/Mapping/ClassMetadata.php | 2649 ---- .../orm/src/Mapping/ClassMetadataFactory.php | 729 -- vendor/doctrine/orm/src/Mapping/Column.php | 36 - .../orm/src/Mapping/CustomIdGenerator.php | 16 - .../Mapping/DefaultEntityListenerResolver.php | 40 - .../orm/src/Mapping/DefaultNamingStrategy.php | 68 - .../orm/src/Mapping/DefaultQuoteStrategy.php | 145 - .../src/Mapping/DefaultTypedFieldMapper.php | 80 - .../orm/src/Mapping/DiscriminatorColumn.php | 24 - .../Mapping/DiscriminatorColumnMapping.php | 83 - .../orm/src/Mapping/DiscriminatorMap.php | 17 - .../src/Mapping/Driver/AttributeDriver.php | 768 -- .../src/Mapping/Driver/AttributeReader.php | 146 - .../orm/src/Mapping/Driver/DatabaseDriver.php | 528 - .../Mapping/Driver/ReflectionBasedDriver.php | 44 - .../Driver/RepeatableAttributeCollection.php | 16 - .../Mapping/Driver/SimplifiedXmlDriver.php | 25 - .../orm/src/Mapping/Driver/XmlDriver.php | 940 -- .../doctrine/orm/src/Mapping/Embeddable.php | 12 - vendor/doctrine/orm/src/Mapping/Embedded.php | 17 - .../orm/src/Mapping/EmbeddedClassMapping.php | 93 - vendor/doctrine/orm/src/Mapping/Entity.php | 20 - .../src/Mapping/EntityListenerResolver.php | 30 - .../orm/src/Mapping/EntityListeners.php | 21 - .../Exception/InvalidCustomGenerator.php | 28 - .../Exception/UnknownGeneratorType.php | 16 - .../doctrine/orm/src/Mapping/FieldMapping.php | 169 - .../orm/src/Mapping/GeneratedValue.php | 17 - .../orm/src/Mapping/HasLifecycleCallbacks.php | 12 - vendor/doctrine/orm/src/Mapping/Id.php | 12 - vendor/doctrine/orm/src/Mapping/Index.php | 26 - .../orm/src/Mapping/InheritanceType.php | 17 - .../orm/src/Mapping/InverseJoinColumn.php | 13 - .../orm/src/Mapping/InverseSideMapping.php | 30 - .../doctrine/orm/src/Mapping/JoinColumn.php | 13 - .../orm/src/Mapping/JoinColumnMapping.php | 77 - .../orm/src/Mapping/JoinColumnProperties.php | 21 - .../doctrine/orm/src/Mapping/JoinColumns.php | 14 - vendor/doctrine/orm/src/Mapping/JoinTable.php | 35 - .../orm/src/Mapping/JoinTableMapping.php | 115 - .../doctrine/orm/src/Mapping/ManyToMany.php | 27 - .../Mapping/ManyToManyAssociationMapping.php | 9 - .../Mapping/ManyToManyInverseSideMapping.php | 9 - .../Mapping/ManyToManyOwningSideMapping.php | 185 - vendor/doctrine/orm/src/Mapping/ManyToOne.php | 24 - .../Mapping/ManyToOneAssociationMapping.php | 12 - .../orm/src/Mapping/MappedSuperclass.php | 18 - .../orm/src/Mapping/MappingAttribute.php | 10 - .../orm/src/Mapping/MappingException.php | 691 -- .../orm/src/Mapping/NamingStrategy.php | 71 - vendor/doctrine/orm/src/Mapping/OneToMany.php | 26 - .../Mapping/OneToManyAssociationMapping.php | 75 - vendor/doctrine/orm/src/Mapping/OneToOne.php | 26 - .../Mapping/OneToOneAssociationMapping.php | 9 - .../Mapping/OneToOneInverseSideMapping.php | 9 - .../src/Mapping/OneToOneOwningSideMapping.php | 9 - vendor/doctrine/orm/src/Mapping/OrderBy.php | 17 - .../orm/src/Mapping/OwningSideMapping.php | 28 - vendor/doctrine/orm/src/Mapping/PostLoad.php | 12 - .../doctrine/orm/src/Mapping/PostPersist.php | 12 - .../doctrine/orm/src/Mapping/PostRemove.php | 12 - .../doctrine/orm/src/Mapping/PostUpdate.php | 12 - vendor/doctrine/orm/src/Mapping/PreFlush.php | 12 - .../doctrine/orm/src/Mapping/PrePersist.php | 12 - vendor/doctrine/orm/src/Mapping/PreRemove.php | 12 - vendor/doctrine/orm/src/Mapping/PreUpdate.php | 12 - .../orm/src/Mapping/QuoteStrategy.php | 68 - .../Mapping/ReflectionEmbeddedProperty.php | 61 - .../src/Mapping/ReflectionEnumProperty.php | 87 - .../Mapping/ReflectionReadonlyProperty.php | 49 - .../orm/src/Mapping/SequenceGenerator.php | 18 - vendor/doctrine/orm/src/Mapping/Table.php | 45 - .../src/Mapping/ToManyAssociationMapping.php | 16 - ...ToManyAssociationMappingImplementation.php | 69 - .../src/Mapping/ToManyInverseSideMapping.php | 10 - .../src/Mapping/ToManyOwningSideMapping.php | 10 - .../src/Mapping/ToOneAssociationMapping.php | 9 - .../src/Mapping/ToOneInverseSideMapping.php | 52 - .../src/Mapping/ToOneOwningSideMapping.php | 212 - .../orm/src/Mapping/TypedFieldMapper.php | 20 - .../src/Mapping/UnderscoreNamingStrategy.php | 108 - .../orm/src/Mapping/UniqueConstraint.php | 24 - vendor/doctrine/orm/src/Mapping/Version.php | 12 - vendor/doctrine/orm/src/NativeQuery.php | 76 - vendor/doctrine/orm/src/NoResultException.php | 16 - .../orm/src/NonUniqueResultException.php | 18 - .../orm/src/ORMInvalidArgumentException.php | 195 - vendor/doctrine/orm/src/ORMSetup.php | 127 - .../orm/src/OptimisticLockException.php | 55 - .../doctrine/orm/src/PersistentCollection.php | 652 - .../AbstractCollectionPersister.php | 50 - .../Collection/CollectionPersister.php | 59 - .../Collection/ManyToManyPersister.php | 770 -- .../Collection/OneToManyPersister.php | 270 - .../AbstractEntityInheritancePersister.php | 66 - .../Entity/BasicEntityPersister.php | 2110 ---- .../Entity/CachedPersisterContext.php | 60 - .../src/Persisters/Entity/EntityPersister.php | 298 - .../Entity/JoinedSubclassPersister.php | 601 - .../Entity/SingleTablePersister.php | 166 - .../CantUseInOperatorOnCompositeKeys.php | 15 - .../Exception/InvalidOrientation.php | 15 - .../Exception/UnrecognizedField.php | 24 - ...MatchingAssociationFieldRequiresObject.php | 22 - .../orm/src/Persisters/PersisterException.php | 23 - .../src/Persisters/SqlExpressionVisitor.php | 79 - .../orm/src/Persisters/SqlValueVisitor.php | 88 - .../orm/src/PessimisticLockException.php | 16 - vendor/doctrine/orm/src/Proxy/Autoloader.php | 86 - .../Proxy/DefaultProxyClassNameResolver.php | 35 - .../doctrine/orm/src/Proxy/InternalProxy.php | 18 - .../doctrine/orm/src/Proxy/NotAProxyClass.php | 22 - .../doctrine/orm/src/Proxy/ProxyFactory.php | 439 - vendor/doctrine/orm/src/Query.php | 682 - .../orm/src/Query/AST/ASTException.php | 20 - .../orm/src/Query/AST/AggregateExpression.php | 23 - .../src/Query/AST/ArithmeticExpression.php | 34 - .../orm/src/Query/AST/ArithmeticFactor.php | 36 - .../orm/src/Query/AST/ArithmeticTerm.php | 25 - .../orm/src/Query/AST/BetweenExpression.php | 23 - .../orm/src/Query/AST/CoalesceExpression.php | 25 - .../Query/AST/CollectionMemberExpression.php | 27 - .../src/Query/AST/ComparisonExpression.php | 32 - .../src/Query/AST/ConditionalExpression.php | 25 - .../orm/src/Query/AST/ConditionalFactor.php | 26 - .../orm/src/Query/AST/ConditionalPrimary.php | 34 - .../orm/src/Query/AST/ConditionalTerm.php | 25 - .../orm/src/Query/AST/DeleteClause.php | 26 - .../orm/src/Query/AST/DeleteStatement.php | 26 - .../EmptyCollectionComparisonExpression.php | 26 - .../orm/src/Query/AST/ExistsExpression.php | 26 - .../doctrine/orm/src/Query/AST/FromClause.php | 25 - .../src/Query/AST/Functions/AbsFunction.php | 37 - .../src/Query/AST/Functions/AvgFunction.php | 27 - .../Query/AST/Functions/BitAndFunction.php | 43 - .../src/Query/AST/Functions/BitOrFunction.php | 43 - .../Query/AST/Functions/ConcatFunction.php | 58 - .../src/Query/AST/Functions/CountFunction.php | 35 - .../AST/Functions/CurrentDateFunction.php | 29 - .../AST/Functions/CurrentTimeFunction.php | 29 - .../Functions/CurrentTimestampFunction.php | 29 - .../Query/AST/Functions/DateAddFunction.php | 83 - .../Query/AST/Functions/DateDiffFunction.php | 41 - .../Query/AST/Functions/DateSubFunction.php | 62 - .../src/Query/AST/Functions/FunctionNode.php | 32 - .../Query/AST/Functions/IdentityFunction.php | 90 - .../Query/AST/Functions/LengthFunction.php | 45 - .../Query/AST/Functions/LocateFunction.php | 62 - .../src/Query/AST/Functions/LowerFunction.php | 40 - .../src/Query/AST/Functions/MaxFunction.php | 27 - .../src/Query/AST/Functions/MinFunction.php | 27 - .../src/Query/AST/Functions/ModFunction.php | 43 - .../src/Query/AST/Functions/SizeFunction.php | 113 - .../src/Query/AST/Functions/SqrtFunction.php | 40 - .../Query/AST/Functions/SubstringFunction.php | 58 - .../src/Query/AST/Functions/SumFunction.php | 27 - .../src/Query/AST/Functions/TrimFunction.php | 119 - .../src/Query/AST/Functions/UpperFunction.php | 40 - .../src/Query/AST/GeneralCaseExpression.php | 27 - .../orm/src/Query/AST/GroupByClause.php | 20 - .../orm/src/Query/AST/HavingClause.php | 19 - .../AST/IdentificationVariableDeclaration.php | 28 - .../orm/src/Query/AST/InListExpression.php | 23 - .../src/Query/AST/InSubselectExpression.php | 22 - vendor/doctrine/orm/src/Query/AST/IndexBy.php | 26 - .../orm/src/Query/AST/InputParameter.php | 35 - .../src/Query/AST/InstanceOfExpression.php | 29 - vendor/doctrine/orm/src/Query/AST/Join.php | 34 - .../Query/AST/JoinAssociationDeclaration.php | 27 - .../AST/JoinAssociationPathExpression.php | 19 - .../src/Query/AST/JoinClassPathExpression.php | 26 - .../src/Query/AST/JoinVariableDeclaration.php | 24 - .../orm/src/Query/AST/LikeExpression.php | 29 - vendor/doctrine/orm/src/Query/AST/Literal.php | 26 - .../orm/src/Query/AST/NewObjectExpression.php | 25 - vendor/doctrine/orm/src/Query/AST/Node.php | 85 - .../Query/AST/NullComparisonExpression.php | 26 - .../orm/src/Query/AST/NullIfExpression.php | 24 - .../orm/src/Query/AST/OrderByClause.php | 25 - .../orm/src/Query/AST/OrderByItem.php | 38 - .../src/Query/AST/ParenthesisExpression.php | 22 - .../orm/src/Query/AST/PathExpression.php | 39 - .../AST/Phase2OptimizableConditional.php | 17 - .../src/Query/AST/QuantifiedExpression.php | 43 - .../Query/AST/RangeVariableDeclaration.php | 27 - .../orm/src/Query/AST/SelectClause.php | 27 - .../orm/src/Query/AST/SelectExpression.php | 28 - .../orm/src/Query/AST/SelectStatement.php | 32 - .../Query/AST/SimpleArithmeticExpression.php | 25 - .../src/Query/AST/SimpleCaseExpression.php | 28 - .../orm/src/Query/AST/SimpleSelectClause.php | 26 - .../src/Query/AST/SimpleSelectExpression.php | 27 - .../orm/src/Query/AST/SimpleWhenClause.php | 26 - .../doctrine/orm/src/Query/AST/Subselect.php | 32 - .../orm/src/Query/AST/SubselectFromClause.php | 25 - ...electIdentificationVariableDeclaration.php | 19 - .../orm/src/Query/AST/TypedExpression.php | 15 - .../orm/src/Query/AST/UpdateClause.php | 29 - .../doctrine/orm/src/Query/AST/UpdateItem.php | 26 - .../orm/src/Query/AST/UpdateStatement.php | 26 - .../doctrine/orm/src/Query/AST/WhenClause.php | 26 - .../orm/src/Query/AST/WhereClause.php | 24 - .../src/Query/Exec/AbstractSqlExecutor.php | 61 - .../Query/Exec/MultiTableDeleteExecutor.php | 131 - .../Query/Exec/MultiTableUpdateExecutor.php | 180 - .../src/Query/Exec/SingleSelectExecutor.php | 31 - .../Exec/SingleTableDeleteUpdateExecutor.php | 42 - vendor/doctrine/orm/src/Query/Expr.php | 615 - vendor/doctrine/orm/src/Query/Expr/Andx.php | 32 - vendor/doctrine/orm/src/Query/Expr/Base.php | 96 - .../orm/src/Query/Expr/Comparison.php | 47 - .../doctrine/orm/src/Query/Expr/Composite.php | 50 - vendor/doctrine/orm/src/Query/Expr/From.php | 48 - vendor/doctrine/orm/src/Query/Expr/Func.php | 48 - .../doctrine/orm/src/Query/Expr/GroupBy.php | 25 - vendor/doctrine/orm/src/Query/Expr/Join.php | 77 - .../doctrine/orm/src/Query/Expr/Literal.php | 25 - vendor/doctrine/orm/src/Query/Expr/Math.php | 59 - .../doctrine/orm/src/Query/Expr/OrderBy.php | 60 - vendor/doctrine/orm/src/Query/Expr/Orx.php | 32 - vendor/doctrine/orm/src/Query/Expr/Select.php | 28 - .../orm/src/Query/Filter/FilterException.php | 23 - .../orm/src/Query/Filter/SQLFilter.php | 174 - .../orm/src/Query/FilterCollection.php | 260 - vendor/doctrine/orm/src/Query/Lexer.php | 150 - vendor/doctrine/orm/src/Query/Parameter.php | 89 - .../orm/src/Query/ParameterTypeInferer.php | 77 - vendor/doctrine/orm/src/Query/Parser.php | 3269 ----- .../doctrine/orm/src/Query/ParserResult.php | 118 - vendor/doctrine/orm/src/Query/Printer.php | 64 - .../doctrine/orm/src/Query/QueryException.php | 155 - .../orm/src/Query/QueryExpressionVisitor.php | 180 - .../orm/src/Query/ResultSetMapping.php | 547 - .../orm/src/Query/ResultSetMappingBuilder.php | 281 - vendor/doctrine/orm/src/Query/SqlWalker.php | 2264 ---- vendor/doctrine/orm/src/Query/TokenType.php | 91 - vendor/doctrine/orm/src/Query/TreeWalker.php | 44 - .../orm/src/Query/TreeWalkerAdapter.php | 90 - .../orm/src/Query/TreeWalkerChain.php | 88 - vendor/doctrine/orm/src/QueryBuilder.php | 1375 --- .../Repository/DefaultRepositoryFactory.php | 49 - .../Exception/InvalidFindByCall.php | 21 - .../Exception/InvalidMagicMethodCall.php | 27 - .../orm/src/Repository/RepositoryFactory.php | 26 - .../Tools/AttachEntityListenersListener.php | 69 - .../Command/AbstractEntityManagerCommand.php | 25 - .../ClearCache/CollectionRegionCommand.php | 119 - .../ClearCache/EntityRegionCommand.php | 110 - .../Command/ClearCache/MetadataCommand.php | 52 - .../Command/ClearCache/QueryCommand.php | 54 - .../Command/ClearCache/QueryRegionCommand.php | 101 - .../Command/ClearCache/ResultCommand.php | 65 - .../Command/GenerateProxiesCommand.php | 96 - .../src/Tools/Console/Command/InfoCommand.php | 80 - .../Command/MappingDescribeCommand.php | 279 - .../Tools/Console/Command/RunDqlCommand.php | 118 - .../Command/SchemaTool/AbstractCommand.php | 39 - .../Command/SchemaTool/CreateCommand.php | 75 - .../Command/SchemaTool/DropCommand.php | 116 - .../Command/SchemaTool/UpdateCommand.php | 147 - .../Console/Command/ValidateSchemaCommand.php | 89 - .../orm/src/Tools/Console/ConsoleRunner.php | 88 - .../Tools/Console/EntityManagerProvider.php | 14 - .../ConnectionFromManagerProvider.php | 26 - .../SingleManagerProvider.php | 31 - .../UnknownManagerException.php | 23 - .../orm/src/Tools/Console/MetadataFilter.php | 92 - vendor/doctrine/orm/src/Tools/Debug.php | 158 - .../orm/src/Tools/DebugUnitOfWorkListener.php | 144 - .../Tools/Event/GenerateSchemaEventArgs.php | 33 - .../Event/GenerateSchemaTableEventArgs.php | 40 - .../Exception/MissingColumnException.php | 23 - .../orm/src/Tools/Exception/NotSupported.php | 16 - .../Tools/Pagination/CountOutputWalker.php | 125 - .../orm/src/Tools/Pagination/CountWalker.php | 68 - .../RowNumberOverFunctionNotEnabled.php | 16 - .../Pagination/LimitSubqueryOutputWalker.php | 544 - .../Tools/Pagination/LimitSubqueryWalker.php | 155 - .../orm/src/Tools/Pagination/Paginator.php | 263 - .../src/Tools/Pagination/RootTypeWalker.php | 48 - .../Pagination/RowNumberOverFunction.php | 40 - .../src/Tools/Pagination/WhereInWalker.php | 116 - .../src/Tools/ResolveTargetEntityListener.php | 117 - vendor/doctrine/orm/src/Tools/SchemaTool.php | 932 -- .../orm/src/Tools/SchemaValidator.php | 443 - vendor/doctrine/orm/src/Tools/ToolEvents.php | 23 - .../doctrine/orm/src/Tools/ToolsException.php | 24 - .../orm/src/TransactionRequiredException.php | 21 - .../orm/src/UnexpectedResultException.php | 15 - vendor/doctrine/orm/src/UnitOfWork.php | 3252 ----- .../HierarchyDiscriminatorResolver.php | 44 - .../orm/src/Utility/IdentifierFlattener.php | 83 - .../orm/src/Utility/LockSqlHelper.php | 35 - .../orm/src/Utility/PersisterHelper.php | 108 - vendor/doctrine/persistence/CONTRIBUTING.md | 11 - vendor/doctrine/persistence/README.md | 17 - vendor/doctrine/persistence/UPGRADE.md | 154 - vendor/doctrine/persistence/composer.json | 58 - .../Persistence/AbstractManagerRegistry.php | 269 - .../src/Persistence/ConnectionRegistry.php | 41 - .../Persistence/Event/LifecycleEventArgs.php | 54 - .../Event/LoadClassMetadataEventArgs.php | 61 - .../Persistence/Event/ManagerEventArgs.php | 39 - .../Persistence/Event/OnClearEventArgs.php | 42 - .../Persistence/Event/PreUpdateEventArgs.php | 110 - .../src/Persistence/ManagerRegistry.php | 89 - .../Mapping/AbstractClassMetadataFactory.php | 499 - .../src/Persistence/Mapping/ClassMetadata.php | 141 - .../Mapping/ClassMetadataFactory.php | 61 - .../Mapping/Driver/ColocatedMappingDriver.php | 212 - .../Mapping/Driver/DefaultFileLocator.php | 175 - .../Persistence/Mapping/Driver/FileDriver.php | 213 - .../Mapping/Driver/FileLocator.php | 52 - .../Mapping/Driver/MappingDriver.php | 43 - .../Mapping/Driver/MappingDriverChain.php | 142 - .../Persistence/Mapping/Driver/PHPDriver.php | 49 - .../Mapping/Driver/StaticPHPDriver.php | 132 - .../Mapping/Driver/SymfonyFileLocator.php | 265 - .../Persistence/Mapping/MappingException.php | 88 - .../Mapping/ProxyClassNameResolver.php | 19 - .../Persistence/Mapping/ReflectionService.php | 75 - .../Mapping/RuntimeReflectionService.php | 111 - .../Mapping/StaticReflectionService.php | 78 - .../src/Persistence/NotifyPropertyChanged.php | 22 - .../src/Persistence/ObjectManager.php | 145 - .../Persistence/ObjectManagerDecorator.php | 92 - .../src/Persistence/ObjectRepository.php | 73 - .../Persistence/PropertyChangedListener.php | 24 - .../persistence/src/Persistence/Proxy.php | 39 - .../Reflection/EnumReflectionProperty.php | 181 - .../RuntimePublicReflectionProperty.php | 61 - .../Reflection/RuntimeReflectionProperty.php | 87 - .../TypedNoDefaultReflectionProperty.php | 13 - .../TypedNoDefaultReflectionPropertyBase.php | 68 - ...DefaultRuntimePublicReflectionProperty.php | 15 - vendor/doctrine/sql-formatter/CONTRIBUTING.md | 23 - vendor/doctrine/sql-formatter/LICENSE.txt | 21 - vendor/doctrine/sql-formatter/README.md | 137 - vendor/doctrine/sql-formatter/composer.json | 41 - .../sql-formatter/src/CliHighlighter.php | 76 - vendor/doctrine/sql-formatter/src/Cursor.php | 50 - .../sql-formatter/src/Highlighter.php | 56 - .../sql-formatter/src/HtmlHighlighter.php | 92 - .../sql-formatter/src/NullHighlighter.php | 28 - .../sql-formatter/src/SqlFormatter.php | 440 - vendor/doctrine/sql-formatter/src/Token.php | 63 - .../doctrine/sql-formatter/src/Tokenizer.php | 1027 -- vendor/egulias/email-validator/CHANGELOG.md | 32 - .../egulias/email-validator/CONTRIBUTING.md | 153 - vendor/egulias/email-validator/composer.json | 37 - .../email-validator/src/EmailLexer.php | 330 - .../email-validator/src/EmailParser.php | 90 - .../email-validator/src/EmailValidator.php | 67 - .../email-validator/src/MessageIDParser.php | 91 - vendor/egulias/email-validator/src/Parser.php | 78 - .../email-validator/src/Parser/Comment.php | 102 - .../CommentStrategy/CommentStrategy.php | 22 - .../Parser/CommentStrategy/DomainComment.php | 33 - .../Parser/CommentStrategy/LocalComment.php | 37 - .../src/Parser/DomainLiteral.php | 210 - .../email-validator/src/Parser/DomainPart.php | 326 - .../src/Parser/DoubleQuote.php | 91 - .../src/Parser/FoldingWhiteSpace.php | 87 - .../email-validator/src/Parser/IDLeftPart.php | 15 - .../src/Parser/IDRightPart.php | 29 - .../email-validator/src/Parser/LocalPart.php | 162 - .../email-validator/src/Parser/PartParser.php | 63 - .../src/Result/InvalidEmail.php | 49 - .../src/Result/MultipleErrors.php | 56 - .../src/Result/Reason/AtextAfterCFWS.php | 16 - .../src/Result/Reason/CRLFAtTheEnd.php | 19 - .../src/Result/Reason/CRLFX2.php | 16 - .../src/Result/Reason/CRNoLF.php | 16 - .../src/Result/Reason/CharNotAllowed.php | 16 - .../src/Result/Reason/CommaInDomain.php | 16 - .../src/Result/Reason/CommentsInIDRight.php | 16 - .../src/Result/Reason/ConsecutiveAt.php | 17 - .../src/Result/Reason/ConsecutiveDot.php | 16 - .../src/Result/Reason/DetailedReason.php | 13 - .../src/Result/Reason/DomainAcceptsNoMail.php | 16 - .../src/Result/Reason/DomainHyphened.php | 16 - .../src/Result/Reason/DomainTooLong.php | 16 - .../src/Result/Reason/DotAtEnd.php | 16 - .../src/Result/Reason/DotAtStart.php | 16 - .../src/Result/Reason/EmptyReason.php | 16 - .../src/Result/Reason/ExceptionFound.php | 26 - .../src/Result/Reason/ExpectingATEXT.php | 16 - .../src/Result/Reason/ExpectingCTEXT.php | 16 - .../src/Result/Reason/ExpectingDTEXT.php | 16 - .../Reason/ExpectingDomainLiteralClose.php | 16 - .../src/Result/Reason/LabelTooLong.php | 16 - .../Result/Reason/LocalOrReservedDomain.php | 16 - .../src/Result/Reason/NoDNSRecord.php | 16 - .../src/Result/Reason/NoDomainPart.php | 16 - .../src/Result/Reason/NoLocalPart.php | 16 - .../src/Result/Reason/RFCWarnings.php | 16 - .../src/Result/Reason/Reason.php | 16 - .../src/Result/Reason/SpoofEmail.php | 17 - .../src/Result/Reason/UnOpenedComment.php | 16 - .../Result/Reason/UnableToGetDNSRecord.php | 19 - .../src/Result/Reason/UnclosedComment.php | 16 - .../Result/Reason/UnclosedQuotedString.php | 16 - .../src/Result/Reason/UnusualElements.php | 26 - .../email-validator/src/Result/Result.php | 27 - .../email-validator/src/Result/SpoofEmail.php | 13 - .../email-validator/src/Result/ValidEmail.php | 27 - .../src/Validation/DNSCheckValidation.php | 211 - .../src/Validation/DNSGetRecordWrapper.php | 31 - .../src/Validation/DNSRecords.php | 27 - .../src/Validation/EmailValidation.php | 34 - .../Exception/EmptyValidationList.php | 16 - .../Validation/Extra/SpoofCheckValidation.php | 49 - .../src/Validation/MessageIDValidation.php | 55 - .../Validation/MultipleValidationWithAnd.php | 105 - .../Validation/NoRFCWarningsValidation.php | 41 - .../src/Validation/RFCValidation.php | 54 - .../src/Warning/AddressLiteral.php | 14 - .../src/Warning/CFWSNearAt.php | 13 - .../src/Warning/CFWSWithFWS.php | 13 - .../email-validator/src/Warning/Comment.php | 13 - .../src/Warning/DeprecatedComment.php | 13 - .../src/Warning/DomainLiteral.php | 14 - .../src/Warning/EmailTooLong.php | 15 - .../src/Warning/IPV6BadChar.php | 14 - .../src/Warning/IPV6ColonEnd.php | 14 - .../src/Warning/IPV6ColonStart.php | 14 - .../src/Warning/IPV6Deprecated.php | 14 - .../src/Warning/IPV6DoubleColon.php | 14 - .../src/Warning/IPV6GroupCount.php | 14 - .../src/Warning/IPV6MaxGroups.php | 14 - .../src/Warning/LocalTooLong.php | 15 - .../src/Warning/NoDNSMXRecord.php | 14 - .../src/Warning/ObsoleteDTEXT.php | 14 - .../src/Warning/QuotedPart.php | 17 - .../src/Warning/QuotedString.php | 17 - .../email-validator/src/Warning/TLD.php | 13 - .../email-validator/src/Warning/Warning.php | 53 - vendor/masterminds/html5/LICENSE.txt | 66 - vendor/masterminds/html5/README.md | 270 - vendor/masterminds/html5/RELEASE.md | 157 - vendor/masterminds/html5/UPGRADING.md | 21 - vendor/masterminds/html5/bin/entities.php | 26 - vendor/masterminds/html5/composer.json | 40 - vendor/masterminds/html5/src/HTML5.php | 246 - .../masterminds/html5/src/HTML5/Elements.php | 637 - .../masterminds/html5/src/HTML5/Entities.php | 2236 ---- .../masterminds/html5/src/HTML5/Exception.php | 10 - .../html5/src/HTML5/InstructionProcessor.php | 41 - .../src/HTML5/Parser/CharacterReference.php | 61 - .../html5/src/HTML5/Parser/DOMTreeBuilder.php | 715 -- .../html5/src/HTML5/Parser/EventHandler.php | 114 - .../src/HTML5/Parser/FileInputStream.php | 33 - .../html5/src/HTML5/Parser/InputStream.php | 87 - .../html5/src/HTML5/Parser/ParseError.php | 10 - .../html5/src/HTML5/Parser/README.md | 53 - .../html5/src/HTML5/Parser/Scanner.php | 416 - .../src/HTML5/Parser/StringInputStream.php | 336 - .../html5/src/HTML5/Parser/Tokenizer.php | 1214 -- .../src/HTML5/Parser/TreeBuildingRules.php | 127 - .../html5/src/HTML5/Parser/UTF8Utils.php | 177 - .../src/HTML5/Serializer/HTML5Entities.php | 1533 --- .../src/HTML5/Serializer/OutputRules.php | 553 - .../html5/src/HTML5/Serializer/README.md | 33 - .../src/HTML5/Serializer/RulesInterface.php | 99 - .../html5/src/HTML5/Serializer/Traverser.php | 142 - vendor/monolog/monolog/CHANGELOG.md | 757 -- vendor/monolog/monolog/README.md | 136 - vendor/monolog/monolog/composer.json | 77 - .../Monolog/Attribute/AsMonologProcessor.php | 38 - .../Monolog/Attribute/WithMonologChannel.php | 29 - .../monolog/src/Monolog/DateTimeImmutable.php | 48 - .../monolog/src/Monolog/ErrorHandler.php | 279 - .../Monolog/Formatter/ChromePHPFormatter.php | 87 - .../Monolog/Formatter/ElasticaFormatter.php | 89 - .../Formatter/ElasticsearchFormatter.php | 88 - .../Monolog/Formatter/FlowdockFormatter.php | 106 - .../Monolog/Formatter/FluentdFormatter.php | 92 - .../Monolog/Formatter/FormatterInterface.php | 38 - .../Formatter/GelfMessageFormatter.php | 148 - .../Formatter/GoogleCloudLoggingFormatter.php | 40 - .../src/Monolog/Formatter/HtmlFormatter.php | 143 - .../src/Monolog/Formatter/JsonFormatter.php | 220 - .../src/Monolog/Formatter/LineFormatter.php | 316 - .../src/Monolog/Formatter/LogglyFormatter.php | 47 - .../Monolog/Formatter/LogmaticFormatter.php | 70 - .../Monolog/Formatter/LogstashFormatter.php | 102 - .../Monolog/Formatter/MongoDBFormatter.php | 159 - .../Monolog/Formatter/NormalizerFormatter.php | 357 - .../src/Monolog/Formatter/ScalarFormatter.php | 49 - .../src/Monolog/Formatter/SyslogFormatter.php | 65 - .../Monolog/Formatter/WildfireFormatter.php | 139 - .../src/Monolog/Handler/AbstractHandler.php | 104 - .../Handler/AbstractProcessingHandler.php | 60 - .../Monolog/Handler/AbstractSyslogHandler.php | 95 - .../src/Monolog/Handler/AmqpHandler.php | 170 - .../Monolog/Handler/BrowserConsoleHandler.php | 300 - .../src/Monolog/Handler/BufferHandler.php | 165 - .../src/Monolog/Handler/ChromePHPHandler.php | 192 - .../src/Monolog/Handler/CouchDBHandler.php | 97 - .../src/Monolog/Handler/CubeHandler.php | 167 - .../monolog/src/Monolog/Handler/Curl/Util.php | 69 - .../Monolog/Handler/DeduplicationHandler.php | 174 - .../Handler/DoctrineCouchDBHandler.php | 47 - .../src/Monolog/Handler/DynamoDbHandler.php | 80 - .../src/Monolog/Handler/ElasticaHandler.php | 142 - .../Monolog/Handler/ElasticsearchHandler.php | 230 - .../src/Monolog/Handler/ErrorLogHandler.php | 93 - .../Monolog/Handler/FallbackGroupHandler.php | 68 - .../src/Monolog/Handler/FilterHandler.php | 202 - .../ActivationStrategyInterface.php | 27 - .../ChannelLevelActivationStrategy.php | 69 - .../ErrorLevelActivationStrategy.php | 42 - .../Monolog/Handler/FingersCrossedHandler.php | 242 - .../src/Monolog/Handler/FirePHPHandler.php | 174 - .../src/Monolog/Handler/FleepHookHandler.php | 132 - .../src/Monolog/Handler/FlowdockHandler.php | 127 - .../Handler/FormattableHandlerInterface.php | 34 - .../Handler/FormattableHandlerTrait.php | 57 - .../src/Monolog/Handler/GelfHandler.php | 58 - .../src/Monolog/Handler/GroupHandler.php | 130 - .../monolog/src/Monolog/Handler/Handler.php | 62 - .../src/Monolog/Handler/HandlerInterface.php | 76 - .../src/Monolog/Handler/HandlerWrapper.php | 134 - .../src/Monolog/Handler/IFTTTHandler.php | 75 - .../src/Monolog/Handler/InsightOpsHandler.php | 74 - .../src/Monolog/Handler/LogEntriesHandler.php | 68 - .../src/Monolog/Handler/LogglyHandler.php | 156 - .../src/Monolog/Handler/LogmaticHandler.php | 98 - .../src/Monolog/Handler/MailHandler.php | 91 - .../src/Monolog/Handler/MandrillHandler.php | 83 - .../Handler/MissingExtensionException.php | 21 - .../src/Monolog/Handler/MongoDBHandler.php | 82 - .../Monolog/Handler/NativeMailerHandler.php | 173 - .../src/Monolog/Handler/NewRelicHandler.php | 180 - .../src/Monolog/Handler/NoopHandler.php | 42 - .../src/Monolog/Handler/NullHandler.php | 56 - .../src/Monolog/Handler/OverflowHandler.php | 139 - .../src/Monolog/Handler/PHPConsoleHandler.php | 303 - .../src/Monolog/Handler/ProcessHandler.php | 186 - .../Handler/ProcessableHandlerInterface.php | 43 - .../Handler/ProcessableHandlerTrait.php | 70 - .../src/Monolog/Handler/PsrHandler.php | 92 - .../src/Monolog/Handler/PushoverHandler.php | 246 - .../src/Monolog/Handler/RedisHandler.php | 94 - .../Monolog/Handler/RedisPubSubHandler.php | 65 - .../src/Monolog/Handler/RollbarHandler.php | 133 - .../Monolog/Handler/RotatingFileHandler.php | 217 - .../src/Monolog/Handler/SamplingHandler.php | 121 - .../src/Monolog/Handler/SendGridHandler.php | 100 - .../src/Monolog/Handler/Slack/SlackRecord.php | 381 - .../src/Monolog/Handler/SlackHandler.php | 267 - .../Monolog/Handler/SlackWebhookHandler.php | 128 - .../src/Monolog/Handler/SocketHandler.php | 436 - .../src/Monolog/Handler/SqsHandler.php | 61 - .../src/Monolog/Handler/StreamHandler.php | 210 - .../Monolog/Handler/SymfonyMailerHandler.php | 109 - .../src/Monolog/Handler/SyslogHandler.php | 63 - .../Monolog/Handler/SyslogUdp/UdpSocket.php | 77 - .../src/Monolog/Handler/SyslogUdpHandler.php | 154 - .../Monolog/Handler/TelegramBotHandler.php | 297 - .../src/Monolog/Handler/TestHandler.php | 195 - .../Handler/WebRequestRecognizerTrait.php | 23 - .../Handler/WhatFailureGroupHandler.php | 80 - .../Monolog/Handler/ZendMonitorHandler.php | 90 - vendor/monolog/monolog/src/Monolog/Level.php | 209 - .../monolog/monolog/src/Monolog/LogRecord.php | 127 - vendor/monolog/monolog/src/Monolog/Logger.php | 750 -- .../Processor/ClosureContextProcessor.php | 51 - .../src/Monolog/Processor/GitProcessor.php | 75 - .../Monolog/Processor/HostnameProcessor.php | 37 - .../Processor/IntrospectionProcessor.php | 122 - .../Processor/LoadAverageProcessor.php | 66 - .../Processor/MemoryPeakUsageProcessor.php | 39 - .../src/Monolog/Processor/MemoryProcessor.php | 60 - .../Processor/MemoryUsageProcessor.php | 39 - .../Monolog/Processor/MercurialProcessor.php | 75 - .../Monolog/Processor/ProcessIdProcessor.php | 32 - .../Monolog/Processor/ProcessorInterface.php | 27 - .../Processor/PsrLogMessageProcessor.php | 87 - .../src/Monolog/Processor/TagProcessor.php | 65 - .../src/Monolog/Processor/UidProcessor.php | 67 - .../src/Monolog/Processor/WebProcessor.php | 115 - .../monolog/monolog/src/Monolog/Registry.php | 133 - .../src/Monolog/ResettableInterface.php | 31 - .../monolog/src/Monolog/SignalHandler.php | 113 - .../monolog/src/Monolog/Test/TestCase.php | 82 - vendor/monolog/monolog/src/Monolog/Utils.php | 274 - vendor/myclabs/deep-copy/README.md | 406 - vendor/myclabs/deep-copy/composer.json | 43 - .../deep-copy/src/DeepCopy/DeepCopy.php | 313 - .../src/DeepCopy/Exception/CloneException.php | 9 - .../DeepCopy/Exception/PropertyException.php | 9 - .../src/DeepCopy/Filter/ChainableFilter.php | 24 - .../Doctrine/DoctrineCollectionFilter.php | 33 - .../DoctrineEmptyCollectionFilter.php | 28 - .../Filter/Doctrine/DoctrineProxyFilter.php | 22 - .../deep-copy/src/DeepCopy/Filter/Filter.php | 18 - .../src/DeepCopy/Filter/KeepFilter.php | 16 - .../src/DeepCopy/Filter/ReplaceFilter.php | 39 - .../src/DeepCopy/Filter/SetNullFilter.php | 24 - .../Matcher/Doctrine/DoctrineProxyMatcher.php | 22 - .../src/DeepCopy/Matcher/Matcher.php | 14 - .../src/DeepCopy/Matcher/PropertyMatcher.php | 39 - .../DeepCopy/Matcher/PropertyNameMatcher.php | 32 - .../DeepCopy/Matcher/PropertyTypeMatcher.php | 52 - .../DeepCopy/Reflection/ReflectionHelper.php | 78 - .../TypeFilter/Date/DateIntervalFilter.php | 33 - .../src/DeepCopy/TypeFilter/ReplaceFilter.php | 30 - .../DeepCopy/TypeFilter/ShallowCopyFilter.php | 17 - .../TypeFilter/Spl/ArrayObjectFilter.php | 36 - .../TypeFilter/Spl/SplDoublyLinkedList.php | 10 - .../Spl/SplDoublyLinkedListFilter.php | 51 - .../src/DeepCopy/TypeFilter/TypeFilter.php | 13 - .../src/DeepCopy/TypeMatcher/TypeMatcher.php | 29 - .../deep-copy/src/DeepCopy/deep_copy.php | 20 - vendor/nikic/php-parser/README.md | 233 - vendor/nikic/php-parser/composer.json | 43 - .../php-parser/lib/PhpParser/Builder.php | 12 - .../lib/PhpParser/Builder/ClassConst.php | 150 - .../lib/PhpParser/Builder/Class_.php | 151 - .../lib/PhpParser/Builder/Declaration.php | 50 - .../lib/PhpParser/Builder/EnumCase.php | 86 - .../lib/PhpParser/Builder/Enum_.php | 116 - .../lib/PhpParser/Builder/FunctionLike.php | 73 - .../lib/PhpParser/Builder/Function_.php | 67 - .../lib/PhpParser/Builder/Interface_.php | 94 - .../lib/PhpParser/Builder/Method.php | 147 - .../lib/PhpParser/Builder/Namespace_.php | 45 - .../lib/PhpParser/Builder/Param.php | 171 - .../lib/PhpParser/Builder/Property.php | 223 - .../lib/PhpParser/Builder/TraitUse.php | 65 - .../PhpParser/Builder/TraitUseAdaptation.php | 145 - .../lib/PhpParser/Builder/Trait_.php | 83 - .../php-parser/lib/PhpParser/Builder/Use_.php | 49 - .../lib/PhpParser/BuilderFactory.php | 375 - .../lib/PhpParser/BuilderHelpers.php | 338 - .../php-parser/lib/PhpParser/Comment.php | 209 - .../php-parser/lib/PhpParser/Comment/Doc.php | 6 - .../ConstExprEvaluationException.php | 6 - .../lib/PhpParser/ConstExprEvaluator.php | 234 - .../nikic/php-parser/lib/PhpParser/Error.php | 173 - .../php-parser/lib/PhpParser/ErrorHandler.php | 12 - .../lib/PhpParser/ErrorHandler/Collecting.php | 43 - .../lib/PhpParser/ErrorHandler/Throwing.php | 17 - .../lib/PhpParser/Internal/DiffElem.php | 31 - .../lib/PhpParser/Internal/Differ.php | 178 - .../Internal/PrintableNewAnonClassNode.php | 71 - .../lib/PhpParser/Internal/TokenPolyfill.php | 237 - .../lib/PhpParser/Internal/TokenStream.php | 275 - .../php-parser/lib/PhpParser/JsonDecoder.php | 108 - .../nikic/php-parser/lib/PhpParser/Lexer.php | 116 - .../lib/PhpParser/Lexer/Emulative.php | 226 - .../AsymmetricVisibilityTokenEmulator.php | 93 - .../Lexer/TokenEmulator/AttributeEmulator.php | 49 - .../Lexer/TokenEmulator/EnumTokenEmulator.php | 26 - .../TokenEmulator/ExplicitOctalEmulator.php | 45 - .../Lexer/TokenEmulator/KeywordEmulator.php | 60 - .../TokenEmulator/MatchTokenEmulator.php | 19 - .../TokenEmulator/NullsafeTokenEmulator.php | 60 - .../TokenEmulator/PropertyTokenEmulator.php | 19 - .../ReadonlyFunctionTokenEmulator.php | 31 - .../TokenEmulator/ReadonlyTokenEmulator.php | 31 - .../Lexer/TokenEmulator/ReverseEmulator.php | 37 - .../Lexer/TokenEmulator/TokenEmulator.php | 30 - .../php-parser/lib/PhpParser/Modifiers.php | 85 - .../php-parser/lib/PhpParser/NameContext.php | 284 - .../nikic/php-parser/lib/PhpParser/Node.php | 150 - .../php-parser/lib/PhpParser/Node/Arg.php | 44 - .../lib/PhpParser/Node/ArrayItem.php | 43 - .../lib/PhpParser/Node/Attribute.php | 33 - .../lib/PhpParser/Node/AttributeGroup.php | 27 - .../lib/PhpParser/Node/ClosureUse.php | 36 - .../lib/PhpParser/Node/ComplexType.php | 13 - .../php-parser/lib/PhpParser/Node/Const_.php | 36 - .../lib/PhpParser/Node/DeclareItem.php | 37 - .../php-parser/lib/PhpParser/Node/Expr.php | 8 - .../lib/PhpParser/Node/Expr/ArrayDimFetch.php | 33 - .../lib/PhpParser/Node/Expr/ArrayItem.php | 3 - .../lib/PhpParser/Node/Expr/Array_.php | 34 - .../lib/PhpParser/Node/Expr/ArrowFunction.php | 84 - .../lib/PhpParser/Node/Expr/Assign.php | 33 - .../lib/PhpParser/Node/Expr/AssignOp.php | 29 - .../Node/Expr/AssignOp/BitwiseAnd.php | 11 - .../Node/Expr/AssignOp/BitwiseOr.php | 11 - .../Node/Expr/AssignOp/BitwiseXor.php | 11 - .../PhpParser/Node/Expr/AssignOp/Coalesce.php | 11 - .../PhpParser/Node/Expr/AssignOp/Concat.php | 11 - .../lib/PhpParser/Node/Expr/AssignOp/Div.php | 11 - .../PhpParser/Node/Expr/AssignOp/Minus.php | 11 - .../lib/PhpParser/Node/Expr/AssignOp/Mod.php | 11 - .../lib/PhpParser/Node/Expr/AssignOp/Mul.php | 11 - .../lib/PhpParser/Node/Expr/AssignOp/Plus.php | 11 - .../lib/PhpParser/Node/Expr/AssignOp/Pow.php | 11 - .../Node/Expr/AssignOp/ShiftLeft.php | 11 - .../Node/Expr/AssignOp/ShiftRight.php | 11 - .../lib/PhpParser/Node/Expr/AssignRef.php | 33 - .../lib/PhpParser/Node/Expr/BinaryOp.php | 37 - .../Node/Expr/BinaryOp/BitwiseAnd.php | 15 - .../Node/Expr/BinaryOp/BitwiseOr.php | 15 - .../Node/Expr/BinaryOp/BitwiseXor.php | 15 - .../Node/Expr/BinaryOp/BooleanAnd.php | 15 - .../Node/Expr/BinaryOp/BooleanOr.php | 15 - .../PhpParser/Node/Expr/BinaryOp/Coalesce.php | 15 - .../PhpParser/Node/Expr/BinaryOp/Concat.php | 15 - .../lib/PhpParser/Node/Expr/BinaryOp/Div.php | 15 - .../PhpParser/Node/Expr/BinaryOp/Equal.php | 15 - .../PhpParser/Node/Expr/BinaryOp/Greater.php | 15 - .../Node/Expr/BinaryOp/GreaterOrEqual.php | 15 - .../Node/Expr/BinaryOp/Identical.php | 15 - .../Node/Expr/BinaryOp/LogicalAnd.php | 15 - .../Node/Expr/BinaryOp/LogicalOr.php | 15 - .../Node/Expr/BinaryOp/LogicalXor.php | 15 - .../PhpParser/Node/Expr/BinaryOp/Minus.php | 15 - .../lib/PhpParser/Node/Expr/BinaryOp/Mod.php | 15 - .../lib/PhpParser/Node/Expr/BinaryOp/Mul.php | 15 - .../PhpParser/Node/Expr/BinaryOp/NotEqual.php | 15 - .../Node/Expr/BinaryOp/NotIdentical.php | 15 - .../lib/PhpParser/Node/Expr/BinaryOp/Plus.php | 15 - .../lib/PhpParser/Node/Expr/BinaryOp/Pow.php | 15 - .../Node/Expr/BinaryOp/ShiftLeft.php | 15 - .../Node/Expr/BinaryOp/ShiftRight.php | 15 - .../PhpParser/Node/Expr/BinaryOp/Smaller.php | 15 - .../Node/Expr/BinaryOp/SmallerOrEqual.php | 15 - .../Node/Expr/BinaryOp/Spaceship.php | 15 - .../lib/PhpParser/Node/Expr/BitwiseNot.php | 29 - .../lib/PhpParser/Node/Expr/BooleanNot.php | 29 - .../lib/PhpParser/Node/Expr/CallLike.php | 35 - .../lib/PhpParser/Node/Expr/Cast.php | 25 - .../lib/PhpParser/Node/Expr/Cast/Array_.php | 11 - .../lib/PhpParser/Node/Expr/Cast/Bool_.php | 11 - .../lib/PhpParser/Node/Expr/Cast/Double.php | 16 - .../lib/PhpParser/Node/Expr/Cast/Int_.php | 11 - .../lib/PhpParser/Node/Expr/Cast/Object_.php | 11 - .../lib/PhpParser/Node/Expr/Cast/String_.php | 11 - .../lib/PhpParser/Node/Expr/Cast/Unset_.php | 11 - .../PhpParser/Node/Expr/ClassConstFetch.php | 36 - .../lib/PhpParser/Node/Expr/Clone_.php | 29 - .../lib/PhpParser/Node/Expr/Closure.php | 86 - .../lib/PhpParser/Node/Expr/ClosureUse.php | 3 - .../lib/PhpParser/Node/Expr/ConstFetch.php | 30 - .../lib/PhpParser/Node/Expr/Empty_.php | 29 - .../lib/PhpParser/Node/Expr/Error.php | 30 - .../lib/PhpParser/Node/Expr/ErrorSuppress.php | 29 - .../lib/PhpParser/Node/Expr/Eval_.php | 29 - .../lib/PhpParser/Node/Expr/Exit_.php | 33 - .../lib/PhpParser/Node/Expr/FuncCall.php | 38 - .../lib/PhpParser/Node/Expr/Include_.php | 38 - .../lib/PhpParser/Node/Expr/Instanceof_.php | 35 - .../lib/PhpParser/Node/Expr/Isset_.php | 29 - .../lib/PhpParser/Node/Expr/List_.php | 34 - .../lib/PhpParser/Node/Expr/Match_.php | 32 - .../lib/PhpParser/Node/Expr/MethodCall.php | 45 - .../lib/PhpParser/Node/Expr/New_.php | 40 - .../Node/Expr/NullsafeMethodCall.php | 45 - .../Node/Expr/NullsafePropertyFetch.php | 35 - .../lib/PhpParser/Node/Expr/PostDec.php | 29 - .../lib/PhpParser/Node/Expr/PostInc.php | 29 - .../lib/PhpParser/Node/Expr/PreDec.php | 29 - .../lib/PhpParser/Node/Expr/PreInc.php | 29 - .../lib/PhpParser/Node/Expr/Print_.php | 29 - .../lib/PhpParser/Node/Expr/PropertyFetch.php | 35 - .../lib/PhpParser/Node/Expr/ShellExec.php | 30 - .../lib/PhpParser/Node/Expr/StaticCall.php | 45 - .../Node/Expr/StaticPropertyFetch.php | 36 - .../lib/PhpParser/Node/Expr/Ternary.php | 37 - .../lib/PhpParser/Node/Expr/Throw_.php | 29 - .../lib/PhpParser/Node/Expr/UnaryMinus.php | 29 - .../lib/PhpParser/Node/Expr/UnaryPlus.php | 29 - .../lib/PhpParser/Node/Expr/Variable.php | 29 - .../lib/PhpParser/Node/Expr/YieldFrom.php | 29 - .../lib/PhpParser/Node/Expr/Yield_.php | 33 - .../lib/PhpParser/Node/FunctionLike.php | 40 - .../lib/PhpParser/Node/Identifier.php | 85 - .../PhpParser/Node/InterpolatedStringPart.php | 32 - .../lib/PhpParser/Node/IntersectionType.php | 27 - .../lib/PhpParser/Node/MatchArm.php | 30 - .../php-parser/lib/PhpParser/Node/Name.php | 278 - .../PhpParser/Node/Name/FullyQualified.php | 49 - .../lib/PhpParser/Node/Name/Relative.php | 49 - .../lib/PhpParser/Node/NullableType.php | 29 - .../php-parser/lib/PhpParser/Node/Param.php | 110 - .../lib/PhpParser/Node/PropertyHook.php | 78 - .../lib/PhpParser/Node/PropertyItem.php | 37 - .../php-parser/lib/PhpParser/Node/Scalar.php | 6 - .../lib/PhpParser/Node/Scalar/DNumber.php | 3 - .../lib/PhpParser/Node/Scalar/Encapsed.php | 3 - .../Node/Scalar/EncapsedStringPart.php | 3 - .../lib/PhpParser/Node/Scalar/Float_.php | 78 - .../lib/PhpParser/Node/Scalar/Int_.php | 82 - .../Node/Scalar/InterpolatedString.php | 34 - .../lib/PhpParser/Node/Scalar/LNumber.php | 3 - .../lib/PhpParser/Node/Scalar/MagicConst.php | 27 - .../Node/Scalar/MagicConst/Class_.php | 15 - .../PhpParser/Node/Scalar/MagicConst/Dir.php | 15 - .../PhpParser/Node/Scalar/MagicConst/File.php | 15 - .../Node/Scalar/MagicConst/Function_.php | 15 - .../PhpParser/Node/Scalar/MagicConst/Line.php | 15 - .../Node/Scalar/MagicConst/Method.php | 15 - .../Node/Scalar/MagicConst/Namespace_.php | 15 - .../Node/Scalar/MagicConst/Property.php | 15 - .../Node/Scalar/MagicConst/Trait_.php | 15 - .../lib/PhpParser/Node/Scalar/String_.php | 161 - .../lib/PhpParser/Node/StaticVar.php | 39 - .../php-parser/lib/PhpParser/Node/Stmt.php | 8 - .../lib/PhpParser/Node/Stmt/Block.php | 29 - .../lib/PhpParser/Node/Stmt/Break_.php | 29 - .../lib/PhpParser/Node/Stmt/Case_.php | 33 - .../lib/PhpParser/Node/Stmt/Catch_.php | 40 - .../lib/PhpParser/Node/Stmt/ClassConst.php | 77 - .../lib/PhpParser/Node/Stmt/ClassLike.php | 109 - .../lib/PhpParser/Node/Stmt/ClassMethod.php | 154 - .../lib/PhpParser/Node/Stmt/Class_.php | 94 - .../lib/PhpParser/Node/Stmt/Const_.php | 29 - .../lib/PhpParser/Node/Stmt/Continue_.php | 29 - .../PhpParser/Node/Stmt/DeclareDeclare.php | 3 - .../lib/PhpParser/Node/Stmt/Declare_.php | 34 - .../lib/PhpParser/Node/Stmt/Do_.php | 33 - .../lib/PhpParser/Node/Stmt/Echo_.php | 29 - .../lib/PhpParser/Node/Stmt/ElseIf_.php | 33 - .../lib/PhpParser/Node/Stmt/Else_.php | 29 - .../lib/PhpParser/Node/Stmt/EnumCase.php | 36 - .../lib/PhpParser/Node/Stmt/Enum_.php | 44 - .../lib/PhpParser/Node/Stmt/Expression.php | 32 - .../lib/PhpParser/Node/Stmt/Finally_.php | 29 - .../lib/PhpParser/Node/Stmt/For_.php | 47 - .../lib/PhpParser/Node/Stmt/Foreach_.php | 50 - .../lib/PhpParser/Node/Stmt/Function_.php | 81 - .../lib/PhpParser/Node/Stmt/Global_.php | 29 - .../lib/PhpParser/Node/Stmt/Goto_.php | 30 - .../lib/PhpParser/Node/Stmt/GroupUse.php | 41 - .../lib/PhpParser/Node/Stmt/HaltCompiler.php | 29 - .../lib/PhpParser/Node/Stmt/If_.php | 46 - .../lib/PhpParser/Node/Stmt/InlineHTML.php | 29 - .../lib/PhpParser/Node/Stmt/Interface_.php | 40 - .../lib/PhpParser/Node/Stmt/Label.php | 30 - .../lib/PhpParser/Node/Stmt/Namespace_.php | 37 - .../lib/PhpParser/Node/Stmt/Nop.php | 16 - .../lib/PhpParser/Node/Stmt/Property.php | 107 - .../PhpParser/Node/Stmt/PropertyProperty.php | 3 - .../lib/PhpParser/Node/Stmt/Return_.php | 29 - .../lib/PhpParser/Node/Stmt/StaticVar.php | 3 - .../lib/PhpParser/Node/Stmt/Static_.php | 30 - .../lib/PhpParser/Node/Stmt/Switch_.php | 33 - .../lib/PhpParser/Node/Stmt/TraitUse.php | 33 - .../Node/Stmt/TraitUseAdaptation.php | 12 - .../Node/Stmt/TraitUseAdaptation/Alias.php | 37 - .../Stmt/TraitUseAdaptation/Precedence.php | 33 - .../lib/PhpParser/Node/Stmt/Trait_.php | 34 - .../lib/PhpParser/Node/Stmt/TryCatch.php | 37 - .../lib/PhpParser/Node/Stmt/Unset_.php | 29 - .../lib/PhpParser/Node/Stmt/UseUse.php | 3 - .../lib/PhpParser/Node/Stmt/Use_.php | 47 - .../lib/PhpParser/Node/Stmt/While_.php | 33 - .../lib/PhpParser/Node/UnionType.php | 27 - .../php-parser/lib/PhpParser/Node/UseItem.php | 55 - .../lib/PhpParser/Node/VarLikeIdentifier.php | 16 - .../PhpParser/Node/VariadicPlaceholder.php | 27 - .../php-parser/lib/PhpParser/NodeAbstract.php | 181 - .../php-parser/lib/PhpParser/NodeDumper.php | 299 - .../php-parser/lib/PhpParser/NodeFinder.php | 90 - .../lib/PhpParser/NodeTraverser.php | 278 - .../lib/PhpParser/NodeTraverserInterface.php | 26 - .../php-parser/lib/PhpParser/NodeVisitor.php | 124 - .../PhpParser/NodeVisitor/CloningVisitor.php | 19 - .../NodeVisitor/CommentAnnotatingVisitor.php | 82 - .../PhpParser/NodeVisitor/FindingVisitor.php | 47 - .../NodeVisitor/FirstFindingVisitor.php | 49 - .../PhpParser/NodeVisitor/NameResolver.php | 262 - .../NodeVisitor/NodeConnectingVisitor.php | 51 - .../NodeVisitor/ParentConnectingVisitor.php | 38 - .../lib/PhpParser/NodeVisitorAbstract.php | 24 - .../nikic/php-parser/lib/PhpParser/Parser.php | 24 - .../php-parser/lib/PhpParser/Parser/Php7.php | 2787 ----- .../php-parser/lib/PhpParser/Parser/Php8.php | 2799 ----- .../lib/PhpParser/ParserAbstract.php | 1266 -- .../lib/PhpParser/ParserFactory.php | 42 - .../php-parser/lib/PhpParser/PhpVersion.php | 164 - .../lib/PhpParser/PrettyPrinter.php | 51 - .../lib/PhpParser/PrettyPrinter/Standard.php | 1192 -- .../lib/PhpParser/PrettyPrinterAbstract.php | 1666 --- .../nikic/php-parser/lib/PhpParser/Token.php | 18 - .../lib/PhpParser/compatibility_tokens.php | 68 - vendor/phar-io/manifest/.github/FUNDING.yml | 3 - .../phar-io/manifest/.github/workflows/ci.yml | 86 - .../phar-io/manifest/.php-cs-fixer.dist.php | 223 - vendor/phar-io/manifest/CHANGELOG.md | 45 - vendor/phar-io/manifest/README.md | 178 - vendor/phar-io/manifest/composer.json | 43 - vendor/phar-io/manifest/composer.lock | 76 - vendor/phar-io/manifest/manifest.xsd | 116 - .../manifest/src/ManifestDocumentMapper.php | 151 - .../phar-io/manifest/src/ManifestLoader.php | 47 - .../manifest/src/ManifestSerializer.php | 172 - .../exceptions/ElementCollectionException.php | 16 - .../manifest/src/exceptions/Exception.php | 16 - .../InvalidApplicationNameException.php | 17 - .../src/exceptions/InvalidEmailException.php | 16 - .../src/exceptions/InvalidUrlException.php | 16 - .../exceptions/ManifestDocumentException.php | 16 - .../ManifestDocumentLoadingException.php | 47 - .../ManifestDocumentMapperException.php | 16 - .../exceptions/ManifestElementException.php | 16 - .../exceptions/ManifestLoaderException.php | 14 - .../exceptions/NoEmailAddressException.php | 16 - .../manifest/src/values/Application.php | 17 - .../manifest/src/values/ApplicationName.php | 41 - vendor/phar-io/manifest/src/values/Author.php | 57 - .../manifest/src/values/AuthorCollection.php | 40 - .../src/values/AuthorCollectionIterator.php | 47 - .../manifest/src/values/BundledComponent.php | 34 - .../src/values/BundledComponentCollection.php | 40 - .../BundledComponentCollectionIterator.php | 47 - .../src/values/CopyrightInformation.php | 32 - vendor/phar-io/manifest/src/values/Email.php | 35 - .../phar-io/manifest/src/values/Extension.php | 47 - .../phar-io/manifest/src/values/Library.php | 17 - .../phar-io/manifest/src/values/License.php | 32 - .../phar-io/manifest/src/values/Manifest.php | 93 - .../src/values/PhpExtensionRequirement.php | 24 - .../src/values/PhpVersionRequirement.php | 26 - .../manifest/src/values/Requirement.php | 14 - .../src/values/RequirementCollection.php | 40 - .../values/RequirementCollectionIterator.php | 47 - vendor/phar-io/manifest/src/values/Type.php | 42 - vendor/phar-io/manifest/src/values/Url.php | 38 - .../manifest/src/xml/AuthorElement.php | 25 - .../src/xml/AuthorElementCollection.php | 19 - .../manifest/src/xml/BundlesElement.php | 19 - .../manifest/src/xml/ComponentElement.php | 21 - .../src/xml/ComponentElementCollection.php | 19 - .../manifest/src/xml/ContainsElement.php | 31 - .../manifest/src/xml/CopyrightElement.php | 25 - .../manifest/src/xml/ElementCollection.php | 68 - .../phar-io/manifest/src/xml/ExtElement.php | 17 - .../manifest/src/xml/ExtElementCollection.php | 19 - .../manifest/src/xml/ExtensionElement.php | 21 - .../manifest/src/xml/LicenseElement.php | 21 - .../manifest/src/xml/ManifestDocument.php | 115 - .../manifest/src/xml/ManifestElement.php | 72 - .../phar-io/manifest/src/xml/PhpElement.php | 27 - .../manifest/src/xml/RequiresElement.php | 19 - .../PhpdocSingleLineVarFixer.php | 72 - .../manifest/tools/php-cs-fixer.d/header.txt | 6 - vendor/phar-io/version/CHANGELOG.md | 142 - vendor/phar-io/version/README.md | 61 - vendor/phar-io/version/composer.json | 34 - vendor/phar-io/version/src/BuildMetaData.php | 28 - .../phar-io/version/src/PreReleaseSuffix.php | 82 - vendor/phar-io/version/src/Version.php | 208 - .../version/src/VersionConstraintParser.php | 115 - .../version/src/VersionConstraintValue.php | 88 - vendor/phar-io/version/src/VersionNumber.php | 28 - .../constraints/AbstractVersionConstraint.php | 23 - .../constraints/AndVersionConstraintGroup.php | 34 - .../src/constraints/AnyVersionConstraint.php | 20 - .../constraints/ExactVersionConstraint.php | 22 - .../GreaterThanOrEqualToVersionConstraint.php | 26 - .../constraints/OrVersionConstraintGroup.php | 35 - ...SpecificMajorAndMinorVersionConstraint.php | 33 - .../SpecificMajorVersionConstraint.php | 25 - .../src/constraints/VersionConstraint.php | 16 - .../version/src/exceptions/Exception.php | 15 - .../InvalidPreReleaseSuffixException.php | 5 - .../exceptions/InvalidVersionException.php | 5 - .../exceptions/NoBuildMetaDataException.php | 5 - .../NoPreReleaseSuffixException.php | 5 - .../UnsupportedVersionConstraintException.php | 13 - .../reflection-common/.github/dependabot.yml | 7 - .../.github/workflows/push.yml | 223 - .../phpdocumentor/reflection-common/README.md | 11 - .../reflection-common/composer.json | 28 - .../reflection-common/src/Element.php | 30 - .../reflection-common/src/File.php | 35 - .../reflection-common/src/Fqsen.php | 89 - .../reflection-common/src/Location.php | 53 - .../reflection-common/src/Project.php | 25 - .../reflection-common/src/ProjectFactory.php | 28 - .../reflection-docblock/README.md | 74 - .../reflection-docblock/composer.json | 57 - .../reflection-docblock/src/DocBlock.php | 228 - .../src/DocBlock/Description.php | 118 - .../src/DocBlock/DescriptionFactory.php | 178 - .../src/DocBlock/ExampleFinder.php | 158 - .../src/DocBlock/Serializer.php | 156 - .../src/DocBlock/StandardTagFactory.php | 364 - .../reflection-docblock/src/DocBlock/Tag.php | 31 - .../src/DocBlock/TagFactory.php | 73 - .../src/DocBlock/Tags/Author.php | 102 - .../src/DocBlock/Tags/BaseTag.php | 53 - .../src/DocBlock/Tags/Covers.php | 99 - .../src/DocBlock/Tags/Deprecated.php | 108 - .../src/DocBlock/Tags/Example.php | 197 - .../Tags/Factory/AbstractPHPStanFactory.php | 122 - .../src/DocBlock/Tags/Factory/Factory.php | 41 - .../DocBlock/Tags/Factory/MethodFactory.php | 81 - .../DocBlock/Tags/Factory/PHPStanFactory.php | 16 - .../DocBlock/Tags/Factory/ParamFactory.php | 92 - .../DocBlock/Tags/Factory/PropertyFactory.php | 54 - .../Tags/Factory/PropertyReadFactory.php | 54 - .../Tags/Factory/PropertyWriteFactory.php | 54 - .../DocBlock/Tags/Factory/ReturnFactory.php | 52 - .../DocBlock/Tags/Factory/StaticMethod.php | 25 - .../src/DocBlock/Tags/Factory/VarFactory.php | 54 - .../src/DocBlock/Tags/Formatter.php | 24 - .../Tags/Formatter/AlignFormatter.php | 50 - .../Tags/Formatter/PassthroughFormatter.php | 30 - .../src/DocBlock/Tags/Generic.php | 89 - .../src/DocBlock/Tags/InvalidTag.php | 142 - .../src/DocBlock/Tags/Link.php | 76 - .../src/DocBlock/Tags/Method.php | 358 - .../src/DocBlock/Tags/MethodParameter.php | 67 - .../src/DocBlock/Tags/Param.php | 185 - .../src/DocBlock/Tags/Property.php | 132 - .../src/DocBlock/Tags/PropertyRead.php | 132 - .../src/DocBlock/Tags/PropertyWrite.php | 132 - .../src/DocBlock/Tags/Reference/Fqsen.php | 37 - .../src/DocBlock/Tags/Reference/Reference.php | 22 - .../src/DocBlock/Tags/Reference/Url.php | 35 - .../src/DocBlock/Tags/Return_.php | 76 - .../src/DocBlock/Tags/See.php | 104 - .../src/DocBlock/Tags/Since.php | 102 - .../src/DocBlock/Tags/Source.php | 115 - .../src/DocBlock/Tags/TagWithType.php | 74 - .../src/DocBlock/Tags/Throws.php | 64 - .../src/DocBlock/Tags/Uses.php | 98 - .../src/DocBlock/Tags/Var_.php | 132 - .../src/DocBlock/Tags/Version.php | 105 - .../src/DocBlockFactory.php | 313 - .../src/DocBlockFactoryInterface.php | 23 - .../src/Exception/PcreException.php | 44 - .../reflection-docblock/src/Utils.php | 62 - vendor/phpdocumentor/type-resolver/README.md | 177 - .../phpdocumentor/type-resolver/composer.json | 51 - .../type-resolver/src/FqsenResolver.php | 80 - .../type-resolver/src/PseudoType.php | 19 - .../src/PseudoTypes/ArrayShape.php | 52 - .../src/PseudoTypes/ArrayShapeItem.php | 65 - .../src/PseudoTypes/CallableString.php | 39 - .../src/PseudoTypes/ConstExpression.php | 55 - .../type-resolver/src/PseudoTypes/False_.php | 40 - .../src/PseudoTypes/FloatValue.php | 45 - .../src/PseudoTypes/HtmlEscapedString.php | 39 - .../src/PseudoTypes/IntegerRange.php | 61 - .../src/PseudoTypes/IntegerValue.php | 45 - .../type-resolver/src/PseudoTypes/List_.php | 50 - .../src/PseudoTypes/LiteralString.php | 39 - .../src/PseudoTypes/LowercaseString.php | 39 - .../src/PseudoTypes/NegativeInteger.php | 39 - .../src/PseudoTypes/NonEmptyList.php | 50 - .../PseudoTypes/NonEmptyLowercaseString.php | 39 - .../src/PseudoTypes/NonEmptyString.php | 39 - .../src/PseudoTypes/NumericString.php | 39 - .../src/PseudoTypes/Numeric_.php | 47 - .../src/PseudoTypes/PositiveInteger.php | 39 - .../src/PseudoTypes/StringValue.php | 47 - .../src/PseudoTypes/TraitString.php | 39 - .../type-resolver/src/PseudoTypes/True_.php | 40 - .../phpdocumentor/type-resolver/src/Type.php | 25 - .../type-resolver/src/TypeResolver.php | 634 - .../type-resolver/src/Types/AbstractList.php | 83 - .../src/Types/AggregatedType.php | 125 - .../type-resolver/src/Types/ArrayKey.php | 42 - .../type-resolver/src/Types/Array_.php | 29 - .../type-resolver/src/Types/Boolean.php | 32 - .../src/Types/CallableParameter.php | 77 - .../type-resolver/src/Types/Callable_.php | 57 - .../type-resolver/src/Types/ClassString.php | 62 - .../type-resolver/src/Types/Collection.php | 68 - .../type-resolver/src/Types/Compound.php | 38 - .../type-resolver/src/Types/Context.php | 95 - .../src/Types/ContextFactory.php | 422 - .../type-resolver/src/Types/Expression.php | 51 - .../type-resolver/src/Types/Float_.php | 32 - .../type-resolver/src/Types/Integer.php | 32 - .../src/Types/InterfaceString.php | 56 - .../type-resolver/src/Types/Intersection.php | 37 - .../type-resolver/src/Types/Iterable_.php | 38 - .../type-resolver/src/Types/Mixed_.php | 32 - .../type-resolver/src/Types/Never_.php | 35 - .../type-resolver/src/Types/Null_.php | 32 - .../type-resolver/src/Types/Nullable.php | 51 - .../type-resolver/src/Types/Object_.php | 69 - .../type-resolver/src/Types/Parent_.php | 34 - .../type-resolver/src/Types/Resource_.php | 32 - .../type-resolver/src/Types/Scalar.php | 32 - .../type-resolver/src/Types/Self_.php | 34 - .../type-resolver/src/Types/Static_.php | 39 - .../type-resolver/src/Types/String_.php | 32 - .../type-resolver/src/Types/This.php | 35 - .../type-resolver/src/Types/Void_.php | 35 - vendor/phpstan/phpdoc-parser/README.md | 121 - vendor/phpstan/phpdoc-parser/composer.json | 44 - .../src/Ast/AbstractNodeVisitor.php | 34 - .../phpdoc-parser/src/Ast/Attribute.php | 16 - .../Ast/ConstExpr/ConstExprArrayItemNode.php | 36 - .../src/Ast/ConstExpr/ConstExprArrayNode.php | 30 - .../src/Ast/ConstExpr/ConstExprFalseNode.php | 17 - .../src/Ast/ConstExpr/ConstExprFloatNode.php | 26 - .../Ast/ConstExpr/ConstExprIntegerNode.php | 26 - .../src/Ast/ConstExpr/ConstExprNode.php | 10 - .../src/Ast/ConstExpr/ConstExprNullNode.php | 17 - .../src/Ast/ConstExpr/ConstExprStringNode.php | 26 - .../src/Ast/ConstExpr/ConstExprTrueNode.php | 17 - .../src/Ast/ConstExpr/ConstFetchNode.php | 35 - .../ConstExpr/DoctrineConstExprStringNode.php | 42 - .../QuoteAwareConstExprStringNode.php | 78 - vendor/phpstan/phpdoc-parser/src/Ast/Node.php | 22 - .../phpdoc-parser/src/Ast/NodeAttributes.php | 38 - .../phpdoc-parser/src/Ast/NodeTraverser.php | 312 - .../phpdoc-parser/src/Ast/NodeVisitor.php | 87 - .../src/Ast/NodeVisitor/CloningVisitor.php | 20 - .../Ast/PhpDoc/AssertTagMethodValueNode.php | 50 - .../Ast/PhpDoc/AssertTagPropertyValueNode.php | 50 - .../src/Ast/PhpDoc/AssertTagValueNode.php | 46 - .../src/Ast/PhpDoc/DeprecatedTagValueNode.php | 27 - .../PhpDoc/Doctrine/DoctrineAnnotation.php | 35 - .../Ast/PhpDoc/Doctrine/DoctrineArgument.php | 43 - .../src/Ast/PhpDoc/Doctrine/DoctrineArray.php | 32 - .../Ast/PhpDoc/Doctrine/DoctrineArrayItem.php | 47 - .../PhpDoc/Doctrine/DoctrineTagValueNode.php | 36 - .../src/Ast/PhpDoc/ExtendsTagValueNode.php | 32 - .../src/Ast/PhpDoc/GenericTagValueNode.php | 26 - .../src/Ast/PhpDoc/ImplementsTagValueNode.php | 32 - .../src/Ast/PhpDoc/InvalidTagValueNode.php | 53 - .../src/Ast/PhpDoc/MethodTagValueNode.php | 58 - .../PhpDoc/MethodTagValueParameterNode.php | 49 - .../src/Ast/PhpDoc/MixinTagValueNode.php | 32 - .../PhpDoc/ParamClosureThisTagValueNode.php | 35 - ...ImmediatelyInvokedCallableTagValueNode.php | 30 - .../ParamLaterInvokedCallableTagValueNode.php | 30 - .../src/Ast/PhpDoc/ParamOutTagValueNode.php | 35 - .../src/Ast/PhpDoc/ParamTagValueNode.php | 46 - .../src/Ast/PhpDoc/PhpDocChildNode.php | 10 - .../src/Ast/PhpDoc/PhpDocNode.php | 450 - .../src/Ast/PhpDoc/PhpDocTagNode.php | 36 - .../src/Ast/PhpDoc/PhpDocTagValueNode.php | 10 - .../src/Ast/PhpDoc/PhpDocTextNode.php | 26 - .../src/Ast/PhpDoc/PropertyTagValueNode.php | 36 - ...PureUnlessCallableIsImpureTagValueNode.php | 30 - .../Ast/PhpDoc/RequireExtendsTagValueNode.php | 32 - .../PhpDoc/RequireImplementsTagValueNode.php | 32 - .../src/Ast/PhpDoc/ReturnTagValueNode.php | 32 - .../src/Ast/PhpDoc/SelfOutTagValueNode.php | 32 - .../src/Ast/PhpDoc/TemplateTagValueNode.php | 50 - .../src/Ast/PhpDoc/ThrowsTagValueNode.php | 32 - .../PhpDoc/TypeAliasImportTagValueNode.php | 38 - .../src/Ast/PhpDoc/TypeAliasTagValueNode.php | 32 - .../Ast/PhpDoc/TypelessParamTagValueNode.php | 41 - .../src/Ast/PhpDoc/UsesTagValueNode.php | 32 - .../src/Ast/PhpDoc/VarTagValueNode.php | 36 - .../src/Ast/Type/ArrayShapeItemNode.php | 49 - .../src/Ast/Type/ArrayShapeNode.php | 57 - .../Ast/Type/ArrayShapeUnsealedTypeNode.php | 34 - .../src/Ast/Type/ArrayTypeNode.php | 34 - .../src/Ast/Type/CallableTypeNode.php | 52 - .../Ast/Type/CallableTypeParameterNode.php | 48 - .../Type/ConditionalTypeForParameterNode.php | 49 - .../src/Ast/Type/ConditionalTypeNode.php | 49 - .../src/Ast/Type/ConstTypeNode.php | 26 - .../src/Ast/Type/GenericTypeNode.php | 58 - .../src/Ast/Type/IdentifierTypeNode.php | 26 - .../src/Ast/Type/IntersectionTypeNode.php | 37 - .../src/Ast/Type/InvalidTypeNode.php | 38 - .../src/Ast/Type/NullableTypeNode.php | 26 - .../src/Ast/Type/ObjectShapeItemNode.php | 48 - .../src/Ast/Type/ObjectShapeNode.php | 31 - .../src/Ast/Type/OffsetAccessTypeNode.php | 36 - .../src/Ast/Type/ThisTypeNode.php | 17 - .../phpdoc-parser/src/Ast/Type/TypeNode.php | 10 - .../src/Ast/Type/UnionTypeNode.php | 37 - .../phpstan/phpdoc-parser/src/Lexer/Lexer.php | 198 - .../src/Parser/ConstExprParser.php | 333 - .../src/Parser/ParserException.php | 106 - .../phpdoc-parser/src/Parser/PhpDocParser.php | 1301 -- .../src/Parser/StringUnescaper.php | 100 - .../src/Parser/TokenIterator.php | 383 - .../phpdoc-parser/src/Parser/TypeParser.php | 1098 -- .../phpdoc-parser/src/Printer/DiffElem.php | 44 - .../phpdoc-parser/src/Printer/Differ.php | 196 - .../phpdoc-parser/src/Printer/Printer.php | 870 -- .../php-code-coverage/ChangeLog-9.2.md | 584 - vendor/phpunit/php-code-coverage/README.md | 48 - .../build/scripts/extract-release-notes.php | 47 - .../phpunit/php-code-coverage/composer.json | 69 - .../php-code-coverage/src/CodeCoverage.php | 709 -- .../php-code-coverage/src/Driver/Driver.php | 167 - .../src/Driver/PcovDriver.php | 75 - .../src/Driver/PhpdbgDriver.php | 93 - .../php-code-coverage/src/Driver/Selector.php | 79 - .../src/Driver/Xdebug2Driver.php | 128 - .../src/Driver/Xdebug3Driver.php | 119 - ...chAndPathCoverageNotSupportedException.php | 16 - ...DeadCodeDetectionNotSupportedException.php | 16 - .../DirectoryCouldNotBeCreatedException.php | 17 - .../src/Exception/Exception.php | 16 - .../Exception/InvalidArgumentException.php | 14 - ...NoCodeCoverageDriverAvailableException.php | 20 - ...hPathCoverageSupportAvailableException.php | 20 - .../src/Exception/ParserException.php | 16 - .../PathExistsButIsNotDirectoryException.php | 22 - .../Exception/PcovNotAvailableException.php | 21 - .../Exception/PhpdbgNotAvailableException.php | 21 - .../src/Exception/ReflectionException.php | 16 - .../ReportAlreadyFinalizedException.php | 20 - ...ticAnalysisCacheNotConfiguredException.php | 16 - .../src/Exception/TestIdMissingException.php | 20 - .../UnintentionallyCoveredCodeException.php | 43 - .../WriteOperationFailedException.php | 22 - .../Exception/WrongXdebugVersionException.php | 17 - .../Exception/Xdebug2NotEnabledException.php | 21 - .../Exception/Xdebug3NotEnabledException.php | 21 - .../Exception/XdebugNotAvailableException.php | 21 - .../src/Exception/XmlException.php | 16 - .../phpunit/php-code-coverage/src/Filter.php | 118 - .../src/Node/AbstractNode.php | 253 - .../php-code-coverage/src/Node/Builder.php | 264 - .../php-code-coverage/src/Node/CrapIndex.php | 50 - .../php-code-coverage/src/Node/Directory.php | 440 - .../php-code-coverage/src/Node/File.php | 651 - .../php-code-coverage/src/Node/Iterator.php | 90 - .../src/ProcessedCodeCoverageData.php | 255 - .../src/RawCodeCoverageData.php | 274 - .../php-code-coverage/src/Report/Clover.php | 258 - .../src/Report/Cobertura.php | 309 - .../php-code-coverage/src/Report/Crap4j.php | 156 - .../src/Report/Html/Facade.php | 147 - .../src/Report/Html/Renderer.php | 314 - .../src/Report/Html/Renderer/Dashboard.php | 288 - .../src/Report/Html/Renderer/Directory.php | 113 - .../src/Report/Html/Renderer/File.php | 1162 -- .../Html/Renderer/Template/branches.html.dist | 9 - .../Renderer/Template/coverage_bar.html.dist | 5 - .../Template/coverage_bar_branch.html.dist | 5 - .../Renderer/Template/css/bootstrap.min.css | 7 - .../Html/Renderer/Template/css/custom.css | 0 .../Html/Renderer/Template/css/nv.d3.min.css | 1 - .../Html/Renderer/Template/css/octicons.css | 5 - .../Html/Renderer/Template/css/style.css | 158 - .../Renderer/Template/dashboard.html.dist | 281 - .../Template/dashboard_branch.html.dist | 281 - .../Renderer/Template/directory.html.dist | 60 - .../Template/directory_branch.html.dist | 62 - .../Template/directory_item.html.dist | 13 - .../Template/directory_item_branch.html.dist | 19 - .../Html/Renderer/Template/file.html.dist | 65 - .../Renderer/Template/file_branch.html.dist | 67 - .../Renderer/Template/file_item.html.dist | 14 - .../Template/file_item_branch.html.dist | 20 - .../Renderer/Template/icons/file-code.svg | 1 - .../Template/icons/file-directory.svg | 1 - .../Renderer/Template/js/bootstrap.min.js | 7 - .../Html/Renderer/Template/js/d3.min.js | 5 - .../Report/Html/Renderer/Template/js/file.js | 62 - .../Html/Renderer/Template/js/jquery.min.js | 2 - .../Html/Renderer/Template/js/nv.d3.min.js | 8 - .../Html/Renderer/Template/js/popper.min.js | 5 - .../Html/Renderer/Template/line.html.dist | 1 - .../Html/Renderer/Template/lines.html.dist | 5 - .../Renderer/Template/method_item.html.dist | 12 - .../Template/method_item_branch.html.dist | 18 - .../Html/Renderer/Template/paths.html.dist | 9 - .../php-code-coverage/src/Report/PHP.php | 41 - .../php-code-coverage/src/Report/Text.php | 341 - .../src/Report/Xml/BuildInformation.php | 88 - .../src/Report/Xml/Coverage.php | 74 - .../src/Report/Xml/Directory.php | 17 - .../src/Report/Xml/Facade.php | 315 - .../php-code-coverage/src/Report/Xml/File.php | 87 - .../src/Report/Xml/Method.php | 61 - .../php-code-coverage/src/Report/Xml/Node.php | 93 - .../src/Report/Xml/Project.php | 90 - .../src/Report/Xml/Report.php | 99 - .../src/Report/Xml/Source.php | 42 - .../src/Report/Xml/Tests.php | 50 - .../src/Report/Xml/Totals.php | 146 - .../php-code-coverage/src/Report/Xml/Unit.php | 78 - .../src/StaticAnalysis/CacheWarmer.php | 32 - .../StaticAnalysis/CachingFileAnalyser.php | 209 - .../StaticAnalysis/CodeUnitFindingVisitor.php | 345 - .../ExecutableLinesFindingVisitor.php | 390 - .../src/StaticAnalysis/FileAnalyser.php | 31 - .../IgnoredLinesFindingVisitor.php | 119 - .../StaticAnalysis/ParsingFileAnalyser.php | 249 - .../php-code-coverage/src/Util/Filesystem.php | 37 - .../php-code-coverage/src/Util/Percentage.php | 66 - .../phpunit/php-code-coverage/src/Version.php | 30 - .../php-file-iterator/.psalm/baseline.xml | 8 - .../php-file-iterator/.psalm/config.xml | 16 - vendor/phpunit/php-file-iterator/ChangeLog.md | 144 - vendor/phpunit/php-file-iterator/README.md | 14 - .../phpunit/php-file-iterator/composer.json | 45 - .../phpunit/php-file-iterator/src/Facade.php | 115 - .../phpunit/php-file-iterator/src/Factory.php | 91 - .../php-file-iterator/src/Iterator.php | 119 - vendor/phpunit/php-invoker/ChangeLog.md | 48 - vendor/phpunit/php-invoker/README.md | 18 - vendor/phpunit/php-invoker/composer.json | 54 - vendor/phpunit/php-invoker/src/Invoker.php | 69 - .../php-invoker/src/exceptions/Exception.php | 16 - ...cessControlExtensionNotLoadedException.php | 16 - .../src/exceptions/TimeoutException.php | 16 - .../php-text-template/.psalm/baseline.xml | 2 - .../php-text-template/.psalm/config.xml | 16 - vendor/phpunit/php-text-template/ChangeLog.md | 43 - vendor/phpunit/php-text-template/README.md | 12 - .../phpunit/php-text-template/composer.json | 43 - .../php-text-template/src/Template.php | 107 - .../src/exceptions/Exception.php | 16 - .../exceptions/InvalidArgumentException.php | 14 - .../src/exceptions/RuntimeException.php | 16 - vendor/phpunit/php-timer/.psalm/baseline.xml | 2 - vendor/phpunit/php-timer/.psalm/config.xml | 16 - vendor/phpunit/php-timer/ChangeLog.md | 138 - vendor/phpunit/php-timer/README.md | 104 - vendor/phpunit/php-timer/composer.json | 45 - vendor/phpunit/php-timer/src/Duration.php | 109 - .../php-timer/src/ResourceUsageFormatter.php | 73 - vendor/phpunit/php-timer/src/Timer.php | 40 - .../php-timer/src/exceptions/Exception.php | 16 - .../src/exceptions/NoActiveTimerException.php | 16 - ...nceStartOfRequestNotAvailableException.php | 16 - vendor/phpunit/phpunit/ChangeLog-9.6.md | 180 - vendor/phpunit/phpunit/DEPRECATIONS.md | 89 - vendor/phpunit/phpunit/README.md | 35 - vendor/phpunit/phpunit/SECURITY.md | 33 - vendor/phpunit/phpunit/composer.json | 90 - vendor/phpunit/phpunit/composer.lock | 1666 --- vendor/phpunit/phpunit/phpunit.xsd | 330 - vendor/phpunit/phpunit/schema/8.5.xsd | 319 - vendor/phpunit/phpunit/schema/9.0.xsd | 315 - vendor/phpunit/phpunit/schema/9.1.xsd | 317 - vendor/phpunit/phpunit/schema/9.2.xsd | 317 - vendor/phpunit/phpunit/schema/9.3.xsd | 327 - vendor/phpunit/phpunit/schema/9.4.xsd | 328 - vendor/phpunit/phpunit/schema/9.5.xsd | 330 - vendor/phpunit/phpunit/src/Exception.php | 19 - .../phpunit/phpunit/src/Framework/Assert.php | 2963 ----- .../src/Framework/Assert/Functions.php | 3079 ----- .../Framework/Constraint/Boolean/IsFalse.php | 35 - .../Framework/Constraint/Boolean/IsTrue.php | 35 - .../src/Framework/Constraint/Callback.php | 52 - .../Constraint/Cardinality/Count.php | 142 - .../Constraint/Cardinality/GreaterThan.php | 52 - .../Constraint/Cardinality/IsEmpty.php | 70 - .../Constraint/Cardinality/LessThan.php | 52 - .../Constraint/Cardinality/SameSize.php | 21 - .../src/Framework/Constraint/Constraint.php | 270 - .../Framework/Constraint/Equality/IsEqual.php | 137 - .../Equality/IsEqualCanonicalizing.php | 109 - .../Equality/IsEqualIgnoringCase.php | 109 - .../Constraint/Equality/IsEqualWithDelta.php | 101 - .../Constraint/Exception/Exception.php | 85 - .../Constraint/Exception/ExceptionCode.php | 68 - .../Constraint/Exception/ExceptionMessage.php | 78 - .../ExceptionMessageRegularExpression.php | 74 - .../Constraint/Filesystem/DirectoryExists.php | 54 - .../Constraint/Filesystem/FileExists.php | 54 - .../Constraint/Filesystem/IsReadable.php | 54 - .../Constraint/Filesystem/IsWritable.php | 54 - .../src/Framework/Constraint/IsAnything.php | 51 - .../src/Framework/Constraint/IsIdentical.php | 127 - .../src/Framework/Constraint/JsonMatches.php | 110 - .../JsonMatchesErrorMessageProvider.php | 78 - .../Framework/Constraint/Math/IsFinite.php | 37 - .../Framework/Constraint/Math/IsInfinite.php | 37 - .../src/Framework/Constraint/Math/IsNan.php | 37 - .../Constraint/Object/ClassHasAttribute.php | 90 - .../Object/ClassHasStaticAttribute.php | 61 - .../Constraint/Object/ObjectEquals.php | 151 - .../Constraint/Object/ObjectHasAttribute.php | 31 - .../Constraint/Object/ObjectHasProperty.php | 84 - .../Constraint/Operator/BinaryOperator.php | 148 - .../Constraint/Operator/LogicalAnd.php | 51 - .../Constraint/Operator/LogicalNot.php | 143 - .../Constraint/Operator/LogicalOr.php | 51 - .../Constraint/Operator/LogicalXor.php | 63 - .../Constraint/Operator/Operator.php | 55 - .../Constraint/Operator/UnaryOperator.php | 142 - .../Framework/Constraint/String/IsJson.php | 79 - .../Constraint/String/RegularExpression.php | 51 - .../Constraint/String/StringContains.php | 85 - .../Constraint/String/StringEndsWith.php | 48 - .../String/StringMatchesFormatDescription.php | 109 - .../Constraint/String/StringStartsWith.php | 52 - .../Constraint/Traversable/ArrayHasKey.php | 78 - .../Traversable/TraversableContains.php | 65 - .../Traversable/TraversableContainsEqual.php | 40 - .../TraversableContainsIdentical.php | 39 - .../Traversable/TraversableContainsOnly.php | 93 - .../Constraint/Type/IsInstanceOf.php | 88 - .../src/Framework/Constraint/Type/IsNull.php | 35 - .../src/Framework/Constraint/Type/IsType.php | 212 - .../src/Framework/DataProviderTestSuite.php | 76 - .../src/Framework/Error/Deprecated.php | 17 - .../phpunit/src/Framework/Error/Error.php | 26 - .../phpunit/src/Framework/Error/Notice.php | 17 - .../phpunit/src/Framework/Error/Warning.php | 17 - .../phpunit/src/Framework/ErrorTestCase.php | 66 - .../ActualValueIsNotAnObjectException.php | 32 - .../Exception/AssertionFailedError.php | 24 - .../Exception/CodeCoverageException.php | 17 - ...hodDoesNotAcceptParameterTypeException.php | 38 - ...dDoesNotDeclareBoolReturnTypeException.php | 37 - ...NotDeclareExactlyOneParameterException.php | 37 - ...odDoesNotDeclareParameterTypeException.php | 37 - .../ComparisonMethodDoesNotExistException.php | 37 - .../CoveredCodeNotExecutedException.php | 17 - .../phpunit/src/Framework/Exception/Error.php | 24 - .../src/Framework/Exception/Exception.php | 81 - .../Exception/ExpectationFailedException.php | 42 - .../Exception/IncompleteTestError.php | 17 - .../Exception/InvalidArgumentException.php | 46 - .../InvalidCoversTargetException.php | 17 - .../InvalidDataProviderException.php | 17 - .../MissingCoversAnnotationException.php | 17 - .../Exception/NoChildTestSuiteException.php | 17 - .../src/Framework/Exception/OutputError.php | 17 - .../Exception/PHPTAssertionFailedError.php | 32 - .../Framework/Exception/RiskyTestError.php | 17 - .../Framework/Exception/SkippedTestError.php | 17 - .../Exception/SkippedTestSuiteError.php | 17 - .../Framework/Exception/SyntheticError.php | 61 - .../Exception/SyntheticSkippedError.php | 17 - .../UnintentionallyCoveredCodeError.php | 17 - .../src/Framework/Exception/Warning.php | 24 - .../src/Framework/ExceptionWrapper.php | 138 - .../Framework/ExecutionOrderDependency.php | 206 - .../phpunit/src/Framework/IncompleteTest.php | 19 - .../src/Framework/IncompleteTestCase.php | 68 - .../InvalidParameterGroupException.php | 17 - .../src/Framework/MockObject/Api/Api.php | 97 - .../src/Framework/MockObject/Api/Method.php | 30 - .../Framework/MockObject/Builder/Identity.php | 25 - .../MockObject/Builder/InvocationMocker.php | 309 - .../MockObject/Builder/InvocationStubber.php | 65 - .../MockObject/Builder/MethodNameMatch.php | 28 - .../MockObject/Builder/ParametersMatch.php | 58 - .../src/Framework/MockObject/Builder/Stub.php | 24 - .../MockObject/ConfigurableMethod.php | 53 - .../Exception/BadMethodCallException.php | 17 - .../CannotUseAddMethodsException.php | 29 - .../CannotUseOnlyMethodsException.php | 29 - .../Exception/ClassAlreadyExistsException.php | 28 - .../Exception/ClassIsFinalException.php | 28 - .../Exception/ClassIsReadonlyException.php | 28 - ...ableMethodsAlreadyInitializedException.php | 17 - .../Exception/DuplicateMethodException.php | 35 - .../MockObject/Exception/Exception.php | 19 - .../IncompatibleReturnValueException.php | 36 - .../Exception/InvalidMethodNameException.php | 28 - .../MatchBuilderNotFoundException.php | 28 - .../MatcherAlreadyRegisteredException.php | 28 - .../MethodCannotBeConfiguredException.php | 28 - .../MethodNameAlreadyConfiguredException.php | 21 - .../MethodNameNotConfiguredException.php | 21 - ...odParametersAlreadyConfiguredException.php | 21 - ...ConstructorInvocationRequiredException.php | 21 - .../Exception/ReflectionException.php | 19 - .../ReturnValueNotConfiguredException.php | 29 - .../MockObject/Exception/RuntimeException.php | 17 - .../SoapExtensionNotAvailableException.php | 23 - .../Exception/UnknownClassException.php | 28 - .../Exception/UnknownTraitException.php | 28 - .../Exception/UnknownTypeException.php | 28 - .../src/Framework/MockObject/Generator.php | 1160 -- .../MockObject/Generator/deprecation.tpl | 2 - .../MockObject/Generator/intersection.tpl | 5 - .../MockObject/Generator/mocked_class.tpl | 6 - .../MockObject/Generator/mocked_method.tpl | 22 - .../Generator/mocked_method_never_or_void.tpl | 20 - .../Generator/mocked_static_method.tpl | 5 - .../MockObject/Generator/proxied_method.tpl | 22 - .../proxied_method_never_or_void.tpl | 22 - .../MockObject/Generator/trait_class.tpl | 6 - .../MockObject/Generator/wsdl_class.tpl | 9 - .../MockObject/Generator/wsdl_method.tpl | 4 - .../src/Framework/MockObject/Invocation.php | 301 - .../MockObject/InvocationHandler.php | 186 - .../src/Framework/MockObject/Matcher.php | 275 - .../MockObject/MethodNameConstraint.php | 48 - .../src/Framework/MockObject/MockBuilder.php | 519 - .../src/Framework/MockObject/MockClass.php | 69 - .../src/Framework/MockObject/MockMethod.php | 380 - .../Framework/MockObject/MockMethodSet.php | 45 - .../src/Framework/MockObject/MockObject.php | 27 - .../src/Framework/MockObject/MockTrait.php | 54 - .../src/Framework/MockObject/MockType.php | 21 - .../MockObject/Rule/AnyInvokedCount.php | 36 - .../MockObject/Rule/AnyParameters.php | 31 - .../MockObject/Rule/ConsecutiveParameters.php | 134 - .../MockObject/Rule/InvocationOrder.php | 47 - .../MockObject/Rule/InvokedAtIndex.php | 76 - .../MockObject/Rule/InvokedAtLeastCount.php | 64 - .../MockObject/Rule/InvokedAtLeastOnce.php | 50 - .../MockObject/Rule/InvokedAtMostCount.php | 64 - .../MockObject/Rule/InvokedCount.php | 102 - .../Framework/MockObject/Rule/MethodName.php | 69 - .../Framework/MockObject/Rule/Parameters.php | 161 - .../MockObject/Rule/ParametersRule.php | 28 - .../phpunit/src/Framework/MockObject/Stub.php | 26 - .../MockObject/Stub/ConsecutiveCalls.php | 57 - .../Framework/MockObject/Stub/Exception.php | 46 - .../MockObject/Stub/ReturnArgument.php | 41 - .../MockObject/Stub/ReturnCallback.php | 59 - .../MockObject/Stub/ReturnReference.php | 45 - .../Framework/MockObject/Stub/ReturnSelf.php | 32 - .../Framework/MockObject/Stub/ReturnStub.php | 45 - .../MockObject/Stub/ReturnValueMap.php | 53 - .../src/Framework/MockObject/Stub/Stub.php | 27 - .../src/Framework/MockObject/Verifiable.php | 26 - .../phpunit/src/Framework/Reorderable.php | 28 - .../phpunit/src/Framework/SelfDescribing.php | 21 - .../phpunit/src/Framework/SkippedTest.php | 19 - .../phpunit/src/Framework/SkippedTestCase.php | 68 - vendor/phpunit/phpunit/src/Framework/Test.php | 23 - .../phpunit/src/Framework/TestBuilder.php | 239 - .../phpunit/src/Framework/TestCase.php | 2678 ---- .../phpunit/src/Framework/TestFailure.php | 155 - .../phpunit/src/Framework/TestListener.php | 45 - .../TestListenerDefaultImplementation.php | 60 - .../phpunit/src/Framework/TestResult.php | 1324 -- .../phpunit/src/Framework/TestSuite.php | 922 -- .../src/Framework/TestSuiteIterator.php | 85 - .../phpunit/src/Framework/WarningTestCase.php | 66 - .../phpunit/src/Runner/BaseTestRunner.php | 161 - .../src/Runner/DefaultTestResultCache.php | 158 - .../phpunit/phpunit/src/Runner/Exception.php | 19 - .../src/Runner/Extension/ExtensionHandler.php | 118 - .../src/Runner/Extension/PharLoader.php | 98 - .../Filter/ExcludeGroupFilterIterator.php | 23 - .../phpunit/src/Runner/Filter/Factory.php | 61 - .../src/Runner/Filter/GroupFilterIterator.php | 58 - .../Filter/IncludeGroupFilterIterator.php | 23 - .../src/Runner/Filter/NameFilterIterator.php | 138 - .../Runner/Hook/AfterIncompleteTestHook.php | 24 - .../src/Runner/Hook/AfterLastTestHook.php | 24 - .../src/Runner/Hook/AfterRiskyTestHook.php | 24 - .../src/Runner/Hook/AfterSkippedTestHook.php | 24 - .../Runner/Hook/AfterSuccessfulTestHook.php | 24 - .../src/Runner/Hook/AfterTestErrorHook.php | 24 - .../src/Runner/Hook/AfterTestFailureHook.php | 24 - .../phpunit/src/Runner/Hook/AfterTestHook.php | 30 - .../src/Runner/Hook/AfterTestWarningHook.php | 24 - .../src/Runner/Hook/BeforeFirstTestHook.php | 24 - .../src/Runner/Hook/BeforeTestHook.php | 24 - .../phpunit/phpunit/src/Runner/Hook/Hook.php | 23 - .../phpunit/src/Runner/Hook/TestHook.php | 23 - .../src/Runner/Hook/TestListenerAdapter.php | 141 - .../src/Runner/NullTestResultCache.php | 42 - .../phpunit/src/Runner/PhptTestCase.php | 866 -- .../src/Runner/ResultCacheExtension.php | 110 - .../src/Runner/StandardTestSuiteLoader.php | 152 - .../phpunit/src/Runner/TestResultCache.php | 28 - .../phpunit/src/Runner/TestSuiteLoader.php | 24 - .../phpunit/src/Runner/TestSuiteSorter.php | 395 - vendor/phpunit/phpunit/src/Runner/Version.php | 76 - .../src/TextUI/CliArguments/Builder.php | 886 -- .../src/TextUI/CliArguments/Configuration.php | 2108 ---- .../src/TextUI/CliArguments/Exception.php | 19 - .../src/TextUI/CliArguments/Mapper.php | 365 - vendor/phpunit/phpunit/src/TextUI/Command.php | 1042 -- .../src/TextUI/DefaultResultPrinter.php | 585 - .../src/TextUI/Exception/Exception.php | 19 - .../TextUI/Exception/ReflectionException.php | 19 - .../src/TextUI/Exception/RuntimeException.php | 17 - .../TestDirectoryNotFoundException.php | 29 - .../Exception/TestFileNotFoundException.php | 29 - vendor/phpunit/phpunit/src/TextUI/Help.php | 281 - .../phpunit/src/TextUI/ResultPrinter.php | 23 - .../phpunit/phpunit/src/TextUI/TestRunner.php | 1262 -- .../phpunit/src/TextUI/TestSuiteMapper.php | 103 - .../CodeCoverage/CodeCoverage.php | 363 - .../CodeCoverage/Filter/Directory.php | 66 - .../Filter/DirectoryCollection.php | 60 - .../Filter/DirectoryCollectionIterator.php | 68 - .../CodeCoverage/FilterMapper.php | 45 - .../CodeCoverage/Report/Clover.php | 35 - .../CodeCoverage/Report/Cobertura.php | 35 - .../CodeCoverage/Report/Crap4j.php | 46 - .../CodeCoverage/Report/Html.php | 57 - .../CodeCoverage/Report/Php.php | 35 - .../CodeCoverage/Report/Text.php | 57 - .../CodeCoverage/Report/Xml.php | 35 - .../TextUI/XmlConfiguration/Configuration.php | 152 - .../src/TextUI/XmlConfiguration/Exception.php | 19 - .../XmlConfiguration/Filesystem/Directory.php | 33 - .../Filesystem/DirectoryCollection.php | 65 - .../DirectoryCollectionIterator.php | 68 - .../XmlConfiguration/Filesystem/File.php | 33 - .../Filesystem/FileCollection.php | 65 - .../Filesystem/FileCollectionIterator.php | 68 - .../src/TextUI/XmlConfiguration/Generator.php | 73 - .../TextUI/XmlConfiguration/Group/Group.php | 33 - .../Group/GroupCollection.php | 72 - .../Group/GroupCollectionIterator.php | 68 - .../TextUI/XmlConfiguration/Group/Groups.php | 54 - .../src/TextUI/XmlConfiguration/Loader.php | 1273 -- .../TextUI/XmlConfiguration/Logging/Junit.php | 35 - .../XmlConfiguration/Logging/Logging.php | 147 - .../XmlConfiguration/Logging/TeamCity.php | 35 - .../XmlConfiguration/Logging/TestDox/Html.php | 35 - .../XmlConfiguration/Logging/TestDox/Text.php | 35 - .../XmlConfiguration/Logging/TestDox/Xml.php | 35 - .../TextUI/XmlConfiguration/Logging/Text.php | 35 - .../Migration/MigrationBuilder.php | 62 - .../Migration/MigrationBuilderException.php | 20 - .../Migration/MigrationException.php | 20 - .../Migration/Migrations/ConvertLogTypes.php | 53 - .../Migrations/CoverageCloverToReport.php | 31 - .../Migrations/CoverageCrap4jToReport.php | 33 - .../Migrations/CoverageHtmlToReport.php | 33 - .../Migrations/CoveragePhpToReport.php | 31 - .../Migrations/CoverageTextToReport.php | 33 - .../Migrations/CoverageXmlToReport.php | 31 - .../Migrations/IntroduceCoverageElement.php | 28 - .../Migrations/LogToReportMigration.php | 79 - .../Migration/Migrations/Migration.php | 20 - ...ttributesFromFilterWhitelistToCoverage.php | 51 - .../MoveAttributesFromRootToCoverage.php | 47 - .../MoveWhitelistExcludesToCoverage.php | 72 - .../MoveWhitelistIncludesToCoverage.php | 53 - .../Migrations/RemoveCacheTokensAttribute.php | 27 - .../Migrations/RemoveEmptyFilter.php | 54 - .../Migration/Migrations/RemoveLogTypes.php | 40 - .../Migrations/UpdateSchemaLocationTo93.php | 27 - .../XmlConfiguration/Migration/Migrator.php | 57 - .../TextUI/XmlConfiguration/PHP/Constant.php | 44 - .../PHP/ConstantCollection.php | 60 - .../PHP/ConstantCollectionIterator.php | 68 - .../XmlConfiguration/PHP/IniSetting.php | 44 - .../PHP/IniSettingCollection.php | 60 - .../PHP/IniSettingCollectionIterator.php | 68 - .../src/TextUI/XmlConfiguration/PHP/Php.php | 143 - .../XmlConfiguration/PHP/PhpHandler.php | 121 - .../TextUI/XmlConfiguration/PHP/Variable.php | 55 - .../PHP/VariableCollection.php | 60 - .../PHP/VariableCollectionIterator.php | 68 - .../XmlConfiguration/PHPUnit/Extension.php | 73 - .../PHPUnit/ExtensionCollection.php | 53 - .../PHPUnit/ExtensionCollectionIterator.php | 68 - .../XmlConfiguration/PHPUnit/PHPUnit.php | 715 -- .../TestSuite/TestDirectory.php | 79 - .../TestSuite/TestDirectoryCollection.php | 65 - .../TestDirectoryCollectionIterator.php | 68 - .../XmlConfiguration/TestSuite/TestFile.php | 57 - .../TestSuite/TestFileCollection.php | 65 - .../TestSuite/TestFileCollectionIterator.php | 68 - .../XmlConfiguration/TestSuite/TestSuite.php | 66 - .../TestSuite/TestSuiteCollection.php | 65 - .../TestSuite/TestSuiteCollectionIterator.php | 68 - .../phpunit/src/Util/Annotation/DocBlock.php | 546 - .../phpunit/src/Util/Annotation/Registry.php | 95 - vendor/phpunit/phpunit/src/Util/Blacklist.php | 41 - vendor/phpunit/phpunit/src/Util/Cloner.php | 34 - vendor/phpunit/phpunit/src/Util/Color.php | 159 - .../phpunit/phpunit/src/Util/ErrorHandler.php | 165 - vendor/phpunit/phpunit/src/Util/Exception.php | 19 - .../phpunit/phpunit/src/Util/ExcludeList.php | 240 - .../phpunit/phpunit/src/Util/FileLoader.php | 84 - .../phpunit/phpunit/src/Util/Filesystem.php | 41 - vendor/phpunit/phpunit/src/Util/Filter.php | 115 - .../phpunit/phpunit/src/Util/GlobalState.php | 287 - .../src/Util/InvalidDataSetException.php | 20 - vendor/phpunit/phpunit/src/Util/Json.php | 98 - vendor/phpunit/phpunit/src/Util/Log/JUnit.php | 424 - .../phpunit/phpunit/src/Util/Log/TeamCity.php | 384 - .../src/Util/PHP/AbstractPhpProcess.php | 427 - .../src/Util/PHP/DefaultPhpProcess.php | 236 - .../src/Util/PHP/Template/PhptTestCase.tpl | 57 - .../src/Util/PHP/Template/TestCaseClass.tpl | 123 - .../src/Util/PHP/Template/TestCaseMethod.tpl | 126 - .../src/Util/PHP/WindowsPhpProcess.php | 52 - vendor/phpunit/phpunit/src/Util/Printer.php | 116 - .../phpunit/phpunit/src/Util/Reflection.php | 63 - .../phpunit/src/Util/RegularExpression.php | 31 - vendor/phpunit/phpunit/src/Util/Test.php | 784 -- .../src/Util/TestDox/CliTestDoxPrinter.php | 384 - .../src/Util/TestDox/HtmlResultPrinter.php | 159 - .../src/Util/TestDox/NamePrettifier.php | 313 - .../src/Util/TestDox/ResultPrinter.php | 345 - .../src/Util/TestDox/TestDoxPrinter.php | 392 - .../src/Util/TestDox/TextResultPrinter.php | 52 - .../src/Util/TestDox/XmlResultPrinter.php | 262 - .../phpunit/src/Util/TextTestListRenderer.php | 55 - vendor/phpunit/phpunit/src/Util/Type.php | 39 - .../src/Util/VersionComparisonOperator.php | 58 - .../src/Util/XdebugFilterScriptGenerator.php | 81 - vendor/phpunit/phpunit/src/Util/Xml.php | 193 - .../phpunit/src/Util/Xml/Exception.php | 19 - .../Util/Xml/FailedSchemaDetectionResult.php | 19 - .../phpunit/phpunit/src/Util/Xml/Loader.php | 117 - .../src/Util/Xml/SchemaDetectionResult.php | 34 - .../phpunit/src/Util/Xml/SchemaDetector.php | 41 - .../phpunit/src/Util/Xml/SchemaFinder.php | 80 - .../phpunit/src/Util/Xml/SnapshotNodeList.php | 51 - .../Xml/SuccessfulSchemaDetectionResult.php | 47 - .../phpunit/src/Util/Xml/ValidationResult.php | 70 - .../phpunit/src/Util/Xml/Validator.php | 35 - .../phpunit/src/Util/XmlTestListRenderer.php | 92 - vendor/psr/cache/CHANGELOG.md | 16 - vendor/psr/cache/LICENSE.txt | 19 - vendor/psr/cache/README.md | 12 - vendor/psr/cache/composer.json | 25 - vendor/psr/cache/src/CacheException.php | 10 - vendor/psr/cache/src/CacheItemInterface.php | 105 - .../psr/cache/src/CacheItemPoolInterface.php | 138 - .../cache/src/InvalidArgumentException.php | 13 - vendor/psr/clock/CHANGELOG.md | 11 - vendor/psr/clock/README.md | 61 - vendor/psr/clock/composer.json | 21 - vendor/psr/clock/src/ClockInterface.php | 13 - vendor/psr/container/.gitignore | 3 - vendor/psr/container/README.md | 13 - vendor/psr/container/composer.json | 27 - .../src/ContainerExceptionInterface.php | 12 - .../psr/container/src/ContainerInterface.php | 36 - .../src/NotFoundExceptionInterface.php | 10 - vendor/psr/event-dispatcher/.editorconfig | 15 - vendor/psr/event-dispatcher/.gitignore | 2 - vendor/psr/event-dispatcher/README.md | 6 - vendor/psr/event-dispatcher/composer.json | 26 - .../src/EventDispatcherInterface.php | 21 - .../src/ListenerProviderInterface.php | 19 - .../src/StoppableEventInterface.php | 26 - vendor/psr/link/.editorconfig | 12 - vendor/psr/link/CHANGELOG.md | 26 - vendor/psr/link/LICENSE.md | 21 - vendor/psr/link/README.md | 12 - vendor/psr/link/composer.json | 30 - .../psr/link/src/EvolvableLinkInterface.php | 80 - .../src/EvolvableLinkProviderInterface.php | 37 - vendor/psr/link/src/LinkInterface.php | 54 - vendor/psr/link/src/LinkProviderInterface.php | 34 - vendor/psr/log/README.md | 58 - vendor/psr/log/composer.json | 26 - vendor/psr/log/src/AbstractLogger.php | 15 - .../psr/log/src/InvalidArgumentException.php | 7 - vendor/psr/log/src/LogLevel.php | 18 - vendor/psr/log/src/LoggerAwareInterface.php | 14 - vendor/psr/log/src/LoggerAwareTrait.php | 22 - vendor/psr/log/src/LoggerInterface.php | 98 - vendor/psr/log/src/LoggerTrait.php | 98 - vendor/psr/log/src/NullLogger.php | 26 - vendor/sebastian/cli-parser/ChangeLog.md | 23 - vendor/sebastian/cli-parser/README.md | 17 - vendor/sebastian/cli-parser/composer.json | 41 - vendor/sebastian/cli-parser/infection.json | 12 - vendor/sebastian/cli-parser/src/Parser.php | 204 - .../exceptions/AmbiguousOptionException.php | 26 - .../cli-parser/src/exceptions/Exception.php | 16 - .../OptionDoesNotAllowArgumentException.php | 26 - ...RequiredOptionArgumentMissingException.php | 26 - .../src/exceptions/UnknownOptionException.php | 26 - .../code-unit-reverse-lookup/ChangeLog.md | 38 - .../code-unit-reverse-lookup/README.md | 20 - .../code-unit-reverse-lookup/composer.json | 36 - .../code-unit-reverse-lookup/src/Wizard.php | 125 - .../sebastian/code-unit/.psalm/baseline.xml | 23 - vendor/sebastian/code-unit/.psalm/config.xml | 16 - vendor/sebastian/code-unit/ChangeLog.md | 65 - vendor/sebastian/code-unit/README.md | 17 - vendor/sebastian/code-unit/composer.json | 50 - .../code-unit/src/ClassMethodUnit.php | 24 - vendor/sebastian/code-unit/src/ClassUnit.php | 24 - vendor/sebastian/code-unit/src/CodeUnit.php | 445 - .../code-unit/src/CodeUnitCollection.php | 84 - .../src/CodeUnitCollectionIterator.php | 55 - .../sebastian/code-unit/src/FunctionUnit.php | 24 - .../code-unit/src/InterfaceMethodUnit.php | 24 - .../sebastian/code-unit/src/InterfaceUnit.php | 24 - vendor/sebastian/code-unit/src/Mapper.php | 414 - .../code-unit/src/TraitMethodUnit.php | 24 - vendor/sebastian/code-unit/src/TraitUnit.php | 24 - .../code-unit/src/exceptions/Exception.php | 16 - .../exceptions/InvalidCodeUnitException.php | 16 - .../src/exceptions/NoTraitException.php | 16 - .../src/exceptions/ReflectionException.php | 16 - vendor/sebastian/comparator/ChangeLog.md | 143 - vendor/sebastian/comparator/README.md | 41 - vendor/sebastian/comparator/composer.json | 57 - .../comparator/src/ArrayComparator.php | 141 - .../sebastian/comparator/src/Comparator.php | 61 - .../comparator/src/ComparisonFailure.php | 129 - .../comparator/src/DOMNodeComparator.php | 93 - .../comparator/src/DateTimeComparator.php | 95 - .../comparator/src/DoubleComparator.php | 61 - .../comparator/src/ExceptionComparator.php | 54 - vendor/sebastian/comparator/src/Factory.php | 141 - .../comparator/src/MockObjectComparator.php | 48 - .../comparator/src/NumericComparator.php | 84 - .../comparator/src/ObjectComparator.php | 112 - .../comparator/src/ResourceComparator.php | 54 - .../comparator/src/ScalarComparator.php | 99 - .../src/SplObjectStorageComparator.php | 71 - .../comparator/src/TypeComparator.php | 62 - .../comparator/src/exceptions/Exception.php | 16 - .../src/exceptions/RuntimeException.php | 14 - .../sebastian/complexity/.psalm/baseline.xml | 2 - vendor/sebastian/complexity/.psalm/config.xml | 16 - vendor/sebastian/complexity/ChangeLog.md | 37 - vendor/sebastian/complexity/README.md | 22 - vendor/sebastian/complexity/composer.json | 42 - .../sebastian/complexity/src/Calculator.php | 81 - .../complexity/src/Complexity/Complexity.php | 42 - .../src/Complexity/ComplexityCollection.php | 72 - .../ComplexityCollectionIterator.php | 55 - .../complexity/src/Exception/Exception.php | 16 - .../src/Exception/RuntimeException.php | 14 - .../Visitor/ComplexityCalculatingVisitor.php | 109 - ...CyclomaticComplexityCalculatingVisitor.php | 59 - vendor/sebastian/diff/ChangeLog.md | 103 - vendor/sebastian/diff/README.md | 202 - vendor/sebastian/diff/composer.json | 47 - vendor/sebastian/diff/src/Chunk.php | 89 - vendor/sebastian/diff/src/Diff.php | 64 - vendor/sebastian/diff/src/Differ.php | 327 - .../src/Exception/ConfigurationException.php | 38 - .../diff/src/Exception/Exception.php | 16 - .../Exception/InvalidArgumentException.php | 14 - vendor/sebastian/diff/src/Line.php | 45 - .../LongestCommonSubsequenceCalculator.php | 18 - ...ientLongestCommonSubsequenceCalculator.php | 93 - .../src/Output/AbstractChunkOutputBuilder.php | 52 - .../diff/src/Output/DiffOnlyOutputBuilder.php | 72 - .../src/Output/DiffOutputBuilderInterface.php | 19 - .../Output/StrictUnifiedDiffOutputBuilder.php | 338 - .../src/Output/UnifiedDiffOutputBuilder.php | 272 - vendor/sebastian/diff/src/Parser.php | 110 - ...ientLongestCommonSubsequenceCalculator.php | 82 - vendor/sebastian/environment/ChangeLog.md | 183 - vendor/sebastian/environment/README.md | 21 - vendor/sebastian/environment/composer.json | 40 - vendor/sebastian/environment/src/Console.php | 187 - .../environment/src/OperatingSystem.php | 53 - vendor/sebastian/environment/src/Runtime.php | 321 - vendor/sebastian/exporter/ChangeLog.md | 85 - vendor/sebastian/exporter/README.md | 174 - vendor/sebastian/exporter/composer.json | 56 - vendor/sebastian/exporter/src/Exporter.php | 346 - vendor/sebastian/global-state/ChangeLog.md | 93 - vendor/sebastian/global-state/README.md | 20 - vendor/sebastian/global-state/composer.json | 51 - .../global-state/src/CodeExporter.php | 109 - .../global-state/src/ExcludeList.php | 119 - .../sebastian/global-state/src/Restorer.php | 143 - .../sebastian/global-state/src/Snapshot.php | 443 - .../global-state/src/exceptions/Exception.php | 16 - .../src/exceptions/RuntimeException.php | 14 - .../lines-of-code/.psalm/baseline.xml | 2 - .../sebastian/lines-of-code/.psalm/config.xml | 16 - vendor/sebastian/lines-of-code/ChangeLog.md | 41 - vendor/sebastian/lines-of-code/README.md | 22 - vendor/sebastian/lines-of-code/composer.json | 42 - .../sebastian/lines-of-code/src/Counter.php | 84 - .../lines-of-code/src/Exception/Exception.php | 16 - .../Exception/IllogicalValuesException.php | 16 - .../src/Exception/NegativeValueException.php | 16 - .../src/Exception/RuntimeException.php | 14 - .../lines-of-code/src/LineCountingVisitor.php | 82 - .../lines-of-code/src/LinesOfCode.php | 98 - .../object-enumerator/.psalm/baseline.xml | 9 - .../object-enumerator/.psalm/config.xml | 16 - .../sebastian/object-enumerator/ChangeLog.md | 88 - vendor/sebastian/object-enumerator/README.md | 20 - .../sebastian/object-enumerator/composer.json | 43 - .../sebastian/object-enumerator/phpunit.xml | 24 - .../object-enumerator/src/Enumerator.php | 88 - .../object-enumerator/src/Exception.php | 16 - .../src/InvalidArgumentException.php | 14 - .../object-reflector/.psalm/baseline.xml | 8 - .../object-reflector/.psalm/config.xml | 16 - .../sebastian/object-reflector/ChangeLog.md | 55 - vendor/sebastian/object-reflector/README.md | 20 - .../sebastian/object-reflector/composer.json | 41 - .../object-reflector/src/Exception.php | 16 - .../src/InvalidArgumentException.php | 14 - .../object-reflector/src/ObjectReflector.php | 51 - .../sebastian/recursion-context/ChangeLog.md | 40 - vendor/sebastian/recursion-context/README.md | 18 - .../sebastian/recursion-context/composer.json | 44 - .../recursion-context/src/Context.php | 191 - .../recursion-context/src/Exception.php | 16 - .../src/InvalidArgumentException.php | 14 - .../resource-operations/ChangeLog.md | 59 - .../sebastian/resource-operations/README.md | 14 - .../sebastian/resource-operations/SECURITY.md | 30 - .../resource-operations/build/generate.php | 65 - .../resource-operations/composer.json | 38 - .../src/ResourceOperations.php | 2232 ---- vendor/sebastian/type/ChangeLog.md | 169 - vendor/sebastian/type/README.md | 20 - vendor/sebastian/type/composer.json | 50 - vendor/sebastian/type/src/Parameter.php | 42 - .../sebastian/type/src/ReflectionMapper.php | 184 - vendor/sebastian/type/src/TypeName.php | 83 - .../type/src/exception/Exception.php | 16 - .../type/src/exception/RuntimeException.php | 14 - .../sebastian/type/src/type/CallableType.php | 212 - vendor/sebastian/type/src/type/FalseType.php | 42 - .../type/src/type/GenericObjectType.php | 54 - .../type/src/type/IntersectionType.php | 126 - .../sebastian/type/src/type/IterableType.php | 84 - vendor/sebastian/type/src/type/MixedType.php | 41 - vendor/sebastian/type/src/type/NeverType.php | 36 - vendor/sebastian/type/src/type/NullType.php | 41 - vendor/sebastian/type/src/type/ObjectType.php | 74 - vendor/sebastian/type/src/type/SimpleType.php | 104 - vendor/sebastian/type/src/type/StaticType.php | 68 - vendor/sebastian/type/src/type/TrueType.php | 42 - vendor/sebastian/type/src/type/Type.php | 226 - vendor/sebastian/type/src/type/UnionType.php | 138 - .../sebastian/type/src/type/UnknownType.php | 41 - vendor/sebastian/type/src/type/VoidType.php | 36 - vendor/sebastian/version/.gitattributes | 4 - vendor/sebastian/version/.gitignore | 2 - vendor/sebastian/version/ChangeLog.md | 25 - vendor/sebastian/version/README.md | 43 - vendor/sebastian/version/composer.json | 37 - vendor/sebastian/version/src/Version.php | 97 - vendor/symfony/asset-mapper/AssetMapper.php | 89 - .../asset-mapper/AssetMapperCompiler.php | 56 - .../AssetMapperDevServerSubscriber.php | 211 - .../asset-mapper/AssetMapperInterface.php | 42 - .../asset-mapper/AssetMapperRepository.php | 198 - vendor/symfony/asset-mapper/CHANGELOG.md | 30 - .../Command/AssetMapperCompileCommand.php | 124 - .../Command/DebugAssetMapperCommand.php | 112 - .../Command/ImportMapAuditCommand.php | 187 - .../Command/ImportMapInstallCommand.php | 75 - .../Command/ImportMapOutdatedCommand.php | 106 - .../Command/ImportMapRemoveCommand.php | 65 - .../Command/ImportMapRequireCommand.php | 137 - .../Command/ImportMapUpdateCommand.php | 78 - .../Command/VersionProblemCommandTrait.php | 35 - .../CompiledAssetMapperConfigReader.php | 57 - .../Compiler/AssetCompilerInterface.php | 34 - .../Compiler/CssAssetUrlCompiler.php | 81 - .../Compiler/JavaScriptImportPathCompiler.php | 236 - .../Compiler/SourceMappingUrlsCompiler.php | 49 - .../Event/PreAssetsCompileEvent.php | 35 - .../Exception/CircularAssetsException.php | 36 - .../Exception/ExceptionInterface.php | 16 - .../asset-mapper/Exception/LogicException.php | 16 - .../Exception/RuntimeException.php | 16 - .../Factory/CachedMappedAssetFactory.php | 78 - .../Factory/MappedAssetFactory.php | 134 - .../Factory/MappedAssetFactoryInterface.php | 19 - .../ImportMap/ImportMapAuditor.php | 118 - .../ImportMap/ImportMapConfigReader.php | 193 - .../ImportMap/ImportMapEntries.php | 66 - .../asset-mapper/ImportMap/ImportMapEntry.php | 82 - .../ImportMap/ImportMapGenerator.php | 264 - .../ImportMap/ImportMapManager.php | 217 - .../ImportMap/ImportMapPackageAudit.php | 32 - .../ImportMapPackageAuditVulnerability.php | 26 - .../ImportMap/ImportMapRenderer.php | 201 - .../asset-mapper/ImportMap/ImportMapType.php | 18 - .../ImportMap/ImportMapUpdateChecker.php | 93 - .../ImportMap/ImportMapVersionChecker.php | 178 - .../ImportMap/JavaScriptImport.php | 32 - .../ImportMap/PackageRequireOptions.php | 35 - .../ImportMap/PackageUpdateInfo.php | 34 - .../ImportMap/PackageVersionProblem.php | 23 - .../ImportMap/RemotePackageDownloader.php | 162 - .../ImportMap/RemotePackageStorage.php | 103 - .../Resolver/JsDelivrEsmResolver.php | 350 - .../Resolver/PackageResolverInterface.php | 43 - .../Resolver/ResolvedImportMapPackage.php | 25 - vendor/symfony/asset-mapper/MappedAsset.php | 136 - .../asset-mapper/MapperAwareAssetPackage.php | 43 - .../Path/LocalPublicAssetsFilesystem.php | 43 - .../Path/PublicAssetsFilesystemInterface.php | 33 - .../Path/PublicAssetsPathResolver.php | 29 - .../PublicAssetsPathResolverInterface.php | 20 - vendor/symfony/asset-mapper/README.md | 16 - vendor/symfony/asset-mapper/composer.json | 46 - vendor/symfony/asset/CHANGELOG.md | 43 - .../asset/Context/ContextInterface.php | 30 - vendor/symfony/asset/Context/NullContext.php | 30 - .../asset/Context/RequestStackContext.php | 47 - .../Exception/AssetNotFoundException.php | 38 - .../asset/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../asset/Exception/LogicException.php | 21 - .../asset/Exception/RuntimeException.php | 19 - vendor/symfony/asset/Package.php | 63 - vendor/symfony/asset/PackageInterface.php | 30 - vendor/symfony/asset/Packages.php | 99 - vendor/symfony/asset/PathPackage.php | 68 - vendor/symfony/asset/README.md | 14 - vendor/symfony/asset/UrlPackage.php | 126 - .../VersionStrategy/EmptyVersionStrategy.php | 30 - .../JsonManifestVersionStrategy.php | 129 - .../VersionStrategy/StaticVersionStrategy.php | 49 - .../VersionStrategyInterface.php | 30 - vendor/symfony/asset/composer.json | 36 - .../symfony/browser-kit/AbstractBrowser.php | 674 - vendor/symfony/browser-kit/CHANGELOG.md | 78 - vendor/symfony/browser-kit/Cookie.php | 299 - vendor/symfony/browser-kit/CookieJar.php | 218 - .../Exception/BadMethodCallException.php | 16 - .../Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 16 - .../browser-kit/Exception/JsonException.php | 16 - .../browser-kit/Exception/LogicException.php | 16 - .../Exception/RuntimeException.php | 16 - .../Exception/UnexpectedValueException.php | 16 - vendor/symfony/browser-kit/History.php | 94 - vendor/symfony/browser-kit/HttpBrowser.php | 154 - vendor/symfony/browser-kit/README.md | 17 - vendor/symfony/browser-kit/Request.php | 99 - vendor/symfony/browser-kit/Response.php | 109 - .../Constraint/BrowserCookieValueSame.php | 68 - .../Test/Constraint/BrowserHasCookie.php | 58 - vendor/symfony/browser-kit/composer.json | 35 - vendor/symfony/cache-contracts/CHANGELOG.md | 5 - .../cache-contracts/CacheInterface.php | 59 - vendor/symfony/cache-contracts/CacheTrait.php | 72 - .../cache-contracts/CallbackInterface.php | 32 - .../symfony/cache-contracts/ItemInterface.php | 65 - vendor/symfony/cache-contracts/README.md | 9 - .../TagAwareCacheInterface.php | 38 - vendor/symfony/cache-contracts/composer.json | 35 - .../symfony/cache/Adapter/AbstractAdapter.php | 191 - .../cache/Adapter/AbstractTagAwareAdapter.php | 320 - .../cache/Adapter/AdapterInterface.php | 35 - vendor/symfony/cache/Adapter/ApcuAdapter.php | 116 - vendor/symfony/cache/Adapter/ArrayAdapter.php | 359 - vendor/symfony/cache/Adapter/ChainAdapter.php | 291 - .../cache/Adapter/CouchbaseBucketAdapter.php | 237 - .../Adapter/CouchbaseCollectionAdapter.php | 198 - .../cache/Adapter/DoctrineDbalAdapter.php | 383 - .../cache/Adapter/FilesystemAdapter.php | 29 - .../Adapter/FilesystemTagAwareAdapter.php | 267 - .../cache/Adapter/MemcachedAdapter.php | 329 - vendor/symfony/cache/Adapter/NullAdapter.php | 105 - .../cache/Adapter/ParameterNormalizer.php | 35 - vendor/symfony/cache/Adapter/PdoAdapter.php | 398 - .../symfony/cache/Adapter/PhpArrayAdapter.php | 389 - .../symfony/cache/Adapter/PhpFilesAdapter.php | 314 - vendor/symfony/cache/Adapter/ProxyAdapter.php | 206 - vendor/symfony/cache/Adapter/Psr16Adapter.php | 71 - vendor/symfony/cache/Adapter/RedisAdapter.php | 25 - .../cache/Adapter/RedisTagAwareAdapter.php | 310 - .../symfony/cache/Adapter/TagAwareAdapter.php | 370 - .../Adapter/TagAwareAdapterInterface.php | 31 - .../cache/Adapter/TraceableAdapter.php | 250 - .../Adapter/TraceableTagAwareAdapter.php | 35 - vendor/symfony/cache/CHANGELOG.md | 147 - vendor/symfony/cache/CacheItem.php | 198 - .../DataCollector/CacheDataCollector.php | 184 - .../CacheCollectorPass.php | 75 - .../CachePoolClearerPass.php | 38 - .../DependencyInjection/CachePoolPass.php | 243 - .../CachePoolPrunerPass.php | 48 - .../cache/Exception/CacheException.php | 25 - .../Exception/InvalidArgumentException.php | 25 - .../cache/Exception/LogicException.php | 25 - vendor/symfony/cache/LockRegistry.php | 166 - .../cache/Marshaller/DefaultMarshaller.php | 98 - .../cache/Marshaller/DeflateMarshaller.php | 44 - .../cache/Marshaller/MarshallerInterface.php | 38 - .../cache/Marshaller/SodiumMarshaller.php | 74 - .../cache/Marshaller/TagAwareMarshaller.php | 83 - .../Messenger/EarlyExpirationDispatcher.php | 60 - .../Messenger/EarlyExpirationHandler.php | 81 - .../Messenger/EarlyExpirationMessage.php | 100 - vendor/symfony/cache/PruneableInterface.php | 20 - vendor/symfony/cache/Psr16Cache.php | 240 - vendor/symfony/cache/README.md | 19 - vendor/symfony/cache/ResettableInterface.php | 21 - .../cache/Traits/AbstractAdapterTrait.php | 377 - .../symfony/cache/Traits/ContractsTrait.php | 113 - .../cache/Traits/FilesystemCommonTrait.php | 191 - .../symfony/cache/Traits/FilesystemTrait.php | 113 - vendor/symfony/cache/Traits/ProxyTrait.php | 37 - vendor/symfony/cache/Traits/Redis5Proxy.php | 1228 -- vendor/symfony/cache/Traits/Redis6Proxy.php | 1269 -- .../symfony/cache/Traits/Redis6ProxyTrait.php | 81 - .../cache/Traits/RedisCluster5Proxy.php | 983 -- .../cache/Traits/RedisCluster6Proxy.php | 1139 -- .../cache/Traits/RedisCluster6ProxyTrait.php | 46 - .../cache/Traits/RedisClusterNodeProxy.php | 47 - .../cache/Traits/RedisClusterProxy.php | 23 - vendor/symfony/cache/Traits/RedisProxy.php | 23 - vendor/symfony/cache/Traits/RedisTrait.php | 682 - vendor/symfony/cache/Traits/RelayProxy.php | 1319 -- .../symfony/cache/Traits/RelayProxyTrait.php | 156 - vendor/symfony/cache/Traits/ValueWrapper.php | 81 - vendor/symfony/cache/composer.json | 60 - vendor/symfony/clock/CHANGELOG.md | 25 - vendor/symfony/clock/Clock.php | 89 - vendor/symfony/clock/ClockAwareTrait.php | 38 - vendor/symfony/clock/ClockInterface.php | 24 - vendor/symfony/clock/DatePoint.php | 169 - vendor/symfony/clock/MockClock.php | 98 - vendor/symfony/clock/MonotonicClock.php | 93 - vendor/symfony/clock/NativeClock.php | 67 - vendor/symfony/clock/README.md | 47 - vendor/symfony/clock/Resources/now.php | 28 - .../clock/Test/ClockSensitiveTrait.php | 77 - vendor/symfony/clock/composer.json | 34 - .../symfony/config/Builder/ClassBuilder.php | 171 - .../config/Builder/ConfigBuilderGenerator.php | 599 - .../ConfigBuilderGeneratorInterface.php | 27 - .../config/Builder/ConfigBuilderInterface.php | 30 - vendor/symfony/config/Builder/Method.php | 32 - vendor/symfony/config/Builder/Property.php | 84 - vendor/symfony/config/CHANGELOG.md | 164 - vendor/symfony/config/ConfigCache.php | 60 - vendor/symfony/config/ConfigCacheFactory.php | 42 - .../config/ConfigCacheFactoryInterface.php | 30 - .../symfony/config/ConfigCacheInterface.php | 45 - .../symfony/config/Definition/ArrayNode.php | 379 - vendor/symfony/config/Definition/BaseNode.php | 512 - .../symfony/config/Definition/BooleanNode.php | 46 - .../Builder/ArrayNodeDefinition.php | 509 - .../Builder/BooleanNodeDefinition.php | 46 - .../Builder/BuilderAwareInterface.php | 25 - .../Definition/Builder/EnumNodeDefinition.php | 52 - .../config/Definition/Builder/ExprBuilder.php | 250 - .../Builder/FloatNodeDefinition.php | 30 - .../Builder/IntegerNodeDefinition.php | 30 - .../Definition/Builder/MergeBuilder.php | 60 - .../config/Definition/Builder/NodeBuilder.php | 199 - .../Definition/Builder/NodeDefinition.php | 338 - .../Builder/NodeParentInterface.php | 21 - .../Builder/NormalizationBuilder.php | 60 - .../Builder/NumericNodeDefinition.php | 67 - .../Builder/ParentNodeDefinitionInterface.php | 49 - .../Builder/ScalarNodeDefinition.php | 30 - .../config/Definition/Builder/TreeBuilder.php | 57 - .../Definition/Builder/ValidationBuilder.php | 43 - .../Builder/VariableNodeDefinition.php | 64 - .../Definition/ConfigurableInterface.php | 25 - .../config/Definition/Configuration.php | 45 - .../Definition/ConfigurationInterface.php | 27 - .../Configurator/DefinitionConfigurator.php | 47 - .../Definition/Dumper/XmlReferenceDumper.php | 293 - .../Definition/Dumper/YamlReferenceDumper.php | 246 - vendor/symfony/config/Definition/EnumNode.php | 90 - .../Exception/DuplicateKeyException.php | 22 - .../config/Definition/Exception/Exception.php | 21 - .../Exception/ForbiddenOverwriteException.php | 22 - .../InvalidConfigurationException.php | 47 - .../Exception/InvalidDefinitionException.php | 21 - .../Exception/InvalidTypeException.php | 21 - .../Exception/UnsetKeyException.php | 22 - .../symfony/config/Definition/FloatNode.php | 45 - .../symfony/config/Definition/IntegerNode.php | 40 - .../Loader/DefinitionFileLoader.php | 103 - .../config/Definition/NodeInterface.php | 77 - .../symfony/config/Definition/NumericNode.php | 58 - .../symfony/config/Definition/Processor.php | 89 - .../Definition/PrototypeNodeInterface.php | 25 - .../config/Definition/PrototypedArrayNode.php | 331 - .../symfony/config/Definition/ScalarNode.php | 58 - .../config/Definition/VariableNode.php | 117 - ...LoaderImportCircularReferenceException.php | 27 - .../FileLocatorFileNotFoundException.php | 34 - .../config/Exception/LoaderLoadException.php | 112 - .../config/Exception/LogicException.php | 16 - vendor/symfony/config/FileLocator.php | 96 - .../symfony/config/FileLocatorInterface.php | 36 - .../config/Loader/DelegatingLoader.php | 44 - .../Loader/DirectoryAwareLoaderInterface.php | 22 - vendor/symfony/config/Loader/FileLoader.php | 184 - .../symfony/config/Loader/GlobFileLoader.php | 30 - vendor/symfony/config/Loader/Loader.php | 72 - .../symfony/config/Loader/LoaderInterface.php | 44 - .../symfony/config/Loader/LoaderResolver.php | 65 - .../config/Loader/LoaderResolverInterface.php | 27 - .../config/Loader/ParamConfigurator.php | 30 - vendor/symfony/config/README.md | 15 - .../Resource/ClassExistenceResource.php | 227 - .../config/Resource/ComposerResource.php | 64 - .../config/Resource/DirectoryResource.php | 96 - .../config/Resource/FileExistenceResource.php | 51 - .../symfony/config/Resource/FileResource.php | 60 - .../symfony/config/Resource/GlobResource.php | 248 - .../Resource/ReflectionClassResource.php | 198 - .../config/Resource/ResourceInterface.php | 31 - .../Resource/SelfCheckingResourceChecker.php | 46 - .../SelfCheckingResourceInterface.php | 28 - .../config/ResourceCheckerConfigCache.php | 169 - .../ResourceCheckerConfigCacheFactory.php | 39 - .../config/ResourceCheckerInterface.php | 41 - .../Util/Exception/InvalidXmlException.php | 22 - .../Util/Exception/XmlParsingException.php | 21 - vendor/symfony/config/Util/XmlUtils.php | 270 - vendor/symfony/config/composer.json | 42 - vendor/symfony/console/Application.php | 1282 -- .../symfony/console/Attribute/AsCommand.php | 45 - vendor/symfony/console/CHANGELOG.md | 274 - .../console/CI/GithubActionReporter.php | 99 - vendor/symfony/console/Color.php | 133 - vendor/symfony/console/Command/Command.php | 664 - .../console/Command/CompleteCommand.php | 212 - .../console/Command/DumpCompletionCommand.php | 151 - .../symfony/console/Command/HelpCommand.php | 76 - .../symfony/console/Command/LazyCommand.php | 206 - .../symfony/console/Command/ListCommand.php | 72 - .../symfony/console/Command/LockableTrait.php | 74 - .../Command/SignalableCommandInterface.php | 32 - .../console/Command/TraceableCommand.php | 356 - .../CommandLoader/CommandLoaderInterface.php | 38 - .../CommandLoader/ContainerCommandLoader.php | 52 - .../CommandLoader/FactoryCommandLoader.php | 52 - .../console/Completion/CompletionInput.php | 248 - .../Completion/CompletionSuggestions.php | 97 - .../Output/BashCompletionOutput.php | 33 - .../Output/CompletionOutputInterface.php | 25 - .../Output/FishCompletionOutput.php | 36 - .../Completion/Output/ZshCompletionOutput.php | 36 - .../symfony/console/Completion/Suggestion.php | 41 - vendor/symfony/console/ConsoleEvents.php | 72 - vendor/symfony/console/Cursor.php | 204 - .../DataCollector/CommandDataCollector.php | 234 - vendor/symfony/console/Debug/CliRequest.php | 70 - .../AddConsoleCommandPass.php | 131 - .../Descriptor/ApplicationDescription.php | 136 - .../symfony/console/Descriptor/Descriptor.php | 74 - .../Descriptor/DescriptorInterface.php | 24 - .../console/Descriptor/JsonDescriptor.php | 166 - .../console/Descriptor/MarkdownDescriptor.php | 173 - .../Descriptor/ReStructuredTextDescriptor.php | 272 - .../console/Descriptor/TextDescriptor.php | 317 - .../console/Descriptor/XmlDescriptor.php | 232 - .../console/Event/ConsoleCommandEvent.php | 54 - .../console/Event/ConsoleErrorEvent.php | 58 - vendor/symfony/console/Event/ConsoleEvent.php | 56 - .../console/Event/ConsoleSignalEvent.php | 56 - .../console/Event/ConsoleTerminateEvent.php | 50 - .../console/EventListener/ErrorListener.php | 93 - .../Exception/CommandNotFoundException.php | 43 - .../console/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 19 - .../Exception/InvalidOptionException.php | 21 - .../console/Exception/LogicException.php | 19 - .../Exception/MissingInputException.php | 21 - .../Exception/NamespaceNotFoundException.php | 21 - .../Exception/RunCommandFailedException.php | 29 - .../console/Exception/RuntimeException.php | 19 - .../console/Formatter/NullOutputFormatter.php | 51 - .../Formatter/NullOutputFormatterStyle.php | 48 - .../console/Formatter/OutputFormatter.php | 268 - .../Formatter/OutputFormatterInterface.php | 52 - .../Formatter/OutputFormatterStyle.php | 89 - .../OutputFormatterStyleInterface.php | 50 - .../Formatter/OutputFormatterStyleStack.php | 103 - .../WrappableOutputFormatterInterface.php | 25 - .../console/Helper/DebugFormatterHelper.php | 98 - .../console/Helper/DescriptorHelper.php | 91 - vendor/symfony/console/Helper/Dumper.php | 53 - .../console/Helper/FormatterHelper.php | 81 - vendor/symfony/console/Helper/Helper.php | 159 - .../console/Helper/HelperInterface.php | 35 - vendor/symfony/console/Helper/HelperSet.php | 74 - .../console/Helper/InputAwareHelper.php | 30 - .../symfony/console/Helper/OutputWrapper.php | 76 - .../symfony/console/Helper/ProcessHelper.php | 137 - vendor/symfony/console/Helper/ProgressBar.php | 645 - .../console/Helper/ProgressIndicator.php | 225 - .../symfony/console/Helper/QuestionHelper.php | 589 - .../console/Helper/SymfonyQuestionHelper.php | 103 - vendor/symfony/console/Helper/Table.php | 924 -- vendor/symfony/console/Helper/TableCell.php | 71 - .../symfony/console/Helper/TableCellStyle.php | 84 - vendor/symfony/console/Helper/TableRows.php | 28 - .../symfony/console/Helper/TableSeparator.php | 25 - vendor/symfony/console/Helper/TableStyle.php | 362 - vendor/symfony/console/Input/ArgvInput.php | 396 - vendor/symfony/console/Input/ArrayInput.php | 191 - vendor/symfony/console/Input/Input.php | 174 - .../symfony/console/Input/InputArgument.php | 160 - .../console/Input/InputAwareInterface.php | 26 - .../symfony/console/Input/InputDefinition.php | 402 - .../symfony/console/Input/InputInterface.php | 138 - vendor/symfony/console/Input/InputOption.php | 262 - .../Input/StreamableInputInterface.php | 37 - vendor/symfony/console/Input/StringInput.php | 85 - .../symfony/console/Logger/ConsoleLogger.php | 120 - .../console/Messenger/RunCommandContext.php | 25 - .../console/Messenger/RunCommandMessage.php | 36 - .../Messenger/RunCommandMessageHandler.php | 49 - .../symfony/console/Output/AnsiColorMode.php | 106 - .../symfony/console/Output/BufferedOutput.php | 40 - .../symfony/console/Output/ConsoleOutput.php | 153 - .../console/Output/ConsoleOutputInterface.php | 30 - .../console/Output/ConsoleSectionOutput.php | 237 - vendor/symfony/console/Output/NullOutput.php | 89 - vendor/symfony/console/Output/Output.php | 138 - .../console/Output/OutputInterface.php | 100 - .../symfony/console/Output/StreamOutput.php | 122 - .../console/Output/TrimmedBufferOutput.php | 58 - .../console/Question/ChoiceQuestion.php | 178 - .../console/Question/ConfirmationQuestion.php | 57 - vendor/symfony/console/Question/Question.php | 280 - vendor/symfony/console/README.md | 27 - .../console/Resources/bin/hiddeninput.exe | Bin 9216 -> 0 bytes .../symfony/console/Resources/completion.bash | 94 - .../symfony/console/Resources/completion.fish | 25 - .../symfony/console/Resources/completion.zsh | 82 - .../console/SignalRegistry/SignalMap.php | 36 - .../console/SignalRegistry/SignalRegistry.php | 57 - .../console/SingleCommandApplication.php | 72 - vendor/symfony/console/Style/OutputStyle.php | 109 - .../symfony/console/Style/StyleInterface.php | 110 - vendor/symfony/console/Style/SymfonyStyle.php | 455 - vendor/symfony/console/Terminal.php | 227 - .../console/Tester/ApplicationTester.php | 83 - .../Tester/CommandCompletionTester.php | 54 - .../symfony/console/Tester/CommandTester.php | 74 - .../Tester/Constraint/CommandIsSuccessful.php | 43 - vendor/symfony/console/Tester/TesterTrait.php | 178 - vendor/symfony/console/composer.json | 54 - vendor/symfony/css-selector/CHANGELOG.md | 29 - .../css-selector/CssSelectorConverter.php | 67 - .../Exception/ExceptionInterface.php | 24 - .../Exception/ExpressionErrorException.php | 24 - .../Exception/InternalErrorException.php | 24 - .../css-selector/Exception/ParseException.php | 24 - .../Exception/SyntaxErrorException.php | 55 - .../css-selector/Node/AbstractNode.php | 32 - .../css-selector/Node/AttributeNode.php | 73 - .../symfony/css-selector/Node/ClassNode.php | 51 - .../Node/CombinedSelectorNode.php | 59 - .../symfony/css-selector/Node/ElementNode.php | 53 - .../css-selector/Node/FunctionNode.php | 70 - vendor/symfony/css-selector/Node/HashNode.php | 51 - .../css-selector/Node/MatchingNode.php | 55 - .../css-selector/Node/NegationNode.php | 51 - .../css-selector/Node/NodeInterface.php | 29 - .../symfony/css-selector/Node/PseudoNode.php | 54 - .../css-selector/Node/SelectorNode.php | 54 - .../symfony/css-selector/Node/Specificity.php | 69 - .../Node/SpecificityAdjustmentNode.php | 49 - .../Parser/Handler/CommentHandler.php | 45 - .../Parser/Handler/HandlerInterface.php | 30 - .../Parser/Handler/HashHandler.php | 52 - .../Parser/Handler/IdentifierHandler.php | 52 - .../Parser/Handler/NumberHandler.php | 49 - .../Parser/Handler/StringHandler.php | 71 - .../Parser/Handler/WhitespaceHandler.php | 43 - vendor/symfony/css-selector/Parser/Parser.php | 385 - .../css-selector/Parser/ParserInterface.php | 34 - vendor/symfony/css-selector/Parser/Reader.php | 82 - .../Parser/Shortcut/ClassParser.php | 48 - .../Parser/Shortcut/ElementParser.php | 44 - .../Parser/Shortcut/EmptyStringParser.php | 43 - .../Parser/Shortcut/HashParser.php | 48 - vendor/symfony/css-selector/Parser/Token.php | 107 - .../css-selector/Parser/TokenStream.php | 156 - .../Parser/Tokenizer/Tokenizer.php | 73 - .../Parser/Tokenizer/TokenizerEscaping.php | 63 - .../Parser/Tokenizer/TokenizerPatterns.php | 89 - vendor/symfony/css-selector/README.md | 20 - .../XPath/Extension/AbstractExtension.php | 50 - .../Extension/AttributeMatchingExtension.php | 113 - .../XPath/Extension/CombinationExtension.php | 65 - .../XPath/Extension/ExtensionInterface.php | 67 - .../XPath/Extension/FunctionExtension.php | 165 - .../XPath/Extension/HtmlExtension.php | 178 - .../XPath/Extension/NodeExtension.php | 221 - .../XPath/Extension/PseudoClassExtension.php | 122 - .../symfony/css-selector/XPath/Translator.php | 224 - .../XPath/TranslatorInterface.php | 37 - .../symfony/css-selector/XPath/XPathExpr.php | 107 - vendor/symfony/css-selector/composer.json | 32 - vendor/symfony/debug-bundle/CHANGELOG.md | 8 - .../Command/ServerDumpPlaceholderCommand.php | 54 - vendor/symfony/debug-bundle/DebugBundle.php | 63 - .../Compiler/DumpDataCollectorPass.php | 42 - .../DependencyInjection/Configuration.php | 60 - .../DependencyInjection/DebugExtension.php | 97 - vendor/symfony/debug-bundle/README.md | 13 - .../Resources/config/schema/debug-1.0.xsd | 15 - .../Resources/config/services.php | 140 - .../Resources/views/Profiler/dump.html.twig | 83 - .../Resources/views/Profiler/icon.svg | 9 - vendor/symfony/debug-bundle/composer.json | 41 - vendor/symfony/dependency-injection/Alias.php | 108 - .../Argument/AbstractArgument.php | 41 - .../Argument/ArgumentInterface.php | 24 - .../Argument/BoundArgument.php | 56 - .../Argument/IteratorArgument.php | 37 - .../Argument/LazyClosure.php | 96 - .../Argument/RewindableGenerator.php | 43 - .../Argument/ServiceClosureArgument.php | 43 - .../Argument/ServiceLocator.php | 48 - .../Argument/ServiceLocatorArgument.php | 48 - .../Argument/TaggedIteratorArgument.php | 89 - .../Attribute/AsAlias.php | 31 - .../Attribute/AsDecorator.php | 33 - .../Attribute/AsTaggedItem.php | 31 - .../Attribute/Autoconfigure.php | 47 - .../Attribute/AutoconfigureTag.php | 34 - .../Attribute/Autowire.php | 75 - .../Attribute/AutowireCallable.php | 53 - .../Attribute/AutowireDecorated.php | 20 - .../Attribute/AutowireInline.php | 64 - .../Attribute/AutowireIterator.php | 42 - .../Attribute/AutowireLocator.php | 86 - .../Attribute/AutowireMethodOf.php | 38 - .../Attribute/AutowireServiceClosure.php | 30 - .../Attribute/Exclude.php | 22 - .../dependency-injection/Attribute/Lazy.php | 21 - .../Attribute/TaggedIterator.php | 42 - .../Attribute/TaggedLocator.php | 42 - .../dependency-injection/Attribute/Target.php | 66 - .../dependency-injection/Attribute/When.php | 28 - .../symfony/dependency-injection/CHANGELOG.md | 401 - .../dependency-injection/ChildDefinition.php | 95 - .../Compiler/AbstractRecursivePass.php | 253 - .../AliasDeprecatedPublicServicesPass.php | 61 - .../Compiler/AnalyzeServiceReferencesPass.php | 203 - .../AttributeAutoconfigurationPass.php | 186 - .../Compiler/AutoAliasServicePass.php | 39 - .../Compiler/AutowireAsDecoratorPass.php | 46 - .../Compiler/AutowirePass.php | 752 -- .../Compiler/AutowireRequiredMethodsPass.php | 95 - .../AutowireRequiredPropertiesPass.php | 58 - .../Compiler/CheckAliasValidityPass.php | 51 - .../Compiler/CheckArgumentsValidityPass.php | 118 - .../Compiler/CheckCircularReferencesPass.php | 78 - .../Compiler/CheckDefinitionValidityPass.php | 98 - ...xceptionOnInvalidReferenceBehaviorPass.php | 125 - .../Compiler/CheckReferenceValidityPass.php | 45 - .../Compiler/CheckTypeDeclarationsPass.php | 334 - .../Compiler/Compiler.php | 97 - .../Compiler/CompilerPassInterface.php | 29 - .../Compiler/DecoratorServicePass.php | 130 - .../Compiler/DefinitionErrorExceptionPass.php | 107 - .../Compiler/ExtensionCompilerPass.php | 34 - .../Compiler/InlineServiceDefinitionsPass.php | 229 - .../MergeExtensionConfigurationPass.php | 212 - .../Compiler/PassConfig.php | 273 - .../Compiler/PriorityTaggedServiceTrait.php | 176 - .../RegisterAutoconfigureAttributesPass.php | 97 - .../Compiler/RegisterEnvVarProcessorsPass.php | 75 - .../Compiler/RegisterReverseContainerPass.php | 62 - .../RegisterServiceSubscribersPass.php | 141 - .../RemoveAbstractDefinitionsPass.php | 33 - .../Compiler/RemoveBuildParametersPass.php | 45 - .../Compiler/RemovePrivateAliasesPass.php | 39 - .../Compiler/RemoveUnusedDefinitionsPass.php | 89 - .../ReplaceAliasByActualDefinitionPass.php | 101 - .../ResolveAutowireInlineAttributesPass.php | 131 - .../Compiler/ResolveBindingsPass.php | 265 - .../Compiler/ResolveChildDefinitionsPass.php | 201 - .../Compiler/ResolveClassPass.php | 37 - .../Compiler/ResolveDecoratorStackPass.php | 120 - .../Compiler/ResolveEnvPlaceholdersPass.php | 46 - .../Compiler/ResolveFactoryClassPass.php | 37 - .../Compiler/ResolveHotPathPass.php | 76 - .../ResolveInstanceofConditionalsPass.php | 175 - .../Compiler/ResolveInvalidReferencesPass.php | 134 - .../Compiler/ResolveNamedArgumentsPass.php | 137 - .../Compiler/ResolveNoPreloadPass.php | 90 - .../ResolveParameterPlaceHoldersPass.php | 102 - .../ResolveReferencesToAliasesPass.php | 80 - .../ResolveServiceSubscribersPass.php | 54 - .../ResolveTaggedIteratorArgumentPass.php | 42 - .../Compiler/ServiceLocatorTagPass.php | 137 - .../Compiler/ServiceReferenceGraph.php | 99 - .../Compiler/ServiceReferenceGraphEdge.php | 87 - .../Compiler/ServiceReferenceGraphNode.php | 106 - .../Compiler/ValidateEnvPlaceholdersPass.php | 100 - .../Config/ContainerParametersResource.php | 44 - .../ContainerParametersResourceChecker.php | 45 - .../dependency-injection/Container.php | 402 - .../dependency-injection/ContainerBuilder.php | 1705 --- .../ContainerInterface.php | 64 - .../dependency-injection/Definition.php | 811 -- .../dependency-injection/Dumper/Dumper.php | 29 - .../Dumper/DumperInterface.php | 25 - .../Dumper/GraphvizDumper.php | 249 - .../dependency-injection/Dumper/PhpDumper.php | 2391 ---- .../dependency-injection/Dumper/Preloader.php | 129 - .../dependency-injection/Dumper/XmlDumper.php | 432 - .../Dumper/YamlDumper.php | 380 - .../EnvVarLoaderInterface.php | 25 - .../dependency-injection/EnvVarProcessor.php | 378 - .../EnvVarProcessorInterface.php | 38 - .../AutoconfigureFailedException.php | 16 - .../Exception/AutowiringFailedException.php | 72 - .../Exception/BadMethodCallException.php | 19 - .../Exception/EnvNotFoundException.php | 21 - .../Exception/EnvParameterException.php | 25 - .../Exception/ExceptionInterface.php | 24 - .../Exception/InvalidArgumentException.php | 21 - .../InvalidParameterTypeException.php | 35 - .../Exception/LogicException.php | 19 - .../Exception/OutOfBoundsException.php | 19 - .../ParameterCircularReferenceException.php | 34 - .../Exception/ParameterNotFoundException.php | 106 - .../Exception/RuntimeException.php | 21 - .../ServiceCircularReferenceException.php | 41 - .../Exception/ServiceNotFoundException.php | 67 - .../ExpressionLanguage.php | 37 - .../ExpressionLanguageProvider.php | 57 - .../Extension/AbstractExtension.php | 65 - .../ConfigurableExtensionInterface.php | 32 - .../ConfigurationExtensionInterface.php | 30 - .../Extension/Extension.php | 135 - .../Extension/ExtensionInterface.php | 56 - .../Extension/ExtensionTrait.php | 69 - .../Extension/PrependExtensionInterface.php | 24 - .../Instantiator/InstantiatorInterface.php | 32 - .../Instantiator/LazyServiceInstantiator.php | 38 - .../Instantiator/RealServiceInstantiator.php | 28 - .../LazyProxy/PhpDumper/DumperInterface.php | 39 - .../LazyProxy/PhpDumper/LazyServiceDumper.php | 151 - .../LazyProxy/PhpDumper/NullDumper.php | 39 - .../Loader/ClosureLoader.php | 43 - .../Configurator/AbstractConfigurator.php | 117 - .../AbstractServiceConfigurator.php | 115 - .../Loader/Configurator/AliasConfigurator.php | 31 - .../ClosureReferenceConfigurator.php | 16 - .../Configurator/ContainerConfigurator.php | 204 - .../Configurator/DefaultsConfigurator.php | 77 - .../Loader/Configurator/EnvConfigurator.php | 236 - .../Configurator/FromCallableConfigurator.php | 47 - .../InlineServiceConfigurator.php | 44 - .../Configurator/InstanceofConfigurator.php | 50 - .../Configurator/ParametersConfigurator.php | 53 - .../Configurator/PrototypeConfigurator.php | 90 - .../Configurator/ReferenceConfigurator.php | 66 - .../Configurator/ServiceConfigurator.php | 74 - .../Configurator/ServicesConfigurator.php | 192 - .../Configurator/Traits/AbstractTrait.php | 28 - .../Configurator/Traits/ArgumentTrait.php | 39 - .../Traits/AutoconfigureTrait.php | 31 - .../Configurator/Traits/AutowireTrait.php | 27 - .../Loader/Configurator/Traits/BindTrait.php | 42 - .../Loader/Configurator/Traits/CallTrait.php | 35 - .../Loader/Configurator/Traits/ClassTrait.php | 27 - .../Configurator/Traits/ConfiguratorTrait.php | 29 - .../Configurator/Traits/ConstructorTrait.php | 27 - .../Configurator/Traits/DecorateTrait.php | 34 - .../Configurator/Traits/DeprecateTrait.php | 35 - .../Configurator/Traits/FactoryTrait.php | 41 - .../Loader/Configurator/Traits/FileTrait.php | 27 - .../Configurator/Traits/FromCallableTrait.php | 64 - .../Loader/Configurator/Traits/LazyTrait.php | 32 - .../Configurator/Traits/ParentTrait.php | 46 - .../Configurator/Traits/PropertyTrait.php | 27 - .../Configurator/Traits/PublicTrait.php | 35 - .../Loader/Configurator/Traits/ShareTrait.php | 27 - .../Configurator/Traits/SyntheticTrait.php | 28 - .../Loader/Configurator/Traits/TagTrait.php | 47 - .../Loader/DirectoryLoader.php | 50 - .../Loader/FileLoader.php | 385 - .../Loader/GlobFileLoader.php | 36 - .../Loader/IniFileLoader.php | 98 - .../Loader/PhpFileLoader.php | 212 - .../Loader/UndefinedExtensionHandler.php | 46 - .../Loader/XmlFileLoader.php | 886 -- .../Loader/YamlFileLoader.php | 989 -- .../schema/dic/services/services-1.0.xsd | 396 - .../dependency-injection/Parameter.php | 32 - .../ParameterBag/ContainerBag.php | 42 - .../ParameterBag/ContainerBagInterface.php | 51 - .../EnvPlaceholderParameterBag.php | 148 - .../ParameterBag/FrozenParameterBag.php | 61 - .../ParameterBag/ParameterBag.php | 280 - .../ParameterBag/ParameterBagInterface.php | 88 - vendor/symfony/dependency-injection/README.md | 14 - .../dependency-injection/Reference.php | 42 - .../dependency-injection/ReverseContainer.php | 74 - .../dependency-injection/ServiceLocator.php | 158 - .../StaticEnvVarLoader.php | 26 - .../TaggedContainerInterface.php | 27 - .../dependency-injection/TypedReference.php | 54 - .../symfony/dependency-injection/Variable.php | 40 - .../dependency-injection/composer.json | 47 - .../deprecation-contracts/CHANGELOG.md | 5 - .../symfony/deprecation-contracts/README.md | 26 - .../deprecation-contracts/composer.json | 35 - .../deprecation-contracts/function.php | 27 - .../ArgumentResolver/EntityValueResolver.php | 235 - .../doctrine-bridge/Attribute/MapEntity.php | 84 - vendor/symfony/doctrine-bridge/CHANGELOG.md | 193 - .../CacheWarmer/ProxyCacheWarmer.php | 73 - .../ContainerAwareEventManager.php | 224 - .../DataCollector/DoctrineDataCollector.php | 222 - .../DataCollector/ObjectParameter.php | 46 - .../AbstractDoctrineExtension.php | 425 - .../CompilerPass/DoctrineValidationPass.php | 56 - ...gisterEventListenersAndSubscribersPass.php | 144 - .../CompilerPass/RegisterMappingsPass.php | 210 - .../CompilerPass/RegisterUidTypePass.php | 44 - .../Security/UserProvider/EntityFactory.php | 64 - .../Form/ChoiceList/DoctrineChoiceLoader.php | 107 - .../Form/ChoiceList/EntityLoaderInterface.php | 30 - .../Form/ChoiceList/IdReader.php | 109 - .../Form/ChoiceList/ORMQueryBuilderLoader.php | 101 - .../CollectionToArrayTransformer.php | 63 - .../Form/DoctrineOrmExtension.php | 39 - .../Form/DoctrineOrmTypeGuesser.php | 206 - .../MergeDoctrineCollectionListener.php | 52 - .../Form/Type/DoctrineType.php | 258 - .../doctrine-bridge/Form/Type/EntityType.php | 93 - .../IdGenerator/UlidGenerator.php | 43 - .../IdGenerator/UuidGenerator.php | 81 - .../doctrine-bridge/ManagerRegistry.php | 75 - .../Messenger/AbstractDoctrineMiddleware.php | 49 - ...rineClearEntityManagerWorkerSubscriber.php | 55 - .../DoctrineCloseConnectionMiddleware.php | 38 - ...octrineOpenTransactionLoggerMiddleware.php | 57 - .../DoctrinePingConnectionMiddleware.php | 61 - .../DoctrineTransactionMiddleware.php | 48 - .../Middleware/Debug/Connection.php | 126 - .../Middleware/Debug/DBAL3/Connection.php | 133 - .../Middleware/Debug/DBAL3/Statement.php | 76 - .../Middleware/Debug/DebugDataHolder.php | 48 - .../Middleware/Debug/Driver.php | 55 - .../Middleware/Debug/Middleware.php | 36 - .../Middleware/Debug/Query.php | 113 - .../Middleware/Debug/Statement.php | 64 - .../Middleware/IdleConnection/Driver.php | 37 - .../Middleware/IdleConnection/Listener.php | 55 - .../PropertyInfo/DoctrineExtractor.php | 434 - vendor/symfony/doctrine-bridge/README.md | 13 - .../SchemaListener/AbstractSchemaListener.php | 53 - ...DoctrineDbalCacheAdapterSchemaListener.php | 39 - .../LockStoreSchemaListener.php | 40 - ...ssengerTransportDoctrineSchemaListener.php | 83 - .../PdoSessionHandlerSchemaListener.php | 38 - ...rMeTokenProviderDoctrineSchemaListener.php | 45 - .../RememberMe/DoctrineTokenProvider.php | 196 - .../Security/User/EntityUserProvider.php | 158 - .../Security/User/UserLoaderInterface.php | 35 - .../doctrine-bridge/Types/AbstractUidType.php | 113 - .../doctrine-bridge/Types/UlidType.php | 29 - .../doctrine-bridge/Types/UuidType.php | 29 - .../Validator/Constraints/UniqueEntity.php | 103 - .../Constraints/UniqueEntityValidator.php | 304 - .../Validator/DoctrineInitializer.php | 35 - .../Validator/DoctrineLoader.php | 144 - vendor/symfony/doctrine-bridge/composer.json | 75 - .../symfony/doctrine-messenger/CHANGELOG.md | 13 - vendor/symfony/doctrine-messenger/README.md | 12 - .../Transport/Connection.php | 575 - .../Transport/DoctrineReceivedStamp.php | 30 - .../Transport/DoctrineReceiver.php | 177 - .../Transport/DoctrineSender.php | 53 - .../Transport/DoctrineTransport.php | 105 - .../Transport/DoctrineTransportFactory.php | 62 - .../Transport/PostgreSqlConnection.php | 144 - .../symfony/doctrine-messenger/composer.json | 39 - .../dom-crawler/AbstractUriElement.php | 110 - vendor/symfony/dom-crawler/CHANGELOG.md | 130 - vendor/symfony/dom-crawler/Crawler.php | 1236 -- .../dom-crawler/Field/ChoiceFormField.php | 295 - .../dom-crawler/Field/FileFormField.php | 102 - .../symfony/dom-crawler/Field/FormField.php | 103 - .../dom-crawler/Field/InputFormField.php | 46 - .../dom-crawler/Field/TextareaFormField.php | 37 - vendor/symfony/dom-crawler/Form.php | 464 - .../symfony/dom-crawler/FormFieldRegistry.php | 175 - vendor/symfony/dom-crawler/Image.php | 37 - vendor/symfony/dom-crawler/Link.php | 34 - vendor/symfony/dom-crawler/README.md | 13 - .../CrawlerAnySelectorTextContains.php | 69 - .../Constraint/CrawlerAnySelectorTextSame.php | 57 - .../CrawlerSelectorAttributeValueSame.php | 55 - .../Test/Constraint/CrawlerSelectorCount.php | 45 - .../Test/Constraint/CrawlerSelectorExists.php | 46 - .../CrawlerSelectorTextContains.php | 64 - .../Constraint/CrawlerSelectorTextSame.php | 53 - vendor/symfony/dom-crawler/UriResolver.php | 140 - vendor/symfony/dom-crawler/composer.json | 34 - vendor/symfony/dotenv/CHANGELOG.md | 50 - .../symfony/dotenv/Command/DebugCommand.php | 214 - .../dotenv/Command/DotenvDumpCommand.php | 114 - vendor/symfony/dotenv/Dotenv.php | 575 - .../dotenv/Exception/ExceptionInterface.php | 21 - .../dotenv/Exception/FormatException.php | 34 - .../Exception/FormatExceptionContext.php | 44 - .../dotenv/Exception/PathException.php | 25 - vendor/symfony/dotenv/README.md | 36 - vendor/symfony/dotenv/composer.json | 36 - .../symfony/error-handler/BufferingLogger.php | 68 - vendor/symfony/error-handler/CHANGELOG.md | 45 - vendor/symfony/error-handler/Debug.php | 40 - .../error-handler/DebugClassLoader.php | 1275 -- .../Error/ClassNotFoundError.php | 29 - .../error-handler/Error/FatalError.php | 85 - .../error-handler/Error/OutOfMemoryError.php | 16 - .../Error/UndefinedFunctionError.php | 29 - .../Error/UndefinedMethodError.php | 29 - .../ClassNotFoundErrorEnhancer.php | 183 - .../ErrorEnhancer/ErrorEnhancerInterface.php | 20 - .../UndefinedFunctionErrorEnhancer.php | 84 - .../UndefinedMethodErrorEnhancer.php | 66 - vendor/symfony/error-handler/ErrorHandler.php | 747 -- .../ErrorRenderer/CliErrorRenderer.php | 46 - .../ErrorRenderer/ErrorRendererInterface.php | 37 - .../ErrorRenderer/FileLinkFormatter.php | 106 - .../ErrorRenderer/HtmlErrorRenderer.php | 355 - .../ErrorRenderer/SerializerErrorRenderer.php | 83 - .../Exception/FlattenException.php | 440 - .../Exception/SilencedErrorContext.php | 63 - .../error-handler/Internal/TentativeTypes.php | 1643 --- vendor/symfony/error-handler/README.md | 44 - .../Resources/assets/css/error.css | 4 - .../Resources/assets/css/exception.css | 359 - .../Resources/assets/css/exception_full.css | 128 - .../Resources/assets/images/chevron-right.svg | 1 - .../assets/images/favicon.png.base64 | 1 - .../Resources/assets/images/icon-book.svg | 1 - .../Resources/assets/images/icon-copy.svg | 1 - .../assets/images/icon-minus-square-o.svg | 1 - .../assets/images/icon-minus-square.svg | 1 - .../assets/images/icon-plus-square-o.svg | 1 - .../assets/images/icon-plus-square.svg | 1 - .../Resources/assets/images/icon-support.svg | 1 - .../assets/images/symfony-ghost.svg.php | 1 - .../Resources/assets/images/symfony-logo.svg | 1 - .../Resources/assets/js/exception.js | 304 - .../bin/extract-tentative-return-types.php | 84 - .../Resources/views/error.html.php | 21 - .../Resources/views/exception.html.php | 115 - .../Resources/views/exception_full.html.php | 42 - .../Resources/views/logs.html.php | 45 - .../Resources/views/trace.html.php | 43 - .../Resources/views/traces.html.php | 59 - .../Resources/views/traces_text.html.php | 43 - .../symfony/error-handler/ThrowableUtils.php | 37 - vendor/symfony/error-handler/composer.json | 42 - .../event-dispatcher-contracts/CHANGELOG.md | 5 - .../event-dispatcher-contracts/Event.php | 51 - .../EventDispatcherInterface.php | 33 - .../event-dispatcher-contracts/README.md | 9 - .../event-dispatcher-contracts/composer.json | 35 - .../Attribute/AsEventListener.php | 35 - vendor/symfony/event-dispatcher/CHANGELOG.md | 96 - .../Debug/TraceableEventDispatcher.php | 351 - .../Debug/WrappedListener.php | 143 - .../AddEventAliasesPass.php | 38 - .../RegisterListenersPass.php | 213 - .../event-dispatcher/EventDispatcher.php | 256 - .../EventDispatcherInterface.php | 66 - .../EventSubscriberInterface.php | 49 - .../symfony/event-dispatcher/GenericEvent.php | 155 - .../ImmutableEventDispatcher.php | 65 - vendor/symfony/event-dispatcher/README.md | 15 - vendor/symfony/event-dispatcher/composer.json | 47 - .../symfony/expression-language/CHANGELOG.md | 60 - .../symfony/expression-language/Compiler.php | 142 - .../expression-language/Expression.php | 33 - .../ExpressionFunction.php | 92 - .../ExpressionFunctionProviderInterface.php | 23 - .../ExpressionLanguage.php | 188 - vendor/symfony/expression-language/Lexer.php | 107 - .../Node/ArgumentsNode.php | 40 - .../expression-language/Node/ArrayNode.php | 116 - .../expression-language/Node/BinaryNode.php | 192 - .../Node/ConditionalNode.php | 56 - .../expression-language/Node/ConstantNode.php | 83 - .../expression-language/Node/FunctionNode.php | 67 - .../expression-language/Node/GetAttrNode.php | 166 - .../expression-language/Node/NameNode.php | 45 - .../symfony/expression-language/Node/Node.php | 113 - .../Node/NullCoalesceNode.php | 65 - .../expression-language/Node/UnaryNode.php | 64 - .../expression-language/ParsedExpression.php | 34 - vendor/symfony/expression-language/Parser.php | 428 - vendor/symfony/expression-language/README.md | 15 - .../Resources/bin/generate_operator_regex.php | 31 - .../SerializedParsedExpression.php | 38 - .../expression-language/SyntaxError.php | 41 - vendor/symfony/expression-language/Token.php | 54 - .../expression-language/TokenStream.php | 83 - .../symfony/expression-language/composer.json | 31 - vendor/symfony/filesystem/CHANGELOG.md | 92 - .../Exception/ExceptionInterface.php | 21 - .../Exception/FileNotFoundException.php | 34 - .../filesystem/Exception/IOException.php | 36 - .../Exception/IOExceptionInterface.php | 25 - .../Exception/InvalidArgumentException.php | 19 - .../filesystem/Exception/RuntimeException.php | 19 - vendor/symfony/filesystem/Filesystem.php | 771 -- vendor/symfony/filesystem/Path.php | 816 -- vendor/symfony/filesystem/README.md | 13 - vendor/symfony/filesystem/composer.json | 33 - vendor/symfony/finder/CHANGELOG.md | 103 - .../symfony/finder/Comparator/Comparator.php | 62 - .../finder/Comparator/DateComparator.php | 50 - .../finder/Comparator/NumberComparator.php | 78 - .../Exception/AccessDeniedException.php | 19 - .../Exception/DirectoryNotFoundException.php | 19 - vendor/symfony/finder/Finder.php | 856 -- vendor/symfony/finder/Gitignore.php | 91 - vendor/symfony/finder/Glob.php | 109 - .../finder/Iterator/CustomFilterIterator.php | 61 - .../Iterator/DateRangeFilterIterator.php | 58 - .../Iterator/DepthRangeFilterIterator.php | 48 - .../ExcludeDirectoryFilterIterator.php | 110 - .../Iterator/FileTypeFilterIterator.php | 53 - .../Iterator/FilecontentFilterIterator.php | 58 - .../Iterator/FilenameFilterIterator.php | 45 - .../symfony/finder/Iterator/LazyIterator.php | 32 - .../Iterator/MultiplePcreFilterIterator.php | 107 - .../finder/Iterator/PathFilterIterator.php | 56 - .../Iterator/RecursiveDirectoryIterator.php | 134 - .../Iterator/SizeRangeFilterIterator.php | 57 - .../finder/Iterator/SortableIterator.php | 103 - .../Iterator/VcsIgnoredFilterIterator.php | 173 - vendor/symfony/finder/README.md | 14 - vendor/symfony/finder/SplFileInfo.php | 80 - vendor/symfony/finder/composer.json | 31 - vendor/symfony/flex/README.md | 10 - vendor/symfony/flex/composer.json | 32 - .../flex/src/Command/DumpEnvCommand.php | 147 - .../src/Command/InstallRecipesCommand.php | 181 - .../flex/src/Command/RecipesCommand.php | 344 - .../flex/src/Command/UpdateRecipesCommand.php | 415 - vendor/symfony/flex/src/Configurator.php | 118 - .../src/Configurator/AbstractConfigurator.php | 131 - .../src/Configurator/AddLinesConfigurator.php | 270 - .../src/Configurator/BundlesConfigurator.php | 150 - .../ComposerScriptsConfigurator.php | 75 - .../Configurator/ContainerConfigurator.php | 164 - .../CopyFromPackageConfigurator.php | 169 - .../CopyFromRecipeConfigurator.php | 175 - .../DockerComposeConfigurator.php | 404 - .../Configurator/DockerfileConfigurator.php | 125 - .../flex/src/Configurator/EnvConfigurator.php | 277 - .../Configurator/GitignoreConfigurator.php | 105 - .../src/Configurator/MakefileConfigurator.php | 124 - vendor/symfony/flex/src/Downloader.php | 469 - vendor/symfony/flex/src/Event/UpdateEvent.php | 38 - vendor/symfony/flex/src/Flex.php | 869 -- vendor/symfony/flex/src/GithubApi.php | 200 - .../symfony/flex/src/InformationOperation.php | 95 - vendor/symfony/flex/src/Lock.php | 89 - vendor/symfony/flex/src/Options.php | 88 - vendor/symfony/flex/src/PackageFilter.php | 155 - .../flex/src/PackageJsonSynchronizer.php | 403 - vendor/symfony/flex/src/PackageResolver.php | 151 - vendor/symfony/flex/src/Path.php | 41 - vendor/symfony/flex/src/Recipe.php | 123 - vendor/symfony/flex/src/Response.php | 90 - vendor/symfony/flex/src/ScriptExecutor.php | 139 - vendor/symfony/flex/src/SymfonyBundle.php | 115 - vendor/symfony/flex/src/Unpack/Operation.php | 49 - vendor/symfony/flex/src/Unpack/Result.php | 55 - vendor/symfony/flex/src/Unpacker.php | 208 - vendor/symfony/flex/src/Update/DiffHelper.php | 45 - .../symfony/flex/src/Update/RecipePatch.php | 52 - .../symfony/flex/src/Update/RecipePatcher.php | 259 - .../symfony/flex/src/Update/RecipeUpdate.php | 114 - vendor/symfony/form/AbstractExtension.php | 177 - .../symfony/form/AbstractRendererEngine.php | 187 - vendor/symfony/form/AbstractType.php | 66 - vendor/symfony/form/AbstractTypeExtension.php | 39 - vendor/symfony/form/Button.php | 369 - vendor/symfony/form/ButtonBuilder.php | 669 - vendor/symfony/form/ButtonTypeInterface.php | 21 - vendor/symfony/form/CHANGELOG.md | 632 - vendor/symfony/form/CallbackTransformer.php | 34 - .../form/ChoiceList/ArrayChoiceList.php | 210 - vendor/symfony/form/ChoiceList/ChoiceList.php | 149 - .../form/ChoiceList/ChoiceListInterface.php | 138 - .../Factory/Cache/AbstractStaticOption.php | 55 - .../ChoiceList/Factory/Cache/ChoiceAttr.php | 27 - .../Factory/Cache/ChoiceFieldName.php | 27 - .../ChoiceList/Factory/Cache/ChoiceFilter.php | 27 - .../ChoiceList/Factory/Cache/ChoiceLabel.php | 27 - .../ChoiceList/Factory/Cache/ChoiceLoader.php | 43 - .../Cache/ChoiceTranslationParameters.php | 27 - .../ChoiceList/Factory/Cache/ChoiceValue.php | 27 - .../form/ChoiceList/Factory/Cache/GroupBy.php | 27 - .../Factory/Cache/PreferredChoice.php | 27 - .../Factory/CachingFactoryDecorator.php | 225 - .../Factory/ChoiceListFactoryInterface.php | 85 - .../Factory/DefaultChoiceListFactory.php | 303 - .../Factory/PropertyAccessDecorator.php | 189 - .../form/ChoiceList/LazyChoiceList.php | 83 - .../Loader/AbstractChoiceLoader.php | 66 - .../Loader/CallbackChoiceLoader.php | 35 - .../Loader/ChoiceLoaderInterface.php | 72 - .../Loader/FilterChoiceLoaderDecorator.php | 64 - .../Loader/IntlCallbackChoiceLoader.php | 38 - .../form/ChoiceList/View/ChoiceGroupView.php | 41 - .../form/ChoiceList/View/ChoiceListView.php | 54 - .../form/ChoiceList/View/ChoiceView.php | 40 - .../symfony/form/ClearableErrorsInterface.php | 29 - vendor/symfony/form/ClickableInterface.php | 25 - vendor/symfony/form/Command/DebugCommand.php | 279 - .../form/Console/Descriptor/Descriptor.php | 195 - .../Console/Descriptor/JsonDescriptor.php | 118 - .../Console/Descriptor/TextDescriptor.php | 216 - .../form/Console/Helper/DescriptorHelper.php | 33 - vendor/symfony/form/DataAccessorInterface.php | 50 - vendor/symfony/form/DataMapperInterface.php | 62 - .../symfony/form/DataTransformerInterface.php | 95 - .../form/DependencyInjection/FormPass.php | 127 - .../symfony/form/Event/PostSetDataEvent.php | 29 - vendor/symfony/form/Event/PostSubmitEvent.php | 29 - vendor/symfony/form/Event/PreSetDataEvent.php | 23 - vendor/symfony/form/Event/PreSubmitEvent.php | 25 - vendor/symfony/form/Event/SubmitEvent.php | 24 - .../form/Exception/AccessException.php | 16 - .../Exception/AlreadySubmittedException.php | 22 - .../form/Exception/BadMethodCallException.php | 21 - .../form/Exception/ErrorMappingException.php | 16 - .../form/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../InvalidConfigurationException.php | 16 - .../symfony/form/Exception/LogicException.php | 21 - .../form/Exception/OutOfBoundsException.php | 21 - .../form/Exception/RuntimeException.php | 21 - .../form/Exception/StringCastException.php | 16 - .../TransformationFailedException.php | 52 - .../Exception/UnexpectedTypeException.php | 20 - .../form/Extension/Core/CoreExtension.php | 90 - .../Core/DataAccessor/CallbackAccessor.php | 52 - .../Core/DataAccessor/ChainAccessor.php | 76 - .../DataAccessor/PropertyPathAccessor.php | 122 - .../Core/DataMapper/CheckboxListMapper.php | 57 - .../Extension/Core/DataMapper/DataMapper.php | 85 - .../Core/DataMapper/RadioListMapper.php | 60 - .../ArrayToPartsTransformer.php | 80 - .../BaseDateTimeTransformer.php | 59 - .../BooleanToStringTransformer.php | 83 - .../ChoiceToValueTransformer.php | 53 - .../ChoicesToValuesTransformer.php | 69 - .../DataTransformer/DataTransformerChain.php | 84 - .../DateIntervalToArrayTransformer.php | 169 - .../DateIntervalToStringTransformer.php | 97 - ...DateTimeImmutableToDateTimeTransformer.php | 65 - .../DateTimeToArrayTransformer.php | 182 - ...ateTimeToHtml5LocalDateTimeTransformer.php | 107 - .../DateTimeToLocalizedStringTransformer.php | 199 - .../DateTimeToRfc3339Transformer.php | 86 - .../DateTimeToStringTransformer.php | 135 - .../DateTimeToTimestampTransformer.php | 78 - .../DateTimeZoneToStringTransformer.php | 76 - .../IntegerToLocalizedStringTransformer.php | 56 - .../IntlTimeZoneToStringTransformer.php | 78 - .../MoneyToLocalizedStringTransformer.php | 86 - .../NumberToLocalizedStringTransformer.php | 207 - .../PercentToLocalizedStringTransformer.php | 217 - .../StringToFloatTransformer.php | 56 - .../UlidToStringTransformer.php | 73 - .../UuidToStringTransformer.php | 75 - .../ValueToDuplicatesTransformer.php | 79 - .../WeekToArrayTransformer.php | 107 - .../EventListener/FixUrlProtocolListener.php | 46 - .../EventListener/MergeCollectionListener.php | 106 - .../Core/EventListener/ResizeFormListener.php | 171 - .../TransformationFailureListener.php | 63 - .../Core/EventListener/TrimListener.php | 41 - .../form/Extension/Core/Type/BaseType.php | 150 - .../form/Extension/Core/Type/BirthdayType.php | 38 - .../form/Extension/Core/Type/ButtonType.php | 40 - .../form/Extension/Core/Type/CheckboxType.php | 63 - .../form/Extension/Core/Type/ChoiceType.php | 469 - .../Extension/Core/Type/CollectionType.php | 132 - .../form/Extension/Core/Type/ColorType.php | 80 - .../form/Extension/Core/Type/CountryType.php | 57 - .../form/Extension/Core/Type/CurrencyType.php | 54 - .../Extension/Core/Type/DateIntervalType.php | 265 - .../form/Extension/Core/Type/DateTimeType.php | 346 - .../form/Extension/Core/Type/DateType.php | 395 - .../form/Extension/Core/Type/EmailType.php | 35 - .../form/Extension/Core/Type/EnumType.php | 54 - .../form/Extension/Core/Type/FileType.php | 229 - .../form/Extension/Core/Type/FormType.php | 206 - .../form/Extension/Core/Type/HiddenType.php | 35 - .../form/Extension/Core/Type/IntegerType.php | 60 - .../form/Extension/Core/Type/LanguageType.php | 83 - .../form/Extension/Core/Type/LocaleType.php | 54 - .../form/Extension/Core/Type/MoneyType.php | 137 - .../form/Extension/Core/Type/NumberType.php | 92 - .../form/Extension/Core/Type/PasswordType.php | 46 - .../form/Extension/Core/Type/PercentType.php | 76 - .../form/Extension/Core/Type/RadioType.php | 35 - .../form/Extension/Core/Type/RangeType.php | 35 - .../form/Extension/Core/Type/RepeatedType.php | 66 - .../form/Extension/Core/Type/ResetType.php | 33 - .../form/Extension/Core/Type/SearchType.php | 35 - .../form/Extension/Core/Type/SubmitType.php | 51 - .../form/Extension/Core/Type/TelType.php | 35 - .../form/Extension/Core/Type/TextType.php | 55 - .../form/Extension/Core/Type/TextareaType.php | 35 - .../form/Extension/Core/Type/TimeType.php | 384 - .../form/Extension/Core/Type/TimezoneType.php | 123 - .../Type/TransformationFailureExtension.php | 40 - .../form/Extension/Core/Type/UlidType.php | 38 - .../form/Extension/Core/Type/UrlType.php | 62 - .../form/Extension/Core/Type/UuidType.php | 38 - .../form/Extension/Core/Type/WeekType.php | 173 - .../form/Extension/Csrf/CsrfExtension.php | 38 - .../EventListener/CsrfValidationListener.php | 76 - .../Csrf/Type/FormTypeCsrfExtension.php | 97 - .../DataCollector/DataCollectorExtension.php | 35 - .../EventListener/DataCollectorListener.php | 70 - .../DataCollector/FormDataCollector.php | 299 - .../FormDataCollectorInterface.php | 83 - .../DataCollector/FormDataExtractor.php | 156 - .../FormDataExtractorInterface.php | 43 - .../Proxy/ResolvedTypeDataCollectorProxy.php | 109 - .../ResolvedTypeFactoryDataCollectorProxy.php | 40 - .../Type/DataCollectorTypeExtension.php | 44 - .../DependencyInjectionExtension.php | 96 - .../HtmlSanitizer/HtmlSanitizerExtension.php | 36 - .../Type/TextTypeHtmlSanitizerExtension.php | 66 - .../HttpFoundationExtension.php | 29 - .../HttpFoundationRequestHandler.php | 123 - .../Type/FormTypeHttpFoundationExtension.php | 41 - .../EventListener/PasswordHasherListener.php | 110 - .../PasswordHasherExtension.php | 36 - .../Type/FormTypePasswordHasherExtension.php | 39 - .../PasswordTypePasswordHasherExtension.php | 54 - .../Extension/Validator/Constraints/Form.php | 33 - .../Validator/Constraints/FormValidator.php | 276 - .../EventListener/ValidationListener.php | 52 - .../Validator/Type/BaseValidatorExtension.php | 56 - .../Type/FormTypeValidatorExtension.php | 69 - .../Type/RepeatedTypeValidatorExtension.php | 38 - .../Type/SubmitTypeValidatorExtension.php | 25 - .../Type/UploadValidatorExtension.php | 43 - .../Validator/ValidatorExtension.php | 61 - .../Validator/ValidatorTypeGuesser.php | 291 - .../Validator/ViolationMapper/MappingRule.php | 74 - .../ViolationMapper/RelativePath.php | 33 - .../ViolationMapper/ViolationMapper.php | 338 - .../ViolationMapperInterface.php | 29 - .../ViolationMapper/ViolationPath.php | 217 - .../ViolationMapper/ViolationPathIterator.php | 30 - vendor/symfony/form/FileUploadError.php | 19 - vendor/symfony/form/Form.php | 1010 -- vendor/symfony/form/FormBuilder.php | 212 - vendor/symfony/form/FormBuilderInterface.php | 69 - vendor/symfony/form/FormConfigBuilder.php | 653 - .../form/FormConfigBuilderInterface.php | 260 - vendor/symfony/form/FormConfigInterface.php | 196 - vendor/symfony/form/FormError.php | 116 - vendor/symfony/form/FormErrorIterator.php | 274 - vendor/symfony/form/FormEvent.php | 50 - vendor/symfony/form/FormEvents.php | 113 - .../symfony/form/FormExtensionInterface.php | 55 - vendor/symfony/form/FormFactory.php | 102 - vendor/symfony/form/FormFactoryBuilder.php | 152 - .../form/FormFactoryBuilderInterface.php | 96 - vendor/symfony/form/FormFactoryInterface.php | 90 - vendor/symfony/form/FormInterface.php | 289 - vendor/symfony/form/FormRegistry.php | 156 - vendor/symfony/form/FormRegistryInterface.php | 46 - vendor/symfony/form/FormRenderer.php | 283 - .../form/FormRendererEngineInterface.php | 132 - vendor/symfony/form/FormRendererInterface.php | 85 - .../form/FormTypeExtensionInterface.php | 68 - vendor/symfony/form/FormTypeGuesserChain.php | 85 - .../symfony/form/FormTypeGuesserInterface.php | 38 - vendor/symfony/form/FormTypeInterface.php | 98 - vendor/symfony/form/FormView.php | 152 - vendor/symfony/form/Forms.php | 87 - vendor/symfony/form/Guess/Guess.php | 101 - vendor/symfony/form/Guess/TypeGuess.php | 52 - vendor/symfony/form/Guess/ValueGuess.php | 38 - vendor/symfony/form/NativeRequestHandler.php | 240 - vendor/symfony/form/PreloadedExtension.php | 70 - vendor/symfony/form/README.md | 13 - .../symfony/form/RequestHandlerInterface.php | 30 - vendor/symfony/form/ResolvedFormType.php | 172 - .../symfony/form/ResolvedFormTypeFactory.php | 23 - .../form/ResolvedFormTypeFactoryInterface.php | 34 - .../form/ResolvedFormTypeInterface.php | 80 - .../form/Resources/config/validation.xml | 13 - .../Resources/translations/validators.af.xlf | 139 - .../Resources/translations/validators.ar.xlf | 139 - .../Resources/translations/validators.az.xlf | 139 - .../Resources/translations/validators.be.xlf | 139 - .../Resources/translations/validators.bg.xlf | 139 - .../Resources/translations/validators.bs.xlf | 139 - .../Resources/translations/validators.ca.xlf | 139 - .../Resources/translations/validators.cs.xlf | 139 - .../Resources/translations/validators.cy.xlf | 139 - .../Resources/translations/validators.da.xlf | 139 - .../Resources/translations/validators.de.xlf | 139 - .../Resources/translations/validators.el.xlf | 139 - .../Resources/translations/validators.en.xlf | 139 - .../Resources/translations/validators.es.xlf | 139 - .../Resources/translations/validators.et.xlf | 139 - .../Resources/translations/validators.eu.xlf | 139 - .../Resources/translations/validators.fa.xlf | 139 - .../Resources/translations/validators.fi.xlf | 139 - .../Resources/translations/validators.fr.xlf | 139 - .../Resources/translations/validators.gl.xlf | 139 - .../Resources/translations/validators.he.xlf | 139 - .../Resources/translations/validators.hr.xlf | 139 - .../Resources/translations/validators.hu.xlf | 139 - .../Resources/translations/validators.hy.xlf | 139 - .../Resources/translations/validators.id.xlf | 139 - .../Resources/translations/validators.it.xlf | 139 - .../Resources/translations/validators.ja.xlf | 139 - .../Resources/translations/validators.lb.xlf | 139 - .../Resources/translations/validators.lt.xlf | 139 - .../Resources/translations/validators.lv.xlf | 139 - .../Resources/translations/validators.mk.xlf | 139 - .../Resources/translations/validators.mn.xlf | 139 - .../Resources/translations/validators.my.xlf | 139 - .../Resources/translations/validators.nb.xlf | 139 - .../Resources/translations/validators.nl.xlf | 139 - .../Resources/translations/validators.nn.xlf | 139 - .../Resources/translations/validators.no.xlf | 139 - .../Resources/translations/validators.pl.xlf | 139 - .../Resources/translations/validators.pt.xlf | 139 - .../translations/validators.pt_BR.xlf | 139 - .../Resources/translations/validators.ro.xlf | 139 - .../Resources/translations/validators.ru.xlf | 139 - .../Resources/translations/validators.sk.xlf | 139 - .../Resources/translations/validators.sl.xlf | 139 - .../Resources/translations/validators.sq.xlf | 148 - .../translations/validators.sr_Cyrl.xlf | 139 - .../translations/validators.sr_Latn.xlf | 139 - .../Resources/translations/validators.sv.xlf | 139 - .../Resources/translations/validators.th.xlf | 139 - .../Resources/translations/validators.tl.xlf | 139 - .../Resources/translations/validators.tr.xlf | 139 - .../Resources/translations/validators.uk.xlf | 139 - .../Resources/translations/validators.ur.xlf | 139 - .../Resources/translations/validators.uz.xlf | 139 - .../Resources/translations/validators.vi.xlf | 139 - .../translations/validators.zh_CN.xlf | 139 - .../translations/validators.zh_TW.xlf | 139 - vendor/symfony/form/ReversedTransformer.php | 38 - vendor/symfony/form/SubmitButton.php | 49 - vendor/symfony/form/SubmitButtonBuilder.php | 28 - .../form/SubmitButtonTypeInterface.php | 21 - .../form/Test/FormBuilderInterface.php | 18 - .../form/Test/FormIntegrationTestCase.php | 54 - vendor/symfony/form/Test/FormInterface.php | 18 - .../form/Test/FormPerformanceTestCase.php | 59 - .../Test/Traits/ValidatorExtensionTrait.php | 41 - vendor/symfony/form/Test/TypeTestCase.php | 51 - vendor/symfony/form/Util/FormUtil.php | 68 - .../form/Util/InheritDataAwareIterator.php | 37 - .../form/Util/OptionsResolverWrapper.php | 110 - vendor/symfony/form/Util/OrderedHashMap.php | 155 - .../form/Util/OrderedHashMapIterator.php | 115 - vendor/symfony/form/Util/ServerParams.php | 91 - vendor/symfony/form/Util/StringUtil.php | 53 - vendor/symfony/form/composer.json | 64 - vendor/symfony/framework-bundle/CHANGELOG.md | 666 - .../AbstractPhpFileCacheWarmer.php | 79 - .../CachePoolClearerCacheWarmer.php | 56 - .../CacheWarmer/ConfigBuilderCacheWarmer.php | 107 - .../CacheWarmer/RouterCacheWarmer.php | 63 - .../CacheWarmer/SerializerCacheWarmer.php | 82 - .../CacheWarmer/TranslationsCacheWarmer.php | 60 - .../CacheWarmer/ValidatorCacheWarmer.php | 92 - .../framework-bundle/Command/AboutCommand.php | 132 - .../Command/AbstractConfigCommand.php | 189 - .../Command/AssetsInstallCommand.php | 267 - .../Command/BuildDebugContainerTrait.php | 71 - .../Command/CacheClearCommand.php | 254 - .../Command/CachePoolClearCommand.php | 140 - .../Command/CachePoolDeleteCommand.php | 86 - .../CachePoolInvalidateTagsCommand.php | 108 - .../Command/CachePoolListCommand.php | 55 - .../Command/CachePoolPruneCommand.php | 63 - .../Command/CacheWarmupCommand.php | 83 - .../Command/ConfigDebugCommand.php | 275 - .../Command/ConfigDumpReferenceCommand.php | 188 - .../Command/ContainerDebugCommand.php | 365 - .../Command/ContainerLintCommand.php | 116 - .../Command/DebugAutowiringCommand.php | 199 - .../Command/EventDispatcherDebugCommand.php | 160 - .../Command/RouterDebugCommand.php | 171 - .../Command/RouterMatchCommand.php | 117 - .../Command/SecretsDecryptToLocalCommand.php | 98 - .../SecretsEncryptFromLocalCommand.php | 73 - .../Command/SecretsGenerateKeysCommand.php | 120 - .../Command/SecretsListCommand.php | 101 - .../Command/SecretsRemoveCommand.php | 96 - .../Command/SecretsRevealCommand.php | 72 - .../Command/SecretsSetCommand.php | 143 - .../Command/TranslationDebugCommand.php | 400 - .../Command/TranslationUpdateCommand.php | 435 - .../Command/WorkflowDumpCommand.php | 127 - .../Command/XliffLintCommand.php | 57 - .../Command/YamlLintCommand.php | 56 - .../framework-bundle/Console/Application.php | 221 - .../Console/Descriptor/Descriptor.php | 363 - .../Console/Descriptor/JsonDescriptor.php | 457 - .../Console/Descriptor/MarkdownDescriptor.php | 451 - .../Console/Descriptor/TextDescriptor.php | 674 - .../Console/Descriptor/XmlDescriptor.php | 608 - .../Console/Helper/DescriptorHelper.php | 37 - .../Controller/AbstractController.php | 452 - .../Controller/ControllerResolver.php | 37 - .../Controller/RedirectController.php | 187 - .../Controller/TemplateController.php | 73 - .../DataCollector/AbstractDataCollector.php | 30 - .../DataCollector/RouterDataCollector.php | 37 - .../TemplateAwareDataCollectorInterface.php | 22 - .../Compiler/AddDebugLogProcessorPass.php | 35 - .../Compiler/AssetsContextPass.php | 44 - .../ContainerBuilderDebugDumpPass.php | 39 - .../Compiler/ErrorLoggerCompilerPass.php | 37 - .../Compiler/ProfilerPass.php | 61 - ...oveUnusedSessionMarshallingHandlerPass.php | 43 - .../TestServiceContainerRealRefPass.php | 67 - .../TestServiceContainerWeakRefPass.php | 58 - .../Compiler/UnusedTagsPass.php | 139 - .../DependencyInjection/Configuration.php | 2510 ---- .../FrameworkExtension.php | 3145 ----- .../VirtualRequestStackPass.php | 34 - .../EventListener/ConsoleProfilerListener.php | 156 - .../SuggestMissingPackageSubscriber.php | 79 - .../framework-bundle/FrameworkBundle.php | 194 - .../framework-bundle/HttpCache/HttpCache.php | 88 - .../Kernel/MicroKernelTrait.php | 224 - .../framework-bundle/KernelBrowser.php | 230 - vendor/symfony/framework-bundle/README.md | 20 - .../Resources/bin/check-unused-known-tags.php | 23 - .../Resources/config/asset_mapper.php | 258 - .../Resources/config/assets.php | 85 - .../Resources/config/cache.php | 253 - .../Resources/config/cache_debug.php | 39 - .../Resources/config/collectors.php | 82 - .../Resources/config/console.php | 393 - .../Resources/config/debug.php | 50 - .../Resources/config/debug_prod.php | 43 - .../Resources/config/error_renderer.php | 38 - .../framework-bundle/Resources/config/esi.php | 25 - .../Resources/config/form.php | 154 - .../Resources/config/form_csrf.php | 29 - .../Resources/config/form_debug.php | 38 - .../Resources/config/fragment_listener.php | 22 - .../Resources/config/fragment_renderer.php | 71 - .../Resources/config/html_sanitizer.php | 30 - .../Resources/config/http_client.php | 99 - .../Resources/config/http_client_debug.php | 25 - .../Resources/config/identity_translator.php | 24 - .../Resources/config/lock.php | 30 - .../Resources/config/mailer.php | 87 - .../Resources/config/mailer_debug.php | 27 - .../Resources/config/mailer_transports.php | 72 - .../Resources/config/mailer_webhook.php | 66 - .../Resources/config/messenger.php | 227 - .../Resources/config/messenger_debug.php | 25 - .../Resources/config/mime_type.php | 26 - .../Resources/config/notifier.php | 133 - .../Resources/config/notifier_debug.php | 22 - .../Resources/config/notifier_transports.php | 135 - .../Resources/config/notifier_webhook.php | 25 - .../Resources/config/process.php | 22 - .../Resources/config/profiling.php | 55 - .../Resources/config/property_access.php | 30 - .../Resources/config/property_info.php | 52 - .../Resources/config/rate_limiter.php | 30 - .../Resources/config/remote_event.php | 24 - .../Resources/config/request.php | 22 - .../Resources/config/routing.php | 212 - .../Resources/config/routing/errors.xml | 12 - .../Resources/config/routing/webhook.xml | 11 - .../Resources/config/scheduler.php | 38 - .../Resources/config/schema/symfony-1.0.xsd | 971 -- .../Resources/config/secrets.php | 37 - .../Resources/config/security_csrf.php | 50 - .../Resources/config/semaphore.php | 23 - .../Resources/config/serializer.php | 219 - .../Resources/config/serializer_debug.php | 32 - .../Resources/config/services.php | 242 - .../Resources/config/session.php | 109 - .../framework-bundle/Resources/config/ssi.php | 25 - .../Resources/config/test.php | 59 - .../Resources/config/translation.php | 192 - .../Resources/config/translation_debug.php | 30 - .../config/translation_providers.php | 79 - .../Resources/config/type_info.php | 50 - .../framework-bundle/Resources/config/uid.php | 41 - .../Resources/config/validator.php | 131 - .../Resources/config/validator_debug.php | 38 - .../framework-bundle/Resources/config/web.php | 148 - .../Resources/config/web_link.php | 29 - .../Resources/config/webhook.php | 57 - .../Resources/config/workflow.php | 46 - .../Resources/config/workflow_debug.php | 29 - .../Attribute/AsRoutingConditionService.php | 54 - .../AttributeRouteControllerLoader.php | 51 - .../Routing/DelegatingLoader.php | 90 - .../RedirectableCompiledUrlMatcher.php | 36 - .../Routing/RouteLoaderInterface.php | 19 - .../framework-bundle/Routing/Router.php | 198 - .../Secrets/AbstractVault.php | 47 - .../framework-bundle/Secrets/DotenvVault.php | 104 - .../framework-bundle/Secrets/SodiumVault.php | 235 - .../Test/BrowserKitAssertionsTrait.php | 197 - .../Test/DomCrawlerAssertionsTrait.php | 151 - .../Test/HttpClientAssertionsTrait.php | 134 - .../framework-bundle/Test/KernelTestCase.php | 135 - .../Test/MailerAssertionsTrait.php | 138 - .../Test/NotificationAssertionsTrait.php | 100 - .../Test/TestBrowserToken.php | 57 - .../framework-bundle/Test/TestContainer.php | 126 - .../Test/WebTestAssertionsTrait.php | 19 - .../framework-bundle/Test/WebTestCase.php | 59 - .../Translation/Translator.php | 177 - vendor/symfony/framework-bundle/composer.json | 114 - .../http-client-contracts/CHANGELOG.md | 5 - .../http-client-contracts/ChunkInterface.php | 71 - .../Exception/ClientExceptionInterface.php | 21 - .../Exception/DecodingExceptionInterface.php | 21 - .../Exception/ExceptionInterface.php | 21 - .../Exception/HttpExceptionInterface.php | 24 - .../RedirectionExceptionInterface.php | 21 - .../Exception/ServerExceptionInterface.php | 21 - .../Exception/TimeoutExceptionInterface.php | 21 - .../Exception/TransportExceptionInterface.php | 21 - .../HttpClientInterface.php | 99 - .../symfony/http-client-contracts/README.md | 9 - .../ResponseInterface.php | 109 - .../ResponseStreamInterface.php | 26 - .../Test/Fixtures/web/index.php | 198 - .../Test/HttpClientTestCase.php | 1147 -- .../Test/TestHttpServer.php | 55 - .../http-client-contracts/composer.json | 37 - vendor/symfony/http-client/AmpHttpClient.php | 174 - .../http-client/AsyncDecoratorTrait.php | 41 - vendor/symfony/http-client/CHANGELOG.md | 99 - .../symfony/http-client/CachingHttpClient.php | 145 - .../symfony/http-client/Chunk/DataChunk.php | 63 - .../symfony/http-client/Chunk/ErrorChunk.php | 112 - .../symfony/http-client/Chunk/FirstChunk.php | 25 - .../http-client/Chunk/InformationalChunk.php | 34 - .../symfony/http-client/Chunk/LastChunk.php | 25 - .../http-client/Chunk/ServerSentEvent.php | 114 - vendor/symfony/http-client/CurlHttpClient.php | 568 - .../DataCollector/HttpClientDataCollector.php | 265 - vendor/symfony/http-client/DecoratorTrait.php | 57 - .../DependencyInjection/HttpClientPass.php | 37 - .../http-client/EventSourceHttpClient.php | 162 - .../http-client/Exception/ClientException.php | 24 - .../Exception/EventSourceException.php | 21 - .../Exception/HttpExceptionTrait.php | 78 - .../Exception/InvalidArgumentException.php | 21 - .../http-client/Exception/JsonException.php | 23 - .../Exception/RedirectionException.php | 24 - .../http-client/Exception/ServerException.php | 24 - .../Exception/TimeoutException.php | 21 - .../Exception/TransportException.php | 21 - vendor/symfony/http-client/HttpClient.php | 79 - .../symfony/http-client/HttpClientTrait.php | 831 -- vendor/symfony/http-client/HttpOptions.php | 347 - vendor/symfony/http-client/HttplugClient.php | 249 - .../symfony/http-client/Internal/AmpBody.php | 148 - .../http-client/Internal/AmpClientState.php | 215 - .../http-client/Internal/AmpListener.php | 184 - .../http-client/Internal/AmpResolver.php | 50 - .../symfony/http-client/Internal/Canary.php | 39 - .../http-client/Internal/ClientState.php | 26 - .../http-client/Internal/CurlClientState.php | 144 - .../symfony/http-client/Internal/DnsCache.php | 39 - .../http-client/Internal/HttplugWaitLoop.php | 148 - .../Internal/NativeClientState.php | 43 - .../http-client/Internal/PushedResponse.php | 32 - .../Messenger/PingWebhookMessage.php | 31 - .../Messenger/PingWebhookMessageHandler.php | 34 - vendor/symfony/http-client/MockHttpClient.php | 113 - .../symfony/http-client/NativeHttpClient.php | 470 - .../NoPrivateNetworkHttpClient.php | 106 - vendor/symfony/http-client/Psr18Client.php | 216 - vendor/symfony/http-client/README.md | 13 - .../http-client/Response/AmpResponse.php | 451 - .../http-client/Response/AsyncContext.php | 200 - .../http-client/Response/AsyncResponse.php | 477 - .../Response/CommonResponseTrait.php | 177 - .../http-client/Response/CurlResponse.php | 461 - .../http-client/Response/HttplugPromise.php | 71 - .../http-client/Response/JsonMockResponse.php | 47 - .../http-client/Response/MockResponse.php | 338 - .../http-client/Response/NativeResponse.php | 370 - .../http-client/Response/ResponseStream.php | 52 - .../http-client/Response/StreamWrapper.php | 312 - .../Response/StreamableInterface.php | 35 - .../Response/TraceableResponse.php | 216 - .../Response/TransportResponseTrait.php | 305 - .../Retry/GenericRetryStrategy.php | 117 - .../Retry/RetryStrategyInterface.php | 36 - .../http-client/RetryableHttpClient.php | 208 - .../symfony/http-client/ScopingHttpClient.php | 122 - .../Test/HarFileResponseFactory.php | 97 - .../http-client/ThrottlingHttpClient.php | 51 - .../http-client/TraceableHttpClient.php | 111 - .../http-client/UriTemplateHttpClient.php | 84 - vendor/symfony/http-client/composer.json | 58 - .../symfony/http-foundation/AcceptHeader.php | 150 - .../http-foundation/AcceptHeaderItem.php | 159 - .../http-foundation/BinaryFileResponse.php | 389 - vendor/symfony/http-foundation/CHANGELOG.md | 378 - .../http-foundation/ChainRequestMatcher.php | 38 - vendor/symfony/http-foundation/Cookie.php | 409 - .../Exception/BadRequestException.php | 19 - .../Exception/ConflictingHeadersException.php | 21 - .../Exception/ExceptionInterface.php | 16 - .../Exception/JsonException.php | 21 - .../Exception/LogicException.php | 19 - .../Exception/RequestExceptionInterface.php | 21 - .../Exception/SessionNotFoundException.php | 27 - .../SuspiciousOperationException.php | 20 - .../Exception/UnexpectedValueException.php | 16 - .../File/Exception/AccessDeniedException.php | 25 - .../Exception/CannotWriteFileException.php | 21 - .../File/Exception/ExtensionFileException.php | 21 - .../File/Exception/FileException.php | 21 - .../File/Exception/FileNotFoundException.php | 25 - .../File/Exception/FormSizeFileException.php | 21 - .../File/Exception/IniSizeFileException.php | 21 - .../File/Exception/NoFileException.php | 21 - .../File/Exception/NoTmpDirFileException.php | 21 - .../File/Exception/PartialFileException.php | 21 - .../Exception/UnexpectedTypeException.php | 20 - .../File/Exception/UploadException.php | 21 - vendor/symfony/http-foundation/File/File.php | 141 - .../symfony/http-foundation/File/Stream.php | 25 - .../http-foundation/File/UploadedFile.php | 286 - vendor/symfony/http-foundation/FileBag.php | 127 - vendor/symfony/http-foundation/HeaderBag.php | 273 - .../symfony/http-foundation/HeaderUtils.php | 298 - vendor/symfony/http-foundation/InputBag.php | 136 - vendor/symfony/http-foundation/IpUtils.php | 241 - .../symfony/http-foundation/JsonResponse.php | 187 - .../symfony/http-foundation/ParameterBag.php | 241 - vendor/symfony/http-foundation/README.md | 14 - .../AbstractRequestRateLimiter.php | 81 - .../PeekableRequestRateLimiterInterface.php | 35 - .../RequestRateLimiterInterface.php | 30 - .../http-foundation/RedirectResponse.php | 92 - vendor/symfony/http-foundation/Request.php | 2093 ---- .../AttributesRequestMatcher.php | 45 - .../ExpressionRequestMatcher.php | 43 - .../RequestMatcher/HeaderRequestMatcher.php | 52 - .../RequestMatcher/HostRequestMatcher.php | 32 - .../RequestMatcher/IpsRequestMatcher.php | 44 - .../RequestMatcher/IsJsonRequestMatcher.php | 28 - .../RequestMatcher/MethodRequestMatcher.php | 46 - .../RequestMatcher/PathRequestMatcher.php | 32 - .../RequestMatcher/PortRequestMatcher.php | 32 - .../QueryParameterRequestMatcher.php | 46 - .../RequestMatcher/SchemeRequestMatcher.php | 46 - .../RequestMatcherInterface.php | 25 - .../symfony/http-foundation/RequestStack.php | 107 - vendor/symfony/http-foundation/Response.php | 1315 -- .../http-foundation/ResponseHeaderBag.php | 271 - vendor/symfony/http-foundation/ServerBag.php | 97 - .../Session/Attribute/AttributeBag.php | 118 - .../Attribute/AttributeBagInterface.php | 53 - .../Session/Flash/AutoExpireFlashBag.php | 122 - .../Session/Flash/FlashBag.php | 113 - .../Session/Flash/FlashBagInterface.php | 72 - .../Session/FlashBagAwareSessionInterface.php | 22 - .../http-foundation/Session/Session.php | 223 - .../Session/SessionBagInterface.php | 42 - .../Session/SessionBagProxy.php | 83 - .../Session/SessionFactory.php | 40 - .../Session/SessionFactoryInterface.php | 20 - .../Session/SessionInterface.php | 140 - .../http-foundation/Session/SessionUtils.php | 59 - .../Handler/AbstractSessionHandler.php | 111 - .../Storage/Handler/IdentityMarshaller.php | 36 - .../Handler/MarshallingSessionHandler.php | 76 - .../Handler/MemcachedSessionHandler.php | 112 - .../Handler/MigratingSessionHandler.php | 100 - .../Storage/Handler/MongoDbSessionHandler.php | 186 - .../Handler/NativeFileSessionHandler.php | 55 - .../Storage/Handler/NullSessionHandler.php | 55 - .../Storage/Handler/PdoSessionHandler.php | 899 -- .../Storage/Handler/RedisSessionHandler.php | 103 - .../Storage/Handler/SessionHandlerFactory.php | 95 - .../Storage/Handler/StrictSessionHandler.php | 89 - .../Session/Storage/MetadataBag.php | 133 - .../Storage/MockArraySessionStorage.php | 188 - .../Storage/MockFileSessionStorage.php | 149 - .../Storage/MockFileSessionStorageFactory.php | 42 - .../Session/Storage/NativeSessionStorage.php | 402 - .../Storage/NativeSessionStorageFactory.php | 50 - .../Storage/PhpBridgeSessionStorage.php | 55 - .../PhpBridgeSessionStorageFactory.php | 45 - .../Session/Storage/Proxy/AbstractProxy.php | 98 - .../Storage/Proxy/SessionHandlerProxy.php | 76 - .../SessionStorageFactoryInterface.php | 25 - .../Storage/SessionStorageInterface.php | 116 - .../http-foundation/StreamedJsonResponse.php | 162 - .../http-foundation/StreamedResponse.php | 131 - .../Constraint/RequestAttributeValueSame.php | 48 - .../Constraint/ResponseCookieValueSame.php | 76 - .../Test/Constraint/ResponseFormatSame.php | 65 - .../Test/Constraint/ResponseHasCookie.php | 68 - .../Test/Constraint/ResponseHasHeader.php | 46 - .../Constraint/ResponseHeaderLocationSame.php | 65 - .../Test/Constraint/ResponseHeaderSame.php | 48 - .../Test/Constraint/ResponseIsRedirected.php | 54 - .../Test/Constraint/ResponseIsSuccessful.php | 54 - .../Constraint/ResponseIsUnprocessable.php | 54 - .../Constraint/ResponseStatusCodeSame.php | 54 - vendor/symfony/http-foundation/UriSigner.php | 165 - vendor/symfony/http-foundation/UrlHelper.php | 108 - vendor/symfony/http-foundation/composer.json | 44 - .../http-kernel/Attribute/AsController.php | 27 - .../Attribute/AsTargetedValueResolver.php | 26 - .../symfony/http-kernel/Attribute/Cache.php | 107 - .../http-kernel/Attribute/MapDateTime.php | 35 - .../Attribute/MapQueryParameter.php | 46 - .../http-kernel/Attribute/MapQueryString.php | 43 - .../Attribute/MapRequestPayload.php | 47 - .../http-kernel/Attribute/MapUploadedFile.php | 33 - .../http-kernel/Attribute/ValueResolver.php | 31 - .../http-kernel/Attribute/WithHttpStatus.php | 31 - .../http-kernel/Attribute/WithLogLevel.php | 33 - .../http-kernel/Bundle/AbstractBundle.php | 61 - vendor/symfony/http-kernel/Bundle/Bundle.php | 157 - .../http-kernel/Bundle/BundleExtension.php | 67 - .../http-kernel/Bundle/BundleInterface.php | 71 - vendor/symfony/http-kernel/CHANGELOG.md | 412 - .../CacheClearer/CacheClearerInterface.php | 25 - .../CacheClearer/ChainCacheClearer.php | 37 - .../CacheClearer/Psr6CacheClearer.php | 66 - .../http-kernel/CacheWarmer/CacheWarmer.php | 32 - .../CacheWarmer/CacheWarmerAggregate.php | 129 - .../CacheWarmer/CacheWarmerInterface.php | 30 - .../CacheWarmer/WarmableInterface.php | 30 - .../http-kernel/Config/FileLocator.php | 40 - .../Controller/ArgumentResolver.php | 140 - .../BackedEnumValueResolver.php | 68 - .../DateTimeValueResolver.php | 87 - .../ArgumentResolver/DefaultValueResolver.php | 37 - .../NotTaggedControllerValueResolver.php | 61 - .../QueryParameterValueResolver.php | 128 - .../RequestAttributeValueResolver.php | 29 - .../RequestPayloadValueResolver.php | 238 - .../ArgumentResolver/RequestValueResolver.php | 38 - .../ArgumentResolver/ServiceValueResolver.php | 70 - .../ArgumentResolver/SessionValueResolver.php | 39 - .../TraceableValueResolver.php | 41 - .../ArgumentResolver/UidValueResolver.php | 38 - .../VariadicValueResolver.php | 39 - .../Controller/ArgumentResolverInterface.php | 30 - .../ContainerControllerResolver.php | 61 - .../Controller/ControllerReference.php | 45 - .../Controller/ControllerResolver.php | 272 - .../ControllerResolverInterface.php | 41 - .../Controller/ErrorController.php | 58 - .../Controller/TraceableArgumentResolver.php | 38 - .../TraceableControllerResolver.php | 38 - .../Controller/ValueResolverInterface.php | 28 - .../ControllerMetadata/ArgumentMetadata.php | 144 - .../ArgumentMetadataFactory.php | 72 - .../ArgumentMetadataFactoryInterface.php | 25 - .../DataCollector/AjaxDataCollector.php | 38 - .../DataCollector/ConfigDataCollector.php | 255 - .../DataCollector/DataCollector.php | 119 - .../DataCollector/DataCollectorInterface.php | 38 - .../DataCollector/DumpDataCollector.php | 287 - .../DataCollector/EventDataCollector.php | 140 - .../DataCollector/ExceptionDataCollector.php | 68 - .../LateDataCollectorInterface.php | 27 - .../DataCollector/LoggerDataCollector.php | 334 - .../DataCollector/MemoryDataCollector.php | 95 - .../DataCollector/RequestDataCollector.php | 498 - .../DataCollector/RouterDataCollector.php | 97 - .../DataCollector/TimeDataCollector.php | 127 - .../Debug/ErrorHandlerConfigurator.php | 105 - .../Debug/TraceableEventDispatcher.php | 85 - .../http-kernel/Debug/VirtualRequestStack.php | 65 - .../AddAnnotatedClassesToCachePass.php | 144 - .../ConfigurableExtension.php | 39 - .../ControllerArgumentValueResolverPass.php | 70 - .../DependencyInjection/Extension.php | 54 - .../FragmentRendererPass.php | 54 - .../LazyLoadingFragmentHandler.php | 48 - .../DependencyInjection/LoggerPass.php | 45 - .../MergeExtensionConfigurationPass.php | 42 - ...RegisterControllerArgumentLocatorsPass.php | 237 - .../RegisterLocaleAwareServicesPass.php | 49 - ...oveEmptyControllerArgumentLocatorsPass.php | 72 - .../ResettableServicePass.php | 65 - .../DependencyInjection/ServicesResetter.php | 58 - .../Event/ControllerArgumentsEvent.php | 112 - .../http-kernel/Event/ControllerEvent.php | 113 - .../http-kernel/Event/ExceptionEvent.php | 82 - .../http-kernel/Event/FinishRequestEvent.php | 21 - .../symfony/http-kernel/Event/KernelEvent.php | 70 - .../http-kernel/Event/RequestEvent.php | 54 - .../http-kernel/Event/ResponseEvent.php | 47 - .../http-kernel/Event/TerminateEvent.php | 40 - .../symfony/http-kernel/Event/ViewEvent.php | 47 - .../EventListener/AbstractSessionListener.php | 314 - .../AddRequestFormatsListener.php | 47 - .../EventListener/CacheAttributeListener.php | 193 - .../EventListener/DebugHandlersListener.php | 135 - .../DisallowRobotsIndexingListener.php | 40 - .../EventListener/DumpListener.php | 62 - .../EventListener/ErrorListener.php | 252 - .../EventListener/FragmentListener.php | 97 - .../EventListener/LocaleAwareListener.php | 74 - .../EventListener/LocaleListener.php | 89 - .../EventListener/ProfilerListener.php | 144 - .../EventListener/ResponseListener.php | 65 - .../EventListener/RouterListener.php | 188 - .../EventListener/SessionListener.php | 42 - .../EventListener/SurrogateListener.php | 65 - .../EventListener/ValidateRequestListener.php | 52 - .../Exception/AccessDeniedHttpException.php | 24 - .../Exception/BadRequestHttpException.php | 23 - .../Exception/ConflictHttpException.php | 23 - ...ntrollerDoesNotReturnResponseException.php | 83 - .../Exception/GoneHttpException.php | 23 - .../http-kernel/Exception/HttpException.php | 66 - .../Exception/HttpExceptionInterface.php | 30 - .../Exception/InvalidMetadataException.php | 16 - .../Exception/LengthRequiredHttpException.php | 23 - .../Exception/LockedHttpException.php | 23 - .../MethodNotAllowedHttpException.php | 28 - .../NearMissValueResolverException.php | 21 - .../Exception/NotAcceptableHttpException.php | 23 - .../Exception/NotFoundHttpException.php | 23 - .../PreconditionFailedHttpException.php | 23 - .../PreconditionRequiredHttpException.php | 25 - .../Exception/ResolverNotFoundException.php | 33 - .../ServiceUnavailableHttpException.php | 30 - .../TooManyRequestsHttpException.php | 32 - .../Exception/UnauthorizedHttpException.php | 28 - .../UnexpectedSessionUsageException.php | 19 - .../UnprocessableEntityHttpException.php | 23 - .../UnsupportedMediaTypeHttpException.php | 23 - .../AbstractSurrogateFragmentRenderer.php | 102 - .../Fragment/EsiFragmentRenderer.php | 25 - .../http-kernel/Fragment/FragmentHandler.php | 109 - .../Fragment/FragmentRendererInterface.php | 34 - .../Fragment/FragmentUriGenerator.php | 86 - .../FragmentUriGeneratorInterface.php | 32 - .../Fragment/HIncludeFragmentRenderer.php | 92 - .../Fragment/InlineFragmentRenderer.php | 141 - .../Fragment/RoutableFragmentRenderer.php | 50 - .../Fragment/SsiFragmentRenderer.php | 25 - .../HttpCache/AbstractSurrogate.php | 127 - vendor/symfony/http-kernel/HttpCache/Esi.php | 102 - .../http-kernel/HttpCache/HttpCache.php | 740 -- .../HttpCache/ResponseCacheStrategy.php | 232 - .../ResponseCacheStrategyInterface.php | 37 - vendor/symfony/http-kernel/HttpCache/Ssi.php | 83 - .../symfony/http-kernel/HttpCache/Store.php | 488 - .../http-kernel/HttpCache/StoreInterface.php | 79 - .../HttpCache/SubRequestHandler.php | 92 - .../HttpCache/SurrogateInterface.php | 73 - .../symfony/http-kernel/HttpClientKernel.php | 112 - vendor/symfony/http-kernel/HttpKernel.php | 321 - .../symfony/http-kernel/HttpKernelBrowser.php | 191 - .../http-kernel/HttpKernelInterface.php | 40 - vendor/symfony/http-kernel/Kernel.php | 768 -- vendor/symfony/http-kernel/KernelEvents.php | 128 - .../symfony/http-kernel/KernelInterface.php | 139 - .../Log/DebugLoggerConfigurator.php | 55 - .../http-kernel/Log/DebugLoggerInterface.php | 47 - vendor/symfony/http-kernel/Log/Logger.php | 190 - .../Profiler/FileProfilerStorage.php | 348 - .../symfony/http-kernel/Profiler/Profile.php | 256 - .../symfony/http-kernel/Profiler/Profiler.php | 244 - .../Profiler/ProfilerStorageInterface.php | 56 - vendor/symfony/http-kernel/README.md | 15 - .../http-kernel/RebootableInterface.php | 30 - .../http-kernel/Resources/welcome.html.php | 330 - .../http-kernel/TerminableInterface.php | 32 - vendor/symfony/http-kernel/composer.json | 81 - vendor/symfony/intl/.gitattributes | 8 - vendor/symfony/intl/.gitignore | 3 - vendor/symfony/intl/CHANGELOG.md | 64 - vendor/symfony/intl/Countries.php | 177 - vendor/symfony/intl/Currencies.php | 146 - .../Compiler/BundleCompilerInterface.php | 28 - .../Data/Bundle/Compiler/GenrbCompiler.php | 58 - .../Bundle/Reader/BufferedBundleReader.php | 43 - .../Data/Bundle/Reader/BundleEntryReader.php | 171 - .../Reader/BundleEntryReaderInterface.php | 54 - .../Bundle/Reader/BundleReaderInterface.php | 28 - .../Data/Bundle/Reader/IntlBundleReader.php | 47 - .../Data/Bundle/Reader/JsonBundleReader.php | 47 - .../Data/Bundle/Reader/PhpBundleReader.php | 45 - .../Bundle/Writer/BundleWriterInterface.php | 24 - .../Data/Bundle/Writer/JsonBundleWriter.php | 39 - .../Data/Bundle/Writer/PhpBundleWriter.php | 46 - .../Data/Bundle/Writer/TextBundleWriter.php | 205 - .../Data/Generator/AbstractDataGenerator.php | 107 - .../Data/Generator/CurrencyDataGenerator.php | 159 - .../intl/Data/Generator/FallbackTrait.php | 58 - .../intl/Data/Generator/GeneratorConfig.php | 73 - .../Data/Generator/LanguageDataGenerator.php | 235 - .../Data/Generator/LocaleDataGenerator.php | 167 - .../Data/Generator/RegionDataGenerator.php | 264 - .../Data/Generator/ScriptDataGenerator.php | 86 - .../Data/Generator/TimezoneDataGenerator.php | 274 - .../Util/ArrayAccessibleResourceBundle.php | 81 - .../symfony/intl/Data/Util/LocaleScanner.php | 99 - .../intl/Data/Util/RecursiveArrayAccess.php | 48 - vendor/symfony/intl/Data/Util/RingBuffer.php | 79 - .../intl/Exception/BadMethodCallException.php | 21 - .../intl/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../Exception/MissingResourceException.php | 21 - .../intl/Exception/OutOfBoundsException.php | 21 - .../ResourceBundleNotFoundException.php | 19 - .../intl/Exception/RuntimeException.php | 21 - .../Exception/UnexpectedTypeException.php | 25 - vendor/symfony/intl/Intl.php | 126 - vendor/symfony/intl/Languages.php | 182 - vendor/symfony/intl/Locale.php | 112 - vendor/symfony/intl/Locales.php | 79 - vendor/symfony/intl/README.md | 17 - vendor/symfony/intl/ResourceBundle.php | 76 - .../intl/Resources/data/currencies/af.php | 690 -- .../intl/Resources/data/currencies/af_NA.php | 10 - .../intl/Resources/data/currencies/ak.php | 238 - .../intl/Resources/data/currencies/am.php | 674 - .../intl/Resources/data/currencies/ar.php | 1002 -- .../intl/Resources/data/currencies/ar_DJ.php | 10 - .../intl/Resources/data/currencies/ar_ER.php | 10 - .../intl/Resources/data/currencies/ar_KM.php | 10 - .../intl/Resources/data/currencies/ar_LB.php | 10 - .../intl/Resources/data/currencies/ar_SO.php | 10 - .../intl/Resources/data/currencies/ar_SS.php | 14 - .../intl/Resources/data/currencies/as.php | 650 - .../intl/Resources/data/currencies/az.php | 1066 -- .../Resources/data/currencies/az_Cyrl.php | 10 - .../intl/Resources/data/currencies/be.php | 650 - .../intl/Resources/data/currencies/bg.php | 1042 -- .../intl/Resources/data/currencies/bm.php | 242 - .../intl/Resources/data/currencies/bn.php | 1082 -- .../intl/Resources/data/currencies/bn_IN.php | 42 - .../intl/Resources/data/currencies/bo.php | 18 - .../intl/Resources/data/currencies/bo_IN.php | 10 - .../intl/Resources/data/currencies/br.php | 1034 -- .../intl/Resources/data/currencies/bs.php | 1154 -- .../Resources/data/currencies/bs_Cyrl.php | 1094 -- .../intl/Resources/data/currencies/ca.php | 1158 -- .../intl/Resources/data/currencies/ca_FR.php | 10 - .../intl/Resources/data/currencies/ce.php | 642 - .../intl/Resources/data/currencies/cs.php | 1166 -- .../intl/Resources/data/currencies/cv.php | 634 - .../intl/Resources/data/currencies/cy.php | 1018 -- .../intl/Resources/data/currencies/da.php | 1062 -- .../intl/Resources/data/currencies/de.php | 1166 -- .../intl/Resources/data/currencies/de_CH.php | 22 - .../intl/Resources/data/currencies/de_LI.php | 10 - .../intl/Resources/data/currencies/de_LU.php | 10 - .../intl/Resources/data/currencies/dz.php | 306 - .../intl/Resources/data/currencies/ee.php | 1122 -- .../intl/Resources/data/currencies/el.php | 1066 -- .../intl/Resources/data/currencies/en.php | 1178 -- .../intl/Resources/data/currencies/en_001.php | 50 - .../intl/Resources/data/currencies/en_150.php | 10 - .../intl/Resources/data/currencies/en_AG.php | 10 - .../intl/Resources/data/currencies/en_AI.php | 10 - .../intl/Resources/data/currencies/en_AT.php | 10 - .../intl/Resources/data/currencies/en_AU.php | 126 - .../intl/Resources/data/currencies/en_BB.php | 10 - .../intl/Resources/data/currencies/en_BI.php | 10 - .../intl/Resources/data/currencies/en_BM.php | 10 - .../intl/Resources/data/currencies/en_BS.php | 10 - .../intl/Resources/data/currencies/en_BW.php | 10 - .../intl/Resources/data/currencies/en_BZ.php | 10 - .../intl/Resources/data/currencies/en_CA.php | 62 - .../intl/Resources/data/currencies/en_CC.php | 10 - .../intl/Resources/data/currencies/en_CK.php | 10 - .../intl/Resources/data/currencies/en_CX.php | 10 - .../intl/Resources/data/currencies/en_DK.php | 10 - .../intl/Resources/data/currencies/en_DM.php | 10 - .../intl/Resources/data/currencies/en_ER.php | 10 - .../intl/Resources/data/currencies/en_FJ.php | 10 - .../intl/Resources/data/currencies/en_FK.php | 14 - .../intl/Resources/data/currencies/en_GD.php | 10 - .../intl/Resources/data/currencies/en_GG.php | 10 - .../intl/Resources/data/currencies/en_GH.php | 10 - .../intl/Resources/data/currencies/en_GI.php | 14 - .../intl/Resources/data/currencies/en_GM.php | 10 - .../intl/Resources/data/currencies/en_GY.php | 10 - .../intl/Resources/data/currencies/en_ID.php | 10 - .../intl/Resources/data/currencies/en_IM.php | 10 - .../intl/Resources/data/currencies/en_IN.php | 18 - .../intl/Resources/data/currencies/en_JE.php | 10 - .../intl/Resources/data/currencies/en_JM.php | 10 - .../intl/Resources/data/currencies/en_KE.php | 10 - .../intl/Resources/data/currencies/en_KI.php | 10 - .../intl/Resources/data/currencies/en_KN.php | 10 - .../intl/Resources/data/currencies/en_KY.php | 10 - .../intl/Resources/data/currencies/en_LC.php | 10 - .../intl/Resources/data/currencies/en_LR.php | 10 - .../intl/Resources/data/currencies/en_LS.php | 10 - .../intl/Resources/data/currencies/en_MG.php | 10 - .../intl/Resources/data/currencies/en_MO.php | 10 - .../intl/Resources/data/currencies/en_MS.php | 10 - .../intl/Resources/data/currencies/en_MT.php | 10 - .../intl/Resources/data/currencies/en_MU.php | 10 - .../intl/Resources/data/currencies/en_MV.php | 10 - .../intl/Resources/data/currencies/en_MW.php | 10 - .../intl/Resources/data/currencies/en_MY.php | 10 - .../intl/Resources/data/currencies/en_NA.php | 10 - .../intl/Resources/data/currencies/en_NF.php | 10 - .../intl/Resources/data/currencies/en_NG.php | 10 - .../intl/Resources/data/currencies/en_NH.php | 10 - .../intl/Resources/data/currencies/en_NR.php | 10 - .../intl/Resources/data/currencies/en_NU.php | 10 - .../intl/Resources/data/currencies/en_NZ.php | 10 - .../intl/Resources/data/currencies/en_PG.php | 10 - .../intl/Resources/data/currencies/en_PK.php | 10 - .../intl/Resources/data/currencies/en_PN.php | 10 - .../intl/Resources/data/currencies/en_RW.php | 10 - .../intl/Resources/data/currencies/en_SB.php | 10 - .../intl/Resources/data/currencies/en_SC.php | 10 - .../intl/Resources/data/currencies/en_SE.php | 10 - .../intl/Resources/data/currencies/en_SG.php | 10 - .../intl/Resources/data/currencies/en_SH.php | 14 - .../intl/Resources/data/currencies/en_SL.php | 10 - .../intl/Resources/data/currencies/en_SS.php | 14 - .../intl/Resources/data/currencies/en_SX.php | 10 - .../intl/Resources/data/currencies/en_SZ.php | 10 - .../intl/Resources/data/currencies/en_TK.php | 10 - .../intl/Resources/data/currencies/en_TO.php | 10 - .../intl/Resources/data/currencies/en_TT.php | 10 - .../intl/Resources/data/currencies/en_TV.php | 10 - .../intl/Resources/data/currencies/en_TZ.php | 10 - .../intl/Resources/data/currencies/en_UG.php | 10 - .../intl/Resources/data/currencies/en_VC.php | 10 - .../intl/Resources/data/currencies/en_VU.php | 10 - .../intl/Resources/data/currencies/en_WS.php | 10 - .../intl/Resources/data/currencies/en_ZA.php | 10 - .../intl/Resources/data/currencies/en_ZM.php | 10 - .../intl/Resources/data/currencies/es.php | 1090 -- .../intl/Resources/data/currencies/es_419.php | 50 - .../intl/Resources/data/currencies/es_AR.php | 14 - .../intl/Resources/data/currencies/es_BO.php | 10 - .../intl/Resources/data/currencies/es_BR.php | 10 - .../intl/Resources/data/currencies/es_BZ.php | 10 - .../intl/Resources/data/currencies/es_CL.php | 14 - .../intl/Resources/data/currencies/es_CO.php | 14 - .../intl/Resources/data/currencies/es_CR.php | 10 - .../intl/Resources/data/currencies/es_CU.php | 14 - .../intl/Resources/data/currencies/es_DO.php | 14 - .../intl/Resources/data/currencies/es_EC.php | 10 - .../intl/Resources/data/currencies/es_GQ.php | 10 - .../intl/Resources/data/currencies/es_GT.php | 10 - .../intl/Resources/data/currencies/es_HN.php | 10 - .../intl/Resources/data/currencies/es_MX.php | 58 - .../intl/Resources/data/currencies/es_NI.php | 10 - .../intl/Resources/data/currencies/es_PA.php | 10 - .../intl/Resources/data/currencies/es_PE.php | 10 - .../intl/Resources/data/currencies/es_PH.php | 10 - .../intl/Resources/data/currencies/es_PR.php | 10 - .../intl/Resources/data/currencies/es_PY.php | 10 - .../intl/Resources/data/currencies/es_SV.php | 10 - .../intl/Resources/data/currencies/es_US.php | 50 - .../intl/Resources/data/currencies/es_UY.php | 18 - .../intl/Resources/data/currencies/es_VE.php | 14 - .../intl/Resources/data/currencies/et.php | 1062 -- .../intl/Resources/data/currencies/eu.php | 1174 -- .../intl/Resources/data/currencies/fa.php | 922 -- .../intl/Resources/data/currencies/fa_AF.php | 66 - .../intl/Resources/data/currencies/ff.php | 238 - .../Resources/data/currencies/ff_Adlm.php | 774 -- .../Resources/data/currencies/ff_Adlm_BF.php | 10 - .../Resources/data/currencies/ff_Adlm_CM.php | 10 - .../Resources/data/currencies/ff_Adlm_GH.php | 14 - .../Resources/data/currencies/ff_Adlm_GM.php | 14 - .../Resources/data/currencies/ff_Adlm_GW.php | 10 - .../Resources/data/currencies/ff_Adlm_LR.php | 14 - .../Resources/data/currencies/ff_Adlm_MR.php | 14 - .../Resources/data/currencies/ff_Adlm_NE.php | 10 - .../Resources/data/currencies/ff_Adlm_NG.php | 14 - .../Resources/data/currencies/ff_Adlm_SL.php | 14 - .../Resources/data/currencies/ff_Adlm_SN.php | 10 - .../intl/Resources/data/currencies/ff_GN.php | 10 - .../Resources/data/currencies/ff_Latn_GH.php | 10 - .../Resources/data/currencies/ff_Latn_GM.php | 10 - .../Resources/data/currencies/ff_Latn_GN.php | 10 - .../Resources/data/currencies/ff_Latn_LR.php | 10 - .../Resources/data/currencies/ff_Latn_MR.php | 10 - .../Resources/data/currencies/ff_Latn_NG.php | 10 - .../Resources/data/currencies/ff_Latn_SL.php | 10 - .../intl/Resources/data/currencies/ff_MR.php | 10 - .../intl/Resources/data/currencies/fi.php | 1170 -- .../intl/Resources/data/currencies/fo.php | 650 - .../intl/Resources/data/currencies/fo_DK.php | 10 - .../intl/Resources/data/currencies/fr.php | 1094 -- .../intl/Resources/data/currencies/fr_BI.php | 10 - .../intl/Resources/data/currencies/fr_CA.php | 182 - .../intl/Resources/data/currencies/fr_CD.php | 10 - .../intl/Resources/data/currencies/fr_DJ.php | 10 - .../intl/Resources/data/currencies/fr_DZ.php | 10 - .../intl/Resources/data/currencies/fr_GN.php | 10 - .../intl/Resources/data/currencies/fr_HT.php | 10 - .../intl/Resources/data/currencies/fr_KM.php | 10 - .../intl/Resources/data/currencies/fr_LU.php | 14 - .../intl/Resources/data/currencies/fr_MG.php | 10 - .../intl/Resources/data/currencies/fr_MR.php | 10 - .../intl/Resources/data/currencies/fr_MU.php | 10 - .../intl/Resources/data/currencies/fr_RW.php | 10 - .../intl/Resources/data/currencies/fr_SC.php | 10 - .../intl/Resources/data/currencies/fr_SY.php | 10 - .../intl/Resources/data/currencies/fr_TN.php | 10 - .../intl/Resources/data/currencies/fr_VU.php | 10 - .../intl/Resources/data/currencies/fy.php | 1142 -- .../intl/Resources/data/currencies/ga.php | 1070 -- .../intl/Resources/data/currencies/gd.php | 1174 -- .../intl/Resources/data/currencies/gl.php | 830 -- .../intl/Resources/data/currencies/gu.php | 662 - .../intl/Resources/data/currencies/ha.php | 662 - .../intl/Resources/data/currencies/ha_GH.php | 10 - .../intl/Resources/data/currencies/he.php | 898 -- .../intl/Resources/data/currencies/hi.php | 762 -- .../Resources/data/currencies/hi_Latn.php | 30 - .../intl/Resources/data/currencies/hr.php | 1158 -- .../intl/Resources/data/currencies/hr_BA.php | 10 - .../intl/Resources/data/currencies/hu.php | 1118 -- .../intl/Resources/data/currencies/hy.php | 662 - .../intl/Resources/data/currencies/ia.php | 666 - .../intl/Resources/data/currencies/id.php | 1158 -- .../intl/Resources/data/currencies/ig.php | 634 - .../intl/Resources/data/currencies/ii.php | 10 - .../intl/Resources/data/currencies/in.php | 1158 -- .../intl/Resources/data/currencies/is.php | 910 -- .../intl/Resources/data/currencies/it.php | 1062 -- .../intl/Resources/data/currencies/iw.php | 898 -- .../intl/Resources/data/currencies/ja.php | 1166 -- .../intl/Resources/data/currencies/jv.php | 642 - .../intl/Resources/data/currencies/ka.php | 982 -- .../intl/Resources/data/currencies/ki.php | 238 - .../intl/Resources/data/currencies/kk.php | 658 - .../intl/Resources/data/currencies/kl.php | 14 - .../intl/Resources/data/currencies/km.php | 662 - .../intl/Resources/data/currencies/kn.php | 662 - .../intl/Resources/data/currencies/ko.php | 1134 -- .../intl/Resources/data/currencies/ks.php | 978 -- .../Resources/data/currencies/ks_Deva.php | 38 - .../intl/Resources/data/currencies/ku.php | 634 - .../intl/Resources/data/currencies/ky.php | 658 - .../intl/Resources/data/currencies/lb.php | 1078 -- .../intl/Resources/data/currencies/lg.php | 242 - .../intl/Resources/data/currencies/ln.php | 242 - .../intl/Resources/data/currencies/ln_AO.php | 10 - .../intl/Resources/data/currencies/lo.php | 1146 -- .../intl/Resources/data/currencies/lt.php | 1166 -- .../intl/Resources/data/currencies/lu.php | 242 - .../intl/Resources/data/currencies/lv.php | 802 -- .../intl/Resources/data/currencies/meta.php | 1761 --- .../intl/Resources/data/currencies/mg.php | 242 - .../intl/Resources/data/currencies/mi.php | 634 - .../intl/Resources/data/currencies/mk.php | 922 -- .../intl/Resources/data/currencies/ml.php | 1078 -- .../intl/Resources/data/currencies/mn.php | 662 - .../intl/Resources/data/currencies/mo.php | 970 -- .../intl/Resources/data/currencies/mr.php | 662 - .../intl/Resources/data/currencies/ms.php | 694 -- .../intl/Resources/data/currencies/ms_BN.php | 10 - .../intl/Resources/data/currencies/ms_ID.php | 10 - .../intl/Resources/data/currencies/ms_SG.php | 10 - .../intl/Resources/data/currencies/mt.php | 18 - .../intl/Resources/data/currencies/my.php | 726 -- .../intl/Resources/data/currencies/nd.php | 242 - .../intl/Resources/data/currencies/ne.php | 666 - .../intl/Resources/data/currencies/nl.php | 1178 -- .../intl/Resources/data/currencies/nl_AW.php | 10 - .../intl/Resources/data/currencies/nl_BQ.php | 10 - .../intl/Resources/data/currencies/nl_CW.php | 10 - .../intl/Resources/data/currencies/nl_SR.php | 10 - .../intl/Resources/data/currencies/nl_SX.php | 10 - .../intl/Resources/data/currencies/nn.php | 406 - .../intl/Resources/data/currencies/no.php | 1166 -- .../intl/Resources/data/currencies/no_NO.php | 1166 -- .../intl/Resources/data/currencies/om.php | 42 - .../intl/Resources/data/currencies/om_KE.php | 10 - .../intl/Resources/data/currencies/or.php | 646 - .../intl/Resources/data/currencies/os.php | 30 - .../intl/Resources/data/currencies/os_RU.php | 14 - .../intl/Resources/data/currencies/pa.php | 742 -- .../Resources/data/currencies/pa_Arab.php | 18 - .../intl/Resources/data/currencies/pl.php | 1042 -- .../intl/Resources/data/currencies/ps.php | 638 - .../intl/Resources/data/currencies/ps_PK.php | 10 - .../intl/Resources/data/currencies/pt.php | 1162 -- .../intl/Resources/data/currencies/pt_AO.php | 10 - .../intl/Resources/data/currencies/pt_CV.php | 14 - .../intl/Resources/data/currencies/pt_LU.php | 10 - .../intl/Resources/data/currencies/pt_MO.php | 10 - .../intl/Resources/data/currencies/pt_MZ.php | 10 - .../intl/Resources/data/currencies/pt_PT.php | 694 -- .../intl/Resources/data/currencies/pt_ST.php | 10 - .../intl/Resources/data/currencies/qu.php | 634 - .../intl/Resources/data/currencies/qu_BO.php | 14 - .../intl/Resources/data/currencies/qu_EC.php | 14 - .../intl/Resources/data/currencies/rm.php | 1158 -- .../intl/Resources/data/currencies/rn.php | 230 - .../intl/Resources/data/currencies/ro.php | 970 -- .../intl/Resources/data/currencies/ro_MD.php | 10 - .../intl/Resources/data/currencies/root.php | 94 - .../intl/Resources/data/currencies/ru.php | 1082 -- .../intl/Resources/data/currencies/ru_BY.php | 14 - .../intl/Resources/data/currencies/ru_KG.php | 10 - .../intl/Resources/data/currencies/ru_KZ.php | 10 - .../intl/Resources/data/currencies/ru_MD.php | 10 - .../intl/Resources/data/currencies/rw.php | 10 - .../intl/Resources/data/currencies/sa.php | 38 - .../intl/Resources/data/currencies/sc.php | 1174 -- .../intl/Resources/data/currencies/sd.php | 646 - .../Resources/data/currencies/sd_Deva.php | 38 - .../intl/Resources/data/currencies/se.php | 30 - .../intl/Resources/data/currencies/se_SE.php | 14 - .../intl/Resources/data/currencies/sg.php | 238 - .../intl/Resources/data/currencies/sh.php | 1098 -- .../intl/Resources/data/currencies/sh_BA.php | 22 - .../intl/Resources/data/currencies/si.php | 662 - .../intl/Resources/data/currencies/sk.php | 1166 -- .../intl/Resources/data/currencies/sl.php | 1074 -- .../intl/Resources/data/currencies/sn.php | 242 - .../intl/Resources/data/currencies/so.php | 682 - .../intl/Resources/data/currencies/so_DJ.php | 10 - .../intl/Resources/data/currencies/so_ET.php | 10 - .../intl/Resources/data/currencies/so_KE.php | 10 - .../intl/Resources/data/currencies/sq.php | 658 - .../intl/Resources/data/currencies/sq_MK.php | 10 - .../intl/Resources/data/currencies/sr.php | 1098 -- .../intl/Resources/data/currencies/sr_BA.php | 22 - .../Resources/data/currencies/sr_Cyrl_BA.php | 22 - .../Resources/data/currencies/sr_Latn.php | 1098 -- .../Resources/data/currencies/sr_Latn_BA.php | 22 - .../intl/Resources/data/currencies/su.php | 42 - .../intl/Resources/data/currencies/sv.php | 1170 -- .../intl/Resources/data/currencies/sw.php | 682 - .../intl/Resources/data/currencies/sw_CD.php | 46 - .../intl/Resources/data/currencies/sw_KE.php | 270 - .../intl/Resources/data/currencies/sw_UG.php | 10 - .../intl/Resources/data/currencies/ta.php | 662 - .../intl/Resources/data/currencies/ta_LK.php | 10 - .../intl/Resources/data/currencies/ta_MY.php | 14 - .../intl/Resources/data/currencies/ta_SG.php | 18 - .../intl/Resources/data/currencies/te.php | 662 - .../intl/Resources/data/currencies/tg.php | 42 - .../intl/Resources/data/currencies/th.php | 1146 -- .../intl/Resources/data/currencies/ti.php | 46 - .../intl/Resources/data/currencies/ti_ER.php | 10 - .../intl/Resources/data/currencies/tk.php | 650 - .../intl/Resources/data/currencies/tl.php | 686 -- .../intl/Resources/data/currencies/to.php | 46 - .../intl/Resources/data/currencies/tr.php | 1166 -- .../intl/Resources/data/currencies/tt.php | 38 - .../intl/Resources/data/currencies/ug.php | 1162 -- .../intl/Resources/data/currencies/uk.php | 1082 -- .../intl/Resources/data/currencies/ur.php | 682 - .../intl/Resources/data/currencies/ur_IN.php | 38 - .../intl/Resources/data/currencies/uz.php | 658 - .../Resources/data/currencies/uz_Arab.php | 10 - .../Resources/data/currencies/uz_Cyrl.php | 194 - .../intl/Resources/data/currencies/vi.php | 1146 -- .../intl/Resources/data/currencies/wo.php | 42 - .../intl/Resources/data/currencies/xh.php | 634 - .../intl/Resources/data/currencies/yi.php | 50 - .../intl/Resources/data/currencies/yo.php | 666 - .../intl/Resources/data/currencies/yo_BJ.php | 410 - .../intl/Resources/data/currencies/zh.php | 1174 -- .../intl/Resources/data/currencies/zh_HK.php | 278 - .../Resources/data/currencies/zh_Hans_HK.php | 14 - .../Resources/data/currencies/zh_Hans_MO.php | 14 - .../Resources/data/currencies/zh_Hans_SG.php | 14 - .../Resources/data/currencies/zh_Hant.php | 1162 -- .../Resources/data/currencies/zh_Hant_HK.php | 278 - .../Resources/data/currencies/zh_Hant_MO.php | 10 - .../intl/Resources/data/currencies/zh_MO.php | 10 - .../intl/Resources/data/currencies/zh_SG.php | 14 - .../intl/Resources/data/currencies/zu.php | 662 - .../symfony/intl/Resources/data/git-info.txt | 7 - .../intl/Resources/data/languages/af.php | 450 - .../intl/Resources/data/languages/ak.php | 51 - .../intl/Resources/data/languages/am.php | 512 - .../intl/Resources/data/languages/ar.php | 572 - .../intl/Resources/data/languages/ar_EG.php | 8 - .../intl/Resources/data/languages/ar_LY.php | 17 - .../intl/Resources/data/languages/ar_SA.php | 19 - .../intl/Resources/data/languages/as.php | 444 - .../intl/Resources/data/languages/az.php | 559 - .../intl/Resources/data/languages/az_Cyrl.php | 392 - .../intl/Resources/data/languages/be.php | 470 - .../intl/Resources/data/languages/bg.php | 548 - .../intl/Resources/data/languages/bm.php | 52 - .../intl/Resources/data/languages/bn.php | 547 - .../intl/Resources/data/languages/bn_IN.php | 8 - .../intl/Resources/data/languages/bo.php | 20 - .../intl/Resources/data/languages/br.php | 579 - .../intl/Resources/data/languages/bs.php | 560 - .../intl/Resources/data/languages/bs_Cyrl.php | 533 - .../intl/Resources/data/languages/ca.php | 612 - .../intl/Resources/data/languages/ce.php | 399 - .../intl/Resources/data/languages/cs.php | 646 - .../intl/Resources/data/languages/cv.php | 44 - .../intl/Resources/data/languages/cy.php | 579 - .../intl/Resources/data/languages/da.php | 572 - .../intl/Resources/data/languages/de.php | 644 - .../intl/Resources/data/languages/de_AT.php | 21 - .../intl/Resources/data/languages/de_CH.php | 16 - .../intl/Resources/data/languages/dz.php | 144 - .../intl/Resources/data/languages/ee.php | 178 - .../intl/Resources/data/languages/el.php | 569 - .../intl/Resources/data/languages/en.php | 669 - .../intl/Resources/data/languages/en_001.php | 11 - .../intl/Resources/data/languages/en_AU.php | 11 - .../intl/Resources/data/languages/en_CA.php | 13 - .../intl/Resources/data/languages/en_GB.php | 8 - .../intl/Resources/data/languages/en_IN.php | 8 - .../intl/Resources/data/languages/eo.php | 159 - .../intl/Resources/data/languages/es.php | 574 - .../intl/Resources/data/languages/es_419.php | 42 - .../intl/Resources/data/languages/es_AR.php | 22 - .../intl/Resources/data/languages/es_BO.php | 22 - .../intl/Resources/data/languages/es_CL.php | 22 - .../intl/Resources/data/languages/es_CO.php | 22 - .../intl/Resources/data/languages/es_CR.php | 22 - .../intl/Resources/data/languages/es_DO.php | 22 - .../intl/Resources/data/languages/es_EC.php | 22 - .../intl/Resources/data/languages/es_GT.php | 22 - .../intl/Resources/data/languages/es_HN.php | 22 - .../intl/Resources/data/languages/es_MX.php | 55 - .../intl/Resources/data/languages/es_NI.php | 22 - .../intl/Resources/data/languages/es_PA.php | 22 - .../intl/Resources/data/languages/es_PE.php | 22 - .../intl/Resources/data/languages/es_PR.php | 14 - .../intl/Resources/data/languages/es_PY.php | 22 - .../intl/Resources/data/languages/es_SV.php | 14 - .../intl/Resources/data/languages/es_US.php | 63 - .../intl/Resources/data/languages/es_VE.php | 22 - .../intl/Resources/data/languages/et.php | 656 - .../intl/Resources/data/languages/eu.php | 455 - .../intl/Resources/data/languages/fa.php | 571 - .../intl/Resources/data/languages/fa_AF.php | 44 - .../intl/Resources/data/languages/ff.php | 52 - .../intl/Resources/data/languages/ff_Adlm.php | 440 - .../intl/Resources/data/languages/fi.php | 663 - .../intl/Resources/data/languages/fo.php | 404 - .../intl/Resources/data/languages/fr.php | 655 - .../intl/Resources/data/languages/fr_BE.php | 10 - .../intl/Resources/data/languages/fr_CA.php | 71 - .../intl/Resources/data/languages/fr_CH.php | 10 - .../intl/Resources/data/languages/fy.php | 516 - .../intl/Resources/data/languages/ga.php | 497 - .../intl/Resources/data/languages/gd.php | 636 - .../intl/Resources/data/languages/gl.php | 458 - .../intl/Resources/data/languages/gu.php | 570 - .../intl/Resources/data/languages/gv.php | 8 - .../intl/Resources/data/languages/ha.php | 438 - .../intl/Resources/data/languages/he.php | 564 - .../intl/Resources/data/languages/hi.php | 558 - .../intl/Resources/data/languages/hi_Latn.php | 24 - .../intl/Resources/data/languages/hr.php | 574 - .../intl/Resources/data/languages/hu.php | 579 - .../intl/Resources/data/languages/hy.php | 521 - .../intl/Resources/data/languages/ia.php | 445 - .../intl/Resources/data/languages/id.php | 585 - .../intl/Resources/data/languages/ie.php | 9 - .../intl/Resources/data/languages/ig.php | 432 - .../intl/Resources/data/languages/ii.php | 17 - .../intl/Resources/data/languages/in.php | 585 - .../intl/Resources/data/languages/is.php | 559 - .../intl/Resources/data/languages/it.php | 649 - .../intl/Resources/data/languages/iw.php | 564 - .../intl/Resources/data/languages/ja.php | 648 - .../intl/Resources/data/languages/jv.php | 435 - .../intl/Resources/data/languages/ka.php | 524 - .../intl/Resources/data/languages/ki.php | 52 - .../intl/Resources/data/languages/kk.php | 446 - .../intl/Resources/data/languages/kl.php | 8 - .../intl/Resources/data/languages/km.php | 445 - .../intl/Resources/data/languages/kn.php | 560 - .../intl/Resources/data/languages/ko.php | 577 - .../intl/Resources/data/languages/ks.php | 442 - .../intl/Resources/data/languages/ks_Deva.php | 33 - .../intl/Resources/data/languages/ku.php | 456 - .../intl/Resources/data/languages/kw.php | 8 - .../intl/Resources/data/languages/ky.php | 445 - .../intl/Resources/data/languages/lb.php | 611 - .../intl/Resources/data/languages/lg.php | 52 - .../intl/Resources/data/languages/ln.php | 52 - .../intl/Resources/data/languages/lo.php | 565 - .../intl/Resources/data/languages/lt.php | 654 - .../intl/Resources/data/languages/lu.php | 50 - .../intl/Resources/data/languages/lv.php | 559 - .../intl/Resources/data/languages/meta.php | 1682 --- .../intl/Resources/data/languages/mg.php | 52 - .../intl/Resources/data/languages/mi.php | 432 - .../intl/Resources/data/languages/mk.php | 654 - .../intl/Resources/data/languages/ml.php | 574 - .../intl/Resources/data/languages/mn.php | 449 - .../intl/Resources/data/languages/mo.php | 564 - .../intl/Resources/data/languages/mr.php | 560 - .../intl/Resources/data/languages/ms.php | 490 - .../intl/Resources/data/languages/mt.php | 505 - .../intl/Resources/data/languages/my.php | 464 - .../intl/Resources/data/languages/nd.php | 52 - .../intl/Resources/data/languages/ne.php | 601 - .../intl/Resources/data/languages/nl.php | 640 - .../intl/Resources/data/languages/nn.php | 88 - .../intl/Resources/data/languages/no.php | 642 - .../intl/Resources/data/languages/no_NO.php | 642 - .../intl/Resources/data/languages/oc.php | 9 - .../intl/Resources/data/languages/om.php | 94 - .../intl/Resources/data/languages/or.php | 550 - .../intl/Resources/data/languages/os.php | 77 - .../intl/Resources/data/languages/pa.php | 454 - .../intl/Resources/data/languages/pa_Arab.php | 8 - .../intl/Resources/data/languages/pl.php | 656 - .../intl/Resources/data/languages/ps.php | 444 - .../intl/Resources/data/languages/ps_PK.php | 13 - .../intl/Resources/data/languages/pt.php | 563 - .../intl/Resources/data/languages/pt_PT.php | 111 - .../intl/Resources/data/languages/qu.php | 426 - .../intl/Resources/data/languages/rm.php | 500 - .../intl/Resources/data/languages/rn.php | 52 - .../intl/Resources/data/languages/ro.php | 564 - .../intl/Resources/data/languages/ro_MD.php | 10 - .../intl/Resources/data/languages/ru.php | 574 - .../intl/Resources/data/languages/rw.php | 113 - .../intl/Resources/data/languages/sa.php | 36 - .../intl/Resources/data/languages/sc.php | 444 - .../intl/Resources/data/languages/sd.php | 442 - .../intl/Resources/data/languages/sd_Deva.php | 31 - .../intl/Resources/data/languages/se.php | 115 - .../intl/Resources/data/languages/se_FI.php | 37 - .../intl/Resources/data/languages/sg.php | 52 - .../intl/Resources/data/languages/sh.php | 551 - .../intl/Resources/data/languages/sh_BA.php | 24 - .../intl/Resources/data/languages/si.php | 454 - .../intl/Resources/data/languages/sk.php | 569 - .../intl/Resources/data/languages/sl.php | 552 - .../intl/Resources/data/languages/sn.php | 52 - .../intl/Resources/data/languages/so.php | 436 - .../intl/Resources/data/languages/sq.php | 455 - .../intl/Resources/data/languages/sr.php | 551 - .../intl/Resources/data/languages/sr_BA.php | 24 - .../Resources/data/languages/sr_Cyrl_BA.php | 24 - .../Resources/data/languages/sr_Cyrl_ME.php | 20 - .../Resources/data/languages/sr_Cyrl_XK.php | 20 - .../intl/Resources/data/languages/sr_Latn.php | 551 - .../Resources/data/languages/sr_Latn_BA.php | 24 - .../Resources/data/languages/sr_Latn_ME.php | 20 - .../Resources/data/languages/sr_Latn_XK.php | 20 - .../intl/Resources/data/languages/sr_ME.php | 20 - .../intl/Resources/data/languages/sr_XK.php | 20 - .../intl/Resources/data/languages/su.php | 32 - .../intl/Resources/data/languages/sv.php | 656 - .../intl/Resources/data/languages/sw.php | 479 - .../intl/Resources/data/languages/sw_CD.php | 39 - .../intl/Resources/data/languages/sw_KE.php | 155 - .../intl/Resources/data/languages/ta.php | 568 - .../intl/Resources/data/languages/te.php | 564 - .../intl/Resources/data/languages/tg.php | 171 - .../intl/Resources/data/languages/th.php | 655 - .../intl/Resources/data/languages/ti.php | 433 - .../intl/Resources/data/languages/ti_ER.php | 8 - .../intl/Resources/data/languages/tk.php | 435 - .../intl/Resources/data/languages/tl.php | 451 - .../intl/Resources/data/languages/to.php | 654 - .../intl/Resources/data/languages/tr.php | 656 - .../intl/Resources/data/languages/tt.php | 162 - .../intl/Resources/data/languages/ug.php | 512 - .../intl/Resources/data/languages/uk.php | 576 - .../intl/Resources/data/languages/ur.php | 457 - .../intl/Resources/data/languages/ur_IN.php | 21 - .../intl/Resources/data/languages/uz.php | 449 - .../intl/Resources/data/languages/uz_Arab.php | 10 - .../intl/Resources/data/languages/uz_Cyrl.php | 305 - .../intl/Resources/data/languages/vi.php | 594 - .../intl/Resources/data/languages/wo.php | 169 - .../intl/Resources/data/languages/xh.php | 47 - .../intl/Resources/data/languages/yi.php | 154 - .../intl/Resources/data/languages/yo.php | 431 - .../intl/Resources/data/languages/yo_BJ.php | 72 - .../intl/Resources/data/languages/za.php | 9 - .../intl/Resources/data/languages/zh.php | 580 - .../intl/Resources/data/languages/zh_HK.php | 70 - .../intl/Resources/data/languages/zh_Hant.php | 643 - .../Resources/data/languages/zh_Hant_HK.php | 70 - .../intl/Resources/data/languages/zu.php | 458 - .../intl/Resources/data/locales/af.php | 648 - .../intl/Resources/data/locales/ak.php | 329 - .../intl/Resources/data/locales/am.php | 652 - .../intl/Resources/data/locales/ar.php | 652 - .../intl/Resources/data/locales/ar_EG.php | 9 - .../intl/Resources/data/locales/ar_LY.php | 20 - .../intl/Resources/data/locales/ar_SA.php | 27 - .../intl/Resources/data/locales/as.php | 644 - .../intl/Resources/data/locales/az.php | 652 - .../intl/Resources/data/locales/az_Cyrl.php | 646 - .../intl/Resources/data/locales/be.php | 648 - .../intl/Resources/data/locales/bg.php | 652 - .../intl/Resources/data/locales/bm.php | 331 - .../intl/Resources/data/locales/bn.php | 652 - .../intl/Resources/data/locales/bn_IN.php | 7 - .../intl/Resources/data/locales/bo.php | 30 - .../intl/Resources/data/locales/br.php | 651 - .../intl/Resources/data/locales/bs.php | 651 - .../intl/Resources/data/locales/bs_Cyrl.php | 651 - .../intl/Resources/data/locales/ca.php | 652 - .../intl/Resources/data/locales/ce.php | 626 - .../intl/Resources/data/locales/cs.php | 652 - .../intl/Resources/data/locales/cv.php | 295 - .../intl/Resources/data/locales/cy.php | 650 - .../intl/Resources/data/locales/da.php | 652 - .../intl/Resources/data/locales/de.php | 652 - .../intl/Resources/data/locales/de_AT.php | 13 - .../intl/Resources/data/locales/de_CH.php | 14 - .../intl/Resources/data/locales/dz.php | 545 - .../intl/Resources/data/locales/ee.php | 562 - .../intl/Resources/data/locales/el.php | 652 - .../intl/Resources/data/locales/en.php | 652 - .../intl/Resources/data/locales/en_001.php | 15 - .../intl/Resources/data/locales/en_AU.php | 13 - .../intl/Resources/data/locales/en_CA.php | 33 - .../intl/Resources/data/locales/en_GB.php | 37 - .../intl/Resources/data/locales/en_IN.php | 9 - .../intl/Resources/data/locales/eo.php | 514 - .../intl/Resources/data/locales/es.php | 652 - .../intl/Resources/data/locales/es_419.php | 86 - .../intl/Resources/data/locales/es_AR.php | 8 - .../intl/Resources/data/locales/es_BO.php | 8 - .../intl/Resources/data/locales/es_CL.php | 9 - .../intl/Resources/data/locales/es_CO.php | 8 - .../intl/Resources/data/locales/es_CR.php | 8 - .../intl/Resources/data/locales/es_DO.php | 8 - .../intl/Resources/data/locales/es_EC.php | 8 - .../intl/Resources/data/locales/es_GT.php | 8 - .../intl/Resources/data/locales/es_HN.php | 8 - .../intl/Resources/data/locales/es_MX.php | 8 - .../intl/Resources/data/locales/es_NI.php | 8 - .../intl/Resources/data/locales/es_PA.php | 8 - .../intl/Resources/data/locales/es_PE.php | 8 - .../intl/Resources/data/locales/es_PR.php | 8 - .../intl/Resources/data/locales/es_PY.php | 8 - .../intl/Resources/data/locales/es_SV.php | 8 - .../intl/Resources/data/locales/es_US.php | 29 - .../intl/Resources/data/locales/es_VE.php | 8 - .../intl/Resources/data/locales/et.php | 652 - .../intl/Resources/data/locales/eu.php | 650 - .../intl/Resources/data/locales/fa.php | 652 - .../intl/Resources/data/locales/fa_AF.php | 251 - .../intl/Resources/data/locales/ff.php | 334 - .../intl/Resources/data/locales/ff_Adlm.php | 643 - .../intl/Resources/data/locales/fi.php | 652 - .../intl/Resources/data/locales/fo.php | 637 - .../intl/Resources/data/locales/fr.php | 652 - .../intl/Resources/data/locales/fr_BE.php | 8 - .../intl/Resources/data/locales/fr_CA.php | 73 - .../intl/Resources/data/locales/fr_CH.php | 8 - .../intl/Resources/data/locales/fy.php | 636 - .../intl/Resources/data/locales/ga.php | 652 - .../intl/Resources/data/locales/gd.php | 652 - .../intl/Resources/data/locales/gl.php | 648 - .../intl/Resources/data/locales/gu.php | 652 - .../intl/Resources/data/locales/gv.php | 8 - .../intl/Resources/data/locales/ha.php | 648 - .../intl/Resources/data/locales/he.php | 652 - .../intl/Resources/data/locales/hi.php | 652 - .../intl/Resources/data/locales/hi_Latn.php | 91 - .../intl/Resources/data/locales/hr.php | 652 - .../intl/Resources/data/locales/hu.php | 652 - .../intl/Resources/data/locales/hy.php | 652 - .../intl/Resources/data/locales/ia.php | 631 - .../intl/Resources/data/locales/id.php | 652 - .../intl/Resources/data/locales/ie.php | 10 - .../intl/Resources/data/locales/ig.php | 644 - .../intl/Resources/data/locales/ii.php | 34 - .../intl/Resources/data/locales/is.php | 652 - .../intl/Resources/data/locales/it.php | 652 - .../intl/Resources/data/locales/ja.php | 652 - .../intl/Resources/data/locales/jv.php | 644 - .../intl/Resources/data/locales/ka.php | 648 - .../intl/Resources/data/locales/ki.php | 331 - .../intl/Resources/data/locales/kk.php | 648 - .../intl/Resources/data/locales/kl.php | 8 - .../intl/Resources/data/locales/km.php | 648 - .../intl/Resources/data/locales/kn.php | 652 - .../intl/Resources/data/locales/ko.php | 652 - .../intl/Resources/data/locales/ko_KP.php | 7 - .../intl/Resources/data/locales/ks.php | 636 - .../intl/Resources/data/locales/ks_Deva.php | 321 - .../intl/Resources/data/locales/ku.php | 633 - .../intl/Resources/data/locales/kw.php | 8 - .../intl/Resources/data/locales/ky.php | 646 - .../intl/Resources/data/locales/lb.php | 638 - .../intl/Resources/data/locales/lg.php | 331 - .../intl/Resources/data/locales/ln.php | 335 - .../intl/Resources/data/locales/lo.php | 652 - .../intl/Resources/data/locales/lt.php | 652 - .../intl/Resources/data/locales/lu.php | 327 - .../intl/Resources/data/locales/lv.php | 652 - .../intl/Resources/data/locales/meta.php | 724 -- .../intl/Resources/data/locales/mg.php | 331 - .../intl/Resources/data/locales/mi.php | 644 - .../intl/Resources/data/locales/mk.php | 652 - .../intl/Resources/data/locales/ml.php | 652 - .../intl/Resources/data/locales/mn.php | 648 - .../intl/Resources/data/locales/mr.php | 652 - .../intl/Resources/data/locales/ms.php | 648 - .../intl/Resources/data/locales/mt.php | 632 - .../intl/Resources/data/locales/my.php | 644 - .../intl/Resources/data/locales/nd.php | 331 - .../intl/Resources/data/locales/ne.php | 646 - .../intl/Resources/data/locales/nl.php | 652 - .../intl/Resources/data/locales/nn.php | 12 - .../intl/Resources/data/locales/no.php | 652 - .../intl/Resources/data/locales/oc.php | 11 - .../intl/Resources/data/locales/om.php | 131 - .../intl/Resources/data/locales/or.php | 652 - .../intl/Resources/data/locales/os.php | 74 - .../intl/Resources/data/locales/pa.php | 644 - .../intl/Resources/data/locales/pa_Arab.php | 23 - .../intl/Resources/data/locales/pl.php | 652 - .../intl/Resources/data/locales/ps.php | 644 - .../intl/Resources/data/locales/ps_PK.php | 14 - .../intl/Resources/data/locales/pt.php | 652 - .../intl/Resources/data/locales/pt_PT.php | 159 - .../intl/Resources/data/locales/qu.php | 644 - .../intl/Resources/data/locales/rm.php | 638 - .../intl/Resources/data/locales/rn.php | 331 - .../intl/Resources/data/locales/ro.php | 652 - .../intl/Resources/data/locales/ro_MD.php | 7 - .../intl/Resources/data/locales/ru.php | 652 - .../intl/Resources/data/locales/ru_UA.php | 13 - .../intl/Resources/data/locales/rw.php | 109 - .../intl/Resources/data/locales/sa.php | 34 - .../intl/Resources/data/locales/sc.php | 644 - .../intl/Resources/data/locales/sd.php | 644 - .../intl/Resources/data/locales/sd_Deva.php | 326 - .../intl/Resources/data/locales/se.php | 447 - .../intl/Resources/data/locales/se_FI.php | 53 - .../intl/Resources/data/locales/sg.php | 331 - .../intl/Resources/data/locales/si.php | 644 - .../intl/Resources/data/locales/sk.php | 652 - .../intl/Resources/data/locales/sl.php | 650 - .../intl/Resources/data/locales/sn.php | 330 - .../intl/Resources/data/locales/so.php | 644 - .../intl/Resources/data/locales/sq.php | 648 - .../intl/Resources/data/locales/sr.php | 652 - .../Resources/data/locales/sr_Cyrl_BA.php | 63 - .../Resources/data/locales/sr_Cyrl_ME.php | 63 - .../Resources/data/locales/sr_Cyrl_XK.php | 68 - .../intl/Resources/data/locales/sr_Latn.php | 652 - .../Resources/data/locales/sr_Latn_BA.php | 63 - .../Resources/data/locales/sr_Latn_ME.php | 63 - .../Resources/data/locales/sr_Latn_XK.php | 68 - .../intl/Resources/data/locales/su.php | 37 - .../intl/Resources/data/locales/sv.php | 652 - .../intl/Resources/data/locales/sw.php | 648 - .../intl/Resources/data/locales/sw_CD.php | 67 - .../intl/Resources/data/locales/sw_KE.php | 200 - .../intl/Resources/data/locales/ta.php | 652 - .../intl/Resources/data/locales/te.php | 652 - .../intl/Resources/data/locales/tg.php | 570 - .../intl/Resources/data/locales/th.php | 652 - .../intl/Resources/data/locales/ti.php | 599 - .../intl/Resources/data/locales/ti_ER.php | 14 - .../intl/Resources/data/locales/tk.php | 644 - .../intl/Resources/data/locales/to.php | 652 - .../intl/Resources/data/locales/tr.php | 652 - .../intl/Resources/data/locales/tt.php | 542 - .../intl/Resources/data/locales/ug.php | 638 - .../intl/Resources/data/locales/uk.php | 652 - .../intl/Resources/data/locales/ur.php | 648 - .../intl/Resources/data/locales/ur_IN.php | 34 - .../intl/Resources/data/locales/uz.php | 644 - .../intl/Resources/data/locales/uz_Arab.php | 27 - .../intl/Resources/data/locales/uz_Cyrl.php | 640 - .../intl/Resources/data/locales/vi.php | 652 - .../intl/Resources/data/locales/wo.php | 548 - .../intl/Resources/data/locales/xh.php | 301 - .../intl/Resources/data/locales/yi.php | 441 - .../intl/Resources/data/locales/yo.php | 648 - .../intl/Resources/data/locales/yo_BJ.php | 313 - .../intl/Resources/data/locales/za.php | 9 - .../intl/Resources/data/locales/zh.php | 652 - .../intl/Resources/data/locales/zh_Hant.php | 650 - .../Resources/data/locales/zh_Hant_HK.php | 237 - .../intl/Resources/data/locales/zu.php | 648 - .../intl/Resources/data/regions/af.php | 255 - .../intl/Resources/data/regions/ak.php | 228 - .../intl/Resources/data/regions/am.php | 255 - .../intl/Resources/data/regions/ar.php | 255 - .../intl/Resources/data/regions/ar_LY.php | 8 - .../intl/Resources/data/regions/ar_SA.php | 9 - .../intl/Resources/data/regions/as.php | 255 - .../intl/Resources/data/regions/az.php | 255 - .../intl/Resources/data/regions/az_Cyrl.php | 250 - .../intl/Resources/data/regions/be.php | 255 - .../intl/Resources/data/regions/bg.php | 255 - .../intl/Resources/data/regions/bm.php | 228 - .../intl/Resources/data/regions/bn.php | 255 - .../intl/Resources/data/regions/bn_IN.php | 7 - .../intl/Resources/data/regions/bo.php | 16 - .../intl/Resources/data/regions/bo_IN.php | 5 - .../intl/Resources/data/regions/br.php | 254 - .../intl/Resources/data/regions/bs.php | 254 - .../intl/Resources/data/regions/bs_Cyrl.php | 254 - .../intl/Resources/data/regions/ca.php | 255 - .../intl/Resources/data/regions/ce.php | 253 - .../intl/Resources/data/regions/cs.php | 255 - .../intl/Resources/data/regions/cv.php | 254 - .../intl/Resources/data/regions/cy.php | 255 - .../intl/Resources/data/regions/da.php | 255 - .../intl/Resources/data/regions/de.php | 255 - .../intl/Resources/data/regions/de_AT.php | 7 - .../intl/Resources/data/regions/de_CH.php | 12 - .../intl/Resources/data/regions/dz.php | 253 - .../intl/Resources/data/regions/ee.php | 248 - .../intl/Resources/data/regions/el.php | 255 - .../intl/Resources/data/regions/en.php | 255 - .../intl/Resources/data/regions/en_001.php | 15 - .../intl/Resources/data/regions/en_AU.php | 11 - .../intl/Resources/data/regions/en_CA.php | 25 - .../intl/Resources/data/regions/eo.php | 227 - .../intl/Resources/data/regions/es.php | 255 - .../intl/Resources/data/regions/es_419.php | 15 - .../intl/Resources/data/regions/es_AR.php | 9 - .../intl/Resources/data/regions/es_BO.php | 9 - .../intl/Resources/data/regions/es_CL.php | 10 - .../intl/Resources/data/regions/es_CO.php | 9 - .../intl/Resources/data/regions/es_CR.php | 9 - .../intl/Resources/data/regions/es_DO.php | 9 - .../intl/Resources/data/regions/es_EC.php | 9 - .../intl/Resources/data/regions/es_GT.php | 9 - .../intl/Resources/data/regions/es_HN.php | 9 - .../intl/Resources/data/regions/es_MX.php | 11 - .../intl/Resources/data/regions/es_NI.php | 9 - .../intl/Resources/data/regions/es_PA.php | 9 - .../intl/Resources/data/regions/es_PE.php | 9 - .../intl/Resources/data/regions/es_PR.php | 7 - .../intl/Resources/data/regions/es_PY.php | 9 - .../intl/Resources/data/regions/es_SV.php | 7 - .../intl/Resources/data/regions/es_US.php | 10 - .../intl/Resources/data/regions/es_VE.php | 9 - .../intl/Resources/data/regions/et.php | 255 - .../intl/Resources/data/regions/eu.php | 255 - .../intl/Resources/data/regions/fa.php | 255 - .../intl/Resources/data/regions/fa_AF.php | 93 - .../intl/Resources/data/regions/ff.php | 228 - .../intl/Resources/data/regions/ff_Adlm.php | 254 - .../intl/Resources/data/regions/fi.php | 255 - .../intl/Resources/data/regions/fo.php | 255 - .../intl/Resources/data/regions/fr.php | 255 - .../intl/Resources/data/regions/fr_BE.php | 7 - .../intl/Resources/data/regions/fr_CA.php | 36 - .../intl/Resources/data/regions/fy.php | 253 - .../intl/Resources/data/regions/ga.php | 255 - .../intl/Resources/data/regions/gd.php | 255 - .../intl/Resources/data/regions/gl.php | 255 - .../intl/Resources/data/regions/gu.php | 255 - .../intl/Resources/data/regions/gv.php | 8 - .../intl/Resources/data/regions/ha.php | 255 - .../intl/Resources/data/regions/he.php | 255 - .../intl/Resources/data/regions/hi.php | 255 - .../intl/Resources/data/regions/hi_Latn.php | 22 - .../intl/Resources/data/regions/hr.php | 255 - .../intl/Resources/data/regions/hu.php | 255 - .../intl/Resources/data/regions/hy.php | 255 - .../intl/Resources/data/regions/ia.php | 255 - .../intl/Resources/data/regions/id.php | 255 - .../intl/Resources/data/regions/ie.php | 7 - .../intl/Resources/data/regions/ig.php | 255 - .../intl/Resources/data/regions/ii.php | 16 - .../intl/Resources/data/regions/in.php | 255 - .../intl/Resources/data/regions/is.php | 255 - .../intl/Resources/data/regions/it.php | 255 - .../intl/Resources/data/regions/iw.php | 255 - .../intl/Resources/data/regions/ja.php | 255 - .../intl/Resources/data/regions/jv.php | 255 - .../intl/Resources/data/regions/ka.php | 255 - .../intl/Resources/data/regions/ki.php | 228 - .../intl/Resources/data/regions/kk.php | 255 - .../intl/Resources/data/regions/kl.php | 7 - .../intl/Resources/data/regions/km.php | 255 - .../intl/Resources/data/regions/kn.php | 255 - .../intl/Resources/data/regions/ko.php | 255 - .../intl/Resources/data/regions/ko_KP.php | 7 - .../intl/Resources/data/regions/ks.php | 254 - .../intl/Resources/data/regions/ks_Deva.php | 16 - .../intl/Resources/data/regions/ku.php | 255 - .../intl/Resources/data/regions/kw.php | 7 - .../intl/Resources/data/regions/ky.php | 255 - .../intl/Resources/data/regions/lb.php | 254 - .../intl/Resources/data/regions/lg.php | 228 - .../intl/Resources/data/regions/ln.php | 235 - .../intl/Resources/data/regions/lo.php | 255 - .../intl/Resources/data/regions/lt.php | 255 - .../intl/Resources/data/regions/lu.php | 228 - .../intl/Resources/data/regions/lv.php | 255 - .../intl/Resources/data/regions/meta.php | 1340 -- .../intl/Resources/data/regions/mg.php | 228 - .../intl/Resources/data/regions/mi.php | 255 - .../intl/Resources/data/regions/mk.php | 255 - .../intl/Resources/data/regions/ml.php | 255 - .../intl/Resources/data/regions/mn.php | 255 - .../intl/Resources/data/regions/mo.php | 255 - .../intl/Resources/data/regions/mr.php | 255 - .../intl/Resources/data/regions/ms.php | 255 - .../intl/Resources/data/regions/mt.php | 254 - .../intl/Resources/data/regions/my.php | 255 - .../intl/Resources/data/regions/nd.php | 228 - .../intl/Resources/data/regions/ne.php | 255 - .../intl/Resources/data/regions/nl.php | 255 - .../intl/Resources/data/regions/nn.php | 37 - .../intl/Resources/data/regions/no.php | 255 - .../intl/Resources/data/regions/no_NO.php | 255 - .../intl/Resources/data/regions/oc.php | 9 - .../intl/Resources/data/regions/om.php | 18 - .../intl/Resources/data/regions/or.php | 255 - .../intl/Resources/data/regions/os.php | 17 - .../intl/Resources/data/regions/pa.php | 255 - .../intl/Resources/data/regions/pa_Arab.php | 7 - .../intl/Resources/data/regions/pl.php | 255 - .../intl/Resources/data/regions/ps.php | 255 - .../intl/Resources/data/regions/ps_PK.php | 9 - .../intl/Resources/data/regions/pt.php | 255 - .../intl/Resources/data/regions/pt_PT.php | 64 - .../intl/Resources/data/regions/qu.php | 255 - .../intl/Resources/data/regions/rm.php | 254 - .../intl/Resources/data/regions/rn.php | 228 - .../intl/Resources/data/regions/ro.php | 255 - .../intl/Resources/data/regions/ro_MD.php | 7 - .../intl/Resources/data/regions/ru.php | 255 - .../intl/Resources/data/regions/ru_UA.php | 14 - .../intl/Resources/data/regions/rw.php | 9 - .../intl/Resources/data/regions/sa.php | 16 - .../intl/Resources/data/regions/sc.php | 255 - .../intl/Resources/data/regions/sd.php | 255 - .../intl/Resources/data/regions/sd_Deva.php | 17 - .../intl/Resources/data/regions/se.php | 250 - .../intl/Resources/data/regions/se_FI.php | 10 - .../intl/Resources/data/regions/sg.php | 228 - .../intl/Resources/data/regions/sh.php | 255 - .../intl/Resources/data/regions/sh_BA.php | 35 - .../intl/Resources/data/regions/si.php | 255 - .../intl/Resources/data/regions/sk.php | 255 - .../intl/Resources/data/regions/sl.php | 255 - .../intl/Resources/data/regions/sn.php | 227 - .../intl/Resources/data/regions/so.php | 255 - .../intl/Resources/data/regions/sq.php | 255 - .../intl/Resources/data/regions/sr.php | 255 - .../intl/Resources/data/regions/sr_BA.php | 35 - .../Resources/data/regions/sr_Cyrl_BA.php | 35 - .../Resources/data/regions/sr_Cyrl_ME.php | 17 - .../Resources/data/regions/sr_Cyrl_XK.php | 16 - .../intl/Resources/data/regions/sr_Latn.php | 255 - .../Resources/data/regions/sr_Latn_BA.php | 35 - .../Resources/data/regions/sr_Latn_ME.php | 17 - .../Resources/data/regions/sr_Latn_XK.php | 16 - .../intl/Resources/data/regions/sr_ME.php | 17 - .../intl/Resources/data/regions/sr_XK.php | 16 - .../intl/Resources/data/regions/su.php | 17 - .../intl/Resources/data/regions/sv.php | 255 - .../intl/Resources/data/regions/sw.php | 255 - .../intl/Resources/data/regions/sw_CD.php | 30 - .../intl/Resources/data/regions/sw_KE.php | 66 - .../intl/Resources/data/regions/ta.php | 255 - .../intl/Resources/data/regions/te.php | 255 - .../intl/Resources/data/regions/tg.php | 251 - .../intl/Resources/data/regions/th.php | 255 - .../intl/Resources/data/regions/ti.php | 254 - .../intl/Resources/data/regions/tk.php | 255 - .../intl/Resources/data/regions/tl.php | 255 - .../intl/Resources/data/regions/to.php | 255 - .../intl/Resources/data/regions/tr.php | 255 - .../intl/Resources/data/regions/tt.php | 246 - .../intl/Resources/data/regions/ug.php | 254 - .../intl/Resources/data/regions/uk.php | 255 - .../intl/Resources/data/regions/ur.php | 255 - .../intl/Resources/data/regions/ur_IN.php | 23 - .../intl/Resources/data/regions/uz.php | 255 - .../intl/Resources/data/regions/uz_Arab.php | 7 - .../intl/Resources/data/regions/uz_Cyrl.php | 254 - .../intl/Resources/data/regions/vi.php | 255 - .../intl/Resources/data/regions/wo.php | 250 - .../intl/Resources/data/regions/xh.php | 255 - .../intl/Resources/data/regions/yi.php | 202 - .../intl/Resources/data/regions/yo.php | 255 - .../intl/Resources/data/regions/yo_BJ.php | 81 - .../intl/Resources/data/regions/za.php | 7 - .../intl/Resources/data/regions/zh.php | 255 - .../intl/Resources/data/regions/zh_HK.php | 94 - .../intl/Resources/data/regions/zh_Hant.php | 255 - .../Resources/data/regions/zh_Hant_HK.php | 94 - .../intl/Resources/data/regions/zu.php | 255 - .../intl/Resources/data/scripts/af.php | 63 - .../intl/Resources/data/scripts/am.php | 82 - .../intl/Resources/data/scripts/ar.php | 131 - .../intl/Resources/data/scripts/as.php | 63 - .../intl/Resources/data/scripts/az.php | 136 - .../intl/Resources/data/scripts/az_Cyrl.php | 7 - .../intl/Resources/data/scripts/be.php | 63 - .../intl/Resources/data/scripts/bg.php | 131 - .../intl/Resources/data/scripts/bn.php | 141 - .../intl/Resources/data/scripts/bo.php | 10 - .../intl/Resources/data/scripts/br.php | 93 - .../intl/Resources/data/scripts/bs.php | 207 - .../intl/Resources/data/scripts/bs_Cyrl.php | 201 - .../intl/Resources/data/scripts/ca.php | 181 - .../intl/Resources/data/scripts/ce.php | 49 - .../intl/Resources/data/scripts/cs.php | 178 - .../intl/Resources/data/scripts/cv.php | 14 - .../intl/Resources/data/scripts/cy.php | 63 - .../intl/Resources/data/scripts/da.php | 170 - .../intl/Resources/data/scripts/de.php | 175 - .../intl/Resources/data/scripts/dz.php | 44 - .../intl/Resources/data/scripts/ee.php | 44 - .../intl/Resources/data/scripts/el.php | 141 - .../intl/Resources/data/scripts/en.php | 207 - .../intl/Resources/data/scripts/en_AU.php | 7 - .../intl/Resources/data/scripts/en_IN.php | 8 - .../intl/Resources/data/scripts/eo.php | 7 - .../intl/Resources/data/scripts/es.php | 133 - .../intl/Resources/data/scripts/es_419.php | 13 - .../intl/Resources/data/scripts/es_US.php | 9 - .../intl/Resources/data/scripts/et.php | 199 - .../intl/Resources/data/scripts/eu.php | 182 - .../intl/Resources/data/scripts/fa.php | 135 - .../intl/Resources/data/scripts/fa_AF.php | 7 - .../intl/Resources/data/scripts/ff_Adlm.php | 182 - .../intl/Resources/data/scripts/fi.php | 207 - .../intl/Resources/data/scripts/fo.php | 49 - .../intl/Resources/data/scripts/fr.php | 146 - .../intl/Resources/data/scripts/fr_CA.php | 14 - .../intl/Resources/data/scripts/fy.php | 164 - .../intl/Resources/data/scripts/ga.php | 116 - .../intl/Resources/data/scripts/gd.php | 199 - .../intl/Resources/data/scripts/gl.php | 63 - .../intl/Resources/data/scripts/gu.php | 140 - .../intl/Resources/data/scripts/ha.php | 63 - .../intl/Resources/data/scripts/ha_NE.php | 7 - .../intl/Resources/data/scripts/he.php | 186 - .../intl/Resources/data/scripts/hi.php | 143 - .../intl/Resources/data/scripts/hi_Latn.php | 12 - .../intl/Resources/data/scripts/hr.php | 169 - .../intl/Resources/data/scripts/hu.php | 148 - .../intl/Resources/data/scripts/hy.php | 63 - .../intl/Resources/data/scripts/ia.php | 49 - .../intl/Resources/data/scripts/id.php | 200 - .../intl/Resources/data/scripts/ie.php | 5 - .../intl/Resources/data/scripts/ig.php | 62 - .../intl/Resources/data/scripts/ii.php | 13 - .../intl/Resources/data/scripts/in.php | 200 - .../intl/Resources/data/scripts/is.php | 69 - .../intl/Resources/data/scripts/it.php | 171 - .../intl/Resources/data/scripts/iw.php | 186 - .../intl/Resources/data/scripts/ja.php | 175 - .../intl/Resources/data/scripts/jv.php | 62 - .../intl/Resources/data/scripts/ka.php | 157 - .../intl/Resources/data/scripts/kk.php | 182 - .../intl/Resources/data/scripts/km.php | 100 - .../intl/Resources/data/scripts/kn.php | 141 - .../intl/Resources/data/scripts/ko.php | 174 - .../intl/Resources/data/scripts/ks.php | 126 - .../intl/Resources/data/scripts/ks_Deva.php | 13 - .../intl/Resources/data/scripts/ku.php | 46 - .../intl/Resources/data/scripts/ky.php | 63 - .../intl/Resources/data/scripts/lb.php | 125 - .../intl/Resources/data/scripts/lo.php | 168 - .../intl/Resources/data/scripts/lt.php | 174 - .../intl/Resources/data/scripts/lv.php | 92 - .../intl/Resources/data/scripts/meta.php | 207 - .../intl/Resources/data/scripts/mi.php | 63 - .../intl/Resources/data/scripts/mk.php | 175 - .../intl/Resources/data/scripts/ml.php | 141 - .../intl/Resources/data/scripts/mn.php | 182 - .../intl/Resources/data/scripts/mo.php | 192 - .../intl/Resources/data/scripts/mr.php | 141 - .../intl/Resources/data/scripts/ms.php | 169 - .../intl/Resources/data/scripts/mt.php | 17 - .../intl/Resources/data/scripts/my.php | 70 - .../intl/Resources/data/scripts/ne.php | 137 - .../intl/Resources/data/scripts/nl.php | 207 - .../intl/Resources/data/scripts/nn.php | 35 - .../intl/Resources/data/scripts/no.php | 179 - .../intl/Resources/data/scripts/no_NO.php | 179 - .../intl/Resources/data/scripts/oc.php | 7 - .../intl/Resources/data/scripts/om.php | 7 - .../intl/Resources/data/scripts/or.php | 141 - .../intl/Resources/data/scripts/os.php | 12 - .../intl/Resources/data/scripts/pa.php | 63 - .../intl/Resources/data/scripts/pa_Arab.php | 9 - .../intl/Resources/data/scripts/pl.php | 143 - .../intl/Resources/data/scripts/ps.php | 63 - .../intl/Resources/data/scripts/pt.php | 145 - .../intl/Resources/data/scripts/pt_PT.php | 22 - .../intl/Resources/data/scripts/qu.php | 63 - .../intl/Resources/data/scripts/rm.php | 143 - .../intl/Resources/data/scripts/ro.php | 192 - .../intl/Resources/data/scripts/ru.php | 170 - .../intl/Resources/data/scripts/sa.php | 12 - .../intl/Resources/data/scripts/sc.php | 182 - .../intl/Resources/data/scripts/sd.php | 68 - .../intl/Resources/data/scripts/sd_Deva.php | 13 - .../intl/Resources/data/scripts/se.php | 17 - .../intl/Resources/data/scripts/se_FI.php | 11 - .../intl/Resources/data/scripts/sh.php | 141 - .../intl/Resources/data/scripts/si.php | 63 - .../intl/Resources/data/scripts/sk.php | 73 - .../intl/Resources/data/scripts/sl.php | 133 - .../intl/Resources/data/scripts/so.php | 175 - .../intl/Resources/data/scripts/sq.php | 182 - .../intl/Resources/data/scripts/sr.php | 141 - .../intl/Resources/data/scripts/sr_Latn.php | 141 - .../intl/Resources/data/scripts/su.php | 11 - .../intl/Resources/data/scripts/sv.php | 201 - .../intl/Resources/data/scripts/sw.php | 63 - .../intl/Resources/data/scripts/sw_KE.php | 28 - .../intl/Resources/data/scripts/ta.php | 141 - .../intl/Resources/data/scripts/te.php | 141 - .../intl/Resources/data/scripts/tg.php | 182 - .../intl/Resources/data/scripts/th.php | 175 - .../intl/Resources/data/scripts/ti.php | 11 - .../intl/Resources/data/scripts/tk.php | 63 - .../intl/Resources/data/scripts/tl.php | 63 - .../intl/Resources/data/scripts/to.php | 175 - .../intl/Resources/data/scripts/tr.php | 176 - .../intl/Resources/data/scripts/tt.php | 12 - .../intl/Resources/data/scripts/ug.php | 162 - .../intl/Resources/data/scripts/uk.php | 152 - .../intl/Resources/data/scripts/ur.php | 63 - .../intl/Resources/data/scripts/uz.php | 63 - .../intl/Resources/data/scripts/uz_Arab.php | 7 - .../intl/Resources/data/scripts/uz_Cyrl.php | 44 - .../intl/Resources/data/scripts/vi.php | 170 - .../intl/Resources/data/scripts/wo.php | 12 - .../intl/Resources/data/scripts/xh.php | 14 - .../intl/Resources/data/scripts/yi.php | 12 - .../intl/Resources/data/scripts/yo.php | 61 - .../intl/Resources/data/scripts/yo_BJ.php | 21 - .../intl/Resources/data/scripts/za.php | 7 - .../intl/Resources/data/scripts/zh.php | 205 - .../intl/Resources/data/scripts/zh_HK.php | 20 - .../intl/Resources/data/scripts/zh_Hant.php | 188 - .../Resources/data/scripts/zh_Hant_HK.php | 20 - .../intl/Resources/data/scripts/zu.php | 174 - .../intl/Resources/data/timezones/af.php | 431 - .../intl/Resources/data/timezones/am.php | 435 - .../intl/Resources/data/timezones/ar.php | 433 - .../intl/Resources/data/timezones/as.php | 431 - .../intl/Resources/data/timezones/az.php | 431 - .../intl/Resources/data/timezones/be.php | 431 - .../intl/Resources/data/timezones/bg.php | 433 - .../intl/Resources/data/timezones/bn.php | 433 - .../intl/Resources/data/timezones/bo.php | 73 - .../intl/Resources/data/timezones/br.php | 431 - .../intl/Resources/data/timezones/bs.php | 434 - .../intl/Resources/data/timezones/bs_Cyrl.php | 431 - .../intl/Resources/data/timezones/ca.php | 431 - .../intl/Resources/data/timezones/ce.php | 430 - .../intl/Resources/data/timezones/cs.php | 434 - .../intl/Resources/data/timezones/cv.php | 431 - .../intl/Resources/data/timezones/cy.php | 431 - .../intl/Resources/data/timezones/da.php | 434 - .../intl/Resources/data/timezones/de.php | 431 - .../intl/Resources/data/timezones/de_CH.php | 11 - .../intl/Resources/data/timezones/dz.php | 432 - .../intl/Resources/data/timezones/ee.php | 433 - .../intl/Resources/data/timezones/el.php | 431 - .../intl/Resources/data/timezones/en.php | 431 - .../intl/Resources/data/timezones/en_001.php | 16 - .../intl/Resources/data/timezones/en_AU.php | 37 - .../intl/Resources/data/timezones/en_CA.php | 19 - .../intl/Resources/data/timezones/en_GB.php | 10 - .../intl/Resources/data/timezones/en_IN.php | 8 - .../intl/Resources/data/timezones/eo.php | 402 - .../intl/Resources/data/timezones/es.php | 431 - .../intl/Resources/data/timezones/es_419.php | 66 - .../intl/Resources/data/timezones/es_MX.php | 19 - .../intl/Resources/data/timezones/es_US.php | 18 - .../intl/Resources/data/timezones/et.php | 434 - .../intl/Resources/data/timezones/eu.php | 433 - .../intl/Resources/data/timezones/fa.php | 435 - .../intl/Resources/data/timezones/ff_Adlm.php | 433 - .../intl/Resources/data/timezones/fi.php | 435 - .../intl/Resources/data/timezones/fo.php | 431 - .../intl/Resources/data/timezones/fr.php | 434 - .../intl/Resources/data/timezones/fr_CA.php | 161 - .../intl/Resources/data/timezones/fy.php | 430 - .../intl/Resources/data/timezones/ga.php | 433 - .../intl/Resources/data/timezones/gd.php | 431 - .../intl/Resources/data/timezones/gl.php | 431 - .../intl/Resources/data/timezones/gu.php | 431 - .../intl/Resources/data/timezones/ha.php | 431 - .../intl/Resources/data/timezones/he.php | 435 - .../intl/Resources/data/timezones/hi.php | 431 - .../intl/Resources/data/timezones/hi_Latn.php | 88 - .../intl/Resources/data/timezones/hr.php | 433 - .../intl/Resources/data/timezones/hu.php | 431 - .../intl/Resources/data/timezones/hy.php | 431 - .../intl/Resources/data/timezones/ia.php | 431 - .../intl/Resources/data/timezones/id.php | 434 - .../intl/Resources/data/timezones/ie.php | 33 - .../intl/Resources/data/timezones/ig.php | 431 - .../intl/Resources/data/timezones/ii.php | 88 - .../intl/Resources/data/timezones/is.php | 431 - .../intl/Resources/data/timezones/it.php | 431 - .../intl/Resources/data/timezones/ja.php | 431 - .../intl/Resources/data/timezones/jv.php | 431 - .../intl/Resources/data/timezones/ka.php | 431 - .../intl/Resources/data/timezones/kk.php | 431 - .../intl/Resources/data/timezones/km.php | 433 - .../intl/Resources/data/timezones/kn.php | 431 - .../intl/Resources/data/timezones/ko.php | 431 - .../intl/Resources/data/timezones/ko_KP.php | 9 - .../intl/Resources/data/timezones/ks.php | 431 - .../intl/Resources/data/timezones/ks_Deva.php | 193 - .../intl/Resources/data/timezones/ku.php | 431 - .../intl/Resources/data/timezones/ky.php | 431 - .../intl/Resources/data/timezones/lb.php | 430 - .../intl/Resources/data/timezones/ln.php | 405 - .../intl/Resources/data/timezones/lo.php | 431 - .../intl/Resources/data/timezones/lt.php | 433 - .../intl/Resources/data/timezones/lv.php | 431 - .../intl/Resources/data/timezones/meta.php | 1764 --- .../intl/Resources/data/timezones/mi.php | 431 - .../intl/Resources/data/timezones/mk.php | 431 - .../intl/Resources/data/timezones/ml.php | 433 - .../intl/Resources/data/timezones/mn.php | 431 - .../intl/Resources/data/timezones/mr.php | 433 - .../intl/Resources/data/timezones/ms.php | 431 - .../intl/Resources/data/timezones/ms_ID.php | 9 - .../intl/Resources/data/timezones/mt.php | 425 - .../intl/Resources/data/timezones/my.php | 431 - .../intl/Resources/data/timezones/ne.php | 431 - .../intl/Resources/data/timezones/nl.php | 431 - .../intl/Resources/data/timezones/nn.php | 330 - .../intl/Resources/data/timezones/no.php | 431 - .../intl/Resources/data/timezones/oc.php | 37 - .../intl/Resources/data/timezones/or.php | 431 - .../intl/Resources/data/timezones/os.php | 168 - .../intl/Resources/data/timezones/pa.php | 431 - .../intl/Resources/data/timezones/pl.php | 431 - .../intl/Resources/data/timezones/ps.php | 431 - .../intl/Resources/data/timezones/ps_PK.php | 17 - .../intl/Resources/data/timezones/pt.php | 431 - .../intl/Resources/data/timezones/pt_PT.php | 431 - .../intl/Resources/data/timezones/qu.php | 431 - .../intl/Resources/data/timezones/rm.php | 430 - .../intl/Resources/data/timezones/ro.php | 431 - .../intl/Resources/data/timezones/root.php | 9 - .../intl/Resources/data/timezones/ru.php | 431 - .../intl/Resources/data/timezones/sa.php | 238 - .../intl/Resources/data/timezones/sc.php | 431 - .../intl/Resources/data/timezones/sd.php | 431 - .../intl/Resources/data/timezones/sd_Deva.php | 197 - .../intl/Resources/data/timezones/se.php | 424 - .../intl/Resources/data/timezones/se_FI.php | 396 - .../intl/Resources/data/timezones/si.php | 435 - .../intl/Resources/data/timezones/sk.php | 431 - .../intl/Resources/data/timezones/sl.php | 435 - .../intl/Resources/data/timezones/so.php | 431 - .../intl/Resources/data/timezones/sq.php | 431 - .../intl/Resources/data/timezones/sr.php | 431 - .../Resources/data/timezones/sr_Cyrl_BA.php | 431 - .../intl/Resources/data/timezones/sr_Latn.php | 431 - .../Resources/data/timezones/sr_Latn_BA.php | 408 - .../intl/Resources/data/timezones/su.php | 242 - .../intl/Resources/data/timezones/sv.php | 433 - .../intl/Resources/data/timezones/sw.php | 433 - .../intl/Resources/data/timezones/sw_KE.php | 84 - .../intl/Resources/data/timezones/ta.php | 431 - .../intl/Resources/data/timezones/te.php | 431 - .../intl/Resources/data/timezones/tg.php | 430 - .../intl/Resources/data/timezones/th.php | 431 - .../intl/Resources/data/timezones/ti.php | 427 - .../intl/Resources/data/timezones/tk.php | 431 - .../intl/Resources/data/timezones/to.php | 431 - .../intl/Resources/data/timezones/tr.php | 431 - .../intl/Resources/data/timezones/tt.php | 427 - .../intl/Resources/data/timezones/ug.php | 430 - .../intl/Resources/data/timezones/uk.php | 431 - .../intl/Resources/data/timezones/ur.php | 433 - .../intl/Resources/data/timezones/ur_IN.php | 131 - .../intl/Resources/data/timezones/uz.php | 431 - .../intl/Resources/data/timezones/uz_Arab.php | 8 - .../intl/Resources/data/timezones/uz_Cyrl.php | 425 - .../intl/Resources/data/timezones/vi.php | 431 - .../intl/Resources/data/timezones/wo.php | 429 - .../intl/Resources/data/timezones/xh.php | 431 - .../intl/Resources/data/timezones/yi.php | 364 - .../intl/Resources/data/timezones/yo.php | 433 - .../intl/Resources/data/timezones/yo_BJ.php | 87 - .../intl/Resources/data/timezones/za.php | 32 - .../intl/Resources/data/timezones/zh.php | 431 - .../Resources/data/timezones/zh_Hans_SG.php | 431 - .../intl/Resources/data/timezones/zh_Hant.php | 431 - .../Resources/data/timezones/zh_Hant_HK.php | 216 - .../intl/Resources/data/timezones/zu.php | 431 - .../symfony/intl/Resources/data/version.txt | 1 - vendor/symfony/intl/Scripts.php | 63 - vendor/symfony/intl/Timezones.php | 116 - .../Transliterator/EmojiTransliterator.php | 31 - vendor/symfony/intl/Util/GitRepository.php | 108 - .../symfony/intl/Util/GzipStreamWrapper.php | 83 - vendor/symfony/intl/Util/IcuVersion.php | 98 - vendor/symfony/intl/Util/IntlTestHelper.php | 108 - vendor/symfony/intl/Util/Version.php | 89 - vendor/symfony/intl/composer.json | 45 - vendor/symfony/mailer/CHANGELOG.md | 110 - .../mailer/Command/MailerTestCommand.php | 73 - .../DataCollector/MessageDataCollector.php | 59 - vendor/symfony/mailer/DelayedEnvelope.php | 98 - vendor/symfony/mailer/Envelope.php | 88 - .../mailer/Event/FailedMessageEvent.php | 37 - vendor/symfony/mailer/Event/MessageEvent.php | 105 - vendor/symfony/mailer/Event/MessageEvents.php | 74 - .../symfony/mailer/Event/SentMessageEvent.php | 30 - .../mailer/EventListener/EnvelopeListener.php | 96 - .../mailer/EventListener/MessageListener.php | 134 - .../EventListener/MessageLoggerListener.php | 54 - .../MessengerTransportListener.php | 49 - .../mailer/Exception/ExceptionInterface.php | 21 - .../Exception/HttpTransportException.php | 34 - .../Exception/IncompleteDsnException.php | 19 - .../Exception/InvalidArgumentException.php | 19 - .../mailer/Exception/LogicException.php | 19 - .../mailer/Exception/RuntimeException.php | 19 - .../mailer/Exception/TransportException.php | 30 - .../Exception/TransportExceptionInterface.php | 22 - .../Exception/UnexpectedResponseException.php | 16 - .../Exception/UnsupportedSchemeException.php | 101 - .../symfony/mailer/Header/MetadataHeader.php | 34 - vendor/symfony/mailer/Header/TagHeader.php | 25 - vendor/symfony/mailer/Mailer.php | 76 - vendor/symfony/mailer/MailerInterface.php | 30 - .../mailer/Messenger/MessageHandler.php | 33 - .../mailer/Messenger/SendEmailMessage.php | 40 - vendor/symfony/mailer/README.md | 74 - vendor/symfony/mailer/SentMessage.php | 95 - .../mailer/Test/Constraint/EmailCount.php | 65 - .../mailer/Test/Constraint/EmailIsQueued.php | 39 - .../mailer/Test/TransportFactoryTestCase.php | 117 - vendor/symfony/mailer/Transport.php | 188 - .../mailer/Transport/AbstractApiTransport.php | 47 - .../Transport/AbstractHttpTransport.php | 78 - .../mailer/Transport/AbstractTransport.php | 136 - .../Transport/AbstractTransportFactory.php | 51 - vendor/symfony/mailer/Transport/Dsn.php | 89 - .../mailer/Transport/FailoverTransport.php | 41 - .../Transport/NativeTransportFactory.php | 63 - .../mailer/Transport/NullTransport.php | 31 - .../mailer/Transport/NullTransportFactory.php | 34 - .../mailer/Transport/RoundRobinTransport.php | 125 - .../mailer/Transport/SendmailTransport.php | 124 - .../Transport/SendmailTransportFactory.php | 34 - .../Smtp/Auth/AuthenticatorInterface.php | 35 - .../Smtp/Auth/CramMd5Authenticator.php | 65 - .../Smtp/Auth/LoginAuthenticator.php | 37 - .../Smtp/Auth/PlainAuthenticator.php | 35 - .../Smtp/Auth/XOAuth2Authenticator.php | 37 - .../mailer/Transport/Smtp/EsmtpTransport.php | 244 - .../Transport/Smtp/EsmtpTransportFactory.php | 80 - .../mailer/Transport/Smtp/SmtpTransport.php | 384 - .../Transport/Smtp/Stream/AbstractStream.php | 146 - .../Transport/Smtp/Stream/ProcessStream.php | 81 - .../Transport/Smtp/Stream/SocketStream.php | 193 - .../Transport/TransportFactoryInterface.php | 29 - .../mailer/Transport/TransportInterface.php | 33 - .../symfony/mailer/Transport/Transports.php | 75 - vendor/symfony/mailer/composer.json | 47 - vendor/symfony/maker-bundle/composer.json | 76 - vendor/symfony/maker-bundle/phpstan.dist.neon | 26 - .../src/ApplicationAwareMakerInterface.php | 24 - .../maker-bundle/src/Command/MakerCommand.php | 134 - .../Console/MigrationDiffFilteredOutput.php | 136 - .../symfony/maker-bundle/src/ConsoleStyle.php | 45 - .../maker-bundle/src/DependencyBuilder.php | 144 - .../MakeCommandRegistrationPass.php | 77 - .../RemoveMissingParametersPass.php | 31 - .../SetDoctrineAnnotatedPrefixesPass.php | 68 - .../src/DependencyInjection/Configuration.php | 34 - .../DependencyInjection/MakerExtension.php | 58 - .../src/Docker/DockerDatabaseServices.php | 106 - .../src/Doctrine/BaseCollectionRelation.php | 32 - .../src/Doctrine/BaseRelation.php | 88 - .../src/Doctrine/DoctrineHelper.php | 369 - .../src/Doctrine/EntityClassGenerator.php | 146 - .../src/Doctrine/EntityDetails.php | 90 - .../src/Doctrine/EntityRegenerator.php | 216 - .../src/Doctrine/EntityRelation.php | 189 - .../src/Doctrine/ORMDependencyBuilder.php | 42 - .../src/Doctrine/RelationManyToMany.php | 64 - .../src/Doctrine/RelationManyToOne.php | 44 - .../src/Doctrine/RelationOneToMany.php | 56 - .../src/Doctrine/RelationOneToOne.php | 67 - .../src/Event/ConsoleErrorSubscriber.php | 63 - .../maker-bundle/src/EventRegistry.php | 124 - .../src/Exception/RuntimeCommandException.php | 23 - .../symfony/maker-bundle/src/FileManager.php | 207 - vendor/symfony/maker-bundle/src/Generator.php | 279 - .../maker-bundle/src/GeneratorTwigHelper.php | 71 - .../src/InputAwareMakerInterface.php | 24 - .../maker-bundle/src/InputConfiguration.php | 31 - .../maker-bundle/src/Maker/AbstractMaker.php | 58 - .../Maker/Common/CanGenerateTestsTrait.php | 60 - .../src/Maker/Common/EntityIdTypeEnum.php | 24 - .../Maker/Common/InstallDependencyTrait.php | 42 - .../src/Maker/Common/UidTrait.php | 79 - .../src/Maker/MakeAuthenticator.php | 471 - .../maker-bundle/src/Maker/MakeCommand.php | 113 - .../maker-bundle/src/Maker/MakeController.php | 127 - .../maker-bundle/src/Maker/MakeCrud.php | 327 - .../src/Maker/MakeDockerDatabase.php | 200 - .../maker-bundle/src/Maker/MakeEntity.php | 899 -- .../maker-bundle/src/Maker/MakeFixtures.php | 97 - .../maker-bundle/src/Maker/MakeForm.php | 144 - .../src/Maker/MakeFunctionalTest.php | 106 - .../maker-bundle/src/Maker/MakeListener.php | 264 - .../maker-bundle/src/Maker/MakeMessage.php | 156 - .../src/Maker/MakeMessengerMiddleware.php | 92 - .../maker-bundle/src/Maker/MakeMigration.php | 180 - .../src/Maker/MakeRegistrationForm.php | 603 - .../src/Maker/MakeResetPassword.php | 553 - .../maker-bundle/src/Maker/MakeSchedule.php | 145 - .../src/Maker/MakeSerializerEncoder.php | 93 - .../src/Maker/MakeSerializerNormalizer.php | 108 - .../src/Maker/MakeStimulusController.php | 254 - .../maker-bundle/src/Maker/MakeSubscriber.php | 142 - .../maker-bundle/src/Maker/MakeTest.php | 228 - .../src/Maker/MakeTwigComponent.php | 119 - .../src/Maker/MakeTwigExtension.php | 107 - .../maker-bundle/src/Maker/MakeUnitTest.php | 79 - .../maker-bundle/src/Maker/MakeUser.php | 261 - .../maker-bundle/src/Maker/MakeValidator.php | 92 - .../maker-bundle/src/Maker/MakeVoter.php | 86 - .../maker-bundle/src/Maker/MakeWebhook.php | 307 - .../Security/MakeCustomAuthenticator.php | 144 - .../src/Maker/Security/MakeFormLogin.php | 226 - .../symfony/maker-bundle/src/MakerBundle.php | 34 - .../maker-bundle/src/MakerInterface.php | 53 - .../src/Renderer/FormTypeRenderer.php | 81 - .../Resources/bin/php-cs-fixer-v3.49.0.phar | Bin 2824115 -> 0 bytes .../src/Resources/config/makers.xml | 175 - .../Resources/config/php-cs-fixer.config.php | 21 - .../src/Resources/config/services.xml | 88 - .../maker-bundle/src/Resources/doc/index.rst | 163 - .../src/Resources/help/MakeAuth.txt | 8 - .../src/Resources/help/MakeCommand.txt | 5 - .../src/Resources/help/MakeController.txt | 14 - .../src/Resources/help/MakeCrud.txt | 5 - .../src/Resources/help/MakeDockerDatabase.txt | 5 - .../src/Resources/help/MakeEntity.txt | 24 - .../src/Resources/help/MakeFixture.txt | 5 - .../src/Resources/help/MakeForm.txt | 16 - .../src/Resources/help/MakeFunctionalTest.txt | 5 - .../src/Resources/help/MakeListener.txt | 5 - .../src/Resources/help/MakeMessage.txt | 5 - .../src/Resources/help/MakeMiddleware.txt | 5 - .../src/Resources/help/MakeMigration.txt | 7 - .../Resources/help/MakeRegistrationForm.txt | 5 - .../src/Resources/help/MakeResetPassword.txt | 18 - .../src/Resources/help/MakeScheduler.txt | 8 - .../Resources/help/MakeSerializerEncoder.txt | 5 - .../help/MakeSerializerNormalizer.txt | 5 - .../Resources/help/MakeStimulusController.txt | 5 - .../src/Resources/help/MakeSubscriber.txt | 5 - .../src/Resources/help/MakeTest.txt | 7 - .../src/Resources/help/MakeTwigExtension.txt | 5 - .../src/Resources/help/MakeUnitTest.txt | 5 - .../src/Resources/help/MakeUser.txt | 7 - .../src/Resources/help/MakeValidator.txt | 5 - .../src/Resources/help/MakeVoter.txt | 5 - .../src/Resources/help/MakeWebhook.txt | 8 - .../src/Resources/help/_WithTests.txt | 6 - .../src/Resources/help/_WithUid.txt | 10 - .../Resources/help/security/MakeCustom.txt | 8 - .../Resources/help/security/MakeFormLogin.txt | 9 - .../src/Resources/skeleton/Class.tpl.php | 7 - .../authenticator/EmptyAuthenticator.tpl.php | 39 - .../EmptySecurityController.tpl.php | 9 - .../LoginFormAuthenticator.tpl.php | 48 - .../skeleton/authenticator/login_form.tpl.php | 41 - .../skeleton/command/Command.tpl.php | 44 - .../skeleton/controller/Controller.tpl.php | 24 - .../skeleton/controller/twig_template.tpl.php | 18 - .../crud/controller/Controller.tpl.php | 87 - .../crud/templates/_delete_form.tpl.php | 4 - .../skeleton/crud/templates/_form.tpl.php | 4 - .../skeleton/crud/templates/edit.tpl.php | 11 - .../skeleton/crud/templates/index.tpl.php | 35 - .../skeleton/crud/templates/new.tpl.php | 9 - .../skeleton/crud/templates/show.tpl.php | 22 - .../crud/test/Test.EntityManager.tpl.php | 122 - .../skeleton/doctrine/Entity.tpl.php | 56 - .../skeleton/doctrine/Fixtures.tpl.php | 16 - .../skeleton/doctrine/Repository.tpl.php | 61 - .../doctrine/broadcast_twig_template.tpl.php | 22 - .../Resources/skeleton/event/Listener.tpl.php | 14 - .../skeleton/event/Subscriber.tpl.php | 20 - .../src/Resources/skeleton/form/Type.tpl.php | 36 - .../skeleton/message/Message.tpl.php | 16 - .../skeleton/message/MessageHandler.tpl.php | 14 - .../skeleton/middleware/Middleware.tpl.php | 14 - .../RegistrationController.tpl.php | 102 - .../registration/Test.WithVerify.tpl.php | 75 - .../registration/Test.WithoutVerify.tpl.php | 46 - .../skeleton/registration/twig_email.tpl.php | 11 - .../registration/twig_template.tpl.php | 23 - .../ChangePasswordFormType.tpl.php | 50 - .../ResetPasswordController.tpl.php | 158 - .../ResetPasswordRequestFormType.tpl.php | 27 - .../Test.ResetPasswordController.tpl.php | 98 - .../resetPassword/twig_check_email.tpl.php | 11 - .../skeleton/resetPassword/twig_email.tpl.php | 9 - .../resetPassword/twig_request.tpl.php | 22 - .../skeleton/resetPassword/twig_reset.tpl.php | 12 - .../skeleton/scheduler/Schedule.tpl.php | 30 - .../skeleton/security/UserProvider.tpl.php | 74 - .../Resources/skeleton/security/Voter.tpl.php | 42 - .../security/custom/Authenticator.tpl.php | 67 - .../formLogin/LoginController.tpl.php | 23 - .../formLogin/Test.LoginController.tpl.php | 79 - .../security/formLogin/login_form.tpl.php | 43 - .../skeleton/serializer/Encoder.tpl.php | 32 - .../skeleton/serializer/Normalizer.tpl.php | 41 - .../skeleton/stimulus/Controller.tpl.php | 18 - .../skeleton/test/ApiTestCase.tpl.php | 16 - .../skeleton/test/Functional.tpl.php | 31 - .../skeleton/test/KernelTestCase.tpl.php | 17 - .../skeleton/test/PantherTestCase.tpl.php | 20 - .../Resources/skeleton/test/TestCase.tpl.php | 13 - .../src/Resources/skeleton/test/Unit.tpl.php | 14 - .../skeleton/test/WebTestCase.tpl.php | 22 - .../Resources/skeleton/twig/Component.tpl.php | 10 - .../Resources/skeleton/twig/Extension.tpl.php | 25 - .../skeleton/twig/LiveComponent.tpl.php | 12 - .../Resources/skeleton/twig/Runtime.tpl.php | 18 - .../skeleton/twig/component_template.tpl.php | 3 - .../skeleton/validator/Constraint.tpl.php | 20 - .../skeleton/validator/Validator.tpl.php | 23 - .../verifyEmail/EmailVerifier.tpl.php | 51 - .../skeleton/webhook/RequestParser.tpl.php | 52 - .../skeleton/webhook/WebhookConsumer.tpl.php | 20 - .../Security/InteractiveSecurityHelper.php | 289 - .../src/Security/Model/Authenticator.php | 39 - .../src/Security/Model/AuthenticatorType.php | 30 - .../src/Security/SecurityConfigUpdater.php | 318 - .../Security/SecurityControllerBuilder.php | 84 - .../src/Security/UserClassBuilder.php | 279 - .../src/Security/UserClassConfiguration.php | 58 - vendor/symfony/maker-bundle/src/Str.php | 272 - .../maker-bundle/src/Test/MakerTestCase.php | 142 - .../src/Test/MakerTestDetails.php | 250 - .../src/Test/MakerTestEnvironment.php | 453 - .../maker-bundle/src/Test/MakerTestKernel.php | 89 - .../src/Test/MakerTestProcess.php | 80 - .../maker-bundle/src/Test/MakerTestRunner.php | 266 - .../maker-bundle/src/Util/AutoloaderUtil.php | 99 - .../maker-bundle/src/Util/ClassDetails.php | 72 - .../src/Util/ClassNameDetails.php | 52 - .../maker-bundle/src/Util/ClassNameValue.php | 45 - .../src/Util/ClassSource/Model/ClassData.php | 117 - .../Util/ClassSource/Model/ClassProperty.php | 105 - .../src/Util/ClassSourceManipulator.php | 1420 --- .../maker-bundle/src/Util/CliOutputHelper.php | 47 - .../src/Util/ComposeFileManipulator.php | 132 - .../src/Util/ComposerAutoloaderFinder.php | 109 - .../src/Util/MakerFileLinkFormatter.php | 51 - .../maker-bundle/src/Util/PhpCompatUtil.php | 45 - .../maker-bundle/src/Util/PrettyPrinter.php | 65 - .../src/Util/TemplateComponentGenerator.php | 73 - .../maker-bundle/src/Util/TemplateLinter.php | 154 - .../src/Util/UseStatementGenerator.php | 92 - .../Util/YamlManipulationFailedException.php | 19 - .../src/Util/YamlSourceManipulator.php | 1331 -- vendor/symfony/maker-bundle/src/Validator.php | 258 - .../messenger/Attribute/AsMessageHandler.php | 49 - vendor/symfony/messenger/CHANGELOG.md | 286 - .../Command/AbstractFailedMessagesCommand.php | 240 - .../Command/ConsumeMessagesCommand.php | 307 - .../messenger/Command/DebugCommand.php | 139 - .../Command/FailedMessagesRemoveCommand.php | 148 - .../Command/FailedMessagesRetryCommand.php | 279 - .../Command/FailedMessagesShowCommand.php | 197 - .../Command/SetupTransportsCommand.php | 94 - .../messenger/Command/StatsCommand.php | 88 - .../messenger/Command/StopWorkersCommand.php | 64 - .../DataCollector/MessengerDataCollector.php | 132 - .../DependencyInjection/MessengerPass.php | 387 - vendor/symfony/messenger/Envelope.php | 130 - .../Event/AbstractWorkerMessageEvent.php | 42 - .../Event/SendMessageToTransportsEvent.php | 56 - .../Event/WorkerMessageFailedEvent.php | 47 - .../Event/WorkerMessageHandledEvent.php | 21 - .../Event/WorkerMessageReceivedEvent.php | 31 - .../Event/WorkerMessageRetriedEvent.php | 21 - .../Event/WorkerRateLimitedEvent.php | 37 - .../messenger/Event/WorkerRunningEvent.php | 41 - .../messenger/Event/WorkerStartedEvent.php | 32 - .../messenger/Event/WorkerStoppedEvent.php | 32 - .../AddErrorDetailsStampListener.php | 38 - .../DispatchPcntlSignalListener.php | 41 - .../EventListener/ResetServicesListener.php | 48 - .../SendFailedMessageForRetryListener.php | 163 - ...ailedMessageToFailureTransportListener.php | 74 - ...topWorkerOnCustomStopExceptionListener.php | 57 - .../StopWorkerOnFailureLimitListener.php | 58 - .../StopWorkerOnMemoryLimitListener.php | 51 - .../StopWorkerOnMessageLimitListener.php | 52 - .../StopWorkerOnRestartSignalListener.php | 67 - .../StopWorkerOnTimeLimitListener.php | 58 - .../DelayedMessageHandlingException.php | 46 - .../EnvelopeAwareExceptionInterface.php | 19 - .../Exception/EnvelopeAwareExceptionTrait.php | 27 - .../Exception/ExceptionInterface.php | 21 - .../Exception/HandlerFailedException.php | 47 - .../Exception/InvalidArgumentException.php | 19 - .../messenger/Exception/LogicException.php | 19 - .../MessageDecodingFailedException.php | 19 - .../NoHandlerForMessageException.php | 19 - .../Exception/NoSenderForMessageException.php | 19 - .../RecoverableExceptionInterface.php | 24 - .../RecoverableMessageHandlingException.php | 21 - .../RejectRedeliveredMessageException.php | 19 - .../messenger/Exception/RuntimeException.php | 19 - .../Exception/StopWorkerException.php | 23 - .../StopWorkerExceptionInterface.php | 19 - .../Exception/TransportException.php | 19 - .../UnrecoverableExceptionInterface.php | 24 - .../UnrecoverableMessageHandlingException.php | 21 - .../Exception/ValidationFailedException.php | 43 - .../Exception/WrappedExceptionsInterface.php | 25 - .../Exception/WrappedExceptionsTrait.php | 56 - vendor/symfony/messenger/HandleTrait.php | 56 - .../messenger/Handler/Acknowledger.php | 80 - .../Handler/BatchHandlerInterface.php | 34 - .../messenger/Handler/BatchHandlerTrait.php | 72 - .../messenger/Handler/HandlerDescriptor.php | 81 - .../messenger/Handler/HandlersLocator.php | 97 - .../Handler/HandlersLocatorInterface.php | 29 - .../Handler/RedispatchMessageHandler.php | 29 - .../messenger/Message/RedispatchMessage.php | 34 - vendor/symfony/messenger/MessageBus.php | 72 - .../symfony/messenger/MessageBusInterface.php | 31 - .../Middleware/ActivationMiddleware.php | 40 - .../Middleware/AddBusNameStampMiddleware.php | 37 - .../DispatchAfterCurrentBusMiddleware.php | 130 - .../FailedMessageProcessingMiddleware.php | 36 - .../Middleware/HandleMessageMiddleware.php | 154 - .../Middleware/MiddlewareInterface.php | 26 - .../RejectRedeliveredMessageMiddleware.php | 43 - .../Middleware/RouterContextMiddleware.php | 86 - .../Middleware/SendMessageMiddleware.php | 77 - .../messenger/Middleware/StackInterface.php | 25 - .../messenger/Middleware/StackMiddleware.php | 90 - .../Middleware/TraceableMiddleware.php | 88 - .../Middleware/ValidationMiddleware.php | 45 - vendor/symfony/messenger/README.md | 21 - .../Retry/MultiplierRetryStrategy.php | 96 - .../Retry/RetryStrategyInterface.php | 34 - .../symfony/messenger/RoutableMessageBus.php | 68 - vendor/symfony/messenger/Stamp/AckStamp.php | 33 - .../symfony/messenger/Stamp/BusNameStamp.php | 30 - .../messenger/Stamp/ConsumedByWorkerStamp.php | 19 - vendor/symfony/messenger/Stamp/DelayStamp.php | 44 - .../Stamp/DispatchAfterCurrentBusStamp.php | 23 - .../messenger/Stamp/ErrorDetailsStamp.php | 80 - .../Stamp/FlushBatchHandlersStamp.php | 28 - .../symfony/messenger/Stamp/HandledStamp.php | 50 - .../messenger/Stamp/HandlerArgumentsStamp.php | 28 - .../Stamp/MessageDecodingFailedStamp.php | 19 - .../messenger/Stamp/NoAutoAckStamp.php | 30 - .../Stamp/NonSendableStampInterface.php | 21 - .../symfony/messenger/Stamp/ReceivedStamp.php | 37 - .../messenger/Stamp/RedeliveryStamp.php | 47 - .../messenger/Stamp/RouterContextStamp.php | 70 - vendor/symfony/messenger/Stamp/SentStamp.php | 38 - .../Stamp/SentToFailureTransportStamp.php | 30 - .../Stamp/SerializedMessageStamp.php | 24 - .../messenger/Stamp/SerializerStamp.php | 28 - .../messenger/Stamp/StampInterface.php | 23 - .../Stamp/TransportMessageIdStamp.php | 33 - .../messenger/Stamp/TransportNamesStamp.php | 33 - .../messenger/Stamp/ValidationStamp.php | 34 - .../Test/Middleware/MiddlewareTestCase.php | 58 - .../symfony/messenger/TraceableMessageBus.php | 105 - .../Transport/InMemory/InMemoryTransport.php | 162 - .../InMemory/InMemoryTransportFactory.php | 67 - .../Receiver/ListableReceiverInterface.php | 40 - .../Receiver/MessageCountAwareInterface.php | 26 - .../Receiver/QueueReceiverInterface.php | 31 - .../Transport/Receiver/ReceiverInterface.php | 61 - .../Receiver/SingleMessageReceiver.php | 53 - .../Transport/Sender/SenderInterface.php | 33 - .../Transport/Sender/SendersLocator.php | 74 - .../Sender/SendersLocatorInterface.php | 30 - .../Normalizer/FlattenExceptionNormalizer.php | 90 - .../Transport/Serialization/PhpSerializer.php | 123 - .../Transport/Serialization/Serializer.php | 181 - .../Serialization/SerializerInterface.php | 48 - .../Transport/SetupableTransportInterface.php | 23 - .../Transport/Sync/SyncTransport.php | 58 - .../Transport/Sync/SyncTransportFactory.php | 40 - .../messenger/Transport/TransportFactory.php | 67 - .../Transport/TransportFactoryInterface.php | 31 - .../Transport/TransportInterface.php | 22 - vendor/symfony/messenger/Worker.php | 284 - vendor/symfony/messenger/WorkerMetadata.php | 47 - vendor/symfony/messenger/composer.json | 53 - vendor/symfony/mime/Address.php | 120 - vendor/symfony/mime/BodyRendererInterface.php | 20 - vendor/symfony/mime/CHANGELOG.md | 57 - vendor/symfony/mime/CharacterStream.php | 211 - vendor/symfony/mime/Crypto/DkimOptions.php | 97 - vendor/symfony/mime/Crypto/DkimSigner.php | 217 - vendor/symfony/mime/Crypto/SMime.php | 111 - vendor/symfony/mime/Crypto/SMimeEncrypter.php | 63 - vendor/symfony/mime/Crypto/SMimeSigner.php | 65 - .../AddMimeTypeGuesserPass.php | 34 - vendor/symfony/mime/DraftEmail.php | 45 - vendor/symfony/mime/Email.php | 576 - .../mime/Encoder/AddressEncoderInterface.php | 28 - .../mime/Encoder/Base64ContentEncoder.php | 45 - vendor/symfony/mime/Encoder/Base64Encoder.php | 41 - .../mime/Encoder/Base64MimeHeaderEncoder.php | 43 - .../mime/Encoder/ContentEncoderInterface.php | 30 - .../mime/Encoder/EightBitContentEncoder.php | 35 - .../symfony/mime/Encoder/EncoderInterface.php | 26 - .../mime/Encoder/IdnAddressEncoder.php | 44 - .../Encoder/MimeHeaderEncoderInterface.php | 23 - .../symfony/mime/Encoder/QpContentEncoder.php | 55 - vendor/symfony/mime/Encoder/QpEncoder.php | 192 - .../mime/Encoder/QpMimeHeaderEncoder.php | 40 - .../symfony/mime/Encoder/Rfc2231Encoder.php | 50 - .../Exception/AddressEncoderException.php | 19 - .../mime/Exception/ExceptionInterface.php | 19 - .../Exception/InvalidArgumentException.php | 19 - .../symfony/mime/Exception/LogicException.php | 19 - .../mime/Exception/RfcComplianceException.php | 19 - .../mime/Exception/RuntimeException.php | 19 - .../mime/FileBinaryMimeTypeGuesser.php | 85 - .../symfony/mime/FileinfoMimeTypeGuesser.php | 61 - vendor/symfony/mime/Header/AbstractHeader.php | 280 - vendor/symfony/mime/Header/DateHeader.php | 62 - .../symfony/mime/Header/HeaderInterface.php | 61 - vendor/symfony/mime/Header/Headers.php | 316 - .../mime/Header/IdentificationHeader.php | 107 - vendor/symfony/mime/Header/MailboxHeader.php | 85 - .../symfony/mime/Header/MailboxListHeader.php | 136 - .../mime/Header/ParameterizedHeader.php | 191 - vendor/symfony/mime/Header/PathHeader.php | 62 - .../mime/Header/UnstructuredHeader.php | 66 - .../DefaultHtmlToTextConverter.php | 23 - .../HtmlToTextConverterInterface.php | 25 - .../LeagueHtmlToMarkdownConverter.php | 35 - vendor/symfony/mime/Message.php | 163 - vendor/symfony/mime/MessageConverter.php | 122 - .../symfony/mime/MimeTypeGuesserInterface.php | 33 - vendor/symfony/mime/MimeTypes.php | 3703 ------ vendor/symfony/mime/MimeTypesInterface.php | 32 - .../mime/Part/AbstractMultipartPart.php | 95 - vendor/symfony/mime/Part/AbstractPart.php | 65 - vendor/symfony/mime/Part/DataPart.php | 165 - vendor/symfony/mime/Part/File.php | 51 - vendor/symfony/mime/Part/MessagePart.php | 69 - .../mime/Part/Multipart/AlternativePart.php | 25 - .../mime/Part/Multipart/DigestPart.php | 31 - .../mime/Part/Multipart/FormDataPart.php | 105 - .../symfony/mime/Part/Multipart/MixedPart.php | 25 - .../mime/Part/Multipart/RelatedPart.php | 55 - vendor/symfony/mime/Part/SMimePart.php | 105 - vendor/symfony/mime/Part/TextPart.php | 245 - vendor/symfony/mime/README.md | 13 - vendor/symfony/mime/RawMessage.php | 110 - .../Test/Constraint/EmailAddressContains.php | 64 - .../Test/Constraint/EmailAttachmentCount.php | 50 - .../mime/Test/Constraint/EmailHasHeader.php | 48 - .../mime/Test/Constraint/EmailHeaderSame.php | 59 - .../Test/Constraint/EmailHtmlBodyContains.php | 49 - .../Test/Constraint/EmailSubjectContains.php | 47 - .../Test/Constraint/EmailTextBodyContains.php | 49 - vendor/symfony/mime/composer.json | 47 - vendor/symfony/monolog-bridge/CHANGELOG.md | 110 - .../Command/ServerLogCommand.php | 171 - .../Formatter/ConsoleFormatter.php | 205 - .../Formatter/VarDumperFormatter.php | 48 - .../Handler/ChromePhpHandler.php | 73 - .../monolog-bridge/Handler/ConsoleHandler.php | 177 - .../Handler/ElasticsearchLogstashHandler.php | 175 - .../HttpCodeActivationStrategy.php | 70 - .../NotFoundActivationStrategy.php | 54 - .../monolog-bridge/Handler/FirePHPHandler.php | 75 - .../monolog-bridge/Handler/MailerHandler.php | 133 - .../Handler/NotifierHandler.php | 80 - .../Handler/ServerLogHandler.php | 122 - .../Processor/AbstractTokenProcessor.php | 52 - .../Processor/ConsoleCommandProcessor.php | 70 - .../Processor/DebugProcessor.php | 89 - .../Processor/RouteProcessor.php | 89 - .../Processor/SwitchUserTokenProcessor.php | 39 - .../Processor/TokenProcessor.php | 33 - .../monolog-bridge/Processor/WebProcessor.php | 48 - vendor/symfony/monolog-bridge/README.md | 13 - vendor/symfony/monolog-bridge/composer.json | 45 - vendor/symfony/monolog-bundle/CHANGELOG.md | 120 - .../Compiler/AddProcessorsPass.php | 70 - .../Compiler/AddSwiftMailerTransportPass.php | 59 - .../Compiler/DebugHandlerPass.php | 58 - .../Compiler/FixEmptyLoggerPass.php | 57 - .../Compiler/LoggerChannelPass.php | 161 - .../DependencyInjection/Configuration.php | 1145 -- .../DependencyInjection/MonologExtension.php | 1090 -- .../symfony/monolog-bundle/MonologBundle.php | 56 - vendor/symfony/monolog-bundle/README.md | 12 - .../Resources/config/monolog.xml | 44 - .../Resources/config/schema/monolog-1.0.xsd | 205 - .../SwiftMailer/MessageFactory.php | 61 - vendor/symfony/monolog-bundle/composer.json | 42 - vendor/symfony/notifier/CHANGELOG.md | 73 - .../notifier/Channel/AbstractChannel.php | 35 - .../notifier/Channel/BrowserChannel.php | 48 - .../notifier/Channel/ChannelInterface.php | 25 - .../notifier/Channel/ChannelPolicy.php | 34 - .../Channel/ChannelPolicyInterface.php | 23 - .../symfony/notifier/Channel/ChatChannel.php | 48 - .../symfony/notifier/Channel/EmailChannel.php | 92 - .../symfony/notifier/Channel/PushChannel.php | 48 - .../symfony/notifier/Channel/SmsChannel.php | 52 - vendor/symfony/notifier/Chatter.php | 55 - vendor/symfony/notifier/ChatterInterface.php | 23 - .../NotificationDataCollector.php | 49 - .../notifier/Event/FailedMessageEvent.php | 37 - .../symfony/notifier/Event/MessageEvent.php | 37 - .../notifier/Event/NotificationEvents.php | 67 - .../notifier/Event/SentMessageEvent.php | 31 - .../NotificationLoggerListener.php | 52 - .../SendFailedMessageToNotifierListener.php | 56 - .../notifier/Exception/ExceptionInterface.php | 21 - .../FlashMessageImportanceMapperException.php | 25 - .../Exception/IncompleteDsnException.php | 35 - .../Exception/InvalidArgumentException.php | 19 - .../notifier/Exception/LengthException.php | 19 - .../notifier/Exception/LogicException.php | 19 - .../MissingRequiredOptionException.php | 25 - .../MultipleExclusiveOptionsUsedException.php | 33 - .../notifier/Exception/RuntimeException.php | 19 - .../notifier/Exception/TransportException.php | 43 - .../Exception/TransportExceptionInterface.php | 20 - .../UnsupportedMessageTypeException.php | 32 - .../Exception/UnsupportedSchemeException.php | 356 - .../AbstractFlashMessageImportanceMapper.php | 29 - .../BootstrapFlashMessageImportanceMapper.php | 27 - .../DefaultFlashMessageImportanceMapper.php | 27 - .../FlashMessageImportanceMapperInterface.php | 25 - .../symfony/notifier/Message/ChatMessage.php | 92 - .../symfony/notifier/Message/EmailMessage.php | 128 - .../Message/FromNotificationInterface.php | 22 - .../notifier/Message/MessageInterface.php | 26 - .../Message/MessageOptionsInterface.php | 22 - .../symfony/notifier/Message/NullMessage.php | 45 - .../symfony/notifier/Message/PushMessage.php | 96 - .../symfony/notifier/Message/SentMessage.php | 46 - .../symfony/notifier/Message/SmsMessage.php | 133 - .../notifier/Messenger/MessageHandler.php | 32 - .../ChatNotificationInterface.php | 23 - .../EmailNotificationInterface.php | 23 - .../notifier/Notification/Notification.php | 215 - .../PushNotificationInterface.php | 20 - .../Notification/SmsNotificationInterface.php | 23 - vendor/symfony/notifier/Notifier.php | 114 - vendor/symfony/notifier/NotifierInterface.php | 25 - vendor/symfony/notifier/README.md | 20 - .../Recipient/EmailRecipientInterface.php | 20 - .../Recipient/EmailRecipientTrait.php | 25 - .../notifier/Recipient/NoRecipient.php | 19 - .../symfony/notifier/Recipient/Recipient.php | 56 - .../notifier/Recipient/RecipientInterface.php | 19 - .../Recipient/SmsRecipientInterface.php | 21 - .../notifier/Recipient/SmsRecipientTrait.php | 25 - .../Test/Constraint/NotificationCount.php | 64 - .../Test/Constraint/NotificationIsQueued.php | 42 - .../NotificationSubjectContains.php | 47 - .../NotificationTransportIsEqual.php | 47 - .../Test/TransportFactoryTestCase.php | 136 - .../notifier/Test/TransportTestCase.php | 117 - vendor/symfony/notifier/Texter.php | 55 - vendor/symfony/notifier/TexterInterface.php | 23 - vendor/symfony/notifier/Transport.php | 194 - .../notifier/Transport/AbstractTransport.php | 103 - .../Transport/AbstractTransportFactory.php | 52 - vendor/symfony/notifier/Transport/Dsn.php | 110 - .../notifier/Transport/FailoverTransport.php | 43 - .../notifier/Transport/NullTransport.php | 57 - .../Transport/NullTransportFactory.php | 34 - .../Transport/RoundRobinTransport.php | 142 - .../Transport/TransportFactoryInterface.php | 31 - .../notifier/Transport/TransportInterface.php | 29 - .../symfony/notifier/Transport/Transports.php | 76 - vendor/symfony/notifier/composer.json | 41 - vendor/symfony/options-resolver/CHANGELOG.md | 96 - .../Debug/OptionsResolverIntrospector.php | 104 - .../Exception/AccessException.php | 22 - .../Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../Exception/InvalidOptionsException.php | 23 - .../Exception/MissingOptionsException.php | 23 - .../Exception/NoConfigurationException.php | 26 - .../Exception/NoSuchOptionException.php | 26 - .../Exception/OptionDefinitionException.php | 21 - .../Exception/UndefinedOptionsException.php | 24 - .../options-resolver/OptionConfigurator.php | 146 - vendor/symfony/options-resolver/Options.php | 22 - .../options-resolver/OptionsResolver.php | 1317 -- vendor/symfony/options-resolver/README.md | 15 - vendor/symfony/options-resolver/composer.json | 29 - vendor/symfony/password-hasher/CHANGELOG.md | 13 - .../Command/UserPasswordHashCommand.php | 211 - .../Exception/ExceptionInterface.php | 21 - .../Exception/InvalidPasswordException.php | 23 - .../Exception/LogicException.php | 19 - .../Hasher/CheckPasswordLengthTrait.php | 25 - .../Hasher/MessageDigestPasswordHasher.php | 93 - .../Hasher/MigratingPasswordHasher.php | 64 - .../Hasher/NativePasswordHasher.php | 117 - .../Hasher/PasswordHasherAwareInterface.php | 26 - .../Hasher/PasswordHasherFactory.php | 238 - .../Hasher/PasswordHasherFactoryInterface.php | 31 - .../Hasher/Pbkdf2PasswordHasher.php | 84 - .../Hasher/PlaintextPasswordHasher.php | 77 - .../Hasher/SodiumPasswordHasher.php | 114 - .../Hasher/UserPasswordHasher.php | 69 - .../Hasher/UserPasswordHasherInterface.php | 37 - .../LegacyPasswordHasherInterface.php | 36 - .../PasswordHasherInterface.php | 43 - vendor/symfony/password-hasher/README.md | 40 - vendor/symfony/password-hasher/composer.json | 35 - vendor/symfony/phpunit-bridge/CHANGELOG.md | 101 - .../phpunit-bridge/ClassExistsMock.php | 101 - vendor/symfony/phpunit-bridge/ClockMock.php | 168 - .../phpunit-bridge/ConstraintTrait.php | 32 - .../phpunit-bridge/CoverageListener.php | 119 - .../DeprecationErrorHandler.php | 439 - .../DeprecationErrorHandler/Configuration.php | 388 - .../DeprecationErrorHandler/Deprecation.php | 402 - .../DeprecationGroup.php | 57 - .../DeprecationNotice.php | 49 - vendor/symfony/phpunit-bridge/DnsMock.php | 226 - .../phpunit-bridge/ExpectDeprecationTrait.php | 30 - .../phpunit-bridge/Legacy/CommandForV7.php | 57 - .../phpunit-bridge/Legacy/CommandForV9.php | 64 - .../Legacy/ConstraintLogicTrait.php | 62 - .../Legacy/ConstraintTraitForV7.php | 64 - .../Legacy/ConstraintTraitForV8.php | 53 - .../Legacy/ConstraintTraitForV9.php | 50 - .../ExpectDeprecationTraitBeforeV8_4.php | 45 - .../Legacy/ExpectDeprecationTraitForV8_4.php | 65 - .../Legacy/PolyfillAssertTrait.php | 157 - .../Legacy/PolyfillTestCaseTrait.php | 116 - .../Legacy/SymfonyTestsListenerForV7.php | 61 - .../Legacy/SymfonyTestsListenerTrait.php | 357 - vendor/symfony/phpunit-bridge/README.md | 14 - .../phpunit-bridge/SymfonyTestsListener.php | 20 - .../symfony/phpunit-bridge/TextUI/Command.php | 24 - .../phpunit-bridge/bin/simple-phpunit.php | 468 - vendor/symfony/phpunit-bridge/bootstrap.php | 51 - vendor/symfony/phpunit-bridge/composer.json | 49 - .../polyfill-intl-grapheme/Grapheme.php | 247 - .../symfony/polyfill-intl-grapheme/README.md | 31 - .../polyfill-intl-grapheme/bootstrap.php | 58 - .../polyfill-intl-grapheme/bootstrap80.php | 50 - .../polyfill-intl-grapheme/composer.json | 35 - vendor/symfony/polyfill-intl-icu/Collator.php | 262 - .../symfony/polyfill-intl-icu/Currencies.php | 43 - .../DateFormat/AmPmTransformer.php | 39 - .../DateFormat/DayOfWeekTransformer.php | 56 - .../DateFormat/DayOfYearTransformer.php | 39 - .../DateFormat/DayTransformer.php | 39 - .../DateFormat/FullTransformer.php | 312 - .../DateFormat/Hour1200Transformer.php | 52 - .../DateFormat/Hour1201Transformer.php | 52 - .../DateFormat/Hour2400Transformer.php | 51 - .../DateFormat/Hour2401Transformer.php | 54 - .../DateFormat/HourTransformer.php | 32 - .../DateFormat/MinuteTransformer.php | 41 - .../DateFormat/MonthTransformer.php | 127 - .../DateFormat/QuarterTransformer.php | 65 - .../DateFormat/SecondTransformer.php | 41 - .../DateFormat/TimezoneTransformer.php | 108 - .../DateFormat/Transformer.php | 65 - .../DateFormat/YearTransformer.php | 43 - .../Exception/ExceptionInterface.php | 21 - .../MethodArgumentNotImplementedException.php | 28 - ...odArgumentValueNotImplementedException.php | 37 - .../MethodNotImplementedException.php | 26 - .../Exception/NotImplementedException.php | 30 - .../Exception/RuntimeException.php | 21 - vendor/symfony/polyfill-intl-icu/Icu.php | 117 - .../polyfill-intl-icu/IntlDateFormatter.php | 645 - vendor/symfony/polyfill-intl-icu/Locale.php | 310 - .../polyfill-intl-icu/NumberFormatter.php | 835 -- vendor/symfony/polyfill-intl-icu/README.md | 23 - .../Resources/currencies.php | 1321 -- .../Resources/stubs/Collator.php | 21 - .../Resources/stubs/IntlDateFormatter.php | 21 - .../Resources/stubs/Locale.php | 21 - .../Resources/stubs/NumberFormatter.php | 23 - .../symfony/polyfill-intl-icu/bootstrap.php | 33 - .../symfony/polyfill-intl-icu/bootstrap80.php | 25 - .../symfony/polyfill-intl-icu/composer.json | 39 - vendor/symfony/polyfill-intl-idn/Idn.php | 933 -- vendor/symfony/polyfill-intl-idn/Info.php | 23 - vendor/symfony/polyfill-intl-idn/README.md | 12 - .../Resources/unidata/DisallowedRanges.php | 384 - .../Resources/unidata/Regex.php | 33 - .../Resources/unidata/deviation.php | 8 - .../Resources/unidata/disallowed.php | 2638 ---- .../unidata/disallowed_STD3_mapped.php | 308 - .../unidata/disallowed_STD3_valid.php | 71 - .../Resources/unidata/ignored.php | 273 - .../Resources/unidata/mapped.php | 5778 --------- .../Resources/unidata/virama.php | 65 - .../symfony/polyfill-intl-idn/bootstrap.php | 145 - .../symfony/polyfill-intl-idn/bootstrap80.php | 125 - .../symfony/polyfill-intl-idn/composer.json | 40 - .../polyfill-intl-normalizer/Normalizer.php | 310 - .../polyfill-intl-normalizer/README.md | 14 - .../Resources/stubs/Normalizer.php | 17 - .../unidata/canonicalComposition.php | 945 -- .../unidata/canonicalDecomposition.php | 2065 ---- .../Resources/unidata/combiningClass.php | 876 -- .../unidata/compatibilityDecomposition.php | 3695 ------ .../polyfill-intl-normalizer/bootstrap.php | 23 - .../polyfill-intl-normalizer/bootstrap80.php | 19 - .../polyfill-intl-normalizer/composer.json | 36 - vendor/symfony/polyfill-mbstring/Mbstring.php | 1045 -- vendor/symfony/polyfill-mbstring/README.md | 13 - .../Resources/unidata/caseFolding.php | 119 - .../Resources/unidata/lowerCase.php | 1397 --- .../Resources/unidata/titleCaseRegexp.php | 5 - .../Resources/unidata/upperCase.php | 1489 --- .../symfony/polyfill-mbstring/bootstrap.php | 172 - .../symfony/polyfill-mbstring/bootstrap80.php | 167 - .../symfony/polyfill-mbstring/composer.json | 38 - vendor/symfony/polyfill-php83/Php83.php | 197 - vendor/symfony/polyfill-php83/README.md | 22 - .../Resources/stubs/DateError.php | 16 - .../Resources/stubs/DateException.php | 16 - .../stubs/DateInvalidOperationException.php | 16 - .../stubs/DateInvalidTimeZoneException.php | 16 - .../DateMalformedIntervalStringException.php | 16 - .../DateMalformedPeriodStringException.php | 16 - .../stubs/DateMalformedStringException.php | 16 - .../Resources/stubs/DateObjectError.php | 16 - .../Resources/stubs/DateRangeError.php | 16 - .../Resources/stubs/Override.php | 20 - .../Resources/stubs/SQLite3Exception.php | 16 - vendor/symfony/polyfill-php83/bootstrap.php | 50 - vendor/symfony/polyfill-php83/bootstrap81.php | 22 - vendor/symfony/polyfill-php83/composer.json | 33 - vendor/symfony/process/CHANGELOG.md | 128 - .../process/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../process/Exception/LogicException.php | 21 - .../Exception/ProcessFailedException.php | 54 - .../Exception/ProcessSignaledException.php | 41 - .../Exception/ProcessStartFailedException.php | 45 - .../Exception/ProcessTimedOutException.php | 64 - .../Exception/RunProcessFailedException.php | 25 - .../process/Exception/RuntimeException.php | 21 - vendor/symfony/process/ExecutableFinder.php | 78 - vendor/symfony/process/InputStream.php | 91 - .../process/Messenger/RunProcessContext.php | 33 - .../process/Messenger/RunProcessMessage.php | 32 - .../Messenger/RunProcessMessageHandler.php | 33 - .../symfony/process/PhpExecutableFinder.php | 99 - vendor/symfony/process/PhpProcess.php | 66 - vendor/symfony/process/PhpSubprocess.php | 164 - .../symfony/process/Pipes/AbstractPipes.php | 176 - .../symfony/process/Pipes/PipesInterface.php | 61 - vendor/symfony/process/Pipes/UnixPipes.php | 148 - vendor/symfony/process/Pipes/WindowsPipes.php | 186 - vendor/symfony/process/Process.php | 1660 --- vendor/symfony/process/ProcessUtils.php | 64 - vendor/symfony/process/README.md | 13 - vendor/symfony/process/composer.json | 28 - vendor/symfony/property-access/CHANGELOG.md | 94 - .../Exception/AccessException.php | 21 - .../Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 21 - .../InvalidPropertyPathException.php | 21 - .../Exception/InvalidTypeException.php | 32 - .../Exception/NoSuchIndexException.php | 21 - .../Exception/NoSuchPropertyException.php | 21 - .../Exception/OutOfBoundsException.php | 21 - .../Exception/RuntimeException.php | 21 - .../Exception/UnexpectedTypeException.php | 39 - .../UninitializedPropertyException.php | 21 - .../property-access/PropertyAccess.php | 40 - .../property-access/PropertyAccessor.php | 697 -- .../PropertyAccessorBuilder.php | 291 - .../PropertyAccessorInterface.php | 97 - .../symfony/property-access/PropertyPath.php | 206 - .../property-access/PropertyPathBuilder.php | 261 - .../property-access/PropertyPathInterface.php | 81 - .../property-access/PropertyPathIterator.php | 39 - .../PropertyPathIteratorInterface.php | 32 - vendor/symfony/property-access/README.md | 14 - vendor/symfony/property-access/composer.json | 32 - vendor/symfony/property-info/CHANGELOG.md | 64 - .../PropertyInfoConstructorPass.php | 38 - .../DependencyInjection/PropertyInfoPass.php | 51 - ...structorArgumentTypeExtractorInterface.php | 43 - .../Extractor/ConstructorExtractor.php | 57 - .../Extractor/PhpDocExtractor.php | 446 - .../Extractor/PhpStanExtractor.php | 404 - .../Extractor/ReflectionExtractor.php | 968 -- .../Extractor/SerializerExtractor.php | 56 - .../property-info/PhpStan/NameScope.php | 61 - .../PhpStan/NameScopeFactory.php | 70 - .../PropertyAccessExtractorInterface.php | 30 - .../PropertyDescriptionExtractorInterface.php | 30 - .../PropertyDocBlockExtractorInterface.php | 36 - .../PropertyInfoCacheExtractor.php | 108 - .../property-info/PropertyInfoExtractor.php | 100 - .../PropertyInfoExtractorInterface.php | 23 - ...ropertyInitializableExtractorInterface.php | 25 - .../PropertyListExtractorInterface.php | 27 - .../property-info/PropertyReadInfo.php | 72 - .../PropertyReadInfoExtractorInterface.php | 25 - .../PropertyTypeExtractorInterface.php | 32 - .../property-info/PropertyWriteInfo.php | 119 - .../PropertyWriteInfoExtractorInterface.php | 25 - vendor/symfony/property-info/README.md | 14 - vendor/symfony/property-info/Type.php | 165 - .../property-info/Util/PhpDocTypeHelper.php | 350 - .../property-info/Util/PhpStanTypeHelper.php | 211 - vendor/symfony/property-info/composer.json | 50 - vendor/symfony/routing/Alias.php | 93 - vendor/symfony/routing/Annotation/Route.php | 23 - vendor/symfony/routing/Attribute/Route.php | 208 - vendor/symfony/routing/CHANGELOG.md | 340 - vendor/symfony/routing/CompiledRoute.php | 148 - .../AddExpressionLanguageProvidersPass.php | 36 - .../RoutingResolverPass.php | 40 - .../routing/Exception/ExceptionInterface.php | 21 - .../Exception/InvalidArgumentException.php | 16 - .../Exception/InvalidParameterException.php | 21 - .../routing/Exception/LogicException.php | 16 - .../Exception/MethodNotAllowedException.php | 44 - .../MissingMandatoryParametersException.php | 49 - .../Exception/NoConfigurationException.php | 21 - .../Exception/ResourceNotFoundException.php | 23 - .../RouteCircularReferenceException.php | 20 - .../Exception/RouteNotFoundException.php | 21 - .../routing/Exception/RuntimeException.php | 16 - .../Generator/CompiledUrlGenerator.php | 71 - .../ConfigurableRequirementsInterface.php | 51 - .../Dumper/CompiledUrlGeneratorDumper.php | 121 - .../Generator/Dumper/GeneratorDumper.php | 32 - .../Dumper/GeneratorDumperInterface.php | 33 - .../routing/Generator/UrlGenerator.php | 342 - .../Generator/UrlGeneratorInterface.php | 80 - .../routing/Loader/AttributeClassLoader.php | 348 - .../Loader/AttributeDirectoryLoader.php | 84 - .../routing/Loader/AttributeFileLoader.php | 135 - .../symfony/routing/Loader/ClosureLoader.php | 38 - .../Loader/Configurator/AliasConfigurator.php | 41 - .../Configurator/CollectionConfigurator.php | 123 - .../Configurator/ImportConfigurator.php | 86 - .../Loader/Configurator/RouteConfigurator.php | 51 - .../Configurator/RoutingConfigurator.php | 74 - .../Loader/Configurator/Traits/AddTrait.php | 57 - .../Loader/Configurator/Traits/HostTrait.php | 49 - .../Traits/LocalizedRouteTrait.php | 76 - .../Configurator/Traits/PrefixTrait.php | 63 - .../Loader/Configurator/Traits/RouteTrait.php | 172 - .../routing/Loader/ContainerLoader.php | 39 - .../routing/Loader/DirectoryLoader.php | 52 - .../symfony/routing/Loader/GlobFileLoader.php | 41 - .../symfony/routing/Loader/ObjectLoader.php | 77 - .../symfony/routing/Loader/PhpFileLoader.php | 77 - .../routing/Loader/Psr4DirectoryLoader.php | 91 - .../symfony/routing/Loader/XmlFileLoader.php | 464 - .../symfony/routing/Loader/YamlFileLoader.php | 296 - .../Loader/schema/routing/routing-1.0.xsd | 201 - .../routing/Matcher/CompiledUrlMatcher.php | 31 - .../Dumper/CompiledUrlMatcherDumper.php | 498 - .../Dumper/CompiledUrlMatcherTrait.php | 186 - .../routing/Matcher/Dumper/MatcherDumper.php | 32 - .../Matcher/Dumper/MatcherDumperInterface.php | 33 - .../Matcher/Dumper/StaticPrefixCollection.php | 204 - .../Matcher/ExpressionLanguageProvider.php | 49 - .../Matcher/RedirectableUrlMatcher.php | 61 - .../RedirectableUrlMatcherInterface.php | 29 - .../Matcher/RequestMatcherInterface.php | 37 - .../routing/Matcher/TraceableUrlMatcher.php | 166 - vendor/symfony/routing/Matcher/UrlMatcher.php | 266 - .../routing/Matcher/UrlMatcherInterface.php | 39 - vendor/symfony/routing/README.md | 66 - vendor/symfony/routing/RequestContext.php | 303 - .../routing/RequestContextAwareInterface.php | 25 - .../routing/Requirement/EnumRequirement.php | 56 - .../routing/Requirement/Requirement.php | 36 - vendor/symfony/routing/Route.php | 469 - vendor/symfony/routing/RouteCollection.php | 388 - vendor/symfony/routing/RouteCompiler.php | 339 - .../routing/RouteCompilerInterface.php | 28 - vendor/symfony/routing/Router.php | 308 - vendor/symfony/routing/RouterInterface.php | 33 - vendor/symfony/routing/composer.json | 42 - vendor/symfony/runtime/CHANGELOG.md | 19 - vendor/symfony/runtime/GenericRuntime.php | 223 - .../runtime/Internal/BasicErrorHandler.php | 53 - .../runtime/Internal/ComposerPlugin.php | 119 - .../Internal/Console/ApplicationRuntime.php | 21 - .../Console/Command/CommandRuntime.php | 21 - .../Console/Input/InputInterfaceRuntime.php | 21 - .../Console/Output/OutputInterfaceRuntime.php | 21 - .../HttpFoundation/RequestRuntime.php | 21 - .../HttpFoundation/ResponseRuntime.php | 21 - .../HttpKernel/HttpKernelInterfaceRuntime.php | 21 - .../runtime/Internal/MissingDotenv.php | 19 - .../runtime/Internal/SymfonyErrorHandler.php | 35 - .../Internal/autoload_runtime.template | 28 - vendor/symfony/runtime/README.md | 13 - .../runtime/Resolver/ClosureResolver.php | 31 - .../runtime/Resolver/DebugClosureResolver.php | 36 - vendor/symfony/runtime/ResolverInterface.php | 23 - .../symfony/runtime/Runner/ClosureRunner.php | 44 - .../Symfony/ConsoleApplicationRunner.php | 51 - .../Runner/Symfony/HttpKernelRunner.php | 58 - .../runtime/Runner/Symfony/ResponseRunner.php | 33 - vendor/symfony/runtime/RunnerInterface.php | 20 - vendor/symfony/runtime/RuntimeInterface.php | 34 - vendor/symfony/runtime/SymfonyRuntime.php | 226 - vendor/symfony/runtime/composer.json | 45 - vendor/symfony/security-bundle/CHANGELOG.md | 358 - .../CacheWarmer/ExpressionCacheWarmer.php | 48 - .../Command/DebugFirewallCommand.php | 275 - .../DataCollector/SecurityDataCollector.php | 352 - .../Debug/TraceableFirewallListener.php | 104 - .../Debug/TraceableListenerTrait.php | 51 - .../Debug/WrappedLazyListener.php | 57 - .../security-bundle/Debug/WrappedListener.php | 42 - .../AddExpressionLanguageProvidersPass.php | 39 - .../Compiler/AddSecurityVotersPass.php | 70 - .../AddSessionDomainConstraintPass.php | 45 - .../Compiler/CleanRememberMeVerifierPass.php | 30 - ...eFirewallsEventDispatcherTraceablePass.php | 72 - .../Compiler/RegisterCsrfFeaturesPass.php | 74 - .../Compiler/RegisterEntryPointPass.php | 83 - ...gisterGlobalSecurityEventListenersPass.php | 86 - .../Compiler/RegisterLdapLocatorPass.php | 39 - .../RegisterTokenUsageTrackingPass.php | 53 - .../ReplaceDecoratedRememberMeHandlerPass.php | 58 - .../Compiler/SortFirewallListenersPass.php | 78 - .../DependencyInjection/MainConfiguration.php | 463 - .../AccessToken/CasTokenHandlerFactory.php | 62 - .../AccessToken/OidcTokenHandlerFactory.php | 122 - .../OidcUserInfoTokenHandlerFactory.php | 74 - .../ServiceTokenHandlerFactory.php | 39 - .../TokenHandlerFactoryInterface.php | 36 - .../Security/Factory/AbstractFactory.php | 116 - .../Security/Factory/AccessTokenFactory.php | 166 - .../Factory/AuthenticatorFactoryInterface.php | 43 - .../Factory/CustomAuthenticatorFactory.php | 64 - .../FirewallListenerFactoryInterface.php | 31 - .../Security/Factory/FormLoginFactory.php | 68 - .../Security/Factory/FormLoginLdapFactory.php | 42 - .../Security/Factory/HttpBasicFactory.php | 60 - .../Security/Factory/HttpBasicLdapFactory.php | 87 - .../Security/Factory/JsonLoginFactory.php | 60 - .../Security/Factory/JsonLoginLdapFactory.php | 39 - .../Security/Factory/LdapFactoryTrait.php | 65 - .../Security/Factory/LoginLinkFactory.php | 151 - .../Factory/LoginThrottlingFactory.php | 120 - .../Security/Factory/RememberMeFactory.php | 247 - .../Security/Factory/RemoteUserFactory.php | 63 - ...StatelessAuthenticatorFactoryInterface.php | 28 - .../Security/Factory/X509Factory.php | 66 - .../Security/UserProvider/InMemoryFactory.php | 66 - .../Security/UserProvider/LdapFactory.php | 72 - .../UserProviderFactoryInterface.php | 30 - .../DependencyInjection/SecurityExtension.php | 1105 -- .../EventListener/FirewallListener.php | 69 - .../EventListener/VoteListener.php | 43 - .../FirewallAwareLoginLinkHandler.php | 50 - vendor/symfony/security-bundle/README.md | 13 - .../RememberMe/DecoratedRememberMeHandler.php | 48 - .../FirewallAwareRememberMeHandler.php | 54 - .../Resources/config/collectors.php | 33 - .../Resources/config/console.php | 25 - .../Resources/config/debug_console.php | 28 - .../Resources/config/password_hasher.php | 53 - .../Resources/config/schema/security-1.0.xsd | 468 - .../Resources/config/security.php | 317 - .../config/security_authenticator.php | 167 - .../security_authenticator_access_token.php | 139 - .../security_authenticator_login_link.php | 70 - .../security_authenticator_remember_me.php | 101 - .../Resources/config/security_debug.php | 42 - .../Resources/config/security_listeners.php | 174 - .../Resources/config/templating_twig.php | 32 - .../Resources/views/Collector/icon.svg | 6 - .../views/Collector/security.html.twig | 506 - .../Routing/LogoutRouteLoader.php | 49 - vendor/symfony/security-bundle/Security.php | 184 - .../Security/FirewallAwareTrait.php | 55 - .../Security/FirewallConfig.php | 107 - .../Security/FirewallContext.php | 63 - .../security-bundle/Security/FirewallMap.php | 75 - .../Security/LazyFirewallContext.php | 77 - .../Security/UserAuthenticator.php | 45 - .../security-bundle/SecurityBundle.php | 109 - vendor/symfony/security-bundle/composer.json | 73 - .../AuthenticationTrustResolver.php | 38 - .../AuthenticationTrustResolverInterface.php | 38 - .../RememberMe/CacheTokenVerifier.php | 69 - .../RememberMe/InMemoryTokenProvider.php | 59 - .../RememberMe/PersistentToken.php | 73 - .../RememberMe/PersistentTokenInterface.php | 48 - .../RememberMe/TokenProviderInterface.php | 54 - .../RememberMe/TokenVerifierInterface.php | 32 - .../Authentication/Token/AbstractToken.php | 167 - .../Authentication/Token/NullToken.php | 83 - .../Token/PreAuthenticatedToken.php | 56 - .../Authentication/Token/RememberMeToken.php | 71 - .../Token/Storage/TokenStorage.php | 60 - .../Token/Storage/TokenStorageInterface.php | 34 - .../Storage/UsageTrackingTokenStorage.php | 83 - .../Authentication/Token/SwitchUserToken.php | 66 - .../Authentication/Token/TokenInterface.php | 87 - .../Token/UsernamePasswordToken.php | 53 - .../security-core/AuthenticationEvents.php | 34 - .../Authorization/AccessDecisionManager.php | 125 - .../AccessDecisionManagerInterface.php | 30 - .../Authorization/AuthorizationChecker.php | 43 - .../AuthorizationCheckerInterface.php | 27 - .../Authorization/ExpressionLanguage.php | 40 - .../ExpressionLanguageProvider.php | 36 - .../AccessDecisionStrategyInterface.php | 25 - .../Strategy/AffirmativeStrategy.php | 58 - .../Strategy/ConsensusStrategy.php | 75 - .../Strategy/PriorityStrategy.php | 54 - .../Strategy/UnanimousStrategy.php | 59 - .../TraceableAccessDecisionManager.php | 109 - .../Voter/AuthenticatedVoter.php | 104 - .../Voter/CacheableVoterInterface.php | 30 - .../Authorization/Voter/ExpressionVoter.php | 99 - .../Voter/RoleHierarchyVoter.php | 38 - .../Authorization/Voter/RoleVoter.php | 63 - .../Authorization/Voter/TraceableVoter.php | 59 - .../Authorization/Voter/Voter.php | 95 - .../Authorization/Voter/VoterInterface.php | 39 - vendor/symfony/security-core/CHANGELOG.md | 73 - .../Event/AuthenticationEvent.php | 35 - .../Event/AuthenticationSuccessEvent.php | 16 - .../symfony/security-core/Event/VoteEvent.php | 58 - .../Exception/AccessDeniedException.php | 51 - .../Exception/AccountExpiredException.php | 26 - .../Exception/AccountStatusException.php | 51 - ...enticationCredentialsNotFoundException.php | 27 - .../Exception/AuthenticationException.php | 94 - .../AuthenticationExpiredException.php | 28 - .../AuthenticationServiceException.php | 26 - .../Exception/BadCredentialsException.php | 26 - .../Exception/CookieTheftException.php | 27 - .../Exception/CredentialsExpiredException.php | 26 - ...ustomUserMessageAccountStatusException.php | 68 - ...stomUserMessageAuthenticationException.php | 68 - .../Exception/DisabledException.php | 26 - .../Exception/ExceptionInterface.php | 21 - .../InsufficientAuthenticationException.php | 28 - .../Exception/InvalidArgumentException.php | 21 - .../Exception/InvalidCsrfTokenException.php | 26 - .../Exception/LazyResponseException.php | 34 - .../Exception/LockedException.php | 26 - .../Exception/LogicException.php | 21 - .../Exception/LogoutException.php | 25 - .../Exception/ProviderNotFoundException.php | 27 - .../Exception/RuntimeException.php | 21 - .../Exception/SessionUnavailableException.php | 32 - .../Exception/TokenNotFoundException.php | 26 - ...nyLoginAttemptsAuthenticationException.php | 53 - .../Exception/UnsupportedUserException.php | 22 - .../Exception/UserNotFoundException.php | 61 - vendor/symfony/security-core/README.md | 63 - .../Resources/translations/security.af.xlf | 83 - .../Resources/translations/security.ar.xlf | 83 - .../Resources/translations/security.az.xlf | 83 - .../Resources/translations/security.be.xlf | 83 - .../Resources/translations/security.bg.xlf | 83 - .../Resources/translations/security.bs.xlf | 83 - .../Resources/translations/security.ca.xlf | 83 - .../Resources/translations/security.cs.xlf | 83 - .../Resources/translations/security.cy.xlf | 83 - .../Resources/translations/security.da.xlf | 83 - .../Resources/translations/security.de.xlf | 83 - .../Resources/translations/security.el.xlf | 83 - .../Resources/translations/security.en.xlf | 83 - .../Resources/translations/security.es.xlf | 83 - .../Resources/translations/security.et.xlf | 83 - .../Resources/translations/security.eu.xlf | 83 - .../Resources/translations/security.fa.xlf | 83 - .../Resources/translations/security.fi.xlf | 83 - .../Resources/translations/security.fr.xlf | 83 - .../Resources/translations/security.gl.xlf | 83 - .../Resources/translations/security.he.xlf | 83 - .../Resources/translations/security.hr.xlf | 83 - .../Resources/translations/security.hu.xlf | 83 - .../Resources/translations/security.hy.xlf | 83 - .../Resources/translations/security.id.xlf | 83 - .../Resources/translations/security.it.xlf | 83 - .../Resources/translations/security.ja.xlf | 83 - .../Resources/translations/security.lb.xlf | 83 - .../Resources/translations/security.lt.xlf | 83 - .../Resources/translations/security.lv.xlf | 83 - .../Resources/translations/security.mk.xlf | 83 - .../Resources/translations/security.mn.xlf | 83 - .../Resources/translations/security.my.xlf | 83 - .../Resources/translations/security.nb.xlf | 83 - .../Resources/translations/security.nl.xlf | 83 - .../Resources/translations/security.nn.xlf | 83 - .../Resources/translations/security.no.xlf | 83 - .../Resources/translations/security.pl.xlf | 83 - .../Resources/translations/security.pt.xlf | 83 - .../Resources/translations/security.pt_BR.xlf | 83 - .../Resources/translations/security.ro.xlf | 83 - .../Resources/translations/security.ru.xlf | 83 - .../Resources/translations/security.sk.xlf | 83 - .../Resources/translations/security.sl.xlf | 83 - .../Resources/translations/security.sq.xlf | 83 - .../translations/security.sr_Cyrl.xlf | 83 - .../translations/security.sr_Latn.xlf | 83 - .../Resources/translations/security.sv.xlf | 83 - .../Resources/translations/security.th.xlf | 83 - .../Resources/translations/security.tl.xlf | 83 - .../Resources/translations/security.tr.xlf | 83 - .../Resources/translations/security.uk.xlf | 83 - .../Resources/translations/security.ur.xlf | 83 - .../Resources/translations/security.uz.xlf | 83 - .../Resources/translations/security.vi.xlf | 83 - .../Resources/translations/security.zh_CN.xlf | 83 - .../Resources/translations/security.zh_TW.xlf | 83 - vendor/symfony/security-core/Role/Role.php | 31 - .../security-core/Role/RoleHierarchy.php | 79 - .../Role/RoleHierarchyInterface.php | 27 - .../security-core/Role/SwitchUserRole.php | 23 - .../Exception/ExpiredSignatureException.php | 21 - .../Exception/InvalidSignatureException.php | 21 - .../Signature/ExpiredSignatureStorage.php | 51 - .../Signature/SignatureHasher.php | 135 - .../Test/AccessDecisionStrategyTestCase.php | 80 - .../AttributesBasedUserProviderInterface.php | 36 - .../security-core/User/ChainUserChecker.php | 36 - .../security-core/User/ChainUserProvider.php | 118 - .../security-core/User/EquatableInterface.php | 30 - .../security-core/User/InMemoryUser.php | 110 - .../User/InMemoryUserChecker.php | 39 - .../User/InMemoryUserProvider.php | 109 - ...gacyPasswordAuthenticatedUserInterface.php | 28 - .../User/MissingUserProvider.php | 53 - .../symfony/security-core/User/OidcUser.php | 182 - .../PasswordAuthenticatedUserInterface.php | 28 - .../User/PasswordUpgraderInterface.php | 27 - .../User/UserCheckerInterface.php | 39 - .../security-core/User/UserInterface.php | 61 - .../User/UserProviderInterface.php | 66 - .../Validator/Constraints/UserPassword.php | 40 - .../Constraints/UserPasswordValidator.php | 66 - vendor/symfony/security-core/composer.json | 53 - vendor/symfony/security-csrf/CHANGELOG.md | 13 - vendor/symfony/security-csrf/CsrfToken.php | 53 - .../security-csrf/CsrfTokenManager.php | 141 - .../CsrfTokenManagerInterface.php | 57 - .../Exception/TokenNotFoundException.php | 21 - vendor/symfony/security-csrf/README.md | 29 - .../TokenGeneratorInterface.php | 25 - .../TokenGenerator/UriSafeTokenGenerator.php | 46 - .../ClearableTokenStorageInterface.php | 23 - .../NativeSessionTokenStorage.php | 106 - .../TokenStorage/SessionTokenStorage.php | 106 - .../TokenStorage/TokenStorageInterface.php | 45 - vendor/symfony/security-csrf/composer.json | 35 - vendor/symfony/security-http/AccessMap.php | 46 - .../security-http/AccessMapInterface.php | 31 - .../AccessTokenExtractorInterface.php | 24 - .../AccessTokenHandlerInterface.php | 29 - .../AccessToken/Cas/Cas2Handler.php | 85 - .../AccessToken/ChainAccessTokenExtractor.php | 41 - .../AccessToken/FormEncodedBodyExtractor.php | 47 - .../HeaderAccessTokenExtractor.php | 49 - .../Exception/InvalidSignatureException.php | 25 - .../Oidc/Exception/MissingClaimException.php | 25 - .../AccessToken/Oidc/OidcTokenHandler.php | 114 - .../AccessToken/Oidc/OidcTrait.php | 53 - .../Oidc/OidcUserInfoTokenHandler.php | 60 - .../AccessToken/QueryAccessTokenExtractor.php | 44 - .../security-http/Attribute/CurrentUser.php | 31 - .../Attribute/IsCsrfTokenValid.php | 31 - .../security-http/Attribute/IsGranted.php | 41 - .../AuthenticationFailureHandlerInterface.php | 33 - .../AuthenticationSuccessHandlerInterface.php | 33 - .../Authentication/AuthenticationUtils.php | 75 - .../Authentication/AuthenticatorManager.php | 269 - .../AuthenticatorManagerInterface.php | 35 - .../CustomAuthenticationFailureHandler.php | 40 - .../CustomAuthenticationSuccessHandler.php | 44 - .../DefaultAuthenticationFailureHandler.php | 97 - .../DefaultAuthenticationSuccessHandler.php | 120 - .../UserAuthenticatorInterface.php | 32 - .../Authenticator/AbstractAuthenticator.php | 33 - .../AbstractLoginFormAuthenticator.php | 74 - .../AbstractPreAuthenticatedAuthenticator.php | 130 - .../AccessTokenAuthenticator.php | 123 - .../Authenticator/AuthenticatorInterface.php | 87 - .../Debug/TraceableAuthenticator.php | 118 - .../TraceableAuthenticatorManagerListener.php | 89 - .../Authenticator/FallbackUserLoader.php | 32 - .../Authenticator/FormLoginAuthenticator.php | 173 - .../Authenticator/HttpBasicAuthenticator.php | 92 - .../InteractiveAuthenticatorInterface.php | 31 - .../Authenticator/JsonLoginAuthenticator.php | 171 - .../Authenticator/LoginLinkAuthenticator.php | 88 - .../Passport/Badge/BadgeInterface.php | 28 - .../Passport/Badge/CsrfTokenBadge.php | 64 - .../Passport/Badge/PasswordUpgradeBadge.php | 62 - .../Badge/PreAuthenticatedUserBadge.php | 33 - .../Passport/Badge/RememberMeBadge.php | 76 - .../Passport/Badge/UserBadge.php | 121 - .../Credentials/CredentialsInterface.php | 24 - .../Credentials/CustomCredentials.php | 56 - .../Credentials/PasswordCredentials.php | 58 - .../Authenticator/Passport/Passport.php | 123 - .../Passport/SelfValidatingPassport.php | 35 - .../Authenticator/RememberMeAuthenticator.php | 129 - .../Authenticator/RemoteUserAuthenticator.php | 48 - .../Token/PostAuthenticationToken.php | 62 - .../Authenticator/X509Authenticator.php | 62 - .../AccessDeniedHandlerInterface.php | 30 - vendor/symfony/security-http/CHANGELOG.md | 73 - .../Controller/SecurityTokenValueResolver.php | 50 - .../Controller/UserValueResolver.php | 64 - .../AuthenticationEntryPointInterface.php | 44 - .../Exception/NotAnEntryPointException.php | 25 - .../Event/AuthenticationTokenCreatedEvent.php | 48 - .../Event/CheckPassportEvent.php | 48 - .../Event/InteractiveLoginEvent.php | 41 - .../security-http/Event/LazyResponseEvent.php | 61 - .../security-http/Event/LoginFailureEvent.php | 83 - .../security-http/Event/LoginSuccessEvent.php | 98 - .../security-http/Event/LogoutEvent.php | 53 - .../security-http/Event/SwitchUserEvent.php | 56 - .../Event/TokenDeauthenticatedEvent.php | 51 - .../CheckCredentialsListener.php | 98 - .../CheckRememberMeConditionsListener.php | 72 - .../ClearSiteDataLogoutListener.php | 49 - .../CookieClearingLogoutListener.php | 53 - .../EventListener/CsrfProtectionListener.php | 61 - .../CsrfTokenClearingLogoutListener.php | 48 - .../EventListener/DefaultLogoutListener.php | 52 - .../IsCsrfTokenValidAttributeListener.php | 73 - .../IsGrantedAttributeListener.php | 119 - .../EventListener/LoginThrottlingListener.php | 87 - .../PasswordMigratingListener.php | 93 - .../EventListener/RememberMeListener.php | 85 - .../EventListener/SessionLogoutListener.php | 39 - .../EventListener/SessionStrategyListener.php | 62 - .../EventListener/UserCheckerListener.php | 62 - .../EventListener/UserProviderListener.php | 50 - vendor/symfony/security-http/Firewall.php | 140 - .../Firewall/AbstractListener.php | 34 - .../security-http/Firewall/AccessListener.php | 98 - .../Firewall/AuthenticatorManagerListener.php | 47 - .../Firewall/ChannelListener.php | 100 - .../Firewall/ContextListener.php | 326 - .../Firewall/ExceptionListener.php | 234 - .../Firewall/FirewallListenerInterface.php | 43 - .../security-http/Firewall/LogoutListener.php | 111 - .../Firewall/SwitchUserListener.php | 226 - vendor/symfony/security-http/FirewallMap.php | 50 - .../security-http/FirewallMapInterface.php | 41 - vendor/symfony/security-http/HttpUtils.php | 172 - .../Impersonate/ImpersonateUrlGenerator.php | 92 - .../Exception/ExpiredLoginLinkException.php | 21 - ...nvalidLoginLinkAuthenticationException.php | 27 - .../Exception/InvalidLoginLinkException.php | 19 - .../InvalidLoginLinkExceptionInterface.php | 19 - .../LoginLink/LoginLinkDetails.php | 42 - .../LoginLink/LoginLinkHandler.php | 109 - .../LoginLink/LoginLinkHandlerInterface.php | 37 - .../LoginLink/LoginLinkNotification.php | 71 - .../Logout/LogoutUrlGenerator.php | 160 - .../security-http/ParameterBagUtils.php | 89 - vendor/symfony/security-http/README.md | 37 - .../RateLimiter/DefaultLoginRateLimiter.php | 63 - .../RememberMe/AbstractRememberMeHandler.php | 112 - .../PersistentRememberMeHandler.php | 125 - .../RememberMe/RememberMeDetails.php | 92 - .../RememberMe/RememberMeHandlerInterface.php | 54 - .../RememberMe/ResponseListener.php | 51 - .../RememberMe/SignatureRememberMeHandler.php | 78 - .../symfony/security-http/SecurityEvents.php | 47 - .../SecurityRequestAttributes.php | 24 - .../Session/SessionAuthenticationStrategy.php | 67 - ...SessionAuthenticationStrategyInterface.php | 34 - .../security-http/Util/TargetPathTrait.php | 46 - vendor/symfony/security-http/composer.json | 55 - .../symfony/serializer/Annotation/Context.php | 23 - .../Annotation/DiscriminatorMap.php | 21 - .../symfony/serializer/Annotation/Groups.php | 21 - .../symfony/serializer/Annotation/Ignore.php | 21 - .../serializer/Annotation/MaxDepth.php | 21 - .../serializer/Annotation/SerializedName.php | 21 - .../serializer/Annotation/SerializedPath.php | 21 - .../symfony/serializer/Attribute/Context.php | 74 - .../serializer/Attribute/DiscriminatorMap.php | 54 - .../symfony/serializer/Attribute/Groups.php | 56 - .../symfony/serializer/Attribute/Ignore.php | 24 - .../symfony/serializer/Attribute/MaxDepth.php | 40 - .../serializer/Attribute/SerializedName.php | 40 - .../serializer/Attribute/SerializedPath.php | 46 - vendor/symfony/serializer/CHANGELOG.md | 349 - .../CompiledClassMetadataCacheWarmer.php | 51 - .../serializer/Command/DebugCommand.php | 114 - .../Context/ContextBuilderInterface.php | 31 - .../Context/ContextBuilderTrait.php | 54 - .../Encoder/CsvEncoderContextBuilder.php | 135 - .../Encoder/JsonEncoderContextBuilder.php | 72 - .../Encoder/XmlEncoderContextBuilder.php | 163 - .../Encoder/YamlEncoderContextBuilder.php | 68 - .../AbstractNormalizerContextBuilder.php | 188 - ...AbstractObjectNormalizerContextBuilder.php | 131 - .../BackedEnumNormalizerContextBuilder.php | 35 - ...tViolationListNormalizerContextBuilder.php | 71 - .../DateIntervalNormalizerContextBuilder.php | 36 - .../DateTimeNormalizerContextBuilder.php | 72 - .../FormErrorNormalizerContextBuilder.php | 50 - .../GetSetMethodNormalizerContextBuilder.php | 21 - ...onSerializableNormalizerContextBuilder.php | 21 - .../ObjectNormalizerContextBuilder.php | 21 - .../ProblemNormalizerContextBuilder.php | 50 - .../PropertyNormalizerContextBuilder.php | 30 - .../UidNormalizerContextBuilder.php | 41 - .../UnwrappingDenormalizerContextBuilder.php | 53 - .../Context/SerializerContextBuilder.php | 39 - .../DataCollector/SerializerDataCollector.php | 233 - .../serializer/Debug/TraceableEncoder.php | 109 - .../serializer/Debug/TraceableNormalizer.php | 128 - .../serializer/Debug/TraceableSerializer.php | 185 - .../DependencyInjection/SerializerPass.php | 74 - .../serializer/Encoder/ChainDecoder.php | 83 - .../serializer/Encoder/ChainEncoder.php | 106 - .../Encoder/ContextAwareDecoderInterface.php | 25 - .../Encoder/ContextAwareEncoderInterface.php | 25 - .../symfony/serializer/Encoder/CsvEncoder.php | 285 - .../serializer/Encoder/DecoderInterface.php | 43 - .../serializer/Encoder/EncoderInterface.php | 38 - .../symfony/serializer/Encoder/JsonDecode.php | 119 - .../symfony/serializer/Encoder/JsonEncode.php | 62 - .../serializer/Encoder/JsonEncoder.php | 60 - .../Encoder/NormalizationAwareInterface.php | 24 - .../symfony/serializer/Encoder/XmlEncoder.php | 522 - .../serializer/Encoder/YamlEncoder.php | 95 - .../Exception/BadMethodCallException.php | 16 - .../Exception/CircularReferenceException.php | 21 - .../Exception/ExceptionInterface.php | 21 - .../Exception/ExtraAttributesException.php | 37 - .../Exception/InvalidArgumentException.php | 21 - .../serializer/Exception/LogicException.php | 21 - .../serializer/Exception/MappingException.php | 21 - .../MissingConstructorArgumentsException.php | 48 - .../Exception/NotEncodableValueException.php | 19 - .../NotNormalizableValueException.php | 64 - .../PartialDenormalizationException.php | 40 - .../serializer/Exception/RuntimeException.php | 21 - .../Exception/UnexpectedPropertyException.php | 29 - .../Exception/UnexpectedValueException.php | 21 - .../Exception/UnsupportedException.php | 21 - .../Exception/UnsupportedFormatException.php | 19 - .../Extractor/ObjectPropertyListExtractor.php | 36 - .../ObjectPropertyListExtractorInterface.php | 25 - .../serializer/Mapping/AttributeMetadata.php | 226 - .../Mapping/AttributeMetadataInterface.php | 112 - .../ClassDiscriminatorFromClassMetadata.php | 81 - .../Mapping/ClassDiscriminatorMapping.php | 64 - .../ClassDiscriminatorResolverInterface.php | 26 - .../serializer/Mapping/ClassMetadata.php | 111 - .../Mapping/ClassMetadataInterface.php | 57 - .../Factory/CacheClassMetadataFactory.php | 62 - .../Mapping/Factory/ClassMetadataFactory.php | 67 - .../Factory/ClassMetadataFactoryCompiler.php | 68 - .../Factory/ClassMetadataFactoryInterface.php | 45 - .../Mapping/Factory/ClassResolverTrait.php | 42 - .../Factory/CompiledClassMetadataFactory.php | 75 - .../Mapping/Loader/AttributeLoader.php | 233 - .../serializer/Mapping/Loader/FileLoader.php | 42 - .../serializer/Mapping/Loader/LoaderChain.php | 64 - .../Mapping/Loader/LoaderInterface.php | 24 - .../Mapping/Loader/XmlFileLoader.php | 182 - .../Mapping/Loader/YamlFileLoader.php | 173 - .../serializer-mapping-1.0.xsd | 115 - .../AdvancedNameConverterInterface.php | 24 - .../CamelCaseToSnakeCaseNameConverter.php | 80 - .../MetadataAwareNameConverter.php | 158 - .../NameConverter/NameConverterInterface.php | 38 - .../Normalizer/AbstractNormalizer.php | 588 - .../Normalizer/AbstractObjectNormalizer.php | 1120 -- .../Normalizer/ArrayDenormalizer.php | 107 - .../Normalizer/BackedEnumNormalizer.php | 90 - .../ConstraintViolationListNormalizer.php | 113 - .../Normalizer/CustomNormalizer.php | 68 - .../Normalizer/DataUriNormalizer.php | 144 - .../Normalizer/DateIntervalNormalizer.php | 118 - .../Normalizer/DateTimeNormalizer.php | 174 - .../Normalizer/DateTimeZoneNormalizer.php | 68 - .../Normalizer/DenormalizableInterface.php | 38 - .../Normalizer/DenormalizerAwareInterface.php | 23 - .../Normalizer/DenormalizerAwareTrait.php | 25 - .../Normalizer/DenormalizerInterface.php | 72 - .../Normalizer/FormErrorNormalizer.php | 85 - .../Normalizer/GetSetMethodNormalizer.php | 204 - .../Normalizer/JsonSerializableNormalizer.php | 62 - .../Normalizer/MimeMessageNormalizer.php | 121 - .../Normalizer/NormalizableInterface.php | 37 - .../Normalizer/NormalizerAwareInterface.php | 23 - .../Normalizer/NormalizerAwareTrait.php | 25 - .../Normalizer/NormalizerInterface.php | 65 - .../Normalizer/ObjectNormalizer.php | 221 - .../Normalizer/ObjectToPopulateTrait.php | 34 - .../Normalizer/ProblemNormalizer.php | 114 - .../Normalizer/PropertyNormalizer.php | 203 - .../Normalizer/TranslatableNormalizer.php | 55 - .../serializer/Normalizer/UidNormalizer.php | 81 - .../Normalizer/UnwrappingDenormalizer.php | 65 - vendor/symfony/serializer/README.md | 15 - vendor/symfony/serializer/Serializer.php | 398 - .../serializer/SerializerAwareInterface.php | 23 - .../serializer/SerializerAwareTrait.php | 25 - .../serializer/SerializerInterface.php | 40 - vendor/symfony/serializer/composer.json | 66 - .../service-contracts/Attribute/Required.php | 25 - .../Attribute/SubscribedService.php | 47 - vendor/symfony/service-contracts/CHANGELOG.md | 5 - vendor/symfony/service-contracts/README.md | 9 - .../service-contracts/ResetInterface.php | 33 - .../ServiceCollectionInterface.php | 26 - .../service-contracts/ServiceLocatorTrait.php | 115 - .../ServiceMethodsSubscriberTrait.php | 80 - .../ServiceProviderInterface.php | 45 - .../ServiceSubscriberInterface.php | 62 - .../ServiceSubscriberTrait.php | 84 - .../Test/ServiceLocatorTest.php | 23 - .../Test/ServiceLocatorTestCase.php | 96 - .../symfony/service-contracts/composer.json | 42 - vendor/symfony/stimulus-bundle/CHANGELOG.md | 38 - vendor/symfony/stimulus-bundle/README.md | 11 - .../assets/dist/controllers.d.ts | 12 - .../assets/dist/controllers.js | 5 - .../stimulus-bundle/assets/dist/loader.d.ts | 4 - .../stimulus-bundle/assets/dist/loader.js | 81 - .../stimulus-bundle/assets/package.json | 18 - vendor/symfony/stimulus-bundle/composer.json | 42 - .../stimulus-bundle/config/services.php | 84 - vendor/symfony/stimulus-bundle/doc/index.rst | 579 - .../src/AssetMapper/AutoImportLocator.php | 72 - .../AssetMapper/ControllersMapGenerator.php | 171 - .../src/AssetMapper/MappedControllerAsset.php | 32 - .../MappedControllerAutoImport.php | 26 - .../StimulusLoaderJavaScriptCompiler.php | 133 - .../RemoveAssetMapperServicesCompiler.php | 32 - .../DependencyInjection/StimulusExtension.php | 99 - .../src/Dto/StimulusAttributes.php | 235 - .../src/Helper/StimulusHelper.php | 35 - .../stimulus-bundle/src/StimulusBundle.php | 32 - .../src/Twig/StimulusTwigExtension.php | 111 - .../src/Twig/UxControllersTwigExtension.php | 30 - .../src/Twig/UxControllersTwigRuntime.php | 171 - .../src/Ux/UxPackageMetadata.php | 30 - .../src/Ux/UxPackageReader.php | 57 - vendor/symfony/stopwatch/CHANGELOG.md | 24 - vendor/symfony/stopwatch/README.md | 42 - vendor/symfony/stopwatch/Section.php | 155 - vendor/symfony/stopwatch/Stopwatch.php | 151 - vendor/symfony/stopwatch/StopwatchEvent.php | 230 - vendor/symfony/stopwatch/StopwatchPeriod.php | 73 - vendor/symfony/stopwatch/composer.json | 29 - vendor/symfony/string/AbstractString.php | 702 -- .../symfony/string/AbstractUnicodeString.php | 664 - vendor/symfony/string/ByteString.php | 490 - vendor/symfony/string/CHANGELOG.md | 45 - vendor/symfony/string/CodePointString.php | 260 - .../string/Exception/ExceptionInterface.php | 16 - .../Exception/InvalidArgumentException.php | 16 - .../string/Exception/RuntimeException.php | 16 - .../string/Inflector/EnglishInflector.php | 586 - .../string/Inflector/FrenchInflector.php | 151 - .../string/Inflector/InflectorInterface.php | 33 - vendor/symfony/string/LazyString.php | 145 - vendor/symfony/string/README.md | 14 - .../Resources/data/wcswidth_table_wide.php | 1175 -- .../Resources/data/wcswidth_table_zero.php | 1459 --- vendor/symfony/string/Resources/functions.php | 38 - .../symfony/string/Slugger/AsciiSlugger.php | 207 - .../string/Slugger/SluggerInterface.php | 27 - vendor/symfony/string/UnicodeString.php | 382 - vendor/symfony/string/composer.json | 44 - .../translation-contracts/CHANGELOG.md | 5 - .../LocaleAwareInterface.php | 29 - .../symfony/translation-contracts/README.md | 9 - .../Test/TranslatorTest.php | 385 - .../TranslatableInterface.php | 20 - .../TranslatorInterface.php | 68 - .../translation-contracts/TranslatorTrait.php | 225 - .../translation-contracts/composer.json | 37 - vendor/symfony/translation/CHANGELOG.md | 216 - .../Catalogue/AbstractOperation.php | 185 - .../translation/Catalogue/MergeOperation.php | 69 - .../Catalogue/OperationInterface.php | 61 - .../translation/Catalogue/TargetOperation.php | 83 - .../CatalogueMetadataAwareInterface.php | 44 - .../Command/TranslationPullCommand.php | 184 - .../Command/TranslationPushCommand.php | 182 - .../translation/Command/TranslationTrait.php | 77 - .../translation/Command/XliffLintCommand.php | 282 - .../TranslationDataCollector.php | 148 - .../translation/DataCollectorTranslator.php | 139 - .../DataCollectorTranslatorPass.php | 36 - .../LoggingTranslatorPass.php | 59 - .../TranslationDumperPass.php | 35 - .../TranslationExtractorPass.php | 40 - .../DependencyInjection/TranslatorPass.php | 91 - .../TranslatorPathsPass.php | 142 - .../translation/Dumper/CsvFileDumper.php | 54 - .../translation/Dumper/DumperInterface.php | 30 - .../symfony/translation/Dumper/FileDumper.php | 101 - .../translation/Dumper/IcuResFileDumper.php | 95 - .../translation/Dumper/IniFileDumper.php | 39 - .../translation/Dumper/JsonFileDumper.php | 34 - .../translation/Dumper/MoFileDumper.php | 76 - .../translation/Dumper/PhpFileDumper.php | 32 - .../translation/Dumper/PoFileDumper.php | 131 - .../translation/Dumper/QtFileDumper.php | 55 - .../translation/Dumper/XliffFileDumper.php | 221 - .../translation/Dumper/YamlFileDumper.php | 56 - .../Exception/ExceptionInterface.php | 21 - .../Exception/IncompleteDsnException.php | 24 - .../Exception/InvalidArgumentException.php | 21 - .../Exception/InvalidResourceException.php | 21 - .../translation/Exception/LogicException.php | 21 - .../MissingRequiredOptionException.php | 25 - .../Exception/NotFoundResourceException.php | 21 - .../Exception/ProviderException.php | 41 - .../Exception/ProviderExceptionInterface.php | 23 - .../Exception/RuntimeException.php | 21 - .../Exception/UnsupportedSchemeException.php | 58 - .../Extractor/AbstractFileExtractor.php | 61 - .../translation/Extractor/ChainExtractor.php | 51 - .../Extractor/ExtractorInterface.php | 39 - .../translation/Extractor/PhpAstExtractor.php | 85 - .../Extractor/Visitor/AbstractVisitor.php | 135 - .../Extractor/Visitor/ConstraintVisitor.php | 112 - .../Extractor/Visitor/TransMethodVisitor.php | 65 - .../Visitor/TranslatableMessageVisitor.php | 65 - .../translation/Formatter/IntlFormatter.php | 57 - .../Formatter/IntlFormatterInterface.php | 27 - .../Formatter/MessageFormatter.php | 46 - .../Formatter/MessageFormatterInterface.php | 28 - .../translation/IdentityTranslator.php | 26 - .../translation/Loader/ArrayLoader.php | 57 - .../translation/Loader/CsvFileLoader.php | 62 - .../symfony/translation/Loader/FileLoader.php | 57 - .../translation/Loader/IcuDatFileLoader.php | 58 - .../translation/Loader/IcuResFileLoader.php | 86 - .../translation/Loader/IniFileLoader.php | 25 - .../translation/Loader/JsonFileLoader.php | 51 - .../translation/Loader/LoaderInterface.php | 32 - .../translation/Loader/MoFileLoader.php | 138 - .../translation/Loader/PhpFileLoader.php | 35 - .../translation/Loader/PoFileLoader.php | 147 - .../translation/Loader/QtFileLoader.php | 78 - .../translation/Loader/XliffFileLoader.php | 241 - .../translation/Loader/YamlFileLoader.php | 51 - vendor/symfony/translation/LocaleSwitcher.php | 83 - .../symfony/translation/LoggingTranslator.php | 109 - .../symfony/translation/MessageCatalogue.php | 308 - .../translation/MessageCatalogueInterface.php | 122 - .../translation/MetadataAwareInterface.php | 44 - .../Provider/AbstractProviderFactory.php | 37 - vendor/symfony/translation/Provider/Dsn.php | 110 - .../Provider/FilteringProvider.php | 62 - .../translation/Provider/NullProvider.php | 39 - .../Provider/NullProviderFactory.php | 34 - .../Provider/ProviderFactoryInterface.php | 26 - .../Provider/ProviderInterface.php | 30 - .../TranslationProviderCollection.php | 57 - .../TranslationProviderCollectionFactory.php | 57 - .../PseudoLocalizationTranslator.php | 365 - vendor/symfony/translation/README.md | 46 - .../translation/Reader/TranslationReader.php | 59 - .../Reader/TranslationReaderInterface.php | 27 - .../Resources/bin/translation-status.php | 274 - .../translation/Resources/data/parents.json | 142 - .../translation/Resources/functions.php | 22 - .../schemas/xliff-core-1.2-transitional.xsd | 2261 ---- .../Resources/schemas/xliff-core-2.0.xsd | 411 - .../translation/Resources/schemas/xml.xsd | 309 - .../Test/ProviderFactoryTestCase.php | 153 - .../translation/Test/ProviderTestCase.php | 82 - .../translation/TranslatableMessage.php | 60 - vendor/symfony/translation/Translator.php | 449 - vendor/symfony/translation/TranslatorBag.php | 102 - .../translation/TranslatorBagInterface.php | 36 - .../translation/Util/ArrayConverter.php | 142 - .../symfony/translation/Util/XliffUtils.php | 191 - .../translation/Writer/TranslationWriter.php | 71 - .../Writer/TranslationWriterInterface.php | 33 - vendor/symfony/translation/composer.json | 59 - vendor/symfony/twig-bridge/AppVariable.php | 216 - .../twig-bridge/Attribute/Template.php | 31 - vendor/symfony/twig-bridge/CHANGELOG.md | 205 - .../twig-bridge/Command/DebugCommand.php | 589 - .../twig-bridge/Command/LintCommand.php | 287 - .../DataCollector/TwigDataCollector.php | 183 - .../ErrorRenderer/TwigErrorRenderer.php | 84 - .../TemplateAttributeListener.php | 84 - .../twig-bridge/Extension/AssetExtension.php | 56 - .../twig-bridge/Extension/CsrfExtension.php | 29 - .../twig-bridge/Extension/CsrfRuntime.php | 31 - .../twig-bridge/Extension/DumpExtension.php | 77 - .../twig-bridge/Extension/EmojiExtension.php | 55 - .../Extension/ExpressionExtension.php | 36 - .../twig-bridge/Extension/FormExtension.php | 203 - .../Extension/HtmlSanitizerExtension.php | 40 - .../Extension/HttpFoundationExtension.php | 62 - .../Extension/HttpKernelExtension.php | 39 - .../Extension/HttpKernelRuntime.php | 62 - .../Extension/ImportMapExtension.php | 28 - .../Extension/ImportMapRuntime.php | 30 - .../Extension/LogoutUrlExtension.php | 57 - .../Extension/ProfilerExtension.php | 56 - .../Extension/RoutingExtension.php | 88 - .../Extension/SecurityExtension.php | 97 - .../Extension/SerializerExtension.php | 28 - .../Extension/SerializerRuntime.php | 31 - .../Extension/StopwatchExtension.php | 51 - .../Extension/TranslationExtension.php | 133 - .../Extension/WebLinkExtension.php | 128 - .../Extension/WorkflowExtension.php | 116 - .../twig-bridge/Extension/YamlExtension.php | 58 - .../twig-bridge/Form/TwigRendererEngine.php | 167 - .../symfony/twig-bridge/Mime/BodyRenderer.php | 89 - .../twig-bridge/Mime/NotificationEmail.php | 280 - .../twig-bridge/Mime/TemplatedEmail.php | 116 - .../Mime/WrappedTemplatedEmail.php | 200 - vendor/symfony/twig-bridge/Node/DumpNode.php | 97 - .../twig-bridge/Node/FormThemeNode.php | 49 - .../twig-bridge/Node/RenderBlockNode.php | 45 - .../Node/SearchAndRenderBlockNode.php | 116 - .../twig-bridge/Node/StopwatchNode.php | 55 - .../Node/TransDefaultDomainNode.php | 39 - vendor/symfony/twig-bridge/Node/TransNode.php | 136 - .../symfony/twig-bridge/NodeVisitor/Scope.php | 94 - .../TranslationDefaultDomainNodeVisitor.php | 119 - .../NodeVisitor/TranslationNodeVisitor.php | 194 - vendor/symfony/twig-bridge/README.md | 13 - .../Email/default/notification/body.html.twig | 1 - .../Email/default/notification/body.txt.twig | 1 - .../Resources/views/Email/zurb_2/main.css | 1667 --- .../Email/zurb_2/notification/body.html.twig | 67 - .../Email/zurb_2/notification/body.txt.twig | 20 - .../notification/content_markdown.html.twig | 1 - .../views/Email/zurb_2/notification/local.css | 19 - .../bootstrap_3_horizontal_layout.html.twig | 71 - .../views/Form/bootstrap_3_layout.html.twig | 220 - .../bootstrap_4_horizontal_layout.html.twig | 88 - .../views/Form/bootstrap_4_layout.html.twig | 319 - .../bootstrap_5_horizontal_layout.html.twig | 130 - .../views/Form/bootstrap_5_layout.html.twig | 374 - .../Form/bootstrap_base_layout.html.twig | 208 - .../views/Form/form_div_layout.html.twig | 488 - .../views/Form/form_table_layout.html.twig | 50 - .../views/Form/foundation_5_layout.html.twig | 350 - .../views/Form/foundation_6_layout.html.twig | 50 - .../views/Form/tailwind_2_layout.html.twig | 69 - .../twig-bridge/Test/FormLayoutTestCase.php | 148 - .../Test/Traits/RuntimeLoaderProvider.php | 28 - .../TokenParser/DumpTokenParser.php | 47 - .../TokenParser/FormThemeTokenParser.php | 58 - .../TokenParser/StopwatchTokenParser.php | 62 - .../TransDefaultDomainTokenParser.php | 39 - .../TokenParser/TransTokenParser.php | 89 - .../twig-bridge/Translation/TwigExtractor.php | 87 - .../twig-bridge/UndefinedCallableHandler.php | 129 - vendor/symfony/twig-bridge/composer.json | 76 - vendor/symfony/twig-bundle/CHANGELOG.md | 135 - .../CacheWarmer/TemplateCacheWarmer.php | 73 - .../twig-bundle/Command/LintCommand.php | 51 - .../Compiler/ExtensionPass.php | 148 - .../Compiler/RuntimeLoaderPass.php | 39 - .../Compiler/TwigEnvironmentPass.php | 57 - .../Compiler/TwigLoaderPass.php | 60 - .../DependencyInjection/Configuration.php | 232 - .../Configurator/EnvironmentConfigurator.php | 56 - .../DependencyInjection/TwigExtension.php | 225 - vendor/symfony/twig-bundle/README.md | 13 - .../twig-bundle/Resources/config/console.php | 33 - .../twig-bundle/Resources/config/form.php | 30 - .../Resources/config/importmap.php | 27 - .../twig-bundle/Resources/config/mailer.php | 28 - .../Resources/config/schema/twig-1.0.xsd | 62 - .../twig-bundle/Resources/config/twig.php | 176 - .../symfony/twig-bundle/TemplateIterator.php | 94 - vendor/symfony/twig-bundle/TwigBundle.php | 45 - vendor/symfony/twig-bundle/composer.json | 51 - vendor/symfony/type-info/CHANGELOG.md | 7 - .../Exception/ExceptionInterface.php | 22 - .../Exception/InvalidArgumentException.php | 22 - .../type-info/Exception/LogicException.php | 22 - .../type-info/Exception/RuntimeException.php | 22 - .../Exception/UnsupportedException.php | 30 - vendor/symfony/type-info/README.md | 47 - vendor/symfony/type-info/Type.php | 48 - .../symfony/type-info/Type/BackedEnumType.php | 47 - vendor/symfony/type-info/Type/BuiltinType.php | 92 - .../symfony/type-info/Type/CollectionType.php | 120 - .../type-info/Type/CompositeTypeTrait.php | 92 - vendor/symfony/type-info/Type/EnumType.php | 26 - vendor/symfony/type-info/Type/GenericType.php | 100 - .../type-info/Type/IntersectionType.php | 69 - vendor/symfony/type-info/Type/ObjectType.php | 71 - .../symfony/type-info/Type/TemplateType.php | 62 - vendor/symfony/type-info/Type/UnionType.php | 81 - .../type-info/TypeContext/TypeContext.php | 118 - .../TypeContext/TypeContextFactory.php | 186 - vendor/symfony/type-info/TypeFactoryTrait.php | 316 - vendor/symfony/type-info/TypeIdentifier.php | 47 - .../ReflectionParameterTypeResolver.php | 53 - .../ReflectionPropertyTypeResolver.php | 51 - .../ReflectionReturnTypeResolver.php | 53 - .../TypeResolver/ReflectionTypeResolver.php | 98 - .../TypeResolver/StringTypeResolver.php | 256 - .../type-info/TypeResolver/TypeResolver.php | 102 - .../TypeResolver/TypeResolverInterface.php | 35 - vendor/symfony/type-info/composer.json | 48 - vendor/symfony/ux-turbo/CHANGELOG.md | 105 - vendor/symfony/ux-turbo/CONTRIBUTING.md | 35 - vendor/symfony/ux-turbo/README.md | 60 - .../assets/dist/turbo_controller.d.ts | 4 - .../ux-turbo/assets/dist/turbo_controller.js | 7 - .../assets/dist/turbo_stream_controller.d.ts | 16 - .../assets/dist/turbo_stream_controller.js | 35 - vendor/symfony/ux-turbo/assets/package.json | 36 - .../symfony/ux-turbo/assets/vitest.config.mjs | 12 - vendor/symfony/ux-turbo/composer.json | 76 - vendor/symfony/ux-turbo/config/services.php | 59 - vendor/symfony/ux-turbo/doc/index.rst | 909 -- vendor/symfony/ux-turbo/docker-compose.yml | 14 - .../ux-turbo/src/Attribute/Broadcast.php | 51 - .../src/Bridge/Mercure/Broadcaster.php | 109 - .../Mercure/TurboStreamListenRenderer.php | 68 - .../src/Broadcaster/BroadcasterInterface.php | 25 - .../ux-turbo/src/Broadcaster/IdAccessor.php | 46 - .../src/Broadcaster/ImuxBroadcaster.php | 35 - .../src/Broadcaster/TwigBroadcaster.php | 69 - .../src/DependencyInjection/Configuration.php | 52 - .../DependencyInjection/TurboExtension.php | 123 - .../src/Doctrine/BroadcastListener.php | 155 - .../ux-turbo/src/Doctrine/ClassUtil.php | 37 - vendor/symfony/ux-turbo/src/TurboBundle.php | 54 - .../TurboStreamListenRendererInterface.php | 27 - .../ux-turbo/src/Twig/TwigExtension.php | 50 - .../validator/Attribute/HasNamedArguments.php | 22 - vendor/symfony/validator/CHANGELOG.md | 447 - .../validator/Command/DebugCommand.php | 247 - vendor/symfony/validator/Constraint.php | 303 - .../symfony/validator/ConstraintValidator.php | 147 - .../validator/ConstraintValidatorFactory.php | 40 - .../ConstraintValidatorFactoryInterface.php | 25 - .../ConstraintValidatorInterface.php | 34 - .../symfony/validator/ConstraintViolation.php | 144 - .../ConstraintViolationInterface.php | 127 - .../validator/ConstraintViolationList.php | 151 - .../ConstraintViolationListInterface.php | 70 - .../Constraints/AbstractComparison.php | 61 - .../AbstractComparisonValidator.php | 107 - vendor/symfony/validator/Constraints/All.php | 50 - .../validator/Constraints/AllValidator.php | 46 - .../validator/Constraints/AtLeastOneOf.php | 65 - .../Constraints/AtLeastOneOfValidator.php | 70 - vendor/symfony/validator/Constraints/Bic.php | 80 - .../validator/Constraints/BicValidator.php | 164 - .../symfony/validator/Constraints/Blank.php | 42 - .../validator/Constraints/BlankValidator.php | 36 - .../validator/Constraints/Callback.php | 58 - .../Constraints/CallbackValidator.php | 58 - .../validator/Constraints/CardScheme.php | 76 - .../Constraints/CardSchemeValidator.php | 132 - .../symfony/validator/Constraints/Cascade.php | 50 - .../symfony/validator/Constraints/Charset.php | 43 - .../Constraints/CharsetValidator.php | 46 - .../symfony/validator/Constraints/Choice.php | 99 - .../validator/Constraints/ChoiceValidator.php | 107 - vendor/symfony/validator/Constraints/Cidr.php | 110 - .../validator/Constraints/CidrValidator.php | 89 - .../validator/Constraints/Collection.php | 111 - .../Constraints/CollectionValidator.php | 84 - .../validator/Constraints/Composite.php | 153 - .../validator/Constraints/Compound.php | 54 - .../Constraints/CompoundValidator.php | 35 - .../symfony/validator/Constraints/Count.php | 94 - .../validator/Constraints/CountValidator.php | 80 - .../symfony/validator/Constraints/Country.php | 60 - .../Constraints/CountryValidator.php | 50 - .../validator/Constraints/CssColor.php | 107 - .../Constraints/CssColorValidator.php | 83 - .../validator/Constraints/Currency.php | 51 - .../Constraints/CurrencyValidator.php | 51 - vendor/symfony/validator/Constraints/Date.php | 46 - .../validator/Constraints/DateTime.php | 61 - .../Constraints/DateTimeValidator.php | 76 - .../validator/Constraints/DateValidator.php | 72 - .../Constraints/DisableAutoMapping.php | 44 - .../validator/Constraints/DivisibleBy.php | 29 - .../Constraints/DivisibleByValidator.php | 56 - .../symfony/validator/Constraints/Email.php | 83 - .../validator/Constraints/EmailValidator.php | 110 - .../Constraints/EnableAutoMapping.php | 44 - .../symfony/validator/Constraints/EqualTo.php | 30 - .../Constraints/EqualToValidator.php | 31 - .../validator/Constraints/Existence.php | 32 - .../validator/Constraints/Expression.php | 93 - .../ExpressionLanguageProvider.php | 32 - .../Constraints/ExpressionSyntax.php | 53 - .../Constraints/ExpressionSyntaxValidator.php | 59 - .../Constraints/ExpressionValidator.php | 62 - vendor/symfony/validator/Constraints/File.php | 196 - .../validator/Constraints/FileValidator.php | 306 - .../validator/Constraints/GreaterThan.php | 30 - .../Constraints/GreaterThanOrEqual.php | 30 - .../GreaterThanOrEqualValidator.php | 31 - .../Constraints/GreaterThanValidator.php | 31 - .../validator/Constraints/GroupSequence.php | 82 - .../Constraints/GroupSequenceProvider.php | 28 - .../validator/Constraints/Hostname.php | 50 - .../Constraints/HostnameValidator.php | 69 - vendor/symfony/validator/Constraints/Iban.php | 54 - .../validator/Constraints/IbanValidator.php | 298 - .../validator/Constraints/IdenticalTo.php | 30 - .../Constraints/IdenticalToValidator.php | 31 - .../symfony/validator/Constraints/Image.php | 223 - .../validator/Constraints/ImageValidator.php | 234 - vendor/symfony/validator/Constraints/Ip.php | 136 - .../validator/Constraints/IpValidator.php | 95 - .../symfony/validator/Constraints/IsFalse.php | 42 - .../Constraints/IsFalseValidator.php | 38 - .../symfony/validator/Constraints/IsNull.php | 42 - .../validator/Constraints/IsNullValidator.php | 36 - .../symfony/validator/Constraints/IsTrue.php | 42 - .../validator/Constraints/IsTrueValidator.php | 38 - vendor/symfony/validator/Constraints/Isbn.php | 85 - .../validator/Constraints/IsbnValidator.php | 181 - vendor/symfony/validator/Constraints/Isin.php | 51 - .../validator/Constraints/IsinValidator.php | 78 - vendor/symfony/validator/Constraints/Issn.php | 67 - .../validator/Constraints/IssnValidator.php | 128 - vendor/symfony/validator/Constraints/Json.php | 42 - .../validator/Constraints/JsonValidator.php | 47 - .../validator/Constraints/Language.php | 58 - .../Constraints/LanguageValidator.php | 50 - .../symfony/validator/Constraints/Length.php | 123 - .../validator/Constraints/LengthValidator.php | 99 - .../validator/Constraints/LessThan.php | 30 - .../validator/Constraints/LessThanOrEqual.php | 30 - .../Constraints/LessThanOrEqualValidator.php | 31 - .../Constraints/LessThanValidator.php | 31 - .../symfony/validator/Constraints/Locale.php | 58 - .../validator/Constraints/LocaleValidator.php | 54 - vendor/symfony/validator/Constraints/Luhn.php | 52 - .../validator/Constraints/LuhnValidator.php | 89 - .../validator/Constraints/MacAddress.php | 85 - .../Constraints/MacAddressValidator.php | 118 - .../validator/Constraints/Negative.php | 25 - .../validator/Constraints/NegativeOrZero.php | 25 - .../Constraints/NoSuspiciousCharacters.php | 118 - .../NoSuspiciousCharactersValidator.php | 113 - .../validator/Constraints/NotBlank.php | 54 - .../Constraints/NotBlankValidator.php | 45 - .../Constraints/NotCompromisedPassword.php | 54 - .../NotCompromisedPasswordValidator.php | 108 - .../validator/Constraints/NotEqualTo.php | 30 - .../Constraints/NotEqualToValidator.php | 31 - .../validator/Constraints/NotIdenticalTo.php | 30 - .../Constraints/NotIdenticalToValidator.php | 31 - .../symfony/validator/Constraints/NotNull.php | 42 - .../Constraints/NotNullValidator.php | 36 - .../validator/Constraints/Optional.php | 19 - .../Constraints/PasswordStrength.php | 59 - .../Constraints/PasswordStrengthValidator.php | 91 - .../validator/Constraints/Positive.php | 25 - .../validator/Constraints/PositiveOrZero.php | 25 - .../symfony/validator/Constraints/Range.php | 106 - .../validator/Constraints/RangeValidator.php | 191 - .../symfony/validator/Constraints/Regex.php | 127 - .../validator/Constraints/RegexValidator.php | 55 - .../validator/Constraints/Required.php | 19 - .../validator/Constraints/Sequentially.php | 55 - .../Constraints/SequentiallyValidator.php | 41 - vendor/symfony/validator/Constraints/Time.php | 52 - .../validator/Constraints/TimeValidator.php | 69 - .../validator/Constraints/Timezone.php | 89 - .../Constraints/TimezoneValidator.php | 119 - .../validator/Constraints/Traverse.php | 48 - vendor/symfony/validator/Constraints/Type.php | 60 - .../validator/Constraints/TypeValidator.php | 96 - vendor/symfony/validator/Constraints/Ulid.php | 54 - .../validator/Constraints/UlidValidator.php | 70 - .../symfony/validator/Constraints/Unique.php | 60 - .../validator/Constraints/UniqueValidator.php | 80 - vendor/symfony/validator/Constraints/Url.php | 76 - .../validator/Constraints/UrlValidator.php | 96 - vendor/symfony/validator/Constraints/Uuid.php | 123 - .../validator/Constraints/UuidValidator.php | 257 - .../symfony/validator/Constraints/Valid.php | 54 - .../validator/Constraints/ValidValidator.php | 38 - vendor/symfony/validator/Constraints/When.php | 82 - .../validator/Constraints/WhenValidator.php | 51 - .../ZeroComparisonConstraintTrait.php | 43 - .../ContainerConstraintValidatorFactory.php | 59 - .../validator/Context/ExecutionContext.php | 273 - .../Context/ExecutionContextFactory.php | 41 - .../ExecutionContextFactoryInterface.php | 33 - .../Context/ExecutionContextInterface.php | 285 - .../DataCollector/ValidatorDataCollector.php | 93 - .../AddAutoMappingConfigurationPass.php | 84 - .../AddConstraintValidatorsPass.php | 47 - .../AddValidatorInitializersPass.php | 37 - .../Exception/BadMethodCallException.php | 21 - .../ConstraintDefinitionException.php | 16 - .../Exception/ExceptionInterface.php | 21 - .../Exception/GroupDefinitionException.php | 16 - .../Exception/InvalidArgumentException.php | 21 - .../Exception/InvalidOptionsException.php | 27 - .../validator/Exception/LogicException.php | 16 - .../validator/Exception/MappingException.php | 16 - .../Exception/MissingOptionsException.php | 27 - .../Exception/NoSuchMetadataException.php | 19 - .../Exception/OutOfBoundsException.php | 21 - .../validator/Exception/RuntimeException.php | 21 - .../Exception/UnexpectedTypeException.php | 20 - .../Exception/UnexpectedValueException.php | 30 - .../UnsupportedMetadataException.php | 19 - .../Exception/ValidationFailedException.php | 37 - .../Exception/ValidatorException.php | 16 - .../validator/GroupProviderInterface.php | 30 - .../GroupSequenceProviderInterface.php | 28 - .../validator/Mapping/AutoMappingStrategy.php | 42 - .../validator/Mapping/CascadingStrategy.php | 52 - .../validator/Mapping/ClassMetadata.php | 515 - .../Mapping/ClassMetadataInterface.php | 92 - .../Factory/BlackHoleMetadataFactory.php | 37 - .../Factory/LazyLoadingMetadataFactory.php | 156 - .../Factory/MetadataFactoryInterface.php | 35 - .../validator/Mapping/GenericMetadata.php | 226 - .../validator/Mapping/GetterMetadata.php | 74 - .../Mapping/Loader/AbstractLoader.php | 105 - .../Mapping/Loader/AttributeLoader.php | 96 - .../Mapping/Loader/AutoMappingTrait.php | 34 - .../validator/Mapping/Loader/FileLoader.php | 48 - .../validator/Mapping/Loader/FilesLoader.php | 55 - .../validator/Mapping/Loader/LoaderChain.php | 61 - .../Mapping/Loader/LoaderInterface.php | 27 - .../Mapping/Loader/PropertyInfoLoader.php | 284 - .../Mapping/Loader/StaticMethodLoader.php | 61 - .../Mapping/Loader/XmlFileLoader.php | 236 - .../Mapping/Loader/XmlFilesLoader.php | 28 - .../Mapping/Loader/YamlFileLoader.php | 192 - .../Mapping/Loader/YamlFilesLoader.php | 28 - .../constraint-mapping-1.0.xsd | 163 - .../validator/Mapping/MemberMetadata.php | 160 - .../validator/Mapping/MetadataInterface.php | 62 - .../validator/Mapping/PropertyMetadata.php | 84 - .../Mapping/PropertyMetadataInterface.php | 41 - .../validator/Mapping/TraversalStrategy.php | 55 - .../validator/ObjectInitializerInterface.php | 26 - vendor/symfony/validator/README.md | 16 - .../Resources/translations/validators.af.xlf | 471 - .../Resources/translations/validators.ar.xlf | 471 - .../Resources/translations/validators.az.xlf | 471 - .../Resources/translations/validators.be.xlf | 471 - .../Resources/translations/validators.bg.xlf | 471 - .../Resources/translations/validators.bs.xlf | 471 - .../Resources/translations/validators.ca.xlf | 471 - .../Resources/translations/validators.cs.xlf | 471 - .../Resources/translations/validators.cy.xlf | 471 - .../Resources/translations/validators.da.xlf | 471 - .../Resources/translations/validators.de.xlf | 471 - .../Resources/translations/validators.el.xlf | 471 - .../Resources/translations/validators.en.xlf | 471 - .../Resources/translations/validators.es.xlf | 471 - .../Resources/translations/validators.et.xlf | 471 - .../Resources/translations/validators.eu.xlf | 471 - .../Resources/translations/validators.fa.xlf | 471 - .../Resources/translations/validators.fi.xlf | 471 - .../Resources/translations/validators.fr.xlf | 471 - .../Resources/translations/validators.gl.xlf | 471 - .../Resources/translations/validators.he.xlf | 471 - .../Resources/translations/validators.hr.xlf | 471 - .../Resources/translations/validators.hu.xlf | 471 - .../Resources/translations/validators.hy.xlf | 471 - .../Resources/translations/validators.id.xlf | 471 - .../Resources/translations/validators.it.xlf | 471 - .../Resources/translations/validators.ja.xlf | 471 - .../Resources/translations/validators.lb.xlf | 471 - .../Resources/translations/validators.lt.xlf | 471 - .../Resources/translations/validators.lv.xlf | 471 - .../Resources/translations/validators.mk.xlf | 471 - .../Resources/translations/validators.mn.xlf | 471 - .../Resources/translations/validators.my.xlf | 471 - .../Resources/translations/validators.nb.xlf | 471 - .../Resources/translations/validators.nl.xlf | 471 - .../Resources/translations/validators.nn.xlf | 471 - .../Resources/translations/validators.no.xlf | 471 - .../Resources/translations/validators.pl.xlf | 471 - .../Resources/translations/validators.pt.xlf | 471 - .../translations/validators.pt_BR.xlf | 471 - .../Resources/translations/validators.ro.xlf | 471 - .../Resources/translations/validators.ru.xlf | 471 - .../Resources/translations/validators.sk.xlf | 471 - .../Resources/translations/validators.sl.xlf | 471 - .../Resources/translations/validators.sq.xlf | 480 - .../translations/validators.sr_Cyrl.xlf | 471 - .../translations/validators.sr_Latn.xlf | 471 - .../Resources/translations/validators.sv.xlf | 471 - .../Resources/translations/validators.th.xlf | 471 - .../Resources/translations/validators.tl.xlf | 471 - .../Resources/translations/validators.tr.xlf | 471 - .../Resources/translations/validators.uk.xlf | 471 - .../Resources/translations/validators.ur.xlf | 471 - .../Resources/translations/validators.uz.xlf | 471 - .../Resources/translations/validators.vi.xlf | 471 - .../translations/validators.zh_CN.xlf | 471 - .../translations/validators.zh_TW.xlf | 471 - .../Test/ConstraintValidatorTestCase.php | 581 - .../symfony/validator/Util/PropertyPath.php | 51 - vendor/symfony/validator/Validation.php | 88 - .../ContextualValidatorInterface.php | 78 - .../validator/Validator/LazyProperty.php | 30 - .../RecursiveContextualValidator.php | 770 -- .../Validator/RecursiveValidator.php | 99 - .../Validator/TraceableValidator.php | 115 - .../Validator/ValidatorInterface.php | 86 - vendor/symfony/validator/ValidatorBuilder.php | 369 - .../Violation/ConstraintViolationBuilder.php | 140 - .../ConstraintViolationBuilderInterface.php | 117 - vendor/symfony/validator/composer.json | 64 - vendor/symfony/var-dumper/CHANGELOG.md | 103 - .../symfony/var-dumper/Caster/AmqpCaster.php | 212 - vendor/symfony/var-dumper/Caster/ArgsStub.php | 80 - vendor/symfony/var-dumper/Caster/Caster.php | 198 - .../symfony/var-dumper/Caster/ClassStub.php | 104 - .../symfony/var-dumper/Caster/ConstStub.php | 33 - .../var-dumper/Caster/CutArrayStub.php | 30 - vendor/symfony/var-dumper/Caster/CutStub.php | 64 - .../symfony/var-dumper/Caster/DOMCaster.php | 316 - .../symfony/var-dumper/Caster/DateCaster.php | 127 - .../var-dumper/Caster/DoctrineCaster.php | 62 - vendor/symfony/var-dumper/Caster/DsCaster.php | 70 - .../symfony/var-dumper/Caster/DsPairStub.php | 28 - vendor/symfony/var-dumper/Caster/EnumStub.php | 30 - .../var-dumper/Caster/ExceptionCaster.php | 395 - .../symfony/var-dumper/Caster/FFICaster.php | 171 - .../symfony/var-dumper/Caster/FiberCaster.php | 43 - .../symfony/var-dumper/Caster/FrameStub.php | 30 - .../symfony/var-dumper/Caster/GmpCaster.php | 32 - .../var-dumper/Caster/ImagineCaster.php | 37 - vendor/symfony/var-dumper/Caster/ImgStub.php | 26 - .../symfony/var-dumper/Caster/IntlCaster.php | 172 - vendor/symfony/var-dumper/Caster/LinkStub.php | 105 - .../var-dumper/Caster/MemcachedCaster.php | 81 - .../var-dumper/Caster/MysqliCaster.php | 33 - .../symfony/var-dumper/Caster/PdoCaster.php | 122 - .../symfony/var-dumper/Caster/PgSqlCaster.php | 156 - .../var-dumper/Caster/ProxyManagerCaster.php | 33 - .../var-dumper/Caster/RdKafkaCaster.php | 186 - .../symfony/var-dumper/Caster/RedisCaster.php | 150 - .../var-dumper/Caster/ReflectionCaster.php | 446 - .../var-dumper/Caster/ResourceCaster.php | 91 - .../symfony/var-dumper/Caster/ScalarStub.php | 27 - .../symfony/var-dumper/Caster/SplCaster.php | 256 - .../symfony/var-dumper/Caster/StubCaster.php | 92 - .../var-dumper/Caster/SymfonyCaster.php | 121 - .../symfony/var-dumper/Caster/TraceStub.php | 36 - .../var-dumper/Caster/UninitializedStub.php | 25 - .../symfony/var-dumper/Caster/UuidCaster.php | 30 - .../var-dumper/Caster/XmlReaderCaster.php | 92 - .../var-dumper/Caster/XmlResourceCaster.php | 63 - .../var-dumper/Cloner/AbstractCloner.php | 404 - .../var-dumper/Cloner/ClonerInterface.php | 23 - vendor/symfony/var-dumper/Cloner/Cursor.php | 43 - vendor/symfony/var-dumper/Cloner/Data.php | 429 - .../var-dumper/Cloner/DumperInterface.php | 53 - .../var-dumper/Cloner/Internal/NoDefault.php | 25 - vendor/symfony/var-dumper/Cloner/Stub.php | 75 - .../symfony/var-dumper/Cloner/VarCloner.php | 224 - .../Command/Descriptor/CliDescriptor.php | 79 - .../Descriptor/DumpDescriptorInterface.php | 23 - .../Command/Descriptor/HtmlDescriptor.php | 119 - .../var-dumper/Command/ServerDumpCommand.php | 112 - .../var-dumper/Dumper/AbstractDumper.php | 200 - .../symfony/var-dumper/Dumper/CliDumper.php | 655 - .../ContextProvider/CliContextProvider.php | 32 - .../ContextProviderInterface.php | 22 - .../RequestContextProvider.php | 51 - .../ContextProvider/SourceContextProvider.php | 126 - .../Dumper/ContextualizedDumper.php | 43 - .../var-dumper/Dumper/DataDumperInterface.php | 27 - .../symfony/var-dumper/Dumper/HtmlDumper.php | 970 -- .../var-dumper/Dumper/ServerDumper.php | 52 - .../Exception/ThrowingCasterException.php | 26 - vendor/symfony/var-dumper/README.md | 15 - .../Resources/css/htmlDescriptor.css | 130 - .../var-dumper/Resources/functions/dump.php | 68 - .../var-dumper/Resources/js/htmlDescriptor.js | 10 - .../symfony/var-dumper/Server/Connection.php | 97 - .../symfony/var-dumper/Server/DumpServer.php | 109 - .../var-dumper/Test/VarDumperTestTrait.php | 84 - vendor/symfony/var-dumper/VarDumper.php | 118 - vendor/symfony/var-dumper/composer.json | 44 - vendor/symfony/var-exporter/CHANGELOG.md | 25 - .../Exception/ClassNotFoundException.php | 20 - .../Exception/ExceptionInterface.php | 16 - .../var-exporter/Exception/LogicException.php | 16 - .../NotInstantiableTypeException.php | 20 - vendor/symfony/var-exporter/Hydrator.php | 78 - vendor/symfony/var-exporter/Instantiator.php | 59 - .../var-exporter/Internal/Exporter.php | 418 - .../var-exporter/Internal/Hydrator.php | 299 - .../Internal/LazyObjectRegistry.php | 138 - .../var-exporter/Internal/LazyObjectState.php | 97 - .../var-exporter/Internal/LazyObjectTrait.php | 34 - .../var-exporter/Internal/Reference.php | 28 - .../var-exporter/Internal/Registry.php | 142 - .../symfony/var-exporter/Internal/Values.php | 25 - .../symfony/var-exporter/LazyGhostTrait.php | 352 - .../var-exporter/LazyObjectInterface.php | 32 - .../symfony/var-exporter/LazyProxyTrait.php | 359 - vendor/symfony/var-exporter/ProxyHelper.php | 413 - vendor/symfony/var-exporter/README.md | 137 - vendor/symfony/var-exporter/VarExporter.php | 114 - vendor/symfony/var-exporter/composer.json | 33 - vendor/symfony/web-link/CHANGELOG.md | 12 - .../EventListener/AddLinkHeaderListener.php | 55 - .../symfony/web-link/GenericLinkProvider.php | 71 - .../symfony/web-link/HttpHeaderSerializer.php | 64 - vendor/symfony/web-link/Link.php | 228 - vendor/symfony/web-link/README.md | 42 - vendor/symfony/web-link/composer.json | 38 - .../web-profiler-bundle/.gitattributes | 3 - vendor/symfony/web-profiler-bundle/.gitignore | 4 - .../symfony/web-profiler-bundle/CHANGELOG.md | 117 - .../Controller/ExceptionPanelController.php | 58 - .../Controller/ProfilerController.php | 408 - .../Controller/RouterController.php | 100 - .../Csp/ContentSecurityPolicyHandler.php | 267 - .../Csp/NonceGenerator.php | 27 - .../DependencyInjection/Configuration.php | 44 - .../WebProfilerExtension.php | 69 - .../EventListener/WebDebugToolbarListener.php | 157 - .../Profiler/CodeExtension.php | 250 - .../Profiler/TemplateManager.php | 84 - vendor/symfony/web-profiler-bundle/README.md | 16 - .../Resources/config/profiler.php | 88 - .../Resources/config/routing/profiler.xml | 55 - .../Resources/config/routing/wdt.xml | 10 - .../config/schema/webprofiler-1.0.xsd | 14 - .../Resources/config/toolbar.php | 31 - .../Resources/fonts/JetBrainsMono.woff2 | Bin 114020 -> 0 bytes .../Resources/fonts/LICENSE.txt | 6 - .../Resources/views/Collector/ajax.html.twig | 35 - .../Resources/views/Collector/cache.html.twig | 178 - .../views/Collector/command.html.twig | 249 - .../views/Collector/config.html.twig | 292 - .../views/Collector/events.html.twig | 126 - .../views/Collector/exception.css.twig | 32 - .../views/Collector/exception.html.twig | 45 - .../Resources/views/Collector/form.html.twig | 704 -- .../views/Collector/http_client.html.twig | 175 - .../views/Collector/logger.html.twig | 581 - .../views/Collector/mailer.html.twig | 511 - .../views/Collector/memory.html.twig | 24 - .../views/Collector/messenger.html.twig | 215 - .../views/Collector/notifier.html.twig | 168 - .../views/Collector/request.html.twig | 431 - .../views/Collector/router.html.twig | 14 - .../views/Collector/serializer.html.twig | 355 - .../Resources/views/Collector/time.css.twig | 67 - .../Resources/views/Collector/time.html.twig | 249 - .../Resources/views/Collector/time.js | 457 - .../views/Collector/translation.html.twig | 206 - .../Resources/views/Collector/twig.html.twig | 168 - .../views/Collector/validator.html.twig | 132 - .../views/Collector/workflow.html.twig | 356 - .../Resources/views/Icon/LICENSE.txt | 26 - .../Resources/views/Icon/ajax.svg | 7 - .../Resources/views/Icon/alert-circle.svg | 6 - .../Resources/views/Icon/attachment.svg | 4 - .../Resources/views/Icon/cache.svg | 7 - .../Resources/views/Icon/chevron-down.svg | 4 - .../Resources/views/Icon/close.svg | 5 - .../Resources/views/Icon/command.svg | 6 - .../Resources/views/Icon/config.svg | 13 - .../Resources/views/Icon/download.svg | 6 - .../Resources/views/Icon/event.svg | 8 - .../Resources/views/Icon/exception.svg | 8 - .../Resources/views/Icon/file.svg | 5 - .../Resources/views/Icon/filter.svg | 4 - .../Resources/views/Icon/form.svg | 10 - .../Resources/views/Icon/forward.svg | 6 - .../Resources/views/Icon/http-client.svg | 9 - .../Resources/views/Icon/logger.svg | 8 - .../Resources/views/Icon/mailer.svg | 6 - .../Resources/views/Icon/memory.svg | 14 - .../Resources/views/Icon/menu.svg | 7 - .../Resources/views/Icon/messenger.svg | 8 - .../Resources/views/Icon/no.svg | 5 - .../Resources/views/Icon/notifier.svg | 7 - .../Resources/views/Icon/redirect.svg | 5 - .../Resources/views/Icon/referrer.svg | 4 - .../Resources/views/Icon/request.svg | 6 - .../Resources/views/Icon/router.svg | 9 - .../Resources/views/Icon/search.svg | 5 - .../Resources/views/Icon/serializer.svg | 7 - .../views/Icon/settings-theme-dark.svg | 4 - .../views/Icon/settings-theme-light.svg | 12 - .../views/Icon/settings-theme-system.svg | 5 - .../views/Icon/settings-width-fitted.svg | 8 - .../views/Icon/settings-width-fixed.svg | 4 - .../Resources/views/Icon/settings.svg | 5 - .../Resources/views/Icon/symfony.svg | 1 - .../Resources/views/Icon/time.svg | 10 - .../Resources/views/Icon/translation.svg | 8 - .../Resources/views/Icon/twig.svg | 7 - .../Resources/views/Icon/validator.svg | 7 - .../Resources/views/Icon/workflow.svg | 8 - .../Resources/views/Icon/yes.svg | 4 - .../views/Profiler/_command_summary.html.twig | 50 - .../views/Profiler/_request_summary.html.twig | 99 - .../views/Profiler/ajax_layout.html.twig | 1 - .../Resources/views/Profiler/bag.html.twig | 22 - .../Resources/views/Profiler/base.html.twig | 48 - .../views/Profiler/base_js.html.twig | 285 - .../Resources/views/Profiler/cancel.html.twig | 25 - .../Resources/views/Profiler/header.html.twig | 12 - .../Resources/views/Profiler/info.html.twig | 22 - .../Resources/views/Profiler/layout.html.twig | 76 - .../Resources/views/Profiler/open.css.twig | 79 - .../Resources/views/Profiler/open.html.twig | 64 - .../views/Profiler/profiler.css.twig | 1960 --- .../views/Profiler/results.html.twig | 137 - .../Resources/views/Profiler/search.html.twig | 93 - .../views/Profiler/settings.html.twig | 316 - .../Resources/views/Profiler/table.html.twig | 18 - .../Resources/views/Profiler/toolbar.css.twig | 685 -- .../views/Profiler/toolbar.html.twig | 46 - .../views/Profiler/toolbar_item.html.twig | 6 - .../views/Profiler/toolbar_js.html.twig | 659 - .../views/Profiler/toolbar_redirect.html.twig | 54 - .../Resources/views/Router/panel.html.twig | 71 - .../Mermaid/mermaid-flowchart-v2.min.js | 483 - .../Twig/WebProfilerExtension.php | 113 - .../web-profiler-bundle/WebProfilerBundle.php | 27 - .../symfony/web-profiler-bundle/composer.json | 45 - vendor/symfony/yaml/CHANGELOG.md | 263 - vendor/symfony/yaml/Command/LintCommand.php | 273 - vendor/symfony/yaml/Dumper.php | 178 - vendor/symfony/yaml/Escaper.php | 95 - .../symfony/yaml/Exception/DumpException.php | 21 - .../yaml/Exception/ExceptionInterface.php | 21 - .../symfony/yaml/Exception/ParseException.php | 121 - .../yaml/Exception/RuntimeException.php | 21 - vendor/symfony/yaml/Inline.php | 848 -- vendor/symfony/yaml/Parser.php | 1244 -- vendor/symfony/yaml/README.md | 13 - vendor/symfony/yaml/Tag/TaggedValue.php | 35 - vendor/symfony/yaml/Unescaper.php | 108 - vendor/symfony/yaml/Yaml.php | 97 - vendor/symfony/yaml/composer.json | 38 - vendor/theseer/tokenizer/CHANGELOG.md | 87 - vendor/theseer/tokenizer/README.md | 47 - vendor/theseer/tokenizer/composer.json | 27 - vendor/theseer/tokenizer/composer.lock | 22 - vendor/theseer/tokenizer/src/Exception.php | 5 - vendor/theseer/tokenizer/src/NamespaceUri.php | 25 - .../tokenizer/src/NamespaceUriException.php | 5 - vendor/theseer/tokenizer/src/Token.php | 35 - .../theseer/tokenizer/src/TokenCollection.php | 93 - .../src/TokenCollectionException.php | 5 - vendor/theseer/tokenizer/src/Tokenizer.php | 147 - .../theseer/tokenizer/src/XMLSerializer.php | 79 - vendor/twig/extra-bundle/.gitattributes | 2 - vendor/twig/extra-bundle/.gitignore | 5 - .../MissingExtensionSuggestorPass.php | 37 - .../DependencyInjection/Configuration.php | 37 - .../TwigExtraExtension.php | 47 - vendor/twig/extra-bundle/Extensions.php | 131 - .../LeagueCommonMarkConverterFactory.php | 42 - .../MissingExtensionSuggestor.php | 44 - vendor/twig/extra-bundle/README.md | 10 - .../extra-bundle/Resources/config/cache.php | 46 - .../Resources/config/cssinliner.php | 21 - .../extra-bundle/Resources/config/html.php | 21 - .../extra-bundle/Resources/config/inky.php | 21 - .../extra-bundle/Resources/config/intl.php | 21 - .../Resources/config/markdown.php | 32 - .../Resources/config/markdown_league.php | 31 - .../extra-bundle/Resources/config/string.php | 21 - .../Resources/config/suggestor.php | 20 - vendor/twig/extra-bundle/TwigExtraBundle.php | 27 - vendor/twig/extra-bundle/composer.json | 40 - vendor/twig/twig/README.rst | 23 - vendor/twig/twig/composer.json | 53 - vendor/twig/twig/src/AbstractTwigCallable.php | 136 - .../Attribute/FirstClassTwigCallableReady.php | 20 - vendor/twig/twig/src/Attribute/YieldReady.php | 20 - vendor/twig/twig/src/Cache/CacheInterface.php | 46 - vendor/twig/twig/src/Cache/ChainCache.php | 79 - .../twig/twig/src/Cache/FilesystemCache.php | 87 - vendor/twig/twig/src/Cache/NullCache.php | 38 - .../src/Cache/ReadOnlyFilesystemCache.php | 25 - vendor/twig/twig/src/Compiler.php | 257 - vendor/twig/twig/src/Environment.php | 881 -- vendor/twig/twig/src/Error/Error.php | 227 - vendor/twig/twig/src/Error/LoaderError.php | 21 - vendor/twig/twig/src/Error/RuntimeError.php | 22 - vendor/twig/twig/src/Error/SyntaxError.php | 46 - vendor/twig/twig/src/ExpressionParser.php | 853 -- .../twig/src/Extension/AbstractExtension.php | 45 - .../twig/twig/src/Extension/CoreExtension.php | 1970 --- .../twig/src/Extension/DebugExtension.php | 62 - .../twig/src/Extension/EscaperExtension.php | 200 - .../twig/src/Extension/ExtensionInterface.php | 75 - .../twig/src/Extension/GlobalsInterface.php | 25 - .../twig/src/Extension/OptimizerExtension.php | 27 - .../twig/src/Extension/ProfilerExtension.php | 52 - .../Extension/RuntimeExtensionInterface.php | 19 - .../twig/src/Extension/SandboxExtension.php | 135 - .../twig/src/Extension/StagingExtension.php | 100 - .../src/Extension/StringLoaderExtension.php | 40 - .../src/Extension/YieldNotReadyExtension.php | 30 - vendor/twig/twig/src/ExtensionSet.php | 488 - .../src/FileExtensionEscapingStrategy.php | 60 - vendor/twig/twig/src/Lexer.php | 584 - vendor/twig/twig/src/Loader/ArrayLoader.php | 75 - vendor/twig/twig/src/Loader/ChainLoader.php | 132 - .../twig/twig/src/Loader/FilesystemLoader.php | 283 - .../twig/twig/src/Loader/LoaderInterface.php | 49 - vendor/twig/twig/src/Markup.php | 52 - vendor/twig/twig/src/Node/AutoEscapeNode.php | 40 - vendor/twig/twig/src/Node/BlockNode.php | 50 - .../twig/twig/src/Node/BlockReferenceNode.php | 38 - vendor/twig/twig/src/Node/BodyNode.php | 24 - vendor/twig/twig/src/Node/CaptureNode.php | 57 - .../twig/src/Node/CheckSecurityCallNode.php | 30 - .../twig/twig/src/Node/CheckSecurityNode.php | 85 - .../twig/twig/src/Node/CheckToStringNode.php | 47 - vendor/twig/twig/src/Node/DeprecatedNode.php | 73 - vendor/twig/twig/src/Node/DoNode.php | 40 - vendor/twig/twig/src/Node/EmbedNode.php | 50 - .../Node/Expression/AbstractExpression.php | 28 - .../src/Node/Expression/ArrayExpression.php | 135 - .../Expression/ArrowFunctionExpression.php | 64 - .../Node/Expression/AssignNameExpression.php | 27 - .../Node/Expression/Binary/AbstractBinary.php | 42 - .../src/Node/Expression/Binary/AddBinary.php | 23 - .../src/Node/Expression/Binary/AndBinary.php | 23 - .../Expression/Binary/BitwiseAndBinary.php | 23 - .../Expression/Binary/BitwiseOrBinary.php | 23 - .../Expression/Binary/BitwiseXorBinary.php | 23 - .../Node/Expression/Binary/ConcatBinary.php | 23 - .../src/Node/Expression/Binary/DivBinary.php | 23 - .../Node/Expression/Binary/EndsWithBinary.php | 35 - .../Node/Expression/Binary/EqualBinary.php | 39 - .../Node/Expression/Binary/FloorDivBinary.php | 29 - .../Node/Expression/Binary/GreaterBinary.php | 39 - .../Expression/Binary/GreaterEqualBinary.php | 39 - .../Node/Expression/Binary/HasEveryBinary.php | 33 - .../Node/Expression/Binary/HasSomeBinary.php | 33 - .../src/Node/Expression/Binary/InBinary.php | 33 - .../src/Node/Expression/Binary/LessBinary.php | 39 - .../Expression/Binary/LessEqualBinary.php | 39 - .../Node/Expression/Binary/MatchesBinary.php | 33 - .../src/Node/Expression/Binary/ModBinary.php | 23 - .../src/Node/Expression/Binary/MulBinary.php | 23 - .../Node/Expression/Binary/NotEqualBinary.php | 39 - .../Node/Expression/Binary/NotInBinary.php | 33 - .../src/Node/Expression/Binary/OrBinary.php | 23 - .../Node/Expression/Binary/PowerBinary.php | 22 - .../Node/Expression/Binary/RangeBinary.php | 33 - .../Expression/Binary/SpaceshipBinary.php | 22 - .../Expression/Binary/StartsWithBinary.php | 35 - .../src/Node/Expression/Binary/SubBinary.php | 23 - .../Expression/BlockReferenceExpression.php | 87 - .../src/Node/Expression/CallExpression.php | 362 - .../Node/Expression/ConditionalExpression.php | 45 - .../Node/Expression/ConstantExpression.php | 31 - .../Node/Expression/Filter/DefaultFilter.php | 63 - .../src/Node/Expression/Filter/RawFilter.php | 36 - .../src/Node/Expression/FilterExpression.php | 73 - .../Node/Expression/FunctionExpression.php | 68 - .../FunctionNode/EnumCasesFunction.php | 41 - .../src/Node/Expression/GetAttrExpression.php | 87 - .../twig/src/Node/Expression/InlinePrint.php | 34 - .../Node/Expression/MethodCallExpression.php | 64 - .../src/Node/Expression/NameExpression.php | 107 - .../Expression/NullCoalesceExpression.php | 61 - .../src/Node/Expression/ParentExpression.php | 46 - .../Node/Expression/TempNameExpression.php | 31 - .../src/Node/Expression/Test/ConstantTest.php | 49 - .../src/Node/Expression/Test/DefinedTest.php | 81 - .../Node/Expression/Test/DivisiblebyTest.php | 36 - .../src/Node/Expression/Test/EvenTest.php | 35 - .../src/Node/Expression/Test/NullTest.php | 34 - .../twig/src/Node/Expression/Test/OddTest.php | 35 - .../src/Node/Expression/Test/SameasTest.php | 34 - .../src/Node/Expression/TestExpression.php | 66 - .../Node/Expression/Unary/AbstractUnary.php | 34 - .../src/Node/Expression/Unary/NegUnary.php | 23 - .../src/Node/Expression/Unary/NotUnary.php | 23 - .../src/Node/Expression/Unary/PosUnary.php | 23 - .../Node/Expression/VariadicExpression.php | 24 - vendor/twig/twig/src/Node/FlushNode.php | 40 - vendor/twig/twig/src/Node/ForLoopNode.php | 51 - vendor/twig/twig/src/Node/ForNode.php | 116 - vendor/twig/twig/src/Node/IfNode.php | 75 - vendor/twig/twig/src/Node/ImportNode.php | 75 - vendor/twig/twig/src/Node/IncludeNode.php | 110 - vendor/twig/twig/src/Node/MacroNode.php | 106 - vendor/twig/twig/src/Node/ModuleNode.php | 489 - vendor/twig/twig/src/Node/NameDeprecation.php | 46 - vendor/twig/twig/src/Node/Node.php | 281 - .../twig/src/Node/NodeCaptureInterface.php | 21 - .../twig/src/Node/NodeOutputInterface.php | 21 - vendor/twig/twig/src/Node/PrintNode.php | 44 - vendor/twig/twig/src/Node/SandboxNode.php | 54 - vendor/twig/twig/src/Node/SetNode.php | 96 - vendor/twig/twig/src/Node/TextNode.php | 41 - vendor/twig/twig/src/Node/TypesNode.php | 28 - vendor/twig/twig/src/Node/WithNode.php | 72 - vendor/twig/twig/src/NodeTraverser.php | 76 - .../src/NodeVisitor/AbstractNodeVisitor.php | 49 - .../src/NodeVisitor/EscaperNodeVisitor.php | 209 - .../MacroAutoImportNodeVisitor.php | 74 - .../src/NodeVisitor/NodeVisitorInterface.php | 46 - .../src/NodeVisitor/OptimizerNodeVisitor.php | 213 - .../NodeVisitor/SafeAnalysisNodeVisitor.php | 170 - .../src/NodeVisitor/SandboxNodeVisitor.php | 139 - .../NodeVisitor/YieldNotReadyNodeVisitor.php | 59 - vendor/twig/twig/src/Parser.php | 383 - .../twig/src/Profiler/Dumper/BaseDumper.php | 63 - .../src/Profiler/Dumper/BlackfireDumper.php | 72 - .../twig/src/Profiler/Dumper/HtmlDumper.php | 47 - .../twig/src/Profiler/Dumper/TextDumper.php | 35 - .../src/Profiler/Node/EnterProfileNode.php | 44 - .../src/Profiler/Node/LeaveProfileNode.php | 38 - .../NodeVisitor/ProfilerNodeVisitor.php | 69 - vendor/twig/twig/src/Profiler/Profile.php | 178 - vendor/twig/twig/src/Resources/core.php | 541 - vendor/twig/twig/src/Resources/debug.php | 25 - vendor/twig/twig/src/Resources/escaper.php | 51 - .../twig/twig/src/Resources/string_loader.php | 26 - .../twig/twig/src/Runtime/EscaperRuntime.php | 327 - .../RuntimeLoader/ContainerRuntimeLoader.php | 35 - .../RuntimeLoader/FactoryRuntimeLoader.php | 39 - .../RuntimeLoader/RuntimeLoaderInterface.php | 27 - .../twig/twig/src/Sandbox/SecurityError.php | 23 - .../Sandbox/SecurityNotAllowedFilterError.php | 33 - .../SecurityNotAllowedFunctionError.php | 33 - .../Sandbox/SecurityNotAllowedMethodError.php | 40 - .../SecurityNotAllowedPropertyError.php | 40 - .../Sandbox/SecurityNotAllowedTagError.php | 33 - .../twig/twig/src/Sandbox/SecurityPolicy.php | 130 - .../src/Sandbox/SecurityPolicyInterface.php | 45 - .../src/Sandbox/SourcePolicyInterface.php | 24 - vendor/twig/twig/src/Source.php | 47 - vendor/twig/twig/src/Template.php | 497 - vendor/twig/twig/src/TemplateWrapper.php | 90 - .../twig/src/Test/IntegrationTestCase.php | 288 - vendor/twig/twig/src/Test/NodeTestCase.php | 125 - vendor/twig/twig/src/Token.php | 180 - .../src/TokenParser/AbstractTokenParser.php | 32 - .../twig/src/TokenParser/ApplyTokenParser.php | 60 - .../src/TokenParser/AutoEscapeTokenParser.php | 58 - .../twig/src/TokenParser/BlockTokenParser.php | 75 - .../src/TokenParser/DeprecatedTokenParser.php | 66 - .../twig/src/TokenParser/DoTokenParser.php | 38 - .../twig/src/TokenParser/EmbedTokenParser.php | 73 - .../src/TokenParser/ExtendsTokenParser.php | 49 - .../twig/src/TokenParser/FlushTokenParser.php | 38 - .../twig/src/TokenParser/ForTokenParser.php | 78 - .../twig/src/TokenParser/FromTokenParser.php | 66 - .../twig/src/TokenParser/IfTokenParser.php | 89 - .../src/TokenParser/ImportTokenParser.php | 44 - .../src/TokenParser/IncludeTokenParser.php | 69 - .../twig/src/TokenParser/MacroTokenParser.php | 66 - .../src/TokenParser/SandboxTokenParser.php | 66 - .../twig/src/TokenParser/SetTokenParser.php | 73 - .../src/TokenParser/TokenParserInterface.php | 46 - .../twig/src/TokenParser/TypesTokenParser.php | 86 - .../twig/src/TokenParser/UseTokenParser.php | 73 - .../twig/src/TokenParser/WithTokenParser.php | 56 - vendor/twig/twig/src/TokenStream.php | 129 - .../twig/twig/src/TwigCallableInterface.php | 53 - vendor/twig/twig/src/TwigFilter.php | 74 - vendor/twig/twig/src/TwigFunction.php | 63 - vendor/twig/twig/src/TwigTest.php | 67 - .../src/Util/CallableArgumentsExtractor.php | 204 - .../twig/src/Util/DeprecationCollector.php | 77 - .../twig/twig/src/Util/ReflectionCallable.php | 92 - .../twig/src/Util/TemplateDirIterator.php | 36 - vendor/webmozart/assert/CHANGELOG.md | 207 - vendor/webmozart/assert/README.md | 287 - vendor/webmozart/assert/composer.json | 43 - vendor/webmozart/assert/src/Assert.php | 2080 ---- .../assert/src/InvalidArgumentException.php | 16 - vendor/webmozart/assert/src/Mixin.php | 5089 -------- 8418 files changed, 1190467 deletions(-) delete mode 100644 vendor/composer/ClassLoader.php delete mode 100644 vendor/composer/InstalledVersions.php delete mode 100644 vendor/composer/autoload_classmap.php delete mode 100644 vendor/composer/autoload_files.php delete mode 100644 vendor/composer/autoload_namespaces.php delete mode 100644 vendor/composer/autoload_psr4.php delete mode 100644 vendor/composer/autoload_real.php delete mode 100644 vendor/composer/autoload_static.php delete mode 100644 vendor/composer/installed.json delete mode 100644 vendor/composer/installed.php delete mode 100644 vendor/composer/platform_check.php delete mode 100644 vendor/composer/semver/CHANGELOG.md delete mode 100644 vendor/composer/semver/README.md delete mode 100644 vendor/composer/semver/composer.json delete mode 100644 vendor/composer/semver/src/Comparator.php delete mode 100644 vendor/composer/semver/src/CompilingMatcher.php delete mode 100644 vendor/composer/semver/src/Constraint/Bound.php delete mode 100644 vendor/composer/semver/src/Constraint/Constraint.php delete mode 100644 vendor/composer/semver/src/Constraint/ConstraintInterface.php delete mode 100644 vendor/composer/semver/src/Constraint/MatchAllConstraint.php delete mode 100644 vendor/composer/semver/src/Constraint/MatchNoneConstraint.php delete mode 100644 vendor/composer/semver/src/Constraint/MultiConstraint.php delete mode 100644 vendor/composer/semver/src/Interval.php delete mode 100644 vendor/composer/semver/src/Intervals.php delete mode 100644 vendor/composer/semver/src/Semver.php delete mode 100644 vendor/composer/semver/src/VersionParser.php delete mode 100644 vendor/doctrine/cache/README.md delete mode 100644 vendor/doctrine/cache/UPGRADE-1.11.md delete mode 100644 vendor/doctrine/cache/UPGRADE-1.4.md delete mode 100644 vendor/doctrine/cache/composer.json delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/FlushableCache.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/MultiDeleteCache.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/MultiGetCache.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/MultiOperationCache.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/MultiPutCache.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheAdapter.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheItem.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/DoctrineProvider.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/InvalidArgument.php delete mode 100644 vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/TypedCacheItem.php delete mode 100644 vendor/doctrine/collections/CONTRIBUTING.md delete mode 100644 vendor/doctrine/collections/README.md delete mode 100644 vendor/doctrine/collections/UPGRADE.md delete mode 100644 vendor/doctrine/collections/composer.json delete mode 100644 vendor/doctrine/collections/docs/en/derived-collections.rst delete mode 100644 vendor/doctrine/collections/docs/en/expression-builder.rst delete mode 100644 vendor/doctrine/collections/docs/en/expressions.rst delete mode 100644 vendor/doctrine/collections/docs/en/index.rst delete mode 100644 vendor/doctrine/collections/docs/en/lazy-collections.rst delete mode 100644 vendor/doctrine/collections/docs/en/serialization.rst delete mode 100644 vendor/doctrine/collections/docs/en/sidebar.rst delete mode 100644 vendor/doctrine/collections/src/AbstractLazyCollection.php delete mode 100644 vendor/doctrine/collections/src/ArrayCollection.php delete mode 100644 vendor/doctrine/collections/src/Collection.php delete mode 100644 vendor/doctrine/collections/src/Criteria.php delete mode 100644 vendor/doctrine/collections/src/Expr/ClosureExpressionVisitor.php delete mode 100644 vendor/doctrine/collections/src/Expr/Comparison.php delete mode 100644 vendor/doctrine/collections/src/Expr/CompositeExpression.php delete mode 100644 vendor/doctrine/collections/src/Expr/Expression.php delete mode 100644 vendor/doctrine/collections/src/Expr/ExpressionVisitor.php delete mode 100644 vendor/doctrine/collections/src/Expr/Value.php delete mode 100644 vendor/doctrine/collections/src/ExpressionBuilder.php delete mode 100644 vendor/doctrine/collections/src/Order.php delete mode 100644 vendor/doctrine/collections/src/ReadableCollection.php delete mode 100644 vendor/doctrine/collections/src/Selectable.php delete mode 100644 vendor/doctrine/dbal/CONTRIBUTING.md delete mode 100644 vendor/doctrine/dbal/README.md delete mode 100644 vendor/doctrine/dbal/bin/doctrine-dbal.php delete mode 100644 vendor/doctrine/dbal/composer.json delete mode 100644 vendor/doctrine/dbal/src/ArrayParameterType.php delete mode 100644 vendor/doctrine/dbal/src/ArrayParameters/Exception.php delete mode 100644 vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingNamedParameter.php delete mode 100644 vendor/doctrine/dbal/src/ArrayParameters/Exception/MissingPositionalParameter.php delete mode 100644 vendor/doctrine/dbal/src/Cache/ArrayResult.php delete mode 100644 vendor/doctrine/dbal/src/Cache/CacheException.php delete mode 100644 vendor/doctrine/dbal/src/Cache/QueryCacheProfile.php delete mode 100644 vendor/doctrine/dbal/src/ColumnCase.php delete mode 100644 vendor/doctrine/dbal/src/Configuration.php delete mode 100644 vendor/doctrine/dbal/src/Connection.php delete mode 100644 vendor/doctrine/dbal/src/ConnectionException.php delete mode 100644 vendor/doctrine/dbal/src/Connections/PrimaryReadReplicaConnection.php delete mode 100644 vendor/doctrine/dbal/src/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/API/ExceptionConverter.php delete mode 100644 vendor/doctrine/dbal/src/Driver/API/IBMDB2/ExceptionConverter.php delete mode 100644 vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php delete mode 100644 vendor/doctrine/dbal/src/Driver/API/OCI/ExceptionConverter.php delete mode 100644 vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php delete mode 100644 vendor/doctrine/dbal/src/Driver/API/SQLSrv/ExceptionConverter.php delete mode 100644 vendor/doctrine/dbal/src/Driver/API/SQLite/ExceptionConverter.php delete mode 100644 vendor/doctrine/dbal/src/Driver/API/SQLite/UserDefinedFunctions.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractException.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractOracleDriver/EasyConnectString.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver/Exception/PortWithoutHost.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/AbstractSQLiteDriver/Middleware/EnableForeignKeys.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Exception.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Exception/UnknownParameterType.php delete mode 100644 vendor/doctrine/dbal/src/Driver/FetchUtils.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/DataSourceName.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCopyStreamToStream.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCreateTemporaryFile.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/ConnectionError.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/ConnectionFailed.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/Factory.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/PrepareFailed.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/StatementError.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Result.php delete mode 100644 vendor/doctrine/dbal/src/Driver/IBMDB2/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Middleware.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Middleware/AbstractConnectionMiddleware.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Exception/ConnectionError.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Exception/ConnectionFailed.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Exception/FailedReadingStreamOffset.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Exception/HostRequired.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidCharset.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidOption.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Exception/NonStreamResourceUsedAsLargeObject.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Exception/StatementError.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Initializer.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Charset.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Options.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Secure.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Result.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/ConvertPositionalToNamedPlaceholders.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Exception/ConnectionFailed.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Exception/Error.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Exception/InvalidConfiguration.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Exception/NonTerminatedStringLiteral.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Exception/SequenceDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Exception/UnknownParameterIndex.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/ExecutionMode.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Middleware/InitializeSession.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Result.php delete mode 100644 vendor/doctrine/dbal/src/Driver/OCI8/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/Exception.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/PDOException.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/ParameterTypeMap.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/Result.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PDO/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PgSQL/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PgSQL/ConvertParameters.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PgSQL/Exception.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PgSQL/Exception/UnexpectedValue.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PgSQL/Exception/UnknownParameter.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PgSQL/Result.php delete mode 100644 vendor/doctrine/dbal/src/Driver/PgSQL/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Result.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLSrv/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLSrv/Exception/Error.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLSrv/Result.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLite3/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLite3/Exception.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLite3/Result.php delete mode 100644 vendor/doctrine/dbal/src/Driver/SQLite3/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Driver/ServerInfoAwareConnection.php delete mode 100644 vendor/doctrine/dbal/src/Driver/Statement.php delete mode 100644 vendor/doctrine/dbal/src/DriverManager.php delete mode 100644 vendor/doctrine/dbal/src/Event/ConnectionEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php delete mode 100644 vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php delete mode 100644 vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaAlterTableAddColumnEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaAlterTableChangeColumnEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaAlterTableEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaAlterTableRemoveColumnEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaAlterTableRenameColumnEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaColumnDefinitionEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaCreateTableColumnEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaCreateTableEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaDropTableEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/SchemaIndexDefinitionEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/TransactionBeginEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/TransactionCommitEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/TransactionEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Event/TransactionRollBackEventArgs.php delete mode 100644 vendor/doctrine/dbal/src/Events.php delete mode 100644 vendor/doctrine/dbal/src/Exception.php delete mode 100644 vendor/doctrine/dbal/src/Exception/ConnectionException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/ConnectionLost.php delete mode 100644 vendor/doctrine/dbal/src/Exception/ConstraintViolationException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/DatabaseDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Exception/DatabaseObjectExistsException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/DatabaseObjectNotFoundException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/DatabaseRequired.php delete mode 100644 vendor/doctrine/dbal/src/Exception/DeadlockException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/DriverException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/ForeignKeyConstraintViolationException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/InvalidArgumentException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/InvalidFieldNameException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/InvalidLockMode.php delete mode 100644 vendor/doctrine/dbal/src/Exception/LockWaitTimeoutException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/MalformedDsnException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/NoKeyValue.php delete mode 100644 vendor/doctrine/dbal/src/Exception/NonUniqueFieldNameException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/NotNullConstraintViolationException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/ReadOnlyException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/RetryableException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/SchemaDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Exception/ServerException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/SyntaxErrorException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/TableExistsException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/TableNotFoundException.php delete mode 100644 vendor/doctrine/dbal/src/Exception/UniqueConstraintViolationException.php delete mode 100644 vendor/doctrine/dbal/src/ExpandArrayParameters.php delete mode 100644 vendor/doctrine/dbal/src/FetchMode.php delete mode 100644 vendor/doctrine/dbal/src/Id/TableGenerator.php delete mode 100644 vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php delete mode 100644 vendor/doctrine/dbal/src/LockMode.php delete mode 100644 vendor/doctrine/dbal/src/Logging/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Logging/DebugStack.php delete mode 100644 vendor/doctrine/dbal/src/Logging/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Logging/LoggerChain.php delete mode 100644 vendor/doctrine/dbal/src/Logging/Middleware.php delete mode 100644 vendor/doctrine/dbal/src/Logging/SQLLogger.php delete mode 100644 vendor/doctrine/dbal/src/Logging/Statement.php delete mode 100644 vendor/doctrine/dbal/src/ParameterType.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/AbstractMySQLPlatform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/DB2111Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/DB2Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/DateIntervalUnit.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/DB2Keywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/KeywordList.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/MariaDb102Keywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/MySQL57Keywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/MySQL80Keywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/MySQL84Keywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/MySQLKeywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/OracleKeywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQL100Keywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQL94Keywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/PostgreSQLKeywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/ReservedKeywordsValidator.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/SQLServer2012Keywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/SQLServerKeywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/Keywords/SQLiteKeywords.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MariaDBPlatform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MariaDb1010Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MariaDb1027Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MariaDb1043Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MariaDb1052Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MariaDb1060Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider/CachingCollationMetadataProvider.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider/ConnectionCollationMetadataProvider.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MySQL/Comparator.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MySQL84Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/MySQLPlatform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/OraclePlatform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/PostgreSQL100Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/PostgreSQL120Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/PostgreSQL94Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/PostgreSQLPlatform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/SQLServer/Comparator.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/SQLServer/SQL/Builder/SQLServerSelectSQLBuilder.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/SQLServer2012Platform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/SQLServerPlatform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/SQLite/Comparator.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php delete mode 100644 vendor/doctrine/dbal/src/Platforms/TrimMode.php delete mode 100644 vendor/doctrine/dbal/src/Portability/Connection.php delete mode 100644 vendor/doctrine/dbal/src/Portability/Converter.php delete mode 100644 vendor/doctrine/dbal/src/Portability/Driver.php delete mode 100644 vendor/doctrine/dbal/src/Portability/Middleware.php delete mode 100644 vendor/doctrine/dbal/src/Portability/OptimizeFlags.php delete mode 100644 vendor/doctrine/dbal/src/Portability/Result.php delete mode 100644 vendor/doctrine/dbal/src/Portability/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Query.php delete mode 100644 vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php delete mode 100644 vendor/doctrine/dbal/src/Query/Expression/ExpressionBuilder.php delete mode 100644 vendor/doctrine/dbal/src/Query/ForUpdate.php delete mode 100644 vendor/doctrine/dbal/src/Query/ForUpdate/ConflictResolutionMode.php delete mode 100644 vendor/doctrine/dbal/src/Query/Limit.php delete mode 100644 vendor/doctrine/dbal/src/Query/QueryBuilder.php delete mode 100644 vendor/doctrine/dbal/src/Query/QueryException.php delete mode 100644 vendor/doctrine/dbal/src/Query/SelectQuery.php delete mode 100644 vendor/doctrine/dbal/src/Result.php delete mode 100644 vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php delete mode 100644 vendor/doctrine/dbal/src/SQL/Builder/DefaultSelectSQLBuilder.php delete mode 100644 vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php delete mode 100644 vendor/doctrine/dbal/src/SQL/Builder/SelectSQLBuilder.php delete mode 100644 vendor/doctrine/dbal/src/SQL/Parser.php delete mode 100644 vendor/doctrine/dbal/src/SQL/Parser/Exception.php delete mode 100644 vendor/doctrine/dbal/src/SQL/Parser/Exception/RegularExpressionError.php delete mode 100644 vendor/doctrine/dbal/src/SQL/Parser/Visitor.php delete mode 100644 vendor/doctrine/dbal/src/Schema/AbstractAsset.php delete mode 100644 vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Column.php delete mode 100644 vendor/doctrine/dbal/src/Schema/ColumnDiff.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Comparator.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Constraint.php delete mode 100644 vendor/doctrine/dbal/src/Schema/DB2SchemaManager.php delete mode 100644 vendor/doctrine/dbal/src/Schema/DefaultSchemaManagerFactory.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/ColumnAlreadyExists.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/ColumnDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/ForeignKeyDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/IndexAlreadyExists.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/IndexDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/IndexNameInvalid.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/InvalidTableName.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/NamedForeignKeyRequired.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/NamespaceAlreadyExists.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/SequenceAlreadyExists.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/SequenceDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/TableAlreadyExists.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/TableDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/UniqueConstraintDoesNotExist.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Exception/UnknownColumnOption.php delete mode 100644 vendor/doctrine/dbal/src/Schema/ForeignKeyConstraint.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Identifier.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Index.php delete mode 100644 vendor/doctrine/dbal/src/Schema/LegacySchemaManagerFactory.php delete mode 100644 vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php delete mode 100644 vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php delete mode 100644 vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php delete mode 100644 vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Schema.php delete mode 100644 vendor/doctrine/dbal/src/Schema/SchemaConfig.php delete mode 100644 vendor/doctrine/dbal/src/Schema/SchemaDiff.php delete mode 100644 vendor/doctrine/dbal/src/Schema/SchemaException.php delete mode 100644 vendor/doctrine/dbal/src/Schema/SchemaManagerFactory.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Sequence.php delete mode 100644 vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Table.php delete mode 100644 vendor/doctrine/dbal/src/Schema/TableDiff.php delete mode 100644 vendor/doctrine/dbal/src/Schema/UniqueConstraint.php delete mode 100644 vendor/doctrine/dbal/src/Schema/View.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Visitor/CreateSchemaSqlCollector.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Visitor/NamespaceVisitor.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Visitor/RemoveNamespacedAssets.php delete mode 100644 vendor/doctrine/dbal/src/Schema/Visitor/Visitor.php delete mode 100644 vendor/doctrine/dbal/src/Statement.php delete mode 100644 vendor/doctrine/dbal/src/Tools/Console/Command/CommandCompatibility.php delete mode 100644 vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php delete mode 100644 vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php delete mode 100644 vendor/doctrine/dbal/src/Tools/Console/ConnectionNotFound.php delete mode 100644 vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider.php delete mode 100644 vendor/doctrine/dbal/src/Tools/Console/ConnectionProvider/SingleConnectionProvider.php delete mode 100644 vendor/doctrine/dbal/src/Tools/Console/ConsoleRunner.php delete mode 100644 vendor/doctrine/dbal/src/Tools/DsnParser.php delete mode 100644 vendor/doctrine/dbal/src/TransactionIsolationLevel.php delete mode 100644 vendor/doctrine/dbal/src/Types/ArrayType.php delete mode 100644 vendor/doctrine/dbal/src/Types/AsciiStringType.php delete mode 100644 vendor/doctrine/dbal/src/Types/BigIntType.php delete mode 100644 vendor/doctrine/dbal/src/Types/BinaryType.php delete mode 100644 vendor/doctrine/dbal/src/Types/BlobType.php delete mode 100644 vendor/doctrine/dbal/src/Types/BooleanType.php delete mode 100644 vendor/doctrine/dbal/src/Types/ConversionException.php delete mode 100644 vendor/doctrine/dbal/src/Types/DateImmutableType.php delete mode 100644 vendor/doctrine/dbal/src/Types/DateIntervalType.php delete mode 100644 vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php delete mode 100644 vendor/doctrine/dbal/src/Types/DateTimeType.php delete mode 100644 vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php delete mode 100644 vendor/doctrine/dbal/src/Types/DateTimeTzType.php delete mode 100644 vendor/doctrine/dbal/src/Types/DateType.php delete mode 100644 vendor/doctrine/dbal/src/Types/DecimalType.php delete mode 100644 vendor/doctrine/dbal/src/Types/FloatType.php delete mode 100644 vendor/doctrine/dbal/src/Types/GuidType.php delete mode 100644 vendor/doctrine/dbal/src/Types/IntegerType.php delete mode 100644 vendor/doctrine/dbal/src/Types/JsonType.php delete mode 100644 vendor/doctrine/dbal/src/Types/ObjectType.php delete mode 100644 vendor/doctrine/dbal/src/Types/PhpDateTimeMappingType.php delete mode 100644 vendor/doctrine/dbal/src/Types/PhpIntegerMappingType.php delete mode 100644 vendor/doctrine/dbal/src/Types/SimpleArrayType.php delete mode 100644 vendor/doctrine/dbal/src/Types/SmallIntType.php delete mode 100644 vendor/doctrine/dbal/src/Types/StringType.php delete mode 100644 vendor/doctrine/dbal/src/Types/TextType.php delete mode 100644 vendor/doctrine/dbal/src/Types/TimeImmutableType.php delete mode 100644 vendor/doctrine/dbal/src/Types/TimeType.php delete mode 100644 vendor/doctrine/dbal/src/Types/Type.php delete mode 100644 vendor/doctrine/dbal/src/Types/TypeRegistry.php delete mode 100644 vendor/doctrine/dbal/src/Types/Types.php delete mode 100644 vendor/doctrine/dbal/src/Types/VarDateTimeImmutableType.php delete mode 100644 vendor/doctrine/dbal/src/Types/VarDateTimeType.php delete mode 100644 vendor/doctrine/dbal/src/VersionAwarePlatformDriver.php delete mode 100644 vendor/doctrine/deprecations/README.md delete mode 100644 vendor/doctrine/deprecations/composer.json delete mode 100644 vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php delete mode 100644 vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php delete mode 100644 vendor/doctrine/doctrine-bundle/README.md delete mode 100644 vendor/doctrine/doctrine-bundle/UPGRADE-2.10.md delete mode 100644 vendor/doctrine/doctrine-bundle/UPGRADE-2.12.md delete mode 100644 vendor/doctrine/doctrine-bundle/UPGRADE-2.13.md delete mode 100644 vendor/doctrine/doctrine-bundle/UPGRADE-3.0.md delete mode 100644 vendor/doctrine/doctrine-bundle/composer.json delete mode 100644 vendor/doctrine/doctrine-bundle/config/dbal.xml delete mode 100644 vendor/doctrine/doctrine-bundle/config/messenger.xml delete mode 100644 vendor/doctrine/doctrine-bundle/config/middlewares.xml delete mode 100644 vendor/doctrine/doctrine-bundle/config/orm.xml delete mode 100644 vendor/doctrine/doctrine-bundle/config/schema/doctrine-1.0.xsd delete mode 100644 vendor/doctrine/doctrine-bundle/src/Attribute/AsDoctrineListener.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Attribute/AsEntityListener.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Attribute/AsMiddleware.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/CacheWarmer/DoctrineMetadataCacheWarmer.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/CreateDatabaseDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/DoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/DropDatabaseDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/ImportMappingDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearMetadataCacheDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearQueryCacheDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearResultCacheDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/CollectionRegionDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/ConvertMappingDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/CreateSchemaDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/DoctrineCommandHelper.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/DropSchemaDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/EnsureProductionSettingsDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/EntityRegionCacheDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/InfoDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/OrmProxyCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/QueryRegionCacheDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/RunDqlDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/RunSqlDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/UpdateSchemaDoctrineCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Command/Proxy/ValidateSchemaCommand.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/ConnectionFactory.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Controller/ProfilerController.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DataCollector/DoctrineDataCollector.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Dbal/BlacklistSchemaAssetFilter.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Dbal/ManagerRegistryAwareConnectionProvider.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Dbal/RegexSchemaAssetFilter.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Dbal/SchemaAssetsFilterManager.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/CacheCompatibilityPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/CacheSchemaSubscriberPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/DbalSchemaFilterPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/DoctrineOrmMappingsPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/EntityListenerPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/IdGeneratorPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/MiddlewaresPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/RemoveLoggingMiddlewarePass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/RemoveProfilerControllerPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/ServiceRepositoryCompilerPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/WellKnownSchemaFilterPass.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/Configuration.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DependencyInjection/DoctrineExtension.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/DoctrineBundle.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/EventSubscriber/EventSubscriberInterface.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/ManagerConfigurator.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataCollection.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataFactory.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Mapping/ContainerEntityListenerResolver.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Mapping/DisconnectedMetadataFactory.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Mapping/EntityListenerServiceResolver.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Mapping/MappingDriver.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Middleware/BacktraceDebugDataHolder.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Middleware/ConnectionNameAwareInterface.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Middleware/DebugMiddleware.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Middleware/IdleConnectionMiddleware.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Orm/ManagerRegistryAwareEntityManagerProvider.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Registry.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Repository/ContainerRepositoryFactory.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Repository/LazyServiceEntityRepository.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Repository/RepositoryFactoryCompatibility.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepository.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepositoryInterface.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepositoryProxy.php delete mode 100644 vendor/doctrine/doctrine-bundle/src/Twig/DoctrineExtension.php delete mode 100644 vendor/doctrine/doctrine-bundle/templates/Collector/database.svg delete mode 100644 vendor/doctrine/doctrine-bundle/templates/Collector/db.html.twig delete mode 100644 vendor/doctrine/doctrine-bundle/templates/Collector/explain.html.twig delete mode 100644 vendor/doctrine/doctrine-bundle/templates/Collector/icon.svg delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/.symfony.bundle.yaml delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/Collector/MigrationsCollector.php delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/Collector/MigrationsFlattener.php delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/CompilerPass/ConfigureDependencyFactoryPass.php delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/Configuration.php delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/DoctrineMigrationsExtension.php delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/DoctrineMigrationsBundle.php delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/MigrationsFactory/ContainerAwareMigrationFactory.php delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/README.markdown delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/Resources/config/schema/doctrine_migrations-3.0.xsd delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/Resources/config/services.xml delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/Resources/doc/index.rst delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/icon-v3.svg delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/icon.svg delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/migrations.html.twig delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/UPGRADE.md delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/composer.json delete mode 100644 vendor/doctrine/doctrine-migrations-bundle/phpstan-baseline.neon delete mode 100644 vendor/doctrine/event-manager/README.md delete mode 100644 vendor/doctrine/event-manager/UPGRADE.md delete mode 100644 vendor/doctrine/event-manager/composer.json delete mode 100644 vendor/doctrine/event-manager/psalm-baseline.xml delete mode 100644 vendor/doctrine/event-manager/src/EventArgs.php delete mode 100644 vendor/doctrine/event-manager/src/EventManager.php delete mode 100644 vendor/doctrine/event-manager/src/EventSubscriber.php delete mode 100644 vendor/doctrine/inflector/README.md delete mode 100644 vendor/doctrine/inflector/composer.json delete mode 100644 vendor/doctrine/inflector/docs/en/index.rst delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Language.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/LanguageInflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/NoopWordInflector.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Inflectible.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/InflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Rules.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Inflectible.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/InflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Rules.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Inflectible.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/InflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Rules.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Pattern.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/InflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Rules.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Ruleset.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/InflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Rules.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitution.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/InflectorFactory.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Rules.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Word.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php delete mode 100644 vendor/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php delete mode 100644 vendor/doctrine/instantiator/.doctrine-project.json delete mode 100644 vendor/doctrine/instantiator/CONTRIBUTING.md delete mode 100644 vendor/doctrine/instantiator/README.md delete mode 100644 vendor/doctrine/instantiator/composer.json delete mode 100644 vendor/doctrine/instantiator/docs/en/index.rst delete mode 100644 vendor/doctrine/instantiator/docs/en/sidebar.rst delete mode 100644 vendor/doctrine/instantiator/psalm.xml delete mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php delete mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/InvalidArgumentException.php delete mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php delete mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php delete mode 100644 vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php delete mode 100644 vendor/doctrine/lexer/README.md delete mode 100644 vendor/doctrine/lexer/UPGRADE.md delete mode 100644 vendor/doctrine/lexer/composer.json delete mode 100644 vendor/doctrine/lexer/src/AbstractLexer.php delete mode 100644 vendor/doctrine/lexer/src/Token.php delete mode 100644 vendor/doctrine/migrations/README.md delete mode 100644 vendor/doctrine/migrations/UPGRADE.md delete mode 100644 vendor/doctrine/migrations/bin/doctrine-migrations.php delete mode 100644 vendor/doctrine/migrations/composer.json delete mode 100644 vendor/doctrine/migrations/src/AbstractMigration.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Configuration.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Connection/ConfigurationFile.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Connection/ConnectionLoader.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Connection/ConnectionRegistryConnection.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Connection/Exception/ConnectionNotSpecified.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Connection/Exception/FileNotFound.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Connection/Exception/InvalidConfiguration.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Connection/Exception/LoaderException.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Connection/ExistingConnection.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/EntityManager/ConfigurationFile.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/EntityManager/EntityManagerLoader.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/EntityManager/Exception/FileNotFound.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/EntityManager/Exception/InvalidConfiguration.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/EntityManager/Exception/LoaderException.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/EntityManager/ExistingEntityManager.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/EntityManager/ManagerRegistryEntityManager.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Exception/ConfigurationException.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Exception/FileNotFound.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Exception/FrozenConfiguration.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Exception/InvalidLoader.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Exception/UnknownConfigurationValue.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationArray.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationFile.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationFileWithFallback.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationLoader.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/Exception/InvalidConfigurationFormat.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/Exception/InvalidConfigurationKey.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/Exception/JsonNotValid.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/Exception/MissingConfigurationFile.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/Exception/XmlNotValid.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/Exception/YamlNotAvailable.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/Exception/YamlNotValid.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/ExistingConfiguration.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/FormattedFile.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/JsonFile.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/PhpFile.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/XML/configuration.xsd delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/XmlFile.php delete mode 100644 vendor/doctrine/migrations/src/Configuration/Migration/YamlFile.php delete mode 100644 vendor/doctrine/migrations/src/DbalMigrator.php delete mode 100644 vendor/doctrine/migrations/src/DependencyFactory.php delete mode 100644 vendor/doctrine/migrations/src/Event/Listeners/AutoCommitListener.php delete mode 100644 vendor/doctrine/migrations/src/Event/MigrationsEventArgs.php delete mode 100644 vendor/doctrine/migrations/src/Event/MigrationsVersionEventArgs.php delete mode 100644 vendor/doctrine/migrations/src/EventDispatcher.php delete mode 100644 vendor/doctrine/migrations/src/Events.php delete mode 100644 vendor/doctrine/migrations/src/Exception/AbortMigration.php delete mode 100644 vendor/doctrine/migrations/src/Exception/AlreadyAtVersion.php delete mode 100644 vendor/doctrine/migrations/src/Exception/ControlException.php delete mode 100644 vendor/doctrine/migrations/src/Exception/DependencyException.php delete mode 100644 vendor/doctrine/migrations/src/Exception/DuplicateMigrationVersion.php delete mode 100644 vendor/doctrine/migrations/src/Exception/FrozenDependencies.php delete mode 100644 vendor/doctrine/migrations/src/Exception/FrozenMigration.php delete mode 100644 vendor/doctrine/migrations/src/Exception/IrreversibleMigration.php delete mode 100644 vendor/doctrine/migrations/src/Exception/MetadataStorageError.php delete mode 100644 vendor/doctrine/migrations/src/Exception/MigrationClassNotFound.php delete mode 100644 vendor/doctrine/migrations/src/Exception/MigrationConfigurationConflict.php delete mode 100644 vendor/doctrine/migrations/src/Exception/MigrationException.php delete mode 100644 vendor/doctrine/migrations/src/Exception/MigrationNotAvailable.php delete mode 100644 vendor/doctrine/migrations/src/Exception/MigrationNotExecuted.php delete mode 100644 vendor/doctrine/migrations/src/Exception/MissingDependency.php delete mode 100644 vendor/doctrine/migrations/src/Exception/NoMigrationsFoundWithCriteria.php delete mode 100644 vendor/doctrine/migrations/src/Exception/NoMigrationsToExecute.php delete mode 100644 vendor/doctrine/migrations/src/Exception/NoTablesFound.php delete mode 100644 vendor/doctrine/migrations/src/Exception/PlanAlreadyExecuted.php delete mode 100644 vendor/doctrine/migrations/src/Exception/RollupFailed.php delete mode 100644 vendor/doctrine/migrations/src/Exception/SkipMigration.php delete mode 100644 vendor/doctrine/migrations/src/Exception/UnknownMigrationVersion.php delete mode 100644 vendor/doctrine/migrations/src/FileQueryWriter.php delete mode 100644 vendor/doctrine/migrations/src/FilesystemMigrationsRepository.php delete mode 100644 vendor/doctrine/migrations/src/Finder/Exception/FinderException.php delete mode 100644 vendor/doctrine/migrations/src/Finder/Exception/InvalidDirectory.php delete mode 100644 vendor/doctrine/migrations/src/Finder/Exception/NameIsReserved.php delete mode 100644 vendor/doctrine/migrations/src/Finder/Finder.php delete mode 100644 vendor/doctrine/migrations/src/Finder/GlobFinder.php delete mode 100644 vendor/doctrine/migrations/src/Finder/MigrationFinder.php delete mode 100644 vendor/doctrine/migrations/src/Finder/RecursiveRegexFinder.php delete mode 100644 vendor/doctrine/migrations/src/Generator/ClassNameGenerator.php delete mode 100644 vendor/doctrine/migrations/src/Generator/ConcatenationFileBuilder.php delete mode 100644 vendor/doctrine/migrations/src/Generator/DiffGenerator.php delete mode 100644 vendor/doctrine/migrations/src/Generator/Exception/GeneratorException.php delete mode 100644 vendor/doctrine/migrations/src/Generator/Exception/InvalidTemplateSpecified.php delete mode 100644 vendor/doctrine/migrations/src/Generator/Exception/NoChangesDetected.php delete mode 100644 vendor/doctrine/migrations/src/Generator/FileBuilder.php delete mode 100644 vendor/doctrine/migrations/src/Generator/Generator.php delete mode 100644 vendor/doctrine/migrations/src/Generator/SqlGenerator.php delete mode 100644 vendor/doctrine/migrations/src/InlineParameterFormatter.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/AvailableMigration.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/AvailableMigrationsList.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/AvailableMigrationsSet.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/ExecutedMigration.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/ExecutedMigrationsList.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/MigrationPlan.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/MigrationPlanList.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/Storage/MetadataStorage.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/Storage/MetadataStorageConfiguration.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/Storage/TableMetadataStorage.php delete mode 100644 vendor/doctrine/migrations/src/Metadata/Storage/TableMetadataStorageConfiguration.php delete mode 100644 vendor/doctrine/migrations/src/MigrationsRepository.php delete mode 100644 vendor/doctrine/migrations/src/Migrator.php delete mode 100644 vendor/doctrine/migrations/src/MigratorConfiguration.php delete mode 100644 vendor/doctrine/migrations/src/ParameterFormatter.php delete mode 100644 vendor/doctrine/migrations/src/Provider/DBALSchemaDiffProvider.php delete mode 100644 vendor/doctrine/migrations/src/Provider/EmptySchemaProvider.php delete mode 100644 vendor/doctrine/migrations/src/Provider/Exception/NoMappingFound.php delete mode 100644 vendor/doctrine/migrations/src/Provider/Exception/ProviderException.php delete mode 100644 vendor/doctrine/migrations/src/Provider/LazySchema.php delete mode 100644 vendor/doctrine/migrations/src/Provider/LazySchemaDiffProvider.php delete mode 100644 vendor/doctrine/migrations/src/Provider/OrmSchemaProvider.php delete mode 100644 vendor/doctrine/migrations/src/Provider/SchemaDiffProvider.php delete mode 100644 vendor/doctrine/migrations/src/Provider/SchemaProvider.php delete mode 100644 vendor/doctrine/migrations/src/Provider/StubSchemaProvider.php delete mode 100644 vendor/doctrine/migrations/src/Query/Exception/InvalidArguments.php delete mode 100644 vendor/doctrine/migrations/src/Query/Query.php delete mode 100644 vendor/doctrine/migrations/src/QueryWriter.php delete mode 100644 vendor/doctrine/migrations/src/Rollup.php delete mode 100644 vendor/doctrine/migrations/src/SchemaDumper.php delete mode 100644 vendor/doctrine/migrations/src/Tools/BooleanStringFormatter.php delete mode 100644 vendor/doctrine/migrations/src/Tools/BytesFormatter.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/CurrentCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/DiffCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/DoctrineCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/DumpSchemaCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/ExecuteCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/GenerateCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/LatestCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/ListCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/MigrateCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/RollupCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/StatusCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/SyncMetadataCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/UpToDateCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Command/VersionCommand.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/ConsoleInputMigratorConfigurationFactory.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/ConsoleLogger.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/ConsoleRunner.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Exception/ConsoleException.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Exception/DependenciesNotSatisfied.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Exception/DirectoryDoesNotExist.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Exception/FileTypeNotSupported.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Exception/InvalidOptionUsage.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Exception/SchemaDumpRequiresNoMigrations.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Exception/VersionAlreadyExists.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Exception/VersionDoesNotExist.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Helper/ConfigurationHelper.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Helper/MigrationDirectoryHelper.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/Helper/MigrationStatusInfosHelper.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/InvalidAllOrNothingConfiguration.php delete mode 100644 vendor/doctrine/migrations/src/Tools/Console/MigratorConfigurationFactory.php delete mode 100644 vendor/doctrine/migrations/src/Tools/TransactionHelper.php delete mode 100644 vendor/doctrine/migrations/src/Version/AliasResolver.php delete mode 100644 vendor/doctrine/migrations/src/Version/AlphabeticalComparator.php delete mode 100644 vendor/doctrine/migrations/src/Version/Comparator.php delete mode 100644 vendor/doctrine/migrations/src/Version/CurrentMigrationStatusCalculator.php delete mode 100644 vendor/doctrine/migrations/src/Version/DbalExecutor.php delete mode 100644 vendor/doctrine/migrations/src/Version/DbalMigrationFactory.php delete mode 100644 vendor/doctrine/migrations/src/Version/DefaultAliasResolver.php delete mode 100644 vendor/doctrine/migrations/src/Version/Direction.php delete mode 100644 vendor/doctrine/migrations/src/Version/ExecutionResult.php delete mode 100644 vendor/doctrine/migrations/src/Version/Executor.php delete mode 100644 vendor/doctrine/migrations/src/Version/MigrationFactory.php delete mode 100644 vendor/doctrine/migrations/src/Version/MigrationPlanCalculator.php delete mode 100644 vendor/doctrine/migrations/src/Version/MigrationStatusCalculator.php delete mode 100644 vendor/doctrine/migrations/src/Version/SortedMigrationPlanCalculator.php delete mode 100644 vendor/doctrine/migrations/src/Version/State.php delete mode 100644 vendor/doctrine/migrations/src/Version/Version.php delete mode 100644 vendor/doctrine/orm/README.md delete mode 100644 vendor/doctrine/orm/SECURITY.md delete mode 100644 vendor/doctrine/orm/UPGRADE.md delete mode 100644 vendor/doctrine/orm/composer.json delete mode 100644 vendor/doctrine/orm/doctrine-mapping.xsd delete mode 100644 vendor/doctrine/orm/phpstan-dbal3.neon delete mode 100644 vendor/doctrine/orm/src/AbstractQuery.php delete mode 100644 vendor/doctrine/orm/src/Cache.php delete mode 100644 vendor/doctrine/orm/src/Cache/AssociationCacheEntry.php delete mode 100644 vendor/doctrine/orm/src/Cache/CacheConfiguration.php delete mode 100644 vendor/doctrine/orm/src/Cache/CacheEntry.php delete mode 100644 vendor/doctrine/orm/src/Cache/CacheException.php delete mode 100644 vendor/doctrine/orm/src/Cache/CacheFactory.php delete mode 100644 vendor/doctrine/orm/src/Cache/CacheKey.php delete mode 100644 vendor/doctrine/orm/src/Cache/CollectionCacheEntry.php delete mode 100644 vendor/doctrine/orm/src/Cache/CollectionCacheKey.php delete mode 100644 vendor/doctrine/orm/src/Cache/CollectionHydrator.php delete mode 100644 vendor/doctrine/orm/src/Cache/ConcurrentRegion.php delete mode 100644 vendor/doctrine/orm/src/Cache/DefaultCache.php delete mode 100644 vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php delete mode 100644 vendor/doctrine/orm/src/Cache/DefaultCollectionHydrator.php delete mode 100644 vendor/doctrine/orm/src/Cache/DefaultEntityHydrator.php delete mode 100644 vendor/doctrine/orm/src/Cache/DefaultQueryCache.php delete mode 100644 vendor/doctrine/orm/src/Cache/EntityCacheEntry.php delete mode 100644 vendor/doctrine/orm/src/Cache/EntityCacheKey.php delete mode 100644 vendor/doctrine/orm/src/Cache/EntityHydrator.php delete mode 100644 vendor/doctrine/orm/src/Cache/Exception/CacheException.php delete mode 100644 vendor/doctrine/orm/src/Cache/Exception/CannotUpdateReadOnlyCollection.php delete mode 100644 vendor/doctrine/orm/src/Cache/Exception/CannotUpdateReadOnlyEntity.php delete mode 100644 vendor/doctrine/orm/src/Cache/Exception/FeatureNotImplemented.php delete mode 100644 vendor/doctrine/orm/src/Cache/Exception/NonCacheableEntity.php delete mode 100644 vendor/doctrine/orm/src/Cache/Exception/NonCacheableEntityAssociation.php delete mode 100644 vendor/doctrine/orm/src/Cache/Lock.php delete mode 100644 vendor/doctrine/orm/src/Cache/LockException.php delete mode 100644 vendor/doctrine/orm/src/Cache/Logging/CacheLogger.php delete mode 100644 vendor/doctrine/orm/src/Cache/Logging/CacheLoggerChain.php delete mode 100644 vendor/doctrine/orm/src/Cache/Logging/StatisticsCacheLogger.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/CachedPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Collection/AbstractCollectionPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Collection/CachedCollectionPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Collection/NonStrictReadWriteCachedCollectionPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Entity/AbstractEntityPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Entity/CachedEntityPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Entity/NonStrictReadWriteCachedEntityPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/Persister/Entity/ReadWriteCachedEntityPersister.php delete mode 100644 vendor/doctrine/orm/src/Cache/QueryCache.php delete mode 100644 vendor/doctrine/orm/src/Cache/QueryCacheEntry.php delete mode 100644 vendor/doctrine/orm/src/Cache/QueryCacheKey.php delete mode 100644 vendor/doctrine/orm/src/Cache/QueryCacheValidator.php delete mode 100644 vendor/doctrine/orm/src/Cache/Region.php delete mode 100644 vendor/doctrine/orm/src/Cache/Region/DefaultRegion.php delete mode 100644 vendor/doctrine/orm/src/Cache/Region/FileLockRegion.php delete mode 100644 vendor/doctrine/orm/src/Cache/Region/UpdateTimestampCache.php delete mode 100644 vendor/doctrine/orm/src/Cache/RegionsConfiguration.php delete mode 100644 vendor/doctrine/orm/src/Cache/TimestampCacheEntry.php delete mode 100644 vendor/doctrine/orm/src/Cache/TimestampCacheKey.php delete mode 100644 vendor/doctrine/orm/src/Cache/TimestampQueryCacheValidator.php delete mode 100644 vendor/doctrine/orm/src/Cache/TimestampRegion.php delete mode 100644 vendor/doctrine/orm/src/Configuration.php delete mode 100644 vendor/doctrine/orm/src/Decorator/EntityManagerDecorator.php delete mode 100644 vendor/doctrine/orm/src/EntityManager.php delete mode 100644 vendor/doctrine/orm/src/EntityManagerInterface.php delete mode 100644 vendor/doctrine/orm/src/EntityNotFoundException.php delete mode 100644 vendor/doctrine/orm/src/EntityRepository.php delete mode 100644 vendor/doctrine/orm/src/Event/ListenersInvoker.php delete mode 100644 vendor/doctrine/orm/src/Event/LoadClassMetadataEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/OnClassMetadataNotFoundEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/OnClearEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/OnFlushEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PostFlushEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PostLoadEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PostPersistEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PostRemoveEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PostUpdateEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PreFlushEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PrePersistEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PreRemoveEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Event/PreUpdateEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Events.php delete mode 100644 vendor/doctrine/orm/src/Exception/ConfigurationException.php delete mode 100644 vendor/doctrine/orm/src/Exception/EntityIdentityCollisionException.php delete mode 100644 vendor/doctrine/orm/src/Exception/EntityManagerClosed.php delete mode 100644 vendor/doctrine/orm/src/Exception/EntityMissingAssignedId.php delete mode 100644 vendor/doctrine/orm/src/Exception/InvalidEntityRepository.php delete mode 100644 vendor/doctrine/orm/src/Exception/InvalidHydrationMode.php delete mode 100644 vendor/doctrine/orm/src/Exception/ManagerException.php delete mode 100644 vendor/doctrine/orm/src/Exception/MissingIdentifierField.php delete mode 100644 vendor/doctrine/orm/src/Exception/MissingMappingDriverImplementation.php delete mode 100644 vendor/doctrine/orm/src/Exception/MultipleSelectorsFoundException.php delete mode 100644 vendor/doctrine/orm/src/Exception/NotSupported.php delete mode 100644 vendor/doctrine/orm/src/Exception/ORMException.php delete mode 100644 vendor/doctrine/orm/src/Exception/PersisterException.php delete mode 100644 vendor/doctrine/orm/src/Exception/RepositoryException.php delete mode 100644 vendor/doctrine/orm/src/Exception/SchemaToolException.php delete mode 100644 vendor/doctrine/orm/src/Exception/UnexpectedAssociationValue.php delete mode 100644 vendor/doctrine/orm/src/Exception/UnrecognizedIdentifierFields.php delete mode 100644 vendor/doctrine/orm/src/Id/AbstractIdGenerator.php delete mode 100644 vendor/doctrine/orm/src/Id/AssignedGenerator.php delete mode 100644 vendor/doctrine/orm/src/Id/BigIntegerIdentityGenerator.php delete mode 100644 vendor/doctrine/orm/src/Id/IdentityGenerator.php delete mode 100644 vendor/doctrine/orm/src/Id/SequenceGenerator.php delete mode 100644 vendor/doctrine/orm/src/Internal/Hydration/AbstractHydrator.php delete mode 100644 vendor/doctrine/orm/src/Internal/Hydration/ArrayHydrator.php delete mode 100644 vendor/doctrine/orm/src/Internal/Hydration/HydrationException.php delete mode 100644 vendor/doctrine/orm/src/Internal/Hydration/ObjectHydrator.php delete mode 100644 vendor/doctrine/orm/src/Internal/Hydration/ScalarColumnHydrator.php delete mode 100644 vendor/doctrine/orm/src/Internal/Hydration/ScalarHydrator.php delete mode 100644 vendor/doctrine/orm/src/Internal/Hydration/SimpleObjectHydrator.php delete mode 100644 vendor/doctrine/orm/src/Internal/Hydration/SingleScalarHydrator.php delete mode 100644 vendor/doctrine/orm/src/Internal/HydrationCompleteHandler.php delete mode 100644 vendor/doctrine/orm/src/Internal/NoUnknownNamedArguments.php delete mode 100644 vendor/doctrine/orm/src/Internal/QueryType.php delete mode 100644 vendor/doctrine/orm/src/Internal/SQLResultCasing.php delete mode 100644 vendor/doctrine/orm/src/Internal/StronglyConnectedComponents.php delete mode 100644 vendor/doctrine/orm/src/Internal/TopologicalSort.php delete mode 100644 vendor/doctrine/orm/src/Internal/TopologicalSort/CycleDetectedException.php delete mode 100644 vendor/doctrine/orm/src/LazyCriteriaCollection.php delete mode 100644 vendor/doctrine/orm/src/Mapping/AnsiQuoteStrategy.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ArrayAccessImplementation.php delete mode 100644 vendor/doctrine/orm/src/Mapping/AssociationMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/AssociationOverride.php delete mode 100644 vendor/doctrine/orm/src/Mapping/AssociationOverrides.php delete mode 100644 vendor/doctrine/orm/src/Mapping/AttributeOverride.php delete mode 100644 vendor/doctrine/orm/src/Mapping/AttributeOverrides.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Builder/AssociationBuilder.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Builder/ClassMetadataBuilder.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Builder/EmbeddedBuilder.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Builder/EntityListenerBuilder.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Builder/FieldBuilder.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Builder/ManyToManyAssociationBuilder.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Builder/OneToManyAssociationBuilder.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Cache.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ChainTypedFieldMapper.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ChangeTrackingPolicy.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ClassMetadata.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Column.php delete mode 100644 vendor/doctrine/orm/src/Mapping/CustomIdGenerator.php delete mode 100644 vendor/doctrine/orm/src/Mapping/DefaultEntityListenerResolver.php delete mode 100644 vendor/doctrine/orm/src/Mapping/DefaultNamingStrategy.php delete mode 100644 vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php delete mode 100644 vendor/doctrine/orm/src/Mapping/DefaultTypedFieldMapper.php delete mode 100644 vendor/doctrine/orm/src/Mapping/DiscriminatorColumn.php delete mode 100644 vendor/doctrine/orm/src/Mapping/DiscriminatorColumnMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/DiscriminatorMap.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Driver/AttributeDriver.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Driver/AttributeReader.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Driver/DatabaseDriver.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Driver/ReflectionBasedDriver.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Driver/RepeatableAttributeCollection.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Driver/SimplifiedXmlDriver.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Driver/XmlDriver.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Embeddable.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Embedded.php delete mode 100644 vendor/doctrine/orm/src/Mapping/EmbeddedClassMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Entity.php delete mode 100644 vendor/doctrine/orm/src/Mapping/EntityListenerResolver.php delete mode 100644 vendor/doctrine/orm/src/Mapping/EntityListeners.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Exception/InvalidCustomGenerator.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Exception/UnknownGeneratorType.php delete mode 100644 vendor/doctrine/orm/src/Mapping/FieldMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/GeneratedValue.php delete mode 100644 vendor/doctrine/orm/src/Mapping/HasLifecycleCallbacks.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Id.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Index.php delete mode 100644 vendor/doctrine/orm/src/Mapping/InheritanceType.php delete mode 100644 vendor/doctrine/orm/src/Mapping/InverseJoinColumn.php delete mode 100644 vendor/doctrine/orm/src/Mapping/InverseSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/JoinColumn.php delete mode 100644 vendor/doctrine/orm/src/Mapping/JoinColumnMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/JoinColumnProperties.php delete mode 100644 vendor/doctrine/orm/src/Mapping/JoinColumns.php delete mode 100644 vendor/doctrine/orm/src/Mapping/JoinTable.php delete mode 100644 vendor/doctrine/orm/src/Mapping/JoinTableMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ManyToMany.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ManyToManyAssociationMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ManyToManyInverseSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ManyToManyOwningSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ManyToOne.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ManyToOneAssociationMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/MappedSuperclass.php delete mode 100644 vendor/doctrine/orm/src/Mapping/MappingAttribute.php delete mode 100644 vendor/doctrine/orm/src/Mapping/MappingException.php delete mode 100644 vendor/doctrine/orm/src/Mapping/NamingStrategy.php delete mode 100644 vendor/doctrine/orm/src/Mapping/OneToMany.php delete mode 100644 vendor/doctrine/orm/src/Mapping/OneToManyAssociationMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/OneToOne.php delete mode 100644 vendor/doctrine/orm/src/Mapping/OneToOneAssociationMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/OneToOneInverseSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/OneToOneOwningSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/OrderBy.php delete mode 100644 vendor/doctrine/orm/src/Mapping/OwningSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/PostLoad.php delete mode 100644 vendor/doctrine/orm/src/Mapping/PostPersist.php delete mode 100644 vendor/doctrine/orm/src/Mapping/PostRemove.php delete mode 100644 vendor/doctrine/orm/src/Mapping/PostUpdate.php delete mode 100644 vendor/doctrine/orm/src/Mapping/PreFlush.php delete mode 100644 vendor/doctrine/orm/src/Mapping/PrePersist.php delete mode 100644 vendor/doctrine/orm/src/Mapping/PreRemove.php delete mode 100644 vendor/doctrine/orm/src/Mapping/PreUpdate.php delete mode 100644 vendor/doctrine/orm/src/Mapping/QuoteStrategy.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ReflectionEmbeddedProperty.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ReflectionEnumProperty.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ReflectionReadonlyProperty.php delete mode 100644 vendor/doctrine/orm/src/Mapping/SequenceGenerator.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Table.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ToManyAssociationMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ToManyAssociationMappingImplementation.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ToManyInverseSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ToManyOwningSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ToOneAssociationMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ToOneInverseSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php delete mode 100644 vendor/doctrine/orm/src/Mapping/TypedFieldMapper.php delete mode 100644 vendor/doctrine/orm/src/Mapping/UnderscoreNamingStrategy.php delete mode 100644 vendor/doctrine/orm/src/Mapping/UniqueConstraint.php delete mode 100644 vendor/doctrine/orm/src/Mapping/Version.php delete mode 100644 vendor/doctrine/orm/src/NativeQuery.php delete mode 100644 vendor/doctrine/orm/src/NoResultException.php delete mode 100644 vendor/doctrine/orm/src/NonUniqueResultException.php delete mode 100644 vendor/doctrine/orm/src/ORMInvalidArgumentException.php delete mode 100644 vendor/doctrine/orm/src/ORMSetup.php delete mode 100644 vendor/doctrine/orm/src/OptimisticLockException.php delete mode 100644 vendor/doctrine/orm/src/PersistentCollection.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Collection/AbstractCollectionPersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Collection/CollectionPersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Collection/ManyToManyPersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Collection/OneToManyPersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Entity/BasicEntityPersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Entity/CachedPersisterContext.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Entity/EntityPersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Entity/JoinedSubclassPersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Entity/SingleTablePersister.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Exception/CantUseInOperatorOnCompositeKeys.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Exception/InvalidOrientation.php delete mode 100644 vendor/doctrine/orm/src/Persisters/Exception/UnrecognizedField.php delete mode 100644 vendor/doctrine/orm/src/Persisters/MatchingAssociationFieldRequiresObject.php delete mode 100644 vendor/doctrine/orm/src/Persisters/PersisterException.php delete mode 100644 vendor/doctrine/orm/src/Persisters/SqlExpressionVisitor.php delete mode 100644 vendor/doctrine/orm/src/Persisters/SqlValueVisitor.php delete mode 100644 vendor/doctrine/orm/src/PessimisticLockException.php delete mode 100644 vendor/doctrine/orm/src/Proxy/Autoloader.php delete mode 100644 vendor/doctrine/orm/src/Proxy/DefaultProxyClassNameResolver.php delete mode 100644 vendor/doctrine/orm/src/Proxy/InternalProxy.php delete mode 100644 vendor/doctrine/orm/src/Proxy/NotAProxyClass.php delete mode 100644 vendor/doctrine/orm/src/Proxy/ProxyFactory.php delete mode 100644 vendor/doctrine/orm/src/Query.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ASTException.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/AggregateExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ArithmeticExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ArithmeticFactor.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ArithmeticTerm.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/BetweenExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/CoalesceExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/CollectionMemberExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ComparisonExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ConditionalExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ConditionalFactor.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ConditionalPrimary.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ConditionalTerm.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/DeleteClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/DeleteStatement.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/EmptyCollectionComparisonExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ExistsExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/FromClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/AbsFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/AvgFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/BitAndFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/BitOrFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/ConcatFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/CountFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/CurrentDateFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/CurrentTimeFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/CurrentTimestampFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/DateAddFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/DateDiffFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/DateSubFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/FunctionNode.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/IdentityFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/LengthFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/LocateFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/LowerFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/MaxFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/MinFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/ModFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/SizeFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/SqrtFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/SubstringFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/SumFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/TrimFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Functions/UpperFunction.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/GeneralCaseExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/GroupByClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/HavingClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/IdentificationVariableDeclaration.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/InListExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/InSubselectExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/IndexBy.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/InputParameter.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/InstanceOfExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Join.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/JoinAssociationDeclaration.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/JoinAssociationPathExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/JoinClassPathExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/JoinVariableDeclaration.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/LikeExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Literal.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/NewObjectExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Node.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/NullComparisonExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/NullIfExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/OrderByClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/OrderByItem.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/ParenthesisExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/PathExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Phase2OptimizableConditional.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/QuantifiedExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/RangeVariableDeclaration.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SelectClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SelectExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SelectStatement.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SimpleArithmeticExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SimpleCaseExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SimpleSelectClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SimpleSelectExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SimpleWhenClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/Subselect.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SubselectFromClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/SubselectIdentificationVariableDeclaration.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/TypedExpression.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/UpdateClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/UpdateItem.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/UpdateStatement.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/WhenClause.php delete mode 100644 vendor/doctrine/orm/src/Query/AST/WhereClause.php delete mode 100644 vendor/doctrine/orm/src/Query/Exec/AbstractSqlExecutor.php delete mode 100644 vendor/doctrine/orm/src/Query/Exec/MultiTableDeleteExecutor.php delete mode 100644 vendor/doctrine/orm/src/Query/Exec/MultiTableUpdateExecutor.php delete mode 100644 vendor/doctrine/orm/src/Query/Exec/SingleSelectExecutor.php delete mode 100644 vendor/doctrine/orm/src/Query/Exec/SingleTableDeleteUpdateExecutor.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Andx.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Base.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Comparison.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Composite.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/From.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Func.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/GroupBy.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Join.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Literal.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Math.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/OrderBy.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Orx.php delete mode 100644 vendor/doctrine/orm/src/Query/Expr/Select.php delete mode 100644 vendor/doctrine/orm/src/Query/Filter/FilterException.php delete mode 100644 vendor/doctrine/orm/src/Query/Filter/SQLFilter.php delete mode 100644 vendor/doctrine/orm/src/Query/FilterCollection.php delete mode 100644 vendor/doctrine/orm/src/Query/Lexer.php delete mode 100644 vendor/doctrine/orm/src/Query/Parameter.php delete mode 100644 vendor/doctrine/orm/src/Query/ParameterTypeInferer.php delete mode 100644 vendor/doctrine/orm/src/Query/Parser.php delete mode 100644 vendor/doctrine/orm/src/Query/ParserResult.php delete mode 100644 vendor/doctrine/orm/src/Query/Printer.php delete mode 100644 vendor/doctrine/orm/src/Query/QueryException.php delete mode 100644 vendor/doctrine/orm/src/Query/QueryExpressionVisitor.php delete mode 100644 vendor/doctrine/orm/src/Query/ResultSetMapping.php delete mode 100644 vendor/doctrine/orm/src/Query/ResultSetMappingBuilder.php delete mode 100644 vendor/doctrine/orm/src/Query/SqlWalker.php delete mode 100644 vendor/doctrine/orm/src/Query/TokenType.php delete mode 100644 vendor/doctrine/orm/src/Query/TreeWalker.php delete mode 100644 vendor/doctrine/orm/src/Query/TreeWalkerAdapter.php delete mode 100644 vendor/doctrine/orm/src/Query/TreeWalkerChain.php delete mode 100644 vendor/doctrine/orm/src/QueryBuilder.php delete mode 100644 vendor/doctrine/orm/src/Repository/DefaultRepositoryFactory.php delete mode 100644 vendor/doctrine/orm/src/Repository/Exception/InvalidFindByCall.php delete mode 100644 vendor/doctrine/orm/src/Repository/Exception/InvalidMagicMethodCall.php delete mode 100644 vendor/doctrine/orm/src/Repository/RepositoryFactory.php delete mode 100644 vendor/doctrine/orm/src/Tools/AttachEntityListenersListener.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/AbstractEntityManagerCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/CollectionRegionCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/EntityRegionCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/MetadataCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/QueryCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/QueryRegionCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/ResultCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/GenerateProxiesCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/InfoCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/MappingDescribeCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/RunDqlCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/AbstractCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/CreateCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/DropCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/UpdateCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/Command/ValidateSchemaCommand.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/ConsoleRunner.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/ConnectionFromManagerProvider.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/SingleManagerProvider.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/UnknownManagerException.php delete mode 100644 vendor/doctrine/orm/src/Tools/Console/MetadataFilter.php delete mode 100644 vendor/doctrine/orm/src/Tools/Debug.php delete mode 100644 vendor/doctrine/orm/src/Tools/DebugUnitOfWorkListener.php delete mode 100644 vendor/doctrine/orm/src/Tools/Event/GenerateSchemaEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Tools/Event/GenerateSchemaTableEventArgs.php delete mode 100644 vendor/doctrine/orm/src/Tools/Exception/MissingColumnException.php delete mode 100644 vendor/doctrine/orm/src/Tools/Exception/NotSupported.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/CountOutputWalker.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/CountWalker.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/Exception/RowNumberOverFunctionNotEnabled.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/LimitSubqueryOutputWalker.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/LimitSubqueryWalker.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/Paginator.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/RootTypeWalker.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/RowNumberOverFunction.php delete mode 100644 vendor/doctrine/orm/src/Tools/Pagination/WhereInWalker.php delete mode 100644 vendor/doctrine/orm/src/Tools/ResolveTargetEntityListener.php delete mode 100644 vendor/doctrine/orm/src/Tools/SchemaTool.php delete mode 100644 vendor/doctrine/orm/src/Tools/SchemaValidator.php delete mode 100644 vendor/doctrine/orm/src/Tools/ToolEvents.php delete mode 100644 vendor/doctrine/orm/src/Tools/ToolsException.php delete mode 100644 vendor/doctrine/orm/src/TransactionRequiredException.php delete mode 100644 vendor/doctrine/orm/src/UnexpectedResultException.php delete mode 100644 vendor/doctrine/orm/src/UnitOfWork.php delete mode 100644 vendor/doctrine/orm/src/Utility/HierarchyDiscriminatorResolver.php delete mode 100644 vendor/doctrine/orm/src/Utility/IdentifierFlattener.php delete mode 100644 vendor/doctrine/orm/src/Utility/LockSqlHelper.php delete mode 100644 vendor/doctrine/orm/src/Utility/PersisterHelper.php delete mode 100644 vendor/doctrine/persistence/CONTRIBUTING.md delete mode 100644 vendor/doctrine/persistence/README.md delete mode 100644 vendor/doctrine/persistence/UPGRADE.md delete mode 100644 vendor/doctrine/persistence/composer.json delete mode 100644 vendor/doctrine/persistence/src/Persistence/AbstractManagerRegistry.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/ConnectionRegistry.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Event/LifecycleEventArgs.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Event/LoadClassMetadataEventArgs.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Event/ManagerEventArgs.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Event/OnClearEventArgs.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Event/PreUpdateEventArgs.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/ManagerRegistry.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/ClassMetadata.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/ClassMetadataFactory.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/ColocatedMappingDriver.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/DefaultFileLocator.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/FileDriver.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/FileLocator.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriver.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriverChain.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/PHPDriver.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/StaticPHPDriver.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/Driver/SymfonyFileLocator.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/MappingException.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/ProxyClassNameResolver.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/ReflectionService.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/RuntimeReflectionService.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Mapping/StaticReflectionService.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/NotifyPropertyChanged.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/ObjectManager.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/ObjectManagerDecorator.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/ObjectRepository.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/PropertyChangedListener.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Proxy.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Reflection/EnumReflectionProperty.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Reflection/RuntimePublicReflectionProperty.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Reflection/RuntimeReflectionProperty.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultReflectionProperty.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultReflectionPropertyBase.php delete mode 100644 vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultRuntimePublicReflectionProperty.php delete mode 100644 vendor/doctrine/sql-formatter/CONTRIBUTING.md delete mode 100644 vendor/doctrine/sql-formatter/LICENSE.txt delete mode 100644 vendor/doctrine/sql-formatter/README.md delete mode 100644 vendor/doctrine/sql-formatter/composer.json delete mode 100644 vendor/doctrine/sql-formatter/src/CliHighlighter.php delete mode 100644 vendor/doctrine/sql-formatter/src/Cursor.php delete mode 100644 vendor/doctrine/sql-formatter/src/Highlighter.php delete mode 100644 vendor/doctrine/sql-formatter/src/HtmlHighlighter.php delete mode 100644 vendor/doctrine/sql-formatter/src/NullHighlighter.php delete mode 100644 vendor/doctrine/sql-formatter/src/SqlFormatter.php delete mode 100644 vendor/doctrine/sql-formatter/src/Token.php delete mode 100644 vendor/doctrine/sql-formatter/src/Tokenizer.php delete mode 100644 vendor/egulias/email-validator/CHANGELOG.md delete mode 100644 vendor/egulias/email-validator/CONTRIBUTING.md delete mode 100644 vendor/egulias/email-validator/composer.json delete mode 100644 vendor/egulias/email-validator/src/EmailLexer.php delete mode 100644 vendor/egulias/email-validator/src/EmailParser.php delete mode 100644 vendor/egulias/email-validator/src/EmailValidator.php delete mode 100644 vendor/egulias/email-validator/src/MessageIDParser.php delete mode 100644 vendor/egulias/email-validator/src/Parser.php delete mode 100644 vendor/egulias/email-validator/src/Parser/Comment.php delete mode 100644 vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php delete mode 100644 vendor/egulias/email-validator/src/Parser/CommentStrategy/DomainComment.php delete mode 100644 vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php delete mode 100644 vendor/egulias/email-validator/src/Parser/DomainLiteral.php delete mode 100644 vendor/egulias/email-validator/src/Parser/DomainPart.php delete mode 100644 vendor/egulias/email-validator/src/Parser/DoubleQuote.php delete mode 100644 vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php delete mode 100644 vendor/egulias/email-validator/src/Parser/IDLeftPart.php delete mode 100644 vendor/egulias/email-validator/src/Parser/IDRightPart.php delete mode 100644 vendor/egulias/email-validator/src/Parser/LocalPart.php delete mode 100644 vendor/egulias/email-validator/src/Parser/PartParser.php delete mode 100644 vendor/egulias/email-validator/src/Result/InvalidEmail.php delete mode 100644 vendor/egulias/email-validator/src/Result/MultipleErrors.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/CRLFAtTheEnd.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/CRLFX2.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/CRNoLF.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/CharNotAllowed.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/CommaInDomain.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/CommentsInIDRight.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/ConsecutiveAt.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/ConsecutiveDot.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/DetailedReason.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/DomainHyphened.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/DomainTooLong.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/DotAtEnd.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/DotAtStart.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/EmptyReason.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/ExceptionFound.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/ExpectingDTEXT.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/ExpectingDomainLiteralClose.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/LabelTooLong.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/LocalOrReservedDomain.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/NoDNSRecord.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/NoDomainPart.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/NoLocalPart.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/RFCWarnings.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/Reason.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/SpoofEmail.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/UnOpenedComment.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/UnableToGetDNSRecord.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/UnclosedComment.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/UnclosedQuotedString.php delete mode 100644 vendor/egulias/email-validator/src/Result/Reason/UnusualElements.php delete mode 100644 vendor/egulias/email-validator/src/Result/Result.php delete mode 100644 vendor/egulias/email-validator/src/Result/SpoofEmail.php delete mode 100644 vendor/egulias/email-validator/src/Result/ValidEmail.php delete mode 100644 vendor/egulias/email-validator/src/Validation/DNSCheckValidation.php delete mode 100644 vendor/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php delete mode 100644 vendor/egulias/email-validator/src/Validation/DNSRecords.php delete mode 100644 vendor/egulias/email-validator/src/Validation/EmailValidation.php delete mode 100644 vendor/egulias/email-validator/src/Validation/Exception/EmptyValidationList.php delete mode 100644 vendor/egulias/email-validator/src/Validation/Extra/SpoofCheckValidation.php delete mode 100644 vendor/egulias/email-validator/src/Validation/MessageIDValidation.php delete mode 100644 vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php delete mode 100644 vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php delete mode 100644 vendor/egulias/email-validator/src/Validation/RFCValidation.php delete mode 100644 vendor/egulias/email-validator/src/Warning/AddressLiteral.php delete mode 100644 vendor/egulias/email-validator/src/Warning/CFWSNearAt.php delete mode 100644 vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php delete mode 100644 vendor/egulias/email-validator/src/Warning/Comment.php delete mode 100644 vendor/egulias/email-validator/src/Warning/DeprecatedComment.php delete mode 100644 vendor/egulias/email-validator/src/Warning/DomainLiteral.php delete mode 100644 vendor/egulias/email-validator/src/Warning/EmailTooLong.php delete mode 100644 vendor/egulias/email-validator/src/Warning/IPV6BadChar.php delete mode 100644 vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php delete mode 100644 vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php delete mode 100644 vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php delete mode 100644 vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php delete mode 100644 vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php delete mode 100644 vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php delete mode 100644 vendor/egulias/email-validator/src/Warning/LocalTooLong.php delete mode 100644 vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php delete mode 100644 vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php delete mode 100644 vendor/egulias/email-validator/src/Warning/QuotedPart.php delete mode 100644 vendor/egulias/email-validator/src/Warning/QuotedString.php delete mode 100644 vendor/egulias/email-validator/src/Warning/TLD.php delete mode 100644 vendor/egulias/email-validator/src/Warning/Warning.php delete mode 100644 vendor/masterminds/html5/LICENSE.txt delete mode 100644 vendor/masterminds/html5/README.md delete mode 100644 vendor/masterminds/html5/RELEASE.md delete mode 100644 vendor/masterminds/html5/UPGRADING.md delete mode 100644 vendor/masterminds/html5/bin/entities.php delete mode 100644 vendor/masterminds/html5/composer.json delete mode 100644 vendor/masterminds/html5/src/HTML5.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Elements.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Entities.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Exception.php delete mode 100644 vendor/masterminds/html5/src/HTML5/InstructionProcessor.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/CharacterReference.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/DOMTreeBuilder.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/InputStream.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/ParseError.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/README.md delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/Scanner.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Serializer/README.md delete mode 100644 vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php delete mode 100644 vendor/masterminds/html5/src/HTML5/Serializer/Traverser.php delete mode 100644 vendor/monolog/monolog/CHANGELOG.md delete mode 100644 vendor/monolog/monolog/README.md delete mode 100644 vendor/monolog/monolog/composer.json delete mode 100644 vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php delete mode 100644 vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php delete mode 100644 vendor/monolog/monolog/src/Monolog/ErrorHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/Handler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Level.php delete mode 100644 vendor/monolog/monolog/src/Monolog/LogRecord.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Logger.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Registry.php delete mode 100644 vendor/monolog/monolog/src/Monolog/ResettableInterface.php delete mode 100644 vendor/monolog/monolog/src/Monolog/SignalHandler.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Test/TestCase.php delete mode 100644 vendor/monolog/monolog/src/Monolog/Utils.php delete mode 100644 vendor/myclabs/deep-copy/README.md delete mode 100644 vendor/myclabs/deep-copy/composer.json delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Exception/PropertyException.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/ChainableFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/KeepFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/ReplaceFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Matcher.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyMatcher.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/ArrayObjectFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedListFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/TypeMatcher/TypeMatcher.php delete mode 100644 vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php delete mode 100644 vendor/nikic/php-parser/README.md delete mode 100644 vendor/nikic/php-parser/composer.json delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/ClassConst.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Comment.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluationException.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ConstExprEvaluator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Error.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Collecting.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/DiffElem.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Modifiers.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NameContext.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Const_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Array_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Div.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignRef.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Double.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Int_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Object_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/String_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ConstFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Identifier.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Name.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Param.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/DNumber.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Encapsed.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Float_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/File.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/String_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Block.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Declare_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Property.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Return_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Static_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Use_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Node/VariadicPlaceholder.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Parser.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Parser/Php7.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter/Standard.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/Token.php delete mode 100644 vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php delete mode 100644 vendor/phar-io/manifest/.github/FUNDING.yml delete mode 100644 vendor/phar-io/manifest/.github/workflows/ci.yml delete mode 100644 vendor/phar-io/manifest/.php-cs-fixer.dist.php delete mode 100644 vendor/phar-io/manifest/CHANGELOG.md delete mode 100644 vendor/phar-io/manifest/README.md delete mode 100644 vendor/phar-io/manifest/composer.json delete mode 100644 vendor/phar-io/manifest/composer.lock delete mode 100644 vendor/phar-io/manifest/manifest.xsd delete mode 100644 vendor/phar-io/manifest/src/ManifestDocumentMapper.php delete mode 100644 vendor/phar-io/manifest/src/ManifestLoader.php delete mode 100644 vendor/phar-io/manifest/src/ManifestSerializer.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/Exception.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestElementException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php delete mode 100644 vendor/phar-io/manifest/src/exceptions/NoEmailAddressException.php delete mode 100644 vendor/phar-io/manifest/src/values/Application.php delete mode 100644 vendor/phar-io/manifest/src/values/ApplicationName.php delete mode 100644 vendor/phar-io/manifest/src/values/Author.php delete mode 100644 vendor/phar-io/manifest/src/values/AuthorCollection.php delete mode 100644 vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php delete mode 100644 vendor/phar-io/manifest/src/values/BundledComponent.php delete mode 100644 vendor/phar-io/manifest/src/values/BundledComponentCollection.php delete mode 100644 vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php delete mode 100644 vendor/phar-io/manifest/src/values/CopyrightInformation.php delete mode 100644 vendor/phar-io/manifest/src/values/Email.php delete mode 100644 vendor/phar-io/manifest/src/values/Extension.php delete mode 100644 vendor/phar-io/manifest/src/values/Library.php delete mode 100644 vendor/phar-io/manifest/src/values/License.php delete mode 100644 vendor/phar-io/manifest/src/values/Manifest.php delete mode 100644 vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php delete mode 100644 vendor/phar-io/manifest/src/values/PhpVersionRequirement.php delete mode 100644 vendor/phar-io/manifest/src/values/Requirement.php delete mode 100644 vendor/phar-io/manifest/src/values/RequirementCollection.php delete mode 100644 vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php delete mode 100644 vendor/phar-io/manifest/src/values/Type.php delete mode 100644 vendor/phar-io/manifest/src/values/Url.php delete mode 100644 vendor/phar-io/manifest/src/xml/AuthorElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/AuthorElementCollection.php delete mode 100644 vendor/phar-io/manifest/src/xml/BundlesElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/ComponentElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/ComponentElementCollection.php delete mode 100644 vendor/phar-io/manifest/src/xml/ContainsElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/CopyrightElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/ElementCollection.php delete mode 100644 vendor/phar-io/manifest/src/xml/ExtElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/ExtElementCollection.php delete mode 100644 vendor/phar-io/manifest/src/xml/ExtensionElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/LicenseElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/ManifestDocument.php delete mode 100644 vendor/phar-io/manifest/src/xml/ManifestElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/PhpElement.php delete mode 100644 vendor/phar-io/manifest/src/xml/RequiresElement.php delete mode 100644 vendor/phar-io/manifest/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.php delete mode 100644 vendor/phar-io/manifest/tools/php-cs-fixer.d/header.txt delete mode 100644 vendor/phar-io/version/CHANGELOG.md delete mode 100644 vendor/phar-io/version/README.md delete mode 100644 vendor/phar-io/version/composer.json delete mode 100644 vendor/phar-io/version/src/BuildMetaData.php delete mode 100644 vendor/phar-io/version/src/PreReleaseSuffix.php delete mode 100644 vendor/phar-io/version/src/Version.php delete mode 100644 vendor/phar-io/version/src/VersionConstraintParser.php delete mode 100644 vendor/phar-io/version/src/VersionConstraintValue.php delete mode 100644 vendor/phar-io/version/src/VersionNumber.php delete mode 100644 vendor/phar-io/version/src/constraints/AbstractVersionConstraint.php delete mode 100644 vendor/phar-io/version/src/constraints/AndVersionConstraintGroup.php delete mode 100644 vendor/phar-io/version/src/constraints/AnyVersionConstraint.php delete mode 100644 vendor/phar-io/version/src/constraints/ExactVersionConstraint.php delete mode 100644 vendor/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php delete mode 100644 vendor/phar-io/version/src/constraints/OrVersionConstraintGroup.php delete mode 100644 vendor/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php delete mode 100644 vendor/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php delete mode 100644 vendor/phar-io/version/src/constraints/VersionConstraint.php delete mode 100644 vendor/phar-io/version/src/exceptions/Exception.php delete mode 100644 vendor/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php delete mode 100644 vendor/phar-io/version/src/exceptions/InvalidVersionException.php delete mode 100644 vendor/phar-io/version/src/exceptions/NoBuildMetaDataException.php delete mode 100644 vendor/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php delete mode 100644 vendor/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php delete mode 100644 vendor/phpdocumentor/reflection-common/.github/dependabot.yml delete mode 100644 vendor/phpdocumentor/reflection-common/.github/workflows/push.yml delete mode 100644 vendor/phpdocumentor/reflection-common/README.md delete mode 100644 vendor/phpdocumentor/reflection-common/composer.json delete mode 100644 vendor/phpdocumentor/reflection-common/src/Element.php delete mode 100644 vendor/phpdocumentor/reflection-common/src/File.php delete mode 100644 vendor/phpdocumentor/reflection-common/src/Fqsen.php delete mode 100644 vendor/phpdocumentor/reflection-common/src/Location.php delete mode 100644 vendor/phpdocumentor/reflection-common/src/Project.php delete mode 100644 vendor/phpdocumentor/reflection-common/src/ProjectFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/README.md delete mode 100644 vendor/phpdocumentor/reflection-docblock/composer.json delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/TagFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/AbstractPHPStanFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Factory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/MethodFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PHPStanFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ParamFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyReadFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyWriteFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ReturnFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/VarFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/AlignFormatter.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/MethodParameter.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Url.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/Exception/PcreException.php delete mode 100644 vendor/phpdocumentor/reflection-docblock/src/Utils.php delete mode 100644 vendor/phpdocumentor/type-resolver/README.md delete mode 100644 vendor/phpdocumentor/type-resolver/composer.json delete mode 100644 vendor/phpdocumentor/type-resolver/src/FqsenResolver.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoType.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShape.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShapeItem.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/CallableString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/ConstExpression.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/False_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/FloatValue.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/HtmlEscapedString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/IntegerRange.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/IntegerValue.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/List_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/LiteralString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/LowercaseString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/NegativeInteger.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyList.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyLowercaseString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/NumericString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/Numeric_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/PositiveInteger.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/StringValue.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/TraitString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/PseudoTypes/True_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Type.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/TypeResolver.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/AbstractList.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/AggregatedType.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/ArrayKey.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Array_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Boolean.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/CallableParameter.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Callable_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/ClassString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Collection.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Compound.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Context.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Expression.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Float_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Integer.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/InterfaceString.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Intersection.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Never_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Null_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Nullable.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Object_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Parent_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Resource_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Scalar.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Self_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Static_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/String_.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/This.php delete mode 100644 vendor/phpdocumentor/type-resolver/src/Types/Void_.php delete mode 100644 vendor/phpstan/phpdoc-parser/README.md delete mode 100644 vendor/phpstan/phpdoc-parser/composer.json delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Attribute.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayItemNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFloatNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNullNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprStringNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstFetchNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/QuoteAwareConstExprStringNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Node.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/NodeAttributes.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTextNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/TypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Ast/Type/UnionTypeNode.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Printer/Differ.php delete mode 100644 vendor/phpstan/phpdoc-parser/src/Printer/Printer.php delete mode 100644 vendor/phpunit/php-code-coverage/ChangeLog-9.2.md delete mode 100644 vendor/phpunit/php-code-coverage/README.md delete mode 100755 vendor/phpunit/php-code-coverage/build/scripts/extract-release-notes.php delete mode 100644 vendor/phpunit/php-code-coverage/composer.json delete mode 100644 vendor/phpunit/php-code-coverage/src/CodeCoverage.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Driver/Driver.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Driver/PcovDriver.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Driver/PhpdbgDriver.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Driver/Selector.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Driver/Xdebug2Driver.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Driver/Xdebug3Driver.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/Exception.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/ParserException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/PhpdbgNotAvailableException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/ReflectionException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/WrongXdebugVersionException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/Xdebug2NotEnabledException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/Xdebug3NotEnabledException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Exception/XmlException.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Filter.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Node/Builder.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Node/CrapIndex.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Node/Directory.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Node/File.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Node/Iterator.php delete mode 100644 vendor/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php delete mode 100644 vendor/phpunit/php-code-coverage/src/RawCodeCoverageData.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Clover.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Cobertura.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Crap4j.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/branches.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/coverage_bar.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/coverage_bar_branch.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/bootstrap.min.css delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/custom.css delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/nv.d3.min.css delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/octicons.css delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/css/style.css delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/dashboard_branch.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/directory.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/directory_branch.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/directory_item.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/directory_item_branch.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file_branch.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file_item.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/file_item_branch.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/icons/file-code.svg delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/icons/file-directory.svg delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/bootstrap.min.js delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/d3.min.js delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/file.js delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/jquery.min.js delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/nv.d3.min.js delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/js/popper.min.js delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/line.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/lines.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/method_item.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/method_item_branch.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Template/paths.html.dist delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/PHP.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Text.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Coverage.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Directory.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Facade.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/File.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Method.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Node.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Project.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Report.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Source.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Tests.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Totals.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Report/Xml/Unit.php delete mode 100644 vendor/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php delete mode 100644 vendor/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php delete mode 100644 vendor/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php delete mode 100644 vendor/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php delete mode 100644 vendor/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php delete mode 100644 vendor/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php delete mode 100644 vendor/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Util/Filesystem.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Util/Percentage.php delete mode 100644 vendor/phpunit/php-code-coverage/src/Version.php delete mode 100644 vendor/phpunit/php-file-iterator/.psalm/baseline.xml delete mode 100644 vendor/phpunit/php-file-iterator/.psalm/config.xml delete mode 100644 vendor/phpunit/php-file-iterator/ChangeLog.md delete mode 100644 vendor/phpunit/php-file-iterator/README.md delete mode 100644 vendor/phpunit/php-file-iterator/composer.json delete mode 100644 vendor/phpunit/php-file-iterator/src/Facade.php delete mode 100644 vendor/phpunit/php-file-iterator/src/Factory.php delete mode 100644 vendor/phpunit/php-file-iterator/src/Iterator.php delete mode 100644 vendor/phpunit/php-invoker/ChangeLog.md delete mode 100644 vendor/phpunit/php-invoker/README.md delete mode 100644 vendor/phpunit/php-invoker/composer.json delete mode 100644 vendor/phpunit/php-invoker/src/Invoker.php delete mode 100644 vendor/phpunit/php-invoker/src/exceptions/Exception.php delete mode 100644 vendor/phpunit/php-invoker/src/exceptions/ProcessControlExtensionNotLoadedException.php delete mode 100644 vendor/phpunit/php-invoker/src/exceptions/TimeoutException.php delete mode 100644 vendor/phpunit/php-text-template/.psalm/baseline.xml delete mode 100644 vendor/phpunit/php-text-template/.psalm/config.xml delete mode 100644 vendor/phpunit/php-text-template/ChangeLog.md delete mode 100644 vendor/phpunit/php-text-template/README.md delete mode 100644 vendor/phpunit/php-text-template/composer.json delete mode 100644 vendor/phpunit/php-text-template/src/Template.php delete mode 100644 vendor/phpunit/php-text-template/src/exceptions/Exception.php delete mode 100644 vendor/phpunit/php-text-template/src/exceptions/InvalidArgumentException.php delete mode 100644 vendor/phpunit/php-text-template/src/exceptions/RuntimeException.php delete mode 100644 vendor/phpunit/php-timer/.psalm/baseline.xml delete mode 100644 vendor/phpunit/php-timer/.psalm/config.xml delete mode 100644 vendor/phpunit/php-timer/ChangeLog.md delete mode 100644 vendor/phpunit/php-timer/README.md delete mode 100644 vendor/phpunit/php-timer/composer.json delete mode 100644 vendor/phpunit/php-timer/src/Duration.php delete mode 100644 vendor/phpunit/php-timer/src/ResourceUsageFormatter.php delete mode 100644 vendor/phpunit/php-timer/src/Timer.php delete mode 100644 vendor/phpunit/php-timer/src/exceptions/Exception.php delete mode 100644 vendor/phpunit/php-timer/src/exceptions/NoActiveTimerException.php delete mode 100644 vendor/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php delete mode 100644 vendor/phpunit/phpunit/ChangeLog-9.6.md delete mode 100644 vendor/phpunit/phpunit/DEPRECATIONS.md delete mode 100644 vendor/phpunit/phpunit/README.md delete mode 100644 vendor/phpunit/phpunit/SECURITY.md delete mode 100644 vendor/phpunit/phpunit/composer.json delete mode 100644 vendor/phpunit/phpunit/composer.lock delete mode 100644 vendor/phpunit/phpunit/phpunit.xsd delete mode 100644 vendor/phpunit/phpunit/schema/8.5.xsd delete mode 100644 vendor/phpunit/phpunit/schema/9.0.xsd delete mode 100644 vendor/phpunit/phpunit/schema/9.1.xsd delete mode 100644 vendor/phpunit/phpunit/schema/9.2.xsd delete mode 100644 vendor/phpunit/phpunit/schema/9.3.xsd delete mode 100644 vendor/phpunit/phpunit/schema/9.4.xsd delete mode 100644 vendor/phpunit/phpunit/schema/9.5.xsd delete mode 100644 vendor/phpunit/phpunit/src/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Assert.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Assert/Functions.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Boolean/IsFalse.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Boolean/IsTrue.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Callback.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Cardinality/Count.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Cardinality/GreaterThan.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Cardinality/IsEmpty.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Cardinality/LessThan.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Cardinality/SameSize.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Constraint.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqual.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualCanonicalizing.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualIgnoringCase.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Exception/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionCode.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessage.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageRegularExpression.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Filesystem/DirectoryExists.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Filesystem/FileExists.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsReadable.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsWritable.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsAnything.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Math/IsFinite.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Math/IsInfinite.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Math/IsNan.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasAttribute.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasStaticAttribute.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Object/ObjectEquals.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasAttribute.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasProperty.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Operator/BinaryOperator.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalAnd.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalNot.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalOr.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalXor.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Operator/Operator.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Operator/UnaryOperator.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/String/IsJson.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/String/RegularExpression.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/String/StringContains.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/String/StringEndsWith.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/String/StringMatchesFormatDescription.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/String/StringStartsWith.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Traversable/ArrayHasKey.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContains.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsEqual.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsIdentical.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsOnly.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Type/IsInstanceOf.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Type/IsNull.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Constraint/Type/IsType.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/DataProviderTestSuite.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Error/Deprecated.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Error/Error.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Error/Notice.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Error/Warning.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/ErrorTestCase.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/ActualValueIsNotAnObjectException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotAcceptParameterTypeException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareParameterTypeException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotExistException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/Error.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/OutputError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/SyntheticError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Exception/Warning.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/ExceptionWrapper.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/ExecutionOrderDependency.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/IncompleteTest.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/IncompleteTestCase.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Api/Api.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Api/Method.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseAddMethodsException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/ClassAlreadyExistsException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsFinalException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsReadonlyException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/DuplicateMethodException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/InvalidMethodNameException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/MatchBuilderNotFoundException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameNotConfiguredException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/OriginalConstructorInvocationRequiredException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/ReflectionException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/SoapExtensionNotAvailableException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownClassException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTraitException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTypeException.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/deprecation.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/intersection.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_class.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_method.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_method_never_or_void.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/mocked_static_method.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/proxied_method.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/proxied_method_never_or_void.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/trait_class.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/wsdl_class.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Generator/wsdl_method.tpl delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Invocation.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Matcher.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockClass.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockMethod.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockObject.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockTrait.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/MockType.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/MockObject/Verifiable.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Reorderable.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/SelfDescribing.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/SkippedTest.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/SkippedTestCase.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/Test.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/TestBuilder.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/TestCase.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/TestFailure.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/TestListener.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/TestResult.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/TestSuite.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/TestSuiteIterator.php delete mode 100644 vendor/phpunit/phpunit/src/Framework/WarningTestCase.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/BaseTestRunner.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/DefaultTestResultCache.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Extension/ExtensionHandler.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Extension/PharLoader.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/Factory.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/Hook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/TestHook.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/NullTestResultCache.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/PhptTestCase.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/ResultCacheExtension.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/TestResultCache.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/TestSuiteLoader.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/TestSuiteSorter.php delete mode 100644 vendor/phpunit/phpunit/src/Runner/Version.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/CliArguments/Builder.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/CliArguments/Configuration.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/CliArguments/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/CliArguments/Mapper.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/Command.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/DefaultResultPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/Exception/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/Exception/ReflectionException.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/Exception/TestFileNotFoundException.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/Help.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/ResultPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/TestRunner.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/TestSuiteMapper.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/CodeCoverage.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/Directory.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/FilterMapper.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Clover.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Cobertura.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Crap4j.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Html.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Php.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Text.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Xml.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Configuration.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/Directory.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/File.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Generator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Group.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Groups.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Loader.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Junit.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Logging.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TeamCity.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Html.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Text.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Xml.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Text.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilder.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilderException.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationException.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/ConvertLogTypes.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCloverToReport.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCrap4jToReport.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageHtmlToReport.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoveragePhpToReport.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageTextToReport.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageXmlToReport.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/IntroduceCoverageElement.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/Migration.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromRootToCoverage.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistExcludesToCoverage.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistIncludesToCoverage.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveCacheTokensAttribute.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveEmptyFilter.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveLogTypes.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/UpdateSchemaLocationTo93.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Constant.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSetting.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Php.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Variable.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/Extension.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/PHPUnit.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectory.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFile.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuite.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollection.php delete mode 100644 vendor/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollectionIterator.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Annotation/DocBlock.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Annotation/Registry.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Blacklist.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Cloner.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Color.php delete mode 100644 vendor/phpunit/phpunit/src/Util/ErrorHandler.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Util/ExcludeList.php delete mode 100644 vendor/phpunit/phpunit/src/Util/FileLoader.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Filesystem.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Filter.php delete mode 100644 vendor/phpunit/phpunit/src/Util/GlobalState.php delete mode 100644 vendor/phpunit/phpunit/src/Util/InvalidDataSetException.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Json.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Log/JUnit.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Log/TeamCity.php delete mode 100644 vendor/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php delete mode 100644 vendor/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php delete mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/PhptTestCase.tpl delete mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseClass.tpl delete mode 100644 vendor/phpunit/phpunit/src/Util/PHP/Template/TestCaseMethod.tpl delete mode 100644 vendor/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Printer.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Reflection.php delete mode 100644 vendor/phpunit/phpunit/src/Util/RegularExpression.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Test.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php delete mode 100644 vendor/phpunit/phpunit/src/Util/TextTestListRenderer.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Type.php delete mode 100644 vendor/phpunit/phpunit/src/Util/VersionComparisonOperator.php delete mode 100644 vendor/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/Exception.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/FailedSchemaDetectionResult.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/Loader.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/SchemaDetectionResult.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/SchemaDetector.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/SchemaFinder.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/SuccessfulSchemaDetectionResult.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/ValidationResult.php delete mode 100644 vendor/phpunit/phpunit/src/Util/Xml/Validator.php delete mode 100644 vendor/phpunit/phpunit/src/Util/XmlTestListRenderer.php delete mode 100644 vendor/psr/cache/CHANGELOG.md delete mode 100644 vendor/psr/cache/LICENSE.txt delete mode 100644 vendor/psr/cache/README.md delete mode 100644 vendor/psr/cache/composer.json delete mode 100644 vendor/psr/cache/src/CacheException.php delete mode 100644 vendor/psr/cache/src/CacheItemInterface.php delete mode 100644 vendor/psr/cache/src/CacheItemPoolInterface.php delete mode 100644 vendor/psr/cache/src/InvalidArgumentException.php delete mode 100644 vendor/psr/clock/CHANGELOG.md delete mode 100644 vendor/psr/clock/README.md delete mode 100644 vendor/psr/clock/composer.json delete mode 100644 vendor/psr/clock/src/ClockInterface.php delete mode 100644 vendor/psr/container/.gitignore delete mode 100644 vendor/psr/container/README.md delete mode 100644 vendor/psr/container/composer.json delete mode 100644 vendor/psr/container/src/ContainerExceptionInterface.php delete mode 100644 vendor/psr/container/src/ContainerInterface.php delete mode 100644 vendor/psr/container/src/NotFoundExceptionInterface.php delete mode 100644 vendor/psr/event-dispatcher/.editorconfig delete mode 100644 vendor/psr/event-dispatcher/.gitignore delete mode 100644 vendor/psr/event-dispatcher/README.md delete mode 100644 vendor/psr/event-dispatcher/composer.json delete mode 100644 vendor/psr/event-dispatcher/src/EventDispatcherInterface.php delete mode 100644 vendor/psr/event-dispatcher/src/ListenerProviderInterface.php delete mode 100644 vendor/psr/event-dispatcher/src/StoppableEventInterface.php delete mode 100644 vendor/psr/link/.editorconfig delete mode 100644 vendor/psr/link/CHANGELOG.md delete mode 100644 vendor/psr/link/LICENSE.md delete mode 100644 vendor/psr/link/README.md delete mode 100644 vendor/psr/link/composer.json delete mode 100644 vendor/psr/link/src/EvolvableLinkInterface.php delete mode 100644 vendor/psr/link/src/EvolvableLinkProviderInterface.php delete mode 100644 vendor/psr/link/src/LinkInterface.php delete mode 100644 vendor/psr/link/src/LinkProviderInterface.php delete mode 100644 vendor/psr/log/README.md delete mode 100644 vendor/psr/log/composer.json delete mode 100644 vendor/psr/log/src/AbstractLogger.php delete mode 100644 vendor/psr/log/src/InvalidArgumentException.php delete mode 100644 vendor/psr/log/src/LogLevel.php delete mode 100644 vendor/psr/log/src/LoggerAwareInterface.php delete mode 100644 vendor/psr/log/src/LoggerAwareTrait.php delete mode 100644 vendor/psr/log/src/LoggerInterface.php delete mode 100644 vendor/psr/log/src/LoggerTrait.php delete mode 100644 vendor/psr/log/src/NullLogger.php delete mode 100644 vendor/sebastian/cli-parser/ChangeLog.md delete mode 100644 vendor/sebastian/cli-parser/README.md delete mode 100644 vendor/sebastian/cli-parser/composer.json delete mode 100644 vendor/sebastian/cli-parser/infection.json delete mode 100644 vendor/sebastian/cli-parser/src/Parser.php delete mode 100644 vendor/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php delete mode 100644 vendor/sebastian/cli-parser/src/exceptions/Exception.php delete mode 100644 vendor/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php delete mode 100644 vendor/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php delete mode 100644 vendor/sebastian/cli-parser/src/exceptions/UnknownOptionException.php delete mode 100644 vendor/sebastian/code-unit-reverse-lookup/ChangeLog.md delete mode 100644 vendor/sebastian/code-unit-reverse-lookup/README.md delete mode 100644 vendor/sebastian/code-unit-reverse-lookup/composer.json delete mode 100644 vendor/sebastian/code-unit-reverse-lookup/src/Wizard.php delete mode 100644 vendor/sebastian/code-unit/.psalm/baseline.xml delete mode 100644 vendor/sebastian/code-unit/.psalm/config.xml delete mode 100644 vendor/sebastian/code-unit/ChangeLog.md delete mode 100644 vendor/sebastian/code-unit/README.md delete mode 100644 vendor/sebastian/code-unit/composer.json delete mode 100644 vendor/sebastian/code-unit/src/ClassMethodUnit.php delete mode 100644 vendor/sebastian/code-unit/src/ClassUnit.php delete mode 100644 vendor/sebastian/code-unit/src/CodeUnit.php delete mode 100644 vendor/sebastian/code-unit/src/CodeUnitCollection.php delete mode 100644 vendor/sebastian/code-unit/src/CodeUnitCollectionIterator.php delete mode 100644 vendor/sebastian/code-unit/src/FunctionUnit.php delete mode 100644 vendor/sebastian/code-unit/src/InterfaceMethodUnit.php delete mode 100644 vendor/sebastian/code-unit/src/InterfaceUnit.php delete mode 100644 vendor/sebastian/code-unit/src/Mapper.php delete mode 100644 vendor/sebastian/code-unit/src/TraitMethodUnit.php delete mode 100644 vendor/sebastian/code-unit/src/TraitUnit.php delete mode 100644 vendor/sebastian/code-unit/src/exceptions/Exception.php delete mode 100644 vendor/sebastian/code-unit/src/exceptions/InvalidCodeUnitException.php delete mode 100644 vendor/sebastian/code-unit/src/exceptions/NoTraitException.php delete mode 100644 vendor/sebastian/code-unit/src/exceptions/ReflectionException.php delete mode 100644 vendor/sebastian/comparator/ChangeLog.md delete mode 100644 vendor/sebastian/comparator/README.md delete mode 100644 vendor/sebastian/comparator/composer.json delete mode 100644 vendor/sebastian/comparator/src/ArrayComparator.php delete mode 100644 vendor/sebastian/comparator/src/Comparator.php delete mode 100644 vendor/sebastian/comparator/src/ComparisonFailure.php delete mode 100644 vendor/sebastian/comparator/src/DOMNodeComparator.php delete mode 100644 vendor/sebastian/comparator/src/DateTimeComparator.php delete mode 100644 vendor/sebastian/comparator/src/DoubleComparator.php delete mode 100644 vendor/sebastian/comparator/src/ExceptionComparator.php delete mode 100644 vendor/sebastian/comparator/src/Factory.php delete mode 100644 vendor/sebastian/comparator/src/MockObjectComparator.php delete mode 100644 vendor/sebastian/comparator/src/NumericComparator.php delete mode 100644 vendor/sebastian/comparator/src/ObjectComparator.php delete mode 100644 vendor/sebastian/comparator/src/ResourceComparator.php delete mode 100644 vendor/sebastian/comparator/src/ScalarComparator.php delete mode 100644 vendor/sebastian/comparator/src/SplObjectStorageComparator.php delete mode 100644 vendor/sebastian/comparator/src/TypeComparator.php delete mode 100644 vendor/sebastian/comparator/src/exceptions/Exception.php delete mode 100644 vendor/sebastian/comparator/src/exceptions/RuntimeException.php delete mode 100644 vendor/sebastian/complexity/.psalm/baseline.xml delete mode 100644 vendor/sebastian/complexity/.psalm/config.xml delete mode 100644 vendor/sebastian/complexity/ChangeLog.md delete mode 100644 vendor/sebastian/complexity/README.md delete mode 100644 vendor/sebastian/complexity/composer.json delete mode 100644 vendor/sebastian/complexity/src/Calculator.php delete mode 100644 vendor/sebastian/complexity/src/Complexity/Complexity.php delete mode 100644 vendor/sebastian/complexity/src/Complexity/ComplexityCollection.php delete mode 100644 vendor/sebastian/complexity/src/Complexity/ComplexityCollectionIterator.php delete mode 100644 vendor/sebastian/complexity/src/Exception/Exception.php delete mode 100644 vendor/sebastian/complexity/src/Exception/RuntimeException.php delete mode 100644 vendor/sebastian/complexity/src/Visitor/ComplexityCalculatingVisitor.php delete mode 100644 vendor/sebastian/complexity/src/Visitor/CyclomaticComplexityCalculatingVisitor.php delete mode 100644 vendor/sebastian/diff/ChangeLog.md delete mode 100644 vendor/sebastian/diff/README.md delete mode 100644 vendor/sebastian/diff/composer.json delete mode 100644 vendor/sebastian/diff/src/Chunk.php delete mode 100644 vendor/sebastian/diff/src/Diff.php delete mode 100644 vendor/sebastian/diff/src/Differ.php delete mode 100644 vendor/sebastian/diff/src/Exception/ConfigurationException.php delete mode 100644 vendor/sebastian/diff/src/Exception/Exception.php delete mode 100644 vendor/sebastian/diff/src/Exception/InvalidArgumentException.php delete mode 100644 vendor/sebastian/diff/src/Line.php delete mode 100644 vendor/sebastian/diff/src/LongestCommonSubsequenceCalculator.php delete mode 100644 vendor/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php delete mode 100644 vendor/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php delete mode 100644 vendor/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php delete mode 100644 vendor/sebastian/diff/src/Output/DiffOutputBuilderInterface.php delete mode 100644 vendor/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php delete mode 100644 vendor/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php delete mode 100644 vendor/sebastian/diff/src/Parser.php delete mode 100644 vendor/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php delete mode 100644 vendor/sebastian/environment/ChangeLog.md delete mode 100644 vendor/sebastian/environment/README.md delete mode 100644 vendor/sebastian/environment/composer.json delete mode 100644 vendor/sebastian/environment/src/Console.php delete mode 100644 vendor/sebastian/environment/src/OperatingSystem.php delete mode 100644 vendor/sebastian/environment/src/Runtime.php delete mode 100644 vendor/sebastian/exporter/ChangeLog.md delete mode 100644 vendor/sebastian/exporter/README.md delete mode 100644 vendor/sebastian/exporter/composer.json delete mode 100644 vendor/sebastian/exporter/src/Exporter.php delete mode 100644 vendor/sebastian/global-state/ChangeLog.md delete mode 100644 vendor/sebastian/global-state/README.md delete mode 100644 vendor/sebastian/global-state/composer.json delete mode 100644 vendor/sebastian/global-state/src/CodeExporter.php delete mode 100644 vendor/sebastian/global-state/src/ExcludeList.php delete mode 100644 vendor/sebastian/global-state/src/Restorer.php delete mode 100644 vendor/sebastian/global-state/src/Snapshot.php delete mode 100644 vendor/sebastian/global-state/src/exceptions/Exception.php delete mode 100644 vendor/sebastian/global-state/src/exceptions/RuntimeException.php delete mode 100644 vendor/sebastian/lines-of-code/.psalm/baseline.xml delete mode 100644 vendor/sebastian/lines-of-code/.psalm/config.xml delete mode 100644 vendor/sebastian/lines-of-code/ChangeLog.md delete mode 100644 vendor/sebastian/lines-of-code/README.md delete mode 100644 vendor/sebastian/lines-of-code/composer.json delete mode 100644 vendor/sebastian/lines-of-code/src/Counter.php delete mode 100644 vendor/sebastian/lines-of-code/src/Exception/Exception.php delete mode 100644 vendor/sebastian/lines-of-code/src/Exception/IllogicalValuesException.php delete mode 100644 vendor/sebastian/lines-of-code/src/Exception/NegativeValueException.php delete mode 100644 vendor/sebastian/lines-of-code/src/Exception/RuntimeException.php delete mode 100644 vendor/sebastian/lines-of-code/src/LineCountingVisitor.php delete mode 100644 vendor/sebastian/lines-of-code/src/LinesOfCode.php delete mode 100644 vendor/sebastian/object-enumerator/.psalm/baseline.xml delete mode 100644 vendor/sebastian/object-enumerator/.psalm/config.xml delete mode 100644 vendor/sebastian/object-enumerator/ChangeLog.md delete mode 100644 vendor/sebastian/object-enumerator/README.md delete mode 100644 vendor/sebastian/object-enumerator/composer.json delete mode 100644 vendor/sebastian/object-enumerator/phpunit.xml delete mode 100644 vendor/sebastian/object-enumerator/src/Enumerator.php delete mode 100644 vendor/sebastian/object-enumerator/src/Exception.php delete mode 100644 vendor/sebastian/object-enumerator/src/InvalidArgumentException.php delete mode 100644 vendor/sebastian/object-reflector/.psalm/baseline.xml delete mode 100644 vendor/sebastian/object-reflector/.psalm/config.xml delete mode 100644 vendor/sebastian/object-reflector/ChangeLog.md delete mode 100644 vendor/sebastian/object-reflector/README.md delete mode 100644 vendor/sebastian/object-reflector/composer.json delete mode 100644 vendor/sebastian/object-reflector/src/Exception.php delete mode 100644 vendor/sebastian/object-reflector/src/InvalidArgumentException.php delete mode 100644 vendor/sebastian/object-reflector/src/ObjectReflector.php delete mode 100644 vendor/sebastian/recursion-context/ChangeLog.md delete mode 100644 vendor/sebastian/recursion-context/README.md delete mode 100644 vendor/sebastian/recursion-context/composer.json delete mode 100644 vendor/sebastian/recursion-context/src/Context.php delete mode 100644 vendor/sebastian/recursion-context/src/Exception.php delete mode 100644 vendor/sebastian/recursion-context/src/InvalidArgumentException.php delete mode 100644 vendor/sebastian/resource-operations/ChangeLog.md delete mode 100644 vendor/sebastian/resource-operations/README.md delete mode 100644 vendor/sebastian/resource-operations/SECURITY.md delete mode 100755 vendor/sebastian/resource-operations/build/generate.php delete mode 100644 vendor/sebastian/resource-operations/composer.json delete mode 100644 vendor/sebastian/resource-operations/src/ResourceOperations.php delete mode 100644 vendor/sebastian/type/ChangeLog.md delete mode 100644 vendor/sebastian/type/README.md delete mode 100644 vendor/sebastian/type/composer.json delete mode 100644 vendor/sebastian/type/src/Parameter.php delete mode 100644 vendor/sebastian/type/src/ReflectionMapper.php delete mode 100644 vendor/sebastian/type/src/TypeName.php delete mode 100644 vendor/sebastian/type/src/exception/Exception.php delete mode 100644 vendor/sebastian/type/src/exception/RuntimeException.php delete mode 100644 vendor/sebastian/type/src/type/CallableType.php delete mode 100644 vendor/sebastian/type/src/type/FalseType.php delete mode 100644 vendor/sebastian/type/src/type/GenericObjectType.php delete mode 100644 vendor/sebastian/type/src/type/IntersectionType.php delete mode 100644 vendor/sebastian/type/src/type/IterableType.php delete mode 100644 vendor/sebastian/type/src/type/MixedType.php delete mode 100644 vendor/sebastian/type/src/type/NeverType.php delete mode 100644 vendor/sebastian/type/src/type/NullType.php delete mode 100644 vendor/sebastian/type/src/type/ObjectType.php delete mode 100644 vendor/sebastian/type/src/type/SimpleType.php delete mode 100644 vendor/sebastian/type/src/type/StaticType.php delete mode 100644 vendor/sebastian/type/src/type/TrueType.php delete mode 100644 vendor/sebastian/type/src/type/Type.php delete mode 100644 vendor/sebastian/type/src/type/UnionType.php delete mode 100644 vendor/sebastian/type/src/type/UnknownType.php delete mode 100644 vendor/sebastian/type/src/type/VoidType.php delete mode 100644 vendor/sebastian/version/.gitattributes delete mode 100644 vendor/sebastian/version/.gitignore delete mode 100644 vendor/sebastian/version/ChangeLog.md delete mode 100644 vendor/sebastian/version/README.md delete mode 100644 vendor/sebastian/version/composer.json delete mode 100644 vendor/sebastian/version/src/Version.php delete mode 100644 vendor/symfony/asset-mapper/AssetMapper.php delete mode 100644 vendor/symfony/asset-mapper/AssetMapperCompiler.php delete mode 100644 vendor/symfony/asset-mapper/AssetMapperDevServerSubscriber.php delete mode 100644 vendor/symfony/asset-mapper/AssetMapperInterface.php delete mode 100644 vendor/symfony/asset-mapper/AssetMapperRepository.php delete mode 100644 vendor/symfony/asset-mapper/CHANGELOG.md delete mode 100644 vendor/symfony/asset-mapper/Command/AssetMapperCompileCommand.php delete mode 100644 vendor/symfony/asset-mapper/Command/DebugAssetMapperCommand.php delete mode 100644 vendor/symfony/asset-mapper/Command/ImportMapAuditCommand.php delete mode 100644 vendor/symfony/asset-mapper/Command/ImportMapInstallCommand.php delete mode 100644 vendor/symfony/asset-mapper/Command/ImportMapOutdatedCommand.php delete mode 100644 vendor/symfony/asset-mapper/Command/ImportMapRemoveCommand.php delete mode 100644 vendor/symfony/asset-mapper/Command/ImportMapRequireCommand.php delete mode 100644 vendor/symfony/asset-mapper/Command/ImportMapUpdateCommand.php delete mode 100644 vendor/symfony/asset-mapper/Command/VersionProblemCommandTrait.php delete mode 100644 vendor/symfony/asset-mapper/CompiledAssetMapperConfigReader.php delete mode 100644 vendor/symfony/asset-mapper/Compiler/AssetCompilerInterface.php delete mode 100644 vendor/symfony/asset-mapper/Compiler/CssAssetUrlCompiler.php delete mode 100644 vendor/symfony/asset-mapper/Compiler/JavaScriptImportPathCompiler.php delete mode 100644 vendor/symfony/asset-mapper/Compiler/SourceMappingUrlsCompiler.php delete mode 100644 vendor/symfony/asset-mapper/Event/PreAssetsCompileEvent.php delete mode 100644 vendor/symfony/asset-mapper/Exception/CircularAssetsException.php delete mode 100644 vendor/symfony/asset-mapper/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/asset-mapper/Exception/LogicException.php delete mode 100644 vendor/symfony/asset-mapper/Exception/RuntimeException.php delete mode 100644 vendor/symfony/asset-mapper/Factory/CachedMappedAssetFactory.php delete mode 100644 vendor/symfony/asset-mapper/Factory/MappedAssetFactory.php delete mode 100644 vendor/symfony/asset-mapper/Factory/MappedAssetFactoryInterface.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapAuditor.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapConfigReader.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapEntries.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapEntry.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapGenerator.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapManager.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapPackageAudit.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapPackageAuditVulnerability.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapRenderer.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapType.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapUpdateChecker.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/ImportMapVersionChecker.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/JavaScriptImport.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/PackageRequireOptions.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/PackageUpdateInfo.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/PackageVersionProblem.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/RemotePackageDownloader.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/RemotePackageStorage.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/Resolver/JsDelivrEsmResolver.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/Resolver/PackageResolverInterface.php delete mode 100644 vendor/symfony/asset-mapper/ImportMap/Resolver/ResolvedImportMapPackage.php delete mode 100644 vendor/symfony/asset-mapper/MappedAsset.php delete mode 100644 vendor/symfony/asset-mapper/MapperAwareAssetPackage.php delete mode 100644 vendor/symfony/asset-mapper/Path/LocalPublicAssetsFilesystem.php delete mode 100644 vendor/symfony/asset-mapper/Path/PublicAssetsFilesystemInterface.php delete mode 100644 vendor/symfony/asset-mapper/Path/PublicAssetsPathResolver.php delete mode 100644 vendor/symfony/asset-mapper/Path/PublicAssetsPathResolverInterface.php delete mode 100644 vendor/symfony/asset-mapper/README.md delete mode 100644 vendor/symfony/asset-mapper/composer.json delete mode 100644 vendor/symfony/asset/CHANGELOG.md delete mode 100644 vendor/symfony/asset/Context/ContextInterface.php delete mode 100644 vendor/symfony/asset/Context/NullContext.php delete mode 100644 vendor/symfony/asset/Context/RequestStackContext.php delete mode 100644 vendor/symfony/asset/Exception/AssetNotFoundException.php delete mode 100644 vendor/symfony/asset/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/asset/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/asset/Exception/LogicException.php delete mode 100644 vendor/symfony/asset/Exception/RuntimeException.php delete mode 100644 vendor/symfony/asset/Package.php delete mode 100644 vendor/symfony/asset/PackageInterface.php delete mode 100644 vendor/symfony/asset/Packages.php delete mode 100644 vendor/symfony/asset/PathPackage.php delete mode 100644 vendor/symfony/asset/README.md delete mode 100644 vendor/symfony/asset/UrlPackage.php delete mode 100644 vendor/symfony/asset/VersionStrategy/EmptyVersionStrategy.php delete mode 100644 vendor/symfony/asset/VersionStrategy/JsonManifestVersionStrategy.php delete mode 100644 vendor/symfony/asset/VersionStrategy/StaticVersionStrategy.php delete mode 100644 vendor/symfony/asset/VersionStrategy/VersionStrategyInterface.php delete mode 100644 vendor/symfony/asset/composer.json delete mode 100644 vendor/symfony/browser-kit/AbstractBrowser.php delete mode 100644 vendor/symfony/browser-kit/CHANGELOG.md delete mode 100644 vendor/symfony/browser-kit/Cookie.php delete mode 100644 vendor/symfony/browser-kit/CookieJar.php delete mode 100644 vendor/symfony/browser-kit/Exception/BadMethodCallException.php delete mode 100644 vendor/symfony/browser-kit/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/browser-kit/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/browser-kit/Exception/JsonException.php delete mode 100644 vendor/symfony/browser-kit/Exception/LogicException.php delete mode 100644 vendor/symfony/browser-kit/Exception/RuntimeException.php delete mode 100644 vendor/symfony/browser-kit/Exception/UnexpectedValueException.php delete mode 100644 vendor/symfony/browser-kit/History.php delete mode 100644 vendor/symfony/browser-kit/HttpBrowser.php delete mode 100644 vendor/symfony/browser-kit/README.md delete mode 100644 vendor/symfony/browser-kit/Request.php delete mode 100644 vendor/symfony/browser-kit/Response.php delete mode 100644 vendor/symfony/browser-kit/Test/Constraint/BrowserCookieValueSame.php delete mode 100644 vendor/symfony/browser-kit/Test/Constraint/BrowserHasCookie.php delete mode 100644 vendor/symfony/browser-kit/composer.json delete mode 100644 vendor/symfony/cache-contracts/CHANGELOG.md delete mode 100644 vendor/symfony/cache-contracts/CacheInterface.php delete mode 100644 vendor/symfony/cache-contracts/CacheTrait.php delete mode 100644 vendor/symfony/cache-contracts/CallbackInterface.php delete mode 100644 vendor/symfony/cache-contracts/ItemInterface.php delete mode 100644 vendor/symfony/cache-contracts/README.md delete mode 100644 vendor/symfony/cache-contracts/TagAwareCacheInterface.php delete mode 100644 vendor/symfony/cache-contracts/composer.json delete mode 100644 vendor/symfony/cache/Adapter/AbstractAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/AbstractTagAwareAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/AdapterInterface.php delete mode 100644 vendor/symfony/cache/Adapter/ApcuAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/ArrayAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/ChainAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/CouchbaseBucketAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/CouchbaseCollectionAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/DoctrineDbalAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/FilesystemAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/FilesystemTagAwareAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/MemcachedAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/NullAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/ParameterNormalizer.php delete mode 100644 vendor/symfony/cache/Adapter/PdoAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/PhpArrayAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/PhpFilesAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/ProxyAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/Psr16Adapter.php delete mode 100644 vendor/symfony/cache/Adapter/RedisAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/RedisTagAwareAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/TagAwareAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/TagAwareAdapterInterface.php delete mode 100644 vendor/symfony/cache/Adapter/TraceableAdapter.php delete mode 100644 vendor/symfony/cache/Adapter/TraceableTagAwareAdapter.php delete mode 100644 vendor/symfony/cache/CHANGELOG.md delete mode 100644 vendor/symfony/cache/CacheItem.php delete mode 100644 vendor/symfony/cache/DataCollector/CacheDataCollector.php delete mode 100644 vendor/symfony/cache/DependencyInjection/CacheCollectorPass.php delete mode 100644 vendor/symfony/cache/DependencyInjection/CachePoolClearerPass.php delete mode 100644 vendor/symfony/cache/DependencyInjection/CachePoolPass.php delete mode 100644 vendor/symfony/cache/DependencyInjection/CachePoolPrunerPass.php delete mode 100644 vendor/symfony/cache/Exception/CacheException.php delete mode 100644 vendor/symfony/cache/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/cache/Exception/LogicException.php delete mode 100644 vendor/symfony/cache/LockRegistry.php delete mode 100644 vendor/symfony/cache/Marshaller/DefaultMarshaller.php delete mode 100644 vendor/symfony/cache/Marshaller/DeflateMarshaller.php delete mode 100644 vendor/symfony/cache/Marshaller/MarshallerInterface.php delete mode 100644 vendor/symfony/cache/Marshaller/SodiumMarshaller.php delete mode 100644 vendor/symfony/cache/Marshaller/TagAwareMarshaller.php delete mode 100644 vendor/symfony/cache/Messenger/EarlyExpirationDispatcher.php delete mode 100644 vendor/symfony/cache/Messenger/EarlyExpirationHandler.php delete mode 100644 vendor/symfony/cache/Messenger/EarlyExpirationMessage.php delete mode 100644 vendor/symfony/cache/PruneableInterface.php delete mode 100644 vendor/symfony/cache/Psr16Cache.php delete mode 100644 vendor/symfony/cache/README.md delete mode 100644 vendor/symfony/cache/ResettableInterface.php delete mode 100644 vendor/symfony/cache/Traits/AbstractAdapterTrait.php delete mode 100644 vendor/symfony/cache/Traits/ContractsTrait.php delete mode 100644 vendor/symfony/cache/Traits/FilesystemCommonTrait.php delete mode 100644 vendor/symfony/cache/Traits/FilesystemTrait.php delete mode 100644 vendor/symfony/cache/Traits/ProxyTrait.php delete mode 100644 vendor/symfony/cache/Traits/Redis5Proxy.php delete mode 100644 vendor/symfony/cache/Traits/Redis6Proxy.php delete mode 100644 vendor/symfony/cache/Traits/Redis6ProxyTrait.php delete mode 100644 vendor/symfony/cache/Traits/RedisCluster5Proxy.php delete mode 100644 vendor/symfony/cache/Traits/RedisCluster6Proxy.php delete mode 100644 vendor/symfony/cache/Traits/RedisCluster6ProxyTrait.php delete mode 100644 vendor/symfony/cache/Traits/RedisClusterNodeProxy.php delete mode 100644 vendor/symfony/cache/Traits/RedisClusterProxy.php delete mode 100644 vendor/symfony/cache/Traits/RedisProxy.php delete mode 100644 vendor/symfony/cache/Traits/RedisTrait.php delete mode 100644 vendor/symfony/cache/Traits/RelayProxy.php delete mode 100644 vendor/symfony/cache/Traits/RelayProxyTrait.php delete mode 100644 vendor/symfony/cache/Traits/ValueWrapper.php delete mode 100644 vendor/symfony/cache/composer.json delete mode 100644 vendor/symfony/clock/CHANGELOG.md delete mode 100644 vendor/symfony/clock/Clock.php delete mode 100644 vendor/symfony/clock/ClockAwareTrait.php delete mode 100644 vendor/symfony/clock/ClockInterface.php delete mode 100644 vendor/symfony/clock/DatePoint.php delete mode 100644 vendor/symfony/clock/MockClock.php delete mode 100644 vendor/symfony/clock/MonotonicClock.php delete mode 100644 vendor/symfony/clock/NativeClock.php delete mode 100644 vendor/symfony/clock/README.md delete mode 100644 vendor/symfony/clock/Resources/now.php delete mode 100644 vendor/symfony/clock/Test/ClockSensitiveTrait.php delete mode 100644 vendor/symfony/clock/composer.json delete mode 100644 vendor/symfony/config/Builder/ClassBuilder.php delete mode 100644 vendor/symfony/config/Builder/ConfigBuilderGenerator.php delete mode 100644 vendor/symfony/config/Builder/ConfigBuilderGeneratorInterface.php delete mode 100644 vendor/symfony/config/Builder/ConfigBuilderInterface.php delete mode 100644 vendor/symfony/config/Builder/Method.php delete mode 100644 vendor/symfony/config/Builder/Property.php delete mode 100644 vendor/symfony/config/CHANGELOG.md delete mode 100644 vendor/symfony/config/ConfigCache.php delete mode 100644 vendor/symfony/config/ConfigCacheFactory.php delete mode 100644 vendor/symfony/config/ConfigCacheFactoryInterface.php delete mode 100644 vendor/symfony/config/ConfigCacheInterface.php delete mode 100644 vendor/symfony/config/Definition/ArrayNode.php delete mode 100644 vendor/symfony/config/Definition/BaseNode.php delete mode 100644 vendor/symfony/config/Definition/BooleanNode.php delete mode 100644 vendor/symfony/config/Definition/Builder/ArrayNodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/Builder/BooleanNodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/Builder/BuilderAwareInterface.php delete mode 100644 vendor/symfony/config/Definition/Builder/EnumNodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/Builder/ExprBuilder.php delete mode 100644 vendor/symfony/config/Definition/Builder/FloatNodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/Builder/IntegerNodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/Builder/MergeBuilder.php delete mode 100644 vendor/symfony/config/Definition/Builder/NodeBuilder.php delete mode 100644 vendor/symfony/config/Definition/Builder/NodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/Builder/NodeParentInterface.php delete mode 100644 vendor/symfony/config/Definition/Builder/NormalizationBuilder.php delete mode 100644 vendor/symfony/config/Definition/Builder/NumericNodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/Builder/ParentNodeDefinitionInterface.php delete mode 100644 vendor/symfony/config/Definition/Builder/ScalarNodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/Builder/TreeBuilder.php delete mode 100644 vendor/symfony/config/Definition/Builder/ValidationBuilder.php delete mode 100644 vendor/symfony/config/Definition/Builder/VariableNodeDefinition.php delete mode 100644 vendor/symfony/config/Definition/ConfigurableInterface.php delete mode 100644 vendor/symfony/config/Definition/Configuration.php delete mode 100644 vendor/symfony/config/Definition/ConfigurationInterface.php delete mode 100644 vendor/symfony/config/Definition/Configurator/DefinitionConfigurator.php delete mode 100644 vendor/symfony/config/Definition/Dumper/XmlReferenceDumper.php delete mode 100644 vendor/symfony/config/Definition/Dumper/YamlReferenceDumper.php delete mode 100644 vendor/symfony/config/Definition/EnumNode.php delete mode 100644 vendor/symfony/config/Definition/Exception/DuplicateKeyException.php delete mode 100644 vendor/symfony/config/Definition/Exception/Exception.php delete mode 100644 vendor/symfony/config/Definition/Exception/ForbiddenOverwriteException.php delete mode 100644 vendor/symfony/config/Definition/Exception/InvalidConfigurationException.php delete mode 100644 vendor/symfony/config/Definition/Exception/InvalidDefinitionException.php delete mode 100644 vendor/symfony/config/Definition/Exception/InvalidTypeException.php delete mode 100644 vendor/symfony/config/Definition/Exception/UnsetKeyException.php delete mode 100644 vendor/symfony/config/Definition/FloatNode.php delete mode 100644 vendor/symfony/config/Definition/IntegerNode.php delete mode 100644 vendor/symfony/config/Definition/Loader/DefinitionFileLoader.php delete mode 100644 vendor/symfony/config/Definition/NodeInterface.php delete mode 100644 vendor/symfony/config/Definition/NumericNode.php delete mode 100644 vendor/symfony/config/Definition/Processor.php delete mode 100644 vendor/symfony/config/Definition/PrototypeNodeInterface.php delete mode 100644 vendor/symfony/config/Definition/PrototypedArrayNode.php delete mode 100644 vendor/symfony/config/Definition/ScalarNode.php delete mode 100644 vendor/symfony/config/Definition/VariableNode.php delete mode 100644 vendor/symfony/config/Exception/FileLoaderImportCircularReferenceException.php delete mode 100644 vendor/symfony/config/Exception/FileLocatorFileNotFoundException.php delete mode 100644 vendor/symfony/config/Exception/LoaderLoadException.php delete mode 100644 vendor/symfony/config/Exception/LogicException.php delete mode 100644 vendor/symfony/config/FileLocator.php delete mode 100644 vendor/symfony/config/FileLocatorInterface.php delete mode 100644 vendor/symfony/config/Loader/DelegatingLoader.php delete mode 100644 vendor/symfony/config/Loader/DirectoryAwareLoaderInterface.php delete mode 100644 vendor/symfony/config/Loader/FileLoader.php delete mode 100644 vendor/symfony/config/Loader/GlobFileLoader.php delete mode 100644 vendor/symfony/config/Loader/Loader.php delete mode 100644 vendor/symfony/config/Loader/LoaderInterface.php delete mode 100644 vendor/symfony/config/Loader/LoaderResolver.php delete mode 100644 vendor/symfony/config/Loader/LoaderResolverInterface.php delete mode 100644 vendor/symfony/config/Loader/ParamConfigurator.php delete mode 100644 vendor/symfony/config/README.md delete mode 100644 vendor/symfony/config/Resource/ClassExistenceResource.php delete mode 100644 vendor/symfony/config/Resource/ComposerResource.php delete mode 100644 vendor/symfony/config/Resource/DirectoryResource.php delete mode 100644 vendor/symfony/config/Resource/FileExistenceResource.php delete mode 100644 vendor/symfony/config/Resource/FileResource.php delete mode 100644 vendor/symfony/config/Resource/GlobResource.php delete mode 100644 vendor/symfony/config/Resource/ReflectionClassResource.php delete mode 100644 vendor/symfony/config/Resource/ResourceInterface.php delete mode 100644 vendor/symfony/config/Resource/SelfCheckingResourceChecker.php delete mode 100644 vendor/symfony/config/Resource/SelfCheckingResourceInterface.php delete mode 100644 vendor/symfony/config/ResourceCheckerConfigCache.php delete mode 100644 vendor/symfony/config/ResourceCheckerConfigCacheFactory.php delete mode 100644 vendor/symfony/config/ResourceCheckerInterface.php delete mode 100644 vendor/symfony/config/Util/Exception/InvalidXmlException.php delete mode 100644 vendor/symfony/config/Util/Exception/XmlParsingException.php delete mode 100644 vendor/symfony/config/Util/XmlUtils.php delete mode 100644 vendor/symfony/config/composer.json delete mode 100644 vendor/symfony/console/Application.php delete mode 100644 vendor/symfony/console/Attribute/AsCommand.php delete mode 100644 vendor/symfony/console/CHANGELOG.md delete mode 100644 vendor/symfony/console/CI/GithubActionReporter.php delete mode 100644 vendor/symfony/console/Color.php delete mode 100644 vendor/symfony/console/Command/Command.php delete mode 100644 vendor/symfony/console/Command/CompleteCommand.php delete mode 100644 vendor/symfony/console/Command/DumpCompletionCommand.php delete mode 100644 vendor/symfony/console/Command/HelpCommand.php delete mode 100644 vendor/symfony/console/Command/LazyCommand.php delete mode 100644 vendor/symfony/console/Command/ListCommand.php delete mode 100644 vendor/symfony/console/Command/LockableTrait.php delete mode 100644 vendor/symfony/console/Command/SignalableCommandInterface.php delete mode 100644 vendor/symfony/console/Command/TraceableCommand.php delete mode 100644 vendor/symfony/console/CommandLoader/CommandLoaderInterface.php delete mode 100644 vendor/symfony/console/CommandLoader/ContainerCommandLoader.php delete mode 100644 vendor/symfony/console/CommandLoader/FactoryCommandLoader.php delete mode 100644 vendor/symfony/console/Completion/CompletionInput.php delete mode 100644 vendor/symfony/console/Completion/CompletionSuggestions.php delete mode 100644 vendor/symfony/console/Completion/Output/BashCompletionOutput.php delete mode 100644 vendor/symfony/console/Completion/Output/CompletionOutputInterface.php delete mode 100644 vendor/symfony/console/Completion/Output/FishCompletionOutput.php delete mode 100644 vendor/symfony/console/Completion/Output/ZshCompletionOutput.php delete mode 100644 vendor/symfony/console/Completion/Suggestion.php delete mode 100644 vendor/symfony/console/ConsoleEvents.php delete mode 100644 vendor/symfony/console/Cursor.php delete mode 100644 vendor/symfony/console/DataCollector/CommandDataCollector.php delete mode 100644 vendor/symfony/console/Debug/CliRequest.php delete mode 100644 vendor/symfony/console/DependencyInjection/AddConsoleCommandPass.php delete mode 100644 vendor/symfony/console/Descriptor/ApplicationDescription.php delete mode 100644 vendor/symfony/console/Descriptor/Descriptor.php delete mode 100644 vendor/symfony/console/Descriptor/DescriptorInterface.php delete mode 100644 vendor/symfony/console/Descriptor/JsonDescriptor.php delete mode 100644 vendor/symfony/console/Descriptor/MarkdownDescriptor.php delete mode 100644 vendor/symfony/console/Descriptor/ReStructuredTextDescriptor.php delete mode 100644 vendor/symfony/console/Descriptor/TextDescriptor.php delete mode 100644 vendor/symfony/console/Descriptor/XmlDescriptor.php delete mode 100644 vendor/symfony/console/Event/ConsoleCommandEvent.php delete mode 100644 vendor/symfony/console/Event/ConsoleErrorEvent.php delete mode 100644 vendor/symfony/console/Event/ConsoleEvent.php delete mode 100644 vendor/symfony/console/Event/ConsoleSignalEvent.php delete mode 100644 vendor/symfony/console/Event/ConsoleTerminateEvent.php delete mode 100644 vendor/symfony/console/EventListener/ErrorListener.php delete mode 100644 vendor/symfony/console/Exception/CommandNotFoundException.php delete mode 100644 vendor/symfony/console/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/console/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/console/Exception/InvalidOptionException.php delete mode 100644 vendor/symfony/console/Exception/LogicException.php delete mode 100644 vendor/symfony/console/Exception/MissingInputException.php delete mode 100644 vendor/symfony/console/Exception/NamespaceNotFoundException.php delete mode 100644 vendor/symfony/console/Exception/RunCommandFailedException.php delete mode 100644 vendor/symfony/console/Exception/RuntimeException.php delete mode 100644 vendor/symfony/console/Formatter/NullOutputFormatter.php delete mode 100644 vendor/symfony/console/Formatter/NullOutputFormatterStyle.php delete mode 100644 vendor/symfony/console/Formatter/OutputFormatter.php delete mode 100644 vendor/symfony/console/Formatter/OutputFormatterInterface.php delete mode 100644 vendor/symfony/console/Formatter/OutputFormatterStyle.php delete mode 100644 vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php delete mode 100644 vendor/symfony/console/Formatter/OutputFormatterStyleStack.php delete mode 100644 vendor/symfony/console/Formatter/WrappableOutputFormatterInterface.php delete mode 100644 vendor/symfony/console/Helper/DebugFormatterHelper.php delete mode 100644 vendor/symfony/console/Helper/DescriptorHelper.php delete mode 100644 vendor/symfony/console/Helper/Dumper.php delete mode 100644 vendor/symfony/console/Helper/FormatterHelper.php delete mode 100644 vendor/symfony/console/Helper/Helper.php delete mode 100644 vendor/symfony/console/Helper/HelperInterface.php delete mode 100644 vendor/symfony/console/Helper/HelperSet.php delete mode 100644 vendor/symfony/console/Helper/InputAwareHelper.php delete mode 100644 vendor/symfony/console/Helper/OutputWrapper.php delete mode 100644 vendor/symfony/console/Helper/ProcessHelper.php delete mode 100644 vendor/symfony/console/Helper/ProgressBar.php delete mode 100644 vendor/symfony/console/Helper/ProgressIndicator.php delete mode 100644 vendor/symfony/console/Helper/QuestionHelper.php delete mode 100644 vendor/symfony/console/Helper/SymfonyQuestionHelper.php delete mode 100644 vendor/symfony/console/Helper/Table.php delete mode 100644 vendor/symfony/console/Helper/TableCell.php delete mode 100644 vendor/symfony/console/Helper/TableCellStyle.php delete mode 100644 vendor/symfony/console/Helper/TableRows.php delete mode 100644 vendor/symfony/console/Helper/TableSeparator.php delete mode 100644 vendor/symfony/console/Helper/TableStyle.php delete mode 100644 vendor/symfony/console/Input/ArgvInput.php delete mode 100644 vendor/symfony/console/Input/ArrayInput.php delete mode 100644 vendor/symfony/console/Input/Input.php delete mode 100644 vendor/symfony/console/Input/InputArgument.php delete mode 100644 vendor/symfony/console/Input/InputAwareInterface.php delete mode 100644 vendor/symfony/console/Input/InputDefinition.php delete mode 100644 vendor/symfony/console/Input/InputInterface.php delete mode 100644 vendor/symfony/console/Input/InputOption.php delete mode 100644 vendor/symfony/console/Input/StreamableInputInterface.php delete mode 100644 vendor/symfony/console/Input/StringInput.php delete mode 100644 vendor/symfony/console/Logger/ConsoleLogger.php delete mode 100644 vendor/symfony/console/Messenger/RunCommandContext.php delete mode 100644 vendor/symfony/console/Messenger/RunCommandMessage.php delete mode 100644 vendor/symfony/console/Messenger/RunCommandMessageHandler.php delete mode 100644 vendor/symfony/console/Output/AnsiColorMode.php delete mode 100644 vendor/symfony/console/Output/BufferedOutput.php delete mode 100644 vendor/symfony/console/Output/ConsoleOutput.php delete mode 100644 vendor/symfony/console/Output/ConsoleOutputInterface.php delete mode 100644 vendor/symfony/console/Output/ConsoleSectionOutput.php delete mode 100644 vendor/symfony/console/Output/NullOutput.php delete mode 100644 vendor/symfony/console/Output/Output.php delete mode 100644 vendor/symfony/console/Output/OutputInterface.php delete mode 100644 vendor/symfony/console/Output/StreamOutput.php delete mode 100644 vendor/symfony/console/Output/TrimmedBufferOutput.php delete mode 100644 vendor/symfony/console/Question/ChoiceQuestion.php delete mode 100644 vendor/symfony/console/Question/ConfirmationQuestion.php delete mode 100644 vendor/symfony/console/Question/Question.php delete mode 100644 vendor/symfony/console/README.md delete mode 100644 vendor/symfony/console/Resources/bin/hiddeninput.exe delete mode 100644 vendor/symfony/console/Resources/completion.bash delete mode 100644 vendor/symfony/console/Resources/completion.fish delete mode 100644 vendor/symfony/console/Resources/completion.zsh delete mode 100644 vendor/symfony/console/SignalRegistry/SignalMap.php delete mode 100644 vendor/symfony/console/SignalRegistry/SignalRegistry.php delete mode 100644 vendor/symfony/console/SingleCommandApplication.php delete mode 100644 vendor/symfony/console/Style/OutputStyle.php delete mode 100644 vendor/symfony/console/Style/StyleInterface.php delete mode 100644 vendor/symfony/console/Style/SymfonyStyle.php delete mode 100644 vendor/symfony/console/Terminal.php delete mode 100644 vendor/symfony/console/Tester/ApplicationTester.php delete mode 100644 vendor/symfony/console/Tester/CommandCompletionTester.php delete mode 100644 vendor/symfony/console/Tester/CommandTester.php delete mode 100644 vendor/symfony/console/Tester/Constraint/CommandIsSuccessful.php delete mode 100644 vendor/symfony/console/Tester/TesterTrait.php delete mode 100644 vendor/symfony/console/composer.json delete mode 100644 vendor/symfony/css-selector/CHANGELOG.md delete mode 100644 vendor/symfony/css-selector/CssSelectorConverter.php delete mode 100644 vendor/symfony/css-selector/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/css-selector/Exception/ExpressionErrorException.php delete mode 100644 vendor/symfony/css-selector/Exception/InternalErrorException.php delete mode 100644 vendor/symfony/css-selector/Exception/ParseException.php delete mode 100644 vendor/symfony/css-selector/Exception/SyntaxErrorException.php delete mode 100644 vendor/symfony/css-selector/Node/AbstractNode.php delete mode 100644 vendor/symfony/css-selector/Node/AttributeNode.php delete mode 100644 vendor/symfony/css-selector/Node/ClassNode.php delete mode 100644 vendor/symfony/css-selector/Node/CombinedSelectorNode.php delete mode 100644 vendor/symfony/css-selector/Node/ElementNode.php delete mode 100644 vendor/symfony/css-selector/Node/FunctionNode.php delete mode 100644 vendor/symfony/css-selector/Node/HashNode.php delete mode 100644 vendor/symfony/css-selector/Node/MatchingNode.php delete mode 100644 vendor/symfony/css-selector/Node/NegationNode.php delete mode 100644 vendor/symfony/css-selector/Node/NodeInterface.php delete mode 100644 vendor/symfony/css-selector/Node/PseudoNode.php delete mode 100644 vendor/symfony/css-selector/Node/SelectorNode.php delete mode 100644 vendor/symfony/css-selector/Node/Specificity.php delete mode 100644 vendor/symfony/css-selector/Node/SpecificityAdjustmentNode.php delete mode 100644 vendor/symfony/css-selector/Parser/Handler/CommentHandler.php delete mode 100644 vendor/symfony/css-selector/Parser/Handler/HandlerInterface.php delete mode 100644 vendor/symfony/css-selector/Parser/Handler/HashHandler.php delete mode 100644 vendor/symfony/css-selector/Parser/Handler/IdentifierHandler.php delete mode 100644 vendor/symfony/css-selector/Parser/Handler/NumberHandler.php delete mode 100644 vendor/symfony/css-selector/Parser/Handler/StringHandler.php delete mode 100644 vendor/symfony/css-selector/Parser/Handler/WhitespaceHandler.php delete mode 100644 vendor/symfony/css-selector/Parser/Parser.php delete mode 100644 vendor/symfony/css-selector/Parser/ParserInterface.php delete mode 100644 vendor/symfony/css-selector/Parser/Reader.php delete mode 100644 vendor/symfony/css-selector/Parser/Shortcut/ClassParser.php delete mode 100644 vendor/symfony/css-selector/Parser/Shortcut/ElementParser.php delete mode 100644 vendor/symfony/css-selector/Parser/Shortcut/EmptyStringParser.php delete mode 100644 vendor/symfony/css-selector/Parser/Shortcut/HashParser.php delete mode 100644 vendor/symfony/css-selector/Parser/Token.php delete mode 100644 vendor/symfony/css-selector/Parser/TokenStream.php delete mode 100644 vendor/symfony/css-selector/Parser/Tokenizer/Tokenizer.php delete mode 100644 vendor/symfony/css-selector/Parser/Tokenizer/TokenizerEscaping.php delete mode 100644 vendor/symfony/css-selector/Parser/Tokenizer/TokenizerPatterns.php delete mode 100644 vendor/symfony/css-selector/README.md delete mode 100644 vendor/symfony/css-selector/XPath/Extension/AbstractExtension.php delete mode 100644 vendor/symfony/css-selector/XPath/Extension/AttributeMatchingExtension.php delete mode 100644 vendor/symfony/css-selector/XPath/Extension/CombinationExtension.php delete mode 100644 vendor/symfony/css-selector/XPath/Extension/ExtensionInterface.php delete mode 100644 vendor/symfony/css-selector/XPath/Extension/FunctionExtension.php delete mode 100644 vendor/symfony/css-selector/XPath/Extension/HtmlExtension.php delete mode 100644 vendor/symfony/css-selector/XPath/Extension/NodeExtension.php delete mode 100644 vendor/symfony/css-selector/XPath/Extension/PseudoClassExtension.php delete mode 100644 vendor/symfony/css-selector/XPath/Translator.php delete mode 100644 vendor/symfony/css-selector/XPath/TranslatorInterface.php delete mode 100644 vendor/symfony/css-selector/XPath/XPathExpr.php delete mode 100644 vendor/symfony/css-selector/composer.json delete mode 100644 vendor/symfony/debug-bundle/CHANGELOG.md delete mode 100644 vendor/symfony/debug-bundle/Command/ServerDumpPlaceholderCommand.php delete mode 100644 vendor/symfony/debug-bundle/DebugBundle.php delete mode 100644 vendor/symfony/debug-bundle/DependencyInjection/Compiler/DumpDataCollectorPass.php delete mode 100644 vendor/symfony/debug-bundle/DependencyInjection/Configuration.php delete mode 100644 vendor/symfony/debug-bundle/DependencyInjection/DebugExtension.php delete mode 100644 vendor/symfony/debug-bundle/README.md delete mode 100644 vendor/symfony/debug-bundle/Resources/config/schema/debug-1.0.xsd delete mode 100644 vendor/symfony/debug-bundle/Resources/config/services.php delete mode 100644 vendor/symfony/debug-bundle/Resources/views/Profiler/dump.html.twig delete mode 100644 vendor/symfony/debug-bundle/Resources/views/Profiler/icon.svg delete mode 100644 vendor/symfony/debug-bundle/composer.json delete mode 100644 vendor/symfony/dependency-injection/Alias.php delete mode 100644 vendor/symfony/dependency-injection/Argument/AbstractArgument.php delete mode 100644 vendor/symfony/dependency-injection/Argument/ArgumentInterface.php delete mode 100644 vendor/symfony/dependency-injection/Argument/BoundArgument.php delete mode 100644 vendor/symfony/dependency-injection/Argument/IteratorArgument.php delete mode 100644 vendor/symfony/dependency-injection/Argument/LazyClosure.php delete mode 100644 vendor/symfony/dependency-injection/Argument/RewindableGenerator.php delete mode 100644 vendor/symfony/dependency-injection/Argument/ServiceClosureArgument.php delete mode 100644 vendor/symfony/dependency-injection/Argument/ServiceLocator.php delete mode 100644 vendor/symfony/dependency-injection/Argument/ServiceLocatorArgument.php delete mode 100644 vendor/symfony/dependency-injection/Argument/TaggedIteratorArgument.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AsAlias.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AsDecorator.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AsTaggedItem.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/Autoconfigure.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AutoconfigureTag.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/Autowire.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AutowireCallable.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AutowireDecorated.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AutowireInline.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AutowireIterator.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AutowireLocator.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AutowireMethodOf.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/AutowireServiceClosure.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/Exclude.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/Lazy.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/TaggedIterator.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/TaggedLocator.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/Target.php delete mode 100644 vendor/symfony/dependency-injection/Attribute/When.php delete mode 100644 vendor/symfony/dependency-injection/CHANGELOG.md delete mode 100644 vendor/symfony/dependency-injection/ChildDefinition.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AliasDeprecatedPublicServicesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AnalyzeServiceReferencesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AttributeAutoconfigurationPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AutoAliasServicePass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AutowireAsDecoratorPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AutowirePass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AutowireRequiredMethodsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/AutowireRequiredPropertiesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/CheckAliasValidityPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/CheckArgumentsValidityPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/CheckCircularReferencesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/CheckDefinitionValidityPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/CheckExceptionOnInvalidReferenceBehaviorPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/CheckReferenceValidityPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/CheckTypeDeclarationsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/Compiler.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/CompilerPassInterface.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/DecoratorServicePass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ExtensionCompilerPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/InlineServiceDefinitionsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/MergeExtensionConfigurationPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/PassConfig.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/PriorityTaggedServiceTrait.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/RegisterAutoconfigureAttributesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/RegisterEnvVarProcessorsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/RegisterReverseContainerPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/RegisterServiceSubscribersPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/RemoveAbstractDefinitionsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/RemoveBuildParametersPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/RemovePrivateAliasesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/RemoveUnusedDefinitionsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ReplaceAliasByActualDefinitionPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveAutowireInlineAttributesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveBindingsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveChildDefinitionsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveClassPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveDecoratorStackPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveEnvPlaceholdersPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveFactoryClassPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveHotPathPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveInstanceofConditionalsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveInvalidReferencesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveNamedArgumentsPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveNoPreloadPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveParameterPlaceHoldersPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveReferencesToAliasesPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveServiceSubscribersPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ResolveTaggedIteratorArgumentPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ServiceLocatorTagPass.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraph.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphEdge.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ServiceReferenceGraphNode.php delete mode 100644 vendor/symfony/dependency-injection/Compiler/ValidateEnvPlaceholdersPass.php delete mode 100644 vendor/symfony/dependency-injection/Config/ContainerParametersResource.php delete mode 100644 vendor/symfony/dependency-injection/Config/ContainerParametersResourceChecker.php delete mode 100644 vendor/symfony/dependency-injection/Container.php delete mode 100644 vendor/symfony/dependency-injection/ContainerBuilder.php delete mode 100644 vendor/symfony/dependency-injection/ContainerInterface.php delete mode 100644 vendor/symfony/dependency-injection/Definition.php delete mode 100644 vendor/symfony/dependency-injection/Dumper/Dumper.php delete mode 100644 vendor/symfony/dependency-injection/Dumper/DumperInterface.php delete mode 100644 vendor/symfony/dependency-injection/Dumper/GraphvizDumper.php delete mode 100644 vendor/symfony/dependency-injection/Dumper/PhpDumper.php delete mode 100644 vendor/symfony/dependency-injection/Dumper/Preloader.php delete mode 100644 vendor/symfony/dependency-injection/Dumper/XmlDumper.php delete mode 100644 vendor/symfony/dependency-injection/Dumper/YamlDumper.php delete mode 100644 vendor/symfony/dependency-injection/EnvVarLoaderInterface.php delete mode 100644 vendor/symfony/dependency-injection/EnvVarProcessor.php delete mode 100644 vendor/symfony/dependency-injection/EnvVarProcessorInterface.php delete mode 100644 vendor/symfony/dependency-injection/Exception/AutoconfigureFailedException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/AutowiringFailedException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/BadMethodCallException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/EnvNotFoundException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/EnvParameterException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/dependency-injection/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/InvalidParameterTypeException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/LogicException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/OutOfBoundsException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/ParameterCircularReferenceException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/ParameterNotFoundException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/RuntimeException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/ServiceCircularReferenceException.php delete mode 100644 vendor/symfony/dependency-injection/Exception/ServiceNotFoundException.php delete mode 100644 vendor/symfony/dependency-injection/ExpressionLanguage.php delete mode 100644 vendor/symfony/dependency-injection/ExpressionLanguageProvider.php delete mode 100644 vendor/symfony/dependency-injection/Extension/AbstractExtension.php delete mode 100644 vendor/symfony/dependency-injection/Extension/ConfigurableExtensionInterface.php delete mode 100644 vendor/symfony/dependency-injection/Extension/ConfigurationExtensionInterface.php delete mode 100644 vendor/symfony/dependency-injection/Extension/Extension.php delete mode 100644 vendor/symfony/dependency-injection/Extension/ExtensionInterface.php delete mode 100644 vendor/symfony/dependency-injection/Extension/ExtensionTrait.php delete mode 100644 vendor/symfony/dependency-injection/Extension/PrependExtensionInterface.php delete mode 100644 vendor/symfony/dependency-injection/LazyProxy/Instantiator/InstantiatorInterface.php delete mode 100644 vendor/symfony/dependency-injection/LazyProxy/Instantiator/LazyServiceInstantiator.php delete mode 100644 vendor/symfony/dependency-injection/LazyProxy/Instantiator/RealServiceInstantiator.php delete mode 100644 vendor/symfony/dependency-injection/LazyProxy/PhpDumper/DumperInterface.php delete mode 100644 vendor/symfony/dependency-injection/LazyProxy/PhpDumper/LazyServiceDumper.php delete mode 100644 vendor/symfony/dependency-injection/LazyProxy/PhpDumper/NullDumper.php delete mode 100644 vendor/symfony/dependency-injection/Loader/ClosureLoader.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/AbstractConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/AbstractServiceConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/AliasConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/ClosureReferenceConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/ContainerConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/DefaultsConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/EnvConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/FromCallableConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/InlineServiceConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/InstanceofConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/ParametersConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/PrototypeConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/ReferenceConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/ServiceConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/AbstractTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/ArgumentTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutoconfigureTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/AutowireTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/BindTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/CallTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/ClassTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/ConfiguratorTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/ConstructorTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/DecorateTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/DeprecateTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/FactoryTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/FileTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/FromCallableTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/LazyTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/ParentTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/PropertyTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/PublicTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/ShareTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/SyntheticTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/Configurator/Traits/TagTrait.php delete mode 100644 vendor/symfony/dependency-injection/Loader/DirectoryLoader.php delete mode 100644 vendor/symfony/dependency-injection/Loader/FileLoader.php delete mode 100644 vendor/symfony/dependency-injection/Loader/GlobFileLoader.php delete mode 100644 vendor/symfony/dependency-injection/Loader/IniFileLoader.php delete mode 100644 vendor/symfony/dependency-injection/Loader/PhpFileLoader.php delete mode 100644 vendor/symfony/dependency-injection/Loader/UndefinedExtensionHandler.php delete mode 100644 vendor/symfony/dependency-injection/Loader/XmlFileLoader.php delete mode 100644 vendor/symfony/dependency-injection/Loader/YamlFileLoader.php delete mode 100644 vendor/symfony/dependency-injection/Loader/schema/dic/services/services-1.0.xsd delete mode 100644 vendor/symfony/dependency-injection/Parameter.php delete mode 100644 vendor/symfony/dependency-injection/ParameterBag/ContainerBag.php delete mode 100644 vendor/symfony/dependency-injection/ParameterBag/ContainerBagInterface.php delete mode 100644 vendor/symfony/dependency-injection/ParameterBag/EnvPlaceholderParameterBag.php delete mode 100644 vendor/symfony/dependency-injection/ParameterBag/FrozenParameterBag.php delete mode 100644 vendor/symfony/dependency-injection/ParameterBag/ParameterBag.php delete mode 100644 vendor/symfony/dependency-injection/ParameterBag/ParameterBagInterface.php delete mode 100644 vendor/symfony/dependency-injection/README.md delete mode 100644 vendor/symfony/dependency-injection/Reference.php delete mode 100644 vendor/symfony/dependency-injection/ReverseContainer.php delete mode 100644 vendor/symfony/dependency-injection/ServiceLocator.php delete mode 100644 vendor/symfony/dependency-injection/StaticEnvVarLoader.php delete mode 100644 vendor/symfony/dependency-injection/TaggedContainerInterface.php delete mode 100644 vendor/symfony/dependency-injection/TypedReference.php delete mode 100644 vendor/symfony/dependency-injection/Variable.php delete mode 100644 vendor/symfony/dependency-injection/composer.json delete mode 100644 vendor/symfony/deprecation-contracts/CHANGELOG.md delete mode 100644 vendor/symfony/deprecation-contracts/README.md delete mode 100644 vendor/symfony/deprecation-contracts/composer.json delete mode 100644 vendor/symfony/deprecation-contracts/function.php delete mode 100644 vendor/symfony/doctrine-bridge/ArgumentResolver/EntityValueResolver.php delete mode 100644 vendor/symfony/doctrine-bridge/Attribute/MapEntity.php delete mode 100644 vendor/symfony/doctrine-bridge/CHANGELOG.md delete mode 100644 vendor/symfony/doctrine-bridge/CacheWarmer/ProxyCacheWarmer.php delete mode 100644 vendor/symfony/doctrine-bridge/ContainerAwareEventManager.php delete mode 100644 vendor/symfony/doctrine-bridge/DataCollector/DoctrineDataCollector.php delete mode 100644 vendor/symfony/doctrine-bridge/DataCollector/ObjectParameter.php delete mode 100644 vendor/symfony/doctrine-bridge/DependencyInjection/AbstractDoctrineExtension.php delete mode 100644 vendor/symfony/doctrine-bridge/DependencyInjection/CompilerPass/DoctrineValidationPass.php delete mode 100644 vendor/symfony/doctrine-bridge/DependencyInjection/CompilerPass/RegisterEventListenersAndSubscribersPass.php delete mode 100644 vendor/symfony/doctrine-bridge/DependencyInjection/CompilerPass/RegisterMappingsPass.php delete mode 100644 vendor/symfony/doctrine-bridge/DependencyInjection/CompilerPass/RegisterUidTypePass.php delete mode 100644 vendor/symfony/doctrine-bridge/DependencyInjection/Security/UserProvider/EntityFactory.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/ChoiceList/DoctrineChoiceLoader.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/ChoiceList/EntityLoaderInterface.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/ChoiceList/IdReader.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/ChoiceList/ORMQueryBuilderLoader.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/DataTransformer/CollectionToArrayTransformer.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/DoctrineOrmExtension.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/DoctrineOrmTypeGuesser.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/EventListener/MergeDoctrineCollectionListener.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/Type/DoctrineType.php delete mode 100644 vendor/symfony/doctrine-bridge/Form/Type/EntityType.php delete mode 100644 vendor/symfony/doctrine-bridge/IdGenerator/UlidGenerator.php delete mode 100644 vendor/symfony/doctrine-bridge/IdGenerator/UuidGenerator.php delete mode 100644 vendor/symfony/doctrine-bridge/ManagerRegistry.php delete mode 100644 vendor/symfony/doctrine-bridge/Messenger/AbstractDoctrineMiddleware.php delete mode 100644 vendor/symfony/doctrine-bridge/Messenger/DoctrineClearEntityManagerWorkerSubscriber.php delete mode 100644 vendor/symfony/doctrine-bridge/Messenger/DoctrineCloseConnectionMiddleware.php delete mode 100644 vendor/symfony/doctrine-bridge/Messenger/DoctrineOpenTransactionLoggerMiddleware.php delete mode 100644 vendor/symfony/doctrine-bridge/Messenger/DoctrinePingConnectionMiddleware.php delete mode 100644 vendor/symfony/doctrine-bridge/Messenger/DoctrineTransactionMiddleware.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/Debug/Connection.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/Debug/DBAL3/Connection.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/Debug/DBAL3/Statement.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/Debug/DebugDataHolder.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/Debug/Driver.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/Debug/Middleware.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/Debug/Query.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/Debug/Statement.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/IdleConnection/Driver.php delete mode 100644 vendor/symfony/doctrine-bridge/Middleware/IdleConnection/Listener.php delete mode 100644 vendor/symfony/doctrine-bridge/PropertyInfo/DoctrineExtractor.php delete mode 100644 vendor/symfony/doctrine-bridge/README.md delete mode 100644 vendor/symfony/doctrine-bridge/SchemaListener/AbstractSchemaListener.php delete mode 100644 vendor/symfony/doctrine-bridge/SchemaListener/DoctrineDbalCacheAdapterSchemaListener.php delete mode 100644 vendor/symfony/doctrine-bridge/SchemaListener/LockStoreSchemaListener.php delete mode 100644 vendor/symfony/doctrine-bridge/SchemaListener/MessengerTransportDoctrineSchemaListener.php delete mode 100644 vendor/symfony/doctrine-bridge/SchemaListener/PdoSessionHandlerSchemaListener.php delete mode 100644 vendor/symfony/doctrine-bridge/SchemaListener/RememberMeTokenProviderDoctrineSchemaListener.php delete mode 100644 vendor/symfony/doctrine-bridge/Security/RememberMe/DoctrineTokenProvider.php delete mode 100644 vendor/symfony/doctrine-bridge/Security/User/EntityUserProvider.php delete mode 100644 vendor/symfony/doctrine-bridge/Security/User/UserLoaderInterface.php delete mode 100644 vendor/symfony/doctrine-bridge/Types/AbstractUidType.php delete mode 100644 vendor/symfony/doctrine-bridge/Types/UlidType.php delete mode 100644 vendor/symfony/doctrine-bridge/Types/UuidType.php delete mode 100644 vendor/symfony/doctrine-bridge/Validator/Constraints/UniqueEntity.php delete mode 100644 vendor/symfony/doctrine-bridge/Validator/Constraints/UniqueEntityValidator.php delete mode 100644 vendor/symfony/doctrine-bridge/Validator/DoctrineInitializer.php delete mode 100644 vendor/symfony/doctrine-bridge/Validator/DoctrineLoader.php delete mode 100644 vendor/symfony/doctrine-bridge/composer.json delete mode 100644 vendor/symfony/doctrine-messenger/CHANGELOG.md delete mode 100644 vendor/symfony/doctrine-messenger/README.md delete mode 100644 vendor/symfony/doctrine-messenger/Transport/Connection.php delete mode 100644 vendor/symfony/doctrine-messenger/Transport/DoctrineReceivedStamp.php delete mode 100644 vendor/symfony/doctrine-messenger/Transport/DoctrineReceiver.php delete mode 100644 vendor/symfony/doctrine-messenger/Transport/DoctrineSender.php delete mode 100644 vendor/symfony/doctrine-messenger/Transport/DoctrineTransport.php delete mode 100644 vendor/symfony/doctrine-messenger/Transport/DoctrineTransportFactory.php delete mode 100644 vendor/symfony/doctrine-messenger/Transport/PostgreSqlConnection.php delete mode 100644 vendor/symfony/doctrine-messenger/composer.json delete mode 100644 vendor/symfony/dom-crawler/AbstractUriElement.php delete mode 100644 vendor/symfony/dom-crawler/CHANGELOG.md delete mode 100644 vendor/symfony/dom-crawler/Crawler.php delete mode 100644 vendor/symfony/dom-crawler/Field/ChoiceFormField.php delete mode 100644 vendor/symfony/dom-crawler/Field/FileFormField.php delete mode 100644 vendor/symfony/dom-crawler/Field/FormField.php delete mode 100644 vendor/symfony/dom-crawler/Field/InputFormField.php delete mode 100644 vendor/symfony/dom-crawler/Field/TextareaFormField.php delete mode 100644 vendor/symfony/dom-crawler/Form.php delete mode 100644 vendor/symfony/dom-crawler/FormFieldRegistry.php delete mode 100644 vendor/symfony/dom-crawler/Image.php delete mode 100644 vendor/symfony/dom-crawler/Link.php delete mode 100644 vendor/symfony/dom-crawler/README.md delete mode 100644 vendor/symfony/dom-crawler/Test/Constraint/CrawlerAnySelectorTextContains.php delete mode 100644 vendor/symfony/dom-crawler/Test/Constraint/CrawlerAnySelectorTextSame.php delete mode 100644 vendor/symfony/dom-crawler/Test/Constraint/CrawlerSelectorAttributeValueSame.php delete mode 100644 vendor/symfony/dom-crawler/Test/Constraint/CrawlerSelectorCount.php delete mode 100644 vendor/symfony/dom-crawler/Test/Constraint/CrawlerSelectorExists.php delete mode 100644 vendor/symfony/dom-crawler/Test/Constraint/CrawlerSelectorTextContains.php delete mode 100644 vendor/symfony/dom-crawler/Test/Constraint/CrawlerSelectorTextSame.php delete mode 100644 vendor/symfony/dom-crawler/UriResolver.php delete mode 100644 vendor/symfony/dom-crawler/composer.json delete mode 100644 vendor/symfony/dotenv/CHANGELOG.md delete mode 100644 vendor/symfony/dotenv/Command/DebugCommand.php delete mode 100644 vendor/symfony/dotenv/Command/DotenvDumpCommand.php delete mode 100644 vendor/symfony/dotenv/Dotenv.php delete mode 100644 vendor/symfony/dotenv/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/dotenv/Exception/FormatException.php delete mode 100644 vendor/symfony/dotenv/Exception/FormatExceptionContext.php delete mode 100644 vendor/symfony/dotenv/Exception/PathException.php delete mode 100644 vendor/symfony/dotenv/README.md delete mode 100644 vendor/symfony/dotenv/composer.json delete mode 100644 vendor/symfony/error-handler/BufferingLogger.php delete mode 100644 vendor/symfony/error-handler/CHANGELOG.md delete mode 100644 vendor/symfony/error-handler/Debug.php delete mode 100644 vendor/symfony/error-handler/DebugClassLoader.php delete mode 100644 vendor/symfony/error-handler/Error/ClassNotFoundError.php delete mode 100644 vendor/symfony/error-handler/Error/FatalError.php delete mode 100644 vendor/symfony/error-handler/Error/OutOfMemoryError.php delete mode 100644 vendor/symfony/error-handler/Error/UndefinedFunctionError.php delete mode 100644 vendor/symfony/error-handler/Error/UndefinedMethodError.php delete mode 100644 vendor/symfony/error-handler/ErrorEnhancer/ClassNotFoundErrorEnhancer.php delete mode 100644 vendor/symfony/error-handler/ErrorEnhancer/ErrorEnhancerInterface.php delete mode 100644 vendor/symfony/error-handler/ErrorEnhancer/UndefinedFunctionErrorEnhancer.php delete mode 100644 vendor/symfony/error-handler/ErrorEnhancer/UndefinedMethodErrorEnhancer.php delete mode 100644 vendor/symfony/error-handler/ErrorHandler.php delete mode 100644 vendor/symfony/error-handler/ErrorRenderer/CliErrorRenderer.php delete mode 100644 vendor/symfony/error-handler/ErrorRenderer/ErrorRendererInterface.php delete mode 100644 vendor/symfony/error-handler/ErrorRenderer/FileLinkFormatter.php delete mode 100644 vendor/symfony/error-handler/ErrorRenderer/HtmlErrorRenderer.php delete mode 100644 vendor/symfony/error-handler/ErrorRenderer/SerializerErrorRenderer.php delete mode 100644 vendor/symfony/error-handler/Exception/FlattenException.php delete mode 100644 vendor/symfony/error-handler/Exception/SilencedErrorContext.php delete mode 100644 vendor/symfony/error-handler/Internal/TentativeTypes.php delete mode 100644 vendor/symfony/error-handler/README.md delete mode 100644 vendor/symfony/error-handler/Resources/assets/css/error.css delete mode 100644 vendor/symfony/error-handler/Resources/assets/css/exception.css delete mode 100644 vendor/symfony/error-handler/Resources/assets/css/exception_full.css delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/chevron-right.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/favicon.png.base64 delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/icon-book.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/icon-copy.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/icon-minus-square-o.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/icon-minus-square.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/icon-plus-square-o.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/icon-plus-square.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/icon-support.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/symfony-ghost.svg.php delete mode 100644 vendor/symfony/error-handler/Resources/assets/images/symfony-logo.svg delete mode 100644 vendor/symfony/error-handler/Resources/assets/js/exception.js delete mode 100755 vendor/symfony/error-handler/Resources/bin/extract-tentative-return-types.php delete mode 100644 vendor/symfony/error-handler/Resources/views/error.html.php delete mode 100644 vendor/symfony/error-handler/Resources/views/exception.html.php delete mode 100644 vendor/symfony/error-handler/Resources/views/exception_full.html.php delete mode 100644 vendor/symfony/error-handler/Resources/views/logs.html.php delete mode 100644 vendor/symfony/error-handler/Resources/views/trace.html.php delete mode 100644 vendor/symfony/error-handler/Resources/views/traces.html.php delete mode 100644 vendor/symfony/error-handler/Resources/views/traces_text.html.php delete mode 100644 vendor/symfony/error-handler/ThrowableUtils.php delete mode 100644 vendor/symfony/error-handler/composer.json delete mode 100644 vendor/symfony/event-dispatcher-contracts/CHANGELOG.md delete mode 100644 vendor/symfony/event-dispatcher-contracts/Event.php delete mode 100644 vendor/symfony/event-dispatcher-contracts/EventDispatcherInterface.php delete mode 100644 vendor/symfony/event-dispatcher-contracts/README.md delete mode 100644 vendor/symfony/event-dispatcher-contracts/composer.json delete mode 100644 vendor/symfony/event-dispatcher/Attribute/AsEventListener.php delete mode 100644 vendor/symfony/event-dispatcher/CHANGELOG.md delete mode 100644 vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php delete mode 100644 vendor/symfony/event-dispatcher/Debug/WrappedListener.php delete mode 100644 vendor/symfony/event-dispatcher/DependencyInjection/AddEventAliasesPass.php delete mode 100644 vendor/symfony/event-dispatcher/DependencyInjection/RegisterListenersPass.php delete mode 100644 vendor/symfony/event-dispatcher/EventDispatcher.php delete mode 100644 vendor/symfony/event-dispatcher/EventDispatcherInterface.php delete mode 100644 vendor/symfony/event-dispatcher/EventSubscriberInterface.php delete mode 100644 vendor/symfony/event-dispatcher/GenericEvent.php delete mode 100644 vendor/symfony/event-dispatcher/ImmutableEventDispatcher.php delete mode 100644 vendor/symfony/event-dispatcher/README.md delete mode 100644 vendor/symfony/event-dispatcher/composer.json delete mode 100644 vendor/symfony/expression-language/CHANGELOG.md delete mode 100644 vendor/symfony/expression-language/Compiler.php delete mode 100644 vendor/symfony/expression-language/Expression.php delete mode 100644 vendor/symfony/expression-language/ExpressionFunction.php delete mode 100644 vendor/symfony/expression-language/ExpressionFunctionProviderInterface.php delete mode 100644 vendor/symfony/expression-language/ExpressionLanguage.php delete mode 100644 vendor/symfony/expression-language/Lexer.php delete mode 100644 vendor/symfony/expression-language/Node/ArgumentsNode.php delete mode 100644 vendor/symfony/expression-language/Node/ArrayNode.php delete mode 100644 vendor/symfony/expression-language/Node/BinaryNode.php delete mode 100644 vendor/symfony/expression-language/Node/ConditionalNode.php delete mode 100644 vendor/symfony/expression-language/Node/ConstantNode.php delete mode 100644 vendor/symfony/expression-language/Node/FunctionNode.php delete mode 100644 vendor/symfony/expression-language/Node/GetAttrNode.php delete mode 100644 vendor/symfony/expression-language/Node/NameNode.php delete mode 100644 vendor/symfony/expression-language/Node/Node.php delete mode 100644 vendor/symfony/expression-language/Node/NullCoalesceNode.php delete mode 100644 vendor/symfony/expression-language/Node/UnaryNode.php delete mode 100644 vendor/symfony/expression-language/ParsedExpression.php delete mode 100644 vendor/symfony/expression-language/Parser.php delete mode 100644 vendor/symfony/expression-language/README.md delete mode 100644 vendor/symfony/expression-language/Resources/bin/generate_operator_regex.php delete mode 100644 vendor/symfony/expression-language/SerializedParsedExpression.php delete mode 100644 vendor/symfony/expression-language/SyntaxError.php delete mode 100644 vendor/symfony/expression-language/Token.php delete mode 100644 vendor/symfony/expression-language/TokenStream.php delete mode 100644 vendor/symfony/expression-language/composer.json delete mode 100644 vendor/symfony/filesystem/CHANGELOG.md delete mode 100644 vendor/symfony/filesystem/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/filesystem/Exception/FileNotFoundException.php delete mode 100644 vendor/symfony/filesystem/Exception/IOException.php delete mode 100644 vendor/symfony/filesystem/Exception/IOExceptionInterface.php delete mode 100644 vendor/symfony/filesystem/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/filesystem/Exception/RuntimeException.php delete mode 100644 vendor/symfony/filesystem/Filesystem.php delete mode 100644 vendor/symfony/filesystem/Path.php delete mode 100644 vendor/symfony/filesystem/README.md delete mode 100644 vendor/symfony/filesystem/composer.json delete mode 100644 vendor/symfony/finder/CHANGELOG.md delete mode 100644 vendor/symfony/finder/Comparator/Comparator.php delete mode 100644 vendor/symfony/finder/Comparator/DateComparator.php delete mode 100644 vendor/symfony/finder/Comparator/NumberComparator.php delete mode 100644 vendor/symfony/finder/Exception/AccessDeniedException.php delete mode 100644 vendor/symfony/finder/Exception/DirectoryNotFoundException.php delete mode 100644 vendor/symfony/finder/Finder.php delete mode 100644 vendor/symfony/finder/Gitignore.php delete mode 100644 vendor/symfony/finder/Glob.php delete mode 100644 vendor/symfony/finder/Iterator/CustomFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/DateRangeFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/DepthRangeFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/FileTypeFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/FilecontentFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/FilenameFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/LazyIterator.php delete mode 100644 vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/PathFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php delete mode 100644 vendor/symfony/finder/Iterator/SizeRangeFilterIterator.php delete mode 100644 vendor/symfony/finder/Iterator/SortableIterator.php delete mode 100644 vendor/symfony/finder/Iterator/VcsIgnoredFilterIterator.php delete mode 100644 vendor/symfony/finder/README.md delete mode 100644 vendor/symfony/finder/SplFileInfo.php delete mode 100644 vendor/symfony/finder/composer.json delete mode 100644 vendor/symfony/flex/README.md delete mode 100644 vendor/symfony/flex/composer.json delete mode 100644 vendor/symfony/flex/src/Command/DumpEnvCommand.php delete mode 100644 vendor/symfony/flex/src/Command/InstallRecipesCommand.php delete mode 100644 vendor/symfony/flex/src/Command/RecipesCommand.php delete mode 100644 vendor/symfony/flex/src/Command/UpdateRecipesCommand.php delete mode 100644 vendor/symfony/flex/src/Configurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/AbstractConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/AddLinesConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/BundlesConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/ComposerScriptsConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/ContainerConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/CopyFromPackageConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/CopyFromRecipeConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/DockerComposeConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/DockerfileConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/EnvConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/GitignoreConfigurator.php delete mode 100644 vendor/symfony/flex/src/Configurator/MakefileConfigurator.php delete mode 100644 vendor/symfony/flex/src/Downloader.php delete mode 100644 vendor/symfony/flex/src/Event/UpdateEvent.php delete mode 100644 vendor/symfony/flex/src/Flex.php delete mode 100644 vendor/symfony/flex/src/GithubApi.php delete mode 100644 vendor/symfony/flex/src/InformationOperation.php delete mode 100644 vendor/symfony/flex/src/Lock.php delete mode 100644 vendor/symfony/flex/src/Options.php delete mode 100644 vendor/symfony/flex/src/PackageFilter.php delete mode 100644 vendor/symfony/flex/src/PackageJsonSynchronizer.php delete mode 100644 vendor/symfony/flex/src/PackageResolver.php delete mode 100644 vendor/symfony/flex/src/Path.php delete mode 100644 vendor/symfony/flex/src/Recipe.php delete mode 100644 vendor/symfony/flex/src/Response.php delete mode 100644 vendor/symfony/flex/src/ScriptExecutor.php delete mode 100644 vendor/symfony/flex/src/SymfonyBundle.php delete mode 100644 vendor/symfony/flex/src/Unpack/Operation.php delete mode 100644 vendor/symfony/flex/src/Unpack/Result.php delete mode 100644 vendor/symfony/flex/src/Unpacker.php delete mode 100644 vendor/symfony/flex/src/Update/DiffHelper.php delete mode 100644 vendor/symfony/flex/src/Update/RecipePatch.php delete mode 100644 vendor/symfony/flex/src/Update/RecipePatcher.php delete mode 100644 vendor/symfony/flex/src/Update/RecipeUpdate.php delete mode 100644 vendor/symfony/form/AbstractExtension.php delete mode 100644 vendor/symfony/form/AbstractRendererEngine.php delete mode 100644 vendor/symfony/form/AbstractType.php delete mode 100644 vendor/symfony/form/AbstractTypeExtension.php delete mode 100644 vendor/symfony/form/Button.php delete mode 100644 vendor/symfony/form/ButtonBuilder.php delete mode 100644 vendor/symfony/form/ButtonTypeInterface.php delete mode 100644 vendor/symfony/form/CHANGELOG.md delete mode 100644 vendor/symfony/form/CallbackTransformer.php delete mode 100644 vendor/symfony/form/ChoiceList/ArrayChoiceList.php delete mode 100644 vendor/symfony/form/ChoiceList/ChoiceList.php delete mode 100644 vendor/symfony/form/ChoiceList/ChoiceListInterface.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/AbstractStaticOption.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/ChoiceAttr.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/ChoiceFieldName.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/ChoiceFilter.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/ChoiceLabel.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/ChoiceLoader.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/ChoiceTranslationParameters.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/ChoiceValue.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/GroupBy.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/Cache/PreferredChoice.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/CachingFactoryDecorator.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/ChoiceListFactoryInterface.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/DefaultChoiceListFactory.php delete mode 100644 vendor/symfony/form/ChoiceList/Factory/PropertyAccessDecorator.php delete mode 100644 vendor/symfony/form/ChoiceList/LazyChoiceList.php delete mode 100644 vendor/symfony/form/ChoiceList/Loader/AbstractChoiceLoader.php delete mode 100644 vendor/symfony/form/ChoiceList/Loader/CallbackChoiceLoader.php delete mode 100644 vendor/symfony/form/ChoiceList/Loader/ChoiceLoaderInterface.php delete mode 100644 vendor/symfony/form/ChoiceList/Loader/FilterChoiceLoaderDecorator.php delete mode 100644 vendor/symfony/form/ChoiceList/Loader/IntlCallbackChoiceLoader.php delete mode 100644 vendor/symfony/form/ChoiceList/View/ChoiceGroupView.php delete mode 100644 vendor/symfony/form/ChoiceList/View/ChoiceListView.php delete mode 100644 vendor/symfony/form/ChoiceList/View/ChoiceView.php delete mode 100644 vendor/symfony/form/ClearableErrorsInterface.php delete mode 100644 vendor/symfony/form/ClickableInterface.php delete mode 100644 vendor/symfony/form/Command/DebugCommand.php delete mode 100644 vendor/symfony/form/Console/Descriptor/Descriptor.php delete mode 100644 vendor/symfony/form/Console/Descriptor/JsonDescriptor.php delete mode 100644 vendor/symfony/form/Console/Descriptor/TextDescriptor.php delete mode 100644 vendor/symfony/form/Console/Helper/DescriptorHelper.php delete mode 100644 vendor/symfony/form/DataAccessorInterface.php delete mode 100644 vendor/symfony/form/DataMapperInterface.php delete mode 100644 vendor/symfony/form/DataTransformerInterface.php delete mode 100644 vendor/symfony/form/DependencyInjection/FormPass.php delete mode 100644 vendor/symfony/form/Event/PostSetDataEvent.php delete mode 100644 vendor/symfony/form/Event/PostSubmitEvent.php delete mode 100644 vendor/symfony/form/Event/PreSetDataEvent.php delete mode 100644 vendor/symfony/form/Event/PreSubmitEvent.php delete mode 100644 vendor/symfony/form/Event/SubmitEvent.php delete mode 100644 vendor/symfony/form/Exception/AccessException.php delete mode 100644 vendor/symfony/form/Exception/AlreadySubmittedException.php delete mode 100644 vendor/symfony/form/Exception/BadMethodCallException.php delete mode 100644 vendor/symfony/form/Exception/ErrorMappingException.php delete mode 100644 vendor/symfony/form/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/form/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/form/Exception/InvalidConfigurationException.php delete mode 100644 vendor/symfony/form/Exception/LogicException.php delete mode 100644 vendor/symfony/form/Exception/OutOfBoundsException.php delete mode 100644 vendor/symfony/form/Exception/RuntimeException.php delete mode 100644 vendor/symfony/form/Exception/StringCastException.php delete mode 100644 vendor/symfony/form/Exception/TransformationFailedException.php delete mode 100644 vendor/symfony/form/Exception/UnexpectedTypeException.php delete mode 100644 vendor/symfony/form/Extension/Core/CoreExtension.php delete mode 100644 vendor/symfony/form/Extension/Core/DataAccessor/CallbackAccessor.php delete mode 100644 vendor/symfony/form/Extension/Core/DataAccessor/ChainAccessor.php delete mode 100644 vendor/symfony/form/Extension/Core/DataAccessor/PropertyPathAccessor.php delete mode 100644 vendor/symfony/form/Extension/Core/DataMapper/CheckboxListMapper.php delete mode 100644 vendor/symfony/form/Extension/Core/DataMapper/DataMapper.php delete mode 100644 vendor/symfony/form/Extension/Core/DataMapper/RadioListMapper.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/ArrayToPartsTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/BaseDateTimeTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/BooleanToStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/ChoiceToValueTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/ChoicesToValuesTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DataTransformerChain.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateIntervalToArrayTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateIntervalToStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateTimeImmutableToDateTimeTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateTimeToArrayTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateTimeToHtml5LocalDateTimeTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateTimeToLocalizedStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateTimeToRfc3339Transformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateTimeToStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateTimeToTimestampTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/DateTimeZoneToStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/IntegerToLocalizedStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/IntlTimeZoneToStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/MoneyToLocalizedStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/NumberToLocalizedStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/PercentToLocalizedStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/StringToFloatTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/UlidToStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/UuidToStringTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/ValueToDuplicatesTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/DataTransformer/WeekToArrayTransformer.php delete mode 100644 vendor/symfony/form/Extension/Core/EventListener/FixUrlProtocolListener.php delete mode 100644 vendor/symfony/form/Extension/Core/EventListener/MergeCollectionListener.php delete mode 100644 vendor/symfony/form/Extension/Core/EventListener/ResizeFormListener.php delete mode 100644 vendor/symfony/form/Extension/Core/EventListener/TransformationFailureListener.php delete mode 100644 vendor/symfony/form/Extension/Core/EventListener/TrimListener.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/BaseType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/BirthdayType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/ButtonType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/CheckboxType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/ChoiceType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/CollectionType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/ColorType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/CountryType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/CurrencyType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/DateIntervalType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/DateTimeType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/DateType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/EmailType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/EnumType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/FileType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/FormType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/HiddenType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/IntegerType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/LanguageType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/LocaleType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/MoneyType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/NumberType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/PasswordType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/PercentType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/RadioType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/RangeType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/RepeatedType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/ResetType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/SearchType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/SubmitType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/TelType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/TextType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/TextareaType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/TimeType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/TimezoneType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/TransformationFailureExtension.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/UlidType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/UrlType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/UuidType.php delete mode 100644 vendor/symfony/form/Extension/Core/Type/WeekType.php delete mode 100644 vendor/symfony/form/Extension/Csrf/CsrfExtension.php delete mode 100644 vendor/symfony/form/Extension/Csrf/EventListener/CsrfValidationListener.php delete mode 100644 vendor/symfony/form/Extension/Csrf/Type/FormTypeCsrfExtension.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/DataCollectorExtension.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/EventListener/DataCollectorListener.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/FormDataCollector.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/FormDataCollectorInterface.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/FormDataExtractor.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/FormDataExtractorInterface.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeDataCollectorProxy.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/Proxy/ResolvedTypeFactoryDataCollectorProxy.php delete mode 100644 vendor/symfony/form/Extension/DataCollector/Type/DataCollectorTypeExtension.php delete mode 100644 vendor/symfony/form/Extension/DependencyInjection/DependencyInjectionExtension.php delete mode 100644 vendor/symfony/form/Extension/HtmlSanitizer/HtmlSanitizerExtension.php delete mode 100644 vendor/symfony/form/Extension/HtmlSanitizer/Type/TextTypeHtmlSanitizerExtension.php delete mode 100644 vendor/symfony/form/Extension/HttpFoundation/HttpFoundationExtension.php delete mode 100644 vendor/symfony/form/Extension/HttpFoundation/HttpFoundationRequestHandler.php delete mode 100644 vendor/symfony/form/Extension/HttpFoundation/Type/FormTypeHttpFoundationExtension.php delete mode 100644 vendor/symfony/form/Extension/PasswordHasher/EventListener/PasswordHasherListener.php delete mode 100644 vendor/symfony/form/Extension/PasswordHasher/PasswordHasherExtension.php delete mode 100644 vendor/symfony/form/Extension/PasswordHasher/Type/FormTypePasswordHasherExtension.php delete mode 100644 vendor/symfony/form/Extension/PasswordHasher/Type/PasswordTypePasswordHasherExtension.php delete mode 100644 vendor/symfony/form/Extension/Validator/Constraints/Form.php delete mode 100644 vendor/symfony/form/Extension/Validator/Constraints/FormValidator.php delete mode 100644 vendor/symfony/form/Extension/Validator/EventListener/ValidationListener.php delete mode 100644 vendor/symfony/form/Extension/Validator/Type/BaseValidatorExtension.php delete mode 100644 vendor/symfony/form/Extension/Validator/Type/FormTypeValidatorExtension.php delete mode 100644 vendor/symfony/form/Extension/Validator/Type/RepeatedTypeValidatorExtension.php delete mode 100644 vendor/symfony/form/Extension/Validator/Type/SubmitTypeValidatorExtension.php delete mode 100644 vendor/symfony/form/Extension/Validator/Type/UploadValidatorExtension.php delete mode 100644 vendor/symfony/form/Extension/Validator/ValidatorExtension.php delete mode 100644 vendor/symfony/form/Extension/Validator/ValidatorTypeGuesser.php delete mode 100644 vendor/symfony/form/Extension/Validator/ViolationMapper/MappingRule.php delete mode 100644 vendor/symfony/form/Extension/Validator/ViolationMapper/RelativePath.php delete mode 100644 vendor/symfony/form/Extension/Validator/ViolationMapper/ViolationMapper.php delete mode 100644 vendor/symfony/form/Extension/Validator/ViolationMapper/ViolationMapperInterface.php delete mode 100644 vendor/symfony/form/Extension/Validator/ViolationMapper/ViolationPath.php delete mode 100644 vendor/symfony/form/Extension/Validator/ViolationMapper/ViolationPathIterator.php delete mode 100644 vendor/symfony/form/FileUploadError.php delete mode 100644 vendor/symfony/form/Form.php delete mode 100644 vendor/symfony/form/FormBuilder.php delete mode 100644 vendor/symfony/form/FormBuilderInterface.php delete mode 100644 vendor/symfony/form/FormConfigBuilder.php delete mode 100644 vendor/symfony/form/FormConfigBuilderInterface.php delete mode 100644 vendor/symfony/form/FormConfigInterface.php delete mode 100644 vendor/symfony/form/FormError.php delete mode 100644 vendor/symfony/form/FormErrorIterator.php delete mode 100644 vendor/symfony/form/FormEvent.php delete mode 100644 vendor/symfony/form/FormEvents.php delete mode 100644 vendor/symfony/form/FormExtensionInterface.php delete mode 100644 vendor/symfony/form/FormFactory.php delete mode 100644 vendor/symfony/form/FormFactoryBuilder.php delete mode 100644 vendor/symfony/form/FormFactoryBuilderInterface.php delete mode 100644 vendor/symfony/form/FormFactoryInterface.php delete mode 100644 vendor/symfony/form/FormInterface.php delete mode 100644 vendor/symfony/form/FormRegistry.php delete mode 100644 vendor/symfony/form/FormRegistryInterface.php delete mode 100644 vendor/symfony/form/FormRenderer.php delete mode 100644 vendor/symfony/form/FormRendererEngineInterface.php delete mode 100644 vendor/symfony/form/FormRendererInterface.php delete mode 100644 vendor/symfony/form/FormTypeExtensionInterface.php delete mode 100644 vendor/symfony/form/FormTypeGuesserChain.php delete mode 100644 vendor/symfony/form/FormTypeGuesserInterface.php delete mode 100644 vendor/symfony/form/FormTypeInterface.php delete mode 100644 vendor/symfony/form/FormView.php delete mode 100644 vendor/symfony/form/Forms.php delete mode 100644 vendor/symfony/form/Guess/Guess.php delete mode 100644 vendor/symfony/form/Guess/TypeGuess.php delete mode 100644 vendor/symfony/form/Guess/ValueGuess.php delete mode 100644 vendor/symfony/form/NativeRequestHandler.php delete mode 100644 vendor/symfony/form/PreloadedExtension.php delete mode 100644 vendor/symfony/form/README.md delete mode 100644 vendor/symfony/form/RequestHandlerInterface.php delete mode 100644 vendor/symfony/form/ResolvedFormType.php delete mode 100644 vendor/symfony/form/ResolvedFormTypeFactory.php delete mode 100644 vendor/symfony/form/ResolvedFormTypeFactoryInterface.php delete mode 100644 vendor/symfony/form/ResolvedFormTypeInterface.php delete mode 100644 vendor/symfony/form/Resources/config/validation.xml delete mode 100644 vendor/symfony/form/Resources/translations/validators.af.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.ar.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.az.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.be.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.bg.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.bs.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.ca.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.cs.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.cy.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.da.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.de.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.el.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.en.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.es.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.et.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.eu.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.fa.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.fi.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.fr.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.gl.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.he.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.hr.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.hu.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.hy.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.id.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.it.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.ja.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.lb.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.lt.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.lv.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.mk.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.mn.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.my.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.nb.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.nl.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.nn.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.no.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.pl.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.pt.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.pt_BR.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.ro.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.ru.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.sk.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.sl.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.sq.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.sr_Cyrl.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.sr_Latn.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.sv.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.th.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.tl.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.tr.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.uk.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.ur.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.uz.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.vi.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.zh_CN.xlf delete mode 100644 vendor/symfony/form/Resources/translations/validators.zh_TW.xlf delete mode 100644 vendor/symfony/form/ReversedTransformer.php delete mode 100644 vendor/symfony/form/SubmitButton.php delete mode 100644 vendor/symfony/form/SubmitButtonBuilder.php delete mode 100644 vendor/symfony/form/SubmitButtonTypeInterface.php delete mode 100644 vendor/symfony/form/Test/FormBuilderInterface.php delete mode 100644 vendor/symfony/form/Test/FormIntegrationTestCase.php delete mode 100644 vendor/symfony/form/Test/FormInterface.php delete mode 100644 vendor/symfony/form/Test/FormPerformanceTestCase.php delete mode 100644 vendor/symfony/form/Test/Traits/ValidatorExtensionTrait.php delete mode 100644 vendor/symfony/form/Test/TypeTestCase.php delete mode 100644 vendor/symfony/form/Util/FormUtil.php delete mode 100644 vendor/symfony/form/Util/InheritDataAwareIterator.php delete mode 100644 vendor/symfony/form/Util/OptionsResolverWrapper.php delete mode 100644 vendor/symfony/form/Util/OrderedHashMap.php delete mode 100644 vendor/symfony/form/Util/OrderedHashMapIterator.php delete mode 100644 vendor/symfony/form/Util/ServerParams.php delete mode 100644 vendor/symfony/form/Util/StringUtil.php delete mode 100644 vendor/symfony/form/composer.json delete mode 100644 vendor/symfony/framework-bundle/CHANGELOG.md delete mode 100644 vendor/symfony/framework-bundle/CacheWarmer/AbstractPhpFileCacheWarmer.php delete mode 100644 vendor/symfony/framework-bundle/CacheWarmer/CachePoolClearerCacheWarmer.php delete mode 100644 vendor/symfony/framework-bundle/CacheWarmer/ConfigBuilderCacheWarmer.php delete mode 100644 vendor/symfony/framework-bundle/CacheWarmer/RouterCacheWarmer.php delete mode 100644 vendor/symfony/framework-bundle/CacheWarmer/SerializerCacheWarmer.php delete mode 100644 vendor/symfony/framework-bundle/CacheWarmer/TranslationsCacheWarmer.php delete mode 100644 vendor/symfony/framework-bundle/CacheWarmer/ValidatorCacheWarmer.php delete mode 100644 vendor/symfony/framework-bundle/Command/AboutCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/AbstractConfigCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/AssetsInstallCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/BuildDebugContainerTrait.php delete mode 100644 vendor/symfony/framework-bundle/Command/CacheClearCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/CachePoolClearCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/CachePoolDeleteCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/CachePoolInvalidateTagsCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/CachePoolListCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/CachePoolPruneCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/CacheWarmupCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/ConfigDebugCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/ConfigDumpReferenceCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/ContainerDebugCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/ContainerLintCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/DebugAutowiringCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/EventDispatcherDebugCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/RouterDebugCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/RouterMatchCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/SecretsDecryptToLocalCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/SecretsEncryptFromLocalCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/SecretsGenerateKeysCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/SecretsListCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/SecretsRemoveCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/SecretsRevealCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/SecretsSetCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/TranslationDebugCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/TranslationUpdateCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/WorkflowDumpCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/XliffLintCommand.php delete mode 100644 vendor/symfony/framework-bundle/Command/YamlLintCommand.php delete mode 100644 vendor/symfony/framework-bundle/Console/Application.php delete mode 100644 vendor/symfony/framework-bundle/Console/Descriptor/Descriptor.php delete mode 100644 vendor/symfony/framework-bundle/Console/Descriptor/JsonDescriptor.php delete mode 100644 vendor/symfony/framework-bundle/Console/Descriptor/MarkdownDescriptor.php delete mode 100644 vendor/symfony/framework-bundle/Console/Descriptor/TextDescriptor.php delete mode 100644 vendor/symfony/framework-bundle/Console/Descriptor/XmlDescriptor.php delete mode 100644 vendor/symfony/framework-bundle/Console/Helper/DescriptorHelper.php delete mode 100644 vendor/symfony/framework-bundle/Controller/AbstractController.php delete mode 100644 vendor/symfony/framework-bundle/Controller/ControllerResolver.php delete mode 100644 vendor/symfony/framework-bundle/Controller/RedirectController.php delete mode 100644 vendor/symfony/framework-bundle/Controller/TemplateController.php delete mode 100644 vendor/symfony/framework-bundle/DataCollector/AbstractDataCollector.php delete mode 100644 vendor/symfony/framework-bundle/DataCollector/RouterDataCollector.php delete mode 100644 vendor/symfony/framework-bundle/DataCollector/TemplateAwareDataCollectorInterface.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/AddDebugLogProcessorPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/AssetsContextPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/ContainerBuilderDebugDumpPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/ErrorLoggerCompilerPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/ProfilerPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/RemoveUnusedSessionMarshallingHandlerPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/TestServiceContainerRealRefPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/TestServiceContainerWeakRefPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Compiler/UnusedTagsPass.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/Configuration.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/FrameworkExtension.php delete mode 100644 vendor/symfony/framework-bundle/DependencyInjection/VirtualRequestStackPass.php delete mode 100644 vendor/symfony/framework-bundle/EventListener/ConsoleProfilerListener.php delete mode 100644 vendor/symfony/framework-bundle/EventListener/SuggestMissingPackageSubscriber.php delete mode 100644 vendor/symfony/framework-bundle/FrameworkBundle.php delete mode 100644 vendor/symfony/framework-bundle/HttpCache/HttpCache.php delete mode 100644 vendor/symfony/framework-bundle/Kernel/MicroKernelTrait.php delete mode 100644 vendor/symfony/framework-bundle/KernelBrowser.php delete mode 100644 vendor/symfony/framework-bundle/README.md delete mode 100644 vendor/symfony/framework-bundle/Resources/bin/check-unused-known-tags.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/asset_mapper.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/assets.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/cache.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/cache_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/collectors.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/console.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/debug_prod.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/error_renderer.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/esi.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/form.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/form_csrf.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/form_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/fragment_listener.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/fragment_renderer.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/html_sanitizer.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/http_client.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/http_client_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/identity_translator.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/lock.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/mailer.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/mailer_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/mailer_transports.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/mailer_webhook.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/messenger.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/messenger_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/mime_type.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/notifier.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/notifier_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/notifier_transports.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/notifier_webhook.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/process.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/profiling.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/property_access.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/property_info.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/rate_limiter.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/remote_event.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/request.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/routing.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/routing/errors.xml delete mode 100644 vendor/symfony/framework-bundle/Resources/config/routing/webhook.xml delete mode 100644 vendor/symfony/framework-bundle/Resources/config/scheduler.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/schema/symfony-1.0.xsd delete mode 100644 vendor/symfony/framework-bundle/Resources/config/secrets.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/security_csrf.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/semaphore.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/serializer.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/serializer_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/services.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/session.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/ssi.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/test.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/translation.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/translation_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/translation_providers.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/type_info.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/uid.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/validator.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/validator_debug.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/web.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/web_link.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/webhook.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/workflow.php delete mode 100644 vendor/symfony/framework-bundle/Resources/config/workflow_debug.php delete mode 100644 vendor/symfony/framework-bundle/Routing/Attribute/AsRoutingConditionService.php delete mode 100644 vendor/symfony/framework-bundle/Routing/AttributeRouteControllerLoader.php delete mode 100644 vendor/symfony/framework-bundle/Routing/DelegatingLoader.php delete mode 100644 vendor/symfony/framework-bundle/Routing/RedirectableCompiledUrlMatcher.php delete mode 100644 vendor/symfony/framework-bundle/Routing/RouteLoaderInterface.php delete mode 100644 vendor/symfony/framework-bundle/Routing/Router.php delete mode 100644 vendor/symfony/framework-bundle/Secrets/AbstractVault.php delete mode 100644 vendor/symfony/framework-bundle/Secrets/DotenvVault.php delete mode 100644 vendor/symfony/framework-bundle/Secrets/SodiumVault.php delete mode 100644 vendor/symfony/framework-bundle/Test/BrowserKitAssertionsTrait.php delete mode 100644 vendor/symfony/framework-bundle/Test/DomCrawlerAssertionsTrait.php delete mode 100644 vendor/symfony/framework-bundle/Test/HttpClientAssertionsTrait.php delete mode 100644 vendor/symfony/framework-bundle/Test/KernelTestCase.php delete mode 100644 vendor/symfony/framework-bundle/Test/MailerAssertionsTrait.php delete mode 100644 vendor/symfony/framework-bundle/Test/NotificationAssertionsTrait.php delete mode 100644 vendor/symfony/framework-bundle/Test/TestBrowserToken.php delete mode 100644 vendor/symfony/framework-bundle/Test/TestContainer.php delete mode 100644 vendor/symfony/framework-bundle/Test/WebTestAssertionsTrait.php delete mode 100644 vendor/symfony/framework-bundle/Test/WebTestCase.php delete mode 100644 vendor/symfony/framework-bundle/Translation/Translator.php delete mode 100644 vendor/symfony/framework-bundle/composer.json delete mode 100644 vendor/symfony/http-client-contracts/CHANGELOG.md delete mode 100644 vendor/symfony/http-client-contracts/ChunkInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Exception/ClientExceptionInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Exception/DecodingExceptionInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Exception/HttpExceptionInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Exception/RedirectionExceptionInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Exception/ServerExceptionInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Exception/TimeoutExceptionInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Exception/TransportExceptionInterface.php delete mode 100644 vendor/symfony/http-client-contracts/HttpClientInterface.php delete mode 100644 vendor/symfony/http-client-contracts/README.md delete mode 100644 vendor/symfony/http-client-contracts/ResponseInterface.php delete mode 100644 vendor/symfony/http-client-contracts/ResponseStreamInterface.php delete mode 100644 vendor/symfony/http-client-contracts/Test/Fixtures/web/index.php delete mode 100644 vendor/symfony/http-client-contracts/Test/HttpClientTestCase.php delete mode 100644 vendor/symfony/http-client-contracts/Test/TestHttpServer.php delete mode 100644 vendor/symfony/http-client-contracts/composer.json delete mode 100644 vendor/symfony/http-client/AmpHttpClient.php delete mode 100644 vendor/symfony/http-client/AsyncDecoratorTrait.php delete mode 100644 vendor/symfony/http-client/CHANGELOG.md delete mode 100644 vendor/symfony/http-client/CachingHttpClient.php delete mode 100644 vendor/symfony/http-client/Chunk/DataChunk.php delete mode 100644 vendor/symfony/http-client/Chunk/ErrorChunk.php delete mode 100644 vendor/symfony/http-client/Chunk/FirstChunk.php delete mode 100644 vendor/symfony/http-client/Chunk/InformationalChunk.php delete mode 100644 vendor/symfony/http-client/Chunk/LastChunk.php delete mode 100644 vendor/symfony/http-client/Chunk/ServerSentEvent.php delete mode 100644 vendor/symfony/http-client/CurlHttpClient.php delete mode 100644 vendor/symfony/http-client/DataCollector/HttpClientDataCollector.php delete mode 100644 vendor/symfony/http-client/DecoratorTrait.php delete mode 100644 vendor/symfony/http-client/DependencyInjection/HttpClientPass.php delete mode 100644 vendor/symfony/http-client/EventSourceHttpClient.php delete mode 100644 vendor/symfony/http-client/Exception/ClientException.php delete mode 100644 vendor/symfony/http-client/Exception/EventSourceException.php delete mode 100644 vendor/symfony/http-client/Exception/HttpExceptionTrait.php delete mode 100644 vendor/symfony/http-client/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/http-client/Exception/JsonException.php delete mode 100644 vendor/symfony/http-client/Exception/RedirectionException.php delete mode 100644 vendor/symfony/http-client/Exception/ServerException.php delete mode 100644 vendor/symfony/http-client/Exception/TimeoutException.php delete mode 100644 vendor/symfony/http-client/Exception/TransportException.php delete mode 100644 vendor/symfony/http-client/HttpClient.php delete mode 100644 vendor/symfony/http-client/HttpClientTrait.php delete mode 100644 vendor/symfony/http-client/HttpOptions.php delete mode 100644 vendor/symfony/http-client/HttplugClient.php delete mode 100644 vendor/symfony/http-client/Internal/AmpBody.php delete mode 100644 vendor/symfony/http-client/Internal/AmpClientState.php delete mode 100644 vendor/symfony/http-client/Internal/AmpListener.php delete mode 100644 vendor/symfony/http-client/Internal/AmpResolver.php delete mode 100644 vendor/symfony/http-client/Internal/Canary.php delete mode 100644 vendor/symfony/http-client/Internal/ClientState.php delete mode 100644 vendor/symfony/http-client/Internal/CurlClientState.php delete mode 100644 vendor/symfony/http-client/Internal/DnsCache.php delete mode 100644 vendor/symfony/http-client/Internal/HttplugWaitLoop.php delete mode 100644 vendor/symfony/http-client/Internal/NativeClientState.php delete mode 100644 vendor/symfony/http-client/Internal/PushedResponse.php delete mode 100644 vendor/symfony/http-client/Messenger/PingWebhookMessage.php delete mode 100644 vendor/symfony/http-client/Messenger/PingWebhookMessageHandler.php delete mode 100644 vendor/symfony/http-client/MockHttpClient.php delete mode 100644 vendor/symfony/http-client/NativeHttpClient.php delete mode 100644 vendor/symfony/http-client/NoPrivateNetworkHttpClient.php delete mode 100644 vendor/symfony/http-client/Psr18Client.php delete mode 100644 vendor/symfony/http-client/README.md delete mode 100644 vendor/symfony/http-client/Response/AmpResponse.php delete mode 100644 vendor/symfony/http-client/Response/AsyncContext.php delete mode 100644 vendor/symfony/http-client/Response/AsyncResponse.php delete mode 100644 vendor/symfony/http-client/Response/CommonResponseTrait.php delete mode 100644 vendor/symfony/http-client/Response/CurlResponse.php delete mode 100644 vendor/symfony/http-client/Response/HttplugPromise.php delete mode 100644 vendor/symfony/http-client/Response/JsonMockResponse.php delete mode 100644 vendor/symfony/http-client/Response/MockResponse.php delete mode 100644 vendor/symfony/http-client/Response/NativeResponse.php delete mode 100644 vendor/symfony/http-client/Response/ResponseStream.php delete mode 100644 vendor/symfony/http-client/Response/StreamWrapper.php delete mode 100644 vendor/symfony/http-client/Response/StreamableInterface.php delete mode 100644 vendor/symfony/http-client/Response/TraceableResponse.php delete mode 100644 vendor/symfony/http-client/Response/TransportResponseTrait.php delete mode 100644 vendor/symfony/http-client/Retry/GenericRetryStrategy.php delete mode 100644 vendor/symfony/http-client/Retry/RetryStrategyInterface.php delete mode 100644 vendor/symfony/http-client/RetryableHttpClient.php delete mode 100644 vendor/symfony/http-client/ScopingHttpClient.php delete mode 100644 vendor/symfony/http-client/Test/HarFileResponseFactory.php delete mode 100644 vendor/symfony/http-client/ThrottlingHttpClient.php delete mode 100644 vendor/symfony/http-client/TraceableHttpClient.php delete mode 100644 vendor/symfony/http-client/UriTemplateHttpClient.php delete mode 100644 vendor/symfony/http-client/composer.json delete mode 100644 vendor/symfony/http-foundation/AcceptHeader.php delete mode 100644 vendor/symfony/http-foundation/AcceptHeaderItem.php delete mode 100644 vendor/symfony/http-foundation/BinaryFileResponse.php delete mode 100644 vendor/symfony/http-foundation/CHANGELOG.md delete mode 100644 vendor/symfony/http-foundation/ChainRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/Cookie.php delete mode 100644 vendor/symfony/http-foundation/Exception/BadRequestException.php delete mode 100644 vendor/symfony/http-foundation/Exception/ConflictingHeadersException.php delete mode 100644 vendor/symfony/http-foundation/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/http-foundation/Exception/JsonException.php delete mode 100644 vendor/symfony/http-foundation/Exception/LogicException.php delete mode 100644 vendor/symfony/http-foundation/Exception/RequestExceptionInterface.php delete mode 100644 vendor/symfony/http-foundation/Exception/SessionNotFoundException.php delete mode 100644 vendor/symfony/http-foundation/Exception/SuspiciousOperationException.php delete mode 100644 vendor/symfony/http-foundation/Exception/UnexpectedValueException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/AccessDeniedException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/CannotWriteFileException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/ExtensionFileException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/FileException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/FileNotFoundException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/FormSizeFileException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/IniSizeFileException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/NoFileException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/NoTmpDirFileException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/PartialFileException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/UnexpectedTypeException.php delete mode 100644 vendor/symfony/http-foundation/File/Exception/UploadException.php delete mode 100644 vendor/symfony/http-foundation/File/File.php delete mode 100644 vendor/symfony/http-foundation/File/Stream.php delete mode 100644 vendor/symfony/http-foundation/File/UploadedFile.php delete mode 100644 vendor/symfony/http-foundation/FileBag.php delete mode 100644 vendor/symfony/http-foundation/HeaderBag.php delete mode 100644 vendor/symfony/http-foundation/HeaderUtils.php delete mode 100644 vendor/symfony/http-foundation/InputBag.php delete mode 100644 vendor/symfony/http-foundation/IpUtils.php delete mode 100644 vendor/symfony/http-foundation/JsonResponse.php delete mode 100644 vendor/symfony/http-foundation/ParameterBag.php delete mode 100644 vendor/symfony/http-foundation/README.md delete mode 100644 vendor/symfony/http-foundation/RateLimiter/AbstractRequestRateLimiter.php delete mode 100644 vendor/symfony/http-foundation/RateLimiter/PeekableRequestRateLimiterInterface.php delete mode 100644 vendor/symfony/http-foundation/RateLimiter/RequestRateLimiterInterface.php delete mode 100644 vendor/symfony/http-foundation/RedirectResponse.php delete mode 100644 vendor/symfony/http-foundation/Request.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/AttributesRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/ExpressionRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/HeaderRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/HostRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/IpsRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/IsJsonRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/MethodRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/PathRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/PortRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/QueryParameterRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcher/SchemeRequestMatcher.php delete mode 100644 vendor/symfony/http-foundation/RequestMatcherInterface.php delete mode 100644 vendor/symfony/http-foundation/RequestStack.php delete mode 100644 vendor/symfony/http-foundation/Response.php delete mode 100644 vendor/symfony/http-foundation/ResponseHeaderBag.php delete mode 100644 vendor/symfony/http-foundation/ServerBag.php delete mode 100644 vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php delete mode 100644 vendor/symfony/http-foundation/Session/Attribute/AttributeBagInterface.php delete mode 100644 vendor/symfony/http-foundation/Session/Flash/AutoExpireFlashBag.php delete mode 100644 vendor/symfony/http-foundation/Session/Flash/FlashBag.php delete mode 100644 vendor/symfony/http-foundation/Session/Flash/FlashBagInterface.php delete mode 100644 vendor/symfony/http-foundation/Session/FlashBagAwareSessionInterface.php delete mode 100644 vendor/symfony/http-foundation/Session/Session.php delete mode 100644 vendor/symfony/http-foundation/Session/SessionBagInterface.php delete mode 100644 vendor/symfony/http-foundation/Session/SessionBagProxy.php delete mode 100644 vendor/symfony/http-foundation/Session/SessionFactory.php delete mode 100644 vendor/symfony/http-foundation/Session/SessionFactoryInterface.php delete mode 100644 vendor/symfony/http-foundation/Session/SessionInterface.php delete mode 100644 vendor/symfony/http-foundation/Session/SessionUtils.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/AbstractSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/IdentityMarshaller.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MarshallingSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MemcachedSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MigratingSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/NativeFileSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/PdoSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/RedisSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/SessionHandlerFactory.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Handler/StrictSessionHandler.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/MetadataBag.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/MockArraySessionStorage.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorage.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/MockFileSessionStorageFactory.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/NativeSessionStorageFactory.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorage.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/PhpBridgeSessionStorageFactory.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Proxy/AbstractProxy.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/SessionStorageFactoryInterface.php delete mode 100644 vendor/symfony/http-foundation/Session/Storage/SessionStorageInterface.php delete mode 100644 vendor/symfony/http-foundation/StreamedJsonResponse.php delete mode 100644 vendor/symfony/http-foundation/StreamedResponse.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/RequestAttributeValueSame.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseCookieValueSame.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseFormatSame.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseHasCookie.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseHasHeader.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseHeaderLocationSame.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseHeaderSame.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseIsRedirected.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseIsSuccessful.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseIsUnprocessable.php delete mode 100644 vendor/symfony/http-foundation/Test/Constraint/ResponseStatusCodeSame.php delete mode 100644 vendor/symfony/http-foundation/UriSigner.php delete mode 100644 vendor/symfony/http-foundation/UrlHelper.php delete mode 100644 vendor/symfony/http-foundation/composer.json delete mode 100644 vendor/symfony/http-kernel/Attribute/AsController.php delete mode 100644 vendor/symfony/http-kernel/Attribute/AsTargetedValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Attribute/Cache.php delete mode 100644 vendor/symfony/http-kernel/Attribute/MapDateTime.php delete mode 100644 vendor/symfony/http-kernel/Attribute/MapQueryParameter.php delete mode 100644 vendor/symfony/http-kernel/Attribute/MapQueryString.php delete mode 100644 vendor/symfony/http-kernel/Attribute/MapRequestPayload.php delete mode 100644 vendor/symfony/http-kernel/Attribute/MapUploadedFile.php delete mode 100644 vendor/symfony/http-kernel/Attribute/ValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Attribute/WithHttpStatus.php delete mode 100644 vendor/symfony/http-kernel/Attribute/WithLogLevel.php delete mode 100644 vendor/symfony/http-kernel/Bundle/AbstractBundle.php delete mode 100644 vendor/symfony/http-kernel/Bundle/Bundle.php delete mode 100644 vendor/symfony/http-kernel/Bundle/BundleExtension.php delete mode 100644 vendor/symfony/http-kernel/Bundle/BundleInterface.php delete mode 100644 vendor/symfony/http-kernel/CHANGELOG.md delete mode 100644 vendor/symfony/http-kernel/CacheClearer/CacheClearerInterface.php delete mode 100644 vendor/symfony/http-kernel/CacheClearer/ChainCacheClearer.php delete mode 100644 vendor/symfony/http-kernel/CacheClearer/Psr6CacheClearer.php delete mode 100644 vendor/symfony/http-kernel/CacheWarmer/CacheWarmer.php delete mode 100644 vendor/symfony/http-kernel/CacheWarmer/CacheWarmerAggregate.php delete mode 100644 vendor/symfony/http-kernel/CacheWarmer/CacheWarmerInterface.php delete mode 100644 vendor/symfony/http-kernel/CacheWarmer/WarmableInterface.php delete mode 100644 vendor/symfony/http-kernel/Config/FileLocator.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/BackedEnumValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/DateTimeValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/DefaultValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/NotTaggedControllerValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/QueryParameterValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestAttributeValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestPayloadValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/RequestValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/ServiceValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/SessionValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/TraceableValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/UidValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolver/VariadicValueResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ArgumentResolverInterface.php delete mode 100644 vendor/symfony/http-kernel/Controller/ContainerControllerResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ControllerReference.php delete mode 100644 vendor/symfony/http-kernel/Controller/ControllerResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ControllerResolverInterface.php delete mode 100644 vendor/symfony/http-kernel/Controller/ErrorController.php delete mode 100644 vendor/symfony/http-kernel/Controller/TraceableArgumentResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/TraceableControllerResolver.php delete mode 100644 vendor/symfony/http-kernel/Controller/ValueResolverInterface.php delete mode 100644 vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadata.php delete mode 100644 vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactory.php delete mode 100644 vendor/symfony/http-kernel/ControllerMetadata/ArgumentMetadataFactoryInterface.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/AjaxDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/ConfigDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/DataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/DataCollectorInterface.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/DumpDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/EventDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/ExceptionDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/LateDataCollectorInterface.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/LoggerDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/MemoryDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/RouterDataCollector.php delete mode 100644 vendor/symfony/http-kernel/DataCollector/TimeDataCollector.php delete mode 100644 vendor/symfony/http-kernel/Debug/ErrorHandlerConfigurator.php delete mode 100644 vendor/symfony/http-kernel/Debug/TraceableEventDispatcher.php delete mode 100644 vendor/symfony/http-kernel/Debug/VirtualRequestStack.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/AddAnnotatedClassesToCachePass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/ConfigurableExtension.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/ControllerArgumentValueResolverPass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/Extension.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/FragmentRendererPass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/LazyLoadingFragmentHandler.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/LoggerPass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/MergeExtensionConfigurationPass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/RegisterControllerArgumentLocatorsPass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/RegisterLocaleAwareServicesPass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/RemoveEmptyControllerArgumentLocatorsPass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/ResettableServicePass.php delete mode 100644 vendor/symfony/http-kernel/DependencyInjection/ServicesResetter.php delete mode 100644 vendor/symfony/http-kernel/Event/ControllerArgumentsEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/ControllerEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/ExceptionEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/FinishRequestEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/KernelEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/RequestEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/ResponseEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/TerminateEvent.php delete mode 100644 vendor/symfony/http-kernel/Event/ViewEvent.php delete mode 100644 vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/AddRequestFormatsListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/CacheAttributeListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/DebugHandlersListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/DisallowRobotsIndexingListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/DumpListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/ErrorListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/FragmentListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/LocaleAwareListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/LocaleListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/ProfilerListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/ResponseListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/RouterListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/SessionListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/SurrogateListener.php delete mode 100644 vendor/symfony/http-kernel/EventListener/ValidateRequestListener.php delete mode 100644 vendor/symfony/http-kernel/Exception/AccessDeniedHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/BadRequestHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/ConflictHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/ControllerDoesNotReturnResponseException.php delete mode 100644 vendor/symfony/http-kernel/Exception/GoneHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/HttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/HttpExceptionInterface.php delete mode 100644 vendor/symfony/http-kernel/Exception/InvalidMetadataException.php delete mode 100644 vendor/symfony/http-kernel/Exception/LengthRequiredHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/LockedHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/MethodNotAllowedHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/NearMissValueResolverException.php delete mode 100644 vendor/symfony/http-kernel/Exception/NotAcceptableHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/NotFoundHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/PreconditionFailedHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/PreconditionRequiredHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/ResolverNotFoundException.php delete mode 100644 vendor/symfony/http-kernel/Exception/ServiceUnavailableHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/TooManyRequestsHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/UnauthorizedHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/UnexpectedSessionUsageException.php delete mode 100644 vendor/symfony/http-kernel/Exception/UnprocessableEntityHttpException.php delete mode 100644 vendor/symfony/http-kernel/Exception/UnsupportedMediaTypeHttpException.php delete mode 100644 vendor/symfony/http-kernel/Fragment/AbstractSurrogateFragmentRenderer.php delete mode 100644 vendor/symfony/http-kernel/Fragment/EsiFragmentRenderer.php delete mode 100644 vendor/symfony/http-kernel/Fragment/FragmentHandler.php delete mode 100644 vendor/symfony/http-kernel/Fragment/FragmentRendererInterface.php delete mode 100644 vendor/symfony/http-kernel/Fragment/FragmentUriGenerator.php delete mode 100644 vendor/symfony/http-kernel/Fragment/FragmentUriGeneratorInterface.php delete mode 100644 vendor/symfony/http-kernel/Fragment/HIncludeFragmentRenderer.php delete mode 100644 vendor/symfony/http-kernel/Fragment/InlineFragmentRenderer.php delete mode 100644 vendor/symfony/http-kernel/Fragment/RoutableFragmentRenderer.php delete mode 100644 vendor/symfony/http-kernel/Fragment/SsiFragmentRenderer.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/AbstractSurrogate.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/Esi.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/HttpCache.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategy.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/ResponseCacheStrategyInterface.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/Ssi.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/Store.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/StoreInterface.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/SubRequestHandler.php delete mode 100644 vendor/symfony/http-kernel/HttpCache/SurrogateInterface.php delete mode 100644 vendor/symfony/http-kernel/HttpClientKernel.php delete mode 100644 vendor/symfony/http-kernel/HttpKernel.php delete mode 100644 vendor/symfony/http-kernel/HttpKernelBrowser.php delete mode 100644 vendor/symfony/http-kernel/HttpKernelInterface.php delete mode 100644 vendor/symfony/http-kernel/Kernel.php delete mode 100644 vendor/symfony/http-kernel/KernelEvents.php delete mode 100644 vendor/symfony/http-kernel/KernelInterface.php delete mode 100644 vendor/symfony/http-kernel/Log/DebugLoggerConfigurator.php delete mode 100644 vendor/symfony/http-kernel/Log/DebugLoggerInterface.php delete mode 100644 vendor/symfony/http-kernel/Log/Logger.php delete mode 100644 vendor/symfony/http-kernel/Profiler/FileProfilerStorage.php delete mode 100644 vendor/symfony/http-kernel/Profiler/Profile.php delete mode 100644 vendor/symfony/http-kernel/Profiler/Profiler.php delete mode 100644 vendor/symfony/http-kernel/Profiler/ProfilerStorageInterface.php delete mode 100644 vendor/symfony/http-kernel/README.md delete mode 100644 vendor/symfony/http-kernel/RebootableInterface.php delete mode 100644 vendor/symfony/http-kernel/Resources/welcome.html.php delete mode 100644 vendor/symfony/http-kernel/TerminableInterface.php delete mode 100644 vendor/symfony/http-kernel/composer.json delete mode 100644 vendor/symfony/intl/.gitattributes delete mode 100644 vendor/symfony/intl/.gitignore delete mode 100644 vendor/symfony/intl/CHANGELOG.md delete mode 100644 vendor/symfony/intl/Countries.php delete mode 100644 vendor/symfony/intl/Currencies.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Compiler/BundleCompilerInterface.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Compiler/GenrbCompiler.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Reader/BufferedBundleReader.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Reader/BundleEntryReader.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Reader/BundleEntryReaderInterface.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Reader/BundleReaderInterface.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Reader/IntlBundleReader.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Reader/JsonBundleReader.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Reader/PhpBundleReader.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Writer/BundleWriterInterface.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Writer/JsonBundleWriter.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Writer/PhpBundleWriter.php delete mode 100644 vendor/symfony/intl/Data/Bundle/Writer/TextBundleWriter.php delete mode 100644 vendor/symfony/intl/Data/Generator/AbstractDataGenerator.php delete mode 100644 vendor/symfony/intl/Data/Generator/CurrencyDataGenerator.php delete mode 100644 vendor/symfony/intl/Data/Generator/FallbackTrait.php delete mode 100644 vendor/symfony/intl/Data/Generator/GeneratorConfig.php delete mode 100644 vendor/symfony/intl/Data/Generator/LanguageDataGenerator.php delete mode 100644 vendor/symfony/intl/Data/Generator/LocaleDataGenerator.php delete mode 100644 vendor/symfony/intl/Data/Generator/RegionDataGenerator.php delete mode 100644 vendor/symfony/intl/Data/Generator/ScriptDataGenerator.php delete mode 100644 vendor/symfony/intl/Data/Generator/TimezoneDataGenerator.php delete mode 100644 vendor/symfony/intl/Data/Util/ArrayAccessibleResourceBundle.php delete mode 100644 vendor/symfony/intl/Data/Util/LocaleScanner.php delete mode 100644 vendor/symfony/intl/Data/Util/RecursiveArrayAccess.php delete mode 100644 vendor/symfony/intl/Data/Util/RingBuffer.php delete mode 100644 vendor/symfony/intl/Exception/BadMethodCallException.php delete mode 100644 vendor/symfony/intl/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/intl/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/intl/Exception/MissingResourceException.php delete mode 100644 vendor/symfony/intl/Exception/OutOfBoundsException.php delete mode 100644 vendor/symfony/intl/Exception/ResourceBundleNotFoundException.php delete mode 100644 vendor/symfony/intl/Exception/RuntimeException.php delete mode 100644 vendor/symfony/intl/Exception/UnexpectedTypeException.php delete mode 100644 vendor/symfony/intl/Intl.php delete mode 100644 vendor/symfony/intl/Languages.php delete mode 100644 vendor/symfony/intl/Locale.php delete mode 100644 vendor/symfony/intl/Locales.php delete mode 100644 vendor/symfony/intl/README.md delete mode 100644 vendor/symfony/intl/ResourceBundle.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/af.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/af_NA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ak.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/am.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ar.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ar_DJ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ar_ER.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ar_KM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ar_LB.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ar_SO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ar_SS.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/as.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/az.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/az_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/be.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/bg.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/bm.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/bn.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/bn_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/bo.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/bo_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/br.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/bs.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/bs_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ca.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ca_FR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ce.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/cs.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/cv.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/cy.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/da.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/de.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/de_CH.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/de_LI.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/de_LU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/dz.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ee.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/el.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_001.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_150.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_AG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_AI.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_AT.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_AU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_BB.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_BI.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_BM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_BS.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_BW.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_BZ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_CC.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_CK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_CX.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_DK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_DM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_ER.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_FJ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_FK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_GD.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_GG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_GH.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_GI.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_GM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_GY.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_ID.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_IM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_JE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_JM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_KI.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_KN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_KY.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_LC.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_LR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_LS.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_MG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_MO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_MS.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_MT.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_MU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_MV.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_MW.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_MY.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_NA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_NF.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_NG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_NH.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_NR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_NU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_NZ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_PG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_PK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_PN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_RW.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SB.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SC.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SH.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SL.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SS.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SX.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_SZ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_TK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_TO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_TT.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_TV.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_TZ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_UG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_VC.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_VU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_WS.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_ZA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/en_ZM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_419.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_AR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_BO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_BR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_BZ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_CL.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_CO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_CR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_CU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_DO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_EC.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_GQ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_GT.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_HN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_MX.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_NI.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_PA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_PE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_PH.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_PR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_PY.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_SV.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_US.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_UY.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/es_VE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/et.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/eu.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fa.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fa_AF.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_BF.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_CM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_GH.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_GM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_GW.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_LR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_MR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_NE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_NG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_SL.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Adlm_SN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_GN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Latn_GH.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Latn_GM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Latn_GN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Latn_LR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Latn_MR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Latn_NG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_Latn_SL.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ff_MR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fi.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fo.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fo_DK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_BI.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_CD.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_DJ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_DZ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_GN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_HT.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_KM.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_LU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_MG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_MR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_MU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_RW.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_SC.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_SY.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_TN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fr_VU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/fy.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ga.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/gd.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/gl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/gu.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ha.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ha_GH.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/he.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/hi.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/hi_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/hr.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/hr_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/hu.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/hy.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ia.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/id.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ig.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ii.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/in.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/is.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/it.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/iw.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ja.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/jv.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ka.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ki.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/kk.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/kl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/km.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/kn.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ko.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ks.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ks_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ku.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ky.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/lb.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/lg.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ln.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ln_AO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/lo.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/lt.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/lu.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/lv.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/meta.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/mg.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/mi.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/mk.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ml.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/mn.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/mo.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/mr.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ms.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ms_BN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ms_ID.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ms_SG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/mt.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/my.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/nd.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ne.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/nl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/nl_AW.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/nl_BQ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/nl_CW.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/nl_SR.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/nl_SX.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/nn.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/no.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/no_NO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/om.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/om_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/or.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/os.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/os_RU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pa.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pa_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ps.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ps_PK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pt.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pt_AO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pt_CV.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pt_LU.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pt_MO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pt_MZ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pt_PT.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/pt_ST.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/qu.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/qu_BO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/qu_EC.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/rm.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/rn.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ro.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ro_MD.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/root.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ru.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ru_BY.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ru_KG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ru_KZ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ru_MD.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/rw.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sa.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sc.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sd.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sd_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/se.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/se_SE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sg.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sh.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sh_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/si.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sk.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sn.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/so.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/so_DJ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/so_ET.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/so_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sq.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sq_MK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sr.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sr_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sr_Cyrl_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sr_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sr_Latn_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/su.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sv.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sw.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sw_CD.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sw_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/sw_UG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ta.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ta_LK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ta_MY.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ta_SG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/te.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/tg.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/th.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ti.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ti_ER.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/tk.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/tl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/to.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/tr.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/tt.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ug.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/uk.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ur.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/ur_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/uz.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/uz_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/uz_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/vi.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/wo.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/xh.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/yi.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/yo.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/yo_BJ.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_Hans_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_Hans_MO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_Hans_SG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_Hant.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_Hant_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_Hant_MO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_MO.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zh_SG.php delete mode 100644 vendor/symfony/intl/Resources/data/currencies/zu.php delete mode 100644 vendor/symfony/intl/Resources/data/git-info.txt delete mode 100644 vendor/symfony/intl/Resources/data/languages/af.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ak.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/am.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ar.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ar_EG.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ar_LY.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ar_SA.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/as.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/az.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/az_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/be.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/bg.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/bm.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/bn.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/bn_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/bo.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/br.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/bs.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/bs_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ca.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ce.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/cs.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/cv.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/cy.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/da.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/de.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/de_AT.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/de_CH.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/dz.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ee.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/el.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/en.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/en_001.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/en_AU.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/en_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/en_GB.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/en_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/eo.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_419.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_AR.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_BO.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_CL.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_CO.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_CR.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_DO.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_EC.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_GT.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_HN.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_MX.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_NI.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_PA.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_PE.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_PR.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_PY.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_SV.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_US.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/es_VE.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/et.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/eu.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fa.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fa_AF.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ff.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ff_Adlm.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fi.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fo.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fr.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fr_BE.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fr_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fr_CH.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/fy.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ga.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/gd.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/gl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/gu.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/gv.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ha.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/he.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/hi.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/hi_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/hr.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/hu.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/hy.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ia.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/id.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ie.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ig.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ii.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/in.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/is.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/it.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/iw.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ja.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/jv.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ka.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ki.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/kk.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/kl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/km.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/kn.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ko.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ks.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ks_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ku.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/kw.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ky.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/lb.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/lg.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ln.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/lo.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/lt.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/lu.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/lv.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/meta.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/mg.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/mi.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/mk.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ml.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/mn.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/mo.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/mr.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ms.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/mt.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/my.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/nd.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ne.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/nl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/nn.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/no.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/no_NO.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/oc.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/om.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/or.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/os.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/pa.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/pa_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/pl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ps.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ps_PK.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/pt.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/pt_PT.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/qu.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/rm.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/rn.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ro.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ro_MD.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ru.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/rw.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sa.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sc.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sd.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sd_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/se.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/se_FI.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sg.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sh.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sh_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/si.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sk.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sn.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/so.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sq.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_Cyrl_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_Cyrl_ME.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_Cyrl_XK.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_Latn_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_Latn_ME.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_Latn_XK.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_ME.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sr_XK.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/su.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sv.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sw.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sw_CD.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/sw_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ta.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/te.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/tg.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/th.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ti.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ti_ER.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/tk.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/tl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/to.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/tr.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/tt.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ug.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/uk.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ur.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/ur_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/uz.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/uz_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/uz_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/vi.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/wo.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/xh.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/yi.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/yo.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/yo_BJ.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/za.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/zh.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/zh_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/zh_Hant.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/zh_Hant_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/languages/zu.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/af.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ak.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/am.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ar.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ar_EG.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ar_LY.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ar_SA.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/as.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/az.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/az_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/be.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/bg.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/bm.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/bn.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/bn_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/bo.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/br.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/bs.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/bs_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ca.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ce.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/cs.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/cv.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/cy.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/da.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/de.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/de_AT.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/de_CH.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/dz.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ee.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/el.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/en.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/en_001.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/en_AU.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/en_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/en_GB.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/en_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/eo.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_419.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_AR.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_BO.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_CL.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_CO.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_CR.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_DO.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_EC.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_GT.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_HN.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_MX.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_NI.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_PA.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_PE.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_PR.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_PY.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_SV.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_US.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/es_VE.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/et.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/eu.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fa.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fa_AF.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ff.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ff_Adlm.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fi.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fo.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fr.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fr_BE.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fr_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fr_CH.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/fy.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ga.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/gd.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/gl.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/gu.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/gv.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ha.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/he.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/hi.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/hi_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/hr.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/hu.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/hy.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ia.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/id.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ie.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ig.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ii.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/is.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/it.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ja.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/jv.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ka.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ki.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/kk.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/kl.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/km.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/kn.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ko.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ko_KP.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ks.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ks_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ku.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/kw.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ky.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/lb.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/lg.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ln.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/lo.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/lt.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/lu.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/lv.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/meta.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/mg.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/mi.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/mk.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ml.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/mn.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/mr.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ms.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/mt.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/my.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/nd.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ne.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/nl.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/nn.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/no.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/oc.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/om.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/or.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/os.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/pa.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/pa_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/pl.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ps.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ps_PK.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/pt.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/pt_PT.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/qu.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/rm.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/rn.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ro.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ro_MD.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ru.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ru_UA.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/rw.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sa.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sc.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sd.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sd_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/se.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/se_FI.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sg.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/si.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sk.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sl.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sn.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/so.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sq.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sr.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sr_Cyrl_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sr_Cyrl_ME.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sr_Cyrl_XK.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sr_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sr_Latn_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sr_Latn_ME.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sr_Latn_XK.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/su.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sv.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sw.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sw_CD.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/sw_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ta.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/te.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/tg.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/th.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ti.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ti_ER.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/tk.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/to.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/tr.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/tt.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ug.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/uk.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ur.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/ur_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/uz.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/uz_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/uz_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/vi.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/wo.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/xh.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/yi.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/yo.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/yo_BJ.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/za.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/zh.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/zh_Hant.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/zh_Hant_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/locales/zu.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/af.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ak.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/am.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ar.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ar_LY.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ar_SA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/as.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/az.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/az_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/be.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/bg.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/bm.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/bn.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/bn_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/bo.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/bo_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/br.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/bs.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/bs_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ca.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ce.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/cs.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/cv.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/cy.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/da.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/de.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/de_AT.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/de_CH.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/dz.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ee.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/el.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/en.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/en_001.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/en_AU.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/en_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/eo.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_419.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_AR.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_BO.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_CL.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_CO.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_CR.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_DO.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_EC.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_GT.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_HN.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_MX.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_NI.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_PA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_PE.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_PR.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_PY.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_SV.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_US.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/es_VE.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/et.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/eu.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/fa.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/fa_AF.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ff.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ff_Adlm.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/fi.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/fo.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/fr.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/fr_BE.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/fr_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/fy.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ga.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/gd.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/gl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/gu.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/gv.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ha.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/he.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/hi.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/hi_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/hr.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/hu.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/hy.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ia.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/id.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ie.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ig.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ii.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/in.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/is.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/it.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/iw.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ja.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/jv.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ka.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ki.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/kk.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/kl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/km.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/kn.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ko.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ko_KP.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ks.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ks_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ku.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/kw.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ky.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/lb.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/lg.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ln.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/lo.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/lt.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/lu.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/lv.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/meta.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/mg.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/mi.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/mk.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ml.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/mn.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/mo.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/mr.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ms.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/mt.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/my.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/nd.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ne.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/nl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/nn.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/no.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/no_NO.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/oc.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/om.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/or.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/os.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/pa.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/pa_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/pl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ps.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ps_PK.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/pt.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/pt_PT.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/qu.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/rm.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/rn.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ro.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ro_MD.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ru.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ru_UA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/rw.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sa.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sc.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sd.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sd_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/se.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/se_FI.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sg.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sh.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sh_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/si.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sk.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sn.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/so.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sq.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_Cyrl_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_Cyrl_ME.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_Cyrl_XK.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_Latn_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_Latn_ME.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_Latn_XK.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_ME.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sr_XK.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/su.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sv.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sw.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sw_CD.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/sw_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ta.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/te.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/tg.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/th.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ti.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/tk.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/tl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/to.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/tr.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/tt.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ug.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/uk.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ur.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/ur_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/uz.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/uz_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/uz_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/vi.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/wo.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/xh.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/yi.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/yo.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/yo_BJ.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/za.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/zh.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/zh_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/zh_Hant.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/zh_Hant_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/regions/zu.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/af.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/am.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ar.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/as.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/az.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/az_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/be.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/bg.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/bn.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/bo.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/br.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/bs.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/bs_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ca.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ce.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/cs.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/cv.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/cy.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/da.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/de.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/dz.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ee.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/el.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/en.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/en_AU.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/en_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/eo.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/es.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/es_419.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/es_US.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/et.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/eu.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/fa.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/fa_AF.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ff_Adlm.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/fi.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/fo.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/fr.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/fr_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/fy.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ga.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/gd.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/gl.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/gu.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ha.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ha_NE.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/he.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/hi.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/hi_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/hr.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/hu.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/hy.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ia.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/id.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ie.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ig.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ii.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/in.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/is.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/it.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/iw.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ja.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/jv.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ka.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/kk.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/km.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/kn.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ko.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ks.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ks_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ku.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ky.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/lb.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/lo.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/lt.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/lv.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/meta.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/mi.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/mk.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ml.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/mn.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/mo.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/mr.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ms.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/mt.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/my.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ne.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/nl.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/nn.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/no.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/no_NO.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/oc.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/om.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/or.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/os.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/pa.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/pa_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/pl.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ps.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/pt.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/pt_PT.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/qu.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/rm.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ro.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ru.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sa.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sc.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sd.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sd_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/se.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/se_FI.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sh.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/si.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sk.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sl.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/so.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sq.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sr.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sr_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/su.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sv.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sw.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/sw_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ta.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/te.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/tg.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/th.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ti.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/tk.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/tl.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/to.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/tr.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/tt.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ug.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/uk.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/ur.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/uz.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/uz_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/uz_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/vi.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/wo.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/xh.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/yi.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/yo.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/yo_BJ.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/za.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/zh.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/zh_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/zh_Hant.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/zh_Hant_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/scripts/zu.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/af.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/am.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ar.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/as.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/az.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/be.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/bg.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/bn.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/bo.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/br.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/bs.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/bs_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ca.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ce.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/cs.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/cv.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/cy.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/da.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/de.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/de_CH.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/dz.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ee.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/el.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/en.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/en_001.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/en_AU.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/en_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/en_GB.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/en_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/eo.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/es.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/es_419.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/es_MX.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/es_US.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/et.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/eu.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/fa.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ff_Adlm.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/fi.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/fo.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/fr.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/fr_CA.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/fy.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ga.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/gd.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/gl.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/gu.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ha.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/he.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/hi.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/hi_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/hr.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/hu.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/hy.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ia.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/id.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ie.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ig.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ii.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/is.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/it.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ja.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/jv.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ka.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/kk.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/km.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/kn.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ko.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ko_KP.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ks.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ks_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ku.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ky.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/lb.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ln.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/lo.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/lt.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/lv.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/meta.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/mi.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/mk.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ml.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/mn.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/mr.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ms.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ms_ID.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/mt.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/my.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ne.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/nl.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/nn.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/no.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/oc.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/or.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/os.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/pa.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/pl.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ps.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ps_PK.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/pt.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/pt_PT.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/qu.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/rm.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ro.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/root.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ru.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sa.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sc.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sd.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sd_Deva.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/se.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/se_FI.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/si.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sk.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sl.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/so.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sq.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sr.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sr_Cyrl_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sr_Latn.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sr_Latn_BA.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/su.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sv.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sw.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/sw_KE.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ta.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/te.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/tg.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/th.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ti.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/tk.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/to.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/tr.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/tt.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ug.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/uk.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ur.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/ur_IN.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/uz.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/uz_Arab.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/uz_Cyrl.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/vi.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/wo.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/xh.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/yi.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/yo.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/yo_BJ.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/za.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/zh.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/zh_Hans_SG.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/zh_Hant.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/zh_Hant_HK.php delete mode 100644 vendor/symfony/intl/Resources/data/timezones/zu.php delete mode 100644 vendor/symfony/intl/Resources/data/version.txt delete mode 100644 vendor/symfony/intl/Scripts.php delete mode 100644 vendor/symfony/intl/Timezones.php delete mode 100644 vendor/symfony/intl/Transliterator/EmojiTransliterator.php delete mode 100644 vendor/symfony/intl/Util/GitRepository.php delete mode 100644 vendor/symfony/intl/Util/GzipStreamWrapper.php delete mode 100644 vendor/symfony/intl/Util/IcuVersion.php delete mode 100644 vendor/symfony/intl/Util/IntlTestHelper.php delete mode 100644 vendor/symfony/intl/Util/Version.php delete mode 100644 vendor/symfony/intl/composer.json delete mode 100644 vendor/symfony/mailer/CHANGELOG.md delete mode 100644 vendor/symfony/mailer/Command/MailerTestCommand.php delete mode 100644 vendor/symfony/mailer/DataCollector/MessageDataCollector.php delete mode 100644 vendor/symfony/mailer/DelayedEnvelope.php delete mode 100644 vendor/symfony/mailer/Envelope.php delete mode 100644 vendor/symfony/mailer/Event/FailedMessageEvent.php delete mode 100644 vendor/symfony/mailer/Event/MessageEvent.php delete mode 100644 vendor/symfony/mailer/Event/MessageEvents.php delete mode 100644 vendor/symfony/mailer/Event/SentMessageEvent.php delete mode 100644 vendor/symfony/mailer/EventListener/EnvelopeListener.php delete mode 100644 vendor/symfony/mailer/EventListener/MessageListener.php delete mode 100644 vendor/symfony/mailer/EventListener/MessageLoggerListener.php delete mode 100644 vendor/symfony/mailer/EventListener/MessengerTransportListener.php delete mode 100644 vendor/symfony/mailer/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/mailer/Exception/HttpTransportException.php delete mode 100644 vendor/symfony/mailer/Exception/IncompleteDsnException.php delete mode 100644 vendor/symfony/mailer/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/mailer/Exception/LogicException.php delete mode 100644 vendor/symfony/mailer/Exception/RuntimeException.php delete mode 100644 vendor/symfony/mailer/Exception/TransportException.php delete mode 100644 vendor/symfony/mailer/Exception/TransportExceptionInterface.php delete mode 100644 vendor/symfony/mailer/Exception/UnexpectedResponseException.php delete mode 100644 vendor/symfony/mailer/Exception/UnsupportedSchemeException.php delete mode 100644 vendor/symfony/mailer/Header/MetadataHeader.php delete mode 100644 vendor/symfony/mailer/Header/TagHeader.php delete mode 100644 vendor/symfony/mailer/Mailer.php delete mode 100644 vendor/symfony/mailer/MailerInterface.php delete mode 100644 vendor/symfony/mailer/Messenger/MessageHandler.php delete mode 100644 vendor/symfony/mailer/Messenger/SendEmailMessage.php delete mode 100644 vendor/symfony/mailer/README.md delete mode 100644 vendor/symfony/mailer/SentMessage.php delete mode 100644 vendor/symfony/mailer/Test/Constraint/EmailCount.php delete mode 100644 vendor/symfony/mailer/Test/Constraint/EmailIsQueued.php delete mode 100644 vendor/symfony/mailer/Test/TransportFactoryTestCase.php delete mode 100644 vendor/symfony/mailer/Transport.php delete mode 100644 vendor/symfony/mailer/Transport/AbstractApiTransport.php delete mode 100644 vendor/symfony/mailer/Transport/AbstractHttpTransport.php delete mode 100644 vendor/symfony/mailer/Transport/AbstractTransport.php delete mode 100644 vendor/symfony/mailer/Transport/AbstractTransportFactory.php delete mode 100644 vendor/symfony/mailer/Transport/Dsn.php delete mode 100644 vendor/symfony/mailer/Transport/FailoverTransport.php delete mode 100644 vendor/symfony/mailer/Transport/NativeTransportFactory.php delete mode 100644 vendor/symfony/mailer/Transport/NullTransport.php delete mode 100644 vendor/symfony/mailer/Transport/NullTransportFactory.php delete mode 100644 vendor/symfony/mailer/Transport/RoundRobinTransport.php delete mode 100644 vendor/symfony/mailer/Transport/SendmailTransport.php delete mode 100644 vendor/symfony/mailer/Transport/SendmailTransportFactory.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/Auth/AuthenticatorInterface.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/Auth/CramMd5Authenticator.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/Auth/LoginAuthenticator.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/Auth/PlainAuthenticator.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/Auth/XOAuth2Authenticator.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/EsmtpTransport.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/EsmtpTransportFactory.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/SmtpTransport.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/Stream/AbstractStream.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/Stream/ProcessStream.php delete mode 100644 vendor/symfony/mailer/Transport/Smtp/Stream/SocketStream.php delete mode 100644 vendor/symfony/mailer/Transport/TransportFactoryInterface.php delete mode 100644 vendor/symfony/mailer/Transport/TransportInterface.php delete mode 100644 vendor/symfony/mailer/Transport/Transports.php delete mode 100644 vendor/symfony/mailer/composer.json delete mode 100644 vendor/symfony/maker-bundle/composer.json delete mode 100644 vendor/symfony/maker-bundle/phpstan.dist.neon delete mode 100644 vendor/symfony/maker-bundle/src/ApplicationAwareMakerInterface.php delete mode 100644 vendor/symfony/maker-bundle/src/Command/MakerCommand.php delete mode 100644 vendor/symfony/maker-bundle/src/Console/MigrationDiffFilteredOutput.php delete mode 100644 vendor/symfony/maker-bundle/src/ConsoleStyle.php delete mode 100644 vendor/symfony/maker-bundle/src/DependencyBuilder.php delete mode 100644 vendor/symfony/maker-bundle/src/DependencyInjection/CompilerPass/MakeCommandRegistrationPass.php delete mode 100644 vendor/symfony/maker-bundle/src/DependencyInjection/CompilerPass/RemoveMissingParametersPass.php delete mode 100644 vendor/symfony/maker-bundle/src/DependencyInjection/CompilerPass/SetDoctrineAnnotatedPrefixesPass.php delete mode 100644 vendor/symfony/maker-bundle/src/DependencyInjection/Configuration.php delete mode 100644 vendor/symfony/maker-bundle/src/DependencyInjection/MakerExtension.php delete mode 100644 vendor/symfony/maker-bundle/src/Docker/DockerDatabaseServices.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/BaseCollectionRelation.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/BaseRelation.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/DoctrineHelper.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/EntityClassGenerator.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/EntityDetails.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/EntityRegenerator.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/EntityRelation.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/ORMDependencyBuilder.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/RelationManyToMany.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/RelationManyToOne.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/RelationOneToMany.php delete mode 100644 vendor/symfony/maker-bundle/src/Doctrine/RelationOneToOne.php delete mode 100644 vendor/symfony/maker-bundle/src/Event/ConsoleErrorSubscriber.php delete mode 100644 vendor/symfony/maker-bundle/src/EventRegistry.php delete mode 100644 vendor/symfony/maker-bundle/src/Exception/RuntimeCommandException.php delete mode 100644 vendor/symfony/maker-bundle/src/FileManager.php delete mode 100644 vendor/symfony/maker-bundle/src/Generator.php delete mode 100644 vendor/symfony/maker-bundle/src/GeneratorTwigHelper.php delete mode 100644 vendor/symfony/maker-bundle/src/InputAwareMakerInterface.php delete mode 100644 vendor/symfony/maker-bundle/src/InputConfiguration.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/AbstractMaker.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/Common/CanGenerateTestsTrait.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/Common/EntityIdTypeEnum.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/Common/InstallDependencyTrait.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/Common/UidTrait.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeAuthenticator.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeCommand.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeController.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeCrud.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeDockerDatabase.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeEntity.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeFixtures.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeForm.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeFunctionalTest.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeListener.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeMessage.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeMessengerMiddleware.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeMigration.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeRegistrationForm.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeResetPassword.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeSchedule.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeSerializerEncoder.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeSerializerNormalizer.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeStimulusController.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeSubscriber.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeTest.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeTwigComponent.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeTwigExtension.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeUnitTest.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeUser.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeValidator.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeVoter.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/MakeWebhook.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/Security/MakeCustomAuthenticator.php delete mode 100644 vendor/symfony/maker-bundle/src/Maker/Security/MakeFormLogin.php delete mode 100644 vendor/symfony/maker-bundle/src/MakerBundle.php delete mode 100644 vendor/symfony/maker-bundle/src/MakerInterface.php delete mode 100644 vendor/symfony/maker-bundle/src/Renderer/FormTypeRenderer.php delete mode 100755 vendor/symfony/maker-bundle/src/Resources/bin/php-cs-fixer-v3.49.0.phar delete mode 100644 vendor/symfony/maker-bundle/src/Resources/config/makers.xml delete mode 100644 vendor/symfony/maker-bundle/src/Resources/config/php-cs-fixer.config.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/config/services.xml delete mode 100644 vendor/symfony/maker-bundle/src/Resources/doc/index.rst delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeAuth.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeCommand.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeController.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeCrud.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeDockerDatabase.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeEntity.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeFixture.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeForm.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeFunctionalTest.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeListener.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeMessage.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeMiddleware.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeMigration.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeRegistrationForm.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeResetPassword.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeScheduler.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeSerializerEncoder.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeSerializerNormalizer.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeStimulusController.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeSubscriber.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeTest.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeTwigExtension.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeUnitTest.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeUser.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeValidator.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeVoter.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/MakeWebhook.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/_WithTests.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/_WithUid.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/security/MakeCustom.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/help/security/MakeFormLogin.txt delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/Class.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/authenticator/EmptyAuthenticator.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/authenticator/EmptySecurityController.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/authenticator/LoginFormAuthenticator.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/authenticator/login_form.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/command/Command.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/controller/Controller.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/controller/twig_template.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/crud/controller/Controller.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/crud/templates/_delete_form.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/crud/templates/_form.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/crud/templates/edit.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/crud/templates/index.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/crud/templates/new.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/crud/templates/show.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/crud/test/Test.EntityManager.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/doctrine/Entity.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/doctrine/Fixtures.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/doctrine/Repository.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/doctrine/broadcast_twig_template.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/event/Listener.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/event/Subscriber.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/form/Type.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/message/Message.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/message/MessageHandler.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/middleware/Middleware.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/registration/RegistrationController.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/registration/Test.WithVerify.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/registration/Test.WithoutVerify.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/registration/twig_email.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/registration/twig_template.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/resetPassword/ChangePasswordFormType.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/resetPassword/ResetPasswordController.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/resetPassword/ResetPasswordRequestFormType.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/resetPassword/Test.ResetPasswordController.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/resetPassword/twig_check_email.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/resetPassword/twig_email.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/resetPassword/twig_request.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/resetPassword/twig_reset.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/scheduler/Schedule.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/security/UserProvider.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/security/Voter.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/security/custom/Authenticator.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/security/formLogin/LoginController.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/security/formLogin/Test.LoginController.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/security/formLogin/login_form.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/serializer/Encoder.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/serializer/Normalizer.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/stimulus/Controller.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/test/ApiTestCase.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/test/Functional.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/test/KernelTestCase.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/test/PantherTestCase.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/test/TestCase.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/test/Unit.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/test/WebTestCase.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/twig/Component.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/twig/Extension.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/twig/LiveComponent.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/twig/Runtime.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/twig/component_template.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/validator/Constraint.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/validator/Validator.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/verifyEmail/EmailVerifier.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/webhook/RequestParser.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Resources/skeleton/webhook/WebhookConsumer.tpl.php delete mode 100644 vendor/symfony/maker-bundle/src/Security/InteractiveSecurityHelper.php delete mode 100644 vendor/symfony/maker-bundle/src/Security/Model/Authenticator.php delete mode 100644 vendor/symfony/maker-bundle/src/Security/Model/AuthenticatorType.php delete mode 100644 vendor/symfony/maker-bundle/src/Security/SecurityConfigUpdater.php delete mode 100644 vendor/symfony/maker-bundle/src/Security/SecurityControllerBuilder.php delete mode 100644 vendor/symfony/maker-bundle/src/Security/UserClassBuilder.php delete mode 100644 vendor/symfony/maker-bundle/src/Security/UserClassConfiguration.php delete mode 100644 vendor/symfony/maker-bundle/src/Str.php delete mode 100644 vendor/symfony/maker-bundle/src/Test/MakerTestCase.php delete mode 100644 vendor/symfony/maker-bundle/src/Test/MakerTestDetails.php delete mode 100644 vendor/symfony/maker-bundle/src/Test/MakerTestEnvironment.php delete mode 100644 vendor/symfony/maker-bundle/src/Test/MakerTestKernel.php delete mode 100644 vendor/symfony/maker-bundle/src/Test/MakerTestProcess.php delete mode 100644 vendor/symfony/maker-bundle/src/Test/MakerTestRunner.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/AutoloaderUtil.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/ClassDetails.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/ClassNameDetails.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/ClassNameValue.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/ClassSource/Model/ClassData.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/ClassSource/Model/ClassProperty.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/ClassSourceManipulator.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/CliOutputHelper.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/ComposeFileManipulator.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/ComposerAutoloaderFinder.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/MakerFileLinkFormatter.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/PhpCompatUtil.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/PrettyPrinter.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/TemplateComponentGenerator.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/TemplateLinter.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/UseStatementGenerator.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/YamlManipulationFailedException.php delete mode 100644 vendor/symfony/maker-bundle/src/Util/YamlSourceManipulator.php delete mode 100644 vendor/symfony/maker-bundle/src/Validator.php delete mode 100644 vendor/symfony/messenger/Attribute/AsMessageHandler.php delete mode 100644 vendor/symfony/messenger/CHANGELOG.md delete mode 100644 vendor/symfony/messenger/Command/AbstractFailedMessagesCommand.php delete mode 100644 vendor/symfony/messenger/Command/ConsumeMessagesCommand.php delete mode 100644 vendor/symfony/messenger/Command/DebugCommand.php delete mode 100644 vendor/symfony/messenger/Command/FailedMessagesRemoveCommand.php delete mode 100644 vendor/symfony/messenger/Command/FailedMessagesRetryCommand.php delete mode 100644 vendor/symfony/messenger/Command/FailedMessagesShowCommand.php delete mode 100644 vendor/symfony/messenger/Command/SetupTransportsCommand.php delete mode 100644 vendor/symfony/messenger/Command/StatsCommand.php delete mode 100644 vendor/symfony/messenger/Command/StopWorkersCommand.php delete mode 100644 vendor/symfony/messenger/DataCollector/MessengerDataCollector.php delete mode 100644 vendor/symfony/messenger/DependencyInjection/MessengerPass.php delete mode 100644 vendor/symfony/messenger/Envelope.php delete mode 100644 vendor/symfony/messenger/Event/AbstractWorkerMessageEvent.php delete mode 100644 vendor/symfony/messenger/Event/SendMessageToTransportsEvent.php delete mode 100644 vendor/symfony/messenger/Event/WorkerMessageFailedEvent.php delete mode 100644 vendor/symfony/messenger/Event/WorkerMessageHandledEvent.php delete mode 100644 vendor/symfony/messenger/Event/WorkerMessageReceivedEvent.php delete mode 100644 vendor/symfony/messenger/Event/WorkerMessageRetriedEvent.php delete mode 100644 vendor/symfony/messenger/Event/WorkerRateLimitedEvent.php delete mode 100644 vendor/symfony/messenger/Event/WorkerRunningEvent.php delete mode 100644 vendor/symfony/messenger/Event/WorkerStartedEvent.php delete mode 100644 vendor/symfony/messenger/Event/WorkerStoppedEvent.php delete mode 100644 vendor/symfony/messenger/EventListener/AddErrorDetailsStampListener.php delete mode 100644 vendor/symfony/messenger/EventListener/DispatchPcntlSignalListener.php delete mode 100644 vendor/symfony/messenger/EventListener/ResetServicesListener.php delete mode 100644 vendor/symfony/messenger/EventListener/SendFailedMessageForRetryListener.php delete mode 100644 vendor/symfony/messenger/EventListener/SendFailedMessageToFailureTransportListener.php delete mode 100644 vendor/symfony/messenger/EventListener/StopWorkerOnCustomStopExceptionListener.php delete mode 100644 vendor/symfony/messenger/EventListener/StopWorkerOnFailureLimitListener.php delete mode 100644 vendor/symfony/messenger/EventListener/StopWorkerOnMemoryLimitListener.php delete mode 100644 vendor/symfony/messenger/EventListener/StopWorkerOnMessageLimitListener.php delete mode 100644 vendor/symfony/messenger/EventListener/StopWorkerOnRestartSignalListener.php delete mode 100644 vendor/symfony/messenger/EventListener/StopWorkerOnTimeLimitListener.php delete mode 100644 vendor/symfony/messenger/Exception/DelayedMessageHandlingException.php delete mode 100644 vendor/symfony/messenger/Exception/EnvelopeAwareExceptionInterface.php delete mode 100644 vendor/symfony/messenger/Exception/EnvelopeAwareExceptionTrait.php delete mode 100644 vendor/symfony/messenger/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/messenger/Exception/HandlerFailedException.php delete mode 100644 vendor/symfony/messenger/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/messenger/Exception/LogicException.php delete mode 100644 vendor/symfony/messenger/Exception/MessageDecodingFailedException.php delete mode 100644 vendor/symfony/messenger/Exception/NoHandlerForMessageException.php delete mode 100644 vendor/symfony/messenger/Exception/NoSenderForMessageException.php delete mode 100644 vendor/symfony/messenger/Exception/RecoverableExceptionInterface.php delete mode 100644 vendor/symfony/messenger/Exception/RecoverableMessageHandlingException.php delete mode 100644 vendor/symfony/messenger/Exception/RejectRedeliveredMessageException.php delete mode 100644 vendor/symfony/messenger/Exception/RuntimeException.php delete mode 100644 vendor/symfony/messenger/Exception/StopWorkerException.php delete mode 100644 vendor/symfony/messenger/Exception/StopWorkerExceptionInterface.php delete mode 100644 vendor/symfony/messenger/Exception/TransportException.php delete mode 100644 vendor/symfony/messenger/Exception/UnrecoverableExceptionInterface.php delete mode 100644 vendor/symfony/messenger/Exception/UnrecoverableMessageHandlingException.php delete mode 100644 vendor/symfony/messenger/Exception/ValidationFailedException.php delete mode 100644 vendor/symfony/messenger/Exception/WrappedExceptionsInterface.php delete mode 100644 vendor/symfony/messenger/Exception/WrappedExceptionsTrait.php delete mode 100644 vendor/symfony/messenger/HandleTrait.php delete mode 100644 vendor/symfony/messenger/Handler/Acknowledger.php delete mode 100644 vendor/symfony/messenger/Handler/BatchHandlerInterface.php delete mode 100644 vendor/symfony/messenger/Handler/BatchHandlerTrait.php delete mode 100644 vendor/symfony/messenger/Handler/HandlerDescriptor.php delete mode 100644 vendor/symfony/messenger/Handler/HandlersLocator.php delete mode 100644 vendor/symfony/messenger/Handler/HandlersLocatorInterface.php delete mode 100644 vendor/symfony/messenger/Handler/RedispatchMessageHandler.php delete mode 100644 vendor/symfony/messenger/Message/RedispatchMessage.php delete mode 100644 vendor/symfony/messenger/MessageBus.php delete mode 100644 vendor/symfony/messenger/MessageBusInterface.php delete mode 100644 vendor/symfony/messenger/Middleware/ActivationMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/AddBusNameStampMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/DispatchAfterCurrentBusMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/FailedMessageProcessingMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/HandleMessageMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/MiddlewareInterface.php delete mode 100644 vendor/symfony/messenger/Middleware/RejectRedeliveredMessageMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/RouterContextMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/SendMessageMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/StackInterface.php delete mode 100644 vendor/symfony/messenger/Middleware/StackMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/TraceableMiddleware.php delete mode 100644 vendor/symfony/messenger/Middleware/ValidationMiddleware.php delete mode 100644 vendor/symfony/messenger/README.md delete mode 100644 vendor/symfony/messenger/Retry/MultiplierRetryStrategy.php delete mode 100644 vendor/symfony/messenger/Retry/RetryStrategyInterface.php delete mode 100644 vendor/symfony/messenger/RoutableMessageBus.php delete mode 100644 vendor/symfony/messenger/Stamp/AckStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/BusNameStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/ConsumedByWorkerStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/DelayStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/DispatchAfterCurrentBusStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/ErrorDetailsStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/FlushBatchHandlersStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/HandledStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/HandlerArgumentsStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/MessageDecodingFailedStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/NoAutoAckStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/NonSendableStampInterface.php delete mode 100644 vendor/symfony/messenger/Stamp/ReceivedStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/RedeliveryStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/RouterContextStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/SentStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/SentToFailureTransportStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/SerializedMessageStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/SerializerStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/StampInterface.php delete mode 100644 vendor/symfony/messenger/Stamp/TransportMessageIdStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/TransportNamesStamp.php delete mode 100644 vendor/symfony/messenger/Stamp/ValidationStamp.php delete mode 100644 vendor/symfony/messenger/Test/Middleware/MiddlewareTestCase.php delete mode 100644 vendor/symfony/messenger/TraceableMessageBus.php delete mode 100644 vendor/symfony/messenger/Transport/InMemory/InMemoryTransport.php delete mode 100644 vendor/symfony/messenger/Transport/InMemory/InMemoryTransportFactory.php delete mode 100644 vendor/symfony/messenger/Transport/Receiver/ListableReceiverInterface.php delete mode 100644 vendor/symfony/messenger/Transport/Receiver/MessageCountAwareInterface.php delete mode 100644 vendor/symfony/messenger/Transport/Receiver/QueueReceiverInterface.php delete mode 100644 vendor/symfony/messenger/Transport/Receiver/ReceiverInterface.php delete mode 100644 vendor/symfony/messenger/Transport/Receiver/SingleMessageReceiver.php delete mode 100644 vendor/symfony/messenger/Transport/Sender/SenderInterface.php delete mode 100644 vendor/symfony/messenger/Transport/Sender/SendersLocator.php delete mode 100644 vendor/symfony/messenger/Transport/Sender/SendersLocatorInterface.php delete mode 100644 vendor/symfony/messenger/Transport/Serialization/Normalizer/FlattenExceptionNormalizer.php delete mode 100644 vendor/symfony/messenger/Transport/Serialization/PhpSerializer.php delete mode 100644 vendor/symfony/messenger/Transport/Serialization/Serializer.php delete mode 100644 vendor/symfony/messenger/Transport/Serialization/SerializerInterface.php delete mode 100644 vendor/symfony/messenger/Transport/SetupableTransportInterface.php delete mode 100644 vendor/symfony/messenger/Transport/Sync/SyncTransport.php delete mode 100644 vendor/symfony/messenger/Transport/Sync/SyncTransportFactory.php delete mode 100644 vendor/symfony/messenger/Transport/TransportFactory.php delete mode 100644 vendor/symfony/messenger/Transport/TransportFactoryInterface.php delete mode 100644 vendor/symfony/messenger/Transport/TransportInterface.php delete mode 100644 vendor/symfony/messenger/Worker.php delete mode 100644 vendor/symfony/messenger/WorkerMetadata.php delete mode 100644 vendor/symfony/messenger/composer.json delete mode 100644 vendor/symfony/mime/Address.php delete mode 100644 vendor/symfony/mime/BodyRendererInterface.php delete mode 100644 vendor/symfony/mime/CHANGELOG.md delete mode 100644 vendor/symfony/mime/CharacterStream.php delete mode 100644 vendor/symfony/mime/Crypto/DkimOptions.php delete mode 100644 vendor/symfony/mime/Crypto/DkimSigner.php delete mode 100644 vendor/symfony/mime/Crypto/SMime.php delete mode 100644 vendor/symfony/mime/Crypto/SMimeEncrypter.php delete mode 100644 vendor/symfony/mime/Crypto/SMimeSigner.php delete mode 100644 vendor/symfony/mime/DependencyInjection/AddMimeTypeGuesserPass.php delete mode 100644 vendor/symfony/mime/DraftEmail.php delete mode 100644 vendor/symfony/mime/Email.php delete mode 100644 vendor/symfony/mime/Encoder/AddressEncoderInterface.php delete mode 100644 vendor/symfony/mime/Encoder/Base64ContentEncoder.php delete mode 100644 vendor/symfony/mime/Encoder/Base64Encoder.php delete mode 100644 vendor/symfony/mime/Encoder/Base64MimeHeaderEncoder.php delete mode 100644 vendor/symfony/mime/Encoder/ContentEncoderInterface.php delete mode 100644 vendor/symfony/mime/Encoder/EightBitContentEncoder.php delete mode 100644 vendor/symfony/mime/Encoder/EncoderInterface.php delete mode 100644 vendor/symfony/mime/Encoder/IdnAddressEncoder.php delete mode 100644 vendor/symfony/mime/Encoder/MimeHeaderEncoderInterface.php delete mode 100644 vendor/symfony/mime/Encoder/QpContentEncoder.php delete mode 100644 vendor/symfony/mime/Encoder/QpEncoder.php delete mode 100644 vendor/symfony/mime/Encoder/QpMimeHeaderEncoder.php delete mode 100644 vendor/symfony/mime/Encoder/Rfc2231Encoder.php delete mode 100644 vendor/symfony/mime/Exception/AddressEncoderException.php delete mode 100644 vendor/symfony/mime/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/mime/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/mime/Exception/LogicException.php delete mode 100644 vendor/symfony/mime/Exception/RfcComplianceException.php delete mode 100644 vendor/symfony/mime/Exception/RuntimeException.php delete mode 100644 vendor/symfony/mime/FileBinaryMimeTypeGuesser.php delete mode 100644 vendor/symfony/mime/FileinfoMimeTypeGuesser.php delete mode 100644 vendor/symfony/mime/Header/AbstractHeader.php delete mode 100644 vendor/symfony/mime/Header/DateHeader.php delete mode 100644 vendor/symfony/mime/Header/HeaderInterface.php delete mode 100644 vendor/symfony/mime/Header/Headers.php delete mode 100644 vendor/symfony/mime/Header/IdentificationHeader.php delete mode 100644 vendor/symfony/mime/Header/MailboxHeader.php delete mode 100644 vendor/symfony/mime/Header/MailboxListHeader.php delete mode 100644 vendor/symfony/mime/Header/ParameterizedHeader.php delete mode 100644 vendor/symfony/mime/Header/PathHeader.php delete mode 100644 vendor/symfony/mime/Header/UnstructuredHeader.php delete mode 100644 vendor/symfony/mime/HtmlToTextConverter/DefaultHtmlToTextConverter.php delete mode 100644 vendor/symfony/mime/HtmlToTextConverter/HtmlToTextConverterInterface.php delete mode 100644 vendor/symfony/mime/HtmlToTextConverter/LeagueHtmlToMarkdownConverter.php delete mode 100644 vendor/symfony/mime/Message.php delete mode 100644 vendor/symfony/mime/MessageConverter.php delete mode 100644 vendor/symfony/mime/MimeTypeGuesserInterface.php delete mode 100644 vendor/symfony/mime/MimeTypes.php delete mode 100644 vendor/symfony/mime/MimeTypesInterface.php delete mode 100644 vendor/symfony/mime/Part/AbstractMultipartPart.php delete mode 100644 vendor/symfony/mime/Part/AbstractPart.php delete mode 100644 vendor/symfony/mime/Part/DataPart.php delete mode 100644 vendor/symfony/mime/Part/File.php delete mode 100644 vendor/symfony/mime/Part/MessagePart.php delete mode 100644 vendor/symfony/mime/Part/Multipart/AlternativePart.php delete mode 100644 vendor/symfony/mime/Part/Multipart/DigestPart.php delete mode 100644 vendor/symfony/mime/Part/Multipart/FormDataPart.php delete mode 100644 vendor/symfony/mime/Part/Multipart/MixedPart.php delete mode 100644 vendor/symfony/mime/Part/Multipart/RelatedPart.php delete mode 100644 vendor/symfony/mime/Part/SMimePart.php delete mode 100644 vendor/symfony/mime/Part/TextPart.php delete mode 100644 vendor/symfony/mime/README.md delete mode 100644 vendor/symfony/mime/RawMessage.php delete mode 100644 vendor/symfony/mime/Test/Constraint/EmailAddressContains.php delete mode 100644 vendor/symfony/mime/Test/Constraint/EmailAttachmentCount.php delete mode 100644 vendor/symfony/mime/Test/Constraint/EmailHasHeader.php delete mode 100644 vendor/symfony/mime/Test/Constraint/EmailHeaderSame.php delete mode 100644 vendor/symfony/mime/Test/Constraint/EmailHtmlBodyContains.php delete mode 100644 vendor/symfony/mime/Test/Constraint/EmailSubjectContains.php delete mode 100644 vendor/symfony/mime/Test/Constraint/EmailTextBodyContains.php delete mode 100644 vendor/symfony/mime/composer.json delete mode 100644 vendor/symfony/monolog-bridge/CHANGELOG.md delete mode 100644 vendor/symfony/monolog-bridge/Command/ServerLogCommand.php delete mode 100644 vendor/symfony/monolog-bridge/Formatter/ConsoleFormatter.php delete mode 100644 vendor/symfony/monolog-bridge/Formatter/VarDumperFormatter.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/ChromePhpHandler.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/ConsoleHandler.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/ElasticsearchLogstashHandler.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/FingersCrossed/HttpCodeActivationStrategy.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/FingersCrossed/NotFoundActivationStrategy.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/FirePHPHandler.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/MailerHandler.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/NotifierHandler.php delete mode 100644 vendor/symfony/monolog-bridge/Handler/ServerLogHandler.php delete mode 100644 vendor/symfony/monolog-bridge/Processor/AbstractTokenProcessor.php delete mode 100644 vendor/symfony/monolog-bridge/Processor/ConsoleCommandProcessor.php delete mode 100644 vendor/symfony/monolog-bridge/Processor/DebugProcessor.php delete mode 100644 vendor/symfony/monolog-bridge/Processor/RouteProcessor.php delete mode 100644 vendor/symfony/monolog-bridge/Processor/SwitchUserTokenProcessor.php delete mode 100644 vendor/symfony/monolog-bridge/Processor/TokenProcessor.php delete mode 100644 vendor/symfony/monolog-bridge/Processor/WebProcessor.php delete mode 100644 vendor/symfony/monolog-bridge/README.md delete mode 100644 vendor/symfony/monolog-bridge/composer.json delete mode 100644 vendor/symfony/monolog-bundle/CHANGELOG.md delete mode 100644 vendor/symfony/monolog-bundle/DependencyInjection/Compiler/AddProcessorsPass.php delete mode 100644 vendor/symfony/monolog-bundle/DependencyInjection/Compiler/AddSwiftMailerTransportPass.php delete mode 100644 vendor/symfony/monolog-bundle/DependencyInjection/Compiler/DebugHandlerPass.php delete mode 100644 vendor/symfony/monolog-bundle/DependencyInjection/Compiler/FixEmptyLoggerPass.php delete mode 100644 vendor/symfony/monolog-bundle/DependencyInjection/Compiler/LoggerChannelPass.php delete mode 100644 vendor/symfony/monolog-bundle/DependencyInjection/Configuration.php delete mode 100644 vendor/symfony/monolog-bundle/DependencyInjection/MonologExtension.php delete mode 100644 vendor/symfony/monolog-bundle/MonologBundle.php delete mode 100644 vendor/symfony/monolog-bundle/README.md delete mode 100644 vendor/symfony/monolog-bundle/Resources/config/monolog.xml delete mode 100644 vendor/symfony/monolog-bundle/Resources/config/schema/monolog-1.0.xsd delete mode 100644 vendor/symfony/monolog-bundle/SwiftMailer/MessageFactory.php delete mode 100644 vendor/symfony/monolog-bundle/composer.json delete mode 100644 vendor/symfony/notifier/CHANGELOG.md delete mode 100644 vendor/symfony/notifier/Channel/AbstractChannel.php delete mode 100644 vendor/symfony/notifier/Channel/BrowserChannel.php delete mode 100644 vendor/symfony/notifier/Channel/ChannelInterface.php delete mode 100644 vendor/symfony/notifier/Channel/ChannelPolicy.php delete mode 100644 vendor/symfony/notifier/Channel/ChannelPolicyInterface.php delete mode 100644 vendor/symfony/notifier/Channel/ChatChannel.php delete mode 100644 vendor/symfony/notifier/Channel/EmailChannel.php delete mode 100644 vendor/symfony/notifier/Channel/PushChannel.php delete mode 100644 vendor/symfony/notifier/Channel/SmsChannel.php delete mode 100644 vendor/symfony/notifier/Chatter.php delete mode 100644 vendor/symfony/notifier/ChatterInterface.php delete mode 100644 vendor/symfony/notifier/DataCollector/NotificationDataCollector.php delete mode 100644 vendor/symfony/notifier/Event/FailedMessageEvent.php delete mode 100644 vendor/symfony/notifier/Event/MessageEvent.php delete mode 100644 vendor/symfony/notifier/Event/NotificationEvents.php delete mode 100644 vendor/symfony/notifier/Event/SentMessageEvent.php delete mode 100644 vendor/symfony/notifier/EventListener/NotificationLoggerListener.php delete mode 100644 vendor/symfony/notifier/EventListener/SendFailedMessageToNotifierListener.php delete mode 100644 vendor/symfony/notifier/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/notifier/Exception/FlashMessageImportanceMapperException.php delete mode 100644 vendor/symfony/notifier/Exception/IncompleteDsnException.php delete mode 100644 vendor/symfony/notifier/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/notifier/Exception/LengthException.php delete mode 100644 vendor/symfony/notifier/Exception/LogicException.php delete mode 100644 vendor/symfony/notifier/Exception/MissingRequiredOptionException.php delete mode 100644 vendor/symfony/notifier/Exception/MultipleExclusiveOptionsUsedException.php delete mode 100644 vendor/symfony/notifier/Exception/RuntimeException.php delete mode 100644 vendor/symfony/notifier/Exception/TransportException.php delete mode 100644 vendor/symfony/notifier/Exception/TransportExceptionInterface.php delete mode 100644 vendor/symfony/notifier/Exception/UnsupportedMessageTypeException.php delete mode 100644 vendor/symfony/notifier/Exception/UnsupportedSchemeException.php delete mode 100644 vendor/symfony/notifier/FlashMessage/AbstractFlashMessageImportanceMapper.php delete mode 100644 vendor/symfony/notifier/FlashMessage/BootstrapFlashMessageImportanceMapper.php delete mode 100644 vendor/symfony/notifier/FlashMessage/DefaultFlashMessageImportanceMapper.php delete mode 100644 vendor/symfony/notifier/FlashMessage/FlashMessageImportanceMapperInterface.php delete mode 100644 vendor/symfony/notifier/Message/ChatMessage.php delete mode 100644 vendor/symfony/notifier/Message/EmailMessage.php delete mode 100644 vendor/symfony/notifier/Message/FromNotificationInterface.php delete mode 100644 vendor/symfony/notifier/Message/MessageInterface.php delete mode 100644 vendor/symfony/notifier/Message/MessageOptionsInterface.php delete mode 100644 vendor/symfony/notifier/Message/NullMessage.php delete mode 100644 vendor/symfony/notifier/Message/PushMessage.php delete mode 100644 vendor/symfony/notifier/Message/SentMessage.php delete mode 100644 vendor/symfony/notifier/Message/SmsMessage.php delete mode 100644 vendor/symfony/notifier/Messenger/MessageHandler.php delete mode 100644 vendor/symfony/notifier/Notification/ChatNotificationInterface.php delete mode 100644 vendor/symfony/notifier/Notification/EmailNotificationInterface.php delete mode 100644 vendor/symfony/notifier/Notification/Notification.php delete mode 100644 vendor/symfony/notifier/Notification/PushNotificationInterface.php delete mode 100644 vendor/symfony/notifier/Notification/SmsNotificationInterface.php delete mode 100644 vendor/symfony/notifier/Notifier.php delete mode 100644 vendor/symfony/notifier/NotifierInterface.php delete mode 100644 vendor/symfony/notifier/README.md delete mode 100644 vendor/symfony/notifier/Recipient/EmailRecipientInterface.php delete mode 100644 vendor/symfony/notifier/Recipient/EmailRecipientTrait.php delete mode 100644 vendor/symfony/notifier/Recipient/NoRecipient.php delete mode 100644 vendor/symfony/notifier/Recipient/Recipient.php delete mode 100644 vendor/symfony/notifier/Recipient/RecipientInterface.php delete mode 100644 vendor/symfony/notifier/Recipient/SmsRecipientInterface.php delete mode 100644 vendor/symfony/notifier/Recipient/SmsRecipientTrait.php delete mode 100644 vendor/symfony/notifier/Test/Constraint/NotificationCount.php delete mode 100644 vendor/symfony/notifier/Test/Constraint/NotificationIsQueued.php delete mode 100644 vendor/symfony/notifier/Test/Constraint/NotificationSubjectContains.php delete mode 100644 vendor/symfony/notifier/Test/Constraint/NotificationTransportIsEqual.php delete mode 100644 vendor/symfony/notifier/Test/TransportFactoryTestCase.php delete mode 100644 vendor/symfony/notifier/Test/TransportTestCase.php delete mode 100644 vendor/symfony/notifier/Texter.php delete mode 100644 vendor/symfony/notifier/TexterInterface.php delete mode 100644 vendor/symfony/notifier/Transport.php delete mode 100644 vendor/symfony/notifier/Transport/AbstractTransport.php delete mode 100644 vendor/symfony/notifier/Transport/AbstractTransportFactory.php delete mode 100644 vendor/symfony/notifier/Transport/Dsn.php delete mode 100644 vendor/symfony/notifier/Transport/FailoverTransport.php delete mode 100644 vendor/symfony/notifier/Transport/NullTransport.php delete mode 100644 vendor/symfony/notifier/Transport/NullTransportFactory.php delete mode 100644 vendor/symfony/notifier/Transport/RoundRobinTransport.php delete mode 100644 vendor/symfony/notifier/Transport/TransportFactoryInterface.php delete mode 100644 vendor/symfony/notifier/Transport/TransportInterface.php delete mode 100644 vendor/symfony/notifier/Transport/Transports.php delete mode 100644 vendor/symfony/notifier/composer.json delete mode 100644 vendor/symfony/options-resolver/CHANGELOG.md delete mode 100644 vendor/symfony/options-resolver/Debug/OptionsResolverIntrospector.php delete mode 100644 vendor/symfony/options-resolver/Exception/AccessException.php delete mode 100644 vendor/symfony/options-resolver/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/options-resolver/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/options-resolver/Exception/InvalidOptionsException.php delete mode 100644 vendor/symfony/options-resolver/Exception/MissingOptionsException.php delete mode 100644 vendor/symfony/options-resolver/Exception/NoConfigurationException.php delete mode 100644 vendor/symfony/options-resolver/Exception/NoSuchOptionException.php delete mode 100644 vendor/symfony/options-resolver/Exception/OptionDefinitionException.php delete mode 100644 vendor/symfony/options-resolver/Exception/UndefinedOptionsException.php delete mode 100644 vendor/symfony/options-resolver/OptionConfigurator.php delete mode 100644 vendor/symfony/options-resolver/Options.php delete mode 100644 vendor/symfony/options-resolver/OptionsResolver.php delete mode 100644 vendor/symfony/options-resolver/README.md delete mode 100644 vendor/symfony/options-resolver/composer.json delete mode 100644 vendor/symfony/password-hasher/CHANGELOG.md delete mode 100644 vendor/symfony/password-hasher/Command/UserPasswordHashCommand.php delete mode 100644 vendor/symfony/password-hasher/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/password-hasher/Exception/InvalidPasswordException.php delete mode 100644 vendor/symfony/password-hasher/Exception/LogicException.php delete mode 100644 vendor/symfony/password-hasher/Hasher/CheckPasswordLengthTrait.php delete mode 100644 vendor/symfony/password-hasher/Hasher/MessageDigestPasswordHasher.php delete mode 100644 vendor/symfony/password-hasher/Hasher/MigratingPasswordHasher.php delete mode 100644 vendor/symfony/password-hasher/Hasher/NativePasswordHasher.php delete mode 100644 vendor/symfony/password-hasher/Hasher/PasswordHasherAwareInterface.php delete mode 100644 vendor/symfony/password-hasher/Hasher/PasswordHasherFactory.php delete mode 100644 vendor/symfony/password-hasher/Hasher/PasswordHasherFactoryInterface.php delete mode 100644 vendor/symfony/password-hasher/Hasher/Pbkdf2PasswordHasher.php delete mode 100644 vendor/symfony/password-hasher/Hasher/PlaintextPasswordHasher.php delete mode 100644 vendor/symfony/password-hasher/Hasher/SodiumPasswordHasher.php delete mode 100644 vendor/symfony/password-hasher/Hasher/UserPasswordHasher.php delete mode 100644 vendor/symfony/password-hasher/Hasher/UserPasswordHasherInterface.php delete mode 100644 vendor/symfony/password-hasher/LegacyPasswordHasherInterface.php delete mode 100644 vendor/symfony/password-hasher/PasswordHasherInterface.php delete mode 100644 vendor/symfony/password-hasher/README.md delete mode 100644 vendor/symfony/password-hasher/composer.json delete mode 100644 vendor/symfony/phpunit-bridge/CHANGELOG.md delete mode 100644 vendor/symfony/phpunit-bridge/ClassExistsMock.php delete mode 100644 vendor/symfony/phpunit-bridge/ClockMock.php delete mode 100644 vendor/symfony/phpunit-bridge/ConstraintTrait.php delete mode 100644 vendor/symfony/phpunit-bridge/CoverageListener.php delete mode 100644 vendor/symfony/phpunit-bridge/DeprecationErrorHandler.php delete mode 100644 vendor/symfony/phpunit-bridge/DeprecationErrorHandler/Configuration.php delete mode 100644 vendor/symfony/phpunit-bridge/DeprecationErrorHandler/Deprecation.php delete mode 100644 vendor/symfony/phpunit-bridge/DeprecationErrorHandler/DeprecationGroup.php delete mode 100644 vendor/symfony/phpunit-bridge/DeprecationErrorHandler/DeprecationNotice.php delete mode 100644 vendor/symfony/phpunit-bridge/DnsMock.php delete mode 100644 vendor/symfony/phpunit-bridge/ExpectDeprecationTrait.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/CommandForV7.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/CommandForV9.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/ConstraintLogicTrait.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/ConstraintTraitForV7.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/ConstraintTraitForV8.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/ConstraintTraitForV9.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/ExpectDeprecationTraitBeforeV8_4.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/ExpectDeprecationTraitForV8_4.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/PolyfillAssertTrait.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/PolyfillTestCaseTrait.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/SymfonyTestsListenerForV7.php delete mode 100644 vendor/symfony/phpunit-bridge/Legacy/SymfonyTestsListenerTrait.php delete mode 100644 vendor/symfony/phpunit-bridge/README.md delete mode 100644 vendor/symfony/phpunit-bridge/SymfonyTestsListener.php delete mode 100644 vendor/symfony/phpunit-bridge/TextUI/Command.php delete mode 100644 vendor/symfony/phpunit-bridge/bin/simple-phpunit.php delete mode 100644 vendor/symfony/phpunit-bridge/bootstrap.php delete mode 100644 vendor/symfony/phpunit-bridge/composer.json delete mode 100644 vendor/symfony/polyfill-intl-grapheme/Grapheme.php delete mode 100644 vendor/symfony/polyfill-intl-grapheme/README.md delete mode 100644 vendor/symfony/polyfill-intl-grapheme/bootstrap.php delete mode 100644 vendor/symfony/polyfill-intl-grapheme/bootstrap80.php delete mode 100644 vendor/symfony/polyfill-intl-grapheme/composer.json delete mode 100644 vendor/symfony/polyfill-intl-icu/Collator.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Currencies.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/AmPmTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/DayOfWeekTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/DayOfYearTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/DayTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/FullTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/Hour1200Transformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/Hour1201Transformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/Hour2400Transformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/Hour2401Transformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/HourTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/MinuteTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/MonthTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/QuarterTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/SecondTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/TimezoneTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/Transformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/DateFormat/YearTransformer.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Exception/MethodArgumentNotImplementedException.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Exception/MethodArgumentValueNotImplementedException.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Exception/MethodNotImplementedException.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Exception/NotImplementedException.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Exception/RuntimeException.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Icu.php delete mode 100644 vendor/symfony/polyfill-intl-icu/IntlDateFormatter.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Locale.php delete mode 100644 vendor/symfony/polyfill-intl-icu/NumberFormatter.php delete mode 100644 vendor/symfony/polyfill-intl-icu/README.md delete mode 100644 vendor/symfony/polyfill-intl-icu/Resources/currencies.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Resources/stubs/Collator.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Resources/stubs/IntlDateFormatter.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Resources/stubs/Locale.php delete mode 100644 vendor/symfony/polyfill-intl-icu/Resources/stubs/NumberFormatter.php delete mode 100644 vendor/symfony/polyfill-intl-icu/bootstrap.php delete mode 100644 vendor/symfony/polyfill-intl-icu/bootstrap80.php delete mode 100644 vendor/symfony/polyfill-intl-icu/composer.json delete mode 100644 vendor/symfony/polyfill-intl-idn/Idn.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Info.php delete mode 100644 vendor/symfony/polyfill-intl-idn/README.md delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/DisallowedRanges.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/Regex.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/deviation.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_mapped.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/disallowed_STD3_valid.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/ignored.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/mapped.php delete mode 100644 vendor/symfony/polyfill-intl-idn/Resources/unidata/virama.php delete mode 100644 vendor/symfony/polyfill-intl-idn/bootstrap.php delete mode 100644 vendor/symfony/polyfill-intl-idn/bootstrap80.php delete mode 100644 vendor/symfony/polyfill-intl-idn/composer.json delete mode 100644 vendor/symfony/polyfill-intl-normalizer/Normalizer.php delete mode 100644 vendor/symfony/polyfill-intl-normalizer/README.md delete mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php delete mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalComposition.php delete mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/canonicalDecomposition.php delete mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/combiningClass.php delete mode 100644 vendor/symfony/polyfill-intl-normalizer/Resources/unidata/compatibilityDecomposition.php delete mode 100644 vendor/symfony/polyfill-intl-normalizer/bootstrap.php delete mode 100644 vendor/symfony/polyfill-intl-normalizer/bootstrap80.php delete mode 100644 vendor/symfony/polyfill-intl-normalizer/composer.json delete mode 100644 vendor/symfony/polyfill-mbstring/Mbstring.php delete mode 100644 vendor/symfony/polyfill-mbstring/README.md delete mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php delete mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php delete mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php delete mode 100644 vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php delete mode 100644 vendor/symfony/polyfill-mbstring/bootstrap.php delete mode 100644 vendor/symfony/polyfill-mbstring/bootstrap80.php delete mode 100644 vendor/symfony/polyfill-mbstring/composer.json delete mode 100644 vendor/symfony/polyfill-php83/Php83.php delete mode 100644 vendor/symfony/polyfill-php83/README.md delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateError.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateException.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateObjectError.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/DateRangeError.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/Override.php delete mode 100644 vendor/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php delete mode 100644 vendor/symfony/polyfill-php83/bootstrap.php delete mode 100644 vendor/symfony/polyfill-php83/bootstrap81.php delete mode 100644 vendor/symfony/polyfill-php83/composer.json delete mode 100644 vendor/symfony/process/CHANGELOG.md delete mode 100644 vendor/symfony/process/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/process/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/process/Exception/LogicException.php delete mode 100644 vendor/symfony/process/Exception/ProcessFailedException.php delete mode 100644 vendor/symfony/process/Exception/ProcessSignaledException.php delete mode 100644 vendor/symfony/process/Exception/ProcessStartFailedException.php delete mode 100644 vendor/symfony/process/Exception/ProcessTimedOutException.php delete mode 100644 vendor/symfony/process/Exception/RunProcessFailedException.php delete mode 100644 vendor/symfony/process/Exception/RuntimeException.php delete mode 100644 vendor/symfony/process/ExecutableFinder.php delete mode 100644 vendor/symfony/process/InputStream.php delete mode 100644 vendor/symfony/process/Messenger/RunProcessContext.php delete mode 100644 vendor/symfony/process/Messenger/RunProcessMessage.php delete mode 100644 vendor/symfony/process/Messenger/RunProcessMessageHandler.php delete mode 100644 vendor/symfony/process/PhpExecutableFinder.php delete mode 100644 vendor/symfony/process/PhpProcess.php delete mode 100644 vendor/symfony/process/PhpSubprocess.php delete mode 100644 vendor/symfony/process/Pipes/AbstractPipes.php delete mode 100644 vendor/symfony/process/Pipes/PipesInterface.php delete mode 100644 vendor/symfony/process/Pipes/UnixPipes.php delete mode 100644 vendor/symfony/process/Pipes/WindowsPipes.php delete mode 100644 vendor/symfony/process/Process.php delete mode 100644 vendor/symfony/process/ProcessUtils.php delete mode 100644 vendor/symfony/process/README.md delete mode 100644 vendor/symfony/process/composer.json delete mode 100644 vendor/symfony/property-access/CHANGELOG.md delete mode 100644 vendor/symfony/property-access/Exception/AccessException.php delete mode 100644 vendor/symfony/property-access/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/property-access/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/property-access/Exception/InvalidPropertyPathException.php delete mode 100644 vendor/symfony/property-access/Exception/InvalidTypeException.php delete mode 100644 vendor/symfony/property-access/Exception/NoSuchIndexException.php delete mode 100644 vendor/symfony/property-access/Exception/NoSuchPropertyException.php delete mode 100644 vendor/symfony/property-access/Exception/OutOfBoundsException.php delete mode 100644 vendor/symfony/property-access/Exception/RuntimeException.php delete mode 100644 vendor/symfony/property-access/Exception/UnexpectedTypeException.php delete mode 100644 vendor/symfony/property-access/Exception/UninitializedPropertyException.php delete mode 100644 vendor/symfony/property-access/PropertyAccess.php delete mode 100644 vendor/symfony/property-access/PropertyAccessor.php delete mode 100644 vendor/symfony/property-access/PropertyAccessorBuilder.php delete mode 100644 vendor/symfony/property-access/PropertyAccessorInterface.php delete mode 100644 vendor/symfony/property-access/PropertyPath.php delete mode 100644 vendor/symfony/property-access/PropertyPathBuilder.php delete mode 100644 vendor/symfony/property-access/PropertyPathInterface.php delete mode 100644 vendor/symfony/property-access/PropertyPathIterator.php delete mode 100644 vendor/symfony/property-access/PropertyPathIteratorInterface.php delete mode 100644 vendor/symfony/property-access/README.md delete mode 100644 vendor/symfony/property-access/composer.json delete mode 100644 vendor/symfony/property-info/CHANGELOG.md delete mode 100644 vendor/symfony/property-info/DependencyInjection/PropertyInfoConstructorPass.php delete mode 100644 vendor/symfony/property-info/DependencyInjection/PropertyInfoPass.php delete mode 100644 vendor/symfony/property-info/Extractor/ConstructorArgumentTypeExtractorInterface.php delete mode 100644 vendor/symfony/property-info/Extractor/ConstructorExtractor.php delete mode 100644 vendor/symfony/property-info/Extractor/PhpDocExtractor.php delete mode 100644 vendor/symfony/property-info/Extractor/PhpStanExtractor.php delete mode 100644 vendor/symfony/property-info/Extractor/ReflectionExtractor.php delete mode 100644 vendor/symfony/property-info/Extractor/SerializerExtractor.php delete mode 100644 vendor/symfony/property-info/PhpStan/NameScope.php delete mode 100644 vendor/symfony/property-info/PhpStan/NameScopeFactory.php delete mode 100644 vendor/symfony/property-info/PropertyAccessExtractorInterface.php delete mode 100644 vendor/symfony/property-info/PropertyDescriptionExtractorInterface.php delete mode 100644 vendor/symfony/property-info/PropertyDocBlockExtractorInterface.php delete mode 100644 vendor/symfony/property-info/PropertyInfoCacheExtractor.php delete mode 100644 vendor/symfony/property-info/PropertyInfoExtractor.php delete mode 100644 vendor/symfony/property-info/PropertyInfoExtractorInterface.php delete mode 100644 vendor/symfony/property-info/PropertyInitializableExtractorInterface.php delete mode 100644 vendor/symfony/property-info/PropertyListExtractorInterface.php delete mode 100644 vendor/symfony/property-info/PropertyReadInfo.php delete mode 100644 vendor/symfony/property-info/PropertyReadInfoExtractorInterface.php delete mode 100644 vendor/symfony/property-info/PropertyTypeExtractorInterface.php delete mode 100644 vendor/symfony/property-info/PropertyWriteInfo.php delete mode 100644 vendor/symfony/property-info/PropertyWriteInfoExtractorInterface.php delete mode 100644 vendor/symfony/property-info/README.md delete mode 100644 vendor/symfony/property-info/Type.php delete mode 100644 vendor/symfony/property-info/Util/PhpDocTypeHelper.php delete mode 100644 vendor/symfony/property-info/Util/PhpStanTypeHelper.php delete mode 100644 vendor/symfony/property-info/composer.json delete mode 100644 vendor/symfony/routing/Alias.php delete mode 100644 vendor/symfony/routing/Annotation/Route.php delete mode 100644 vendor/symfony/routing/Attribute/Route.php delete mode 100644 vendor/symfony/routing/CHANGELOG.md delete mode 100644 vendor/symfony/routing/CompiledRoute.php delete mode 100644 vendor/symfony/routing/DependencyInjection/AddExpressionLanguageProvidersPass.php delete mode 100644 vendor/symfony/routing/DependencyInjection/RoutingResolverPass.php delete mode 100644 vendor/symfony/routing/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/routing/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/routing/Exception/InvalidParameterException.php delete mode 100644 vendor/symfony/routing/Exception/LogicException.php delete mode 100644 vendor/symfony/routing/Exception/MethodNotAllowedException.php delete mode 100644 vendor/symfony/routing/Exception/MissingMandatoryParametersException.php delete mode 100644 vendor/symfony/routing/Exception/NoConfigurationException.php delete mode 100644 vendor/symfony/routing/Exception/ResourceNotFoundException.php delete mode 100644 vendor/symfony/routing/Exception/RouteCircularReferenceException.php delete mode 100644 vendor/symfony/routing/Exception/RouteNotFoundException.php delete mode 100644 vendor/symfony/routing/Exception/RuntimeException.php delete mode 100644 vendor/symfony/routing/Generator/CompiledUrlGenerator.php delete mode 100644 vendor/symfony/routing/Generator/ConfigurableRequirementsInterface.php delete mode 100644 vendor/symfony/routing/Generator/Dumper/CompiledUrlGeneratorDumper.php delete mode 100644 vendor/symfony/routing/Generator/Dumper/GeneratorDumper.php delete mode 100644 vendor/symfony/routing/Generator/Dumper/GeneratorDumperInterface.php delete mode 100644 vendor/symfony/routing/Generator/UrlGenerator.php delete mode 100644 vendor/symfony/routing/Generator/UrlGeneratorInterface.php delete mode 100644 vendor/symfony/routing/Loader/AttributeClassLoader.php delete mode 100644 vendor/symfony/routing/Loader/AttributeDirectoryLoader.php delete mode 100644 vendor/symfony/routing/Loader/AttributeFileLoader.php delete mode 100644 vendor/symfony/routing/Loader/ClosureLoader.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/AliasConfigurator.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/CollectionConfigurator.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/ImportConfigurator.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/RouteConfigurator.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/RoutingConfigurator.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/Traits/AddTrait.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/Traits/HostTrait.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/Traits/LocalizedRouteTrait.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/Traits/PrefixTrait.php delete mode 100644 vendor/symfony/routing/Loader/Configurator/Traits/RouteTrait.php delete mode 100644 vendor/symfony/routing/Loader/ContainerLoader.php delete mode 100644 vendor/symfony/routing/Loader/DirectoryLoader.php delete mode 100644 vendor/symfony/routing/Loader/GlobFileLoader.php delete mode 100644 vendor/symfony/routing/Loader/ObjectLoader.php delete mode 100644 vendor/symfony/routing/Loader/PhpFileLoader.php delete mode 100644 vendor/symfony/routing/Loader/Psr4DirectoryLoader.php delete mode 100644 vendor/symfony/routing/Loader/XmlFileLoader.php delete mode 100644 vendor/symfony/routing/Loader/YamlFileLoader.php delete mode 100644 vendor/symfony/routing/Loader/schema/routing/routing-1.0.xsd delete mode 100644 vendor/symfony/routing/Matcher/CompiledUrlMatcher.php delete mode 100644 vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherDumper.php delete mode 100644 vendor/symfony/routing/Matcher/Dumper/CompiledUrlMatcherTrait.php delete mode 100644 vendor/symfony/routing/Matcher/Dumper/MatcherDumper.php delete mode 100644 vendor/symfony/routing/Matcher/Dumper/MatcherDumperInterface.php delete mode 100644 vendor/symfony/routing/Matcher/Dumper/StaticPrefixCollection.php delete mode 100644 vendor/symfony/routing/Matcher/ExpressionLanguageProvider.php delete mode 100644 vendor/symfony/routing/Matcher/RedirectableUrlMatcher.php delete mode 100644 vendor/symfony/routing/Matcher/RedirectableUrlMatcherInterface.php delete mode 100644 vendor/symfony/routing/Matcher/RequestMatcherInterface.php delete mode 100644 vendor/symfony/routing/Matcher/TraceableUrlMatcher.php delete mode 100644 vendor/symfony/routing/Matcher/UrlMatcher.php delete mode 100644 vendor/symfony/routing/Matcher/UrlMatcherInterface.php delete mode 100644 vendor/symfony/routing/README.md delete mode 100644 vendor/symfony/routing/RequestContext.php delete mode 100644 vendor/symfony/routing/RequestContextAwareInterface.php delete mode 100644 vendor/symfony/routing/Requirement/EnumRequirement.php delete mode 100644 vendor/symfony/routing/Requirement/Requirement.php delete mode 100644 vendor/symfony/routing/Route.php delete mode 100644 vendor/symfony/routing/RouteCollection.php delete mode 100644 vendor/symfony/routing/RouteCompiler.php delete mode 100644 vendor/symfony/routing/RouteCompilerInterface.php delete mode 100644 vendor/symfony/routing/Router.php delete mode 100644 vendor/symfony/routing/RouterInterface.php delete mode 100644 vendor/symfony/routing/composer.json delete mode 100644 vendor/symfony/runtime/CHANGELOG.md delete mode 100644 vendor/symfony/runtime/GenericRuntime.php delete mode 100644 vendor/symfony/runtime/Internal/BasicErrorHandler.php delete mode 100644 vendor/symfony/runtime/Internal/ComposerPlugin.php delete mode 100644 vendor/symfony/runtime/Internal/Console/ApplicationRuntime.php delete mode 100644 vendor/symfony/runtime/Internal/Console/Command/CommandRuntime.php delete mode 100644 vendor/symfony/runtime/Internal/Console/Input/InputInterfaceRuntime.php delete mode 100644 vendor/symfony/runtime/Internal/Console/Output/OutputInterfaceRuntime.php delete mode 100644 vendor/symfony/runtime/Internal/HttpFoundation/RequestRuntime.php delete mode 100644 vendor/symfony/runtime/Internal/HttpFoundation/ResponseRuntime.php delete mode 100644 vendor/symfony/runtime/Internal/HttpKernel/HttpKernelInterfaceRuntime.php delete mode 100644 vendor/symfony/runtime/Internal/MissingDotenv.php delete mode 100644 vendor/symfony/runtime/Internal/SymfonyErrorHandler.php delete mode 100644 vendor/symfony/runtime/Internal/autoload_runtime.template delete mode 100644 vendor/symfony/runtime/README.md delete mode 100644 vendor/symfony/runtime/Resolver/ClosureResolver.php delete mode 100644 vendor/symfony/runtime/Resolver/DebugClosureResolver.php delete mode 100644 vendor/symfony/runtime/ResolverInterface.php delete mode 100644 vendor/symfony/runtime/Runner/ClosureRunner.php delete mode 100644 vendor/symfony/runtime/Runner/Symfony/ConsoleApplicationRunner.php delete mode 100644 vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php delete mode 100644 vendor/symfony/runtime/Runner/Symfony/ResponseRunner.php delete mode 100644 vendor/symfony/runtime/RunnerInterface.php delete mode 100644 vendor/symfony/runtime/RuntimeInterface.php delete mode 100644 vendor/symfony/runtime/SymfonyRuntime.php delete mode 100644 vendor/symfony/runtime/composer.json delete mode 100644 vendor/symfony/security-bundle/CHANGELOG.md delete mode 100644 vendor/symfony/security-bundle/CacheWarmer/ExpressionCacheWarmer.php delete mode 100644 vendor/symfony/security-bundle/Command/DebugFirewallCommand.php delete mode 100644 vendor/symfony/security-bundle/DataCollector/SecurityDataCollector.php delete mode 100644 vendor/symfony/security-bundle/Debug/TraceableFirewallListener.php delete mode 100644 vendor/symfony/security-bundle/Debug/TraceableListenerTrait.php delete mode 100644 vendor/symfony/security-bundle/Debug/WrappedLazyListener.php delete mode 100644 vendor/symfony/security-bundle/Debug/WrappedListener.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/AddExpressionLanguageProvidersPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/AddSecurityVotersPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/AddSessionDomainConstraintPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/CleanRememberMeVerifierPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/MakeFirewallsEventDispatcherTraceablePass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/RegisterCsrfFeaturesPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/RegisterEntryPointPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/RegisterGlobalSecurityEventListenersPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/RegisterLdapLocatorPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/RegisterTokenUsageTrackingPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/ReplaceDecoratedRememberMeHandlerPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Compiler/SortFirewallListenersPass.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/MainConfiguration.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/AccessToken/CasTokenHandlerFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/AccessToken/OidcTokenHandlerFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/AccessToken/OidcUserInfoTokenHandlerFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/AccessToken/ServiceTokenHandlerFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/AccessToken/TokenHandlerFactoryInterface.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/AbstractFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/AccessTokenFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/AuthenticatorFactoryInterface.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/CustomAuthenticatorFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/FirewallListenerFactoryInterface.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/FormLoginFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/FormLoginLdapFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/HttpBasicFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/HttpBasicLdapFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/JsonLoginFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/JsonLoginLdapFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/LdapFactoryTrait.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/LoginLinkFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/LoginThrottlingFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/RememberMeFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/RemoteUserFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/StatelessAuthenticatorFactoryInterface.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/Factory/X509Factory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/UserProvider/InMemoryFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/UserProvider/LdapFactory.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/Security/UserProvider/UserProviderFactoryInterface.php delete mode 100644 vendor/symfony/security-bundle/DependencyInjection/SecurityExtension.php delete mode 100644 vendor/symfony/security-bundle/EventListener/FirewallListener.php delete mode 100644 vendor/symfony/security-bundle/EventListener/VoteListener.php delete mode 100644 vendor/symfony/security-bundle/LoginLink/FirewallAwareLoginLinkHandler.php delete mode 100644 vendor/symfony/security-bundle/README.md delete mode 100644 vendor/symfony/security-bundle/RememberMe/DecoratedRememberMeHandler.php delete mode 100644 vendor/symfony/security-bundle/RememberMe/FirewallAwareRememberMeHandler.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/collectors.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/console.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/debug_console.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/password_hasher.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/schema/security-1.0.xsd delete mode 100644 vendor/symfony/security-bundle/Resources/config/security.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/security_authenticator.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/security_authenticator_access_token.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/security_authenticator_login_link.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/security_authenticator_remember_me.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/security_debug.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/security_listeners.php delete mode 100644 vendor/symfony/security-bundle/Resources/config/templating_twig.php delete mode 100644 vendor/symfony/security-bundle/Resources/views/Collector/icon.svg delete mode 100644 vendor/symfony/security-bundle/Resources/views/Collector/security.html.twig delete mode 100644 vendor/symfony/security-bundle/Routing/LogoutRouteLoader.php delete mode 100644 vendor/symfony/security-bundle/Security.php delete mode 100644 vendor/symfony/security-bundle/Security/FirewallAwareTrait.php delete mode 100644 vendor/symfony/security-bundle/Security/FirewallConfig.php delete mode 100644 vendor/symfony/security-bundle/Security/FirewallContext.php delete mode 100644 vendor/symfony/security-bundle/Security/FirewallMap.php delete mode 100644 vendor/symfony/security-bundle/Security/LazyFirewallContext.php delete mode 100644 vendor/symfony/security-bundle/Security/UserAuthenticator.php delete mode 100644 vendor/symfony/security-bundle/SecurityBundle.php delete mode 100644 vendor/symfony/security-bundle/composer.json delete mode 100644 vendor/symfony/security-core/Authentication/AuthenticationTrustResolver.php delete mode 100644 vendor/symfony/security-core/Authentication/AuthenticationTrustResolverInterface.php delete mode 100644 vendor/symfony/security-core/Authentication/RememberMe/CacheTokenVerifier.php delete mode 100644 vendor/symfony/security-core/Authentication/RememberMe/InMemoryTokenProvider.php delete mode 100644 vendor/symfony/security-core/Authentication/RememberMe/PersistentToken.php delete mode 100644 vendor/symfony/security-core/Authentication/RememberMe/PersistentTokenInterface.php delete mode 100644 vendor/symfony/security-core/Authentication/RememberMe/TokenProviderInterface.php delete mode 100644 vendor/symfony/security-core/Authentication/RememberMe/TokenVerifierInterface.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/AbstractToken.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/NullToken.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/PreAuthenticatedToken.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/RememberMeToken.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/Storage/TokenStorage.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/Storage/TokenStorageInterface.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/Storage/UsageTrackingTokenStorage.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/SwitchUserToken.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/TokenInterface.php delete mode 100644 vendor/symfony/security-core/Authentication/Token/UsernamePasswordToken.php delete mode 100644 vendor/symfony/security-core/AuthenticationEvents.php delete mode 100644 vendor/symfony/security-core/Authorization/AccessDecisionManager.php delete mode 100644 vendor/symfony/security-core/Authorization/AccessDecisionManagerInterface.php delete mode 100644 vendor/symfony/security-core/Authorization/AuthorizationChecker.php delete mode 100644 vendor/symfony/security-core/Authorization/AuthorizationCheckerInterface.php delete mode 100644 vendor/symfony/security-core/Authorization/ExpressionLanguage.php delete mode 100644 vendor/symfony/security-core/Authorization/ExpressionLanguageProvider.php delete mode 100644 vendor/symfony/security-core/Authorization/Strategy/AccessDecisionStrategyInterface.php delete mode 100644 vendor/symfony/security-core/Authorization/Strategy/AffirmativeStrategy.php delete mode 100644 vendor/symfony/security-core/Authorization/Strategy/ConsensusStrategy.php delete mode 100644 vendor/symfony/security-core/Authorization/Strategy/PriorityStrategy.php delete mode 100644 vendor/symfony/security-core/Authorization/Strategy/UnanimousStrategy.php delete mode 100644 vendor/symfony/security-core/Authorization/TraceableAccessDecisionManager.php delete mode 100644 vendor/symfony/security-core/Authorization/Voter/AuthenticatedVoter.php delete mode 100644 vendor/symfony/security-core/Authorization/Voter/CacheableVoterInterface.php delete mode 100644 vendor/symfony/security-core/Authorization/Voter/ExpressionVoter.php delete mode 100644 vendor/symfony/security-core/Authorization/Voter/RoleHierarchyVoter.php delete mode 100644 vendor/symfony/security-core/Authorization/Voter/RoleVoter.php delete mode 100644 vendor/symfony/security-core/Authorization/Voter/TraceableVoter.php delete mode 100644 vendor/symfony/security-core/Authorization/Voter/Voter.php delete mode 100644 vendor/symfony/security-core/Authorization/Voter/VoterInterface.php delete mode 100644 vendor/symfony/security-core/CHANGELOG.md delete mode 100644 vendor/symfony/security-core/Event/AuthenticationEvent.php delete mode 100644 vendor/symfony/security-core/Event/AuthenticationSuccessEvent.php delete mode 100644 vendor/symfony/security-core/Event/VoteEvent.php delete mode 100644 vendor/symfony/security-core/Exception/AccessDeniedException.php delete mode 100644 vendor/symfony/security-core/Exception/AccountExpiredException.php delete mode 100644 vendor/symfony/security-core/Exception/AccountStatusException.php delete mode 100644 vendor/symfony/security-core/Exception/AuthenticationCredentialsNotFoundException.php delete mode 100644 vendor/symfony/security-core/Exception/AuthenticationException.php delete mode 100644 vendor/symfony/security-core/Exception/AuthenticationExpiredException.php delete mode 100644 vendor/symfony/security-core/Exception/AuthenticationServiceException.php delete mode 100644 vendor/symfony/security-core/Exception/BadCredentialsException.php delete mode 100644 vendor/symfony/security-core/Exception/CookieTheftException.php delete mode 100644 vendor/symfony/security-core/Exception/CredentialsExpiredException.php delete mode 100644 vendor/symfony/security-core/Exception/CustomUserMessageAccountStatusException.php delete mode 100644 vendor/symfony/security-core/Exception/CustomUserMessageAuthenticationException.php delete mode 100644 vendor/symfony/security-core/Exception/DisabledException.php delete mode 100644 vendor/symfony/security-core/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/security-core/Exception/InsufficientAuthenticationException.php delete mode 100644 vendor/symfony/security-core/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/security-core/Exception/InvalidCsrfTokenException.php delete mode 100644 vendor/symfony/security-core/Exception/LazyResponseException.php delete mode 100644 vendor/symfony/security-core/Exception/LockedException.php delete mode 100644 vendor/symfony/security-core/Exception/LogicException.php delete mode 100644 vendor/symfony/security-core/Exception/LogoutException.php delete mode 100644 vendor/symfony/security-core/Exception/ProviderNotFoundException.php delete mode 100644 vendor/symfony/security-core/Exception/RuntimeException.php delete mode 100644 vendor/symfony/security-core/Exception/SessionUnavailableException.php delete mode 100644 vendor/symfony/security-core/Exception/TokenNotFoundException.php delete mode 100644 vendor/symfony/security-core/Exception/TooManyLoginAttemptsAuthenticationException.php delete mode 100644 vendor/symfony/security-core/Exception/UnsupportedUserException.php delete mode 100644 vendor/symfony/security-core/Exception/UserNotFoundException.php delete mode 100644 vendor/symfony/security-core/README.md delete mode 100644 vendor/symfony/security-core/Resources/translations/security.af.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.ar.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.az.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.be.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.bg.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.bs.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.ca.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.cs.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.cy.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.da.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.de.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.el.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.en.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.es.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.et.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.eu.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.fa.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.fi.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.fr.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.gl.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.he.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.hr.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.hu.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.hy.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.id.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.it.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.ja.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.lb.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.lt.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.lv.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.mk.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.mn.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.my.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.nb.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.nl.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.nn.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.no.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.pl.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.pt.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.pt_BR.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.ro.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.ru.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.sk.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.sl.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.sq.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.sr_Cyrl.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.sr_Latn.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.sv.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.th.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.tl.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.tr.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.uk.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.ur.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.uz.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.vi.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.zh_CN.xlf delete mode 100644 vendor/symfony/security-core/Resources/translations/security.zh_TW.xlf delete mode 100644 vendor/symfony/security-core/Role/Role.php delete mode 100644 vendor/symfony/security-core/Role/RoleHierarchy.php delete mode 100644 vendor/symfony/security-core/Role/RoleHierarchyInterface.php delete mode 100644 vendor/symfony/security-core/Role/SwitchUserRole.php delete mode 100644 vendor/symfony/security-core/Signature/Exception/ExpiredSignatureException.php delete mode 100644 vendor/symfony/security-core/Signature/Exception/InvalidSignatureException.php delete mode 100644 vendor/symfony/security-core/Signature/ExpiredSignatureStorage.php delete mode 100644 vendor/symfony/security-core/Signature/SignatureHasher.php delete mode 100644 vendor/symfony/security-core/Test/AccessDecisionStrategyTestCase.php delete mode 100644 vendor/symfony/security-core/User/AttributesBasedUserProviderInterface.php delete mode 100644 vendor/symfony/security-core/User/ChainUserChecker.php delete mode 100644 vendor/symfony/security-core/User/ChainUserProvider.php delete mode 100644 vendor/symfony/security-core/User/EquatableInterface.php delete mode 100644 vendor/symfony/security-core/User/InMemoryUser.php delete mode 100644 vendor/symfony/security-core/User/InMemoryUserChecker.php delete mode 100644 vendor/symfony/security-core/User/InMemoryUserProvider.php delete mode 100644 vendor/symfony/security-core/User/LegacyPasswordAuthenticatedUserInterface.php delete mode 100644 vendor/symfony/security-core/User/MissingUserProvider.php delete mode 100644 vendor/symfony/security-core/User/OidcUser.php delete mode 100644 vendor/symfony/security-core/User/PasswordAuthenticatedUserInterface.php delete mode 100644 vendor/symfony/security-core/User/PasswordUpgraderInterface.php delete mode 100644 vendor/symfony/security-core/User/UserCheckerInterface.php delete mode 100644 vendor/symfony/security-core/User/UserInterface.php delete mode 100644 vendor/symfony/security-core/User/UserProviderInterface.php delete mode 100644 vendor/symfony/security-core/Validator/Constraints/UserPassword.php delete mode 100644 vendor/symfony/security-core/Validator/Constraints/UserPasswordValidator.php delete mode 100644 vendor/symfony/security-core/composer.json delete mode 100644 vendor/symfony/security-csrf/CHANGELOG.md delete mode 100644 vendor/symfony/security-csrf/CsrfToken.php delete mode 100644 vendor/symfony/security-csrf/CsrfTokenManager.php delete mode 100644 vendor/symfony/security-csrf/CsrfTokenManagerInterface.php delete mode 100644 vendor/symfony/security-csrf/Exception/TokenNotFoundException.php delete mode 100644 vendor/symfony/security-csrf/README.md delete mode 100644 vendor/symfony/security-csrf/TokenGenerator/TokenGeneratorInterface.php delete mode 100644 vendor/symfony/security-csrf/TokenGenerator/UriSafeTokenGenerator.php delete mode 100644 vendor/symfony/security-csrf/TokenStorage/ClearableTokenStorageInterface.php delete mode 100644 vendor/symfony/security-csrf/TokenStorage/NativeSessionTokenStorage.php delete mode 100644 vendor/symfony/security-csrf/TokenStorage/SessionTokenStorage.php delete mode 100644 vendor/symfony/security-csrf/TokenStorage/TokenStorageInterface.php delete mode 100644 vendor/symfony/security-csrf/composer.json delete mode 100644 vendor/symfony/security-http/AccessMap.php delete mode 100644 vendor/symfony/security-http/AccessMapInterface.php delete mode 100644 vendor/symfony/security-http/AccessToken/AccessTokenExtractorInterface.php delete mode 100644 vendor/symfony/security-http/AccessToken/AccessTokenHandlerInterface.php delete mode 100644 vendor/symfony/security-http/AccessToken/Cas/Cas2Handler.php delete mode 100644 vendor/symfony/security-http/AccessToken/ChainAccessTokenExtractor.php delete mode 100644 vendor/symfony/security-http/AccessToken/FormEncodedBodyExtractor.php delete mode 100644 vendor/symfony/security-http/AccessToken/HeaderAccessTokenExtractor.php delete mode 100644 vendor/symfony/security-http/AccessToken/Oidc/Exception/InvalidSignatureException.php delete mode 100644 vendor/symfony/security-http/AccessToken/Oidc/Exception/MissingClaimException.php delete mode 100644 vendor/symfony/security-http/AccessToken/Oidc/OidcTokenHandler.php delete mode 100644 vendor/symfony/security-http/AccessToken/Oidc/OidcTrait.php delete mode 100644 vendor/symfony/security-http/AccessToken/Oidc/OidcUserInfoTokenHandler.php delete mode 100644 vendor/symfony/security-http/AccessToken/QueryAccessTokenExtractor.php delete mode 100644 vendor/symfony/security-http/Attribute/CurrentUser.php delete mode 100644 vendor/symfony/security-http/Attribute/IsCsrfTokenValid.php delete mode 100644 vendor/symfony/security-http/Attribute/IsGranted.php delete mode 100644 vendor/symfony/security-http/Authentication/AuthenticationFailureHandlerInterface.php delete mode 100644 vendor/symfony/security-http/Authentication/AuthenticationSuccessHandlerInterface.php delete mode 100644 vendor/symfony/security-http/Authentication/AuthenticationUtils.php delete mode 100644 vendor/symfony/security-http/Authentication/AuthenticatorManager.php delete mode 100644 vendor/symfony/security-http/Authentication/AuthenticatorManagerInterface.php delete mode 100644 vendor/symfony/security-http/Authentication/CustomAuthenticationFailureHandler.php delete mode 100644 vendor/symfony/security-http/Authentication/CustomAuthenticationSuccessHandler.php delete mode 100644 vendor/symfony/security-http/Authentication/DefaultAuthenticationFailureHandler.php delete mode 100644 vendor/symfony/security-http/Authentication/DefaultAuthenticationSuccessHandler.php delete mode 100644 vendor/symfony/security-http/Authentication/UserAuthenticatorInterface.php delete mode 100644 vendor/symfony/security-http/Authenticator/AbstractAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/AbstractLoginFormAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/AbstractPreAuthenticatedAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/AccessTokenAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/AuthenticatorInterface.php delete mode 100644 vendor/symfony/security-http/Authenticator/Debug/TraceableAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/Debug/TraceableAuthenticatorManagerListener.php delete mode 100644 vendor/symfony/security-http/Authenticator/FallbackUserLoader.php delete mode 100644 vendor/symfony/security-http/Authenticator/FormLoginAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/HttpBasicAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/InteractiveAuthenticatorInterface.php delete mode 100644 vendor/symfony/security-http/Authenticator/JsonLoginAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/LoginLinkAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Badge/BadgeInterface.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Badge/CsrfTokenBadge.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Badge/PasswordUpgradeBadge.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Badge/PreAuthenticatedUserBadge.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Badge/RememberMeBadge.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Badge/UserBadge.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Credentials/CredentialsInterface.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Credentials/CustomCredentials.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Credentials/PasswordCredentials.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/Passport.php delete mode 100644 vendor/symfony/security-http/Authenticator/Passport/SelfValidatingPassport.php delete mode 100644 vendor/symfony/security-http/Authenticator/RememberMeAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/RemoteUserAuthenticator.php delete mode 100644 vendor/symfony/security-http/Authenticator/Token/PostAuthenticationToken.php delete mode 100644 vendor/symfony/security-http/Authenticator/X509Authenticator.php delete mode 100644 vendor/symfony/security-http/Authorization/AccessDeniedHandlerInterface.php delete mode 100644 vendor/symfony/security-http/CHANGELOG.md delete mode 100644 vendor/symfony/security-http/Controller/SecurityTokenValueResolver.php delete mode 100644 vendor/symfony/security-http/Controller/UserValueResolver.php delete mode 100644 vendor/symfony/security-http/EntryPoint/AuthenticationEntryPointInterface.php delete mode 100644 vendor/symfony/security-http/EntryPoint/Exception/NotAnEntryPointException.php delete mode 100644 vendor/symfony/security-http/Event/AuthenticationTokenCreatedEvent.php delete mode 100644 vendor/symfony/security-http/Event/CheckPassportEvent.php delete mode 100644 vendor/symfony/security-http/Event/InteractiveLoginEvent.php delete mode 100644 vendor/symfony/security-http/Event/LazyResponseEvent.php delete mode 100644 vendor/symfony/security-http/Event/LoginFailureEvent.php delete mode 100644 vendor/symfony/security-http/Event/LoginSuccessEvent.php delete mode 100644 vendor/symfony/security-http/Event/LogoutEvent.php delete mode 100644 vendor/symfony/security-http/Event/SwitchUserEvent.php delete mode 100644 vendor/symfony/security-http/Event/TokenDeauthenticatedEvent.php delete mode 100644 vendor/symfony/security-http/EventListener/CheckCredentialsListener.php delete mode 100644 vendor/symfony/security-http/EventListener/CheckRememberMeConditionsListener.php delete mode 100644 vendor/symfony/security-http/EventListener/ClearSiteDataLogoutListener.php delete mode 100644 vendor/symfony/security-http/EventListener/CookieClearingLogoutListener.php delete mode 100644 vendor/symfony/security-http/EventListener/CsrfProtectionListener.php delete mode 100644 vendor/symfony/security-http/EventListener/CsrfTokenClearingLogoutListener.php delete mode 100644 vendor/symfony/security-http/EventListener/DefaultLogoutListener.php delete mode 100644 vendor/symfony/security-http/EventListener/IsCsrfTokenValidAttributeListener.php delete mode 100644 vendor/symfony/security-http/EventListener/IsGrantedAttributeListener.php delete mode 100644 vendor/symfony/security-http/EventListener/LoginThrottlingListener.php delete mode 100644 vendor/symfony/security-http/EventListener/PasswordMigratingListener.php delete mode 100644 vendor/symfony/security-http/EventListener/RememberMeListener.php delete mode 100644 vendor/symfony/security-http/EventListener/SessionLogoutListener.php delete mode 100644 vendor/symfony/security-http/EventListener/SessionStrategyListener.php delete mode 100644 vendor/symfony/security-http/EventListener/UserCheckerListener.php delete mode 100644 vendor/symfony/security-http/EventListener/UserProviderListener.php delete mode 100644 vendor/symfony/security-http/Firewall.php delete mode 100644 vendor/symfony/security-http/Firewall/AbstractListener.php delete mode 100644 vendor/symfony/security-http/Firewall/AccessListener.php delete mode 100644 vendor/symfony/security-http/Firewall/AuthenticatorManagerListener.php delete mode 100644 vendor/symfony/security-http/Firewall/ChannelListener.php delete mode 100644 vendor/symfony/security-http/Firewall/ContextListener.php delete mode 100644 vendor/symfony/security-http/Firewall/ExceptionListener.php delete mode 100644 vendor/symfony/security-http/Firewall/FirewallListenerInterface.php delete mode 100644 vendor/symfony/security-http/Firewall/LogoutListener.php delete mode 100644 vendor/symfony/security-http/Firewall/SwitchUserListener.php delete mode 100644 vendor/symfony/security-http/FirewallMap.php delete mode 100644 vendor/symfony/security-http/FirewallMapInterface.php delete mode 100644 vendor/symfony/security-http/HttpUtils.php delete mode 100644 vendor/symfony/security-http/Impersonate/ImpersonateUrlGenerator.php delete mode 100644 vendor/symfony/security-http/LoginLink/Exception/ExpiredLoginLinkException.php delete mode 100644 vendor/symfony/security-http/LoginLink/Exception/InvalidLoginLinkAuthenticationException.php delete mode 100644 vendor/symfony/security-http/LoginLink/Exception/InvalidLoginLinkException.php delete mode 100644 vendor/symfony/security-http/LoginLink/Exception/InvalidLoginLinkExceptionInterface.php delete mode 100644 vendor/symfony/security-http/LoginLink/LoginLinkDetails.php delete mode 100644 vendor/symfony/security-http/LoginLink/LoginLinkHandler.php delete mode 100644 vendor/symfony/security-http/LoginLink/LoginLinkHandlerInterface.php delete mode 100644 vendor/symfony/security-http/LoginLink/LoginLinkNotification.php delete mode 100644 vendor/symfony/security-http/Logout/LogoutUrlGenerator.php delete mode 100644 vendor/symfony/security-http/ParameterBagUtils.php delete mode 100644 vendor/symfony/security-http/README.md delete mode 100644 vendor/symfony/security-http/RateLimiter/DefaultLoginRateLimiter.php delete mode 100644 vendor/symfony/security-http/RememberMe/AbstractRememberMeHandler.php delete mode 100644 vendor/symfony/security-http/RememberMe/PersistentRememberMeHandler.php delete mode 100644 vendor/symfony/security-http/RememberMe/RememberMeDetails.php delete mode 100644 vendor/symfony/security-http/RememberMe/RememberMeHandlerInterface.php delete mode 100644 vendor/symfony/security-http/RememberMe/ResponseListener.php delete mode 100644 vendor/symfony/security-http/RememberMe/SignatureRememberMeHandler.php delete mode 100644 vendor/symfony/security-http/SecurityEvents.php delete mode 100644 vendor/symfony/security-http/SecurityRequestAttributes.php delete mode 100644 vendor/symfony/security-http/Session/SessionAuthenticationStrategy.php delete mode 100644 vendor/symfony/security-http/Session/SessionAuthenticationStrategyInterface.php delete mode 100644 vendor/symfony/security-http/Util/TargetPathTrait.php delete mode 100644 vendor/symfony/security-http/composer.json delete mode 100644 vendor/symfony/serializer/Annotation/Context.php delete mode 100644 vendor/symfony/serializer/Annotation/DiscriminatorMap.php delete mode 100644 vendor/symfony/serializer/Annotation/Groups.php delete mode 100644 vendor/symfony/serializer/Annotation/Ignore.php delete mode 100644 vendor/symfony/serializer/Annotation/MaxDepth.php delete mode 100644 vendor/symfony/serializer/Annotation/SerializedName.php delete mode 100644 vendor/symfony/serializer/Annotation/SerializedPath.php delete mode 100644 vendor/symfony/serializer/Attribute/Context.php delete mode 100644 vendor/symfony/serializer/Attribute/DiscriminatorMap.php delete mode 100644 vendor/symfony/serializer/Attribute/Groups.php delete mode 100644 vendor/symfony/serializer/Attribute/Ignore.php delete mode 100644 vendor/symfony/serializer/Attribute/MaxDepth.php delete mode 100644 vendor/symfony/serializer/Attribute/SerializedName.php delete mode 100644 vendor/symfony/serializer/Attribute/SerializedPath.php delete mode 100644 vendor/symfony/serializer/CHANGELOG.md delete mode 100644 vendor/symfony/serializer/CacheWarmer/CompiledClassMetadataCacheWarmer.php delete mode 100644 vendor/symfony/serializer/Command/DebugCommand.php delete mode 100644 vendor/symfony/serializer/Context/ContextBuilderInterface.php delete mode 100644 vendor/symfony/serializer/Context/ContextBuilderTrait.php delete mode 100644 vendor/symfony/serializer/Context/Encoder/CsvEncoderContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Encoder/JsonEncoderContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Encoder/XmlEncoderContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Encoder/YamlEncoderContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/AbstractNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/AbstractObjectNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/BackedEnumNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/ConstraintViolationListNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/DateIntervalNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/DateTimeNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/FormErrorNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/GetSetMethodNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/JsonSerializableNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/ObjectNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/ProblemNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/PropertyNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/UidNormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/Normalizer/UnwrappingDenormalizerContextBuilder.php delete mode 100644 vendor/symfony/serializer/Context/SerializerContextBuilder.php delete mode 100644 vendor/symfony/serializer/DataCollector/SerializerDataCollector.php delete mode 100644 vendor/symfony/serializer/Debug/TraceableEncoder.php delete mode 100644 vendor/symfony/serializer/Debug/TraceableNormalizer.php delete mode 100644 vendor/symfony/serializer/Debug/TraceableSerializer.php delete mode 100644 vendor/symfony/serializer/DependencyInjection/SerializerPass.php delete mode 100644 vendor/symfony/serializer/Encoder/ChainDecoder.php delete mode 100644 vendor/symfony/serializer/Encoder/ChainEncoder.php delete mode 100644 vendor/symfony/serializer/Encoder/ContextAwareDecoderInterface.php delete mode 100644 vendor/symfony/serializer/Encoder/ContextAwareEncoderInterface.php delete mode 100644 vendor/symfony/serializer/Encoder/CsvEncoder.php delete mode 100644 vendor/symfony/serializer/Encoder/DecoderInterface.php delete mode 100644 vendor/symfony/serializer/Encoder/EncoderInterface.php delete mode 100644 vendor/symfony/serializer/Encoder/JsonDecode.php delete mode 100644 vendor/symfony/serializer/Encoder/JsonEncode.php delete mode 100644 vendor/symfony/serializer/Encoder/JsonEncoder.php delete mode 100644 vendor/symfony/serializer/Encoder/NormalizationAwareInterface.php delete mode 100644 vendor/symfony/serializer/Encoder/XmlEncoder.php delete mode 100644 vendor/symfony/serializer/Encoder/YamlEncoder.php delete mode 100644 vendor/symfony/serializer/Exception/BadMethodCallException.php delete mode 100644 vendor/symfony/serializer/Exception/CircularReferenceException.php delete mode 100644 vendor/symfony/serializer/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/serializer/Exception/ExtraAttributesException.php delete mode 100644 vendor/symfony/serializer/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/serializer/Exception/LogicException.php delete mode 100644 vendor/symfony/serializer/Exception/MappingException.php delete mode 100644 vendor/symfony/serializer/Exception/MissingConstructorArgumentsException.php delete mode 100644 vendor/symfony/serializer/Exception/NotEncodableValueException.php delete mode 100644 vendor/symfony/serializer/Exception/NotNormalizableValueException.php delete mode 100644 vendor/symfony/serializer/Exception/PartialDenormalizationException.php delete mode 100644 vendor/symfony/serializer/Exception/RuntimeException.php delete mode 100644 vendor/symfony/serializer/Exception/UnexpectedPropertyException.php delete mode 100644 vendor/symfony/serializer/Exception/UnexpectedValueException.php delete mode 100644 vendor/symfony/serializer/Exception/UnsupportedException.php delete mode 100644 vendor/symfony/serializer/Exception/UnsupportedFormatException.php delete mode 100644 vendor/symfony/serializer/Extractor/ObjectPropertyListExtractor.php delete mode 100644 vendor/symfony/serializer/Extractor/ObjectPropertyListExtractorInterface.php delete mode 100644 vendor/symfony/serializer/Mapping/AttributeMetadata.php delete mode 100644 vendor/symfony/serializer/Mapping/AttributeMetadataInterface.php delete mode 100644 vendor/symfony/serializer/Mapping/ClassDiscriminatorFromClassMetadata.php delete mode 100644 vendor/symfony/serializer/Mapping/ClassDiscriminatorMapping.php delete mode 100644 vendor/symfony/serializer/Mapping/ClassDiscriminatorResolverInterface.php delete mode 100644 vendor/symfony/serializer/Mapping/ClassMetadata.php delete mode 100644 vendor/symfony/serializer/Mapping/ClassMetadataInterface.php delete mode 100644 vendor/symfony/serializer/Mapping/Factory/CacheClassMetadataFactory.php delete mode 100644 vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactory.php delete mode 100644 vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactoryCompiler.php delete mode 100644 vendor/symfony/serializer/Mapping/Factory/ClassMetadataFactoryInterface.php delete mode 100644 vendor/symfony/serializer/Mapping/Factory/ClassResolverTrait.php delete mode 100644 vendor/symfony/serializer/Mapping/Factory/CompiledClassMetadataFactory.php delete mode 100644 vendor/symfony/serializer/Mapping/Loader/AttributeLoader.php delete mode 100644 vendor/symfony/serializer/Mapping/Loader/FileLoader.php delete mode 100644 vendor/symfony/serializer/Mapping/Loader/LoaderChain.php delete mode 100644 vendor/symfony/serializer/Mapping/Loader/LoaderInterface.php delete mode 100644 vendor/symfony/serializer/Mapping/Loader/XmlFileLoader.php delete mode 100644 vendor/symfony/serializer/Mapping/Loader/YamlFileLoader.php delete mode 100644 vendor/symfony/serializer/Mapping/Loader/schema/dic/serializer-mapping/serializer-mapping-1.0.xsd delete mode 100644 vendor/symfony/serializer/NameConverter/AdvancedNameConverterInterface.php delete mode 100644 vendor/symfony/serializer/NameConverter/CamelCaseToSnakeCaseNameConverter.php delete mode 100644 vendor/symfony/serializer/NameConverter/MetadataAwareNameConverter.php delete mode 100644 vendor/symfony/serializer/NameConverter/NameConverterInterface.php delete mode 100644 vendor/symfony/serializer/Normalizer/AbstractNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/ArrayDenormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/BackedEnumNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/ConstraintViolationListNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/CustomNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/DataUriNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/DateIntervalNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/DateTimeZoneNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/DenormalizableInterface.php delete mode 100644 vendor/symfony/serializer/Normalizer/DenormalizerAwareInterface.php delete mode 100644 vendor/symfony/serializer/Normalizer/DenormalizerAwareTrait.php delete mode 100644 vendor/symfony/serializer/Normalizer/DenormalizerInterface.php delete mode 100644 vendor/symfony/serializer/Normalizer/FormErrorNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/JsonSerializableNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/MimeMessageNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/NormalizableInterface.php delete mode 100644 vendor/symfony/serializer/Normalizer/NormalizerAwareInterface.php delete mode 100644 vendor/symfony/serializer/Normalizer/NormalizerAwareTrait.php delete mode 100644 vendor/symfony/serializer/Normalizer/NormalizerInterface.php delete mode 100644 vendor/symfony/serializer/Normalizer/ObjectNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/ObjectToPopulateTrait.php delete mode 100644 vendor/symfony/serializer/Normalizer/ProblemNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/PropertyNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/TranslatableNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/UidNormalizer.php delete mode 100644 vendor/symfony/serializer/Normalizer/UnwrappingDenormalizer.php delete mode 100644 vendor/symfony/serializer/README.md delete mode 100644 vendor/symfony/serializer/Serializer.php delete mode 100644 vendor/symfony/serializer/SerializerAwareInterface.php delete mode 100644 vendor/symfony/serializer/SerializerAwareTrait.php delete mode 100644 vendor/symfony/serializer/SerializerInterface.php delete mode 100644 vendor/symfony/serializer/composer.json delete mode 100644 vendor/symfony/service-contracts/Attribute/Required.php delete mode 100644 vendor/symfony/service-contracts/Attribute/SubscribedService.php delete mode 100644 vendor/symfony/service-contracts/CHANGELOG.md delete mode 100644 vendor/symfony/service-contracts/README.md delete mode 100644 vendor/symfony/service-contracts/ResetInterface.php delete mode 100644 vendor/symfony/service-contracts/ServiceCollectionInterface.php delete mode 100644 vendor/symfony/service-contracts/ServiceLocatorTrait.php delete mode 100644 vendor/symfony/service-contracts/ServiceMethodsSubscriberTrait.php delete mode 100644 vendor/symfony/service-contracts/ServiceProviderInterface.php delete mode 100644 vendor/symfony/service-contracts/ServiceSubscriberInterface.php delete mode 100644 vendor/symfony/service-contracts/ServiceSubscriberTrait.php delete mode 100644 vendor/symfony/service-contracts/Test/ServiceLocatorTest.php delete mode 100644 vendor/symfony/service-contracts/Test/ServiceLocatorTestCase.php delete mode 100644 vendor/symfony/service-contracts/composer.json delete mode 100644 vendor/symfony/stimulus-bundle/CHANGELOG.md delete mode 100644 vendor/symfony/stimulus-bundle/README.md delete mode 100644 vendor/symfony/stimulus-bundle/assets/dist/controllers.d.ts delete mode 100644 vendor/symfony/stimulus-bundle/assets/dist/controllers.js delete mode 100644 vendor/symfony/stimulus-bundle/assets/dist/loader.d.ts delete mode 100644 vendor/symfony/stimulus-bundle/assets/dist/loader.js delete mode 100644 vendor/symfony/stimulus-bundle/assets/package.json delete mode 100644 vendor/symfony/stimulus-bundle/composer.json delete mode 100644 vendor/symfony/stimulus-bundle/config/services.php delete mode 100644 vendor/symfony/stimulus-bundle/doc/index.rst delete mode 100644 vendor/symfony/stimulus-bundle/src/AssetMapper/AutoImportLocator.php delete mode 100644 vendor/symfony/stimulus-bundle/src/AssetMapper/ControllersMapGenerator.php delete mode 100644 vendor/symfony/stimulus-bundle/src/AssetMapper/MappedControllerAsset.php delete mode 100644 vendor/symfony/stimulus-bundle/src/AssetMapper/MappedControllerAutoImport.php delete mode 100644 vendor/symfony/stimulus-bundle/src/AssetMapper/StimulusLoaderJavaScriptCompiler.php delete mode 100644 vendor/symfony/stimulus-bundle/src/DependencyInjection/Compiler/RemoveAssetMapperServicesCompiler.php delete mode 100644 vendor/symfony/stimulus-bundle/src/DependencyInjection/StimulusExtension.php delete mode 100644 vendor/symfony/stimulus-bundle/src/Dto/StimulusAttributes.php delete mode 100644 vendor/symfony/stimulus-bundle/src/Helper/StimulusHelper.php delete mode 100644 vendor/symfony/stimulus-bundle/src/StimulusBundle.php delete mode 100644 vendor/symfony/stimulus-bundle/src/Twig/StimulusTwigExtension.php delete mode 100644 vendor/symfony/stimulus-bundle/src/Twig/UxControllersTwigExtension.php delete mode 100644 vendor/symfony/stimulus-bundle/src/Twig/UxControllersTwigRuntime.php delete mode 100644 vendor/symfony/stimulus-bundle/src/Ux/UxPackageMetadata.php delete mode 100644 vendor/symfony/stimulus-bundle/src/Ux/UxPackageReader.php delete mode 100644 vendor/symfony/stopwatch/CHANGELOG.md delete mode 100644 vendor/symfony/stopwatch/README.md delete mode 100644 vendor/symfony/stopwatch/Section.php delete mode 100644 vendor/symfony/stopwatch/Stopwatch.php delete mode 100644 vendor/symfony/stopwatch/StopwatchEvent.php delete mode 100644 vendor/symfony/stopwatch/StopwatchPeriod.php delete mode 100644 vendor/symfony/stopwatch/composer.json delete mode 100644 vendor/symfony/string/AbstractString.php delete mode 100644 vendor/symfony/string/AbstractUnicodeString.php delete mode 100644 vendor/symfony/string/ByteString.php delete mode 100644 vendor/symfony/string/CHANGELOG.md delete mode 100644 vendor/symfony/string/CodePointString.php delete mode 100644 vendor/symfony/string/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/string/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/string/Exception/RuntimeException.php delete mode 100644 vendor/symfony/string/Inflector/EnglishInflector.php delete mode 100644 vendor/symfony/string/Inflector/FrenchInflector.php delete mode 100644 vendor/symfony/string/Inflector/InflectorInterface.php delete mode 100644 vendor/symfony/string/LazyString.php delete mode 100644 vendor/symfony/string/README.md delete mode 100644 vendor/symfony/string/Resources/data/wcswidth_table_wide.php delete mode 100644 vendor/symfony/string/Resources/data/wcswidth_table_zero.php delete mode 100644 vendor/symfony/string/Resources/functions.php delete mode 100644 vendor/symfony/string/Slugger/AsciiSlugger.php delete mode 100644 vendor/symfony/string/Slugger/SluggerInterface.php delete mode 100644 vendor/symfony/string/UnicodeString.php delete mode 100644 vendor/symfony/string/composer.json delete mode 100644 vendor/symfony/translation-contracts/CHANGELOG.md delete mode 100644 vendor/symfony/translation-contracts/LocaleAwareInterface.php delete mode 100644 vendor/symfony/translation-contracts/README.md delete mode 100644 vendor/symfony/translation-contracts/Test/TranslatorTest.php delete mode 100644 vendor/symfony/translation-contracts/TranslatableInterface.php delete mode 100644 vendor/symfony/translation-contracts/TranslatorInterface.php delete mode 100644 vendor/symfony/translation-contracts/TranslatorTrait.php delete mode 100644 vendor/symfony/translation-contracts/composer.json delete mode 100644 vendor/symfony/translation/CHANGELOG.md delete mode 100644 vendor/symfony/translation/Catalogue/AbstractOperation.php delete mode 100644 vendor/symfony/translation/Catalogue/MergeOperation.php delete mode 100644 vendor/symfony/translation/Catalogue/OperationInterface.php delete mode 100644 vendor/symfony/translation/Catalogue/TargetOperation.php delete mode 100644 vendor/symfony/translation/CatalogueMetadataAwareInterface.php delete mode 100644 vendor/symfony/translation/Command/TranslationPullCommand.php delete mode 100644 vendor/symfony/translation/Command/TranslationPushCommand.php delete mode 100644 vendor/symfony/translation/Command/TranslationTrait.php delete mode 100644 vendor/symfony/translation/Command/XliffLintCommand.php delete mode 100644 vendor/symfony/translation/DataCollector/TranslationDataCollector.php delete mode 100644 vendor/symfony/translation/DataCollectorTranslator.php delete mode 100644 vendor/symfony/translation/DependencyInjection/DataCollectorTranslatorPass.php delete mode 100644 vendor/symfony/translation/DependencyInjection/LoggingTranslatorPass.php delete mode 100644 vendor/symfony/translation/DependencyInjection/TranslationDumperPass.php delete mode 100644 vendor/symfony/translation/DependencyInjection/TranslationExtractorPass.php delete mode 100644 vendor/symfony/translation/DependencyInjection/TranslatorPass.php delete mode 100644 vendor/symfony/translation/DependencyInjection/TranslatorPathsPass.php delete mode 100644 vendor/symfony/translation/Dumper/CsvFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/DumperInterface.php delete mode 100644 vendor/symfony/translation/Dumper/FileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/IcuResFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/IniFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/JsonFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/MoFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/PhpFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/PoFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/QtFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/XliffFileDumper.php delete mode 100644 vendor/symfony/translation/Dumper/YamlFileDumper.php delete mode 100644 vendor/symfony/translation/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/translation/Exception/IncompleteDsnException.php delete mode 100644 vendor/symfony/translation/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/translation/Exception/InvalidResourceException.php delete mode 100644 vendor/symfony/translation/Exception/LogicException.php delete mode 100644 vendor/symfony/translation/Exception/MissingRequiredOptionException.php delete mode 100644 vendor/symfony/translation/Exception/NotFoundResourceException.php delete mode 100644 vendor/symfony/translation/Exception/ProviderException.php delete mode 100644 vendor/symfony/translation/Exception/ProviderExceptionInterface.php delete mode 100644 vendor/symfony/translation/Exception/RuntimeException.php delete mode 100644 vendor/symfony/translation/Exception/UnsupportedSchemeException.php delete mode 100644 vendor/symfony/translation/Extractor/AbstractFileExtractor.php delete mode 100644 vendor/symfony/translation/Extractor/ChainExtractor.php delete mode 100644 vendor/symfony/translation/Extractor/ExtractorInterface.php delete mode 100644 vendor/symfony/translation/Extractor/PhpAstExtractor.php delete mode 100644 vendor/symfony/translation/Extractor/Visitor/AbstractVisitor.php delete mode 100644 vendor/symfony/translation/Extractor/Visitor/ConstraintVisitor.php delete mode 100644 vendor/symfony/translation/Extractor/Visitor/TransMethodVisitor.php delete mode 100644 vendor/symfony/translation/Extractor/Visitor/TranslatableMessageVisitor.php delete mode 100644 vendor/symfony/translation/Formatter/IntlFormatter.php delete mode 100644 vendor/symfony/translation/Formatter/IntlFormatterInterface.php delete mode 100644 vendor/symfony/translation/Formatter/MessageFormatter.php delete mode 100644 vendor/symfony/translation/Formatter/MessageFormatterInterface.php delete mode 100644 vendor/symfony/translation/IdentityTranslator.php delete mode 100644 vendor/symfony/translation/Loader/ArrayLoader.php delete mode 100644 vendor/symfony/translation/Loader/CsvFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/FileLoader.php delete mode 100644 vendor/symfony/translation/Loader/IcuDatFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/IcuResFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/IniFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/JsonFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/LoaderInterface.php delete mode 100644 vendor/symfony/translation/Loader/MoFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/PhpFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/PoFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/QtFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/XliffFileLoader.php delete mode 100644 vendor/symfony/translation/Loader/YamlFileLoader.php delete mode 100644 vendor/symfony/translation/LocaleSwitcher.php delete mode 100644 vendor/symfony/translation/LoggingTranslator.php delete mode 100644 vendor/symfony/translation/MessageCatalogue.php delete mode 100644 vendor/symfony/translation/MessageCatalogueInterface.php delete mode 100644 vendor/symfony/translation/MetadataAwareInterface.php delete mode 100644 vendor/symfony/translation/Provider/AbstractProviderFactory.php delete mode 100644 vendor/symfony/translation/Provider/Dsn.php delete mode 100644 vendor/symfony/translation/Provider/FilteringProvider.php delete mode 100644 vendor/symfony/translation/Provider/NullProvider.php delete mode 100644 vendor/symfony/translation/Provider/NullProviderFactory.php delete mode 100644 vendor/symfony/translation/Provider/ProviderFactoryInterface.php delete mode 100644 vendor/symfony/translation/Provider/ProviderInterface.php delete mode 100644 vendor/symfony/translation/Provider/TranslationProviderCollection.php delete mode 100644 vendor/symfony/translation/Provider/TranslationProviderCollectionFactory.php delete mode 100644 vendor/symfony/translation/PseudoLocalizationTranslator.php delete mode 100644 vendor/symfony/translation/README.md delete mode 100644 vendor/symfony/translation/Reader/TranslationReader.php delete mode 100644 vendor/symfony/translation/Reader/TranslationReaderInterface.php delete mode 100644 vendor/symfony/translation/Resources/bin/translation-status.php delete mode 100644 vendor/symfony/translation/Resources/data/parents.json delete mode 100644 vendor/symfony/translation/Resources/functions.php delete mode 100644 vendor/symfony/translation/Resources/schemas/xliff-core-1.2-transitional.xsd delete mode 100644 vendor/symfony/translation/Resources/schemas/xliff-core-2.0.xsd delete mode 100644 vendor/symfony/translation/Resources/schemas/xml.xsd delete mode 100644 vendor/symfony/translation/Test/ProviderFactoryTestCase.php delete mode 100644 vendor/symfony/translation/Test/ProviderTestCase.php delete mode 100644 vendor/symfony/translation/TranslatableMessage.php delete mode 100644 vendor/symfony/translation/Translator.php delete mode 100644 vendor/symfony/translation/TranslatorBag.php delete mode 100644 vendor/symfony/translation/TranslatorBagInterface.php delete mode 100644 vendor/symfony/translation/Util/ArrayConverter.php delete mode 100644 vendor/symfony/translation/Util/XliffUtils.php delete mode 100644 vendor/symfony/translation/Writer/TranslationWriter.php delete mode 100644 vendor/symfony/translation/Writer/TranslationWriterInterface.php delete mode 100644 vendor/symfony/translation/composer.json delete mode 100644 vendor/symfony/twig-bridge/AppVariable.php delete mode 100644 vendor/symfony/twig-bridge/Attribute/Template.php delete mode 100644 vendor/symfony/twig-bridge/CHANGELOG.md delete mode 100644 vendor/symfony/twig-bridge/Command/DebugCommand.php delete mode 100644 vendor/symfony/twig-bridge/Command/LintCommand.php delete mode 100644 vendor/symfony/twig-bridge/DataCollector/TwigDataCollector.php delete mode 100644 vendor/symfony/twig-bridge/ErrorRenderer/TwigErrorRenderer.php delete mode 100644 vendor/symfony/twig-bridge/EventListener/TemplateAttributeListener.php delete mode 100644 vendor/symfony/twig-bridge/Extension/AssetExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/CsrfExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/CsrfRuntime.php delete mode 100644 vendor/symfony/twig-bridge/Extension/DumpExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/EmojiExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/ExpressionExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/FormExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/HtmlSanitizerExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/HttpFoundationExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/HttpKernelExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/HttpKernelRuntime.php delete mode 100644 vendor/symfony/twig-bridge/Extension/ImportMapExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/ImportMapRuntime.php delete mode 100644 vendor/symfony/twig-bridge/Extension/LogoutUrlExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/ProfilerExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/RoutingExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/SecurityExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/SerializerExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/SerializerRuntime.php delete mode 100644 vendor/symfony/twig-bridge/Extension/StopwatchExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/TranslationExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/WebLinkExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/WorkflowExtension.php delete mode 100644 vendor/symfony/twig-bridge/Extension/YamlExtension.php delete mode 100644 vendor/symfony/twig-bridge/Form/TwigRendererEngine.php delete mode 100644 vendor/symfony/twig-bridge/Mime/BodyRenderer.php delete mode 100644 vendor/symfony/twig-bridge/Mime/NotificationEmail.php delete mode 100644 vendor/symfony/twig-bridge/Mime/TemplatedEmail.php delete mode 100644 vendor/symfony/twig-bridge/Mime/WrappedTemplatedEmail.php delete mode 100644 vendor/symfony/twig-bridge/Node/DumpNode.php delete mode 100644 vendor/symfony/twig-bridge/Node/FormThemeNode.php delete mode 100644 vendor/symfony/twig-bridge/Node/RenderBlockNode.php delete mode 100644 vendor/symfony/twig-bridge/Node/SearchAndRenderBlockNode.php delete mode 100644 vendor/symfony/twig-bridge/Node/StopwatchNode.php delete mode 100644 vendor/symfony/twig-bridge/Node/TransDefaultDomainNode.php delete mode 100644 vendor/symfony/twig-bridge/Node/TransNode.php delete mode 100644 vendor/symfony/twig-bridge/NodeVisitor/Scope.php delete mode 100644 vendor/symfony/twig-bridge/NodeVisitor/TranslationDefaultDomainNodeVisitor.php delete mode 100644 vendor/symfony/twig-bridge/NodeVisitor/TranslationNodeVisitor.php delete mode 100644 vendor/symfony/twig-bridge/README.md delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Email/default/notification/body.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Email/default/notification/body.txt.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Email/zurb_2/main.css delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Email/zurb_2/notification/body.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Email/zurb_2/notification/body.txt.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Email/zurb_2/notification/content_markdown.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Email/zurb_2/notification/local.css delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/bootstrap_3_horizontal_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/bootstrap_3_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/bootstrap_4_horizontal_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/bootstrap_4_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/bootstrap_5_horizontal_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/bootstrap_5_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/bootstrap_base_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/form_div_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/form_table_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/foundation_5_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/foundation_6_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Resources/views/Form/tailwind_2_layout.html.twig delete mode 100644 vendor/symfony/twig-bridge/Test/FormLayoutTestCase.php delete mode 100644 vendor/symfony/twig-bridge/Test/Traits/RuntimeLoaderProvider.php delete mode 100644 vendor/symfony/twig-bridge/TokenParser/DumpTokenParser.php delete mode 100644 vendor/symfony/twig-bridge/TokenParser/FormThemeTokenParser.php delete mode 100644 vendor/symfony/twig-bridge/TokenParser/StopwatchTokenParser.php delete mode 100644 vendor/symfony/twig-bridge/TokenParser/TransDefaultDomainTokenParser.php delete mode 100644 vendor/symfony/twig-bridge/TokenParser/TransTokenParser.php delete mode 100644 vendor/symfony/twig-bridge/Translation/TwigExtractor.php delete mode 100644 vendor/symfony/twig-bridge/UndefinedCallableHandler.php delete mode 100644 vendor/symfony/twig-bridge/composer.json delete mode 100644 vendor/symfony/twig-bundle/CHANGELOG.md delete mode 100644 vendor/symfony/twig-bundle/CacheWarmer/TemplateCacheWarmer.php delete mode 100644 vendor/symfony/twig-bundle/Command/LintCommand.php delete mode 100644 vendor/symfony/twig-bundle/DependencyInjection/Compiler/ExtensionPass.php delete mode 100644 vendor/symfony/twig-bundle/DependencyInjection/Compiler/RuntimeLoaderPass.php delete mode 100644 vendor/symfony/twig-bundle/DependencyInjection/Compiler/TwigEnvironmentPass.php delete mode 100644 vendor/symfony/twig-bundle/DependencyInjection/Compiler/TwigLoaderPass.php delete mode 100644 vendor/symfony/twig-bundle/DependencyInjection/Configuration.php delete mode 100644 vendor/symfony/twig-bundle/DependencyInjection/Configurator/EnvironmentConfigurator.php delete mode 100644 vendor/symfony/twig-bundle/DependencyInjection/TwigExtension.php delete mode 100644 vendor/symfony/twig-bundle/README.md delete mode 100644 vendor/symfony/twig-bundle/Resources/config/console.php delete mode 100644 vendor/symfony/twig-bundle/Resources/config/form.php delete mode 100644 vendor/symfony/twig-bundle/Resources/config/importmap.php delete mode 100644 vendor/symfony/twig-bundle/Resources/config/mailer.php delete mode 100644 vendor/symfony/twig-bundle/Resources/config/schema/twig-1.0.xsd delete mode 100644 vendor/symfony/twig-bundle/Resources/config/twig.php delete mode 100644 vendor/symfony/twig-bundle/TemplateIterator.php delete mode 100644 vendor/symfony/twig-bundle/TwigBundle.php delete mode 100644 vendor/symfony/twig-bundle/composer.json delete mode 100644 vendor/symfony/type-info/CHANGELOG.md delete mode 100644 vendor/symfony/type-info/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/type-info/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/type-info/Exception/LogicException.php delete mode 100644 vendor/symfony/type-info/Exception/RuntimeException.php delete mode 100644 vendor/symfony/type-info/Exception/UnsupportedException.php delete mode 100644 vendor/symfony/type-info/README.md delete mode 100644 vendor/symfony/type-info/Type.php delete mode 100644 vendor/symfony/type-info/Type/BackedEnumType.php delete mode 100644 vendor/symfony/type-info/Type/BuiltinType.php delete mode 100644 vendor/symfony/type-info/Type/CollectionType.php delete mode 100644 vendor/symfony/type-info/Type/CompositeTypeTrait.php delete mode 100644 vendor/symfony/type-info/Type/EnumType.php delete mode 100644 vendor/symfony/type-info/Type/GenericType.php delete mode 100644 vendor/symfony/type-info/Type/IntersectionType.php delete mode 100644 vendor/symfony/type-info/Type/ObjectType.php delete mode 100644 vendor/symfony/type-info/Type/TemplateType.php delete mode 100644 vendor/symfony/type-info/Type/UnionType.php delete mode 100644 vendor/symfony/type-info/TypeContext/TypeContext.php delete mode 100644 vendor/symfony/type-info/TypeContext/TypeContextFactory.php delete mode 100644 vendor/symfony/type-info/TypeFactoryTrait.php delete mode 100644 vendor/symfony/type-info/TypeIdentifier.php delete mode 100644 vendor/symfony/type-info/TypeResolver/ReflectionParameterTypeResolver.php delete mode 100644 vendor/symfony/type-info/TypeResolver/ReflectionPropertyTypeResolver.php delete mode 100644 vendor/symfony/type-info/TypeResolver/ReflectionReturnTypeResolver.php delete mode 100644 vendor/symfony/type-info/TypeResolver/ReflectionTypeResolver.php delete mode 100644 vendor/symfony/type-info/TypeResolver/StringTypeResolver.php delete mode 100644 vendor/symfony/type-info/TypeResolver/TypeResolver.php delete mode 100644 vendor/symfony/type-info/TypeResolver/TypeResolverInterface.php delete mode 100644 vendor/symfony/type-info/composer.json delete mode 100644 vendor/symfony/ux-turbo/CHANGELOG.md delete mode 100644 vendor/symfony/ux-turbo/CONTRIBUTING.md delete mode 100644 vendor/symfony/ux-turbo/README.md delete mode 100644 vendor/symfony/ux-turbo/assets/dist/turbo_controller.d.ts delete mode 100644 vendor/symfony/ux-turbo/assets/dist/turbo_controller.js delete mode 100644 vendor/symfony/ux-turbo/assets/dist/turbo_stream_controller.d.ts delete mode 100644 vendor/symfony/ux-turbo/assets/dist/turbo_stream_controller.js delete mode 100644 vendor/symfony/ux-turbo/assets/package.json delete mode 100644 vendor/symfony/ux-turbo/assets/vitest.config.mjs delete mode 100644 vendor/symfony/ux-turbo/composer.json delete mode 100644 vendor/symfony/ux-turbo/config/services.php delete mode 100644 vendor/symfony/ux-turbo/doc/index.rst delete mode 100644 vendor/symfony/ux-turbo/docker-compose.yml delete mode 100644 vendor/symfony/ux-turbo/src/Attribute/Broadcast.php delete mode 100644 vendor/symfony/ux-turbo/src/Bridge/Mercure/Broadcaster.php delete mode 100644 vendor/symfony/ux-turbo/src/Bridge/Mercure/TurboStreamListenRenderer.php delete mode 100644 vendor/symfony/ux-turbo/src/Broadcaster/BroadcasterInterface.php delete mode 100644 vendor/symfony/ux-turbo/src/Broadcaster/IdAccessor.php delete mode 100644 vendor/symfony/ux-turbo/src/Broadcaster/ImuxBroadcaster.php delete mode 100644 vendor/symfony/ux-turbo/src/Broadcaster/TwigBroadcaster.php delete mode 100644 vendor/symfony/ux-turbo/src/DependencyInjection/Configuration.php delete mode 100644 vendor/symfony/ux-turbo/src/DependencyInjection/TurboExtension.php delete mode 100644 vendor/symfony/ux-turbo/src/Doctrine/BroadcastListener.php delete mode 100644 vendor/symfony/ux-turbo/src/Doctrine/ClassUtil.php delete mode 100644 vendor/symfony/ux-turbo/src/TurboBundle.php delete mode 100644 vendor/symfony/ux-turbo/src/Twig/TurboStreamListenRendererInterface.php delete mode 100644 vendor/symfony/ux-turbo/src/Twig/TwigExtension.php delete mode 100644 vendor/symfony/validator/Attribute/HasNamedArguments.php delete mode 100644 vendor/symfony/validator/CHANGELOG.md delete mode 100644 vendor/symfony/validator/Command/DebugCommand.php delete mode 100644 vendor/symfony/validator/Constraint.php delete mode 100644 vendor/symfony/validator/ConstraintValidator.php delete mode 100644 vendor/symfony/validator/ConstraintValidatorFactory.php delete mode 100644 vendor/symfony/validator/ConstraintValidatorFactoryInterface.php delete mode 100644 vendor/symfony/validator/ConstraintValidatorInterface.php delete mode 100644 vendor/symfony/validator/ConstraintViolation.php delete mode 100644 vendor/symfony/validator/ConstraintViolationInterface.php delete mode 100644 vendor/symfony/validator/ConstraintViolationList.php delete mode 100644 vendor/symfony/validator/ConstraintViolationListInterface.php delete mode 100644 vendor/symfony/validator/Constraints/AbstractComparison.php delete mode 100644 vendor/symfony/validator/Constraints/AbstractComparisonValidator.php delete mode 100644 vendor/symfony/validator/Constraints/All.php delete mode 100644 vendor/symfony/validator/Constraints/AllValidator.php delete mode 100644 vendor/symfony/validator/Constraints/AtLeastOneOf.php delete mode 100644 vendor/symfony/validator/Constraints/AtLeastOneOfValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Bic.php delete mode 100644 vendor/symfony/validator/Constraints/BicValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Blank.php delete mode 100644 vendor/symfony/validator/Constraints/BlankValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Callback.php delete mode 100644 vendor/symfony/validator/Constraints/CallbackValidator.php delete mode 100644 vendor/symfony/validator/Constraints/CardScheme.php delete mode 100644 vendor/symfony/validator/Constraints/CardSchemeValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Cascade.php delete mode 100644 vendor/symfony/validator/Constraints/Charset.php delete mode 100644 vendor/symfony/validator/Constraints/CharsetValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Choice.php delete mode 100644 vendor/symfony/validator/Constraints/ChoiceValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Cidr.php delete mode 100644 vendor/symfony/validator/Constraints/CidrValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Collection.php delete mode 100644 vendor/symfony/validator/Constraints/CollectionValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Composite.php delete mode 100644 vendor/symfony/validator/Constraints/Compound.php delete mode 100644 vendor/symfony/validator/Constraints/CompoundValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Count.php delete mode 100644 vendor/symfony/validator/Constraints/CountValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Country.php delete mode 100644 vendor/symfony/validator/Constraints/CountryValidator.php delete mode 100644 vendor/symfony/validator/Constraints/CssColor.php delete mode 100644 vendor/symfony/validator/Constraints/CssColorValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Currency.php delete mode 100644 vendor/symfony/validator/Constraints/CurrencyValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Date.php delete mode 100644 vendor/symfony/validator/Constraints/DateTime.php delete mode 100644 vendor/symfony/validator/Constraints/DateTimeValidator.php delete mode 100644 vendor/symfony/validator/Constraints/DateValidator.php delete mode 100644 vendor/symfony/validator/Constraints/DisableAutoMapping.php delete mode 100644 vendor/symfony/validator/Constraints/DivisibleBy.php delete mode 100644 vendor/symfony/validator/Constraints/DivisibleByValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Email.php delete mode 100644 vendor/symfony/validator/Constraints/EmailValidator.php delete mode 100644 vendor/symfony/validator/Constraints/EnableAutoMapping.php delete mode 100644 vendor/symfony/validator/Constraints/EqualTo.php delete mode 100644 vendor/symfony/validator/Constraints/EqualToValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Existence.php delete mode 100644 vendor/symfony/validator/Constraints/Expression.php delete mode 100644 vendor/symfony/validator/Constraints/ExpressionLanguageProvider.php delete mode 100644 vendor/symfony/validator/Constraints/ExpressionSyntax.php delete mode 100644 vendor/symfony/validator/Constraints/ExpressionSyntaxValidator.php delete mode 100644 vendor/symfony/validator/Constraints/ExpressionValidator.php delete mode 100644 vendor/symfony/validator/Constraints/File.php delete mode 100644 vendor/symfony/validator/Constraints/FileValidator.php delete mode 100644 vendor/symfony/validator/Constraints/GreaterThan.php delete mode 100644 vendor/symfony/validator/Constraints/GreaterThanOrEqual.php delete mode 100644 vendor/symfony/validator/Constraints/GreaterThanOrEqualValidator.php delete mode 100644 vendor/symfony/validator/Constraints/GreaterThanValidator.php delete mode 100644 vendor/symfony/validator/Constraints/GroupSequence.php delete mode 100644 vendor/symfony/validator/Constraints/GroupSequenceProvider.php delete mode 100644 vendor/symfony/validator/Constraints/Hostname.php delete mode 100644 vendor/symfony/validator/Constraints/HostnameValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Iban.php delete mode 100644 vendor/symfony/validator/Constraints/IbanValidator.php delete mode 100644 vendor/symfony/validator/Constraints/IdenticalTo.php delete mode 100644 vendor/symfony/validator/Constraints/IdenticalToValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Image.php delete mode 100644 vendor/symfony/validator/Constraints/ImageValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Ip.php delete mode 100644 vendor/symfony/validator/Constraints/IpValidator.php delete mode 100644 vendor/symfony/validator/Constraints/IsFalse.php delete mode 100644 vendor/symfony/validator/Constraints/IsFalseValidator.php delete mode 100644 vendor/symfony/validator/Constraints/IsNull.php delete mode 100644 vendor/symfony/validator/Constraints/IsNullValidator.php delete mode 100644 vendor/symfony/validator/Constraints/IsTrue.php delete mode 100644 vendor/symfony/validator/Constraints/IsTrueValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Isbn.php delete mode 100644 vendor/symfony/validator/Constraints/IsbnValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Isin.php delete mode 100644 vendor/symfony/validator/Constraints/IsinValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Issn.php delete mode 100644 vendor/symfony/validator/Constraints/IssnValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Json.php delete mode 100644 vendor/symfony/validator/Constraints/JsonValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Language.php delete mode 100644 vendor/symfony/validator/Constraints/LanguageValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Length.php delete mode 100644 vendor/symfony/validator/Constraints/LengthValidator.php delete mode 100644 vendor/symfony/validator/Constraints/LessThan.php delete mode 100644 vendor/symfony/validator/Constraints/LessThanOrEqual.php delete mode 100644 vendor/symfony/validator/Constraints/LessThanOrEqualValidator.php delete mode 100644 vendor/symfony/validator/Constraints/LessThanValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Locale.php delete mode 100644 vendor/symfony/validator/Constraints/LocaleValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Luhn.php delete mode 100644 vendor/symfony/validator/Constraints/LuhnValidator.php delete mode 100644 vendor/symfony/validator/Constraints/MacAddress.php delete mode 100644 vendor/symfony/validator/Constraints/MacAddressValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Negative.php delete mode 100644 vendor/symfony/validator/Constraints/NegativeOrZero.php delete mode 100644 vendor/symfony/validator/Constraints/NoSuspiciousCharacters.php delete mode 100644 vendor/symfony/validator/Constraints/NoSuspiciousCharactersValidator.php delete mode 100644 vendor/symfony/validator/Constraints/NotBlank.php delete mode 100644 vendor/symfony/validator/Constraints/NotBlankValidator.php delete mode 100644 vendor/symfony/validator/Constraints/NotCompromisedPassword.php delete mode 100644 vendor/symfony/validator/Constraints/NotCompromisedPasswordValidator.php delete mode 100644 vendor/symfony/validator/Constraints/NotEqualTo.php delete mode 100644 vendor/symfony/validator/Constraints/NotEqualToValidator.php delete mode 100644 vendor/symfony/validator/Constraints/NotIdenticalTo.php delete mode 100644 vendor/symfony/validator/Constraints/NotIdenticalToValidator.php delete mode 100644 vendor/symfony/validator/Constraints/NotNull.php delete mode 100644 vendor/symfony/validator/Constraints/NotNullValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Optional.php delete mode 100644 vendor/symfony/validator/Constraints/PasswordStrength.php delete mode 100644 vendor/symfony/validator/Constraints/PasswordStrengthValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Positive.php delete mode 100644 vendor/symfony/validator/Constraints/PositiveOrZero.php delete mode 100644 vendor/symfony/validator/Constraints/Range.php delete mode 100644 vendor/symfony/validator/Constraints/RangeValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Regex.php delete mode 100644 vendor/symfony/validator/Constraints/RegexValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Required.php delete mode 100644 vendor/symfony/validator/Constraints/Sequentially.php delete mode 100644 vendor/symfony/validator/Constraints/SequentiallyValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Time.php delete mode 100644 vendor/symfony/validator/Constraints/TimeValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Timezone.php delete mode 100644 vendor/symfony/validator/Constraints/TimezoneValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Traverse.php delete mode 100644 vendor/symfony/validator/Constraints/Type.php delete mode 100644 vendor/symfony/validator/Constraints/TypeValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Ulid.php delete mode 100644 vendor/symfony/validator/Constraints/UlidValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Unique.php delete mode 100644 vendor/symfony/validator/Constraints/UniqueValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Url.php delete mode 100644 vendor/symfony/validator/Constraints/UrlValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Uuid.php delete mode 100644 vendor/symfony/validator/Constraints/UuidValidator.php delete mode 100644 vendor/symfony/validator/Constraints/Valid.php delete mode 100644 vendor/symfony/validator/Constraints/ValidValidator.php delete mode 100644 vendor/symfony/validator/Constraints/When.php delete mode 100644 vendor/symfony/validator/Constraints/WhenValidator.php delete mode 100644 vendor/symfony/validator/Constraints/ZeroComparisonConstraintTrait.php delete mode 100644 vendor/symfony/validator/ContainerConstraintValidatorFactory.php delete mode 100644 vendor/symfony/validator/Context/ExecutionContext.php delete mode 100644 vendor/symfony/validator/Context/ExecutionContextFactory.php delete mode 100644 vendor/symfony/validator/Context/ExecutionContextFactoryInterface.php delete mode 100644 vendor/symfony/validator/Context/ExecutionContextInterface.php delete mode 100644 vendor/symfony/validator/DataCollector/ValidatorDataCollector.php delete mode 100644 vendor/symfony/validator/DependencyInjection/AddAutoMappingConfigurationPass.php delete mode 100644 vendor/symfony/validator/DependencyInjection/AddConstraintValidatorsPass.php delete mode 100644 vendor/symfony/validator/DependencyInjection/AddValidatorInitializersPass.php delete mode 100644 vendor/symfony/validator/Exception/BadMethodCallException.php delete mode 100644 vendor/symfony/validator/Exception/ConstraintDefinitionException.php delete mode 100644 vendor/symfony/validator/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/validator/Exception/GroupDefinitionException.php delete mode 100644 vendor/symfony/validator/Exception/InvalidArgumentException.php delete mode 100644 vendor/symfony/validator/Exception/InvalidOptionsException.php delete mode 100644 vendor/symfony/validator/Exception/LogicException.php delete mode 100644 vendor/symfony/validator/Exception/MappingException.php delete mode 100644 vendor/symfony/validator/Exception/MissingOptionsException.php delete mode 100644 vendor/symfony/validator/Exception/NoSuchMetadataException.php delete mode 100644 vendor/symfony/validator/Exception/OutOfBoundsException.php delete mode 100644 vendor/symfony/validator/Exception/RuntimeException.php delete mode 100644 vendor/symfony/validator/Exception/UnexpectedTypeException.php delete mode 100644 vendor/symfony/validator/Exception/UnexpectedValueException.php delete mode 100644 vendor/symfony/validator/Exception/UnsupportedMetadataException.php delete mode 100644 vendor/symfony/validator/Exception/ValidationFailedException.php delete mode 100644 vendor/symfony/validator/Exception/ValidatorException.php delete mode 100644 vendor/symfony/validator/GroupProviderInterface.php delete mode 100644 vendor/symfony/validator/GroupSequenceProviderInterface.php delete mode 100644 vendor/symfony/validator/Mapping/AutoMappingStrategy.php delete mode 100644 vendor/symfony/validator/Mapping/CascadingStrategy.php delete mode 100644 vendor/symfony/validator/Mapping/ClassMetadata.php delete mode 100644 vendor/symfony/validator/Mapping/ClassMetadataInterface.php delete mode 100644 vendor/symfony/validator/Mapping/Factory/BlackHoleMetadataFactory.php delete mode 100644 vendor/symfony/validator/Mapping/Factory/LazyLoadingMetadataFactory.php delete mode 100644 vendor/symfony/validator/Mapping/Factory/MetadataFactoryInterface.php delete mode 100644 vendor/symfony/validator/Mapping/GenericMetadata.php delete mode 100644 vendor/symfony/validator/Mapping/GetterMetadata.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/AbstractLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/AttributeLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/AutoMappingTrait.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/FileLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/FilesLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/LoaderChain.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/LoaderInterface.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/PropertyInfoLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/StaticMethodLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/XmlFileLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/XmlFilesLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/YamlFileLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/YamlFilesLoader.php delete mode 100644 vendor/symfony/validator/Mapping/Loader/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd delete mode 100644 vendor/symfony/validator/Mapping/MemberMetadata.php delete mode 100644 vendor/symfony/validator/Mapping/MetadataInterface.php delete mode 100644 vendor/symfony/validator/Mapping/PropertyMetadata.php delete mode 100644 vendor/symfony/validator/Mapping/PropertyMetadataInterface.php delete mode 100644 vendor/symfony/validator/Mapping/TraversalStrategy.php delete mode 100644 vendor/symfony/validator/ObjectInitializerInterface.php delete mode 100644 vendor/symfony/validator/README.md delete mode 100644 vendor/symfony/validator/Resources/translations/validators.af.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.ar.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.az.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.be.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.bg.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.bs.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.ca.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.cs.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.cy.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.da.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.de.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.el.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.en.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.es.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.et.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.eu.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.fa.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.fi.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.fr.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.gl.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.he.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.hr.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.hu.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.hy.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.id.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.it.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.ja.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.lb.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.lt.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.lv.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.mk.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.mn.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.my.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.nb.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.nl.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.nn.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.no.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.pl.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.pt.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.pt_BR.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.ro.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.ru.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.sk.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.sl.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.sq.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.sr_Cyrl.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.sr_Latn.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.sv.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.th.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.tl.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.tr.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.uk.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.ur.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.uz.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.vi.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.zh_CN.xlf delete mode 100644 vendor/symfony/validator/Resources/translations/validators.zh_TW.xlf delete mode 100644 vendor/symfony/validator/Test/ConstraintValidatorTestCase.php delete mode 100644 vendor/symfony/validator/Util/PropertyPath.php delete mode 100644 vendor/symfony/validator/Validation.php delete mode 100644 vendor/symfony/validator/Validator/ContextualValidatorInterface.php delete mode 100644 vendor/symfony/validator/Validator/LazyProperty.php delete mode 100644 vendor/symfony/validator/Validator/RecursiveContextualValidator.php delete mode 100644 vendor/symfony/validator/Validator/RecursiveValidator.php delete mode 100644 vendor/symfony/validator/Validator/TraceableValidator.php delete mode 100644 vendor/symfony/validator/Validator/ValidatorInterface.php delete mode 100644 vendor/symfony/validator/ValidatorBuilder.php delete mode 100644 vendor/symfony/validator/Violation/ConstraintViolationBuilder.php delete mode 100644 vendor/symfony/validator/Violation/ConstraintViolationBuilderInterface.php delete mode 100644 vendor/symfony/validator/composer.json delete mode 100644 vendor/symfony/var-dumper/CHANGELOG.md delete mode 100644 vendor/symfony/var-dumper/Caster/AmqpCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/ArgsStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/Caster.php delete mode 100644 vendor/symfony/var-dumper/Caster/ClassStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/ConstStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/CutArrayStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/CutStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/DOMCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/DateCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/DoctrineCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/DsCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/DsPairStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/EnumStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/ExceptionCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/FFICaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/FiberCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/FrameStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/GmpCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/ImagineCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/ImgStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/IntlCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/LinkStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/MemcachedCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/MysqliCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/PdoCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/PgSqlCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/ProxyManagerCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/RdKafkaCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/RedisCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/ReflectionCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/ResourceCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/ScalarStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/SplCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/StubCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/SymfonyCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/TraceStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/UninitializedStub.php delete mode 100644 vendor/symfony/var-dumper/Caster/UuidCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/XmlReaderCaster.php delete mode 100644 vendor/symfony/var-dumper/Caster/XmlResourceCaster.php delete mode 100644 vendor/symfony/var-dumper/Cloner/AbstractCloner.php delete mode 100644 vendor/symfony/var-dumper/Cloner/ClonerInterface.php delete mode 100644 vendor/symfony/var-dumper/Cloner/Cursor.php delete mode 100644 vendor/symfony/var-dumper/Cloner/Data.php delete mode 100644 vendor/symfony/var-dumper/Cloner/DumperInterface.php delete mode 100644 vendor/symfony/var-dumper/Cloner/Internal/NoDefault.php delete mode 100644 vendor/symfony/var-dumper/Cloner/Stub.php delete mode 100644 vendor/symfony/var-dumper/Cloner/VarCloner.php delete mode 100644 vendor/symfony/var-dumper/Command/Descriptor/CliDescriptor.php delete mode 100644 vendor/symfony/var-dumper/Command/Descriptor/DumpDescriptorInterface.php delete mode 100644 vendor/symfony/var-dumper/Command/Descriptor/HtmlDescriptor.php delete mode 100644 vendor/symfony/var-dumper/Command/ServerDumpCommand.php delete mode 100644 vendor/symfony/var-dumper/Dumper/AbstractDumper.php delete mode 100644 vendor/symfony/var-dumper/Dumper/CliDumper.php delete mode 100644 vendor/symfony/var-dumper/Dumper/ContextProvider/CliContextProvider.php delete mode 100644 vendor/symfony/var-dumper/Dumper/ContextProvider/ContextProviderInterface.php delete mode 100644 vendor/symfony/var-dumper/Dumper/ContextProvider/RequestContextProvider.php delete mode 100644 vendor/symfony/var-dumper/Dumper/ContextProvider/SourceContextProvider.php delete mode 100644 vendor/symfony/var-dumper/Dumper/ContextualizedDumper.php delete mode 100644 vendor/symfony/var-dumper/Dumper/DataDumperInterface.php delete mode 100644 vendor/symfony/var-dumper/Dumper/HtmlDumper.php delete mode 100644 vendor/symfony/var-dumper/Dumper/ServerDumper.php delete mode 100644 vendor/symfony/var-dumper/Exception/ThrowingCasterException.php delete mode 100644 vendor/symfony/var-dumper/README.md delete mode 100644 vendor/symfony/var-dumper/Resources/css/htmlDescriptor.css delete mode 100644 vendor/symfony/var-dumper/Resources/functions/dump.php delete mode 100644 vendor/symfony/var-dumper/Resources/js/htmlDescriptor.js delete mode 100644 vendor/symfony/var-dumper/Server/Connection.php delete mode 100644 vendor/symfony/var-dumper/Server/DumpServer.php delete mode 100644 vendor/symfony/var-dumper/Test/VarDumperTestTrait.php delete mode 100644 vendor/symfony/var-dumper/VarDumper.php delete mode 100644 vendor/symfony/var-dumper/composer.json delete mode 100644 vendor/symfony/var-exporter/CHANGELOG.md delete mode 100644 vendor/symfony/var-exporter/Exception/ClassNotFoundException.php delete mode 100644 vendor/symfony/var-exporter/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/var-exporter/Exception/LogicException.php delete mode 100644 vendor/symfony/var-exporter/Exception/NotInstantiableTypeException.php delete mode 100644 vendor/symfony/var-exporter/Hydrator.php delete mode 100644 vendor/symfony/var-exporter/Instantiator.php delete mode 100644 vendor/symfony/var-exporter/Internal/Exporter.php delete mode 100644 vendor/symfony/var-exporter/Internal/Hydrator.php delete mode 100644 vendor/symfony/var-exporter/Internal/LazyObjectRegistry.php delete mode 100644 vendor/symfony/var-exporter/Internal/LazyObjectState.php delete mode 100644 vendor/symfony/var-exporter/Internal/LazyObjectTrait.php delete mode 100644 vendor/symfony/var-exporter/Internal/Reference.php delete mode 100644 vendor/symfony/var-exporter/Internal/Registry.php delete mode 100644 vendor/symfony/var-exporter/Internal/Values.php delete mode 100644 vendor/symfony/var-exporter/LazyGhostTrait.php delete mode 100644 vendor/symfony/var-exporter/LazyObjectInterface.php delete mode 100644 vendor/symfony/var-exporter/LazyProxyTrait.php delete mode 100644 vendor/symfony/var-exporter/ProxyHelper.php delete mode 100644 vendor/symfony/var-exporter/README.md delete mode 100644 vendor/symfony/var-exporter/VarExporter.php delete mode 100644 vendor/symfony/var-exporter/composer.json delete mode 100644 vendor/symfony/web-link/CHANGELOG.md delete mode 100644 vendor/symfony/web-link/EventListener/AddLinkHeaderListener.php delete mode 100644 vendor/symfony/web-link/GenericLinkProvider.php delete mode 100644 vendor/symfony/web-link/HttpHeaderSerializer.php delete mode 100644 vendor/symfony/web-link/Link.php delete mode 100644 vendor/symfony/web-link/README.md delete mode 100644 vendor/symfony/web-link/composer.json delete mode 100644 vendor/symfony/web-profiler-bundle/.gitattributes delete mode 100644 vendor/symfony/web-profiler-bundle/.gitignore delete mode 100644 vendor/symfony/web-profiler-bundle/CHANGELOG.md delete mode 100644 vendor/symfony/web-profiler-bundle/Controller/ExceptionPanelController.php delete mode 100644 vendor/symfony/web-profiler-bundle/Controller/ProfilerController.php delete mode 100644 vendor/symfony/web-profiler-bundle/Controller/RouterController.php delete mode 100644 vendor/symfony/web-profiler-bundle/Csp/ContentSecurityPolicyHandler.php delete mode 100644 vendor/symfony/web-profiler-bundle/Csp/NonceGenerator.php delete mode 100644 vendor/symfony/web-profiler-bundle/DependencyInjection/Configuration.php delete mode 100644 vendor/symfony/web-profiler-bundle/DependencyInjection/WebProfilerExtension.php delete mode 100644 vendor/symfony/web-profiler-bundle/EventListener/WebDebugToolbarListener.php delete mode 100644 vendor/symfony/web-profiler-bundle/Profiler/CodeExtension.php delete mode 100644 vendor/symfony/web-profiler-bundle/Profiler/TemplateManager.php delete mode 100644 vendor/symfony/web-profiler-bundle/README.md delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/config/profiler.php delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/config/routing/profiler.xml delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/config/routing/wdt.xml delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/config/schema/webprofiler-1.0.xsd delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/config/toolbar.php delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/fonts/JetBrainsMono.woff2 delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/fonts/LICENSE.txt delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/ajax.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/cache.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/command.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/config.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/events.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/exception.css.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/exception.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/form.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/http_client.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/logger.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/mailer.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/memory.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/messenger.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/notifier.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/request.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/router.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/serializer.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/time.css.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/time.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/time.js delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/translation.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/twig.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/validator.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Collector/workflow.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/LICENSE.txt delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/ajax.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/alert-circle.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/attachment.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/cache.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/chevron-down.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/close.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/command.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/config.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/download.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/event.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/exception.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/file.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/filter.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/form.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/forward.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/http-client.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/logger.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/mailer.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/memory.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/menu.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/messenger.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/no.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/notifier.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/redirect.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/referrer.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/request.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/router.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/search.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/serializer.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/settings-theme-dark.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/settings-theme-light.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/settings-theme-system.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/settings-width-fitted.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/settings-width-fixed.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/settings.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/symfony.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/time.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/translation.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/twig.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/validator.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/workflow.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Icon/yes.svg delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/_command_summary.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/_request_summary.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/ajax_layout.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/bag.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/base.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/base_js.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/cancel.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/header.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/info.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/layout.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/open.css.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/open.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/profiler.css.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/results.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/search.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/settings.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/table.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/toolbar.css.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/toolbar.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/toolbar_item.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/toolbar_js.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Profiler/toolbar_redirect.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Router/panel.html.twig delete mode 100644 vendor/symfony/web-profiler-bundle/Resources/views/Script/Mermaid/mermaid-flowchart-v2.min.js delete mode 100644 vendor/symfony/web-profiler-bundle/Twig/WebProfilerExtension.php delete mode 100644 vendor/symfony/web-profiler-bundle/WebProfilerBundle.php delete mode 100644 vendor/symfony/web-profiler-bundle/composer.json delete mode 100644 vendor/symfony/yaml/CHANGELOG.md delete mode 100644 vendor/symfony/yaml/Command/LintCommand.php delete mode 100644 vendor/symfony/yaml/Dumper.php delete mode 100644 vendor/symfony/yaml/Escaper.php delete mode 100644 vendor/symfony/yaml/Exception/DumpException.php delete mode 100644 vendor/symfony/yaml/Exception/ExceptionInterface.php delete mode 100644 vendor/symfony/yaml/Exception/ParseException.php delete mode 100644 vendor/symfony/yaml/Exception/RuntimeException.php delete mode 100644 vendor/symfony/yaml/Inline.php delete mode 100644 vendor/symfony/yaml/Parser.php delete mode 100644 vendor/symfony/yaml/README.md delete mode 100644 vendor/symfony/yaml/Tag/TaggedValue.php delete mode 100644 vendor/symfony/yaml/Unescaper.php delete mode 100644 vendor/symfony/yaml/Yaml.php delete mode 100644 vendor/symfony/yaml/composer.json delete mode 100644 vendor/theseer/tokenizer/CHANGELOG.md delete mode 100644 vendor/theseer/tokenizer/README.md delete mode 100644 vendor/theseer/tokenizer/composer.json delete mode 100644 vendor/theseer/tokenizer/composer.lock delete mode 100644 vendor/theseer/tokenizer/src/Exception.php delete mode 100644 vendor/theseer/tokenizer/src/NamespaceUri.php delete mode 100644 vendor/theseer/tokenizer/src/NamespaceUriException.php delete mode 100644 vendor/theseer/tokenizer/src/Token.php delete mode 100644 vendor/theseer/tokenizer/src/TokenCollection.php delete mode 100644 vendor/theseer/tokenizer/src/TokenCollectionException.php delete mode 100644 vendor/theseer/tokenizer/src/Tokenizer.php delete mode 100644 vendor/theseer/tokenizer/src/XMLSerializer.php delete mode 100644 vendor/twig/extra-bundle/.gitattributes delete mode 100644 vendor/twig/extra-bundle/.gitignore delete mode 100644 vendor/twig/extra-bundle/DependencyInjection/Compiler/MissingExtensionSuggestorPass.php delete mode 100644 vendor/twig/extra-bundle/DependencyInjection/Configuration.php delete mode 100644 vendor/twig/extra-bundle/DependencyInjection/TwigExtraExtension.php delete mode 100644 vendor/twig/extra-bundle/Extensions.php delete mode 100644 vendor/twig/extra-bundle/LeagueCommonMarkConverterFactory.php delete mode 100644 vendor/twig/extra-bundle/MissingExtensionSuggestor.php delete mode 100644 vendor/twig/extra-bundle/README.md delete mode 100644 vendor/twig/extra-bundle/Resources/config/cache.php delete mode 100644 vendor/twig/extra-bundle/Resources/config/cssinliner.php delete mode 100644 vendor/twig/extra-bundle/Resources/config/html.php delete mode 100644 vendor/twig/extra-bundle/Resources/config/inky.php delete mode 100644 vendor/twig/extra-bundle/Resources/config/intl.php delete mode 100644 vendor/twig/extra-bundle/Resources/config/markdown.php delete mode 100644 vendor/twig/extra-bundle/Resources/config/markdown_league.php delete mode 100644 vendor/twig/extra-bundle/Resources/config/string.php delete mode 100644 vendor/twig/extra-bundle/Resources/config/suggestor.php delete mode 100644 vendor/twig/extra-bundle/TwigExtraBundle.php delete mode 100644 vendor/twig/extra-bundle/composer.json delete mode 100644 vendor/twig/twig/README.rst delete mode 100644 vendor/twig/twig/composer.json delete mode 100644 vendor/twig/twig/src/AbstractTwigCallable.php delete mode 100644 vendor/twig/twig/src/Attribute/FirstClassTwigCallableReady.php delete mode 100644 vendor/twig/twig/src/Attribute/YieldReady.php delete mode 100644 vendor/twig/twig/src/Cache/CacheInterface.php delete mode 100644 vendor/twig/twig/src/Cache/ChainCache.php delete mode 100644 vendor/twig/twig/src/Cache/FilesystemCache.php delete mode 100644 vendor/twig/twig/src/Cache/NullCache.php delete mode 100644 vendor/twig/twig/src/Cache/ReadOnlyFilesystemCache.php delete mode 100644 vendor/twig/twig/src/Compiler.php delete mode 100644 vendor/twig/twig/src/Environment.php delete mode 100644 vendor/twig/twig/src/Error/Error.php delete mode 100644 vendor/twig/twig/src/Error/LoaderError.php delete mode 100644 vendor/twig/twig/src/Error/RuntimeError.php delete mode 100644 vendor/twig/twig/src/Error/SyntaxError.php delete mode 100644 vendor/twig/twig/src/ExpressionParser.php delete mode 100644 vendor/twig/twig/src/Extension/AbstractExtension.php delete mode 100644 vendor/twig/twig/src/Extension/CoreExtension.php delete mode 100644 vendor/twig/twig/src/Extension/DebugExtension.php delete mode 100644 vendor/twig/twig/src/Extension/EscaperExtension.php delete mode 100644 vendor/twig/twig/src/Extension/ExtensionInterface.php delete mode 100644 vendor/twig/twig/src/Extension/GlobalsInterface.php delete mode 100644 vendor/twig/twig/src/Extension/OptimizerExtension.php delete mode 100644 vendor/twig/twig/src/Extension/ProfilerExtension.php delete mode 100644 vendor/twig/twig/src/Extension/RuntimeExtensionInterface.php delete mode 100644 vendor/twig/twig/src/Extension/SandboxExtension.php delete mode 100644 vendor/twig/twig/src/Extension/StagingExtension.php delete mode 100644 vendor/twig/twig/src/Extension/StringLoaderExtension.php delete mode 100644 vendor/twig/twig/src/Extension/YieldNotReadyExtension.php delete mode 100644 vendor/twig/twig/src/ExtensionSet.php delete mode 100644 vendor/twig/twig/src/FileExtensionEscapingStrategy.php delete mode 100644 vendor/twig/twig/src/Lexer.php delete mode 100644 vendor/twig/twig/src/Loader/ArrayLoader.php delete mode 100644 vendor/twig/twig/src/Loader/ChainLoader.php delete mode 100644 vendor/twig/twig/src/Loader/FilesystemLoader.php delete mode 100644 vendor/twig/twig/src/Loader/LoaderInterface.php delete mode 100644 vendor/twig/twig/src/Markup.php delete mode 100644 vendor/twig/twig/src/Node/AutoEscapeNode.php delete mode 100644 vendor/twig/twig/src/Node/BlockNode.php delete mode 100644 vendor/twig/twig/src/Node/BlockReferenceNode.php delete mode 100644 vendor/twig/twig/src/Node/BodyNode.php delete mode 100644 vendor/twig/twig/src/Node/CaptureNode.php delete mode 100644 vendor/twig/twig/src/Node/CheckSecurityCallNode.php delete mode 100644 vendor/twig/twig/src/Node/CheckSecurityNode.php delete mode 100644 vendor/twig/twig/src/Node/CheckToStringNode.php delete mode 100644 vendor/twig/twig/src/Node/DeprecatedNode.php delete mode 100644 vendor/twig/twig/src/Node/DoNode.php delete mode 100644 vendor/twig/twig/src/Node/EmbedNode.php delete mode 100644 vendor/twig/twig/src/Node/Expression/AbstractExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/ArrayExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/ArrowFunctionExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/AssignNameExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/AbstractBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/AddBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/AndBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/BitwiseAndBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/BitwiseOrBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/BitwiseXorBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/ConcatBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/DivBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/EndsWithBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/EqualBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/FloorDivBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/GreaterBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/GreaterEqualBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/HasEveryBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/HasSomeBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/InBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/LessBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/LessEqualBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/MatchesBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/ModBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/MulBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/NotEqualBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/NotInBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/OrBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/PowerBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/RangeBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/SpaceshipBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/StartsWithBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Binary/SubBinary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/BlockReferenceExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/CallExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/ConditionalExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/ConstantExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Filter/DefaultFilter.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Filter/RawFilter.php delete mode 100644 vendor/twig/twig/src/Node/Expression/FilterExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/FunctionExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/FunctionNode/EnumCasesFunction.php delete mode 100644 vendor/twig/twig/src/Node/Expression/GetAttrExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/InlinePrint.php delete mode 100644 vendor/twig/twig/src/Node/Expression/MethodCallExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/NameExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/NullCoalesceExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/ParentExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/TempNameExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Test/ConstantTest.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Test/DefinedTest.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Test/DivisiblebyTest.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Test/EvenTest.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Test/NullTest.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Test/OddTest.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Test/SameasTest.php delete mode 100644 vendor/twig/twig/src/Node/Expression/TestExpression.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Unary/AbstractUnary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Unary/NegUnary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Unary/NotUnary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/Unary/PosUnary.php delete mode 100644 vendor/twig/twig/src/Node/Expression/VariadicExpression.php delete mode 100644 vendor/twig/twig/src/Node/FlushNode.php delete mode 100644 vendor/twig/twig/src/Node/ForLoopNode.php delete mode 100644 vendor/twig/twig/src/Node/ForNode.php delete mode 100644 vendor/twig/twig/src/Node/IfNode.php delete mode 100644 vendor/twig/twig/src/Node/ImportNode.php delete mode 100644 vendor/twig/twig/src/Node/IncludeNode.php delete mode 100644 vendor/twig/twig/src/Node/MacroNode.php delete mode 100644 vendor/twig/twig/src/Node/ModuleNode.php delete mode 100644 vendor/twig/twig/src/Node/NameDeprecation.php delete mode 100644 vendor/twig/twig/src/Node/Node.php delete mode 100644 vendor/twig/twig/src/Node/NodeCaptureInterface.php delete mode 100644 vendor/twig/twig/src/Node/NodeOutputInterface.php delete mode 100644 vendor/twig/twig/src/Node/PrintNode.php delete mode 100644 vendor/twig/twig/src/Node/SandboxNode.php delete mode 100644 vendor/twig/twig/src/Node/SetNode.php delete mode 100644 vendor/twig/twig/src/Node/TextNode.php delete mode 100644 vendor/twig/twig/src/Node/TypesNode.php delete mode 100644 vendor/twig/twig/src/Node/WithNode.php delete mode 100644 vendor/twig/twig/src/NodeTraverser.php delete mode 100644 vendor/twig/twig/src/NodeVisitor/AbstractNodeVisitor.php delete mode 100644 vendor/twig/twig/src/NodeVisitor/EscaperNodeVisitor.php delete mode 100644 vendor/twig/twig/src/NodeVisitor/MacroAutoImportNodeVisitor.php delete mode 100644 vendor/twig/twig/src/NodeVisitor/NodeVisitorInterface.php delete mode 100644 vendor/twig/twig/src/NodeVisitor/OptimizerNodeVisitor.php delete mode 100644 vendor/twig/twig/src/NodeVisitor/SafeAnalysisNodeVisitor.php delete mode 100644 vendor/twig/twig/src/NodeVisitor/SandboxNodeVisitor.php delete mode 100644 vendor/twig/twig/src/NodeVisitor/YieldNotReadyNodeVisitor.php delete mode 100644 vendor/twig/twig/src/Parser.php delete mode 100644 vendor/twig/twig/src/Profiler/Dumper/BaseDumper.php delete mode 100644 vendor/twig/twig/src/Profiler/Dumper/BlackfireDumper.php delete mode 100644 vendor/twig/twig/src/Profiler/Dumper/HtmlDumper.php delete mode 100644 vendor/twig/twig/src/Profiler/Dumper/TextDumper.php delete mode 100644 vendor/twig/twig/src/Profiler/Node/EnterProfileNode.php delete mode 100644 vendor/twig/twig/src/Profiler/Node/LeaveProfileNode.php delete mode 100644 vendor/twig/twig/src/Profiler/NodeVisitor/ProfilerNodeVisitor.php delete mode 100644 vendor/twig/twig/src/Profiler/Profile.php delete mode 100644 vendor/twig/twig/src/Resources/core.php delete mode 100644 vendor/twig/twig/src/Resources/debug.php delete mode 100644 vendor/twig/twig/src/Resources/escaper.php delete mode 100644 vendor/twig/twig/src/Resources/string_loader.php delete mode 100644 vendor/twig/twig/src/Runtime/EscaperRuntime.php delete mode 100644 vendor/twig/twig/src/RuntimeLoader/ContainerRuntimeLoader.php delete mode 100644 vendor/twig/twig/src/RuntimeLoader/FactoryRuntimeLoader.php delete mode 100644 vendor/twig/twig/src/RuntimeLoader/RuntimeLoaderInterface.php delete mode 100644 vendor/twig/twig/src/Sandbox/SecurityError.php delete mode 100644 vendor/twig/twig/src/Sandbox/SecurityNotAllowedFilterError.php delete mode 100644 vendor/twig/twig/src/Sandbox/SecurityNotAllowedFunctionError.php delete mode 100644 vendor/twig/twig/src/Sandbox/SecurityNotAllowedMethodError.php delete mode 100644 vendor/twig/twig/src/Sandbox/SecurityNotAllowedPropertyError.php delete mode 100644 vendor/twig/twig/src/Sandbox/SecurityNotAllowedTagError.php delete mode 100644 vendor/twig/twig/src/Sandbox/SecurityPolicy.php delete mode 100644 vendor/twig/twig/src/Sandbox/SecurityPolicyInterface.php delete mode 100644 vendor/twig/twig/src/Sandbox/SourcePolicyInterface.php delete mode 100644 vendor/twig/twig/src/Source.php delete mode 100644 vendor/twig/twig/src/Template.php delete mode 100644 vendor/twig/twig/src/TemplateWrapper.php delete mode 100644 vendor/twig/twig/src/Test/IntegrationTestCase.php delete mode 100644 vendor/twig/twig/src/Test/NodeTestCase.php delete mode 100644 vendor/twig/twig/src/Token.php delete mode 100644 vendor/twig/twig/src/TokenParser/AbstractTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/ApplyTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/AutoEscapeTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/BlockTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/DeprecatedTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/DoTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/EmbedTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/ExtendsTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/FlushTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/ForTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/FromTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/IfTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/ImportTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/IncludeTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/MacroTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/SandboxTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/SetTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/TokenParserInterface.php delete mode 100644 vendor/twig/twig/src/TokenParser/TypesTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/UseTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenParser/WithTokenParser.php delete mode 100644 vendor/twig/twig/src/TokenStream.php delete mode 100644 vendor/twig/twig/src/TwigCallableInterface.php delete mode 100644 vendor/twig/twig/src/TwigFilter.php delete mode 100644 vendor/twig/twig/src/TwigFunction.php delete mode 100644 vendor/twig/twig/src/TwigTest.php delete mode 100644 vendor/twig/twig/src/Util/CallableArgumentsExtractor.php delete mode 100644 vendor/twig/twig/src/Util/DeprecationCollector.php delete mode 100644 vendor/twig/twig/src/Util/ReflectionCallable.php delete mode 100644 vendor/twig/twig/src/Util/TemplateDirIterator.php delete mode 100644 vendor/webmozart/assert/CHANGELOG.md delete mode 100644 vendor/webmozart/assert/README.md delete mode 100644 vendor/webmozart/assert/composer.json delete mode 100644 vendor/webmozart/assert/src/Assert.php delete mode 100644 vendor/webmozart/assert/src/InvalidArgumentException.php delete mode 100644 vendor/webmozart/assert/src/Mixin.php diff --git a/.idea/php.xml b/.idea/php.xml index ae79c28..156bd8f 100644 --- a/.idea/php.xml +++ b/.idea/php.xml @@ -74,10 +74,8 @@ - - diff --git a/vendor/composer/ClassLoader.php b/vendor/composer/ClassLoader.php deleted file mode 100644 index a72151c..0000000 --- a/vendor/composer/ClassLoader.php +++ /dev/null @@ -1,585 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer\Autoload; - -/** - * ClassLoader implements a PSR-0, PSR-4 and classmap class loader. - * - * $loader = new \Composer\Autoload\ClassLoader(); - * - * // register classes with namespaces - * $loader->add('Symfony\Component', __DIR__.'/component'); - * $loader->add('Symfony', __DIR__.'/framework'); - * - * // activate the autoloader - * $loader->register(); - * - * // to enable searching the include path (eg. for PEAR packages) - * $loader->setUseIncludePath(true); - * - * In this example, if you try to use a class in the Symfony\Component - * namespace or one of its children (Symfony\Component\Console for instance), - * the autoloader will first look for the class under the component/ - * directory, and it will then fallback to the framework/ directory if not - * found before giving up. - * - * This class is loosely based on the Symfony UniversalClassLoader. - * - * @author Fabien Potencier - * @author Jordi Boggiano - * @see https://www.php-fig.org/psr/psr-0/ - * @see https://www.php-fig.org/psr/psr-4/ - */ -class ClassLoader -{ - /** @var \Closure(string):void */ - private static $includeFile; - - /** @var ?string */ - private $vendorDir; - - // PSR-4 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixLengthsPsr4 = array(); - /** - * @var array[] - * @psalm-var array> - */ - private $prefixDirsPsr4 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr4 = array(); - - // PSR-0 - /** - * @var array[] - * @psalm-var array> - */ - private $prefixesPsr0 = array(); - /** - * @var array[] - * @psalm-var array - */ - private $fallbackDirsPsr0 = array(); - - /** @var bool */ - private $useIncludePath = false; - - /** - * @var string[] - * @psalm-var array - */ - private $classMap = array(); - - /** @var bool */ - private $classMapAuthoritative = false; - - /** - * @var bool[] - * @psalm-var array - */ - private $missingClasses = array(); - - /** @var ?string */ - private $apcuPrefix; - - /** - * @var self[] - */ - private static $registeredLoaders = array(); - - /** - * @param ?string $vendorDir - */ - public function __construct($vendorDir = null) - { - $this->vendorDir = $vendorDir; - self::initializeIncludeClosure(); - } - - /** - * @return string[] - */ - public function getPrefixes() - { - if (!empty($this->prefixesPsr0)) { - return call_user_func_array('array_merge', array_values($this->prefixesPsr0)); - } - - return array(); - } - - /** - * @return array[] - * @psalm-return array> - */ - public function getPrefixesPsr4() - { - return $this->prefixDirsPsr4; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirs() - { - return $this->fallbackDirsPsr0; - } - - /** - * @return array[] - * @psalm-return array - */ - public function getFallbackDirsPsr4() - { - return $this->fallbackDirsPsr4; - } - - /** - * @return string[] Array of classname => path - * @psalm-return array - */ - public function getClassMap() - { - return $this->classMap; - } - - /** - * @param string[] $classMap Class to filename map - * @psalm-param array $classMap - * - * @return void - */ - public function addClassMap(array $classMap) - { - if ($this->classMap) { - $this->classMap = array_merge($this->classMap, $classMap); - } else { - $this->classMap = $classMap; - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, either - * appending or prepending to the ones previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 root directories - * @param bool $prepend Whether to prepend the directories - * - * @return void - */ - public function add($prefix, $paths, $prepend = false) - { - if (!$prefix) { - if ($prepend) { - $this->fallbackDirsPsr0 = array_merge( - (array) $paths, - $this->fallbackDirsPsr0 - ); - } else { - $this->fallbackDirsPsr0 = array_merge( - $this->fallbackDirsPsr0, - (array) $paths - ); - } - - return; - } - - $first = $prefix[0]; - if (!isset($this->prefixesPsr0[$first][$prefix])) { - $this->prefixesPsr0[$first][$prefix] = (array) $paths; - - return; - } - if ($prepend) { - $this->prefixesPsr0[$first][$prefix] = array_merge( - (array) $paths, - $this->prefixesPsr0[$first][$prefix] - ); - } else { - $this->prefixesPsr0[$first][$prefix] = array_merge( - $this->prefixesPsr0[$first][$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, either - * appending or prepending to the ones previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * @param bool $prepend Whether to prepend the directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function addPsr4($prefix, $paths, $prepend = false) - { - if (!$prefix) { - // Register directories for the root namespace. - if ($prepend) { - $this->fallbackDirsPsr4 = array_merge( - (array) $paths, - $this->fallbackDirsPsr4 - ); - } else { - $this->fallbackDirsPsr4 = array_merge( - $this->fallbackDirsPsr4, - (array) $paths - ); - } - } elseif (!isset($this->prefixDirsPsr4[$prefix])) { - // Register directories for a new namespace. - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } elseif ($prepend) { - // Prepend directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - (array) $paths, - $this->prefixDirsPsr4[$prefix] - ); - } else { - // Append directories for an already registered namespace. - $this->prefixDirsPsr4[$prefix] = array_merge( - $this->prefixDirsPsr4[$prefix], - (array) $paths - ); - } - } - - /** - * Registers a set of PSR-0 directories for a given prefix, - * replacing any others previously set for this prefix. - * - * @param string $prefix The prefix - * @param string[]|string $paths The PSR-0 base directories - * - * @return void - */ - public function set($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr0 = (array) $paths; - } else { - $this->prefixesPsr0[$prefix[0]][$prefix] = (array) $paths; - } - } - - /** - * Registers a set of PSR-4 directories for a given namespace, - * replacing any others previously set for this namespace. - * - * @param string $prefix The prefix/namespace, with trailing '\\' - * @param string[]|string $paths The PSR-4 base directories - * - * @throws \InvalidArgumentException - * - * @return void - */ - public function setPsr4($prefix, $paths) - { - if (!$prefix) { - $this->fallbackDirsPsr4 = (array) $paths; - } else { - $length = strlen($prefix); - if ('\\' !== $prefix[$length - 1]) { - throw new \InvalidArgumentException("A non-empty PSR-4 prefix must end with a namespace separator."); - } - $this->prefixLengthsPsr4[$prefix[0]][$prefix] = $length; - $this->prefixDirsPsr4[$prefix] = (array) $paths; - } - } - - /** - * Turns on searching the include path for class files. - * - * @param bool $useIncludePath - * - * @return void - */ - public function setUseIncludePath($useIncludePath) - { - $this->useIncludePath = $useIncludePath; - } - - /** - * Can be used to check if the autoloader uses the include path to check - * for classes. - * - * @return bool - */ - public function getUseIncludePath() - { - return $this->useIncludePath; - } - - /** - * Turns off searching the prefix and fallback directories for classes - * that have not been registered with the class map. - * - * @param bool $classMapAuthoritative - * - * @return void - */ - public function setClassMapAuthoritative($classMapAuthoritative) - { - $this->classMapAuthoritative = $classMapAuthoritative; - } - - /** - * Should class lookup fail if not found in the current class map? - * - * @return bool - */ - public function isClassMapAuthoritative() - { - return $this->classMapAuthoritative; - } - - /** - * APCu prefix to use to cache found/not-found classes, if the extension is enabled. - * - * @param string|null $apcuPrefix - * - * @return void - */ - public function setApcuPrefix($apcuPrefix) - { - $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; - } - - /** - * The APCu prefix in use, or null if APCu caching is not enabled. - * - * @return string|null - */ - public function getApcuPrefix() - { - return $this->apcuPrefix; - } - - /** - * Registers this instance as an autoloader. - * - * @param bool $prepend Whether to prepend the autoloader or not - * - * @return void - */ - public function register($prepend = false) - { - spl_autoload_register(array($this, 'loadClass'), true, $prepend); - - if (null === $this->vendorDir) { - return; - } - - if ($prepend) { - self::$registeredLoaders = array($this->vendorDir => $this) + self::$registeredLoaders; - } else { - unset(self::$registeredLoaders[$this->vendorDir]); - self::$registeredLoaders[$this->vendorDir] = $this; - } - } - - /** - * Unregisters this instance as an autoloader. - * - * @return void - */ - public function unregister() - { - spl_autoload_unregister(array($this, 'loadClass')); - - if (null !== $this->vendorDir) { - unset(self::$registeredLoaders[$this->vendorDir]); - } - } - - /** - * Loads the given class or interface. - * - * @param string $class The name of the class - * @return true|null True if loaded, null otherwise - */ - public function loadClass($class) - { - if ($file = $this->findFile($class)) { - $includeFile = self::$includeFile; - $includeFile($file); - - return true; - } - - return null; - } - - /** - * Finds the path to the file where the class is defined. - * - * @param string $class The name of the class - * - * @return string|false The path if found, false otherwise - */ - public function findFile($class) - { - // class map lookup - if (isset($this->classMap[$class])) { - return $this->classMap[$class]; - } - if ($this->classMapAuthoritative || isset($this->missingClasses[$class])) { - return false; - } - if (null !== $this->apcuPrefix) { - $file = apcu_fetch($this->apcuPrefix.$class, $hit); - if ($hit) { - return $file; - } - } - - $file = $this->findFileWithExtension($class, '.php'); - - // Search for Hack files if we are running on HHVM - if (false === $file && defined('HHVM_VERSION')) { - $file = $this->findFileWithExtension($class, '.hh'); - } - - if (null !== $this->apcuPrefix) { - apcu_add($this->apcuPrefix.$class, $file); - } - - if (false === $file) { - // Remember that this class does not exist. - $this->missingClasses[$class] = true; - } - - return $file; - } - - /** - * Returns the currently registered loaders indexed by their corresponding vendor directories. - * - * @return self[] - */ - public static function getRegisteredLoaders() - { - return self::$registeredLoaders; - } - - /** - * @param string $class - * @param string $ext - * @return string|false - */ - private function findFileWithExtension($class, $ext) - { - // PSR-4 lookup - $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; - - $first = $class[0]; - if (isset($this->prefixLengthsPsr4[$first])) { - $subPath = $class; - while (false !== $lastPos = strrpos($subPath, '\\')) { - $subPath = substr($subPath, 0, $lastPos); - $search = $subPath . '\\'; - if (isset($this->prefixDirsPsr4[$search])) { - $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); - foreach ($this->prefixDirsPsr4[$search] as $dir) { - if (file_exists($file = $dir . $pathEnd)) { - return $file; - } - } - } - } - } - - // PSR-4 fallback dirs - foreach ($this->fallbackDirsPsr4 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { - return $file; - } - } - - // PSR-0 lookup - if (false !== $pos = strrpos($class, '\\')) { - // namespaced class name - $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) - . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); - } else { - // PEAR-like class name - $logicalPathPsr0 = strtr($class, '_', DIRECTORY_SEPARATOR) . $ext; - } - - if (isset($this->prefixesPsr0[$first])) { - foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) { - if (0 === strpos($class, $prefix)) { - foreach ($dirs as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - } - } - } - - // PSR-0 fallback dirs - foreach ($this->fallbackDirsPsr0 as $dir) { - if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) { - return $file; - } - } - - // PSR-0 include paths. - if ($this->useIncludePath && $file = stream_resolve_include_path($logicalPathPsr0)) { - return $file; - } - - return false; - } - - /** - * @return void - */ - private static function initializeIncludeClosure() - { - if (self::$includeFile !== null) { - return; - } - - /** - * Scope isolated include. - * - * Prevents access to $this/self from included files. - * - * @param string $file - * @return void - */ - self::$includeFile = \Closure::bind(static function($file) { - include $file; - }, null, null); - } -} diff --git a/vendor/composer/InstalledVersions.php b/vendor/composer/InstalledVersions.php deleted file mode 100644 index 51e734a..0000000 --- a/vendor/composer/InstalledVersions.php +++ /dev/null @@ -1,359 +0,0 @@ - - * Jordi Boggiano - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Composer; - -use Composer\Autoload\ClassLoader; -use Composer\Semver\VersionParser; - -/** - * This class is copied in every Composer installed project and available to all - * - * See also https://getcomposer.org/doc/07-runtime.md#installed-versions - * - * To require its presence, you can require `composer-runtime-api ^2.0` - * - * @final - */ -class InstalledVersions -{ - /** - * @var mixed[]|null - * @psalm-var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array}|array{}|null - */ - private static $installed; - - /** - * @var bool|null - */ - private static $canGetVendors; - - /** - * @var array[] - * @psalm-var array}> - */ - private static $installedByVendor = array(); - - /** - * Returns a list of all package names which are present, either by being installed, replaced or provided - * - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackages() - { - $packages = array(); - foreach (self::getInstalled() as $installed) { - $packages[] = array_keys($installed['versions']); - } - - if (1 === \count($packages)) { - return $packages[0]; - } - - return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); - } - - /** - * Returns a list of all package names with a specific type e.g. 'library' - * - * @param string $type - * @return string[] - * @psalm-return list - */ - public static function getInstalledPackagesByType($type) - { - $packagesByType = array(); - - foreach (self::getInstalled() as $installed) { - foreach ($installed['versions'] as $name => $package) { - if (isset($package['type']) && $package['type'] === $type) { - $packagesByType[] = $name; - } - } - } - - return $packagesByType; - } - - /** - * Checks whether the given package is installed - * - * This also returns true if the package name is provided or replaced by another package - * - * @param string $packageName - * @param bool $includeDevRequirements - * @return bool - */ - public static function isInstalled($packageName, $includeDevRequirements = true) - { - foreach (self::getInstalled() as $installed) { - if (isset($installed['versions'][$packageName])) { - return $includeDevRequirements || !isset($installed['versions'][$packageName]['dev_requirement']) || $installed['versions'][$packageName]['dev_requirement'] === false; - } - } - - return false; - } - - /** - * Checks whether the given package satisfies a version constraint - * - * e.g. If you want to know whether version 2.3+ of package foo/bar is installed, you would call: - * - * Composer\InstalledVersions::satisfies(new VersionParser, 'foo/bar', '^2.3') - * - * @param VersionParser $parser Install composer/semver to have access to this class and functionality - * @param string $packageName - * @param string|null $constraint A version constraint to check for, if you pass one you have to make sure composer/semver is required by your package - * @return bool - */ - public static function satisfies(VersionParser $parser, $packageName, $constraint) - { - $constraint = $parser->parseConstraints((string) $constraint); - $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); - - return $provided->matches($constraint); - } - - /** - * Returns a version constraint representing all the range(s) which are installed for a given package - * - * It is easier to use this via isInstalled() with the $constraint argument if you need to check - * whether a given version of a package is installed, and not just whether it exists - * - * @param string $packageName - * @return string Version constraint usable with composer/semver - */ - public static function getVersionRanges($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - $ranges = array(); - if (isset($installed['versions'][$packageName]['pretty_version'])) { - $ranges[] = $installed['versions'][$packageName]['pretty_version']; - } - if (array_key_exists('aliases', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); - } - if (array_key_exists('replaced', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); - } - if (array_key_exists('provided', $installed['versions'][$packageName])) { - $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); - } - - return implode(' || ', $ranges); - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['version'])) { - return null; - } - - return $installed['versions'][$packageName]['version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as version, use satisfies or getVersionRanges if you need to know if a given version is present - */ - public static function getPrettyVersion($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['pretty_version'])) { - return null; - } - - return $installed['versions'][$packageName]['pretty_version']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as reference - */ - public static function getReference($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - if (!isset($installed['versions'][$packageName]['reference'])) { - return null; - } - - return $installed['versions'][$packageName]['reference']; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @param string $packageName - * @return string|null If the package is being replaced or provided but is not really installed, null will be returned as install path. Packages of type metapackages also have a null install path. - */ - public static function getInstallPath($packageName) - { - foreach (self::getInstalled() as $installed) { - if (!isset($installed['versions'][$packageName])) { - continue; - } - - return isset($installed['versions'][$packageName]['install_path']) ? $installed['versions'][$packageName]['install_path'] : null; - } - - throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); - } - - /** - * @return array - * @psalm-return array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool} - */ - public static function getRootPackage() - { - $installed = self::getInstalled(); - - return $installed[0]['root']; - } - - /** - * Returns the raw installed.php data for custom implementations - * - * @deprecated Use getAllRawData() instead which returns all datasets for all autoloaders present in the process. getRawData only returns the first dataset loaded, which may not be what you expect. - * @return array[] - * @psalm-return array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} - */ - public static function getRawData() - { - @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - self::$installed = include __DIR__ . '/installed.php'; - } else { - self::$installed = array(); - } - } - - return self::$installed; - } - - /** - * Returns the raw data of all installed.php which are currently loaded for custom implementations - * - * @return array[] - * @psalm-return list}> - */ - public static function getAllRawData() - { - return self::getInstalled(); - } - - /** - * Lets you reload the static array from another file - * - * This is only useful for complex integrations in which a project needs to use - * this class but then also needs to execute another project's autoloader in process, - * and wants to ensure both projects have access to their version of installed.php. - * - * A typical case would be PHPUnit, where it would need to make sure it reads all - * the data it needs from this class, then call reload() with - * `require $CWD/vendor/composer/installed.php` (or similar) as input to make sure - * the project in which it runs can then also use this class safely, without - * interference between PHPUnit's dependencies and the project's dependencies. - * - * @param array[] $data A vendor/composer/installed.php data set - * @return void - * - * @psalm-param array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $data - */ - public static function reload($data) - { - self::$installed = $data; - self::$installedByVendor = array(); - } - - /** - * @return array[] - * @psalm-return list}> - */ - private static function getInstalled() - { - if (null === self::$canGetVendors) { - self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); - } - - $installed = array(); - - if (self::$canGetVendors) { - foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { - if (isset(self::$installedByVendor[$vendorDir])) { - $installed[] = self::$installedByVendor[$vendorDir]; - } elseif (is_file($vendorDir.'/composer/installed.php')) { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require $vendorDir.'/composer/installed.php'; - $installed[] = self::$installedByVendor[$vendorDir] = $required; - if (null === self::$installed && strtr($vendorDir.'/composer', '\\', '/') === strtr(__DIR__, '\\', '/')) { - self::$installed = $installed[count($installed) - 1]; - } - } - } - } - - if (null === self::$installed) { - // only require the installed.php file if this file is loaded from its dumped location, - // and not from its source location in the composer/composer package, see https://github.com/composer/composer/issues/9937 - if (substr(__DIR__, -8, 1) !== 'C') { - /** @var array{root: array{name: string, pretty_version: string, version: string, reference: string|null, type: string, install_path: string, aliases: string[], dev: bool}, versions: array} $required */ - $required = require __DIR__ . '/installed.php'; - self::$installed = $required; - } else { - self::$installed = array(); - } - } - - if (self::$installed !== array()) { - $installed[] = self::$installed; - } - - return $installed; - } -} diff --git a/vendor/composer/autoload_classmap.php b/vendor/composer/autoload_classmap.php deleted file mode 100644 index 4068764..0000000 --- a/vendor/composer/autoload_classmap.php +++ /dev/null @@ -1,656 +0,0 @@ - $vendorDir . '/symfony/polyfill-intl-icu/Resources/stubs/Collator.php', - 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php', - 'DateError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateError.php', - 'DateException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateException.php', - 'DateInvalidOperationException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php', - 'DateInvalidTimeZoneException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php', - 'DateMalformedIntervalStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php', - 'DateMalformedPeriodStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php', - 'DateMalformedStringException' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php', - 'DateObjectError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php', - 'DateRangeError' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php', - 'IntlDateFormatter' => $vendorDir . '/symfony/polyfill-intl-icu/Resources/stubs/IntlDateFormatter.php', - 'Locale' => $vendorDir . '/symfony/polyfill-intl-icu/Resources/stubs/Locale.php', - 'Normalizer' => $vendorDir . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', - 'NumberFormatter' => $vendorDir . '/symfony/polyfill-intl-icu/Resources/stubs/NumberFormatter.php', - 'Override' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/Override.php', - 'PHPUnit\\Exception' => $vendorDir . '/phpunit/phpunit/src/Exception.php', - 'PHPUnit\\Framework\\ActualValueIsNotAnObjectException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ActualValueIsNotAnObjectException.php', - 'PHPUnit\\Framework\\Assert' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit\\Framework\\AssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php', - 'PHPUnit\\Framework\\CodeCoverageException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotAcceptParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareExactlyOneParameterException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareParameterTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotExistException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotExistException.php', - 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/ArrayHasKey.php', - 'PHPUnit\\Framework\\Constraint\\BinaryOperator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/BinaryOperator.php', - 'PHPUnit\\Framework\\Constraint\\Callback' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', - 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasAttribute.php', - 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasStaticAttribute.php', - 'PHPUnit\\Framework\\Constraint\\Constraint' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', - 'PHPUnit\\Framework\\Constraint\\Count' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/Count.php', - 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/DirectoryExists.php', - 'PHPUnit\\Framework\\Constraint\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/Exception.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionCode.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessage.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageRegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\FileExists' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/FileExists.php', - 'PHPUnit\\Framework\\Constraint\\GreaterThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/GreaterThan.php', - 'PHPUnit\\Framework\\Constraint\\IsAnything' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', - 'PHPUnit\\Framework\\Constraint\\IsEmpty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/IsEmpty.php', - 'PHPUnit\\Framework\\Constraint\\IsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqual.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualCanonicalizing' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualCanonicalizing.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualIgnoringCase' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualIgnoringCase.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualWithDelta' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php', - 'PHPUnit\\Framework\\Constraint\\IsFalse' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsFalse.php', - 'PHPUnit\\Framework\\Constraint\\IsFinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsFinite.php', - 'PHPUnit\\Framework\\Constraint\\IsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\IsInfinite' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsInfinite.php', - 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsInstanceOf.php', - 'PHPUnit\\Framework\\Constraint\\IsJson' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/IsJson.php', - 'PHPUnit\\Framework\\Constraint\\IsNan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Math/IsNan.php', - 'PHPUnit\\Framework\\Constraint\\IsNull' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsNull.php', - 'PHPUnit\\Framework\\Constraint\\IsReadable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsReadable.php', - 'PHPUnit\\Framework\\Constraint\\IsTrue' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsTrue.php', - 'PHPUnit\\Framework\\Constraint\\IsType' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Type/IsType.php', - 'PHPUnit\\Framework\\Constraint\\IsWritable' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsWritable.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatches' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', - 'PHPUnit\\Framework\\Constraint\\LessThan' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/LessThan.php', - 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalAnd.php', - 'PHPUnit\\Framework\\Constraint\\LogicalNot' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalNot.php', - 'PHPUnit\\Framework\\Constraint\\LogicalOr' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalOr.php', - 'PHPUnit\\Framework\\Constraint\\LogicalXor' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalXor.php', - 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectEquals.php', - 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasAttribute.php', - 'PHPUnit\\Framework\\Constraint\\ObjectHasProperty' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasProperty.php', - 'PHPUnit\\Framework\\Constraint\\Operator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/Operator.php', - 'PHPUnit\\Framework\\Constraint\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/RegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\SameSize' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/SameSize.php', - 'PHPUnit\\Framework\\Constraint\\StringContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringContains.php', - 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringEndsWith.php', - 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringMatchesFormatDescription.php', - 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/String/StringStartsWith.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContains' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContains.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsEqual.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsOnly.php', - 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => $vendorDir . '/phpunit/phpunit/src/Framework/Constraint/Operator/UnaryOperator.php', - 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php', - 'PHPUnit\\Framework\\DataProviderTestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', - 'PHPUnit\\Framework\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Error.php', - 'PHPUnit\\Framework\\ErrorTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/ErrorTestCase.php', - 'PHPUnit\\Framework\\Error\\Deprecated' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', - 'PHPUnit\\Framework\\Error\\Error' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Error.php', - 'PHPUnit\\Framework\\Error\\Notice' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Notice.php', - 'PHPUnit\\Framework\\Error\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit\\Framework\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Exception.php', - 'PHPUnit\\Framework\\ExceptionWrapper' => $vendorDir . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit\\Framework\\ExecutionOrderDependency' => $vendorDir . '/phpunit/phpunit/src/Framework/ExecutionOrderDependency.php', - 'PHPUnit\\Framework\\ExpectationFailedException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php', - 'PHPUnit\\Framework\\IncompleteTest' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTest.php', - 'PHPUnit\\Framework\\IncompleteTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit\\Framework\\IncompleteTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php', - 'PHPUnit\\Framework\\InvalidArgumentException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php', - 'PHPUnit\\Framework\\InvalidCoversTargetException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php', - 'PHPUnit\\Framework\\InvalidDataProviderException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php', - 'PHPUnit\\Framework\\InvalidParameterGroupException' => $vendorDir . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php', - 'PHPUnit\\Framework\\MissingCoversAnnotationException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php', - 'PHPUnit\\Framework\\MockObject\\Api' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php', - 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseAddMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassAlreadyExistsException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassAlreadyExistsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsFinalException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsFinalException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsReadonlyException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsReadonlyException.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', - 'PHPUnit\\Framework\\MockObject\\DuplicateMethodException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/DuplicateMethodException.php', - 'PHPUnit\\Framework\\MockObject\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Generator' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Generator.php', - 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php', - 'PHPUnit\\Framework\\MockObject\\InvalidMethodNameException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/InvalidMethodNameException.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php', - 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatchBuilderNotFoundException.php', - 'PHPUnit\\Framework\\MockObject\\Matcher' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php', - 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php', - 'PHPUnit\\Framework\\MockObject\\Method' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php', - 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MockBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php', - 'PHPUnit\\Framework\\MockObject\\MockClass' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php', - 'PHPUnit\\Framework\\MockObject\\MockMethod' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php', - 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', - 'PHPUnit\\Framework\\MockObject\\MockTrait' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php', - 'PHPUnit\\Framework\\MockObject\\MockType' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/MockType.php', - 'PHPUnit\\Framework\\MockObject\\OriginalConstructorInvocationRequiredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/OriginalConstructorInvocationRequiredException.php', - 'PHPUnit\\Framework\\MockObject\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReflectionException.php', - 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php', - 'PHPUnit\\Framework\\MockObject\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\SoapExtensionNotAvailableException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/SoapExtensionNotAvailableException.php', - 'PHPUnit\\Framework\\MockObject\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\UnknownClassException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownClassException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTraitException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTraitException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTypeException' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTypeException.php', - 'PHPUnit\\Framework\\MockObject\\Verifiable' => $vendorDir . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php', - 'PHPUnit\\Framework\\NoChildTestSuiteException' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', - 'PHPUnit\\Framework\\OutputError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/OutputError.php', - 'PHPUnit\\Framework\\PHPTAssertionFailedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php', - 'PHPUnit\\Framework\\Reorderable' => $vendorDir . '/phpunit/phpunit/src/Framework/Reorderable.php', - 'PHPUnit\\Framework\\RiskyTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php', - 'PHPUnit\\Framework\\SelfDescribing' => $vendorDir . '/phpunit/phpunit/src/Framework/SelfDescribing.php', - 'PHPUnit\\Framework\\SkippedTest' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTest.php', - 'PHPUnit\\Framework\\SkippedTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit\\Framework\\SkippedTestError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php', - 'PHPUnit\\Framework\\SkippedTestSuiteError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php', - 'PHPUnit\\Framework\\SyntheticError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php', - 'PHPUnit\\Framework\\SyntheticSkippedError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php', - 'PHPUnit\\Framework\\Test' => $vendorDir . '/phpunit/phpunit/src/Framework/Test.php', - 'PHPUnit\\Framework\\TestBuilder' => $vendorDir . '/phpunit/phpunit/src/Framework/TestBuilder.php', - 'PHPUnit\\Framework\\TestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/TestCase.php', - 'PHPUnit\\Framework\\TestFailure' => $vendorDir . '/phpunit/phpunit/src/Framework/TestFailure.php', - 'PHPUnit\\Framework\\TestListener' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListener.php', - 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => $vendorDir . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', - 'PHPUnit\\Framework\\TestResult' => $vendorDir . '/phpunit/phpunit/src/Framework/TestResult.php', - 'PHPUnit\\Framework\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuite.php', - 'PHPUnit\\Framework\\TestSuiteIterator' => $vendorDir . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php', - 'PHPUnit\\Framework\\Warning' => $vendorDir . '/phpunit/phpunit/src/Framework/Exception/Warning.php', - 'PHPUnit\\Framework\\WarningTestCase' => $vendorDir . '/phpunit/phpunit/src/Framework/WarningTestCase.php', - 'PHPUnit\\Runner\\AfterIncompleteTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php', - 'PHPUnit\\Runner\\AfterLastTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php', - 'PHPUnit\\Runner\\AfterRiskyTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php', - 'PHPUnit\\Runner\\AfterSkippedTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php', - 'PHPUnit\\Runner\\AfterSuccessfulTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php', - 'PHPUnit\\Runner\\AfterTestErrorHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php', - 'PHPUnit\\Runner\\AfterTestFailureHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php', - 'PHPUnit\\Runner\\AfterTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php', - 'PHPUnit\\Runner\\AfterTestWarningHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php', - 'PHPUnit\\Runner\\BaseTestRunner' => $vendorDir . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', - 'PHPUnit\\Runner\\BeforeFirstTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php', - 'PHPUnit\\Runner\\BeforeTestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php', - 'PHPUnit\\Runner\\DefaultTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php', - 'PHPUnit\\Runner\\Exception' => $vendorDir . '/phpunit/phpunit/src/Runner/Exception.php', - 'PHPUnit\\Runner\\Extension\\ExtensionHandler' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/ExtensionHandler.php', - 'PHPUnit\\Runner\\Extension\\PharLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/Extension/PharLoader.php', - 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\Factory' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/Factory.php', - 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => $vendorDir . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', - 'PHPUnit\\Runner\\Hook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/Hook.php', - 'PHPUnit\\Runner\\NullTestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/NullTestResultCache.php', - 'PHPUnit\\Runner\\PhptTestCase' => $vendorDir . '/phpunit/phpunit/src/Runner/PhptTestCase.php', - 'PHPUnit\\Runner\\ResultCacheExtension' => $vendorDir . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php', - 'PHPUnit\\Runner\\StandardTestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', - 'PHPUnit\\Runner\\TestHook' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestHook.php', - 'PHPUnit\\Runner\\TestListenerAdapter' => $vendorDir . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php', - 'PHPUnit\\Runner\\TestResultCache' => $vendorDir . '/phpunit/phpunit/src/Runner/TestResultCache.php', - 'PHPUnit\\Runner\\TestSuiteLoader' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', - 'PHPUnit\\Runner\\TestSuiteSorter' => $vendorDir . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php', - 'PHPUnit\\Runner\\Version' => $vendorDir . '/phpunit/phpunit/src/Runner/Version.php', - 'PHPUnit\\TextUI\\CliArguments\\Builder' => $vendorDir . '/phpunit/phpunit/src/TextUI/CliArguments/Builder.php', - 'PHPUnit\\TextUI\\CliArguments\\Configuration' => $vendorDir . '/phpunit/phpunit/src/TextUI/CliArguments/Configuration.php', - 'PHPUnit\\TextUI\\CliArguments\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/CliArguments/Exception.php', - 'PHPUnit\\TextUI\\CliArguments\\Mapper' => $vendorDir . '/phpunit/phpunit/src/TextUI/CliArguments/Mapper.php', - 'PHPUnit\\TextUI\\Command' => $vendorDir . '/phpunit/phpunit/src/TextUI/Command.php', - 'PHPUnit\\TextUI\\DefaultResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/DefaultResultPrinter.php', - 'PHPUnit\\TextUI\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/Exception.php', - 'PHPUnit\\TextUI\\Help' => $vendorDir . '/phpunit/phpunit/src/TextUI/Help.php', - 'PHPUnit\\TextUI\\ReflectionException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/ReflectionException.php', - 'PHPUnit\\TextUI\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', - 'PHPUnit\\TextUI\\RuntimeException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php', - 'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php', - 'PHPUnit\\TextUI\\TestFileNotFoundException' => $vendorDir . '/phpunit/phpunit/src/TextUI/Exception/TestFileNotFoundException.php', - 'PHPUnit\\TextUI\\TestRunner' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestRunner.php', - 'PHPUnit\\TextUI\\TestSuiteMapper' => $vendorDir . '/phpunit/phpunit/src/TextUI/TestSuiteMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/CodeCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\FilterMapper' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/FilterMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\Directory' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/Directory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\DirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\DirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Clover.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Cobertura.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Crap4j.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Html' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Php' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Xml' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Configuration' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Configuration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Constant' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Constant.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConstantCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConstantCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConvertLogTypes' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/ConvertLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCloverToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCloverToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCrap4jToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCrap4jToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageHtmlToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageHtmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoveragePhpToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoveragePhpToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageTextToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageTextToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageXmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Directory' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/Directory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Exception.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Extension' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/Extension.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ExtensionCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ExtensionCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\File' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/File.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FileCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FileCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Generator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Group' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Group.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\GroupCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\GroupCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Groups.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSetting' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSetting.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSettingCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSettingCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCoverageElement' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/IntroduceCoverageElement.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Loader' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Loader.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\LogToReportMigration' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Junit' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Junit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Logging' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Logging.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TeamCity.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Html' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Xml' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Text' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/Migration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilder.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilderException' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilderException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromRootToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistExcludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistIncludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/PHPUnit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Php' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PhpHandler' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheTokensAttribute' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveCacheTokensAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveEmptyFilter' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveEmptyFilter.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLogTypes' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectory' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectoryCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectoryCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFile' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFile.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFileCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFileCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuite' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuite.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocationTo93' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/UpdateSchemaLocationTo93.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Variable' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Variable.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\VariableCollection' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\VariableCollectionIterator' => $vendorDir . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollectionIterator.php', - 'PHPUnit\\Util\\Annotation\\DocBlock' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php', - 'PHPUnit\\Util\\Annotation\\Registry' => $vendorDir . '/phpunit/phpunit/src/Util/Annotation/Registry.php', - 'PHPUnit\\Util\\Blacklist' => $vendorDir . '/phpunit/phpunit/src/Util/Blacklist.php', - 'PHPUnit\\Util\\Cloner' => $vendorDir . '/phpunit/phpunit/src/Util/Cloner.php', - 'PHPUnit\\Util\\Color' => $vendorDir . '/phpunit/phpunit/src/Util/Color.php', - 'PHPUnit\\Util\\ErrorHandler' => $vendorDir . '/phpunit/phpunit/src/Util/ErrorHandler.php', - 'PHPUnit\\Util\\Exception' => $vendorDir . '/phpunit/phpunit/src/Util/Exception.php', - 'PHPUnit\\Util\\ExcludeList' => $vendorDir . '/phpunit/phpunit/src/Util/ExcludeList.php', - 'PHPUnit\\Util\\FileLoader' => $vendorDir . '/phpunit/phpunit/src/Util/FileLoader.php', - 'PHPUnit\\Util\\Filesystem' => $vendorDir . '/phpunit/phpunit/src/Util/Filesystem.php', - 'PHPUnit\\Util\\Filter' => $vendorDir . '/phpunit/phpunit/src/Util/Filter.php', - 'PHPUnit\\Util\\GlobalState' => $vendorDir . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit\\Util\\InvalidDataSetException' => $vendorDir . '/phpunit/phpunit/src/Util/InvalidDataSetException.php', - 'PHPUnit\\Util\\Json' => $vendorDir . '/phpunit/phpunit/src/Util/Json.php', - 'PHPUnit\\Util\\Log\\JUnit' => $vendorDir . '/phpunit/phpunit/src/Util/Log/JUnit.php', - 'PHPUnit\\Util\\Log\\TeamCity' => $vendorDir . '/phpunit/phpunit/src/Util/Log/TeamCity.php', - 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', - 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', - 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => $vendorDir . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', - 'PHPUnit\\Util\\Printer' => $vendorDir . '/phpunit/phpunit/src/Util/Printer.php', - 'PHPUnit\\Util\\Reflection' => $vendorDir . '/phpunit/phpunit/src/Util/Reflection.php', - 'PHPUnit\\Util\\RegularExpression' => $vendorDir . '/phpunit/phpunit/src/Util/RegularExpression.php', - 'PHPUnit\\Util\\Test' => $vendorDir . '/phpunit/phpunit/src/Util/Test.php', - 'PHPUnit\\Util\\TestDox\\CliTestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php', - 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\NamePrettifier' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', - 'PHPUnit\\Util\\TestDox\\ResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php', - 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => $vendorDir . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', - 'PHPUnit\\Util\\TextTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', - 'PHPUnit\\Util\\Type' => $vendorDir . '/phpunit/phpunit/src/Util/Type.php', - 'PHPUnit\\Util\\VersionComparisonOperator' => $vendorDir . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php', - 'PHPUnit\\Util\\XdebugFilterScriptGenerator' => $vendorDir . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php', - 'PHPUnit\\Util\\Xml' => $vendorDir . '/phpunit/phpunit/src/Util/Xml.php', - 'PHPUnit\\Util\\XmlTestListRenderer' => $vendorDir . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', - 'PHPUnit\\Util\\Xml\\Exception' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/Exception.php', - 'PHPUnit\\Util\\Xml\\FailedSchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/FailedSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\Loader' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/Loader.php', - 'PHPUnit\\Util\\Xml\\SchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\SchemaDetector' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SchemaDetector.php', - 'PHPUnit\\Util\\Xml\\SchemaFinder' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SchemaFinder.php', - 'PHPUnit\\Util\\Xml\\SnapshotNodeList' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php', - 'PHPUnit\\Util\\Xml\\SuccessfulSchemaDetectionResult' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/SuccessfulSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\ValidationResult' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/ValidationResult.php', - 'PHPUnit\\Util\\Xml\\Validator' => $vendorDir . '/phpunit/phpunit/src/Util/Xml/Validator.php', - 'PharIo\\Manifest\\Application' => $vendorDir . '/phar-io/manifest/src/values/Application.php', - 'PharIo\\Manifest\\ApplicationName' => $vendorDir . '/phar-io/manifest/src/values/ApplicationName.php', - 'PharIo\\Manifest\\Author' => $vendorDir . '/phar-io/manifest/src/values/Author.php', - 'PharIo\\Manifest\\AuthorCollection' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollection.php', - 'PharIo\\Manifest\\AuthorCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', - 'PharIo\\Manifest\\AuthorElement' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElement.php', - 'PharIo\\Manifest\\AuthorElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/AuthorElementCollection.php', - 'PharIo\\Manifest\\BundledComponent' => $vendorDir . '/phar-io/manifest/src/values/BundledComponent.php', - 'PharIo\\Manifest\\BundledComponentCollection' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollection.php', - 'PharIo\\Manifest\\BundledComponentCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', - 'PharIo\\Manifest\\BundlesElement' => $vendorDir . '/phar-io/manifest/src/xml/BundlesElement.php', - 'PharIo\\Manifest\\ComponentElement' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElement.php', - 'PharIo\\Manifest\\ComponentElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ComponentElementCollection.php', - 'PharIo\\Manifest\\ContainsElement' => $vendorDir . '/phar-io/manifest/src/xml/ContainsElement.php', - 'PharIo\\Manifest\\CopyrightElement' => $vendorDir . '/phar-io/manifest/src/xml/CopyrightElement.php', - 'PharIo\\Manifest\\CopyrightInformation' => $vendorDir . '/phar-io/manifest/src/values/CopyrightInformation.php', - 'PharIo\\Manifest\\ElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ElementCollection.php', - 'PharIo\\Manifest\\ElementCollectionException' => $vendorDir . '/phar-io/manifest/src/exceptions/ElementCollectionException.php', - 'PharIo\\Manifest\\Email' => $vendorDir . '/phar-io/manifest/src/values/Email.php', - 'PharIo\\Manifest\\Exception' => $vendorDir . '/phar-io/manifest/src/exceptions/Exception.php', - 'PharIo\\Manifest\\ExtElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtElement.php', - 'PharIo\\Manifest\\ExtElementCollection' => $vendorDir . '/phar-io/manifest/src/xml/ExtElementCollection.php', - 'PharIo\\Manifest\\Extension' => $vendorDir . '/phar-io/manifest/src/values/Extension.php', - 'PharIo\\Manifest\\ExtensionElement' => $vendorDir . '/phar-io/manifest/src/xml/ExtensionElement.php', - 'PharIo\\Manifest\\InvalidApplicationNameException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', - 'PharIo\\Manifest\\InvalidEmailException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', - 'PharIo\\Manifest\\InvalidUrlException' => $vendorDir . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', - 'PharIo\\Manifest\\Library' => $vendorDir . '/phar-io/manifest/src/values/Library.php', - 'PharIo\\Manifest\\License' => $vendorDir . '/phar-io/manifest/src/values/License.php', - 'PharIo\\Manifest\\LicenseElement' => $vendorDir . '/phar-io/manifest/src/xml/LicenseElement.php', - 'PharIo\\Manifest\\Manifest' => $vendorDir . '/phar-io/manifest/src/values/Manifest.php', - 'PharIo\\Manifest\\ManifestDocument' => $vendorDir . '/phar-io/manifest/src/xml/ManifestDocument.php', - 'PharIo\\Manifest\\ManifestDocumentException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', - 'PharIo\\Manifest\\ManifestDocumentLoadingException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php', - 'PharIo\\Manifest\\ManifestDocumentMapper' => $vendorDir . '/phar-io/manifest/src/ManifestDocumentMapper.php', - 'PharIo\\Manifest\\ManifestDocumentMapperException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', - 'PharIo\\Manifest\\ManifestElement' => $vendorDir . '/phar-io/manifest/src/xml/ManifestElement.php', - 'PharIo\\Manifest\\ManifestElementException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestElementException.php', - 'PharIo\\Manifest\\ManifestLoader' => $vendorDir . '/phar-io/manifest/src/ManifestLoader.php', - 'PharIo\\Manifest\\ManifestLoaderException' => $vendorDir . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', - 'PharIo\\Manifest\\ManifestSerializer' => $vendorDir . '/phar-io/manifest/src/ManifestSerializer.php', - 'PharIo\\Manifest\\NoEmailAddressException' => $vendorDir . '/phar-io/manifest/src/exceptions/NoEmailAddressException.php', - 'PharIo\\Manifest\\PhpElement' => $vendorDir . '/phar-io/manifest/src/xml/PhpElement.php', - 'PharIo\\Manifest\\PhpExtensionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', - 'PharIo\\Manifest\\PhpVersionRequirement' => $vendorDir . '/phar-io/manifest/src/values/PhpVersionRequirement.php', - 'PharIo\\Manifest\\Requirement' => $vendorDir . '/phar-io/manifest/src/values/Requirement.php', - 'PharIo\\Manifest\\RequirementCollection' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollection.php', - 'PharIo\\Manifest\\RequirementCollectionIterator' => $vendorDir . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', - 'PharIo\\Manifest\\RequiresElement' => $vendorDir . '/phar-io/manifest/src/xml/RequiresElement.php', - 'PharIo\\Manifest\\Type' => $vendorDir . '/phar-io/manifest/src/values/Type.php', - 'PharIo\\Manifest\\Url' => $vendorDir . '/phar-io/manifest/src/values/Url.php', - 'PharIo\\Version\\AbstractVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AbstractVersionConstraint.php', - 'PharIo\\Version\\AndVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php', - 'PharIo\\Version\\AnyVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/AnyVersionConstraint.php', - 'PharIo\\Version\\BuildMetaData' => $vendorDir . '/phar-io/version/src/BuildMetaData.php', - 'PharIo\\Version\\ExactVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/ExactVersionConstraint.php', - 'PharIo\\Version\\Exception' => $vendorDir . '/phar-io/version/src/exceptions/Exception.php', - 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php', - 'PharIo\\Version\\InvalidPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php', - 'PharIo\\Version\\InvalidVersionException' => $vendorDir . '/phar-io/version/src/exceptions/InvalidVersionException.php', - 'PharIo\\Version\\NoBuildMetaDataException' => $vendorDir . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php', - 'PharIo\\Version\\NoPreReleaseSuffixException' => $vendorDir . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php', - 'PharIo\\Version\\OrVersionConstraintGroup' => $vendorDir . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php', - 'PharIo\\Version\\PreReleaseSuffix' => $vendorDir . '/phar-io/version/src/PreReleaseSuffix.php', - 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php', - 'PharIo\\Version\\SpecificMajorVersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php', - 'PharIo\\Version\\UnsupportedVersionConstraintException' => $vendorDir . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php', - 'PharIo\\Version\\Version' => $vendorDir . '/phar-io/version/src/Version.php', - 'PharIo\\Version\\VersionConstraint' => $vendorDir . '/phar-io/version/src/constraints/VersionConstraint.php', - 'PharIo\\Version\\VersionConstraintParser' => $vendorDir . '/phar-io/version/src/VersionConstraintParser.php', - 'PharIo\\Version\\VersionConstraintValue' => $vendorDir . '/phar-io/version/src/VersionConstraintValue.php', - 'PharIo\\Version\\VersionNumber' => $vendorDir . '/phar-io/version/src/VersionNumber.php', - 'SQLite3Exception' => $vendorDir . '/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php', - 'SebastianBergmann\\CliParser\\AmbiguousOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php', - 'SebastianBergmann\\CliParser\\Exception' => $vendorDir . '/sebastian/cli-parser/src/exceptions/Exception.php', - 'SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php', - 'SebastianBergmann\\CliParser\\Parser' => $vendorDir . '/sebastian/cli-parser/src/Parser.php', - 'SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php', - 'SebastianBergmann\\CliParser\\UnknownOptionException' => $vendorDir . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php', - 'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php', - 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => $vendorDir . '/phpunit/php-code-coverage/src/CodeCoverage.php', - 'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PhpdbgDriver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/PhpdbgDriver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PhpdbgNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/PhpdbgNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Selector' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Selector.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\WrongXdebugVersionException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/WrongXdebugVersionException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug2Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug2Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug2NotEnabledException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Xdebug2NotEnabledException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug3Driver' => $vendorDir . '/phpunit/php-code-coverage/src/Driver/Xdebug3Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug3NotEnabledException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Xdebug3NotEnabledException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Exception' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/Exception.php', - 'SebastianBergmann\\CodeCoverage\\Filter' => $vendorDir . '/phpunit/php-code-coverage/src/Filter.php', - 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php', - 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => $vendorDir . '/phpunit/php-code-coverage/src/Node/AbstractNode.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Builder.php', - 'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => $vendorDir . '/phpunit/php-code-coverage/src/Node/CrapIndex.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Node\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Node/File.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => $vendorDir . '/phpunit/php-code-coverage/src/Node/Iterator.php', - 'SebastianBergmann\\CodeCoverage\\ParserException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ParserException.php', - 'SebastianBergmann\\CodeCoverage\\ProcessedCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php', - 'SebastianBergmann\\CodeCoverage\\RawCodeCoverageData' => $vendorDir . '/phpunit/php-code-coverage/src/RawCodeCoverageData.php', - 'SebastianBergmann\\CodeCoverage\\ReflectionException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php', - 'SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Clover.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Cobertura.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Crap4j.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Facade.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', - 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => $vendorDir . '/phpunit/php-code-coverage/src/Report/PHP.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Text' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Text.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/File.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Method.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => $vendorDir . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => $vendorDir . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php', - 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', - 'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php', - 'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Filesystem.php', - 'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => $vendorDir . '/phpunit/php-code-coverage/src/Util/Percentage.php', - 'SebastianBergmann\\CodeCoverage\\Version' => $vendorDir . '/phpunit/php-code-coverage/src/Version.php', - 'SebastianBergmann\\CodeCoverage\\XmlException' => $vendorDir . '/phpunit/php-code-coverage/src/Exception/XmlException.php', - 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => $vendorDir . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', - 'SebastianBergmann\\CodeUnit\\ClassMethodUnit' => $vendorDir . '/sebastian/code-unit/src/ClassMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\ClassUnit' => $vendorDir . '/sebastian/code-unit/src/ClassUnit.php', - 'SebastianBergmann\\CodeUnit\\CodeUnit' => $vendorDir . '/sebastian/code-unit/src/CodeUnit.php', - 'SebastianBergmann\\CodeUnit\\CodeUnitCollection' => $vendorDir . '/sebastian/code-unit/src/CodeUnitCollection.php', - 'SebastianBergmann\\CodeUnit\\CodeUnitCollectionIterator' => $vendorDir . '/sebastian/code-unit/src/CodeUnitCollectionIterator.php', - 'SebastianBergmann\\CodeUnit\\Exception' => $vendorDir . '/sebastian/code-unit/src/exceptions/Exception.php', - 'SebastianBergmann\\CodeUnit\\FunctionUnit' => $vendorDir . '/sebastian/code-unit/src/FunctionUnit.php', - 'SebastianBergmann\\CodeUnit\\InterfaceMethodUnit' => $vendorDir . '/sebastian/code-unit/src/InterfaceMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\InterfaceUnit' => $vendorDir . '/sebastian/code-unit/src/InterfaceUnit.php', - 'SebastianBergmann\\CodeUnit\\InvalidCodeUnitException' => $vendorDir . '/sebastian/code-unit/src/exceptions/InvalidCodeUnitException.php', - 'SebastianBergmann\\CodeUnit\\Mapper' => $vendorDir . '/sebastian/code-unit/src/Mapper.php', - 'SebastianBergmann\\CodeUnit\\NoTraitException' => $vendorDir . '/sebastian/code-unit/src/exceptions/NoTraitException.php', - 'SebastianBergmann\\CodeUnit\\ReflectionException' => $vendorDir . '/sebastian/code-unit/src/exceptions/ReflectionException.php', - 'SebastianBergmann\\CodeUnit\\TraitMethodUnit' => $vendorDir . '/sebastian/code-unit/src/TraitMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\TraitUnit' => $vendorDir . '/sebastian/code-unit/src/TraitUnit.php', - 'SebastianBergmann\\Comparator\\ArrayComparator' => $vendorDir . '/sebastian/comparator/src/ArrayComparator.php', - 'SebastianBergmann\\Comparator\\Comparator' => $vendorDir . '/sebastian/comparator/src/Comparator.php', - 'SebastianBergmann\\Comparator\\ComparisonFailure' => $vendorDir . '/sebastian/comparator/src/ComparisonFailure.php', - 'SebastianBergmann\\Comparator\\DOMNodeComparator' => $vendorDir . '/sebastian/comparator/src/DOMNodeComparator.php', - 'SebastianBergmann\\Comparator\\DateTimeComparator' => $vendorDir . '/sebastian/comparator/src/DateTimeComparator.php', - 'SebastianBergmann\\Comparator\\DoubleComparator' => $vendorDir . '/sebastian/comparator/src/DoubleComparator.php', - 'SebastianBergmann\\Comparator\\Exception' => $vendorDir . '/sebastian/comparator/src/exceptions/Exception.php', - 'SebastianBergmann\\Comparator\\ExceptionComparator' => $vendorDir . '/sebastian/comparator/src/ExceptionComparator.php', - 'SebastianBergmann\\Comparator\\Factory' => $vendorDir . '/sebastian/comparator/src/Factory.php', - 'SebastianBergmann\\Comparator\\MockObjectComparator' => $vendorDir . '/sebastian/comparator/src/MockObjectComparator.php', - 'SebastianBergmann\\Comparator\\NumericComparator' => $vendorDir . '/sebastian/comparator/src/NumericComparator.php', - 'SebastianBergmann\\Comparator\\ObjectComparator' => $vendorDir . '/sebastian/comparator/src/ObjectComparator.php', - 'SebastianBergmann\\Comparator\\ResourceComparator' => $vendorDir . '/sebastian/comparator/src/ResourceComparator.php', - 'SebastianBergmann\\Comparator\\RuntimeException' => $vendorDir . '/sebastian/comparator/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\Comparator\\ScalarComparator' => $vendorDir . '/sebastian/comparator/src/ScalarComparator.php', - 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => $vendorDir . '/sebastian/comparator/src/SplObjectStorageComparator.php', - 'SebastianBergmann\\Comparator\\TypeComparator' => $vendorDir . '/sebastian/comparator/src/TypeComparator.php', - 'SebastianBergmann\\Complexity\\Calculator' => $vendorDir . '/sebastian/complexity/src/Calculator.php', - 'SebastianBergmann\\Complexity\\Complexity' => $vendorDir . '/sebastian/complexity/src/Complexity/Complexity.php', - 'SebastianBergmann\\Complexity\\ComplexityCalculatingVisitor' => $vendorDir . '/sebastian/complexity/src/Visitor/ComplexityCalculatingVisitor.php', - 'SebastianBergmann\\Complexity\\ComplexityCollection' => $vendorDir . '/sebastian/complexity/src/Complexity/ComplexityCollection.php', - 'SebastianBergmann\\Complexity\\ComplexityCollectionIterator' => $vendorDir . '/sebastian/complexity/src/Complexity/ComplexityCollectionIterator.php', - 'SebastianBergmann\\Complexity\\CyclomaticComplexityCalculatingVisitor' => $vendorDir . '/sebastian/complexity/src/Visitor/CyclomaticComplexityCalculatingVisitor.php', - 'SebastianBergmann\\Complexity\\Exception' => $vendorDir . '/sebastian/complexity/src/Exception/Exception.php', - 'SebastianBergmann\\Complexity\\RuntimeException' => $vendorDir . '/sebastian/complexity/src/Exception/RuntimeException.php', - 'SebastianBergmann\\Diff\\Chunk' => $vendorDir . '/sebastian/diff/src/Chunk.php', - 'SebastianBergmann\\Diff\\ConfigurationException' => $vendorDir . '/sebastian/diff/src/Exception/ConfigurationException.php', - 'SebastianBergmann\\Diff\\Diff' => $vendorDir . '/sebastian/diff/src/Diff.php', - 'SebastianBergmann\\Diff\\Differ' => $vendorDir . '/sebastian/diff/src/Differ.php', - 'SebastianBergmann\\Diff\\Exception' => $vendorDir . '/sebastian/diff/src/Exception/Exception.php', - 'SebastianBergmann\\Diff\\InvalidArgumentException' => $vendorDir . '/sebastian/diff/src/Exception/InvalidArgumentException.php', - 'SebastianBergmann\\Diff\\Line' => $vendorDir . '/sebastian/diff/src/Line.php', - 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => $vendorDir . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', - 'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => $vendorDir . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', - 'SebastianBergmann\\Diff\\Parser' => $vendorDir . '/sebastian/diff/src/Parser.php', - 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => $vendorDir . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Environment\\Console' => $vendorDir . '/sebastian/environment/src/Console.php', - 'SebastianBergmann\\Environment\\OperatingSystem' => $vendorDir . '/sebastian/environment/src/OperatingSystem.php', - 'SebastianBergmann\\Environment\\Runtime' => $vendorDir . '/sebastian/environment/src/Runtime.php', - 'SebastianBergmann\\Exporter\\Exporter' => $vendorDir . '/sebastian/exporter/src/Exporter.php', - 'SebastianBergmann\\FileIterator\\Facade' => $vendorDir . '/phpunit/php-file-iterator/src/Facade.php', - 'SebastianBergmann\\FileIterator\\Factory' => $vendorDir . '/phpunit/php-file-iterator/src/Factory.php', - 'SebastianBergmann\\FileIterator\\Iterator' => $vendorDir . '/phpunit/php-file-iterator/src/Iterator.php', - 'SebastianBergmann\\GlobalState\\CodeExporter' => $vendorDir . '/sebastian/global-state/src/CodeExporter.php', - 'SebastianBergmann\\GlobalState\\Exception' => $vendorDir . '/sebastian/global-state/src/exceptions/Exception.php', - 'SebastianBergmann\\GlobalState\\ExcludeList' => $vendorDir . '/sebastian/global-state/src/ExcludeList.php', - 'SebastianBergmann\\GlobalState\\Restorer' => $vendorDir . '/sebastian/global-state/src/Restorer.php', - 'SebastianBergmann\\GlobalState\\RuntimeException' => $vendorDir . '/sebastian/global-state/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\GlobalState\\Snapshot' => $vendorDir . '/sebastian/global-state/src/Snapshot.php', - 'SebastianBergmann\\Invoker\\Exception' => $vendorDir . '/phpunit/php-invoker/src/exceptions/Exception.php', - 'SebastianBergmann\\Invoker\\Invoker' => $vendorDir . '/phpunit/php-invoker/src/Invoker.php', - 'SebastianBergmann\\Invoker\\ProcessControlExtensionNotLoadedException' => $vendorDir . '/phpunit/php-invoker/src/exceptions/ProcessControlExtensionNotLoadedException.php', - 'SebastianBergmann\\Invoker\\TimeoutException' => $vendorDir . '/phpunit/php-invoker/src/exceptions/TimeoutException.php', - 'SebastianBergmann\\LinesOfCode\\Counter' => $vendorDir . '/sebastian/lines-of-code/src/Counter.php', - 'SebastianBergmann\\LinesOfCode\\Exception' => $vendorDir . '/sebastian/lines-of-code/src/Exception/Exception.php', - 'SebastianBergmann\\LinesOfCode\\IllogicalValuesException' => $vendorDir . '/sebastian/lines-of-code/src/Exception/IllogicalValuesException.php', - 'SebastianBergmann\\LinesOfCode\\LineCountingVisitor' => $vendorDir . '/sebastian/lines-of-code/src/LineCountingVisitor.php', - 'SebastianBergmann\\LinesOfCode\\LinesOfCode' => $vendorDir . '/sebastian/lines-of-code/src/LinesOfCode.php', - 'SebastianBergmann\\LinesOfCode\\NegativeValueException' => $vendorDir . '/sebastian/lines-of-code/src/Exception/NegativeValueException.php', - 'SebastianBergmann\\LinesOfCode\\RuntimeException' => $vendorDir . '/sebastian/lines-of-code/src/Exception/RuntimeException.php', - 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => $vendorDir . '/sebastian/object-enumerator/src/Enumerator.php', - 'SebastianBergmann\\ObjectEnumerator\\Exception' => $vendorDir . '/sebastian/object-enumerator/src/Exception.php', - 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => $vendorDir . '/sebastian/object-enumerator/src/InvalidArgumentException.php', - 'SebastianBergmann\\ObjectReflector\\Exception' => $vendorDir . '/sebastian/object-reflector/src/Exception.php', - 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => $vendorDir . '/sebastian/object-reflector/src/InvalidArgumentException.php', - 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => $vendorDir . '/sebastian/object-reflector/src/ObjectReflector.php', - 'SebastianBergmann\\RecursionContext\\Context' => $vendorDir . '/sebastian/recursion-context/src/Context.php', - 'SebastianBergmann\\RecursionContext\\Exception' => $vendorDir . '/sebastian/recursion-context/src/Exception.php', - 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => $vendorDir . '/sebastian/recursion-context/src/InvalidArgumentException.php', - 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => $vendorDir . '/sebastian/resource-operations/src/ResourceOperations.php', - 'SebastianBergmann\\Template\\Exception' => $vendorDir . '/phpunit/php-text-template/src/exceptions/Exception.php', - 'SebastianBergmann\\Template\\InvalidArgumentException' => $vendorDir . '/phpunit/php-text-template/src/exceptions/InvalidArgumentException.php', - 'SebastianBergmann\\Template\\RuntimeException' => $vendorDir . '/phpunit/php-text-template/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\Template\\Template' => $vendorDir . '/phpunit/php-text-template/src/Template.php', - 'SebastianBergmann\\Timer\\Duration' => $vendorDir . '/phpunit/php-timer/src/Duration.php', - 'SebastianBergmann\\Timer\\Exception' => $vendorDir . '/phpunit/php-timer/src/exceptions/Exception.php', - 'SebastianBergmann\\Timer\\NoActiveTimerException' => $vendorDir . '/phpunit/php-timer/src/exceptions/NoActiveTimerException.php', - 'SebastianBergmann\\Timer\\ResourceUsageFormatter' => $vendorDir . '/phpunit/php-timer/src/ResourceUsageFormatter.php', - 'SebastianBergmann\\Timer\\TimeSinceStartOfRequestNotAvailableException' => $vendorDir . '/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php', - 'SebastianBergmann\\Timer\\Timer' => $vendorDir . '/phpunit/php-timer/src/Timer.php', - 'SebastianBergmann\\Type\\CallableType' => $vendorDir . '/sebastian/type/src/type/CallableType.php', - 'SebastianBergmann\\Type\\Exception' => $vendorDir . '/sebastian/type/src/exception/Exception.php', - 'SebastianBergmann\\Type\\FalseType' => $vendorDir . '/sebastian/type/src/type/FalseType.php', - 'SebastianBergmann\\Type\\GenericObjectType' => $vendorDir . '/sebastian/type/src/type/GenericObjectType.php', - 'SebastianBergmann\\Type\\IntersectionType' => $vendorDir . '/sebastian/type/src/type/IntersectionType.php', - 'SebastianBergmann\\Type\\IterableType' => $vendorDir . '/sebastian/type/src/type/IterableType.php', - 'SebastianBergmann\\Type\\MixedType' => $vendorDir . '/sebastian/type/src/type/MixedType.php', - 'SebastianBergmann\\Type\\NeverType' => $vendorDir . '/sebastian/type/src/type/NeverType.php', - 'SebastianBergmann\\Type\\NullType' => $vendorDir . '/sebastian/type/src/type/NullType.php', - 'SebastianBergmann\\Type\\ObjectType' => $vendorDir . '/sebastian/type/src/type/ObjectType.php', - 'SebastianBergmann\\Type\\Parameter' => $vendorDir . '/sebastian/type/src/Parameter.php', - 'SebastianBergmann\\Type\\ReflectionMapper' => $vendorDir . '/sebastian/type/src/ReflectionMapper.php', - 'SebastianBergmann\\Type\\RuntimeException' => $vendorDir . '/sebastian/type/src/exception/RuntimeException.php', - 'SebastianBergmann\\Type\\SimpleType' => $vendorDir . '/sebastian/type/src/type/SimpleType.php', - 'SebastianBergmann\\Type\\StaticType' => $vendorDir . '/sebastian/type/src/type/StaticType.php', - 'SebastianBergmann\\Type\\TrueType' => $vendorDir . '/sebastian/type/src/type/TrueType.php', - 'SebastianBergmann\\Type\\Type' => $vendorDir . '/sebastian/type/src/type/Type.php', - 'SebastianBergmann\\Type\\TypeName' => $vendorDir . '/sebastian/type/src/TypeName.php', - 'SebastianBergmann\\Type\\UnionType' => $vendorDir . '/sebastian/type/src/type/UnionType.php', - 'SebastianBergmann\\Type\\UnknownType' => $vendorDir . '/sebastian/type/src/type/UnknownType.php', - 'SebastianBergmann\\Type\\VoidType' => $vendorDir . '/sebastian/type/src/type/VoidType.php', - 'SebastianBergmann\\Version' => $vendorDir . '/sebastian/version/src/Version.php', - 'TheSeer\\Tokenizer\\Exception' => $vendorDir . '/theseer/tokenizer/src/Exception.php', - 'TheSeer\\Tokenizer\\NamespaceUri' => $vendorDir . '/theseer/tokenizer/src/NamespaceUri.php', - 'TheSeer\\Tokenizer\\NamespaceUriException' => $vendorDir . '/theseer/tokenizer/src/NamespaceUriException.php', - 'TheSeer\\Tokenizer\\Token' => $vendorDir . '/theseer/tokenizer/src/Token.php', - 'TheSeer\\Tokenizer\\TokenCollection' => $vendorDir . '/theseer/tokenizer/src/TokenCollection.php', - 'TheSeer\\Tokenizer\\TokenCollectionException' => $vendorDir . '/theseer/tokenizer/src/TokenCollectionException.php', - 'TheSeer\\Tokenizer\\Tokenizer' => $vendorDir . '/theseer/tokenizer/src/Tokenizer.php', - 'TheSeer\\Tokenizer\\XMLSerializer' => $vendorDir . '/theseer/tokenizer/src/XMLSerializer.php', - '©' => $vendorDir . '/symfony/cache/Traits/ValueWrapper.php', -); diff --git a/vendor/composer/autoload_files.php b/vendor/composer/autoload_files.php deleted file mode 100644 index b2b22ca..0000000 --- a/vendor/composer/autoload_files.php +++ /dev/null @@ -1,27 +0,0 @@ - $vendorDir . '/symfony/deprecation-contracts/function.php', - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => $vendorDir . '/symfony/polyfill-mbstring/bootstrap.php', - '662a729f963d39afe703c9d9b7ab4a8c' => $vendorDir . '/symfony/polyfill-php83/bootstrap.php', - '667aeda72477189d0494fecd327c3641' => $vendorDir . '/symfony/var-dumper/Resources/functions/dump.php', - 'e69f7f6ee287b969198c3c9d6777bd38' => $vendorDir . '/symfony/polyfill-intl-normalizer/bootstrap.php', - '8825ede83f2f289127722d4e842cf7e8' => $vendorDir . '/symfony/polyfill-intl-grapheme/bootstrap.php', - 'b6b991a57620e2fb6b2f66f03fe9ddc2' => $vendorDir . '/symfony/string/Resources/functions.php', - '89efb1254ef2d1c5d80096acd12c4098' => $vendorDir . '/twig/twig/src/Resources/core.php', - 'ffecb95d45175fd40f75be8a23b34f90' => $vendorDir . '/twig/twig/src/Resources/debug.php', - 'c7baa00073ee9c61edf148c51917cfb4' => $vendorDir . '/twig/twig/src/Resources/escaper.php', - 'f844ccf1d25df8663951193c3fc307c8' => $vendorDir . '/twig/twig/src/Resources/string_loader.php', - 'f598d06aa772fa33d905e87be6398fb1' => $vendorDir . '/symfony/polyfill-intl-idn/bootstrap.php', - '2203a247e6fda86070a5e4e07aed533a' => $vendorDir . '/symfony/clock/Resources/now.php', - '6124b4c8570aa390c21fafd04a26c69f' => $vendorDir . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', - '6a47392539ca2329373e0d33e1dba053' => $vendorDir . '/symfony/polyfill-intl-icu/bootstrap.php', - 'ec07570ca5a812141189b1fa81503674' => $vendorDir . '/phpunit/phpunit/src/Framework/Assert/Functions.php', - '92c8763cd6170fce6fcfe7e26b4e8c10' => $vendorDir . '/symfony/phpunit-bridge/bootstrap.php', - 'a1105708a18b76903365ca1c4aa61b02' => $vendorDir . '/symfony/translation/Resources/functions.php', -); diff --git a/vendor/composer/autoload_namespaces.php b/vendor/composer/autoload_namespaces.php deleted file mode 100644 index 15a2ff3..0000000 --- a/vendor/composer/autoload_namespaces.php +++ /dev/null @@ -1,9 +0,0 @@ - array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/type-resolver/src', $vendorDir . '/phpdocumentor/reflection-docblock/src'), - 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), - 'Twig\\Extra\\TwigExtraBundle\\' => array($vendorDir . '/twig/extra-bundle'), - 'Twig\\' => array($vendorDir . '/twig/twig/src'), - 'Symfony\\UX\\Turbo\\' => array($vendorDir . '/symfony/ux-turbo/src'), - 'Symfony\\UX\\StimulusBundle\\' => array($vendorDir . '/symfony/stimulus-bundle/src'), - 'Symfony\\Runtime\\Symfony\\Component\\' => array($vendorDir . '/symfony/runtime/Internal'), - 'Symfony\\Polyfill\\Php83\\' => array($vendorDir . '/symfony/polyfill-php83'), - 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), - 'Symfony\\Polyfill\\Intl\\Normalizer\\' => array($vendorDir . '/symfony/polyfill-intl-normalizer'), - 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), - 'Symfony\\Polyfill\\Intl\\Icu\\' => array($vendorDir . '/symfony/polyfill-intl-icu'), - 'Symfony\\Polyfill\\Intl\\Grapheme\\' => array($vendorDir . '/symfony/polyfill-intl-grapheme'), - 'Symfony\\Flex\\' => array($vendorDir . '/symfony/flex/src'), - 'Symfony\\Contracts\\Translation\\' => array($vendorDir . '/symfony/translation-contracts'), - 'Symfony\\Contracts\\Service\\' => array($vendorDir . '/symfony/service-contracts'), - 'Symfony\\Contracts\\HttpClient\\' => array($vendorDir . '/symfony/http-client-contracts'), - 'Symfony\\Contracts\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher-contracts'), - 'Symfony\\Contracts\\Cache\\' => array($vendorDir . '/symfony/cache-contracts'), - 'Symfony\\Component\\Yaml\\' => array($vendorDir . '/symfony/yaml'), - 'Symfony\\Component\\WebLink\\' => array($vendorDir . '/symfony/web-link'), - 'Symfony\\Component\\VarExporter\\' => array($vendorDir . '/symfony/var-exporter'), - 'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'), - 'Symfony\\Component\\Validator\\' => array($vendorDir . '/symfony/validator'), - 'Symfony\\Component\\TypeInfo\\' => array($vendorDir . '/symfony/type-info'), - 'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'), - 'Symfony\\Component\\String\\' => array($vendorDir . '/symfony/string'), - 'Symfony\\Component\\Stopwatch\\' => array($vendorDir . '/symfony/stopwatch'), - 'Symfony\\Component\\Serializer\\' => array($vendorDir . '/symfony/serializer'), - 'Symfony\\Component\\Security\\Http\\' => array($vendorDir . '/symfony/security-http'), - 'Symfony\\Component\\Security\\Csrf\\' => array($vendorDir . '/symfony/security-csrf'), - 'Symfony\\Component\\Security\\Core\\' => array($vendorDir . '/symfony/security-core'), - 'Symfony\\Component\\Runtime\\' => array($vendorDir . '/symfony/runtime'), - 'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'), - 'Symfony\\Component\\PropertyInfo\\' => array($vendorDir . '/symfony/property-info'), - 'Symfony\\Component\\PropertyAccess\\' => array($vendorDir . '/symfony/property-access'), - 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), - 'Symfony\\Component\\PasswordHasher\\' => array($vendorDir . '/symfony/password-hasher'), - 'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'), - 'Symfony\\Component\\Notifier\\' => array($vendorDir . '/symfony/notifier'), - 'Symfony\\Component\\Mime\\' => array($vendorDir . '/symfony/mime'), - 'Symfony\\Component\\Messenger\\Bridge\\Doctrine\\' => array($vendorDir . '/symfony/doctrine-messenger'), - 'Symfony\\Component\\Messenger\\' => array($vendorDir . '/symfony/messenger'), - 'Symfony\\Component\\Mailer\\' => array($vendorDir . '/symfony/mailer'), - 'Symfony\\Component\\Intl\\' => array($vendorDir . '/symfony/intl'), - 'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'), - 'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'), - 'Symfony\\Component\\HttpClient\\' => array($vendorDir . '/symfony/http-client'), - 'Symfony\\Component\\Form\\' => array($vendorDir . '/symfony/form'), - 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), - 'Symfony\\Component\\Filesystem\\' => array($vendorDir . '/symfony/filesystem'), - 'Symfony\\Component\\ExpressionLanguage\\' => array($vendorDir . '/symfony/expression-language'), - 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), - 'Symfony\\Component\\ErrorHandler\\' => array($vendorDir . '/symfony/error-handler'), - 'Symfony\\Component\\Dotenv\\' => array($vendorDir . '/symfony/dotenv'), - 'Symfony\\Component\\DomCrawler\\' => array($vendorDir . '/symfony/dom-crawler'), - 'Symfony\\Component\\DependencyInjection\\' => array($vendorDir . '/symfony/dependency-injection'), - 'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'), - 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), - 'Symfony\\Component\\Config\\' => array($vendorDir . '/symfony/config'), - 'Symfony\\Component\\Clock\\' => array($vendorDir . '/symfony/clock'), - 'Symfony\\Component\\Cache\\' => array($vendorDir . '/symfony/cache'), - 'Symfony\\Component\\BrowserKit\\' => array($vendorDir . '/symfony/browser-kit'), - 'Symfony\\Component\\Asset\\' => array($vendorDir . '/symfony/asset'), - 'Symfony\\Component\\AssetMapper\\' => array($vendorDir . '/symfony/asset-mapper'), - 'Symfony\\Bundle\\WebProfilerBundle\\' => array($vendorDir . '/symfony/web-profiler-bundle'), - 'Symfony\\Bundle\\TwigBundle\\' => array($vendorDir . '/symfony/twig-bundle'), - 'Symfony\\Bundle\\SecurityBundle\\' => array($vendorDir . '/symfony/security-bundle'), - 'Symfony\\Bundle\\MonologBundle\\' => array($vendorDir . '/symfony/monolog-bundle'), - 'Symfony\\Bundle\\MakerBundle\\' => array($vendorDir . '/symfony/maker-bundle/src'), - 'Symfony\\Bundle\\FrameworkBundle\\' => array($vendorDir . '/symfony/framework-bundle'), - 'Symfony\\Bundle\\DebugBundle\\' => array($vendorDir . '/symfony/debug-bundle'), - 'Symfony\\Bridge\\Twig\\' => array($vendorDir . '/symfony/twig-bridge'), - 'Symfony\\Bridge\\PhpUnit\\' => array($vendorDir . '/symfony/phpunit-bridge'), - 'Symfony\\Bridge\\Monolog\\' => array($vendorDir . '/symfony/monolog-bridge'), - 'Symfony\\Bridge\\Doctrine\\' => array($vendorDir . '/symfony/doctrine-bridge'), - 'Psr\\Log\\' => array($vendorDir . '/psr/log/src'), - 'Psr\\Link\\' => array($vendorDir . '/psr/link/src'), - 'Psr\\EventDispatcher\\' => array($vendorDir . '/psr/event-dispatcher/src'), - 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), - 'Psr\\Clock\\' => array($vendorDir . '/psr/clock/src'), - 'Psr\\Cache\\' => array($vendorDir . '/psr/cache/src'), - 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), - 'PHPStan\\PhpDocParser\\' => array($vendorDir . '/phpstan/phpdoc-parser/src'), - 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), - 'Masterminds\\' => array($vendorDir . '/masterminds/html5/src'), - 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/src'), - 'Doctrine\\SqlFormatter\\' => array($vendorDir . '/doctrine/sql-formatter/src'), - 'Doctrine\\Persistence\\' => array($vendorDir . '/doctrine/persistence/src/Persistence'), - 'Doctrine\\ORM\\' => array($vendorDir . '/doctrine/orm/src'), - 'Doctrine\\Migrations\\' => array($vendorDir . '/doctrine/migrations/src'), - 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), - 'Doctrine\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Inflector'), - 'Doctrine\\Deprecations\\' => array($vendorDir . '/doctrine/deprecations/lib/Doctrine/Deprecations'), - 'Doctrine\\DBAL\\' => array($vendorDir . '/doctrine/dbal/src'), - 'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/src'), - 'Doctrine\\Common\\Collections\\' => array($vendorDir . '/doctrine/collections/src'), - 'Doctrine\\Common\\Cache\\' => array($vendorDir . '/doctrine/cache/lib/Doctrine/Common/Cache'), - 'Doctrine\\Common\\' => array($vendorDir . '/doctrine/event-manager/src'), - 'Doctrine\\Bundle\\MigrationsBundle\\' => array($vendorDir . '/doctrine/doctrine-migrations-bundle'), - 'Doctrine\\Bundle\\DoctrineBundle\\' => array($vendorDir . '/doctrine/doctrine-bundle/src'), - 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), - 'Composer\\Semver\\' => array($vendorDir . '/composer/semver/src'), - 'App\\Tests\\' => array($baseDir . '/tests'), - 'App\\' => array($baseDir . '/src'), -); diff --git a/vendor/composer/autoload_real.php b/vendor/composer/autoload_real.php deleted file mode 100644 index d468544..0000000 --- a/vendor/composer/autoload_real.php +++ /dev/null @@ -1,50 +0,0 @@ -register(true); - - $filesToLoad = \Composer\Autoload\ComposerStaticInit0cc412674760ac32bd8551de9f3bebb9::$files; - $requireFile = \Closure::bind(static function ($fileIdentifier, $file) { - if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) { - $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true; - - require $file; - } - }, null, null); - foreach ($filesToLoad as $fileIdentifier => $file) { - $requireFile($fileIdentifier, $file); - } - - return $loader; - } -} diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php deleted file mode 100644 index fa8abe4..0000000 --- a/vendor/composer/autoload_static.php +++ /dev/null @@ -1,1252 +0,0 @@ - __DIR__ . '/..' . '/symfony/deprecation-contracts/function.php', - '0e6d7bf4a5811bfa5cf40c5ccd6fae6a' => __DIR__ . '/..' . '/symfony/polyfill-mbstring/bootstrap.php', - '662a729f963d39afe703c9d9b7ab4a8c' => __DIR__ . '/..' . '/symfony/polyfill-php83/bootstrap.php', - '667aeda72477189d0494fecd327c3641' => __DIR__ . '/..' . '/symfony/var-dumper/Resources/functions/dump.php', - 'e69f7f6ee287b969198c3c9d6777bd38' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/bootstrap.php', - '8825ede83f2f289127722d4e842cf7e8' => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme/bootstrap.php', - 'b6b991a57620e2fb6b2f66f03fe9ddc2' => __DIR__ . '/..' . '/symfony/string/Resources/functions.php', - '89efb1254ef2d1c5d80096acd12c4098' => __DIR__ . '/..' . '/twig/twig/src/Resources/core.php', - 'ffecb95d45175fd40f75be8a23b34f90' => __DIR__ . '/..' . '/twig/twig/src/Resources/debug.php', - 'c7baa00073ee9c61edf148c51917cfb4' => __DIR__ . '/..' . '/twig/twig/src/Resources/escaper.php', - 'f844ccf1d25df8663951193c3fc307c8' => __DIR__ . '/..' . '/twig/twig/src/Resources/string_loader.php', - 'f598d06aa772fa33d905e87be6398fb1' => __DIR__ . '/..' . '/symfony/polyfill-intl-idn/bootstrap.php', - '2203a247e6fda86070a5e4e07aed533a' => __DIR__ . '/..' . '/symfony/clock/Resources/now.php', - '6124b4c8570aa390c21fafd04a26c69f' => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy/deep_copy.php', - '6a47392539ca2329373e0d33e1dba053' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/bootstrap.php', - 'ec07570ca5a812141189b1fa81503674' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert/Functions.php', - '92c8763cd6170fce6fcfe7e26b4e8c10' => __DIR__ . '/..' . '/symfony/phpunit-bridge/bootstrap.php', - 'a1105708a18b76903365ca1c4aa61b02' => __DIR__ . '/..' . '/symfony/translation/Resources/functions.php', - ); - - public static $prefixLengthsPsr4 = array ( - 'p' => - array ( - 'phpDocumentor\\Reflection\\' => 25, - ), - 'W' => - array ( - 'Webmozart\\Assert\\' => 17, - ), - 'T' => - array ( - 'Twig\\Extra\\TwigExtraBundle\\' => 27, - 'Twig\\' => 5, - ), - 'S' => - array ( - 'Symfony\\UX\\Turbo\\' => 17, - 'Symfony\\UX\\StimulusBundle\\' => 26, - 'Symfony\\Runtime\\Symfony\\Component\\' => 34, - 'Symfony\\Polyfill\\Php83\\' => 23, - 'Symfony\\Polyfill\\Mbstring\\' => 26, - 'Symfony\\Polyfill\\Intl\\Normalizer\\' => 33, - 'Symfony\\Polyfill\\Intl\\Idn\\' => 26, - 'Symfony\\Polyfill\\Intl\\Icu\\' => 26, - 'Symfony\\Polyfill\\Intl\\Grapheme\\' => 31, - 'Symfony\\Flex\\' => 13, - 'Symfony\\Contracts\\Translation\\' => 30, - 'Symfony\\Contracts\\Service\\' => 26, - 'Symfony\\Contracts\\HttpClient\\' => 29, - 'Symfony\\Contracts\\EventDispatcher\\' => 34, - 'Symfony\\Contracts\\Cache\\' => 24, - 'Symfony\\Component\\Yaml\\' => 23, - 'Symfony\\Component\\WebLink\\' => 26, - 'Symfony\\Component\\VarExporter\\' => 30, - 'Symfony\\Component\\VarDumper\\' => 28, - 'Symfony\\Component\\Validator\\' => 28, - 'Symfony\\Component\\TypeInfo\\' => 27, - 'Symfony\\Component\\Translation\\' => 30, - 'Symfony\\Component\\String\\' => 25, - 'Symfony\\Component\\Stopwatch\\' => 28, - 'Symfony\\Component\\Serializer\\' => 29, - 'Symfony\\Component\\Security\\Http\\' => 32, - 'Symfony\\Component\\Security\\Csrf\\' => 32, - 'Symfony\\Component\\Security\\Core\\' => 32, - 'Symfony\\Component\\Runtime\\' => 26, - 'Symfony\\Component\\Routing\\' => 26, - 'Symfony\\Component\\PropertyInfo\\' => 31, - 'Symfony\\Component\\PropertyAccess\\' => 33, - 'Symfony\\Component\\Process\\' => 26, - 'Symfony\\Component\\PasswordHasher\\' => 33, - 'Symfony\\Component\\OptionsResolver\\' => 34, - 'Symfony\\Component\\Notifier\\' => 27, - 'Symfony\\Component\\Mime\\' => 23, - 'Symfony\\Component\\Messenger\\Bridge\\Doctrine\\' => 44, - 'Symfony\\Component\\Messenger\\' => 28, - 'Symfony\\Component\\Mailer\\' => 25, - 'Symfony\\Component\\Intl\\' => 23, - 'Symfony\\Component\\HttpKernel\\' => 29, - 'Symfony\\Component\\HttpFoundation\\' => 33, - 'Symfony\\Component\\HttpClient\\' => 29, - 'Symfony\\Component\\Form\\' => 23, - 'Symfony\\Component\\Finder\\' => 25, - 'Symfony\\Component\\Filesystem\\' => 29, - 'Symfony\\Component\\ExpressionLanguage\\' => 37, - 'Symfony\\Component\\EventDispatcher\\' => 34, - 'Symfony\\Component\\ErrorHandler\\' => 31, - 'Symfony\\Component\\Dotenv\\' => 25, - 'Symfony\\Component\\DomCrawler\\' => 29, - 'Symfony\\Component\\DependencyInjection\\' => 38, - 'Symfony\\Component\\CssSelector\\' => 30, - 'Symfony\\Component\\Console\\' => 26, - 'Symfony\\Component\\Config\\' => 25, - 'Symfony\\Component\\Clock\\' => 24, - 'Symfony\\Component\\Cache\\' => 24, - 'Symfony\\Component\\BrowserKit\\' => 29, - 'Symfony\\Component\\Asset\\' => 24, - 'Symfony\\Component\\AssetMapper\\' => 30, - 'Symfony\\Bundle\\WebProfilerBundle\\' => 33, - 'Symfony\\Bundle\\TwigBundle\\' => 26, - 'Symfony\\Bundle\\SecurityBundle\\' => 30, - 'Symfony\\Bundle\\MonologBundle\\' => 29, - 'Symfony\\Bundle\\MakerBundle\\' => 27, - 'Symfony\\Bundle\\FrameworkBundle\\' => 31, - 'Symfony\\Bundle\\DebugBundle\\' => 27, - 'Symfony\\Bridge\\Twig\\' => 20, - 'Symfony\\Bridge\\PhpUnit\\' => 23, - 'Symfony\\Bridge\\Monolog\\' => 23, - 'Symfony\\Bridge\\Doctrine\\' => 24, - ), - 'P' => - array ( - 'Psr\\Log\\' => 8, - 'Psr\\Link\\' => 9, - 'Psr\\EventDispatcher\\' => 20, - 'Psr\\Container\\' => 14, - 'Psr\\Clock\\' => 10, - 'Psr\\Cache\\' => 10, - 'PhpParser\\' => 10, - 'PHPStan\\PhpDocParser\\' => 21, - ), - 'M' => - array ( - 'Monolog\\' => 8, - 'Masterminds\\' => 12, - ), - 'E' => - array ( - 'Egulias\\EmailValidator\\' => 23, - ), - 'D' => - array ( - 'Doctrine\\SqlFormatter\\' => 22, - 'Doctrine\\Persistence\\' => 21, - 'Doctrine\\ORM\\' => 13, - 'Doctrine\\Migrations\\' => 20, - 'Doctrine\\Instantiator\\' => 22, - 'Doctrine\\Inflector\\' => 19, - 'Doctrine\\Deprecations\\' => 22, - 'Doctrine\\DBAL\\' => 14, - 'Doctrine\\Common\\Lexer\\' => 22, - 'Doctrine\\Common\\Collections\\' => 28, - 'Doctrine\\Common\\Cache\\' => 22, - 'Doctrine\\Common\\' => 16, - 'Doctrine\\Bundle\\MigrationsBundle\\' => 33, - 'Doctrine\\Bundle\\DoctrineBundle\\' => 31, - 'DeepCopy\\' => 9, - ), - 'C' => - array ( - 'Composer\\Semver\\' => 16, - ), - 'A' => - array ( - 'App\\Tests\\' => 10, - 'App\\' => 4, - ), - ); - - public static $prefixDirsPsr4 = array ( - 'phpDocumentor\\Reflection\\' => - array ( - 0 => __DIR__ . '/..' . '/phpdocumentor/reflection-common/src', - 1 => __DIR__ . '/..' . '/phpdocumentor/type-resolver/src', - 2 => __DIR__ . '/..' . '/phpdocumentor/reflection-docblock/src', - ), - 'Webmozart\\Assert\\' => - array ( - 0 => __DIR__ . '/..' . '/webmozart/assert/src', - ), - 'Twig\\Extra\\TwigExtraBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/twig/extra-bundle', - ), - 'Twig\\' => - array ( - 0 => __DIR__ . '/..' . '/twig/twig/src', - ), - 'Symfony\\UX\\Turbo\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/ux-turbo/src', - ), - 'Symfony\\UX\\StimulusBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/stimulus-bundle/src', - ), - 'Symfony\\Runtime\\Symfony\\Component\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/runtime/Internal', - ), - 'Symfony\\Polyfill\\Php83\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-php83', - ), - 'Symfony\\Polyfill\\Mbstring\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-mbstring', - ), - 'Symfony\\Polyfill\\Intl\\Normalizer\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer', - ), - 'Symfony\\Polyfill\\Intl\\Idn\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-idn', - ), - 'Symfony\\Polyfill\\Intl\\Icu\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-icu', - ), - 'Symfony\\Polyfill\\Intl\\Grapheme\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/polyfill-intl-grapheme', - ), - 'Symfony\\Flex\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/flex/src', - ), - 'Symfony\\Contracts\\Translation\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/translation-contracts', - ), - 'Symfony\\Contracts\\Service\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/service-contracts', - ), - 'Symfony\\Contracts\\HttpClient\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/http-client-contracts', - ), - 'Symfony\\Contracts\\EventDispatcher\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/event-dispatcher-contracts', - ), - 'Symfony\\Contracts\\Cache\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/cache-contracts', - ), - 'Symfony\\Component\\Yaml\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/yaml', - ), - 'Symfony\\Component\\WebLink\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/web-link', - ), - 'Symfony\\Component\\VarExporter\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/var-exporter', - ), - 'Symfony\\Component\\VarDumper\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/var-dumper', - ), - 'Symfony\\Component\\Validator\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/validator', - ), - 'Symfony\\Component\\TypeInfo\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/type-info', - ), - 'Symfony\\Component\\Translation\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/translation', - ), - 'Symfony\\Component\\String\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/string', - ), - 'Symfony\\Component\\Stopwatch\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/stopwatch', - ), - 'Symfony\\Component\\Serializer\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/serializer', - ), - 'Symfony\\Component\\Security\\Http\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/security-http', - ), - 'Symfony\\Component\\Security\\Csrf\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/security-csrf', - ), - 'Symfony\\Component\\Security\\Core\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/security-core', - ), - 'Symfony\\Component\\Runtime\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/runtime', - ), - 'Symfony\\Component\\Routing\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/routing', - ), - 'Symfony\\Component\\PropertyInfo\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/property-info', - ), - 'Symfony\\Component\\PropertyAccess\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/property-access', - ), - 'Symfony\\Component\\Process\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/process', - ), - 'Symfony\\Component\\PasswordHasher\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/password-hasher', - ), - 'Symfony\\Component\\OptionsResolver\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/options-resolver', - ), - 'Symfony\\Component\\Notifier\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/notifier', - ), - 'Symfony\\Component\\Mime\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/mime', - ), - 'Symfony\\Component\\Messenger\\Bridge\\Doctrine\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/doctrine-messenger', - ), - 'Symfony\\Component\\Messenger\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/messenger', - ), - 'Symfony\\Component\\Mailer\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/mailer', - ), - 'Symfony\\Component\\Intl\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/intl', - ), - 'Symfony\\Component\\HttpKernel\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/http-kernel', - ), - 'Symfony\\Component\\HttpFoundation\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/http-foundation', - ), - 'Symfony\\Component\\HttpClient\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/http-client', - ), - 'Symfony\\Component\\Form\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/form', - ), - 'Symfony\\Component\\Finder\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/finder', - ), - 'Symfony\\Component\\Filesystem\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/filesystem', - ), - 'Symfony\\Component\\ExpressionLanguage\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/expression-language', - ), - 'Symfony\\Component\\EventDispatcher\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/event-dispatcher', - ), - 'Symfony\\Component\\ErrorHandler\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/error-handler', - ), - 'Symfony\\Component\\Dotenv\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/dotenv', - ), - 'Symfony\\Component\\DomCrawler\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/dom-crawler', - ), - 'Symfony\\Component\\DependencyInjection\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/dependency-injection', - ), - 'Symfony\\Component\\CssSelector\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/css-selector', - ), - 'Symfony\\Component\\Console\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/console', - ), - 'Symfony\\Component\\Config\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/config', - ), - 'Symfony\\Component\\Clock\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/clock', - ), - 'Symfony\\Component\\Cache\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/cache', - ), - 'Symfony\\Component\\BrowserKit\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/browser-kit', - ), - 'Symfony\\Component\\Asset\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/asset', - ), - 'Symfony\\Component\\AssetMapper\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/asset-mapper', - ), - 'Symfony\\Bundle\\WebProfilerBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/web-profiler-bundle', - ), - 'Symfony\\Bundle\\TwigBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/twig-bundle', - ), - 'Symfony\\Bundle\\SecurityBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/security-bundle', - ), - 'Symfony\\Bundle\\MonologBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/monolog-bundle', - ), - 'Symfony\\Bundle\\MakerBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/maker-bundle/src', - ), - 'Symfony\\Bundle\\FrameworkBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/framework-bundle', - ), - 'Symfony\\Bundle\\DebugBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/debug-bundle', - ), - 'Symfony\\Bridge\\Twig\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/twig-bridge', - ), - 'Symfony\\Bridge\\PhpUnit\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/phpunit-bridge', - ), - 'Symfony\\Bridge\\Monolog\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/monolog-bridge', - ), - 'Symfony\\Bridge\\Doctrine\\' => - array ( - 0 => __DIR__ . '/..' . '/symfony/doctrine-bridge', - ), - 'Psr\\Log\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/log/src', - ), - 'Psr\\Link\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/link/src', - ), - 'Psr\\EventDispatcher\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/event-dispatcher/src', - ), - 'Psr\\Container\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/container/src', - ), - 'Psr\\Clock\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/clock/src', - ), - 'Psr\\Cache\\' => - array ( - 0 => __DIR__ . '/..' . '/psr/cache/src', - ), - 'PhpParser\\' => - array ( - 0 => __DIR__ . '/..' . '/nikic/php-parser/lib/PhpParser', - ), - 'PHPStan\\PhpDocParser\\' => - array ( - 0 => __DIR__ . '/..' . '/phpstan/phpdoc-parser/src', - ), - 'Monolog\\' => - array ( - 0 => __DIR__ . '/..' . '/monolog/monolog/src/Monolog', - ), - 'Masterminds\\' => - array ( - 0 => __DIR__ . '/..' . '/masterminds/html5/src', - ), - 'Egulias\\EmailValidator\\' => - array ( - 0 => __DIR__ . '/..' . '/egulias/email-validator/src', - ), - 'Doctrine\\SqlFormatter\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/sql-formatter/src', - ), - 'Doctrine\\Persistence\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/persistence/src/Persistence', - ), - 'Doctrine\\ORM\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/orm/src', - ), - 'Doctrine\\Migrations\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/migrations/src', - ), - 'Doctrine\\Instantiator\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/instantiator/src/Doctrine/Instantiator', - ), - 'Doctrine\\Inflector\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/inflector/lib/Doctrine/Inflector', - ), - 'Doctrine\\Deprecations\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/deprecations/lib/Doctrine/Deprecations', - ), - 'Doctrine\\DBAL\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/dbal/src', - ), - 'Doctrine\\Common\\Lexer\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/lexer/src', - ), - 'Doctrine\\Common\\Collections\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/collections/src', - ), - 'Doctrine\\Common\\Cache\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/cache/lib/Doctrine/Common/Cache', - ), - 'Doctrine\\Common\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/event-manager/src', - ), - 'Doctrine\\Bundle\\MigrationsBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/doctrine-migrations-bundle', - ), - 'Doctrine\\Bundle\\DoctrineBundle\\' => - array ( - 0 => __DIR__ . '/..' . '/doctrine/doctrine-bundle/src', - ), - 'DeepCopy\\' => - array ( - 0 => __DIR__ . '/..' . '/myclabs/deep-copy/src/DeepCopy', - ), - 'Composer\\Semver\\' => - array ( - 0 => __DIR__ . '/..' . '/composer/semver/src', - ), - 'App\\Tests\\' => - array ( - 0 => __DIR__ . '/../..' . '/tests', - ), - 'App\\' => - array ( - 0 => __DIR__ . '/../..' . '/src', - ), - ); - - public static $classMap = array ( - 'Collator' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Resources/stubs/Collator.php', - 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php', - 'DateError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateError.php', - 'DateException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateException.php', - 'DateInvalidOperationException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidOperationException.php', - 'DateInvalidTimeZoneException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateInvalidTimeZoneException.php', - 'DateMalformedIntervalStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedIntervalStringException.php', - 'DateMalformedPeriodStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedPeriodStringException.php', - 'DateMalformedStringException' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateMalformedStringException.php', - 'DateObjectError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateObjectError.php', - 'DateRangeError' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/DateRangeError.php', - 'IntlDateFormatter' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Resources/stubs/IntlDateFormatter.php', - 'Locale' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Resources/stubs/Locale.php', - 'Normalizer' => __DIR__ . '/..' . '/symfony/polyfill-intl-normalizer/Resources/stubs/Normalizer.php', - 'NumberFormatter' => __DIR__ . '/..' . '/symfony/polyfill-intl-icu/Resources/stubs/NumberFormatter.php', - 'Override' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/Override.php', - 'PHPUnit\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Exception.php', - 'PHPUnit\\Framework\\ActualValueIsNotAnObjectException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ActualValueIsNotAnObjectException.php', - 'PHPUnit\\Framework\\Assert' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Assert.php', - 'PHPUnit\\Framework\\AssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/AssertionFailedError.php', - 'PHPUnit\\Framework\\CodeCoverageException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CodeCoverageException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotAcceptParameterTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotAcceptParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareBoolReturnTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareBoolReturnTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareExactlyOneParameterException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareExactlyOneParameterException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotDeclareParameterTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotDeclareParameterTypeException.php', - 'PHPUnit\\Framework\\ComparisonMethodDoesNotExistException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ComparisonMethodDoesNotExistException.php', - 'PHPUnit\\Framework\\Constraint\\ArrayHasKey' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/ArrayHasKey.php', - 'PHPUnit\\Framework\\Constraint\\BinaryOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/BinaryOperator.php', - 'PHPUnit\\Framework\\Constraint\\Callback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Callback.php', - 'PHPUnit\\Framework\\Constraint\\ClassHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasAttribute.php', - 'PHPUnit\\Framework\\Constraint\\ClassHasStaticAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ClassHasStaticAttribute.php', - 'PHPUnit\\Framework\\Constraint\\Constraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Constraint.php', - 'PHPUnit\\Framework\\Constraint\\Count' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/Count.php', - 'PHPUnit\\Framework\\Constraint\\DirectoryExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/DirectoryExists.php', - 'PHPUnit\\Framework\\Constraint\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/Exception.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionCode' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionCode.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessage' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessage.php', - 'PHPUnit\\Framework\\Constraint\\ExceptionMessageRegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Exception/ExceptionMessageRegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\FileExists' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/FileExists.php', - 'PHPUnit\\Framework\\Constraint\\GreaterThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/GreaterThan.php', - 'PHPUnit\\Framework\\Constraint\\IsAnything' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsAnything.php', - 'PHPUnit\\Framework\\Constraint\\IsEmpty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/IsEmpty.php', - 'PHPUnit\\Framework\\Constraint\\IsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqual.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualCanonicalizing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualCanonicalizing.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualIgnoringCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualIgnoringCase.php', - 'PHPUnit\\Framework\\Constraint\\IsEqualWithDelta' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Equality/IsEqualWithDelta.php', - 'PHPUnit\\Framework\\Constraint\\IsFalse' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsFalse.php', - 'PHPUnit\\Framework\\Constraint\\IsFinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsFinite.php', - 'PHPUnit\\Framework\\Constraint\\IsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/IsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\IsInfinite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsInfinite.php', - 'PHPUnit\\Framework\\Constraint\\IsInstanceOf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsInstanceOf.php', - 'PHPUnit\\Framework\\Constraint\\IsJson' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/IsJson.php', - 'PHPUnit\\Framework\\Constraint\\IsNan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Math/IsNan.php', - 'PHPUnit\\Framework\\Constraint\\IsNull' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsNull.php', - 'PHPUnit\\Framework\\Constraint\\IsReadable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsReadable.php', - 'PHPUnit\\Framework\\Constraint\\IsTrue' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Boolean/IsTrue.php', - 'PHPUnit\\Framework\\Constraint\\IsType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Type/IsType.php', - 'PHPUnit\\Framework\\Constraint\\IsWritable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Filesystem/IsWritable.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatches' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatches.php', - 'PHPUnit\\Framework\\Constraint\\JsonMatchesErrorMessageProvider' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/JsonMatchesErrorMessageProvider.php', - 'PHPUnit\\Framework\\Constraint\\LessThan' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/LessThan.php', - 'PHPUnit\\Framework\\Constraint\\LogicalAnd' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalAnd.php', - 'PHPUnit\\Framework\\Constraint\\LogicalNot' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalNot.php', - 'PHPUnit\\Framework\\Constraint\\LogicalOr' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalOr.php', - 'PHPUnit\\Framework\\Constraint\\LogicalXor' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/LogicalXor.php', - 'PHPUnit\\Framework\\Constraint\\ObjectEquals' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectEquals.php', - 'PHPUnit\\Framework\\Constraint\\ObjectHasAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasAttribute.php', - 'PHPUnit\\Framework\\Constraint\\ObjectHasProperty' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Object/ObjectHasProperty.php', - 'PHPUnit\\Framework\\Constraint\\Operator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/Operator.php', - 'PHPUnit\\Framework\\Constraint\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/RegularExpression.php', - 'PHPUnit\\Framework\\Constraint\\SameSize' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Cardinality/SameSize.php', - 'PHPUnit\\Framework\\Constraint\\StringContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringContains.php', - 'PHPUnit\\Framework\\Constraint\\StringEndsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringEndsWith.php', - 'PHPUnit\\Framework\\Constraint\\StringMatchesFormatDescription' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringMatchesFormatDescription.php', - 'PHPUnit\\Framework\\Constraint\\StringStartsWith' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/String/StringStartsWith.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContains' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContains.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsEqual' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsEqual.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsIdentical' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsIdentical.php', - 'PHPUnit\\Framework\\Constraint\\TraversableContainsOnly' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Traversable/TraversableContainsOnly.php', - 'PHPUnit\\Framework\\Constraint\\UnaryOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Constraint/Operator/UnaryOperator.php', - 'PHPUnit\\Framework\\CoveredCodeNotExecutedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/CoveredCodeNotExecutedException.php', - 'PHPUnit\\Framework\\DataProviderTestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/DataProviderTestSuite.php', - 'PHPUnit\\Framework\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Error.php', - 'PHPUnit\\Framework\\ErrorTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ErrorTestCase.php', - 'PHPUnit\\Framework\\Error\\Deprecated' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Deprecated.php', - 'PHPUnit\\Framework\\Error\\Error' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Error.php', - 'PHPUnit\\Framework\\Error\\Notice' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Notice.php', - 'PHPUnit\\Framework\\Error\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Error/Warning.php', - 'PHPUnit\\Framework\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Exception.php', - 'PHPUnit\\Framework\\ExceptionWrapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExceptionWrapper.php', - 'PHPUnit\\Framework\\ExecutionOrderDependency' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/ExecutionOrderDependency.php', - 'PHPUnit\\Framework\\ExpectationFailedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/ExpectationFailedException.php', - 'PHPUnit\\Framework\\IncompleteTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTest.php', - 'PHPUnit\\Framework\\IncompleteTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/IncompleteTestCase.php', - 'PHPUnit\\Framework\\IncompleteTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/IncompleteTestError.php', - 'PHPUnit\\Framework\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidArgumentException.php', - 'PHPUnit\\Framework\\InvalidCoversTargetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidCoversTargetException.php', - 'PHPUnit\\Framework\\InvalidDataProviderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/InvalidDataProviderException.php', - 'PHPUnit\\Framework\\InvalidParameterGroupException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/InvalidParameterGroupException.php', - 'PHPUnit\\Framework\\MissingCoversAnnotationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/MissingCoversAnnotationException.php', - 'PHPUnit\\Framework\\MockObject\\Api' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Api.php', - 'PHPUnit\\Framework\\MockObject\\BadMethodCallException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/BadMethodCallException.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Identity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Identity.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationMocker' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationMocker.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\InvocationStubber' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/InvocationStubber.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\MethodNameMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/MethodNameMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\ParametersMatch' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/ParametersMatch.php', - 'PHPUnit\\Framework\\MockObject\\Builder\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Builder/Stub.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseAddMethodsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseAddMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\CannotUseOnlyMethodsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/CannotUseOnlyMethodsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassAlreadyExistsException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassAlreadyExistsException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsFinalException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsFinalException.php', - 'PHPUnit\\Framework\\MockObject\\ClassIsReadonlyException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ClassIsReadonlyException.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/ConfigurableMethod.php', - 'PHPUnit\\Framework\\MockObject\\ConfigurableMethodsAlreadyInitializedException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ConfigurableMethodsAlreadyInitializedException.php', - 'PHPUnit\\Framework\\MockObject\\DuplicateMethodException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/DuplicateMethodException.php', - 'PHPUnit\\Framework\\MockObject\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Generator.php', - 'PHPUnit\\Framework\\MockObject\\IncompatibleReturnValueException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/IncompatibleReturnValueException.php', - 'PHPUnit\\Framework\\MockObject\\InvalidMethodNameException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/InvalidMethodNameException.php', - 'PHPUnit\\Framework\\MockObject\\Invocation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Invocation.php', - 'PHPUnit\\Framework\\MockObject\\InvocationHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/InvocationHandler.php', - 'PHPUnit\\Framework\\MockObject\\MatchBuilderNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatchBuilderNotFoundException.php', - 'PHPUnit\\Framework\\MockObject\\Matcher' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Matcher.php', - 'PHPUnit\\Framework\\MockObject\\MatcherAlreadyRegisteredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MatcherAlreadyRegisteredException.php', - 'PHPUnit\\Framework\\MockObject\\Method' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Api/Method.php', - 'PHPUnit\\Framework\\MockObject\\MethodCannotBeConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodCannotBeConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameAlreadyConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameConstraint' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MethodNameConstraint.php', - 'PHPUnit\\Framework\\MockObject\\MethodNameNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodNameNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MethodParametersAlreadyConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/MethodParametersAlreadyConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\MockBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockBuilder.php', - 'PHPUnit\\Framework\\MockObject\\MockClass' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockClass.php', - 'PHPUnit\\Framework\\MockObject\\MockMethod' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethod.php', - 'PHPUnit\\Framework\\MockObject\\MockMethodSet' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockMethodSet.php', - 'PHPUnit\\Framework\\MockObject\\MockObject' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockObject.php', - 'PHPUnit\\Framework\\MockObject\\MockTrait' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockTrait.php', - 'PHPUnit\\Framework\\MockObject\\MockType' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/MockType.php', - 'PHPUnit\\Framework\\MockObject\\OriginalConstructorInvocationRequiredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/OriginalConstructorInvocationRequiredException.php', - 'PHPUnit\\Framework\\MockObject\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReflectionException.php', - 'PHPUnit\\Framework\\MockObject\\ReturnValueNotConfiguredException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/ReturnValueNotConfiguredException.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyInvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyInvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\AnyParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/AnyParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ConsecutiveParameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ConsecutiveParameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvocationOrder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvocationOrder.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtIndex' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtIndex.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtLeastOnce' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtLeastOnce.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedAtMostCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedAtMostCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\InvokedCount' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/InvokedCount.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\MethodName' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/MethodName.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\Parameters' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/Parameters.php', - 'PHPUnit\\Framework\\MockObject\\Rule\\ParametersRule' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Rule/ParametersRule.php', - 'PHPUnit\\Framework\\MockObject\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/RuntimeException.php', - 'PHPUnit\\Framework\\MockObject\\SoapExtensionNotAvailableException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/SoapExtensionNotAvailableException.php', - 'PHPUnit\\Framework\\MockObject\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ConsecutiveCalls' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ConsecutiveCalls.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Exception.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnArgument' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnArgument.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnCallback' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnCallback.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnReference' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnReference.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnSelf' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnSelf.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnStub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnStub.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\ReturnValueMap' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/ReturnValueMap.php', - 'PHPUnit\\Framework\\MockObject\\Stub\\Stub' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Stub/Stub.php', - 'PHPUnit\\Framework\\MockObject\\UnknownClassException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownClassException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTraitException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTraitException.php', - 'PHPUnit\\Framework\\MockObject\\UnknownTypeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Exception/UnknownTypeException.php', - 'PHPUnit\\Framework\\MockObject\\Verifiable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/MockObject/Verifiable.php', - 'PHPUnit\\Framework\\NoChildTestSuiteException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/NoChildTestSuiteException.php', - 'PHPUnit\\Framework\\OutputError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/OutputError.php', - 'PHPUnit\\Framework\\PHPTAssertionFailedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/PHPTAssertionFailedError.php', - 'PHPUnit\\Framework\\Reorderable' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Reorderable.php', - 'PHPUnit\\Framework\\RiskyTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/RiskyTestError.php', - 'PHPUnit\\Framework\\SelfDescribing' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SelfDescribing.php', - 'PHPUnit\\Framework\\SkippedTest' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTest.php', - 'PHPUnit\\Framework\\SkippedTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/SkippedTestCase.php', - 'PHPUnit\\Framework\\SkippedTestError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestError.php', - 'PHPUnit\\Framework\\SkippedTestSuiteError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SkippedTestSuiteError.php', - 'PHPUnit\\Framework\\SyntheticError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticError.php', - 'PHPUnit\\Framework\\SyntheticSkippedError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/SyntheticSkippedError.php', - 'PHPUnit\\Framework\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Test.php', - 'PHPUnit\\Framework\\TestBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestBuilder.php', - 'PHPUnit\\Framework\\TestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestCase.php', - 'PHPUnit\\Framework\\TestFailure' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestFailure.php', - 'PHPUnit\\Framework\\TestListener' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListener.php', - 'PHPUnit\\Framework\\TestListenerDefaultImplementation' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestListenerDefaultImplementation.php', - 'PHPUnit\\Framework\\TestResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestResult.php', - 'PHPUnit\\Framework\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuite.php', - 'PHPUnit\\Framework\\TestSuiteIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/TestSuiteIterator.php', - 'PHPUnit\\Framework\\UnintentionallyCoveredCodeError' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/UnintentionallyCoveredCodeError.php', - 'PHPUnit\\Framework\\Warning' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/Exception/Warning.php', - 'PHPUnit\\Framework\\WarningTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Framework/WarningTestCase.php', - 'PHPUnit\\Runner\\AfterIncompleteTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterIncompleteTestHook.php', - 'PHPUnit\\Runner\\AfterLastTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterLastTestHook.php', - 'PHPUnit\\Runner\\AfterRiskyTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterRiskyTestHook.php', - 'PHPUnit\\Runner\\AfterSkippedTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterSkippedTestHook.php', - 'PHPUnit\\Runner\\AfterSuccessfulTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterSuccessfulTestHook.php', - 'PHPUnit\\Runner\\AfterTestErrorHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestErrorHook.php', - 'PHPUnit\\Runner\\AfterTestFailureHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestFailureHook.php', - 'PHPUnit\\Runner\\AfterTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestHook.php', - 'PHPUnit\\Runner\\AfterTestWarningHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/AfterTestWarningHook.php', - 'PHPUnit\\Runner\\BaseTestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/BaseTestRunner.php', - 'PHPUnit\\Runner\\BeforeFirstTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeFirstTestHook.php', - 'PHPUnit\\Runner\\BeforeTestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/BeforeTestHook.php', - 'PHPUnit\\Runner\\DefaultTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/DefaultTestResultCache.php', - 'PHPUnit\\Runner\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Exception.php', - 'PHPUnit\\Runner\\Extension\\ExtensionHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/ExtensionHandler.php', - 'PHPUnit\\Runner\\Extension\\PharLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Extension/PharLoader.php', - 'PHPUnit\\Runner\\Filter\\ExcludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/ExcludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\Factory' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/Factory.php', - 'PHPUnit\\Runner\\Filter\\GroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/GroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\IncludeGroupFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/IncludeGroupFilterIterator.php', - 'PHPUnit\\Runner\\Filter\\NameFilterIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Filter/NameFilterIterator.php', - 'PHPUnit\\Runner\\Hook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/Hook.php', - 'PHPUnit\\Runner\\NullTestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/NullTestResultCache.php', - 'PHPUnit\\Runner\\PhptTestCase' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/PhptTestCase.php', - 'PHPUnit\\Runner\\ResultCacheExtension' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/ResultCacheExtension.php', - 'PHPUnit\\Runner\\StandardTestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/StandardTestSuiteLoader.php', - 'PHPUnit\\Runner\\TestHook' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestHook.php', - 'PHPUnit\\Runner\\TestListenerAdapter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Hook/TestListenerAdapter.php', - 'PHPUnit\\Runner\\TestResultCache' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestResultCache.php', - 'PHPUnit\\Runner\\TestSuiteLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteLoader.php', - 'PHPUnit\\Runner\\TestSuiteSorter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/TestSuiteSorter.php', - 'PHPUnit\\Runner\\Version' => __DIR__ . '/..' . '/phpunit/phpunit/src/Runner/Version.php', - 'PHPUnit\\TextUI\\CliArguments\\Builder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/CliArguments/Builder.php', - 'PHPUnit\\TextUI\\CliArguments\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/CliArguments/Configuration.php', - 'PHPUnit\\TextUI\\CliArguments\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/CliArguments/Exception.php', - 'PHPUnit\\TextUI\\CliArguments\\Mapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/CliArguments/Mapper.php', - 'PHPUnit\\TextUI\\Command' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Command.php', - 'PHPUnit\\TextUI\\DefaultResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/DefaultResultPrinter.php', - 'PHPUnit\\TextUI\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/Exception.php', - 'PHPUnit\\TextUI\\Help' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Help.php', - 'PHPUnit\\TextUI\\ReflectionException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/ReflectionException.php', - 'PHPUnit\\TextUI\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/ResultPrinter.php', - 'PHPUnit\\TextUI\\RuntimeException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/RuntimeException.php', - 'PHPUnit\\TextUI\\TestDirectoryNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/TestDirectoryNotFoundException.php', - 'PHPUnit\\TextUI\\TestFileNotFoundException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/Exception/TestFileNotFoundException.php', - 'PHPUnit\\TextUI\\TestRunner' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestRunner.php', - 'PHPUnit\\TextUI\\TestSuiteMapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/TestSuiteMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/CodeCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\FilterMapper' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/FilterMapper.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\Directory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/Directory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\DirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Filter\\DirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Filter/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Clover.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Cobertura' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Cobertura.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Crap4j.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Html' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Php' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CodeCoverage\\Report\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/CodeCoverage/Report/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Configuration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Configuration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Constant' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Constant.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConstantCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConstantCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/ConstantCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ConvertLogTypes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/ConvertLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCloverToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCloverToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageCrap4jToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageCrap4jToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageHtmlToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageHtmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoveragePhpToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoveragePhpToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageTextToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageTextToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\CoverageXmlToReport' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/CoverageXmlToReport.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Directory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/Directory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\DirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/DirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Exception.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Extension' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/Extension.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ExtensionCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\ExtensionCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/ExtensionCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\File' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/File.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FileCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\FileCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Filesystem/FileCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Generator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Generator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Group' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Group.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\GroupCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\GroupCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/GroupCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Groups' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Group/Groups.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSetting' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSetting.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSettingCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IniSettingCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/IniSettingCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\IntroduceCoverageElement' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/IntroduceCoverageElement.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Loader' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Loader.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\LogToReportMigration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/LogToReportMigration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Junit' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Junit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Logging' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Logging.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TeamCity.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Html' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Html.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\TestDox\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/TestDox/Xml.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Logging\\Text' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Logging/Text.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migration' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/Migration.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilder' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilder.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationBuilderException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationBuilderException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MigrationException' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/MigrationException.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Migrator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromFilterWhitelistToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromFilterWhitelistToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveAttributesFromRootToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveAttributesFromRootToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistExcludesToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistExcludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\MoveWhitelistIncludesToCoverage' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/MoveWhitelistIncludesToCoverage.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PHPUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHPUnit/PHPUnit.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Php' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Php.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\PhpHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/PhpHandler.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveCacheTokensAttribute' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveCacheTokensAttribute.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveEmptyFilter' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveEmptyFilter.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\RemoveLogTypes' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/RemoveLogTypes.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectory' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectory.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectoryCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestDirectoryCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestDirectoryCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFile' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFile.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFileCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestFileCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestFileCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuite' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuite.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\TestSuiteCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/TestSuite/TestSuiteCollectionIterator.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\UpdateSchemaLocationTo93' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/Migration/Migrations/UpdateSchemaLocationTo93.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\Variable' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/Variable.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\VariableCollection' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollection.php', - 'PHPUnit\\TextUI\\XmlConfiguration\\VariableCollectionIterator' => __DIR__ . '/..' . '/phpunit/phpunit/src/TextUI/XmlConfiguration/PHP/VariableCollectionIterator.php', - 'PHPUnit\\Util\\Annotation\\DocBlock' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/DocBlock.php', - 'PHPUnit\\Util\\Annotation\\Registry' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Annotation/Registry.php', - 'PHPUnit\\Util\\Blacklist' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Blacklist.php', - 'PHPUnit\\Util\\Cloner' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Cloner.php', - 'PHPUnit\\Util\\Color' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Color.php', - 'PHPUnit\\Util\\ErrorHandler' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ErrorHandler.php', - 'PHPUnit\\Util\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Exception.php', - 'PHPUnit\\Util\\ExcludeList' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/ExcludeList.php', - 'PHPUnit\\Util\\FileLoader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/FileLoader.php', - 'PHPUnit\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filesystem.php', - 'PHPUnit\\Util\\Filter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Filter.php', - 'PHPUnit\\Util\\GlobalState' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/GlobalState.php', - 'PHPUnit\\Util\\InvalidDataSetException' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/InvalidDataSetException.php', - 'PHPUnit\\Util\\Json' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Json.php', - 'PHPUnit\\Util\\Log\\JUnit' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/JUnit.php', - 'PHPUnit\\Util\\Log\\TeamCity' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Log/TeamCity.php', - 'PHPUnit\\Util\\PHP\\AbstractPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/AbstractPhpProcess.php', - 'PHPUnit\\Util\\PHP\\DefaultPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/DefaultPhpProcess.php', - 'PHPUnit\\Util\\PHP\\WindowsPhpProcess' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/PHP/WindowsPhpProcess.php', - 'PHPUnit\\Util\\Printer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Printer.php', - 'PHPUnit\\Util\\Reflection' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Reflection.php', - 'PHPUnit\\Util\\RegularExpression' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/RegularExpression.php', - 'PHPUnit\\Util\\Test' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Test.php', - 'PHPUnit\\Util\\TestDox\\CliTestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/CliTestDoxPrinter.php', - 'PHPUnit\\Util\\TestDox\\HtmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/HtmlResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\NamePrettifier' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/NamePrettifier.php', - 'PHPUnit\\Util\\TestDox\\ResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/ResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\TestDoxPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TestDoxPrinter.php', - 'PHPUnit\\Util\\TestDox\\TextResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/TextResultPrinter.php', - 'PHPUnit\\Util\\TestDox\\XmlResultPrinter' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TestDox/XmlResultPrinter.php', - 'PHPUnit\\Util\\TextTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/TextTestListRenderer.php', - 'PHPUnit\\Util\\Type' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Type.php', - 'PHPUnit\\Util\\VersionComparisonOperator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/VersionComparisonOperator.php', - 'PHPUnit\\Util\\XdebugFilterScriptGenerator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XdebugFilterScriptGenerator.php', - 'PHPUnit\\Util\\Xml' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml.php', - 'PHPUnit\\Util\\XmlTestListRenderer' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/XmlTestListRenderer.php', - 'PHPUnit\\Util\\Xml\\Exception' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/Exception.php', - 'PHPUnit\\Util\\Xml\\FailedSchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/FailedSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\Loader' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/Loader.php', - 'PHPUnit\\Util\\Xml\\SchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\SchemaDetector' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SchemaDetector.php', - 'PHPUnit\\Util\\Xml\\SchemaFinder' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SchemaFinder.php', - 'PHPUnit\\Util\\Xml\\SnapshotNodeList' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SnapshotNodeList.php', - 'PHPUnit\\Util\\Xml\\SuccessfulSchemaDetectionResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/SuccessfulSchemaDetectionResult.php', - 'PHPUnit\\Util\\Xml\\ValidationResult' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/ValidationResult.php', - 'PHPUnit\\Util\\Xml\\Validator' => __DIR__ . '/..' . '/phpunit/phpunit/src/Util/Xml/Validator.php', - 'PharIo\\Manifest\\Application' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Application.php', - 'PharIo\\Manifest\\ApplicationName' => __DIR__ . '/..' . '/phar-io/manifest/src/values/ApplicationName.php', - 'PharIo\\Manifest\\Author' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Author.php', - 'PharIo\\Manifest\\AuthorCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollection.php', - 'PharIo\\Manifest\\AuthorCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/AuthorCollectionIterator.php', - 'PharIo\\Manifest\\AuthorElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElement.php', - 'PharIo\\Manifest\\AuthorElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/AuthorElementCollection.php', - 'PharIo\\Manifest\\BundledComponent' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponent.php', - 'PharIo\\Manifest\\BundledComponentCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollection.php', - 'PharIo\\Manifest\\BundledComponentCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/BundledComponentCollectionIterator.php', - 'PharIo\\Manifest\\BundlesElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/BundlesElement.php', - 'PharIo\\Manifest\\ComponentElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElement.php', - 'PharIo\\Manifest\\ComponentElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ComponentElementCollection.php', - 'PharIo\\Manifest\\ContainsElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ContainsElement.php', - 'PharIo\\Manifest\\CopyrightElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/CopyrightElement.php', - 'PharIo\\Manifest\\CopyrightInformation' => __DIR__ . '/..' . '/phar-io/manifest/src/values/CopyrightInformation.php', - 'PharIo\\Manifest\\ElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ElementCollection.php', - 'PharIo\\Manifest\\ElementCollectionException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ElementCollectionException.php', - 'PharIo\\Manifest\\Email' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Email.php', - 'PharIo\\Manifest\\Exception' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/Exception.php', - 'PharIo\\Manifest\\ExtElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElement.php', - 'PharIo\\Manifest\\ExtElementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtElementCollection.php', - 'PharIo\\Manifest\\Extension' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Extension.php', - 'PharIo\\Manifest\\ExtensionElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ExtensionElement.php', - 'PharIo\\Manifest\\InvalidApplicationNameException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php', - 'PharIo\\Manifest\\InvalidEmailException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidEmailException.php', - 'PharIo\\Manifest\\InvalidUrlException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/InvalidUrlException.php', - 'PharIo\\Manifest\\Library' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Library.php', - 'PharIo\\Manifest\\License' => __DIR__ . '/..' . '/phar-io/manifest/src/values/License.php', - 'PharIo\\Manifest\\LicenseElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/LicenseElement.php', - 'PharIo\\Manifest\\Manifest' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Manifest.php', - 'PharIo\\Manifest\\ManifestDocument' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestDocument.php', - 'PharIo\\Manifest\\ManifestDocumentException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentException.php', - 'PharIo\\Manifest\\ManifestDocumentLoadingException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php', - 'PharIo\\Manifest\\ManifestDocumentMapper' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestDocumentMapper.php', - 'PharIo\\Manifest\\ManifestDocumentMapperException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php', - 'PharIo\\Manifest\\ManifestElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/ManifestElement.php', - 'PharIo\\Manifest\\ManifestElementException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestElementException.php', - 'PharIo\\Manifest\\ManifestLoader' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestLoader.php', - 'PharIo\\Manifest\\ManifestLoaderException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/ManifestLoaderException.php', - 'PharIo\\Manifest\\ManifestSerializer' => __DIR__ . '/..' . '/phar-io/manifest/src/ManifestSerializer.php', - 'PharIo\\Manifest\\NoEmailAddressException' => __DIR__ . '/..' . '/phar-io/manifest/src/exceptions/NoEmailAddressException.php', - 'PharIo\\Manifest\\PhpElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/PhpElement.php', - 'PharIo\\Manifest\\PhpExtensionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpExtensionRequirement.php', - 'PharIo\\Manifest\\PhpVersionRequirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/PhpVersionRequirement.php', - 'PharIo\\Manifest\\Requirement' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Requirement.php', - 'PharIo\\Manifest\\RequirementCollection' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollection.php', - 'PharIo\\Manifest\\RequirementCollectionIterator' => __DIR__ . '/..' . '/phar-io/manifest/src/values/RequirementCollectionIterator.php', - 'PharIo\\Manifest\\RequiresElement' => __DIR__ . '/..' . '/phar-io/manifest/src/xml/RequiresElement.php', - 'PharIo\\Manifest\\Type' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Type.php', - 'PharIo\\Manifest\\Url' => __DIR__ . '/..' . '/phar-io/manifest/src/values/Url.php', - 'PharIo\\Version\\AbstractVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AbstractVersionConstraint.php', - 'PharIo\\Version\\AndVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AndVersionConstraintGroup.php', - 'PharIo\\Version\\AnyVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/AnyVersionConstraint.php', - 'PharIo\\Version\\BuildMetaData' => __DIR__ . '/..' . '/phar-io/version/src/BuildMetaData.php', - 'PharIo\\Version\\ExactVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/ExactVersionConstraint.php', - 'PharIo\\Version\\Exception' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/Exception.php', - 'PharIo\\Version\\GreaterThanOrEqualToVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php', - 'PharIo\\Version\\InvalidPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php', - 'PharIo\\Version\\InvalidVersionException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/InvalidVersionException.php', - 'PharIo\\Version\\NoBuildMetaDataException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoBuildMetaDataException.php', - 'PharIo\\Version\\NoPreReleaseSuffixException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/NoPreReleaseSuffixException.php', - 'PharIo\\Version\\OrVersionConstraintGroup' => __DIR__ . '/..' . '/phar-io/version/src/constraints/OrVersionConstraintGroup.php', - 'PharIo\\Version\\PreReleaseSuffix' => __DIR__ . '/..' . '/phar-io/version/src/PreReleaseSuffix.php', - 'PharIo\\Version\\SpecificMajorAndMinorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php', - 'PharIo\\Version\\SpecificMajorVersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php', - 'PharIo\\Version\\UnsupportedVersionConstraintException' => __DIR__ . '/..' . '/phar-io/version/src/exceptions/UnsupportedVersionConstraintException.php', - 'PharIo\\Version\\Version' => __DIR__ . '/..' . '/phar-io/version/src/Version.php', - 'PharIo\\Version\\VersionConstraint' => __DIR__ . '/..' . '/phar-io/version/src/constraints/VersionConstraint.php', - 'PharIo\\Version\\VersionConstraintParser' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintParser.php', - 'PharIo\\Version\\VersionConstraintValue' => __DIR__ . '/..' . '/phar-io/version/src/VersionConstraintValue.php', - 'PharIo\\Version\\VersionNumber' => __DIR__ . '/..' . '/phar-io/version/src/VersionNumber.php', - 'SQLite3Exception' => __DIR__ . '/..' . '/symfony/polyfill-php83/Resources/stubs/SQLite3Exception.php', - 'SebastianBergmann\\CliParser\\AmbiguousOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/AmbiguousOptionException.php', - 'SebastianBergmann\\CliParser\\Exception' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/Exception.php', - 'SebastianBergmann\\CliParser\\OptionDoesNotAllowArgumentException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/OptionDoesNotAllowArgumentException.php', - 'SebastianBergmann\\CliParser\\Parser' => __DIR__ . '/..' . '/sebastian/cli-parser/src/Parser.php', - 'SebastianBergmann\\CliParser\\RequiredOptionArgumentMissingException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/RequiredOptionArgumentMissingException.php', - 'SebastianBergmann\\CliParser\\UnknownOptionException' => __DIR__ . '/..' . '/sebastian/cli-parser/src/exceptions/UnknownOptionException.php', - 'SebastianBergmann\\CodeCoverage\\BranchAndPathCoverageNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php', - 'SebastianBergmann\\CodeCoverage\\CodeCoverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/CodeCoverage.php', - 'SebastianBergmann\\CodeCoverage\\DeadCodeDetectionNotSupportedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PathExistsButIsNotDirectoryException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PcovDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PcovDriver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PcovNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PhpdbgDriver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/PhpdbgDriver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\PhpdbgNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/PhpdbgNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Selector' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Selector.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\WriteOperationFailedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\WrongXdebugVersionException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/WrongXdebugVersionException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug2Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Xdebug2Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug2NotEnabledException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Xdebug2NotEnabledException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug3Driver' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Driver/Xdebug3Driver.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\Xdebug3NotEnabledException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Xdebug3NotEnabledException.php', - 'SebastianBergmann\\CodeCoverage\\Driver\\XdebugNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Exception' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/Exception.php', - 'SebastianBergmann\\CodeCoverage\\Filter' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Filter.php', - 'SebastianBergmann\\CodeCoverage\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php', - 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\NoCodeCoverageDriverWithPathCoverageSupportAvailableException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php', - 'SebastianBergmann\\CodeCoverage\\Node\\AbstractNode' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/AbstractNode.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Builder' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Builder.php', - 'SebastianBergmann\\CodeCoverage\\Node\\CrapIndex' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/CrapIndex.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Node\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/File.php', - 'SebastianBergmann\\CodeCoverage\\Node\\Iterator' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Node/Iterator.php', - 'SebastianBergmann\\CodeCoverage\\ParserException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ParserException.php', - 'SebastianBergmann\\CodeCoverage\\ProcessedCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php', - 'SebastianBergmann\\CodeCoverage\\RawCodeCoverageData' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/RawCodeCoverageData.php', - 'SebastianBergmann\\CodeCoverage\\ReflectionException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReflectionException.php', - 'SebastianBergmann\\CodeCoverage\\ReportAlreadyFinalizedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Clover' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Clover.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Cobertura' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Cobertura.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Crap4j' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Crap4j.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Dashboard' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Facade.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Html\\Renderer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Html/Renderer.php', - 'SebastianBergmann\\CodeCoverage\\Report\\PHP' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/PHP.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Text' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Text.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\BuildInformation' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/BuildInformation.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Coverage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Coverage.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Directory' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Directory.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Facade' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Facade.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\File' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/File.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Method' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Method.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Node' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Node.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Project' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Project.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Report' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Report.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Source' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Source.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Tests' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Tests.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Totals' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Totals.php', - 'SebastianBergmann\\CodeCoverage\\Report\\Xml\\Unit' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Report/Xml/Unit.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysisCacheNotConfiguredException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CacheWarmer' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CacheWarmer.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CachingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CachingFileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\CodeUnitFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/CodeUnitFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ExecutableLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ExecutableLinesFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\FileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/FileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\IgnoredLinesFindingVisitor' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/IgnoredLinesFindingVisitor.php', - 'SebastianBergmann\\CodeCoverage\\StaticAnalysis\\ParsingFileAnalyser' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/StaticAnalysis/ParsingFileAnalyser.php', - 'SebastianBergmann\\CodeCoverage\\TestIdMissingException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php', - 'SebastianBergmann\\CodeCoverage\\UnintentionallyCoveredCodeException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php', - 'SebastianBergmann\\CodeCoverage\\Util\\DirectoryCouldNotBeCreatedException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php', - 'SebastianBergmann\\CodeCoverage\\Util\\Filesystem' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Filesystem.php', - 'SebastianBergmann\\CodeCoverage\\Util\\Percentage' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Util/Percentage.php', - 'SebastianBergmann\\CodeCoverage\\Version' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Version.php', - 'SebastianBergmann\\CodeCoverage\\XmlException' => __DIR__ . '/..' . '/phpunit/php-code-coverage/src/Exception/XmlException.php', - 'SebastianBergmann\\CodeUnitReverseLookup\\Wizard' => __DIR__ . '/..' . '/sebastian/code-unit-reverse-lookup/src/Wizard.php', - 'SebastianBergmann\\CodeUnit\\ClassMethodUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/ClassMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\ClassUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/ClassUnit.php', - 'SebastianBergmann\\CodeUnit\\CodeUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/CodeUnit.php', - 'SebastianBergmann\\CodeUnit\\CodeUnitCollection' => __DIR__ . '/..' . '/sebastian/code-unit/src/CodeUnitCollection.php', - 'SebastianBergmann\\CodeUnit\\CodeUnitCollectionIterator' => __DIR__ . '/..' . '/sebastian/code-unit/src/CodeUnitCollectionIterator.php', - 'SebastianBergmann\\CodeUnit\\Exception' => __DIR__ . '/..' . '/sebastian/code-unit/src/exceptions/Exception.php', - 'SebastianBergmann\\CodeUnit\\FunctionUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/FunctionUnit.php', - 'SebastianBergmann\\CodeUnit\\InterfaceMethodUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/InterfaceMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\InterfaceUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/InterfaceUnit.php', - 'SebastianBergmann\\CodeUnit\\InvalidCodeUnitException' => __DIR__ . '/..' . '/sebastian/code-unit/src/exceptions/InvalidCodeUnitException.php', - 'SebastianBergmann\\CodeUnit\\Mapper' => __DIR__ . '/..' . '/sebastian/code-unit/src/Mapper.php', - 'SebastianBergmann\\CodeUnit\\NoTraitException' => __DIR__ . '/..' . '/sebastian/code-unit/src/exceptions/NoTraitException.php', - 'SebastianBergmann\\CodeUnit\\ReflectionException' => __DIR__ . '/..' . '/sebastian/code-unit/src/exceptions/ReflectionException.php', - 'SebastianBergmann\\CodeUnit\\TraitMethodUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/TraitMethodUnit.php', - 'SebastianBergmann\\CodeUnit\\TraitUnit' => __DIR__ . '/..' . '/sebastian/code-unit/src/TraitUnit.php', - 'SebastianBergmann\\Comparator\\ArrayComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ArrayComparator.php', - 'SebastianBergmann\\Comparator\\Comparator' => __DIR__ . '/..' . '/sebastian/comparator/src/Comparator.php', - 'SebastianBergmann\\Comparator\\ComparisonFailure' => __DIR__ . '/..' . '/sebastian/comparator/src/ComparisonFailure.php', - 'SebastianBergmann\\Comparator\\DOMNodeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DOMNodeComparator.php', - 'SebastianBergmann\\Comparator\\DateTimeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DateTimeComparator.php', - 'SebastianBergmann\\Comparator\\DoubleComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/DoubleComparator.php', - 'SebastianBergmann\\Comparator\\Exception' => __DIR__ . '/..' . '/sebastian/comparator/src/exceptions/Exception.php', - 'SebastianBergmann\\Comparator\\ExceptionComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ExceptionComparator.php', - 'SebastianBergmann\\Comparator\\Factory' => __DIR__ . '/..' . '/sebastian/comparator/src/Factory.php', - 'SebastianBergmann\\Comparator\\MockObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/MockObjectComparator.php', - 'SebastianBergmann\\Comparator\\NumericComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/NumericComparator.php', - 'SebastianBergmann\\Comparator\\ObjectComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ObjectComparator.php', - 'SebastianBergmann\\Comparator\\ResourceComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ResourceComparator.php', - 'SebastianBergmann\\Comparator\\RuntimeException' => __DIR__ . '/..' . '/sebastian/comparator/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\Comparator\\ScalarComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/ScalarComparator.php', - 'SebastianBergmann\\Comparator\\SplObjectStorageComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/SplObjectStorageComparator.php', - 'SebastianBergmann\\Comparator\\TypeComparator' => __DIR__ . '/..' . '/sebastian/comparator/src/TypeComparator.php', - 'SebastianBergmann\\Complexity\\Calculator' => __DIR__ . '/..' . '/sebastian/complexity/src/Calculator.php', - 'SebastianBergmann\\Complexity\\Complexity' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/Complexity.php', - 'SebastianBergmann\\Complexity\\ComplexityCalculatingVisitor' => __DIR__ . '/..' . '/sebastian/complexity/src/Visitor/ComplexityCalculatingVisitor.php', - 'SebastianBergmann\\Complexity\\ComplexityCollection' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/ComplexityCollection.php', - 'SebastianBergmann\\Complexity\\ComplexityCollectionIterator' => __DIR__ . '/..' . '/sebastian/complexity/src/Complexity/ComplexityCollectionIterator.php', - 'SebastianBergmann\\Complexity\\CyclomaticComplexityCalculatingVisitor' => __DIR__ . '/..' . '/sebastian/complexity/src/Visitor/CyclomaticComplexityCalculatingVisitor.php', - 'SebastianBergmann\\Complexity\\Exception' => __DIR__ . '/..' . '/sebastian/complexity/src/Exception/Exception.php', - 'SebastianBergmann\\Complexity\\RuntimeException' => __DIR__ . '/..' . '/sebastian/complexity/src/Exception/RuntimeException.php', - 'SebastianBergmann\\Diff\\Chunk' => __DIR__ . '/..' . '/sebastian/diff/src/Chunk.php', - 'SebastianBergmann\\Diff\\ConfigurationException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/ConfigurationException.php', - 'SebastianBergmann\\Diff\\Diff' => __DIR__ . '/..' . '/sebastian/diff/src/Diff.php', - 'SebastianBergmann\\Diff\\Differ' => __DIR__ . '/..' . '/sebastian/diff/src/Differ.php', - 'SebastianBergmann\\Diff\\Exception' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/Exception.php', - 'SebastianBergmann\\Diff\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/diff/src/Exception/InvalidArgumentException.php', - 'SebastianBergmann\\Diff\\Line' => __DIR__ . '/..' . '/sebastian/diff/src/Line.php', - 'SebastianBergmann\\Diff\\LongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/LongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Diff\\MemoryEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/MemoryEfficientLongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Diff\\Output\\AbstractChunkOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/AbstractChunkOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\DiffOnlyOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOnlyOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\DiffOutputBuilderInterface' => __DIR__ . '/..' . '/sebastian/diff/src/Output/DiffOutputBuilderInterface.php', - 'SebastianBergmann\\Diff\\Output\\StrictUnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/StrictUnifiedDiffOutputBuilder.php', - 'SebastianBergmann\\Diff\\Output\\UnifiedDiffOutputBuilder' => __DIR__ . '/..' . '/sebastian/diff/src/Output/UnifiedDiffOutputBuilder.php', - 'SebastianBergmann\\Diff\\Parser' => __DIR__ . '/..' . '/sebastian/diff/src/Parser.php', - 'SebastianBergmann\\Diff\\TimeEfficientLongestCommonSubsequenceCalculator' => __DIR__ . '/..' . '/sebastian/diff/src/TimeEfficientLongestCommonSubsequenceCalculator.php', - 'SebastianBergmann\\Environment\\Console' => __DIR__ . '/..' . '/sebastian/environment/src/Console.php', - 'SebastianBergmann\\Environment\\OperatingSystem' => __DIR__ . '/..' . '/sebastian/environment/src/OperatingSystem.php', - 'SebastianBergmann\\Environment\\Runtime' => __DIR__ . '/..' . '/sebastian/environment/src/Runtime.php', - 'SebastianBergmann\\Exporter\\Exporter' => __DIR__ . '/..' . '/sebastian/exporter/src/Exporter.php', - 'SebastianBergmann\\FileIterator\\Facade' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Facade.php', - 'SebastianBergmann\\FileIterator\\Factory' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Factory.php', - 'SebastianBergmann\\FileIterator\\Iterator' => __DIR__ . '/..' . '/phpunit/php-file-iterator/src/Iterator.php', - 'SebastianBergmann\\GlobalState\\CodeExporter' => __DIR__ . '/..' . '/sebastian/global-state/src/CodeExporter.php', - 'SebastianBergmann\\GlobalState\\Exception' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/Exception.php', - 'SebastianBergmann\\GlobalState\\ExcludeList' => __DIR__ . '/..' . '/sebastian/global-state/src/ExcludeList.php', - 'SebastianBergmann\\GlobalState\\Restorer' => __DIR__ . '/..' . '/sebastian/global-state/src/Restorer.php', - 'SebastianBergmann\\GlobalState\\RuntimeException' => __DIR__ . '/..' . '/sebastian/global-state/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\GlobalState\\Snapshot' => __DIR__ . '/..' . '/sebastian/global-state/src/Snapshot.php', - 'SebastianBergmann\\Invoker\\Exception' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/Exception.php', - 'SebastianBergmann\\Invoker\\Invoker' => __DIR__ . '/..' . '/phpunit/php-invoker/src/Invoker.php', - 'SebastianBergmann\\Invoker\\ProcessControlExtensionNotLoadedException' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/ProcessControlExtensionNotLoadedException.php', - 'SebastianBergmann\\Invoker\\TimeoutException' => __DIR__ . '/..' . '/phpunit/php-invoker/src/exceptions/TimeoutException.php', - 'SebastianBergmann\\LinesOfCode\\Counter' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Counter.php', - 'SebastianBergmann\\LinesOfCode\\Exception' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/Exception.php', - 'SebastianBergmann\\LinesOfCode\\IllogicalValuesException' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/IllogicalValuesException.php', - 'SebastianBergmann\\LinesOfCode\\LineCountingVisitor' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/LineCountingVisitor.php', - 'SebastianBergmann\\LinesOfCode\\LinesOfCode' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/LinesOfCode.php', - 'SebastianBergmann\\LinesOfCode\\NegativeValueException' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/NegativeValueException.php', - 'SebastianBergmann\\LinesOfCode\\RuntimeException' => __DIR__ . '/..' . '/sebastian/lines-of-code/src/Exception/RuntimeException.php', - 'SebastianBergmann\\ObjectEnumerator\\Enumerator' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Enumerator.php', - 'SebastianBergmann\\ObjectEnumerator\\Exception' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/Exception.php', - 'SebastianBergmann\\ObjectEnumerator\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-enumerator/src/InvalidArgumentException.php', - 'SebastianBergmann\\ObjectReflector\\Exception' => __DIR__ . '/..' . '/sebastian/object-reflector/src/Exception.php', - 'SebastianBergmann\\ObjectReflector\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/object-reflector/src/InvalidArgumentException.php', - 'SebastianBergmann\\ObjectReflector\\ObjectReflector' => __DIR__ . '/..' . '/sebastian/object-reflector/src/ObjectReflector.php', - 'SebastianBergmann\\RecursionContext\\Context' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Context.php', - 'SebastianBergmann\\RecursionContext\\Exception' => __DIR__ . '/..' . '/sebastian/recursion-context/src/Exception.php', - 'SebastianBergmann\\RecursionContext\\InvalidArgumentException' => __DIR__ . '/..' . '/sebastian/recursion-context/src/InvalidArgumentException.php', - 'SebastianBergmann\\ResourceOperations\\ResourceOperations' => __DIR__ . '/..' . '/sebastian/resource-operations/src/ResourceOperations.php', - 'SebastianBergmann\\Template\\Exception' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/Exception.php', - 'SebastianBergmann\\Template\\InvalidArgumentException' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/InvalidArgumentException.php', - 'SebastianBergmann\\Template\\RuntimeException' => __DIR__ . '/..' . '/phpunit/php-text-template/src/exceptions/RuntimeException.php', - 'SebastianBergmann\\Template\\Template' => __DIR__ . '/..' . '/phpunit/php-text-template/src/Template.php', - 'SebastianBergmann\\Timer\\Duration' => __DIR__ . '/..' . '/phpunit/php-timer/src/Duration.php', - 'SebastianBergmann\\Timer\\Exception' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/Exception.php', - 'SebastianBergmann\\Timer\\NoActiveTimerException' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/NoActiveTimerException.php', - 'SebastianBergmann\\Timer\\ResourceUsageFormatter' => __DIR__ . '/..' . '/phpunit/php-timer/src/ResourceUsageFormatter.php', - 'SebastianBergmann\\Timer\\TimeSinceStartOfRequestNotAvailableException' => __DIR__ . '/..' . '/phpunit/php-timer/src/exceptions/TimeSinceStartOfRequestNotAvailableException.php', - 'SebastianBergmann\\Timer\\Timer' => __DIR__ . '/..' . '/phpunit/php-timer/src/Timer.php', - 'SebastianBergmann\\Type\\CallableType' => __DIR__ . '/..' . '/sebastian/type/src/type/CallableType.php', - 'SebastianBergmann\\Type\\Exception' => __DIR__ . '/..' . '/sebastian/type/src/exception/Exception.php', - 'SebastianBergmann\\Type\\FalseType' => __DIR__ . '/..' . '/sebastian/type/src/type/FalseType.php', - 'SebastianBergmann\\Type\\GenericObjectType' => __DIR__ . '/..' . '/sebastian/type/src/type/GenericObjectType.php', - 'SebastianBergmann\\Type\\IntersectionType' => __DIR__ . '/..' . '/sebastian/type/src/type/IntersectionType.php', - 'SebastianBergmann\\Type\\IterableType' => __DIR__ . '/..' . '/sebastian/type/src/type/IterableType.php', - 'SebastianBergmann\\Type\\MixedType' => __DIR__ . '/..' . '/sebastian/type/src/type/MixedType.php', - 'SebastianBergmann\\Type\\NeverType' => __DIR__ . '/..' . '/sebastian/type/src/type/NeverType.php', - 'SebastianBergmann\\Type\\NullType' => __DIR__ . '/..' . '/sebastian/type/src/type/NullType.php', - 'SebastianBergmann\\Type\\ObjectType' => __DIR__ . '/..' . '/sebastian/type/src/type/ObjectType.php', - 'SebastianBergmann\\Type\\Parameter' => __DIR__ . '/..' . '/sebastian/type/src/Parameter.php', - 'SebastianBergmann\\Type\\ReflectionMapper' => __DIR__ . '/..' . '/sebastian/type/src/ReflectionMapper.php', - 'SebastianBergmann\\Type\\RuntimeException' => __DIR__ . '/..' . '/sebastian/type/src/exception/RuntimeException.php', - 'SebastianBergmann\\Type\\SimpleType' => __DIR__ . '/..' . '/sebastian/type/src/type/SimpleType.php', - 'SebastianBergmann\\Type\\StaticType' => __DIR__ . '/..' . '/sebastian/type/src/type/StaticType.php', - 'SebastianBergmann\\Type\\TrueType' => __DIR__ . '/..' . '/sebastian/type/src/type/TrueType.php', - 'SebastianBergmann\\Type\\Type' => __DIR__ . '/..' . '/sebastian/type/src/type/Type.php', - 'SebastianBergmann\\Type\\TypeName' => __DIR__ . '/..' . '/sebastian/type/src/TypeName.php', - 'SebastianBergmann\\Type\\UnionType' => __DIR__ . '/..' . '/sebastian/type/src/type/UnionType.php', - 'SebastianBergmann\\Type\\UnknownType' => __DIR__ . '/..' . '/sebastian/type/src/type/UnknownType.php', - 'SebastianBergmann\\Type\\VoidType' => __DIR__ . '/..' . '/sebastian/type/src/type/VoidType.php', - 'SebastianBergmann\\Version' => __DIR__ . '/..' . '/sebastian/version/src/Version.php', - 'TheSeer\\Tokenizer\\Exception' => __DIR__ . '/..' . '/theseer/tokenizer/src/Exception.php', - 'TheSeer\\Tokenizer\\NamespaceUri' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUri.php', - 'TheSeer\\Tokenizer\\NamespaceUriException' => __DIR__ . '/..' . '/theseer/tokenizer/src/NamespaceUriException.php', - 'TheSeer\\Tokenizer\\Token' => __DIR__ . '/..' . '/theseer/tokenizer/src/Token.php', - 'TheSeer\\Tokenizer\\TokenCollection' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollection.php', - 'TheSeer\\Tokenizer\\TokenCollectionException' => __DIR__ . '/..' . '/theseer/tokenizer/src/TokenCollectionException.php', - 'TheSeer\\Tokenizer\\Tokenizer' => __DIR__ . '/..' . '/theseer/tokenizer/src/Tokenizer.php', - 'TheSeer\\Tokenizer\\XMLSerializer' => __DIR__ . '/..' . '/theseer/tokenizer/src/XMLSerializer.php', - '©' => __DIR__ . '/..' . '/symfony/cache/Traits/ValueWrapper.php', - ); - - public static function getInitializer(ClassLoader $loader) - { - return \Closure::bind(function () use ($loader) { - $loader->prefixLengthsPsr4 = ComposerStaticInit0cc412674760ac32bd8551de9f3bebb9::$prefixLengthsPsr4; - $loader->prefixDirsPsr4 = ComposerStaticInit0cc412674760ac32bd8551de9f3bebb9::$prefixDirsPsr4; - $loader->classMap = ComposerStaticInit0cc412674760ac32bd8551de9f3bebb9::$classMap; - - }, null, ClassLoader::class); - } -} diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json deleted file mode 100644 index 873235d..0000000 --- a/vendor/composer/installed.json +++ /dev/null @@ -1,10248 +0,0 @@ -{ - "packages": [ - { - "name": "composer/semver", - "version": "3.4.3", - "version_normalized": "3.4.3.0", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.11", - "symfony/phpunit-bridge": "^3 || ^7" - }, - "time": "2024-09-19T14:15:21+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "install-path": "./semver" - }, - { - "name": "doctrine/cache", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/cache.git", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/cache/zipball/1ca8f21980e770095a31456042471a57bc4c68fb", - "reference": "1ca8f21980e770095a31456042471a57bc4c68fb", - "shasum": "" - }, - "require": { - "php": "~7.1 || ^8.0" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "time": "2022-05-20T20:07:39+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "keywords": [ - "abstraction", - "apcu", - "cache", - "caching", - "couchdb", - "memcached", - "php", - "redis", - "xcache" - ], - "support": { - "issues": "https://github.com/doctrine/cache/issues", - "source": "https://github.com/doctrine/cache/tree/2.2.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcache", - "type": "tidelift" - } - ], - "install-path": "../doctrine/cache" - }, - { - "name": "doctrine/collections", - "version": "2.2.2", - "version_normalized": "2.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/collections.git", - "reference": "d8af7f248c74f195f7347424600fd9e17b57af59" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/collections/zipball/d8af7f248c74f195f7347424600fd9e17b57af59", - "reference": "d8af7f248c74f195f7347424600fd9e17b57af59", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1", - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "ext-json": "*", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.11" - }, - "time": "2024-04-18T06:56:21+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Collections\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", - "homepage": "https://www.doctrine-project.org/projects/collections.html", - "keywords": [ - "array", - "collections", - "iterators", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/collections/issues", - "source": "https://github.com/doctrine/collections/tree/2.2.2" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fcollections", - "type": "tidelift" - } - ], - "install-path": "../doctrine/collections" - }, - { - "name": "doctrine/dbal", - "version": "3.9.1", - "version_normalized": "3.9.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/dbal.git", - "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", - "reference": "d7dc08f98cba352b2bab5d32c5e58f7e745c11a7", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/cache": "^1.11|^2.0", - "doctrine/deprecations": "^0.5.3|^1", - "doctrine/event-manager": "^1|^2", - "php": "^7.4 || ^8.0", - "psr/cache": "^1|^2|^3", - "psr/log": "^1|^2|^3" - }, - "require-dev": { - "doctrine/coding-standard": "12.0.0", - "fig/log-test": "^1", - "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.12.0", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "9.6.20", - "psalm/plugin-phpunit": "0.18.4", - "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.10.2", - "symfony/cache": "^5.4|^6.0|^7.0", - "symfony/console": "^4.4|^5.4|^6.0|^7.0", - "vimeo/psalm": "4.30.0" - }, - "suggest": { - "symfony/console": "For helpful console commands such as SQL execution and import of files." - }, - "time": "2024-09-01T13:49:23+00:00", - "bin": [ - "bin/doctrine-dbal" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\DBAL\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - } - ], - "description": "Powerful PHP database abstraction layer (DBAL) with many features for database schema introspection and management.", - "homepage": "https://www.doctrine-project.org/projects/dbal.html", - "keywords": [ - "abstraction", - "database", - "db2", - "dbal", - "mariadb", - "mssql", - "mysql", - "oci8", - "oracle", - "pdo", - "pgsql", - "postgresql", - "queryobject", - "sasql", - "sql", - "sqlite", - "sqlserver", - "sqlsrv" - ], - "support": { - "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.9.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdbal", - "type": "tidelift" - } - ], - "install-path": "../doctrine/dbal" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.3", - "version_normalized": "1.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "time": "2024-01-30T19:34:25+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" - }, - "install-path": "../doctrine/deprecations" - }, - { - "name": "doctrine/doctrine-bundle", - "version": "2.13.0", - "version_normalized": "2.13.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineBundle.git", - "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineBundle/zipball/ca59d84b8e63143ce1aed90cdb333ba329d71563", - "reference": "ca59d84b8e63143ce1aed90cdb333ba329d71563", - "shasum": "" - }, - "require": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^3.7.0 || ^4.0", - "doctrine/persistence": "^2.2 || ^3", - "doctrine/sql-formatter": "^1.0.1", - "php": "^7.4 || ^8.0", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" - }, - "conflict": { - "doctrine/annotations": ">=3.0", - "doctrine/orm": "<2.17 || >=4.0", - "twig/twig": "<1.34 || >=2.0 <2.4" - }, - "require-dev": { - "doctrine/annotations": "^1 || ^2", - "doctrine/coding-standard": "^12", - "doctrine/deprecations": "^1.0", - "doctrine/orm": "^2.17 || ^3.0", - "friendsofphp/proxy-manager-lts": "^1.0", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.4", - "psalm/plugin-symfony": "^5", - "psr/log": "^1.1.4 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^6.1 || ^7.0", - "symfony/property-info": "^5.4 || ^6.0 || ^7.0", - "symfony/proxy-manager-bridge": "^5.4 || ^6.0 || ^7.0", - "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/string": "^5.4 || ^6.0 || ^7.0", - "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0", - "symfony/validator": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", - "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0", - "twig/twig": "^1.34 || ^2.12 || ^3.0", - "vimeo/psalm": "^5.15" - }, - "suggest": { - "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", - "ext-pdo": "*", - "symfony/web-profiler-bundle": "To use the data collector." - }, - "time": "2024-09-01T09:46:40+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\DoctrineBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Doctrine Project", - "homepage": "https://www.doctrine-project.org/" - } - ], - "description": "Symfony DoctrineBundle", - "homepage": "https://www.doctrine-project.org", - "keywords": [ - "database", - "dbal", - "orm", - "persistence" - ], - "support": { - "issues": "https://github.com/doctrine/DoctrineBundle/issues", - "source": "https://github.com/doctrine/DoctrineBundle/tree/2.13.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-bundle", - "type": "tidelift" - } - ], - "install-path": "../doctrine/doctrine-bundle" - }, - { - "name": "doctrine/doctrine-migrations-bundle", - "version": "3.3.1", - "version_normalized": "3.3.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/DoctrineMigrationsBundle.git", - "reference": "715b62c31a5894afcb2b2cdbbc6607d7dd0580c0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/DoctrineMigrationsBundle/zipball/715b62c31a5894afcb2b2cdbbc6607d7dd0580c0", - "reference": "715b62c31a5894afcb2b2cdbbc6607d7dd0580c0", - "shasum": "" - }, - "require": { - "doctrine/doctrine-bundle": "^2.4", - "doctrine/migrations": "^3.2", - "php": "^7.2|^8.0", - "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0" - }, - "require-dev": { - "composer/semver": "^3.0", - "doctrine/coding-standard": "^12", - "doctrine/orm": "^2.6 || ^3", - "doctrine/persistence": "^2.0 || ^3 ", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "phpstan/phpstan-symfony": "^1.3", - "phpunit/phpunit": "^8.5|^9.5", - "psalm/plugin-phpunit": "^0.18.4", - "psalm/plugin-symfony": "^3 || ^5", - "symfony/phpunit-bridge": "^6.3 || ^7", - "symfony/var-exporter": "^5.4 || ^6 || ^7", - "vimeo/psalm": "^4.30 || ^5.15" - }, - "time": "2024-05-14T20:32:18+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\MigrationsBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Doctrine Project", - "homepage": "https://www.doctrine-project.org" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony DoctrineMigrationsBundle", - "homepage": "https://www.doctrine-project.org", - "keywords": [ - "dbal", - "migrations", - "schema" - ], - "support": { - "issues": "https://github.com/doctrine/DoctrineMigrationsBundle/issues", - "source": "https://github.com/doctrine/DoctrineMigrationsBundle/tree/3.3.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fdoctrine-migrations-bundle", - "type": "tidelift" - } - ], - "install-path": "../doctrine/doctrine-migrations-bundle" - }, - { - "name": "doctrine/event-manager", - "version": "2.0.1", - "version_normalized": "2.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/event-manager.git", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/event-manager/zipball/b680156fa328f1dfd874fd48c7026c41570b9c6e", - "reference": "b680156fa328f1dfd874fd48c7026c41570b9c6e", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" - }, - "time": "2024-05-22T20:47:39+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "keywords": [ - "event", - "event dispatcher", - "event manager", - "event system", - "events" - ], - "support": { - "issues": "https://github.com/doctrine/event-manager/issues", - "source": "https://github.com/doctrine/event-manager/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fevent-manager", - "type": "tidelift" - } - ], - "install-path": "../doctrine/event-manager" - }, - { - "name": "doctrine/inflector", - "version": "2.0.10", - "version_normalized": "2.0.10.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^11.0", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25 || ^5.4" - }, - "time": "2024-02-18T20:23:39+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.10" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "install-path": "../doctrine/inflector" - }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "version_normalized": "2.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "time": "2022-12-30T00:23:10+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "install-path": "../doctrine/instantiator" - }, - { - "name": "doctrine/lexer", - "version": "3.0.1", - "version_normalized": "3.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.21" - }, - "time": "2024-02-05T11:56:58+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "install-path": "../doctrine/lexer" - }, - { - "name": "doctrine/migrations", - "version": "3.8.1", - "version_normalized": "3.8.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/migrations.git", - "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/migrations/zipball/7760fbd0b7cb58bfb50415505a7bab821adf0877", - "reference": "7760fbd0b7cb58bfb50415505a7bab821adf0877", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/dbal": "^3.6 || ^4", - "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.2 || ^2.0", - "php": "^8.1", - "psr/log": "^1.1.3 || ^2 || ^3", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^6.2 || ^7.0" - }, - "conflict": { - "doctrine/orm": "<2.12 || >=4" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "doctrine/orm": "^2.13 || ^3", - "doctrine/persistence": "^2 || ^3", - "doctrine/sql-formatter": "^1.0", - "ext-pdo_sqlite": "*", - "fig/log-test": "^1", - "phpstan/phpstan": "^1.10", - "phpstan/phpstan-deprecation-rules": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpstan/phpstan-strict-rules": "^1.4", - "phpstan/phpstan-symfony": "^1.3", - "phpunit/phpunit": "^10.3", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/process": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" - }, - "suggest": { - "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", - "symfony/yaml": "Allows the use of yaml for migration configuration files." - }, - "time": "2024-08-28T13:17:28+00:00", - "bin": [ - "bin/doctrine-migrations" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Migrations\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Michael Simonson", - "email": "contact@mikesimonson.com" - } - ], - "description": "PHP Doctrine Migrations project offer additional functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and a powerful tool.", - "homepage": "https://www.doctrine-project.org/projects/migrations.html", - "keywords": [ - "database", - "dbal", - "migrations" - ], - "support": { - "issues": "https://github.com/doctrine/migrations/issues", - "source": "https://github.com/doctrine/migrations/tree/3.8.1" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fmigrations", - "type": "tidelift" - } - ], - "install-path": "../doctrine/migrations" - }, - { - "name": "doctrine/orm", - "version": "3.2.2", - "version_normalized": "3.2.2.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/orm.git", - "reference": "831a1eb7d260925528cdbb49cc1866c0357cf147" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/831a1eb7d260925528cdbb49cc1866c0357cf147", - "reference": "831a1eb7d260925528cdbb49cc1866c0357cf147", - "shasum": "" - }, - "require": { - "composer-runtime-api": "^2", - "doctrine/collections": "^2.2", - "doctrine/dbal": "^3.8.2 || ^4", - "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.2 || ^2", - "doctrine/inflector": "^1.4 || ^2.0", - "doctrine/instantiator": "^1.3 || ^2", - "doctrine/lexer": "^3", - "doctrine/persistence": "^3.3.1", - "ext-ctype": "*", - "php": "^8.1", - "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^6.3.9 || ^7.0" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0", - "phpbench/phpbench": "^1.0", - "phpstan/phpstan": "1.11.1", - "phpunit/phpunit": "^10.4.0", - "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4 || ^6.2 || ^7.0", - "vimeo/psalm": "5.24.0" - }, - "suggest": { - "ext-dom": "Provides support for XSD validation for XML mapping files", - "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" - }, - "time": "2024-08-23T10:03:52+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\ORM\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "Object-Relational-Mapper for PHP", - "homepage": "https://www.doctrine-project.org/projects/orm.html", - "keywords": [ - "database", - "orm" - ], - "support": { - "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/3.2.2" - }, - "install-path": "../doctrine/orm" - }, - { - "name": "doctrine/persistence", - "version": "3.3.3", - "version_normalized": "3.3.3.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/persistence.git", - "reference": "b337726451f5d530df338fc7f68dee8781b49779" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779", - "reference": "b337726451f5d530df338fc7f68dee8781b49779", - "shasum": "" - }, - "require": { - "doctrine/event-manager": "^1 || ^2", - "php": "^7.2 || ^8.0", - "psr/cache": "^1.0 || ^2.0 || ^3.0" - }, - "conflict": { - "doctrine/common": "<2.10" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "doctrine/common": "^3.0", - "phpstan/phpstan": "1.11.1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.24.0" - }, - "time": "2024-06-20T10:14:30+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\Persistence\\": "src/Persistence" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", - "homepage": "https://www.doctrine-project.org/projects/persistence.html", - "keywords": [ - "mapper", - "object", - "odm", - "orm", - "persistence" - ], - "support": { - "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.3.3" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Fpersistence", - "type": "tidelift" - } - ], - "install-path": "../doctrine/persistence" - }, - { - "name": "doctrine/sql-formatter", - "version": "1.4.1", - "version_normalized": "1.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "7f83911cc5eba870de7ebb11283972483f7e2891" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891", - "reference": "7f83911cc5eba870de7ebb11283972483f7e2891", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" - }, - "time": "2024-08-05T20:32:22+00:00", - "bin": [ - "bin/sql-formatter" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Doctrine\\SqlFormatter\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "https://jeremydorn.com/" - } - ], - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/doctrine/sql-formatter/", - "keywords": [ - "highlight", - "sql" - ], - "support": { - "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1" - }, - "install-path": "../doctrine/sql-formatter" - }, - { - "name": "egulias/email-validator", - "version": "4.0.2", - "version_normalized": "4.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2.0 || ^3.0", - "php": ">=8.1", - "symfony/polyfill-intl-idn": "^1.26" - }, - "require-dev": { - "phpunit/phpunit": "^10.2", - "vimeo/psalm": "^5.12" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "time": "2023-10-06T06:47:41+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "install-path": "../egulias/email-validator" - }, - { - "name": "masterminds/html5", - "version": "2.9.0", - "version_normalized": "2.9.0.0", - "source": { - "type": "git", - "url": "https://github.com/Masterminds/html5-php.git", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "reference": "f5ac2c0b0a2eefca70b2ce32a5809992227e75a6", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "php": ">=5.3.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" - }, - "time": "2024-03-31T07:05:07+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Masterminds\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Matt Butcher", - "email": "technosophos@gmail.com" - }, - { - "name": "Matt Farina", - "email": "matt@mattfarina.com" - }, - { - "name": "Asmir Mustafic", - "email": "goetas@gmail.com" - } - ], - "description": "An HTML5 parser and serializer.", - "homepage": "http://masterminds.github.io/html5-php", - "keywords": [ - "HTML5", - "dom", - "html", - "parser", - "querypath", - "serializer", - "xml" - ], - "support": { - "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.9.0" - }, - "install-path": "../masterminds/html5" - }, - { - "name": "monolog/monolog", - "version": "3.7.0", - "version_normalized": "3.7.0.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f4393b648b78a5408747de94fca38beb5f7e9ef8", - "reference": "f4393b648b78a5408747de94fca38beb5f7e9ef8", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2.0", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", - "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "time": "2024-06-28T09:40:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.7.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "install-path": "../monolog/monolog" - }, - { - "name": "myclabs/deep-copy", - "version": "1.12.0", - "version_normalized": "1.12.0.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "reference": "3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "time": "2024-06-12T14:39:25+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.12.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "install-path": "../myclabs/deep-copy" - }, - { - "name": "nikic/php-parser", - "version": "v5.2.0", - "version_normalized": "5.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb", - "reference": "23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-json": "*", - "ext-tokenizer": "*", - "php": ">=7.4" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^9.0" - }, - "time": "2024-09-15T16:40:33+00:00", - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.2.0" - }, - "install-path": "../nikic/php-parser" - }, - { - "name": "phar-io/manifest", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "54750ef60c58e43759730615a392c31c80e23176" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", - "reference": "54750ef60c58e43759730615a392c31c80e23176", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "time": "2024-03-03T12:33:53+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "support": { - "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "install-path": "../phar-io/manifest" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "version_normalized": "3.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "time": "2022-02-21T01:04:05+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "install-path": "../phar-io/version" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", - "version_normalized": "2.2.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "time": "2020-06-27T09:03:43+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", - "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", - "static analysis" - ], - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" - }, - "install-path": "../phpdocumentor/reflection-common" - }, - { - "name": "phpdocumentor/reflection-docblock", - "version": "5.4.1", - "version_normalized": "5.4.1.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", - "reference": "9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.1", - "ext-filter": "*", - "php": "^7.4 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.7", - "webmozart/assert": "^1.9.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.5", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "phpunit/phpunit": "^9.5", - "vimeo/psalm": "^5.13" - }, - "time": "2024-05-21T05:55:05+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.4.1" - }, - "install-path": "../phpdocumentor/reflection-docblock" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.8.2", - "version_normalized": "1.8.2.0", - "source": { - "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "153ae662783729388a584b4361f2545e4d841e3c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/153ae662783729388a584b4361f2545e4d841e3c", - "reference": "153ae662783729388a584b4361f2545e4d841e3c", - "shasum": "" - }, - "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^9.5", - "rector/rector": "^0.13.9", - "vimeo/psalm": "^4.25" - }, - "time": "2024-02-23T11:10:43+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.2" - }, - "install-path": "../phpdocumentor/type-resolver" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.32.0", - "version_normalized": "1.32.0.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4", - "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "time": "2024-09-26T07:23:32+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "support": { - "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0" - }, - "install-path": "../phpstan/phpdoc-parser" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.32", - "version_normalized": "9.2.32.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", - "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-text-template": "^2.0.4", - "sebastian/code-unit-reverse-lookup": "^2.0.3", - "sebastian/complexity": "^2.0.3", - "sebastian/environment": "^5.1.5", - "sebastian/lines-of-code": "^1.0.4", - "sebastian/version": "^3.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "time": "2024-08-22T04:23:01+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "9.2.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-code-coverage" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "version_normalized": "3.0.6.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2021-12-02T12:48:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-file-iterator" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "version_normalized": "3.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "time": "2020-09-28T05:58:55+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-invoker" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T05:33:50+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-text-template" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "version_normalized": "5.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T13:16:10+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../phpunit/php-timer" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.21", - "version_normalized": "9.6.21.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", - "reference": "de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.5.0 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", - "phar-io/manifest": "^2.0.4", - "phar-io/version": "^3.2.1", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.32", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.4", - "phpunit/php-timer": "^5.0.3", - "sebastian/cli-parser": "^1.0.2", - "sebastian/code-unit": "^1.0.8", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.6", - "sebastian/environment": "^5.1.5", - "sebastian/exporter": "^4.0.6", - "sebastian/global-state": "^5.0.7", - "sebastian/object-enumerator": "^4.0.4", - "sebastian/resource-operations": "^3.0.4", - "sebastian/type": "^3.2.1", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "To be able to generate mocks based on WSDL files", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "time": "2024-09-19T10:50:18+00:00", - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.21" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "install-path": "../phpunit/phpunit" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "version_normalized": "3.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "time": "2021-02-03T23:26:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "install-path": "../psr/cache" - }, - { - "name": "psr/clock", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/clock.git", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0" - }, - "time": "2022-11-25T14:36:26+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Clock\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for reading the clock.", - "homepage": "https://github.com/php-fig/clock", - "keywords": [ - "clock", - "now", - "psr", - "psr-20", - "time" - ], - "support": { - "issues": "https://github.com/php-fig/clock/issues", - "source": "https://github.com/php-fig/clock/tree/1.0.0" - }, - "install-path": "../psr/clock" - }, - { - "name": "psr/container", - "version": "2.0.2", - "version_normalized": "2.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "time": "2021-11-05T16:47:00+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "install-path": "../psr/container" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "version_normalized": "1.0.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "time": "2019-01-08T18:20:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "install-path": "../psr/event-dispatcher" - }, - { - "name": "psr/link", - "version": "2.0.1", - "version_normalized": "2.0.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/link.git", - "reference": "84b159194ecfd7eaa472280213976e96415433f7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/link/zipball/84b159194ecfd7eaa472280213976e96415433f7", - "reference": "84b159194ecfd7eaa472280213976e96415433f7", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "suggest": { - "fig/link-util": "Provides some useful PSR-13 utilities" - }, - "time": "2021-03-11T23:00:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Link\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for HTTP links", - "homepage": "https://github.com/php-fig/link", - "keywords": [ - "http", - "http-link", - "link", - "psr", - "psr-13", - "rest" - ], - "support": { - "source": "https://github.com/php-fig/link/tree/2.0.1" - }, - "install-path": "../psr/link" - }, - { - "name": "psr/log", - "version": "3.0.2", - "version_normalized": "3.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "time": "2024-09-11T13:17:53+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.2" - }, - "install-path": "../psr/log" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.2", - "version_normalized": "1.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2024-03-02T06:27:43+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/cli-parser" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "version_normalized": "1.0.8.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T13:08:54+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/code-unit" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "version_normalized": "2.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-09-28T05:30:19+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/code-unit-reverse-lookup" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "version_normalized": "4.0.8.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2022-09-14T12:41:17+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/comparator" - }, - { - "name": "sebastian/complexity", - "version": "2.0.3", - "version_normalized": "2.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", - "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2023-12-22T06:19:30+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/complexity" - }, - { - "name": "sebastian/diff", - "version": "4.0.6", - "version_normalized": "4.0.6.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", - "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "time": "2024-03-02T06:30:58+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/diff" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "version_normalized": "5.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "time": "2023-02-03T06:03:51+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/environment" - }, - { - "name": "sebastian/exporter", - "version": "4.0.6", - "version_normalized": "4.0.6.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", - "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "time": "2024-03-02T06:33:00+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "homepage": "https://www.github.com/sebastianbergmann/exporter", - "keywords": [ - "export", - "exporter" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/exporter" - }, - { - "name": "sebastian/global-state", - "version": "5.0.7", - "version_normalized": "5.0.7.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "time": "2024-03-02T06:35:11+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/global-state" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.4", - "version_normalized": "1.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.18 || ^5.0", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2023-12-22T06:20:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/lines-of-code" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "version_normalized": "4.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T13:12:34+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/object-enumerator" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2020-10-26T13:14:26+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/object-reflector" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "version_normalized": "4.0.5.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "time": "2023-02-03T06:07:39+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/recursion-context" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.4", - "version_normalized": "3.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "time": "2024-03-14T16:00:52+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/resource-operations" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "version_normalized": "3.2.1.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "time": "2023-02-03T06:13:03+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/type" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "version_normalized": "3.0.2.0", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "time": "2020-09-28T06:39:44+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "install-path": "../sebastian/version" - }, - { - "name": "symfony/asset", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/asset.git", - "reference": "8970de4a0cedd34e097c0f5c502a614780b9ca43" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/asset/zipball/8970de4a0cedd34e097c0f5c502a614780b9ca43", - "reference": "8970de4a0cedd34e097c0f5c502a614780b9ca43", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "conflict": { - "symfony/http-foundation": "<6.4" - }, - "require-dev": { - "symfony/http-client": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Asset\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Manages URL generation and versioning of web assets such as CSS stylesheets, JavaScript files and image files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/asset/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/asset" - }, - { - "name": "symfony/asset-mapper", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/asset-mapper.git", - "reference": "e3ae56f965f1fe503db1f604756a44d40e6dea16" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/asset-mapper/zipball/e3ae56f965f1fe503db1f604756a44d40e6dea16", - "reference": "e3ae56f965f1fe503db1f604756a44d40e6dea16", - "shasum": "" - }, - "require": { - "composer/semver": "^3.0", - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/filesystem": "^7.1", - "symfony/http-client": "^6.4|^7.0" - }, - "conflict": { - "symfony/framework-bundle": "<6.4" - }, - "require-dev": { - "symfony/asset": "^6.4|^7.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/event-dispatcher-contracts": "^3.0", - "symfony/finder": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/web-link": "^6.4|^7.0" - }, - "time": "2024-09-19T08:57:32+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\AssetMapper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps directories of assets & makes them available in a public directory with versioned filenames.", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/asset-mapper/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/asset-mapper" - }, - { - "name": "symfony/browser-kit", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/browser-kit.git", - "reference": "9c13742e3175b5815e272b981876ae329bec2040" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/9c13742e3175b5815e272b981876ae329bec2040", - "reference": "9c13742e3175b5815e272b981876ae329bec2040", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/dom-crawler": "^6.4|^7.0" - }, - "require-dev": { - "symfony/css-selector": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\BrowserKit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/browser-kit/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/browser-kit" - }, - { - "name": "symfony/cache", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache.git", - "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/86e5296b10e4dec8c8441056ca606aedb8a3be0a", - "reference": "86e5296b10e4dec8c8441056ca606aedb8a3be0a", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/cache": "^2.0|^3.0", - "psr/log": "^1.1|^2|^3", - "symfony/cache-contracts": "^2.5|^3", - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/var-exporter": "^6.4|^7.0" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/dependency-injection": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/var-dumper": "<6.4" - }, - "provide": { - "psr/cache-implementation": "2.0|3.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0", - "symfony/cache-implementation": "1.1|2.0|3.0" - }, - "require-dev": { - "cache/integration-tests": "dev-master", - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/filesystem": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "time": "2024-09-17T09:16:35+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Cache\\": "" - }, - "classmap": [ - "Traits/ValueWrapper.php" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides extended PSR-6, PSR-16 (and tags) implementations", - "homepage": "https://symfony.com", - "keywords": [ - "caching", - "psr6" - ], - "support": { - "source": "https://github.com/symfony/cache/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/cache" - }, - { - "name": "symfony/cache-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/cache-contracts.git", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/cache-contracts/zipball/df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "reference": "df6a1a44c890faded49a5fca33c2d5c5fd3c2197", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/cache": "^3.0" - }, - "time": "2024-04-18T09:32:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Cache\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to caching", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/cache-contracts/tree/v3.5.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/cache-contracts" - }, - { - "name": "symfony/clock", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/clock.git", - "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/clock/zipball/3dfc8b084853586de51dd1441c6242c76a28cbe7", - "reference": "3dfc8b084853586de51dd1441c6242c76a28cbe7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/clock": "^1.0", - "symfony/polyfill-php83": "^1.28" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "Resources/now.php" - ], - "psr-4": { - "Symfony\\Component\\Clock\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Decouples applications from the system clock", - "homepage": "https://symfony.com", - "keywords": [ - "clock", - "psr20", - "time" - ], - "support": { - "source": "https://github.com/symfony/clock/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/clock" - }, - { - "name": "symfony/config", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/config.git", - "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/config/zipball/2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", - "reference": "2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/filesystem": "^7.1", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "symfony/finder": "<6.4", - "symfony/service-contracts": "<2.5" - }, - "require-dev": { - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Config\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Helps you find, load, combine, autofill and validate configuration values of any kind", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/config/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/config" - }, - { - "name": "symfony/console", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/0fa539d12b3ccf068a722bbbffa07ca7079af9ee", - "reference": "0fa539d12b3ccf068a722bbbffa07ca7079af9ee", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/string": "^6.4|^7.0" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/lock": "<6.4", - "symfony/process": "<6.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command-line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/console" - }, - { - "name": "symfony/css-selector", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/1c7cee86c6f812896af54434f8ce29c8d94f9ff4", - "reference": "1c7cee86c6f812896af54434f8ce29c8d94f9ff4", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/css-selector" - }, - { - "name": "symfony/debug-bundle", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/debug-bundle.git", - "reference": "aa024d28ce7ce0c6a16ee57c066838bece92893f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/debug-bundle/zipball/aa024d28ce7ce0c6a16ee57c066838bece92893f", - "reference": "aa024d28ce7ce0c6a16ee57c066838bece92893f", - "shasum": "" - }, - "require": { - "ext-xml": "*", - "php": ">=8.2", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4" - }, - "require-dev": { - "symfony/config": "^6.4|^7.0", - "symfony/web-profiler-bundle": "^6.4|^7.0" - }, - "time": "2024-05-31T14:55:39+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\DebugBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a tight integration of the Symfony VarDumper component and the ServerLogCommand from MonologBridge into the Symfony full-stack framework", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/debug-bundle/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/debug-bundle" - }, - { - "name": "symfony/dependency-injection", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/dependency-injection.git", - "reference": "38465f925ec4e0707b090e9147c65869837d639d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/38465f925ec4e0707b090e9147c65869837d639d", - "reference": "38465f925ec4e0707b090e9147c65869837d639d", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^3.5", - "symfony/var-exporter": "^6.4|^7.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2", - "symfony/config": "<6.4", - "symfony/finder": "<6.4", - "symfony/yaml": "<6.4" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "symfony/service-implementation": "1.1|2.0|3.0" - }, - "require-dev": { - "symfony/config": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\DependencyInjection\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows you to standardize and centralize the way objects are constructed in your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/dependency-injection" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "time": "2024-04-18T09:32:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/deprecation-contracts" - }, - { - "name": "symfony/doctrine-bridge", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "2568d0adaa5b0018b07beaa90363b880a43cc957" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/2568d0adaa5b0018b07beaa90363b880a43cc957", - "reference": "2568d0adaa5b0018b07beaa90363b880a43cc957", - "shasum": "" - }, - "require": { - "doctrine/event-manager": "^2", - "doctrine/persistence": "^3.1", - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "doctrine/lexer": "<1.1", - "doctrine/orm": "<2.15", - "symfony/cache": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/form": "<6.4.6|>=7,<7.0.6", - "symfony/http-foundation": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/lock": "<6.4", - "symfony/messenger": "<6.4", - "symfony/property-info": "<6.4", - "symfony/security-bundle": "<6.4", - "symfony/security-core": "<6.4", - "symfony/validator": "<6.4" - }, - "require-dev": { - "doctrine/collections": "^1.0|^2.0", - "doctrine/data-fixtures": "^1.1", - "doctrine/dbal": "^3.6|^4", - "doctrine/orm": "^2.15|^3", - "psr/log": "^1|^2|^3", - "symfony/cache": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/doctrine-messenger": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/form": "^6.4.6|^7.0.6", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/type-info": "^7.1", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "time": "2024-09-08T12:32:26+00:00", - "type": "symfony-bridge", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\Doctrine\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides integration for Doctrine with various Symfony components", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/doctrine-bridge" - }, - { - "name": "symfony/doctrine-messenger", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/doctrine-messenger.git", - "reference": "29015027fb63461e035246e07d74eeab9cb03304" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-messenger/zipball/29015027fb63461e035246e07d74eeab9cb03304", - "reference": "29015027fb63461e035246e07d74eeab9cb03304", - "shasum": "" - }, - "require": { - "doctrine/dbal": "^3.6|^4", - "php": ">=8.2", - "symfony/messenger": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "doctrine/persistence": "<1.3" - }, - "require-dev": { - "doctrine/persistence": "^1.3|^2|^3", - "symfony/property-access": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "symfony-messenger-bridge", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Messenger\\Bridge\\Doctrine\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Doctrine Messenger Bridge", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/doctrine-messenger/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/doctrine-messenger" - }, - { - "name": "symfony/dom-crawler", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/dom-crawler.git", - "reference": "b92af238457a7cdd2738f941cd525d76313e8283" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/b92af238457a7cdd2738f941cd525d76313e8283", - "reference": "b92af238457a7cdd2738f941cd525d76313e8283", - "shasum": "" - }, - "require": { - "masterminds/html5": "^2.6", - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0" - }, - "require-dev": { - "symfony/css-selector": "^6.4|^7.0" - }, - "time": "2024-09-15T06:48:17+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\DomCrawler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases DOM navigation for HTML and XML documents", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/dom-crawler" - }, - { - "name": "symfony/dotenv", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/dotenv.git", - "reference": "6d966200b399fa59759286f3fc7c919f0677c449" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/6d966200b399fa59759286f3fc7c919f0677c449", - "reference": "6d966200b399fa59759286f3fc7c919f0677c449", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "conflict": { - "symfony/console": "<6.4", - "symfony/process": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0" - }, - "time": "2024-09-17T09:16:35+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Dotenv\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Registers environment variables from a .env file", - "homepage": "https://symfony.com", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "source": "https://github.com/symfony/dotenv/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/dotenv" - }, - { - "name": "symfony/error-handler", - "version": "v7.1.3", - "version_normalized": "7.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/432bb369952795c61ca1def65e078c4a80dad13c", - "reference": "432bb369952795c61ca1def65e078c4a80dad13c", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^6.4|^7.0" - }, - "conflict": { - "symfony/deprecation-contracts": "<2.5", - "symfony/http-kernel": "<6.4" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" - }, - "time": "2024-07-26T13:02:51+00:00", - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to manage errors and ease debugging PHP code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/error-handler/tree/v7.1.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/error-handler" - }, - { - "name": "symfony/event-dispatcher", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "reference": "9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/event-dispatcher-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/service-contracts": "<2.5" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/event-dispatcher" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "time": "2024-04-18T09:32:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/event-dispatcher-contracts" - }, - { - "name": "symfony/expression-language", - "version": "v7.1.4", - "version_normalized": "7.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/expression-language.git", - "reference": "b9e4bc6685d513c10235145ed1042a6081635806" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/expression-language/zipball/b9e4bc6685d513c10235145ed1042a6081635806", - "reference": "b9e4bc6685d513c10235145ed1042a6081635806", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/cache": "^6.4|^7.0", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/service-contracts": "^2.5|^3" - }, - "time": "2024-08-12T09:59:40+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\ExpressionLanguage\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an engine that can compile and evaluate expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/expression-language/tree/v7.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/expression-language" - }, - { - "name": "symfony/filesystem", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/61fe0566189bf32e8cfee78335d8776f64a66f5a", - "reference": "61fe0566189bf32e8cfee78335d8776f64a66f5a", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "require-dev": { - "symfony/process": "^6.4|^7.0" - }, - "time": "2024-09-17T09:16:35+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/filesystem" - }, - { - "name": "symfony/finder", - "version": "v7.1.4", - "version_normalized": "7.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d95bbf319f7d052082fb7af147e0f835a695e823", - "reference": "d95bbf319f7d052082fb7af147e0f835a695e823", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/filesystem": "^6.4|^7.0" - }, - "time": "2024-08-13T14:28:19+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/finder" - }, - { - "name": "symfony/flex", - "version": "v2.4.6", - "version_normalized": "2.4.6.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/flex.git", - "reference": "4dc11919791f81d087a12db2ab4c7e044431ef6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/4dc11919791f81d087a12db2ab4c7e044431ef6b", - "reference": "4dc11919791f81d087a12db2ab4c7e044431ef6b", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^2.1", - "php": ">=8.0" - }, - "require-dev": { - "composer/composer": "^2.1", - "symfony/dotenv": "^5.4|^6.0", - "symfony/filesystem": "^5.4|^6.0", - "symfony/phpunit-bridge": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0" - }, - "time": "2024-04-27T10:22:22+00:00", - "type": "composer-plugin", - "extra": { - "class": "Symfony\\Flex\\Flex" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Flex\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien.potencier@gmail.com" - } - ], - "description": "Composer plugin for Symfony", - "support": { - "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v2.4.6" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/flex" - }, - { - "name": "symfony/form", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/form.git", - "reference": "6b8b53ad6d42f14b158c896163b96ff260d78222" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/6b8b53ad6d42f14b158c896163b96ff260d78222", - "reference": "6b8b53ad6d42f14b158c896163b96ff260d78222", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/options-resolver": "^6.4|^7.0", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/error-handler": "<6.4", - "symfony/framework-bundle": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/translation": "<6.4.3|>=7.0,<7.0.3", - "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4" - }, - "require-dev": { - "doctrine/collections": "^1.0|^2.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/html-sanitizer": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/security-csrf": "^6.4|^7.0", - "symfony/translation": "^6.4.3|^7.0.3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Form\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows to easily create, process and reuse HTML forms", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/form/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/form" - }, - { - "name": "symfony/framework-bundle", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/framework-bundle.git", - "reference": "8a792de86230c13a9de7750c0c8b23cc083183d4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/8a792de86230c13a9de7750c0c8b23cc083183d4", - "reference": "8a792de86230c13a9de7750c0c8b23cc083183d4", - "shasum": "" - }, - "require": { - "composer-runtime-api": ">=2.1", - "ext-xml": "*", - "php": ">=8.2", - "symfony/cache": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^7.1.5", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/filesystem": "^7.1", - "symfony/finder": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/routing": "^6.4|^7.0" - }, - "conflict": { - "doctrine/persistence": "<1.3", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/asset": "<6.4", - "symfony/asset-mapper": "<6.4", - "symfony/clock": "<6.4", - "symfony/console": "<6.4", - "symfony/dom-crawler": "<6.4", - "symfony/dotenv": "<6.4", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", - "symfony/lock": "<6.4", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/mime": "<6.4", - "symfony/property-access": "<6.4", - "symfony/property-info": "<6.4", - "symfony/scheduler": "<6.4.4|>=7.0.0,<7.0.4", - "symfony/security-core": "<6.4", - "symfony/security-csrf": "<6.4", - "symfony/serializer": "<6.4", - "symfony/stopwatch": "<6.4", - "symfony/translation": "<6.4", - "symfony/twig-bridge": "<6.4", - "symfony/twig-bundle": "<6.4", - "symfony/validator": "<6.4", - "symfony/web-profiler-bundle": "<6.4", - "symfony/workflow": "<6.4" - }, - "require-dev": { - "doctrine/persistence": "^1.3|^2|^3", - "dragonmantank/cron-expression": "^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "seld/jsonlint": "^1.10", - "symfony/asset": "^6.4|^7.0", - "symfony/asset-mapper": "^6.4|^7.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/dotenv": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/form": "^6.4|^7.0", - "symfony/html-sanitizer": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/lock": "^6.4|^7.0", - "symfony/mailer": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/notifier": "^6.4|^7.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0", - "symfony/scheduler": "^6.4.4|^7.0.4", - "symfony/security-bundle": "^6.4|^7.0", - "symfony/semaphore": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/string": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/twig-bundle": "^6.4|^7.0", - "symfony/type-info": "^7.1", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/web-link": "^6.4|^7.0", - "symfony/workflow": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0", - "twig/twig": "^3.0.4" - }, - "time": "2024-09-20T13:35:23+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\FrameworkBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/framework-bundle" - }, - { - "name": "symfony/http-client", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client.git", - "reference": "abca35865118edf35a23f2f24978a1784c831cb4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/abca35865118edf35a23f2f24978a1784c831cb4", - "reference": "abca35865118edf35a23f2f24978a1784c831cb4", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^3.4.1", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "php-http/discovery": "<1.15", - "symfony/http-foundation": "<6.4" - }, - "provide": { - "php-http/async-client-implementation": "*", - "php-http/client-implementation": "*", - "psr/http-client-implementation": "1.0", - "symfony/http-client-implementation": "3.0" - }, - "require-dev": { - "amphp/amp": "^2.5", - "amphp/http-client": "^4.2.1", - "amphp/http-tunnel": "^1.0", - "amphp/socket": "^1.1", - "guzzlehttp/promises": "^1.4|^2.0", - "nyholm/psr7": "^1.0", - "php-http/httplug": "^1.0|^2.0", - "psr/http-client": "^1.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0" - }, - "time": "2024-09-20T13:35:23+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpClient\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", - "homepage": "https://symfony.com", - "keywords": [ - "http" - ], - "support": { - "source": "https://github.com/symfony/http-client/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/http-client" - }, - { - "name": "symfony/http-client-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-client-contracts.git", - "reference": "20414d96f391677bf80078aa55baece78b82647d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/20414d96f391677bf80078aa55baece78b82647d", - "reference": "20414d96f391677bf80078aa55baece78b82647d", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "time": "2024-04-18T09:32:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\HttpClient\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to HTTP clients", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/http-client-contracts/tree/v3.5.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/http-client-contracts" - }, - { - "name": "symfony/http-foundation", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e30ef73b1e44eea7eb37ba69600a354e553f694b", - "reference": "e30ef73b1e44eea7eb37ba69600a354e553f694b", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php83": "^1.27" - }, - "conflict": { - "doctrine/dbal": "<3.6", - "symfony/cache": "<6.4" - }, - "require-dev": { - "doctrine/dbal": "^3.6|^4", - "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/http-foundation" - }, - { - "name": "symfony/http-kernel", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/44204d96150a9df1fc57601ec933d23fefc2d65b", - "reference": "44204d96150a9df1fc57601ec933d23fefc2d65b", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/error-handler": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/cache": "<6.4", - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<6.4", - "symfony/form": "<6.4", - "symfony/http-client": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4", - "symfony/translation": "<6.4", - "symfony/translation-contracts": "<2.5", - "symfony/twig-bridge": "<6.4", - "symfony/validator": "<6.4", - "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^7.1", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^7.1", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" - }, - "time": "2024-09-21T06:09:21+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a structured process for converting a Request into a Response", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-kernel/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/http-kernel" - }, - { - "name": "symfony/intl", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/intl.git", - "reference": "a0ba7a400e4c915500762c998355bea219a32d6b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/intl/zipball/a0ba7a400e4c915500762c998355bea219a32d6b", - "reference": "a0ba7a400e4c915500762c998355bea219a32d6b", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/string": "<7.1" - }, - "require-dev": { - "symfony/filesystem": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Intl\\": "" - }, - "exclude-from-classmap": [ - "/Tests/", - "/Resources/data/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - }, - { - "name": "Eriksen Costa", - "email": "eriksen.costa@infranology.com.br" - }, - { - "name": "Igor Wiedler", - "email": "igor@wiedler.ch" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides access to the localization data of the ICU library", - "homepage": "https://symfony.com", - "keywords": [ - "i18n", - "icu", - "internationalization", - "intl", - "l10n", - "localization" - ], - "support": { - "source": "https://github.com/symfony/intl/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/intl" - }, - { - "name": "symfony/mailer", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/bbf21460c56f29810da3df3e206e38dfbb01e80b", - "reference": "bbf21460c56f29810da3df3e206e38dfbb01e80b", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.2", - "psr/event-dispatcher": "^1", - "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/messenger": "<6.4", - "symfony/mime": "<6.4", - "symfony/twig-bridge": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0" - }, - "time": "2024-09-08T12:32:26+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mailer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Helps sending emails", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/mailer" - }, - { - "name": "symfony/maker-bundle", - "version": "v1.61.0", - "version_normalized": "1.61.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/maker-bundle.git", - "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/maker-bundle/zipball/a3b7f14d349f8f44ed752d4dde2263f77510cc18", - "reference": "a3b7f14d349f8f44ed752d4dde2263f77510cc18", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^2.0", - "nikic/php-parser": "^4.18|^5.0", - "php": ">=8.1", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/deprecation-contracts": "^2.2|^3", - "symfony/filesystem": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0" - }, - "conflict": { - "doctrine/doctrine-bundle": "<2.10", - "doctrine/orm": "<2.15" - }, - "require-dev": { - "composer/semver": "^3.0", - "doctrine/doctrine-bundle": "^2.5.0", - "doctrine/orm": "^2.15|^3", - "symfony/http-client": "^6.4|^7.0", - "symfony/phpunit-bridge": "^6.4.1|^7.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0", - "twig/twig": "^3.0|^4.x-dev" - }, - "time": "2024-08-29T22:50:23+00:00", - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\MakerBundle\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Maker helps you create empty commands, controllers, form classes, tests and more so you can forget about writing boilerplate code.", - "homepage": "https://symfony.com/doc/current/bundles/SymfonyMakerBundle/index.html", - "keywords": [ - "code generator", - "dev", - "generator", - "scaffold", - "scaffolding" - ], - "support": { - "issues": "https://github.com/symfony/maker-bundle/issues", - "source": "https://github.com/symfony/maker-bundle/tree/v1.61.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/maker-bundle" - }, - { - "name": "symfony/messenger", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/messenger.git", - "reference": "e1c0ced845e3dac12ab428c5ed42dbe7a58ca576" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/messenger/zipball/e1c0ced845e3dac12ab428c5ed42dbe7a58ca576", - "reference": "e1c0ced845e3dac12ab428c5ed42dbe7a58ca576", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3", - "symfony/clock": "^6.4|^7.0" - }, - "conflict": { - "symfony/console": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/event-dispatcher-contracts": "<2.5", - "symfony/framework-bundle": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/serializer": "<6.4" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0", - "symfony/routing": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0" - }, - "time": "2024-09-08T12:32:26+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Messenger\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Samuel Roze", - "email": "samuel.roze@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Helps applications send and receive messages to/from other applications or via message queues", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/messenger/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/messenger" - }, - { - "name": "symfony/mime", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/711d2e167e8ce65b05aea6b258c449671cdd38ff", - "reference": "711d2e167e8ce65b05aea6b258c449671cdd38ff", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<6.4", - "symfony/serializer": "<6.4.3|>7.0,<7.0.3" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/mime" - }, - { - "name": "symfony/monolog-bridge", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/monolog-bridge.git", - "reference": "727be11ae17bb1c5a7f600753b9a1bf0cc0ec3b8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bridge/zipball/727be11ae17bb1c5a7f600753b9a1bf0cc0ec3b8", - "reference": "727be11ae17bb1c5a7f600753b9a1bf0cc0ec3b8", - "shasum": "" - }, - "require": { - "monolog/monolog": "^3", - "php": ">=8.2", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/console": "<6.4", - "symfony/http-foundation": "<6.4", - "symfony/security-core": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/mailer": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "symfony-bridge", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\Monolog\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides integration for Monolog with various Symfony components", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/monolog-bridge/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/monolog-bridge" - }, - { - "name": "symfony/monolog-bundle", - "version": "v3.10.0", - "version_normalized": "3.10.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/monolog-bundle.git", - "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/monolog-bundle/zipball/414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", - "reference": "414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181", - "shasum": "" - }, - "require": { - "monolog/monolog": "^1.25.1 || ^2.0 || ^3.0", - "php": ">=7.2.5", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", - "symfony/monolog-bridge": "^5.4 || ^6.0 || ^7.0" - }, - "require-dev": { - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/phpunit-bridge": "^6.3 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0" - }, - "time": "2023-11-06T17:08:13+00:00", - "type": "symfony-bundle", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\MonologBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony MonologBundle", - "homepage": "https://symfony.com", - "keywords": [ - "log", - "logging" - ], - "support": { - "issues": "https://github.com/symfony/monolog-bundle/issues", - "source": "https://github.com/symfony/monolog-bundle/tree/v3.10.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/monolog-bundle" - }, - { - "name": "symfony/notifier", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/notifier.git", - "reference": "843946b0b1018ddc714b467f223607c71f9f6c8f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/notifier/zipball/843946b0b1018ddc714b467f223607c71f9f6c8f", - "reference": "843946b0b1018ddc714b467f223607c71f9f6c8f", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/log": "^1|^2|^3" - }, - "conflict": { - "symfony/event-dispatcher": "<6.4", - "symfony/event-dispatcher-contracts": "<2.5", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4" - }, - "require-dev": { - "symfony/event-dispatcher-contracts": "^2.5|^3", - "symfony/http-client-contracts": "^2.5|^3", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0" - }, - "time": "2024-09-08T12:32:26+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Notifier\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Sends notifications via one or more channels (email, SMS, ...)", - "homepage": "https://symfony.com", - "keywords": [ - "notification", - "notifier" - ], - "support": { - "source": "https://github.com/symfony/notifier/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/notifier" - }, - { - "name": "symfony/options-resolver", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/47aa818121ed3950acd2b58d1d37d08a94f9bf55", - "reference": "47aa818121ed3950acd2b58d1d37d08a94f9bf55", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/options-resolver" - }, - { - "name": "symfony/password-hasher", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/password-hasher.git", - "reference": "4ad96eb7cf9e2f8f133ada95f2b8021769061662" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/password-hasher/zipball/4ad96eb7cf9e2f8f133ada95f2b8021769061662", - "reference": "4ad96eb7cf9e2f8f133ada95f2b8021769061662", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "conflict": { - "symfony/security-core": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0", - "symfony/security-core": "^6.4|^7.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\PasswordHasher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Robin Chalas", - "email": "robin.chalas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides password hashing utilities", - "homepage": "https://symfony.com", - "keywords": [ - "hashing", - "password" - ], - "support": { - "source": "https://github.com/symfony/password-hasher/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/password-hasher" - }, - { - "name": "symfony/phpunit-bridge", - "version": "v7.1.4", - "version_normalized": "7.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/e876eb90e32a8fc4c4911d458e09f88d65877d1c", - "reference": "e876eb90e32a8fc4c4911d458e09f88d65877d1c", - "shasum": "" - }, - "require": { - "php": ">=7.2.5" - }, - "conflict": { - "phpunit/phpunit": "<7.5|9.1.2" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/error-handler": "^5.4|^6.4|^7.0", - "symfony/polyfill-php81": "^1.27" - }, - "time": "2024-08-13T14:28:19+00:00", - "bin": [ - "bin/simple-phpunit" - ], - "type": "symfony-bridge", - "extra": { - "thanks": { - "name": "phpunit/phpunit", - "url": "https://github.com/sebastianbergmann/phpunit" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Bridge\\PhpUnit\\": "" - }, - "exclude-from-classmap": [ - "/Tests/", - "/bin/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides utilities for PHPUnit, especially user deprecation notices management", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v7.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/phpunit-bridge" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.0", - "version_normalized": "1.31.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2024-09-09T11:45:10+00:00", - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-intl-grapheme" - }, - { - "name": "symfony/polyfill-intl-icu", - "version": "v1.31.0", - "version_normalized": "1.31.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", - "reference": "d80a05e9904d2c2b9b95929f3e4b5d3a8f418d78", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance and support of other locales than \"en\"" - }, - "time": "2024-09-09T11:45:10+00:00", - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Icu\\": "" - }, - "classmap": [ - "Resources/stubs" - ], - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's ICU-related data and classes", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "icu", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-intl-icu" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.31.0", - "version_normalized": "1.31.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/c36586dcf89a12315939e00ec9b4474adcb1d773", - "reference": "c36586dcf89a12315939e00ec9b4474adcb1d773", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "symfony/polyfill-intl-normalizer": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2024-09-09T11:45:10+00:00", - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-intl-idn" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.0", - "version_normalized": "1.31.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "3833d7255cc303546435cb650316bff708a1c75c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", - "reference": "3833d7255cc303546435cb650316bff708a1c75c", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "time": "2024-09-09T11:45:10+00:00", - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-intl-normalizer" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.31.0", - "version_normalized": "1.31.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/85181ba99b2345b0ef10ce42ecac37612d9fd341", - "reference": "85181ba99b2345b0ef10ce42ecac37612d9fd341", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "time": "2024-09-09T11:45:10+00:00", - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-mbstring" - }, - { - "name": "symfony/polyfill-php83", - "version": "v1.31.0", - "version_normalized": "1.31.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", - "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "time": "2024-09-09T11:45:10+00:00", - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "installation-source": "dist", - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php83\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.31.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/polyfill-php83" - }, - { - "name": "symfony/process", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "5c03ee6369281177f07f7c68252a280beccba847" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5c03ee6369281177f07f7c68252a280beccba847", - "reference": "5c03ee6369281177f07f7c68252a280beccba847", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "time": "2024-09-19T21:48:23+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/process" - }, - { - "name": "symfony/property-access", - "version": "v7.1.4", - "version_normalized": "7.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-access.git", - "reference": "6c709f97103355016e5782d0622437ae381012ad" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-access/zipball/6c709f97103355016e5782d0622437ae381012ad", - "reference": "6c709f97103355016e5782d0622437ae381012ad", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/property-info": "^6.4|^7.0" - }, - "require-dev": { - "symfony/cache": "^6.4|^7.0" - }, - "time": "2024-08-30T16:12:47+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyAccess\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides functions to read and write from/to an object or array using a simple string notation", - "homepage": "https://symfony.com", - "keywords": [ - "access", - "array", - "extraction", - "index", - "injection", - "object", - "property", - "property-path", - "reflection" - ], - "support": { - "source": "https://github.com/symfony/property-access/tree/v7.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/property-access" - }, - { - "name": "symfony/property-info", - "version": "v7.1.3", - "version_normalized": "7.1.3.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/property-info.git", - "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", - "reference": "88a279df2db5b7919cac6f35d6a5d1d7147e6a9b", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/string": "^6.4|^7.0", - "symfony/type-info": "^7.1" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<5.2", - "phpdocumentor/type-resolver": "<1.5.1", - "symfony/dependency-injection": "<6.4", - "symfony/serializer": "<6.4" - }, - "require-dev": { - "phpdocumentor/reflection-docblock": "^5.2", - "phpstan/phpdoc-parser": "^1.0", - "symfony/cache": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0" - }, - "time": "2024-07-26T07:36:36+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\PropertyInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts information about PHP class' properties using metadata of popular sources", - "homepage": "https://symfony.com", - "keywords": [ - "doctrine", - "phpdoc", - "property", - "symfony", - "type", - "validator" - ], - "support": { - "source": "https://github.com/symfony/property-info/tree/v7.1.3" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/property-info" - }, - { - "name": "symfony/routing", - "version": "v7.1.4", - "version_normalized": "7.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", - "reference": "1500aee0094a3ce1c92626ed8cf3c2037e86f5a7", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/config": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/yaml": "<6.4" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" - }, - "time": "2024-08-29T08:16:25+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/routing" - }, - { - "name": "symfony/runtime", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/runtime.git", - "reference": "ea34522c447dd91a2b31cb330ee4540a56ba53f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/runtime/zipball/ea34522c447dd91a2b31cb330ee4540a56ba53f6", - "reference": "ea34522c447dd91a2b31cb330ee4540a56ba53f6", - "shasum": "" - }, - "require": { - "composer-plugin-api": "^1.0|^2.0", - "php": ">=8.2" - }, - "conflict": { - "symfony/dotenv": "<6.4" - }, - "require-dev": { - "composer/composer": "^2.6", - "symfony/console": "^6.4|^7.0", - "symfony/dotenv": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0" - }, - "time": "2024-05-31T14:55:39+00:00", - "type": "composer-plugin", - "extra": { - "class": "Symfony\\Component\\Runtime\\Internal\\ComposerPlugin" - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Runtime\\": "", - "Symfony\\Runtime\\Symfony\\Component\\": "Internal/" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Enables decoupling PHP applications from global state", - "homepage": "https://symfony.com", - "keywords": [ - "runtime" - ], - "support": { - "source": "https://github.com/symfony/runtime/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/runtime" - }, - { - "name": "symfony/security-bundle", - "version": "v7.1.4", - "version_normalized": "7.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/security-bundle.git", - "reference": "5e10107856ff64d477c61fed7bcbb8a16125ea01" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/5e10107856ff64d477c61fed7bcbb8a16125ea01", - "reference": "5e10107856ff64d477c61fed7bcbb8a16125ea01", - "shasum": "" - }, - "require": { - "composer-runtime-api": ">=2.1", - "ext-xml": "*", - "php": ">=8.2", - "symfony/clock": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4.11|^7.1.4", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/password-hasher": "^6.4|^7.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/security-csrf": "^6.4|^7.0", - "symfony/security-http": "^7.1", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/browser-kit": "<6.4", - "symfony/console": "<6.4", - "symfony/framework-bundle": "<6.4", - "symfony/http-client": "<6.4", - "symfony/ldap": "<6.4", - "symfony/serializer": "<6.4", - "symfony/twig-bundle": "<6.4", - "symfony/validator": "<6.4" - }, - "require-dev": { - "symfony/asset": "^6.4|^7.0", - "symfony/browser-kit": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/dom-crawler": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/form": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/ldap": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/rate-limiter": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0", - "symfony/twig-bundle": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0", - "twig/twig": "^3.0.4", - "web-token/jwt-library": "^3.3.2|^4.0" - }, - "time": "2024-08-20T11:38:55+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\SecurityBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/security-bundle/tree/v7.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/security-bundle" - }, - { - "name": "symfony/security-core", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/security-core.git", - "reference": "dbeb09f0b786590d126c0da297e2320e66ec353b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/dbeb09f0b786590d126c0da297e2320e66ec353b", - "reference": "dbeb09f0b786590d126c0da297e2320e66ec353b", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/event-dispatcher-contracts": "^2.5|^3", - "symfony/password-hasher": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/dependency-injection": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/http-foundation": "<6.4", - "symfony/ldap": "<6.4", - "symfony/translation": "<6.4.3|>=7.0,<7.0.3", - "symfony/validator": "<6.4" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "psr/container": "^1.1|^2.0", - "psr/log": "^1|^2|^3", - "symfony/cache": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/ldap": "^6.4|^7.0", - "symfony/string": "^6.4|^7.0", - "symfony/translation": "^6.4.3|^7.0.3", - "symfony/validator": "^6.4|^7.0" - }, - "time": "2024-09-20T13:35:23+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\Core\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Security Component - Core Library", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/security-core/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/security-core" - }, - { - "name": "symfony/security-csrf", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/security-csrf.git", - "reference": "27cd1bce9d7f3457a152a6ca9790712d6954dd21" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/security-csrf/zipball/27cd1bce9d7f3457a152a6ca9790712d6954dd21", - "reference": "27cd1bce9d7f3457a152a6ca9790712d6954dd21", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/security-core": "^6.4|^7.0" - }, - "conflict": { - "symfony/http-foundation": "<6.4" - }, - "require-dev": { - "symfony/http-foundation": "^6.4|^7.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\Csrf\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Security Component - CSRF Library", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/security-csrf/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/security-csrf" - }, - { - "name": "symfony/security-http", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/security-http.git", - "reference": "d47c013bccf4b81a1496826d42dfa05da549131a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/d47c013bccf4b81a1496826d42dfa05da549131a", - "reference": "d47c013bccf4b81a1496826d42dfa05da549131a", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3" - }, - "conflict": { - "symfony/clock": "<6.4", - "symfony/event-dispatcher": "<6.4", - "symfony/http-client-contracts": "<3.0", - "symfony/security-bundle": "<6.4", - "symfony/security-csrf": "<6.4" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/cache": "^6.4|^7.0", - "symfony/clock": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/http-client-contracts": "^3.0", - "symfony/rate-limiter": "^6.4|^7.0", - "symfony/routing": "^6.4|^7.0", - "symfony/security-csrf": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "web-token/jwt-library": "^3.3.2|^4.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Security\\Http\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony Security Component - HTTP Integration", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/security-http/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/security-http" - }, - { - "name": "symfony/serializer", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/serializer.git", - "reference": "71d6e1f70f00752d1469d0f5e83b0a51716f288b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/71d6e1f70f00752d1469d0f5e83b0a51716f288b", - "reference": "71d6e1f70f00752d1469d0f5e83b0a51716f288b", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/dependency-injection": "<6.4", - "symfony/property-access": "<6.4", - "symfony/property-info": "<6.4", - "symfony/type-info": "<7.1.5", - "symfony/uid": "<6.4", - "symfony/validator": "<6.4", - "symfony/yaml": "<6.4" - }, - "require-dev": { - "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.0", - "phpstan/phpdoc-parser": "^1.0", - "seld/jsonlint": "^1.10", - "symfony/cache": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/error-handler": "^6.4|^7.0", - "symfony/filesystem": "^6.4|^7.0", - "symfony/form": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/messenger": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3", - "symfony/type-info": "^7.1.5", - "symfony/uid": "^6.4|^7.0", - "symfony/validator": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0", - "symfony/var-exporter": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" - }, - "time": "2024-09-20T12:13:15+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Serializer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/serializer/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/serializer" - }, - { - "name": "symfony/service-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^1.1|^2.0", - "symfony/deprecation-contracts": "^2.5|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "time": "2024-04-18T09:32:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/service-contracts" - }, - { - "name": "symfony/stimulus-bundle", - "version": "v2.20.0", - "version_normalized": "2.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/stimulus-bundle.git", - "reference": "ae69e3a764694b9f45d8a009dd2b8c22444c5e0c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/ae69e3a764694b9f45d8a009dd2b8c22444c5e0c", - "reference": "ae69e3a764694b9f45d8a009dd2b8c22444c5e0c", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/deprecation-contracts": "^2.0|^3.0", - "symfony/finder": "^5.4|^6.0|^7.0", - "symfony/http-kernel": "^5.4|^6.0|^7.0", - "twig/twig": "^2.15.3|^3.8" - }, - "require-dev": { - "symfony/asset-mapper": "^6.3|^7.0", - "symfony/framework-bundle": "^5.4|^6.0|^7.0", - "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", - "symfony/twig-bundle": "^5.4|^6.0|^7.0", - "zenstruck/browser": "^1.4" - }, - "time": "2024-09-24T09:27:42+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\UX\\StimulusBundle\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Integration with your Symfony app & Stimulus!", - "keywords": [ - "symfony-ux" - ], - "support": { - "source": "https://github.com/symfony/stimulus-bundle/tree/v2.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/stimulus-bundle" - }, - { - "name": "symfony/stopwatch", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", - "reference": "5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/service-contracts": "^2.5|^3" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/stopwatch" - }, - { - "name": "symfony/string", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/d66f9c343fa894ec2037cc928381df90a7ad4306", - "reference": "d66f9c343fa894ec2037cc928381df90a7ad4306", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.5" - }, - "require-dev": { - "symfony/emoji": "^7.1", - "symfony/error-handler": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^6.4|^7.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/string" - }, - { - "name": "symfony/translation", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/235535e3f84f3dfbdbde0208ede6ca75c3a489ea", - "reference": "235535e3f84f3dfbdbde0208ede6ca75c3a489ea", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.5|^3.0" - }, - "conflict": { - "symfony/config": "<6.4", - "symfony/console": "<6.4", - "symfony/dependency-injection": "<6.4", - "symfony/http-client-contracts": "<2.5", - "symfony/http-kernel": "<6.4", - "symfony/service-contracts": "<2.5", - "symfony/twig-bundle": "<6.4", - "symfony/yaml": "<6.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^4.18|^5.0", - "psr/log": "^1|^2|^3", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client-contracts": "^2.5|^3.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^6.4|^7.0", - "symfony/service-contracts": "^2.5|^3", - "symfony/yaml": "^6.4|^7.0" - }, - "time": "2024-09-16T06:30:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/translation" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.5.0", - "version_normalized": "3.5.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "time": "2024-04-18T09:32:20+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/translation-contracts" - }, - { - "name": "symfony/twig-bridge", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/twig-bridge.git", - "reference": "e997e5025b53c0f7b17632802daefdd6a04540ae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/e997e5025b53c0f7b17632802daefdd6a04540ae", - "reference": "e997e5025b53c0f7b17632802daefdd6a04540ae", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/translation-contracts": "^2.5|^3", - "twig/twig": "^3.9" - }, - "conflict": { - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/console": "<6.4", - "symfony/form": "<6.4", - "symfony/http-foundation": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/mime": "<6.4", - "symfony/serializer": "<6.4", - "symfony/translation": "<6.4", - "symfony/workflow": "<6.4" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3|^4", - "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/asset": "^6.4|^7.0", - "symfony/asset-mapper": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/emoji": "^7.1", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/form": "^6.4|^7.0", - "symfony/html-sanitizer": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/polyfill-intl-icu": "~1.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/routing": "^6.4|^7.0", - "symfony/security-acl": "^2.8|^3.0", - "symfony/security-core": "^6.4|^7.0", - "symfony/security-csrf": "^6.4|^7.0", - "symfony/security-http": "^6.4|^7.0", - "symfony/serializer": "^6.4.3|^7.0.3", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/web-link": "^6.4|^7.0", - "symfony/workflow": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0", - "twig/cssinliner-extra": "^2.12|^3", - "twig/inky-extra": "^2.12|^3", - "twig/markdown-extra": "^2.12|^3" - }, - "time": "2024-09-15T06:48:17+00:00", - "type": "symfony-bridge", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bridge\\Twig\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides integration for Twig with various Symfony components", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/twig-bridge" - }, - { - "name": "symfony/twig-bundle", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/twig-bundle.git", - "reference": "4e6afd0dc8396f16861b682f3b854ff6e24bfb7e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bundle/zipball/4e6afd0dc8396f16861b682f3b854ff6e24bfb7e", - "reference": "4e6afd0dc8396f16861b682f3b854ff6e24bfb7e", - "shasum": "" - }, - "require": { - "composer-runtime-api": ">=2.1", - "php": ">=8.2", - "symfony/config": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/twig-bridge": "^6.4|^7.0", - "twig/twig": "^3.0.4" - }, - "conflict": { - "symfony/framework-bundle": "<6.4", - "symfony/translation": "<6.4" - }, - "require-dev": { - "symfony/asset": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/form": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/routing": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0", - "symfony/translation": "^6.4|^7.0", - "symfony/web-link": "^6.4|^7.0", - "symfony/yaml": "^6.4|^7.0" - }, - "time": "2024-09-08T12:32:26+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\TwigBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a tight integration of Twig into the Symfony full-stack framework", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/twig-bundle/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/twig-bundle" - }, - { - "name": "symfony/type-info", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/type-info.git", - "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/9f6094aa900d2c06bd61576a6f279d4ac441515f", - "reference": "9f6094aa900d2c06bd61576a6f279d4ac441515f", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/container": "^1.1|^2.0" - }, - "conflict": { - "phpstan/phpdoc-parser": "<1.0", - "symfony/dependency-injection": "<6.4", - "symfony/property-info": "<6.4" - }, - "require-dev": { - "phpstan/phpdoc-parser": "^1.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0" - }, - "time": "2024-09-19T21:48:23+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\TypeInfo\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mathias Arlaud", - "email": "mathias.arlaud@gmail.com" - }, - { - "name": "Baptiste LEDUC", - "email": "baptiste.leduc@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Extracts PHP types information.", - "homepage": "https://symfony.com", - "keywords": [ - "PHPStan", - "phpdoc", - "symfony", - "type" - ], - "support": { - "source": "https://github.com/symfony/type-info/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/type-info" - }, - { - "name": "symfony/ux-turbo", - "version": "v2.20.0", - "version_normalized": "2.20.0.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/ux-turbo.git", - "reference": "5eaa803dea9f954aa124963f2c872b414d97cc97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-turbo/zipball/5eaa803dea9f954aa124963f2c872b414d97cc97", - "reference": "5eaa803dea9f954aa124963f2c872b414d97cc97", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/stimulus-bundle": "^2.9.1" - }, - "conflict": { - "symfony/flex": "<1.13" - }, - "require-dev": { - "dbrekelmans/bdi": "dev-main", - "doctrine/doctrine-bundle": "^2.4.3", - "doctrine/orm": "^2.8 | 3.0", - "phpstan/phpstan": "^1.10", - "symfony/debug-bundle": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/form": "^5.4|^6.0|^7.0", - "symfony/framework-bundle": "^5.4|^6.0|^7.0", - "symfony/mercure-bundle": "^0.3.7", - "symfony/messenger": "^5.4|^6.0|^7.0", - "symfony/panther": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", - "symfony/process": "^5.4|6.3.*|^7.0", - "symfony/property-access": "^5.4|^6.0|^7.0", - "symfony/security-core": "^5.4|^6.0|^7.0", - "symfony/stopwatch": "^5.4|^6.0|^7.0", - "symfony/twig-bundle": "^5.4|^6.0|^7.0", - "symfony/web-profiler-bundle": "^5.4|^6.0|^7.0", - "symfony/webpack-encore-bundle": "^2.1.1" - }, - "time": "2024-09-10T12:38:04+00:00", - "type": "symfony-bundle", - "extra": { - "thanks": { - "name": "symfony/ux", - "url": "https://github.com/symfony/ux" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\UX\\Turbo\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "kevin@dunglas.fr" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Hotwire Turbo integration for Symfony", - "homepage": "https://symfony.com", - "keywords": [ - "hotwire", - "javascript", - "mercure", - "symfony-ux", - "turbo", - "turbo-stream" - ], - "support": { - "source": "https://github.com/symfony/ux-turbo/tree/v2.20.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/ux-turbo" - }, - { - "name": "symfony/validator", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/validator.git", - "reference": "e57592782dc2a86997477f28164c51af53512ad8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/e57592782dc2a86997477f28164c51af53512ad8", - "reference": "e57592782dc2a86997477f28164c51af53512ad8", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php83": "^1.27", - "symfony/translation-contracts": "^2.5|^3" - }, - "conflict": { - "doctrine/lexer": "<1.1", - "symfony/dependency-injection": "<6.4", - "symfony/doctrine-bridge": "<7.0", - "symfony/expression-language": "<6.4", - "symfony/http-kernel": "<6.4", - "symfony/intl": "<6.4", - "symfony/property-info": "<6.4", - "symfony/translation": "<6.4.3|>=7.0,<7.0.3", - "symfony/yaml": "<6.4" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3|^4", - "symfony/cache": "^6.4|^7.0", - "symfony/config": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/dependency-injection": "^6.4|^7.0", - "symfony/expression-language": "^6.4|^7.0", - "symfony/finder": "^6.4|^7.0", - "symfony/http-client": "^6.4|^7.0", - "symfony/http-foundation": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/intl": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", - "symfony/property-access": "^6.4|^7.0", - "symfony/property-info": "^6.4|^7.0", - "symfony/translation": "^6.4.3|^7.0.3", - "symfony/type-info": "^7.1", - "symfony/yaml": "^6.4|^7.0" - }, - "time": "2024-09-20T08:28:38+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Validator\\": "" - }, - "exclude-from-classmap": [ - "/Tests/", - "/Resources/bin/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to validate values", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/validator/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/validator" - }, - { - "name": "symfony/var-dumper", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "e20e03889539fd4e4211e14d2179226c513c010d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/e20e03889539fd4e4211e14d2179226c513c010d", - "reference": "e20e03889539fd4e4211e14d2179226c513c010d", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/process": "^6.4|^7.0", - "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" - }, - "time": "2024-09-16T10:07:02+00:00", - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/var-dumper" - }, - { - "name": "symfony/var-exporter", - "version": "v7.1.2", - "version_normalized": "7.1.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "b80a669a2264609f07f1667f891dbfca25eba44c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/b80a669a2264609f07f1667f891dbfca25eba44c", - "reference": "b80a669a2264609f07f1667f891dbfca25eba44c", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "require-dev": { - "symfony/property-access": "^6.4|^7.0", - "symfony/serializer": "^6.4|^7.0", - "symfony/var-dumper": "^6.4|^7.0" - }, - "time": "2024-06-28T08:00:31+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\VarExporter\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", - "homepage": "https://symfony.com", - "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "lazy-loading", - "proxy", - "serialize" - ], - "support": { - "source": "https://github.com/symfony/var-exporter/tree/v7.1.2" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/var-exporter" - }, - { - "name": "symfony/web-link", - "version": "v7.1.1", - "version_normalized": "7.1.1.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/web-link.git", - "reference": "63f90aa0054bfd9a091d2f5cf465958f1030638f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/web-link/zipball/63f90aa0054bfd9a091d2f5cf465958f1030638f", - "reference": "63f90aa0054bfd9a091d2f5cf465958f1030638f", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "psr/link": "^1.1|^2.0" - }, - "conflict": { - "symfony/http-kernel": "<6.4" - }, - "provide": { - "psr/link-implementation": "1.0|2.0" - }, - "require-dev": { - "symfony/http-kernel": "^6.4|^7.0" - }, - "time": "2024-05-31T14:57:53+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\WebLink\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Kévin Dunglas", - "email": "dunglas@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Manages links between resources", - "homepage": "https://symfony.com", - "keywords": [ - "dns-prefetch", - "http", - "http2", - "link", - "performance", - "prefetch", - "preload", - "prerender", - "psr13", - "push" - ], - "support": { - "source": "https://github.com/symfony/web-link/tree/v7.1.1" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/web-link" - }, - { - "name": "symfony/web-profiler-bundle", - "version": "v7.1.4", - "version_normalized": "7.1.4.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "3cfc775277a8f2dacdd0f72d196bc87b272a763f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/3cfc775277a8f2dacdd0f72d196bc87b272a763f", - "reference": "3cfc775277a8f2dacdd0f72d196bc87b272a763f", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/config": "^6.4|^7.0", - "symfony/framework-bundle": "^6.4|^7.0", - "symfony/http-kernel": "^6.4|^7.0", - "symfony/routing": "^6.4|^7.0", - "symfony/twig-bundle": "^6.4|^7.0", - "twig/twig": "^3.10" - }, - "conflict": { - "symfony/form": "<6.4", - "symfony/mailer": "<6.4", - "symfony/messenger": "<6.4" - }, - "require-dev": { - "symfony/browser-kit": "^6.4|^7.0", - "symfony/console": "^6.4|^7.0", - "symfony/css-selector": "^6.4|^7.0", - "symfony/stopwatch": "^6.4|^7.0" - }, - "time": "2024-08-12T09:59:40+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Bundle\\WebProfilerBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a development tool that gives detailed information about the execution of any request", - "homepage": "https://symfony.com", - "keywords": [ - "dev" - ], - "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v7.1.4" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/web-profiler-bundle" - }, - { - "name": "symfony/yaml", - "version": "v7.1.5", - "version_normalized": "7.1.5.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/4e561c316e135e053bd758bf3b3eb291d9919de4", - "reference": "4e561c316e135e053bd758bf3b3eb291d9919de4", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<6.4" - }, - "require-dev": { - "symfony/console": "^6.4|^7.0" - }, - "time": "2024-09-17T12:49:58+00:00", - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "install-path": "../symfony/yaml" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.3", - "version_normalized": "1.2.3.0", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "time": "2024-03-03T12:36:25+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", - "support": { - "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.3" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "install-path": "../theseer/tokenizer" - }, - { - "name": "twig/extra-bundle", - "version": "v3.13.0", - "version_normalized": "3.13.0.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", - "reference": "21a9a7aa9f79d4493bb6fed4eb2794339f9551f5", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/framework-bundle": "^5.4|^6.4|^7.0", - "symfony/twig-bundle": "^5.4|^6.4|^7.0", - "twig/twig": "^3.0|^4.0" - }, - "require-dev": { - "league/commonmark": "^1.0|^2.0", - "symfony/phpunit-bridge": "^6.4|^7.0", - "twig/cache-extra": "^3.0", - "twig/cssinliner-extra": "^3.0", - "twig/html-extra": "^3.0", - "twig/inky-extra": "^3.0", - "twig/intl-extra": "^3.0", - "twig/markdown-extra": "^3.0", - "twig/string-extra": "^3.0" - }, - "time": "2024-09-01T20:39:12+00:00", - "type": "symfony-bundle", - "installation-source": "dist", - "autoload": { - "psr-4": { - "Twig\\Extra\\TwigExtraBundle\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - } - ], - "description": "A Symfony bundle for extra Twig extensions", - "homepage": "https://twig.symfony.com", - "keywords": [ - "bundle", - "extra", - "twig" - ], - "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.13.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "install-path": "../twig/extra-bundle" - }, - { - "name": "twig/twig", - "version": "v3.14.0", - "version_normalized": "3.14.0.0", - "source": { - "type": "git", - "url": "https://github.com/twigphp/Twig.git", - "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/126b2c97818dbff0cdf3fbfc881aedb3d40aae72", - "reference": "126b2c97818dbff0cdf3fbfc881aedb3d40aae72", - "shasum": "" - }, - "require": { - "php": ">=8.0.2", - "symfony/deprecation-contracts": "^2.5|^3", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php81": "^1.29" - }, - "require-dev": { - "psr/container": "^1.0|^2.0", - "symfony/phpunit-bridge": "^5.4.9|^6.4|^7.0" - }, - "time": "2024-09-09T17:55:12+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "files": [ - "src/Resources/core.php", - "src/Resources/debug.php", - "src/Resources/escaper.php", - "src/Resources/string_loader.php" - ], - "psr-4": { - "Twig\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com", - "homepage": "http://fabien.potencier.org", - "role": "Lead Developer" - }, - { - "name": "Twig Team", - "role": "Contributors" - }, - { - "name": "Armin Ronacher", - "email": "armin.ronacher@active-4.com", - "role": "Project Founder" - } - ], - "description": "Twig, the flexible, fast, and secure template language for PHP", - "homepage": "https://twig.symfony.com", - "keywords": [ - "templating" - ], - "support": { - "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.14.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/twig/twig", - "type": "tidelift" - } - ], - "install-path": "../twig/twig" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "version_normalized": "1.11.0.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "time": "2022-06-03T18:03:27+00:00", - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "installation-source": "dist", - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "install-path": "../webmozart/assert" - } - ], - "dev": true, - "dev-package-names": [ - "masterminds/html5", - "myclabs/deep-copy", - "nikic/php-parser", - "phar-io/manifest", - "phar-io/version", - "phpunit/php-code-coverage", - "phpunit/php-file-iterator", - "phpunit/php-invoker", - "phpunit/php-text-template", - "phpunit/php-timer", - "phpunit/phpunit", - "sebastian/cli-parser", - "sebastian/code-unit", - "sebastian/code-unit-reverse-lookup", - "sebastian/comparator", - "sebastian/complexity", - "sebastian/diff", - "sebastian/environment", - "sebastian/exporter", - "sebastian/global-state", - "sebastian/lines-of-code", - "sebastian/object-enumerator", - "sebastian/object-reflector", - "sebastian/recursion-context", - "sebastian/resource-operations", - "sebastian/type", - "sebastian/version", - "symfony/browser-kit", - "symfony/css-selector", - "symfony/debug-bundle", - "symfony/dom-crawler", - "symfony/maker-bundle", - "symfony/phpunit-bridge", - "symfony/web-profiler-bundle", - "theseer/tokenizer" - ] -} diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php deleted file mode 100644 index 16fd57a..0000000 --- a/vendor/composer/installed.php +++ /dev/null @@ -1,1332 +0,0 @@ - array( - 'name' => '__root__', - 'pretty_version' => 'dev-develop', - 'version' => 'dev-develop', - 'reference' => '36ee0fa018a157151f6b82ad7bc7fce9fa4807dd', - 'type' => 'project', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev' => true, - ), - 'versions' => array( - '__root__' => array( - 'pretty_version' => 'dev-develop', - 'version' => 'dev-develop', - 'reference' => '36ee0fa018a157151f6b82ad7bc7fce9fa4807dd', - 'type' => 'project', - 'install_path' => __DIR__ . '/../../', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'composer/semver' => array( - 'pretty_version' => '3.4.3', - 'version' => '3.4.3.0', - 'reference' => '4313d26ada5e0c4edfbd1dc481a92ff7bff91f12', - 'type' => 'library', - 'install_path' => __DIR__ . '/./semver', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/cache' => array( - 'pretty_version' => '2.2.0', - 'version' => '2.2.0.0', - 'reference' => '1ca8f21980e770095a31456042471a57bc4c68fb', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/cache', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/collections' => array( - 'pretty_version' => '2.2.2', - 'version' => '2.2.2.0', - 'reference' => 'd8af7f248c74f195f7347424600fd9e17b57af59', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/collections', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/dbal' => array( - 'pretty_version' => '3.9.1', - 'version' => '3.9.1.0', - 'reference' => 'd7dc08f98cba352b2bab5d32c5e58f7e745c11a7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/dbal', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/deprecations' => array( - 'pretty_version' => '1.1.3', - 'version' => '1.1.3.0', - 'reference' => 'dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/deprecations', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/doctrine-bundle' => array( - 'pretty_version' => '2.13.0', - 'version' => '2.13.0.0', - 'reference' => 'ca59d84b8e63143ce1aed90cdb333ba329d71563', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../doctrine/doctrine-bundle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/doctrine-migrations-bundle' => array( - 'pretty_version' => '3.3.1', - 'version' => '3.3.1.0', - 'reference' => '715b62c31a5894afcb2b2cdbbc6607d7dd0580c0', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../doctrine/doctrine-migrations-bundle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/event-manager' => array( - 'pretty_version' => '2.0.1', - 'version' => '2.0.1.0', - 'reference' => 'b680156fa328f1dfd874fd48c7026c41570b9c6e', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/event-manager', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/inflector' => array( - 'pretty_version' => '2.0.10', - 'version' => '2.0.10.0', - 'reference' => '5817d0659c5b50c9b950feb9af7b9668e2c436bc', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/inflector', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/instantiator' => array( - 'pretty_version' => '2.0.0', - 'version' => '2.0.0.0', - 'reference' => 'c6222283fa3f4ac679f8b9ced9a4e23f163e80d0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/instantiator', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/lexer' => array( - 'pretty_version' => '3.0.1', - 'version' => '3.0.1.0', - 'reference' => '31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/lexer', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/migrations' => array( - 'pretty_version' => '3.8.1', - 'version' => '3.8.1.0', - 'reference' => '7760fbd0b7cb58bfb50415505a7bab821adf0877', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/migrations', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/orm' => array( - 'pretty_version' => '3.2.2', - 'version' => '3.2.2.0', - 'reference' => '831a1eb7d260925528cdbb49cc1866c0357cf147', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/orm', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/persistence' => array( - 'pretty_version' => '3.3.3', - 'version' => '3.3.3.0', - 'reference' => 'b337726451f5d530df338fc7f68dee8781b49779', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/persistence', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'doctrine/sql-formatter' => array( - 'pretty_version' => '1.4.1', - 'version' => '1.4.1.0', - 'reference' => '7f83911cc5eba870de7ebb11283972483f7e2891', - 'type' => 'library', - 'install_path' => __DIR__ . '/../doctrine/sql-formatter', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'egulias/email-validator' => array( - 'pretty_version' => '4.0.2', - 'version' => '4.0.2.0', - 'reference' => 'ebaaf5be6c0286928352e054f2d5125608e5405e', - 'type' => 'library', - 'install_path' => __DIR__ . '/../egulias/email-validator', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'masterminds/html5' => array( - 'pretty_version' => '2.9.0', - 'version' => '2.9.0.0', - 'reference' => 'f5ac2c0b0a2eefca70b2ce32a5809992227e75a6', - 'type' => 'library', - 'install_path' => __DIR__ . '/../masterminds/html5', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'monolog/monolog' => array( - 'pretty_version' => '3.7.0', - 'version' => '3.7.0.0', - 'reference' => 'f4393b648b78a5408747de94fca38beb5f7e9ef8', - 'type' => 'library', - 'install_path' => __DIR__ . '/../monolog/monolog', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'myclabs/deep-copy' => array( - 'pretty_version' => '1.12.0', - 'version' => '1.12.0.0', - 'reference' => '3a6b9a42cd8f8771bd4295d13e1423fa7f3d942c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../myclabs/deep-copy', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'nikic/php-parser' => array( - 'pretty_version' => 'v5.2.0', - 'version' => '5.2.0.0', - 'reference' => '23c79fbbfb725fb92af9bcf41065c8e9a0d49ddb', - 'type' => 'library', - 'install_path' => __DIR__ . '/../nikic/php-parser', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'phar-io/manifest' => array( - 'pretty_version' => '2.0.4', - 'version' => '2.0.4.0', - 'reference' => '54750ef60c58e43759730615a392c31c80e23176', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phar-io/manifest', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'phar-io/version' => array( - 'pretty_version' => '3.2.1', - 'version' => '3.2.1.0', - 'reference' => '4f7fd7836c6f332bb2933569e566a0d6c4cbed74', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phar-io/version', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'php-http/async-client-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '*', - ), - ), - 'php-http/client-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '*', - ), - ), - 'phpdocumentor/reflection-common' => array( - 'pretty_version' => '2.2.0', - 'version' => '2.2.0.0', - 'reference' => '1d01c49d4ed62f25aa84a747ad35d5a16924662b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpdocumentor/reflection-common', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'phpdocumentor/reflection-docblock' => array( - 'pretty_version' => '5.4.1', - 'version' => '5.4.1.0', - 'reference' => '9d07b3f7fdcf5efec5d1609cba3c19c5ea2bdc9c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpdocumentor/reflection-docblock', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'phpdocumentor/type-resolver' => array( - 'pretty_version' => '1.8.2', - 'version' => '1.8.2.0', - 'reference' => '153ae662783729388a584b4361f2545e4d841e3c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpdocumentor/type-resolver', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'phpstan/phpdoc-parser' => array( - 'pretty_version' => '1.32.0', - 'version' => '1.32.0.0', - 'reference' => '6ca22b154efdd9e3c68c56f5d94670920a1c19a4', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpstan/phpdoc-parser', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'phpunit/php-code-coverage' => array( - 'pretty_version' => '9.2.32', - 'version' => '9.2.32.0', - 'reference' => '85402a822d1ecf1db1096959413d35e1c37cf1a5', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-code-coverage', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'phpunit/php-file-iterator' => array( - 'pretty_version' => '3.0.6', - 'version' => '3.0.6.0', - 'reference' => 'cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-file-iterator', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'phpunit/php-invoker' => array( - 'pretty_version' => '3.1.1', - 'version' => '3.1.1.0', - 'reference' => '5a10147d0aaf65b58940a0b72f71c9ac0423cc67', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-invoker', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'phpunit/php-text-template' => array( - 'pretty_version' => '2.0.4', - 'version' => '2.0.4.0', - 'reference' => '5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-text-template', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'phpunit/php-timer' => array( - 'pretty_version' => '5.0.3', - 'version' => '5.0.3.0', - 'reference' => '5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/php-timer', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'phpunit/phpunit' => array( - 'pretty_version' => '9.6.21', - 'version' => '9.6.21.0', - 'reference' => 'de6abf3b6f8dd955fac3caad3af7a9504e8c2ffa', - 'type' => 'library', - 'install_path' => __DIR__ . '/../phpunit/phpunit', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'psr/cache' => array( - 'pretty_version' => '3.0.0', - 'version' => '3.0.0.0', - 'reference' => 'aa5030cfa5405eccfdcb1083ce040c2cb8d253bf', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/cache', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/cache-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '2.0|3.0', - ), - ), - 'psr/clock' => array( - 'pretty_version' => '1.0.0', - 'version' => '1.0.0.0', - 'reference' => 'e41a24703d4560fd0acb709162f73b8adfc3aa0d', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/clock', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/clock-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0', - ), - ), - 'psr/container' => array( - 'pretty_version' => '2.0.2', - 'version' => '2.0.2.0', - 'reference' => 'c71ecc56dfe541dbd90c5360474fbc405f8d5963', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/container', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/container-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.1|2.0', - ), - ), - 'psr/event-dispatcher' => array( - 'pretty_version' => '1.0.0', - 'version' => '1.0.0.0', - 'reference' => 'dbefd12671e8a14ec7f180cab83036ed26714bb0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/event-dispatcher', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/event-dispatcher-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0', - ), - ), - 'psr/http-client-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0', - ), - ), - 'psr/link' => array( - 'pretty_version' => '2.0.1', - 'version' => '2.0.1.0', - 'reference' => '84b159194ecfd7eaa472280213976e96415433f7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/link', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/link-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0|2.0', - ), - ), - 'psr/log' => array( - 'pretty_version' => '3.0.2', - 'version' => '3.0.2.0', - 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', - 'type' => 'library', - 'install_path' => __DIR__ . '/../psr/log', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'psr/log-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0|2.0|3.0', - 1 => '3.0.0', - ), - ), - 'psr/simple-cache-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.0|2.0|3.0', - ), - ), - 'sebastian/cli-parser' => array( - 'pretty_version' => '1.0.2', - 'version' => '1.0.2.0', - 'reference' => '2b56bea83a09de3ac06bb18b92f068e60cc6f50b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/cli-parser', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/code-unit' => array( - 'pretty_version' => '1.0.8', - 'version' => '1.0.8.0', - 'reference' => '1fc9f64c0927627ef78ba436c9b17d967e68e120', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/code-unit', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/code-unit-reverse-lookup' => array( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', - 'reference' => 'ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/code-unit-reverse-lookup', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/comparator' => array( - 'pretty_version' => '4.0.8', - 'version' => '4.0.8.0', - 'reference' => 'fa0f136dd2334583309d32b62544682ee972b51a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/comparator', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/complexity' => array( - 'pretty_version' => '2.0.3', - 'version' => '2.0.3.0', - 'reference' => '25f207c40d62b8b7aa32f5ab026c53561964053a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/complexity', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/diff' => array( - 'pretty_version' => '4.0.6', - 'version' => '4.0.6.0', - 'reference' => 'ba01945089c3a293b01ba9badc29ad55b106b0bc', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/diff', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/environment' => array( - 'pretty_version' => '5.1.5', - 'version' => '5.1.5.0', - 'reference' => '830c43a844f1f8d5b7a1f6d6076b784454d8b7ed', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/environment', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/exporter' => array( - 'pretty_version' => '4.0.6', - 'version' => '4.0.6.0', - 'reference' => '78c00df8f170e02473b682df15bfcdacc3d32d72', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/exporter', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/global-state' => array( - 'pretty_version' => '5.0.7', - 'version' => '5.0.7.0', - 'reference' => 'bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/global-state', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/lines-of-code' => array( - 'pretty_version' => '1.0.4', - 'version' => '1.0.4.0', - 'reference' => 'e1e4a170560925c26d424b6a03aed157e7dcc5c5', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/lines-of-code', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/object-enumerator' => array( - 'pretty_version' => '4.0.4', - 'version' => '4.0.4.0', - 'reference' => '5c9eeac41b290a3712d88851518825ad78f45c71', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/object-enumerator', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/object-reflector' => array( - 'pretty_version' => '2.0.4', - 'version' => '2.0.4.0', - 'reference' => 'b4f479ebdbf63ac605d183ece17d8d7fe49c15c7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/object-reflector', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/recursion-context' => array( - 'pretty_version' => '4.0.5', - 'version' => '4.0.5.0', - 'reference' => 'e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/recursion-context', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/resource-operations' => array( - 'pretty_version' => '3.0.4', - 'version' => '3.0.4.0', - 'reference' => '05d5692a7993ecccd56a03e40cd7e5b09b1d404e', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/resource-operations', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/type' => array( - 'pretty_version' => '3.2.1', - 'version' => '3.2.1.0', - 'reference' => '75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/type', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'sebastian/version' => array( - 'pretty_version' => '3.0.2', - 'version' => '3.0.2.0', - 'reference' => 'c6c1022351a901512170118436c764e473f6de8c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../sebastian/version', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'symfony/asset' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '8970de4a0cedd34e097c0f5c502a614780b9ca43', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/asset', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/asset-mapper' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'e3ae56f965f1fe503db1f604756a44d40e6dea16', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/asset-mapper', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/browser-kit' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '9c13742e3175b5815e272b981876ae329bec2040', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/browser-kit', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'symfony/cache' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '86e5296b10e4dec8c8441056ca606aedb8a3be0a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/cache', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/cache-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => 'df6a1a44c890faded49a5fca33c2d5c5fd3c2197', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/cache-contracts', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/cache-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.1|2.0|3.0', - ), - ), - 'symfony/clock' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '3dfc8b084853586de51dd1441c6242c76a28cbe7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/clock', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/config' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '2210fc99fa42a259eb6c89d1f724ce0c4d62d5d2', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/config', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/console' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '0fa539d12b3ccf068a722bbbffa07ca7079af9ee', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/console', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/css-selector' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '1c7cee86c6f812896af54434f8ce29c8d94f9ff4', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/css-selector', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'symfony/debug-bundle' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => 'aa024d28ce7ce0c6a16ee57c066838bece92893f', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/debug-bundle', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'symfony/dependency-injection' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '38465f925ec4e0707b090e9147c65869837d639d', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/dependency-injection', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/deprecation-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => '0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/doctrine-bridge' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '2568d0adaa5b0018b07beaa90363b880a43cc957', - 'type' => 'symfony-bridge', - 'install_path' => __DIR__ . '/../symfony/doctrine-bridge', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/doctrine-messenger' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '29015027fb63461e035246e07d74eeab9cb03304', - 'type' => 'symfony-messenger-bridge', - 'install_path' => __DIR__ . '/../symfony/doctrine-messenger', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/dom-crawler' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'b92af238457a7cdd2738f941cd525d76313e8283', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/dom-crawler', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'symfony/dotenv' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '6d966200b399fa59759286f3fc7c919f0677c449', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/dotenv', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/error-handler' => array( - 'pretty_version' => 'v7.1.3', - 'version' => '7.1.3.0', - 'reference' => '432bb369952795c61ca1def65e078c4a80dad13c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/error-handler', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/event-dispatcher' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '9fa7f7a21beb22a39a8f3f28618b29e50d7a55a7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/event-dispatcher', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/event-dispatcher-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => '8f93aec25d41b72493c6ddff14e916177c9efc50', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/event-dispatcher-contracts', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/event-dispatcher-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '2.0|3.0', - ), - ), - 'symfony/expression-language' => array( - 'pretty_version' => 'v7.1.4', - 'version' => '7.1.4.0', - 'reference' => 'b9e4bc6685d513c10235145ed1042a6081635806', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/expression-language', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/filesystem' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '61fe0566189bf32e8cfee78335d8776f64a66f5a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/filesystem', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/finder' => array( - 'pretty_version' => 'v7.1.4', - 'version' => '7.1.4.0', - 'reference' => 'd95bbf319f7d052082fb7af147e0f835a695e823', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/finder', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/flex' => array( - 'pretty_version' => 'v2.4.6', - 'version' => '2.4.6.0', - 'reference' => '4dc11919791f81d087a12db2ab4c7e044431ef6b', - 'type' => 'composer-plugin', - 'install_path' => __DIR__ . '/../symfony/flex', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/form' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '6b8b53ad6d42f14b158c896163b96ff260d78222', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/form', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/framework-bundle' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '8a792de86230c13a9de7750c0c8b23cc083183d4', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/framework-bundle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/http-client' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'abca35865118edf35a23f2f24978a1784c831cb4', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/http-client', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/http-client-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => '20414d96f391677bf80078aa55baece78b82647d', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/http-client-contracts', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/http-client-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '3.0', - ), - ), - 'symfony/http-foundation' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'e30ef73b1e44eea7eb37ba69600a354e553f694b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/http-foundation', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/http-kernel' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '44204d96150a9df1fc57601ec933d23fefc2d65b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/http-kernel', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/intl' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'a0ba7a400e4c915500762c998355bea219a32d6b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/intl', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/mailer' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'bbf21460c56f29810da3df3e206e38dfbb01e80b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/mailer', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/maker-bundle' => array( - 'pretty_version' => 'v1.61.0', - 'version' => '1.61.0.0', - 'reference' => 'a3b7f14d349f8f44ed752d4dde2263f77510cc18', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/maker-bundle', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'symfony/messenger' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'e1c0ced845e3dac12ab428c5ed42dbe7a58ca576', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/messenger', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/mime' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '711d2e167e8ce65b05aea6b258c449671cdd38ff', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/mime', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/monolog-bridge' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '727be11ae17bb1c5a7f600753b9a1bf0cc0ec3b8', - 'type' => 'symfony-bridge', - 'install_path' => __DIR__ . '/../symfony/monolog-bridge', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/monolog-bundle' => array( - 'pretty_version' => 'v3.10.0', - 'version' => '3.10.0.0', - 'reference' => '414f951743f4aa1fd0f5bf6a0e9c16af3fe7f181', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/monolog-bundle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/notifier' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '843946b0b1018ddc714b467f223607c71f9f6c8f', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/notifier', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/options-resolver' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '47aa818121ed3950acd2b58d1d37d08a94f9bf55', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/options-resolver', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/password-hasher' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '4ad96eb7cf9e2f8f133ada95f2b8021769061662', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/password-hasher', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/phpunit-bridge' => array( - 'pretty_version' => 'v7.1.4', - 'version' => '7.1.4.0', - 'reference' => 'e876eb90e32a8fc4c4911d458e09f88d65877d1c', - 'type' => 'symfony-bridge', - 'install_path' => __DIR__ . '/../symfony/phpunit-bridge', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'symfony/polyfill-ctype' => array( - 'dev_requirement' => false, - 'replaced' => array( - 0 => '*', - ), - ), - 'symfony/polyfill-iconv' => array( - 'dev_requirement' => false, - 'replaced' => array( - 0 => '*', - ), - ), - 'symfony/polyfill-intl-grapheme' => array( - 'pretty_version' => 'v1.31.0', - 'version' => '1.31.0.0', - 'reference' => 'b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-intl-grapheme', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-intl-icu' => array( - 'pretty_version' => 'v1.31.0', - 'version' => '1.31.0.0', - 'reference' => 'd80a05e9904d2c2b9b95929f3e4b5d3a8f418d78', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-intl-icu', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-intl-idn' => array( - 'pretty_version' => 'v1.31.0', - 'version' => '1.31.0.0', - 'reference' => 'c36586dcf89a12315939e00ec9b4474adcb1d773', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-intl-idn', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-intl-normalizer' => array( - 'pretty_version' => 'v1.31.0', - 'version' => '1.31.0.0', - 'reference' => '3833d7255cc303546435cb650316bff708a1c75c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-intl-normalizer', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-mbstring' => array( - 'pretty_version' => 'v1.31.0', - 'version' => '1.31.0.0', - 'reference' => '85181ba99b2345b0ef10ce42ecac37612d9fd341', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-mbstring', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/polyfill-php72' => array( - 'dev_requirement' => false, - 'replaced' => array( - 0 => '*', - ), - ), - 'symfony/polyfill-php73' => array( - 'dev_requirement' => false, - 'replaced' => array( - 0 => '*', - ), - ), - 'symfony/polyfill-php74' => array( - 'dev_requirement' => false, - 'replaced' => array( - 0 => '*', - ), - ), - 'symfony/polyfill-php80' => array( - 'dev_requirement' => false, - 'replaced' => array( - 0 => '*', - ), - ), - 'symfony/polyfill-php81' => array( - 'dev_requirement' => false, - 'replaced' => array( - 0 => '*', - ), - ), - 'symfony/polyfill-php82' => array( - 'dev_requirement' => false, - 'replaced' => array( - 0 => '*', - ), - ), - 'symfony/polyfill-php83' => array( - 'pretty_version' => 'v1.31.0', - 'version' => '1.31.0.0', - 'reference' => '2fb86d65e2d424369ad2905e83b236a8805ba491', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/polyfill-php83', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/process' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '5c03ee6369281177f07f7c68252a280beccba847', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/process', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/property-access' => array( - 'pretty_version' => 'v7.1.4', - 'version' => '7.1.4.0', - 'reference' => '6c709f97103355016e5782d0622437ae381012ad', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/property-access', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/property-info' => array( - 'pretty_version' => 'v7.1.3', - 'version' => '7.1.3.0', - 'reference' => '88a279df2db5b7919cac6f35d6a5d1d7147e6a9b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/property-info', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/routing' => array( - 'pretty_version' => 'v7.1.4', - 'version' => '7.1.4.0', - 'reference' => '1500aee0094a3ce1c92626ed8cf3c2037e86f5a7', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/routing', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/runtime' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => 'ea34522c447dd91a2b31cb330ee4540a56ba53f6', - 'type' => 'composer-plugin', - 'install_path' => __DIR__ . '/../symfony/runtime', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/security-bundle' => array( - 'pretty_version' => 'v7.1.4', - 'version' => '7.1.4.0', - 'reference' => '5e10107856ff64d477c61fed7bcbb8a16125ea01', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/security-bundle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/security-core' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'dbeb09f0b786590d126c0da297e2320e66ec353b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/security-core', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/security-csrf' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '27cd1bce9d7f3457a152a6ca9790712d6954dd21', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/security-csrf', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/security-http' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'd47c013bccf4b81a1496826d42dfa05da549131a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/security-http', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/serializer' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '71d6e1f70f00752d1469d0f5e83b0a51716f288b', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/serializer', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/service-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => 'bd1d9e59a81d8fa4acdcea3f617c581f7475a80f', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/service-contracts', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/service-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '1.1|2.0|3.0', - ), - ), - 'symfony/stimulus-bundle' => array( - 'pretty_version' => 'v2.20.0', - 'version' => '2.20.0.0', - 'reference' => 'ae69e3a764694b9f45d8a009dd2b8c22444c5e0c', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/stimulus-bundle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/stopwatch' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '5b75bb1ac2ba1b9d05c47fc4b3046a625377d23d', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/stopwatch', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/string' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'd66f9c343fa894ec2037cc928381df90a7ad4306', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/string', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/translation' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '235535e3f84f3dfbdbde0208ede6ca75c3a489ea', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/translation', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/translation-contracts' => array( - 'pretty_version' => 'v3.5.0', - 'version' => '3.5.0.0', - 'reference' => 'b9d2189887bb6b2e0367a9fc7136c5239ab9b05a', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/translation-contracts', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/translation-implementation' => array( - 'dev_requirement' => false, - 'provided' => array( - 0 => '2.3|3.0', - ), - ), - 'symfony/twig-bridge' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'e997e5025b53c0f7b17632802daefdd6a04540ae', - 'type' => 'symfony-bridge', - 'install_path' => __DIR__ . '/../symfony/twig-bridge', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/twig-bundle' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '4e6afd0dc8396f16861b682f3b854ff6e24bfb7e', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/twig-bundle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/type-info' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '9f6094aa900d2c06bd61576a6f279d4ac441515f', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/type-info', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/ux-turbo' => array( - 'pretty_version' => 'v2.20.0', - 'version' => '2.20.0.0', - 'reference' => '5eaa803dea9f954aa124963f2c872b414d97cc97', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/ux-turbo', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/validator' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'e57592782dc2a86997477f28164c51af53512ad8', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/validator', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/var-dumper' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => 'e20e03889539fd4e4211e14d2179226c513c010d', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/var-dumper', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/var-exporter' => array( - 'pretty_version' => 'v7.1.2', - 'version' => '7.1.2.0', - 'reference' => 'b80a669a2264609f07f1667f891dbfca25eba44c', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/var-exporter', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/web-link' => array( - 'pretty_version' => 'v7.1.1', - 'version' => '7.1.1.0', - 'reference' => '63f90aa0054bfd9a091d2f5cf465958f1030638f', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/web-link', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'symfony/web-profiler-bundle' => array( - 'pretty_version' => 'v7.1.4', - 'version' => '7.1.4.0', - 'reference' => '3cfc775277a8f2dacdd0f72d196bc87b272a763f', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../symfony/web-profiler-bundle', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'symfony/yaml' => array( - 'pretty_version' => 'v7.1.5', - 'version' => '7.1.5.0', - 'reference' => '4e561c316e135e053bd758bf3b3eb291d9919de4', - 'type' => 'library', - 'install_path' => __DIR__ . '/../symfony/yaml', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'theseer/tokenizer' => array( - 'pretty_version' => '1.2.3', - 'version' => '1.2.3.0', - 'reference' => '737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2', - 'type' => 'library', - 'install_path' => __DIR__ . '/../theseer/tokenizer', - 'aliases' => array(), - 'dev_requirement' => true, - ), - 'twig/extra-bundle' => array( - 'pretty_version' => 'v3.13.0', - 'version' => '3.13.0.0', - 'reference' => '21a9a7aa9f79d4493bb6fed4eb2794339f9551f5', - 'type' => 'symfony-bundle', - 'install_path' => __DIR__ . '/../twig/extra-bundle', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'twig/twig' => array( - 'pretty_version' => 'v3.14.0', - 'version' => '3.14.0.0', - 'reference' => '126b2c97818dbff0cdf3fbfc881aedb3d40aae72', - 'type' => 'library', - 'install_path' => __DIR__ . '/../twig/twig', - 'aliases' => array(), - 'dev_requirement' => false, - ), - 'webmozart/assert' => array( - 'pretty_version' => '1.11.0', - 'version' => '1.11.0.0', - 'reference' => '11cb2199493b2f8a3b53e7f19068fc6aac760991', - 'type' => 'library', - 'install_path' => __DIR__ . '/../webmozart/assert', - 'aliases' => array(), - 'dev_requirement' => false, - ), - ), -); diff --git a/vendor/composer/platform_check.php b/vendor/composer/platform_check.php deleted file mode 100644 index d32d90c..0000000 --- a/vendor/composer/platform_check.php +++ /dev/null @@ -1,26 +0,0 @@ -= 80200)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 8.2.0". You are running ' . PHP_VERSION . '.'; -} - -if ($issues) { - if (!headers_sent()) { - header('HTTP/1.1 500 Internal Server Error'); - } - if (!ini_get('display_errors')) { - if (PHP_SAPI === 'cli' || PHP_SAPI === 'phpdbg') { - fwrite(STDERR, 'Composer detected issues in your platform:' . PHP_EOL.PHP_EOL . implode(PHP_EOL, $issues) . PHP_EOL.PHP_EOL); - } elseif (!headers_sent()) { - 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; - } - } - trigger_error( - 'Composer detected issues in your platform: ' . implode(' ', $issues), - E_USER_ERROR - ); -} diff --git a/vendor/composer/semver/CHANGELOG.md b/vendor/composer/semver/CHANGELOG.md deleted file mode 100644 index bad46cd..0000000 --- a/vendor/composer/semver/CHANGELOG.md +++ /dev/null @@ -1,229 +0,0 @@ -# Change Log - -All notable changes to this project will be documented in this file. -This project adheres to [Semantic Versioning](http://semver.org/). - -### [3.4.3] 2024-09-19 - - * Fixed some type annotations - -### [3.4.2] 2024-07-12 - - * Fixed PHP 5.3 syntax error - -### [3.4.1] 2024-07-12 - - * Fixed normalizeStability's return type to enforce valid stabilities - -### [3.4.0] 2023-08-31 - - * Support larger major version numbers (#149) - -### [3.3.2] 2022-04-01 - - * Fixed handling of non-string values (#134) - -### [3.3.1] 2022-03-16 - - * Fixed possible cache key clash in the CompilingMatcher memoization (#132) - -### [3.3.0] 2022-03-15 - - * Improved performance of CompilingMatcher by memoizing more (#131) - * Added CompilingMatcher::clear to clear all memoization caches - -### [3.2.9] 2022-02-04 - - * Revert #129 (Fixed MultiConstraint with MatchAllConstraint) which caused regressions - -### [3.2.8] 2022-02-04 - - * Updates to latest phpstan / CI by @Seldaek in https://github.com/composer/semver/pull/130 - * Fixed MultiConstraint with MatchAllConstraint by @Toflar in https://github.com/composer/semver/pull/129 - -### [3.2.7] 2022-01-04 - - * Fixed: typo in type definition of Intervals class causing issues with Psalm scanning vendors - -### [3.2.6] 2021-10-25 - - * Fixed: type improvements to parseStability - -### [3.2.5] 2021-05-24 - - * Fixed: issue comparing disjunctive MultiConstraints to conjunctive ones (#127) - * Fixed: added complete type information using phpstan annotations - -### [3.2.4] 2020-11-13 - - * Fixed: code clean-up - -### [3.2.3] 2020-11-12 - - * Fixed: constraints in the form of `X || Y, >=Y.1` and other such complex constructs were in some cases being optimized into a more restrictive constraint - -### [3.2.2] 2020-10-14 - - * Fixed: internal code cleanups - -### [3.2.1] 2020-09-27 - - * Fixed: accidental validation of broken constraints combining ^/~ and wildcards, and -dev suffix allowing weird cases - * Fixed: normalization of beta0 and such which was dropping the 0 - -### [3.2.0] 2020-09-09 - - * Added: support for `x || @dev`, not very useful but seen in the wild and failed to validate with 1.5.2/1.6.0 - * Added: support for `foobar-dev` being equal to `dev-foobar`, dev-foobar is the official way to write it but we need to support the other for BC and convenience - -### [3.1.0] 2020-09-08 - - * Added: support for constraints like `^2.x-dev` and `~2.x-dev`, not very useful but seen in the wild and failed to validate with 3.0.1 - * Fixed: invalid aliases will no longer throw, unless explicitly validated by Composer in the root package - -### [3.0.1] 2020-09-08 - - * Fixed: handling of some invalid -dev versions which were seen as valid - -### [3.0.0] 2020-05-26 - - * Break: Renamed `EmptyConstraint`, replace it with `MatchAllConstraint` - * Break: Unlikely to affect anyone but strictly speaking a breaking change, `*.*` and such variants will not match all `dev-*` versions anymore, only `*` does - * Break: ConstraintInterface is now considered internal/private and not meant to be implemented by third parties anymore - * Added `Intervals` class to check if a constraint is a subsets of another one, and allow compacting complex MultiConstraints into simpler ones - * Added `CompilingMatcher` class to speed up constraint matching against simple Constraint instances - * Added `MatchAllConstraint` and `MatchNoneConstraint` which match everything and nothing - * Added more advanced optimization of contiguous constraints inside MultiConstraint - * Added tentative support for PHP 8 - * Fixed ConstraintInterface::matches to be commutative in all cases - -### [2.0.0] 2020-04-21 - - * Break: `dev-master`, `dev-trunk` and `dev-default` now normalize to `dev-master`, `dev-trunk` and `dev-default` instead of `9999999-dev` in 1.x - * Break: Removed the deprecated `AbstractConstraint` - * Added `getUpperBound` and `getLowerBound` to ConstraintInterface. They return `Composer\Semver\Constraint\Bound` instances - * Added `MultiConstraint::create` to create the most-optimal form of ConstraintInterface from an array of constraint strings - -### [1.7.2] 2020-12-03 - - * Fixed: Allow installing on php 8 - -### [1.7.1] 2020-09-27 - - * Fixed: accidental validation of broken constraints combining ^/~ and wildcards, and -dev suffix allowing weird cases - * Fixed: normalization of beta0 and such which was dropping the 0 - -### [1.7.0] 2020-09-09 - - * Added: support for `x || @dev`, not very useful but seen in the wild and failed to validate with 1.5.2/1.6.0 - * Added: support for `foobar-dev` being equal to `dev-foobar`, dev-foobar is the official way to write it but we need to support the other for BC and convenience - -### [1.6.0] 2020-09-08 - - * Added: support for constraints like `^2.x-dev` and `~2.x-dev`, not very useful but seen in the wild and failed to validate with 1.5.2 - * Fixed: invalid aliases will no longer throw, unless explicitly validated by Composer in the root package - -### [1.5.2] 2020-09-08 - - * Fixed: handling of some invalid -dev versions which were seen as valid - * Fixed: some doctypes - -### [1.5.1] 2020-01-13 - - * Fixed: Parsing of aliased version was not validating the alias to be a valid version - -### [1.5.0] 2019-03-19 - - * Added: some support for date versions (e.g. 201903) in `~` operator - * Fixed: support for stabilities in `~` operator was inconsistent - -### [1.4.2] 2016-08-30 - - * Fixed: collapsing of complex constraints lead to buggy constraints - -### [1.4.1] 2016-06-02 - - * Changed: branch-like requirements no longer strip build metadata - [composer/semver#38](https://github.com/composer/semver/pull/38). - -### [1.4.0] 2016-03-30 - - * Added: getters on MultiConstraint - [composer/semver#35](https://github.com/composer/semver/pull/35). - -### [1.3.0] 2016-02-25 - - * Fixed: stability parsing - [composer/composer#1234](https://github.com/composer/composer/issues/4889). - * Changed: collapse contiguous constraints when possible. - -### [1.2.0] 2015-11-10 - - * Changed: allow multiple numerical identifiers in 'pre-release' version part. - * Changed: add more 'v' prefix support. - -### [1.1.0] 2015-11-03 - - * Changed: dropped redundant `test` namespace. - * Changed: minor adjustment in datetime parsing normalization. - * Changed: `ConstraintInterface` relaxed, setPrettyString is not required anymore. - * Changed: `AbstractConstraint` marked deprecated, will be removed in 2.0. - * Changed: `Constraint` is now extensible. - -### [1.0.0] 2015-09-21 - - * Break: `VersionConstraint` renamed to `Constraint`. - * Break: `SpecificConstraint` renamed to `AbstractConstraint`. - * Break: `LinkConstraintInterface` renamed to `ConstraintInterface`. - * Break: `VersionParser::parseNameVersionPairs` was removed. - * Changed: `VersionParser::parseConstraints` allows (but ignores) build metadata now. - * Changed: `VersionParser::parseConstraints` allows (but ignores) prefixing numeric versions with a 'v' now. - * Changed: Fixed namespace(s) of test files. - * Changed: `Comparator::compare` no longer throws `InvalidArgumentException`. - * Changed: `Constraint` now throws `InvalidArgumentException`. - -### [0.1.0] 2015-07-23 - - * Added: `Composer\Semver\Comparator`, various methods to compare versions. - * Added: various documents such as README.md, LICENSE, etc. - * Added: configuration files for Git, Travis, php-cs-fixer, phpunit. - * Break: the following namespaces were renamed: - - Namespace: `Composer\Package\Version` -> `Composer\Semver` - - Namespace: `Composer\Package\LinkConstraint` -> `Composer\Semver\Constraint` - - Namespace: `Composer\Test\Package\Version` -> `Composer\Test\Semver` - - Namespace: `Composer\Test\Package\LinkConstraint` -> `Composer\Test\Semver\Constraint` - * Changed: code style using php-cs-fixer. - -[3.4.3]: https://github.com/composer/semver/compare/3.4.2...3.4.3 -[3.4.2]: https://github.com/composer/semver/compare/3.4.1...3.4.2 -[3.4.1]: https://github.com/composer/semver/compare/3.4.0...3.4.1 -[3.4.0]: https://github.com/composer/semver/compare/3.3.2...3.4.0 -[3.3.2]: https://github.com/composer/semver/compare/3.3.1...3.3.2 -[3.3.1]: https://github.com/composer/semver/compare/3.3.0...3.3.1 -[3.3.0]: https://github.com/composer/semver/compare/3.2.9...3.3.0 -[3.2.9]: https://github.com/composer/semver/compare/3.2.8...3.2.9 -[3.2.8]: https://github.com/composer/semver/compare/3.2.7...3.2.8 -[3.2.7]: https://github.com/composer/semver/compare/3.2.6...3.2.7 -[3.2.6]: https://github.com/composer/semver/compare/3.2.5...3.2.6 -[3.2.5]: https://github.com/composer/semver/compare/3.2.4...3.2.5 -[3.2.4]: https://github.com/composer/semver/compare/3.2.3...3.2.4 -[3.2.3]: https://github.com/composer/semver/compare/3.2.2...3.2.3 -[3.2.2]: https://github.com/composer/semver/compare/3.2.1...3.2.2 -[3.2.1]: https://github.com/composer/semver/compare/3.2.0...3.2.1 -[3.2.0]: https://github.com/composer/semver/compare/3.1.0...3.2.0 -[3.1.0]: https://github.com/composer/semver/compare/3.0.1...3.1.0 -[3.0.1]: https://github.com/composer/semver/compare/3.0.0...3.0.1 -[3.0.0]: https://github.com/composer/semver/compare/2.0.0...3.0.0 -[2.0.0]: https://github.com/composer/semver/compare/1.5.1...2.0.0 -[1.7.2]: https://github.com/composer/semver/compare/1.7.1...1.7.2 -[1.7.1]: https://github.com/composer/semver/compare/1.7.0...1.7.1 -[1.7.0]: https://github.com/composer/semver/compare/1.6.0...1.7.0 -[1.6.0]: https://github.com/composer/semver/compare/1.5.2...1.6.0 -[1.5.2]: https://github.com/composer/semver/compare/1.5.1...1.5.2 -[1.5.1]: https://github.com/composer/semver/compare/1.5.0...1.5.1 -[1.5.0]: https://github.com/composer/semver/compare/1.4.2...1.5.0 -[1.4.2]: https://github.com/composer/semver/compare/1.4.1...1.4.2 -[1.4.1]: https://github.com/composer/semver/compare/1.4.0...1.4.1 -[1.4.0]: https://github.com/composer/semver/compare/1.3.0...1.4.0 -[1.3.0]: https://github.com/composer/semver/compare/1.2.0...1.3.0 -[1.2.0]: https://github.com/composer/semver/compare/1.1.0...1.2.0 -[1.1.0]: https://github.com/composer/semver/compare/1.0.0...1.1.0 -[1.0.0]: https://github.com/composer/semver/compare/0.1.0...1.0.0 -[0.1.0]: https://github.com/composer/semver/compare/5e0b9a4da...0.1.0 diff --git a/vendor/composer/semver/README.md b/vendor/composer/semver/README.md deleted file mode 100644 index 7677849..0000000 --- a/vendor/composer/semver/README.md +++ /dev/null @@ -1,99 +0,0 @@ -composer/semver -=============== - -Semver (Semantic Versioning) library that offers utilities, version constraint parsing and validation. - -Originally written as part of [composer/composer](https://github.com/composer/composer), -now extracted and made available as a stand-alone library. - -[![Continuous Integration](https://github.com/composer/semver/actions/workflows/continuous-integration.yml/badge.svg?branch=main)](https://github.com/composer/semver/actions/workflows/continuous-integration.yml) -[![PHP Lint](https://github.com/composer/semver/actions/workflows/lint.yml/badge.svg?branch=main)](https://github.com/composer/semver/actions/workflows/lint.yml) -[![PHPStan](https://github.com/composer/semver/actions/workflows/phpstan.yml/badge.svg?branch=main)](https://github.com/composer/semver/actions/workflows/phpstan.yml) - -Installation ------------- - -Install the latest version with: - -```bash -composer require composer/semver -``` - - -Requirements ------------- - -* PHP 5.3.2 is required but using the latest version of PHP is highly recommended. - - -Version Comparison ------------------- - -For details on how versions are compared, refer to the [Versions](https://getcomposer.org/doc/articles/versions.md) -article in the documentation section of the [getcomposer.org](https://getcomposer.org) website. - - -Basic usage ------------ - -### Comparator - -The [`Composer\Semver\Comparator`](https://github.com/composer/semver/blob/main/src/Comparator.php) class provides the following methods for comparing versions: - -* greaterThan($v1, $v2) -* greaterThanOrEqualTo($v1, $v2) -* lessThan($v1, $v2) -* lessThanOrEqualTo($v1, $v2) -* equalTo($v1, $v2) -* notEqualTo($v1, $v2) - -Each function takes two version strings as arguments and returns a boolean. For example: - -```php -use Composer\Semver\Comparator; - -Comparator::greaterThan('1.25.0', '1.24.0'); // 1.25.0 > 1.24.0 -``` - -### Semver - -The [`Composer\Semver\Semver`](https://github.com/composer/semver/blob/main/src/Semver.php) class provides the following methods: - -* satisfies($version, $constraints) -* satisfiedBy(array $versions, $constraint) -* sort($versions) -* rsort($versions) - -### Intervals - -The [`Composer\Semver\Intervals`](https://github.com/composer/semver/blob/main/src/Intervals.php) static class provides -a few utilities to work with complex constraints or read version intervals from a constraint: - -```php -use Composer\Semver\Intervals; - -// Checks whether $candidate is a subset of $constraint -Intervals::isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint); - -// Checks whether $a and $b have any intersection, equivalent to $a->matches($b) -Intervals::haveIntersections(ConstraintInterface $a, ConstraintInterface $b); - -// Optimizes a complex multi constraint by merging all intervals down to the smallest -// possible multi constraint. The drawbacks are this is not very fast, and the resulting -// multi constraint will have no human readable prettyConstraint configured on it -Intervals::compactConstraint(ConstraintInterface $constraint); - -// Creates an array of numeric intervals and branch constraints representing a given constraint -Intervals::get(ConstraintInterface $constraint); - -// Clears the memoization cache when you are done processing constraints -Intervals::clear() -``` - -See the class docblocks for more details. - - -License -------- - -composer/semver is licensed under the MIT License, see the LICENSE file for details. diff --git a/vendor/composer/semver/composer.json b/vendor/composer/semver/composer.json deleted file mode 100644 index 1fad9e5..0000000 --- a/vendor/composer/semver/composer.json +++ /dev/null @@ -1,59 +0,0 @@ -{ - "name": "composer/semver", - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "type": "library", - "license": "MIT", - "keywords": [ - "semver", - "semantic", - "versioning", - "validation" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "support": { - "irc": "ircs://irc.libera.chat:6697/composer", - "issues": "https://github.com/composer/semver/issues" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^3 || ^7", - "phpstan/phpstan": "^1.11" - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Composer\\Semver\\": "tests" - } - }, - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "scripts": { - "test": "SYMFONY_PHPUNIT_REMOVE_RETURN_TYPEHINT=1 vendor/bin/simple-phpunit", - "phpstan": "@php vendor/bin/phpstan analyse" - } -} diff --git a/vendor/composer/semver/src/Comparator.php b/vendor/composer/semver/src/Comparator.php deleted file mode 100644 index 38f483a..0000000 --- a/vendor/composer/semver/src/Comparator.php +++ /dev/null @@ -1,113 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; - -class Comparator -{ - /** - * Evaluates the expression: $version1 > $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function greaterThan($version1, $version2) - { - return self::compare($version1, '>', $version2); - } - - /** - * Evaluates the expression: $version1 >= $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function greaterThanOrEqualTo($version1, $version2) - { - return self::compare($version1, '>=', $version2); - } - - /** - * Evaluates the expression: $version1 < $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function lessThan($version1, $version2) - { - return self::compare($version1, '<', $version2); - } - - /** - * Evaluates the expression: $version1 <= $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function lessThanOrEqualTo($version1, $version2) - { - return self::compare($version1, '<=', $version2); - } - - /** - * Evaluates the expression: $version1 == $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function equalTo($version1, $version2) - { - return self::compare($version1, '==', $version2); - } - - /** - * Evaluates the expression: $version1 != $version2. - * - * @param string $version1 - * @param string $version2 - * - * @return bool - */ - public static function notEqualTo($version1, $version2) - { - return self::compare($version1, '!=', $version2); - } - - /** - * Evaluates the expression: $version1 $operator $version2. - * - * @param string $version1 - * @param string $operator - * @param string $version2 - * - * @return bool - * - * @phpstan-param Constraint::STR_OP_* $operator - */ - public static function compare($version1, $operator, $version2) - { - $constraint = new Constraint($operator, $version2); - - return $constraint->matchSpecific(new Constraint('==', $version1), true); - } -} diff --git a/vendor/composer/semver/src/CompilingMatcher.php b/vendor/composer/semver/src/CompilingMatcher.php deleted file mode 100644 index aea1d3b..0000000 --- a/vendor/composer/semver/src/CompilingMatcher.php +++ /dev/null @@ -1,94 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; -use Composer\Semver\Constraint\ConstraintInterface; - -/** - * Helper class to evaluate constraint by compiling and reusing the code to evaluate - */ -class CompilingMatcher -{ - /** - * @var array - * @phpstan-var array - */ - private static $compiledCheckerCache = array(); - /** - * @var array - * @phpstan-var array - */ - private static $resultCache = array(); - - /** @var bool */ - private static $enabled; - - /** - * @phpstan-var array - */ - private static $transOpInt = array( - Constraint::OP_EQ => Constraint::STR_OP_EQ, - Constraint::OP_LT => Constraint::STR_OP_LT, - Constraint::OP_LE => Constraint::STR_OP_LE, - Constraint::OP_GT => Constraint::STR_OP_GT, - Constraint::OP_GE => Constraint::STR_OP_GE, - Constraint::OP_NE => Constraint::STR_OP_NE, - ); - - /** - * Clears the memoization cache once you are done - * - * @return void - */ - public static function clear() - { - self::$resultCache = array(); - self::$compiledCheckerCache = array(); - } - - /** - * Evaluates the expression: $constraint match $operator $version - * - * @param ConstraintInterface $constraint - * @param int $operator - * @phpstan-param Constraint::OP_* $operator - * @param string $version - * - * @return bool - */ - public static function match(ConstraintInterface $constraint, $operator, $version) - { - $resultCacheKey = $operator.$constraint.';'.$version; - - if (isset(self::$resultCache[$resultCacheKey])) { - return self::$resultCache[$resultCacheKey]; - } - - if (self::$enabled === null) { - self::$enabled = !\in_array('eval', explode(',', (string) ini_get('disable_functions')), true); - } - if (!self::$enabled) { - return self::$resultCache[$resultCacheKey] = $constraint->matches(new Constraint(self::$transOpInt[$operator], $version)); - } - - $cacheKey = $operator.$constraint; - if (!isset(self::$compiledCheckerCache[$cacheKey])) { - $code = $constraint->compile($operator); - self::$compiledCheckerCache[$cacheKey] = $function = eval('return function($v, $b){return '.$code.';};'); - } else { - $function = self::$compiledCheckerCache[$cacheKey]; - } - - return self::$resultCache[$resultCacheKey] = $function($version, strpos($version, 'dev-') === 0); - } -} diff --git a/vendor/composer/semver/src/Constraint/Bound.php b/vendor/composer/semver/src/Constraint/Bound.php deleted file mode 100644 index 7effb11..0000000 --- a/vendor/composer/semver/src/Constraint/Bound.php +++ /dev/null @@ -1,122 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -class Bound -{ - /** - * @var string - */ - private $version; - - /** - * @var bool - */ - private $isInclusive; - - /** - * @param string $version - * @param bool $isInclusive - */ - public function __construct($version, $isInclusive) - { - $this->version = $version; - $this->isInclusive = $isInclusive; - } - - /** - * @return string - */ - public function getVersion() - { - return $this->version; - } - - /** - * @return bool - */ - public function isInclusive() - { - return $this->isInclusive; - } - - /** - * @return bool - */ - public function isZero() - { - return $this->getVersion() === '0.0.0.0-dev' && $this->isInclusive(); - } - - /** - * @return bool - */ - public function isPositiveInfinity() - { - return $this->getVersion() === PHP_INT_MAX.'.0.0.0' && !$this->isInclusive(); - } - - /** - * Compares a bound to another with a given operator. - * - * @param Bound $other - * @param string $operator - * - * @return bool - */ - public function compareTo(Bound $other, $operator) - { - if (!\in_array($operator, array('<', '>'), true)) { - throw new \InvalidArgumentException('Does not support any other operator other than > or <.'); - } - - // If they are the same it doesn't matter - if ($this == $other) { - return false; - } - - $compareResult = version_compare($this->getVersion(), $other->getVersion()); - - // Not the same version means we don't need to check if the bounds are inclusive or not - if (0 !== $compareResult) { - return (('>' === $operator) ? 1 : -1) === $compareResult; - } - - // Question we're answering here is "am I higher than $other?" - return '>' === $operator ? $other->isInclusive() : !$other->isInclusive(); - } - - public function __toString() - { - return sprintf( - '%s [%s]', - $this->getVersion(), - $this->isInclusive() ? 'inclusive' : 'exclusive' - ); - } - - /** - * @return self - */ - public static function zero() - { - return new Bound('0.0.0.0-dev', true); - } - - /** - * @return self - */ - public static function positiveInfinity() - { - return new Bound(PHP_INT_MAX.'.0.0.0', false); - } -} diff --git a/vendor/composer/semver/src/Constraint/Constraint.php b/vendor/composer/semver/src/Constraint/Constraint.php deleted file mode 100644 index dc39482..0000000 --- a/vendor/composer/semver/src/Constraint/Constraint.php +++ /dev/null @@ -1,435 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * Defines a constraint. - */ -class Constraint implements ConstraintInterface -{ - /* operator integer values */ - const OP_EQ = 0; - const OP_LT = 1; - const OP_LE = 2; - const OP_GT = 3; - const OP_GE = 4; - const OP_NE = 5; - - /* operator string values */ - const STR_OP_EQ = '=='; - const STR_OP_EQ_ALT = '='; - const STR_OP_LT = '<'; - const STR_OP_LE = '<='; - const STR_OP_GT = '>'; - const STR_OP_GE = '>='; - const STR_OP_NE = '!='; - const STR_OP_NE_ALT = '<>'; - - /** - * Operator to integer translation table. - * - * @var array - * @phpstan-var array - */ - private static $transOpStr = array( - '=' => self::OP_EQ, - '==' => self::OP_EQ, - '<' => self::OP_LT, - '<=' => self::OP_LE, - '>' => self::OP_GT, - '>=' => self::OP_GE, - '<>' => self::OP_NE, - '!=' => self::OP_NE, - ); - - /** - * Integer to operator translation table. - * - * @var array - * @phpstan-var array - */ - private static $transOpInt = array( - self::OP_EQ => '==', - self::OP_LT => '<', - self::OP_LE => '<=', - self::OP_GT => '>', - self::OP_GE => '>=', - self::OP_NE => '!=', - ); - - /** - * @var int - * @phpstan-var self::OP_* - */ - protected $operator; - - /** @var string */ - protected $version; - - /** @var string|null */ - protected $prettyString; - - /** @var Bound */ - protected $lowerBound; - - /** @var Bound */ - protected $upperBound; - - /** - * Sets operator and version to compare with. - * - * @param string $operator - * @param string $version - * - * @throws \InvalidArgumentException if invalid operator is given. - * - * @phpstan-param self::STR_OP_* $operator - */ - public function __construct($operator, $version) - { - if (!isset(self::$transOpStr[$operator])) { - throw new \InvalidArgumentException(sprintf( - 'Invalid operator "%s" given, expected one of: %s', - $operator, - implode(', ', self::getSupportedOperators()) - )); - } - - $this->operator = self::$transOpStr[$operator]; - $this->version = $version; - } - - /** - * @return string - */ - public function getVersion() - { - return $this->version; - } - - /** - * @return string - * - * @phpstan-return self::STR_OP_* - */ - public function getOperator() - { - return self::$transOpInt[$this->operator]; - } - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - if ($provider instanceof self) { - return $this->matchSpecific($provider); - } - - // turn matching around to find a match - return $provider->matches($this); - } - - /** - * {@inheritDoc} - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * {@inheritDoc} - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return $this->__toString(); - } - - /** - * Get all supported comparison operators. - * - * @return array - * - * @phpstan-return list - */ - public static function getSupportedOperators() - { - return array_keys(self::$transOpStr); - } - - /** - * @param string $operator - * @return int - * - * @phpstan-param self::STR_OP_* $operator - * @phpstan-return self::OP_* - */ - public static function getOperatorConstant($operator) - { - return self::$transOpStr[$operator]; - } - - /** - * @param string $a - * @param string $b - * @param string $operator - * @param bool $compareBranches - * - * @throws \InvalidArgumentException if invalid operator is given. - * - * @return bool - * - * @phpstan-param self::STR_OP_* $operator - */ - public function versionCompare($a, $b, $operator, $compareBranches = false) - { - if (!isset(self::$transOpStr[$operator])) { - throw new \InvalidArgumentException(sprintf( - 'Invalid operator "%s" given, expected one of: %s', - $operator, - implode(', ', self::getSupportedOperators()) - )); - } - - $aIsBranch = strpos($a, 'dev-') === 0; - $bIsBranch = strpos($b, 'dev-') === 0; - - if ($operator === '!=' && ($aIsBranch || $bIsBranch)) { - return $a !== $b; - } - - if ($aIsBranch && $bIsBranch) { - return $operator === '==' && $a === $b; - } - - // when branches are not comparable, we make sure dev branches never match anything - if (!$compareBranches && ($aIsBranch || $bIsBranch)) { - return false; - } - - return \version_compare($a, $b, $operator); - } - - /** - * {@inheritDoc} - */ - public function compile($otherOperator) - { - if (strpos($this->version, 'dev-') === 0) { - if (self::OP_EQ === $this->operator) { - if (self::OP_EQ === $otherOperator) { - return sprintf('$b && $v === %s', \var_export($this->version, true)); - } - if (self::OP_NE === $otherOperator) { - return sprintf('!$b || $v !== %s', \var_export($this->version, true)); - } - return 'false'; - } - - if (self::OP_NE === $this->operator) { - if (self::OP_EQ === $otherOperator) { - return sprintf('!$b || $v !== %s', \var_export($this->version, true)); - } - if (self::OP_NE === $otherOperator) { - return 'true'; - } - return '!$b'; - } - - return 'false'; - } - - if (self::OP_EQ === $this->operator) { - if (self::OP_EQ === $otherOperator) { - return sprintf('\version_compare($v, %s, \'==\')', \var_export($this->version, true)); - } - if (self::OP_NE === $otherOperator) { - return sprintf('$b || \version_compare($v, %s, \'!=\')', \var_export($this->version, true)); - } - - return sprintf('!$b && \version_compare(%s, $v, \'%s\')', \var_export($this->version, true), self::$transOpInt[$otherOperator]); - } - - if (self::OP_NE === $this->operator) { - if (self::OP_EQ === $otherOperator) { - return sprintf('$b || (!$b && \version_compare($v, %s, \'!=\'))', \var_export($this->version, true)); - } - - if (self::OP_NE === $otherOperator) { - return 'true'; - } - return '!$b'; - } - - if (self::OP_LT === $this->operator || self::OP_LE === $this->operator) { - if (self::OP_LT === $otherOperator || self::OP_LE === $otherOperator) { - return '!$b'; - } - } else { // $this->operator must be self::OP_GT || self::OP_GE here - if (self::OP_GT === $otherOperator || self::OP_GE === $otherOperator) { - return '!$b'; - } - } - - if (self::OP_NE === $otherOperator) { - return 'true'; - } - - $codeComparison = sprintf('\version_compare($v, %s, \'%s\')', \var_export($this->version, true), self::$transOpInt[$this->operator]); - if ($this->operator === self::OP_LE) { - if ($otherOperator === self::OP_GT) { - return sprintf('!$b && \version_compare($v, %s, \'!=\') && ', \var_export($this->version, true)) . $codeComparison; - } - } elseif ($this->operator === self::OP_GE) { - if ($otherOperator === self::OP_LT) { - return sprintf('!$b && \version_compare($v, %s, \'!=\') && ', \var_export($this->version, true)) . $codeComparison; - } - } - - return sprintf('!$b && %s', $codeComparison); - } - - /** - * @param Constraint $provider - * @param bool $compareBranches - * - * @return bool - */ - public function matchSpecific(Constraint $provider, $compareBranches = false) - { - $noEqualOp = str_replace('=', '', self::$transOpInt[$this->operator]); - $providerNoEqualOp = str_replace('=', '', self::$transOpInt[$provider->operator]); - - $isEqualOp = self::OP_EQ === $this->operator; - $isNonEqualOp = self::OP_NE === $this->operator; - $isProviderEqualOp = self::OP_EQ === $provider->operator; - $isProviderNonEqualOp = self::OP_NE === $provider->operator; - - // '!=' operator is match when other operator is not '==' operator or version is not match - // these kinds of comparisons always have a solution - if ($isNonEqualOp || $isProviderNonEqualOp) { - if ($isNonEqualOp && !$isProviderNonEqualOp && !$isProviderEqualOp && strpos($provider->version, 'dev-') === 0) { - return false; - } - - if ($isProviderNonEqualOp && !$isNonEqualOp && !$isEqualOp && strpos($this->version, 'dev-') === 0) { - return false; - } - - if (!$isEqualOp && !$isProviderEqualOp) { - return true; - } - return $this->versionCompare($provider->version, $this->version, '!=', $compareBranches); - } - - // an example for the condition is <= 2.0 & < 1.0 - // these kinds of comparisons always have a solution - if ($this->operator !== self::OP_EQ && $noEqualOp === $providerNoEqualOp) { - return !(strpos($this->version, 'dev-') === 0 || strpos($provider->version, 'dev-') === 0); - } - - $version1 = $isEqualOp ? $this->version : $provider->version; - $version2 = $isEqualOp ? $provider->version : $this->version; - $operator = $isEqualOp ? $provider->operator : $this->operator; - - if ($this->versionCompare($version1, $version2, self::$transOpInt[$operator], $compareBranches)) { - // special case, e.g. require >= 1.0 and provide < 1.0 - // 1.0 >= 1.0 but 1.0 is outside of the provided interval - - return !(self::$transOpInt[$provider->operator] === $providerNoEqualOp - && self::$transOpInt[$this->operator] !== $noEqualOp - && \version_compare($provider->version, $this->version, '==')); - } - - return false; - } - - /** - * @return string - */ - public function __toString() - { - return self::$transOpInt[$this->operator] . ' ' . $this->version; - } - - /** - * {@inheritDoc} - */ - public function getLowerBound() - { - $this->extractBounds(); - - return $this->lowerBound; - } - - /** - * {@inheritDoc} - */ - public function getUpperBound() - { - $this->extractBounds(); - - return $this->upperBound; - } - - /** - * @return void - */ - private function extractBounds() - { - if (null !== $this->lowerBound) { - return; - } - - // Branches - if (strpos($this->version, 'dev-') === 0) { - $this->lowerBound = Bound::zero(); - $this->upperBound = Bound::positiveInfinity(); - - return; - } - - switch ($this->operator) { - case self::OP_EQ: - $this->lowerBound = new Bound($this->version, true); - $this->upperBound = new Bound($this->version, true); - break; - case self::OP_LT: - $this->lowerBound = Bound::zero(); - $this->upperBound = new Bound($this->version, false); - break; - case self::OP_LE: - $this->lowerBound = Bound::zero(); - $this->upperBound = new Bound($this->version, true); - break; - case self::OP_GT: - $this->lowerBound = new Bound($this->version, false); - $this->upperBound = Bound::positiveInfinity(); - break; - case self::OP_GE: - $this->lowerBound = new Bound($this->version, true); - $this->upperBound = Bound::positiveInfinity(); - break; - case self::OP_NE: - $this->lowerBound = Bound::zero(); - $this->upperBound = Bound::positiveInfinity(); - break; - } - } -} diff --git a/vendor/composer/semver/src/Constraint/ConstraintInterface.php b/vendor/composer/semver/src/Constraint/ConstraintInterface.php deleted file mode 100644 index 389b935..0000000 --- a/vendor/composer/semver/src/Constraint/ConstraintInterface.php +++ /dev/null @@ -1,75 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * DO NOT IMPLEMENT this interface. It is only meant for usage as a type hint - * in libraries relying on composer/semver but creating your own constraint class - * that implements this interface is not a supported use case and will cause the - * composer/semver components to return unexpected results. - */ -interface ConstraintInterface -{ - /** - * Checks whether the given constraint intersects in any way with this constraint - * - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider); - - /** - * Provides a compiled version of the constraint for the given operator - * The compiled version must be a PHP expression. - * Executor of compile version must provide 2 variables: - * - $v = the string version to compare with - * - $b = whether or not the version is a non-comparable branch (starts with "dev-") - * - * @see Constraint::OP_* for the list of available operators. - * @example return '!$b && version_compare($v, '1.0', '>')'; - * - * @param int $otherOperator one Constraint::OP_* - * - * @return string - * - * @phpstan-param Constraint::OP_* $otherOperator - */ - public function compile($otherOperator); - - /** - * @return Bound - */ - public function getUpperBound(); - - /** - * @return Bound - */ - public function getLowerBound(); - - /** - * @return string - */ - public function getPrettyString(); - - /** - * @param string|null $prettyString - * - * @return void - */ - public function setPrettyString($prettyString); - - /** - * @return string - */ - public function __toString(); -} diff --git a/vendor/composer/semver/src/Constraint/MatchAllConstraint.php b/vendor/composer/semver/src/Constraint/MatchAllConstraint.php deleted file mode 100644 index 5e51af9..0000000 --- a/vendor/composer/semver/src/Constraint/MatchAllConstraint.php +++ /dev/null @@ -1,85 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * Defines the absence of a constraint. - * - * This constraint matches everything. - */ -class MatchAllConstraint implements ConstraintInterface -{ - /** @var string|null */ - protected $prettyString; - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - return true; - } - - /** - * {@inheritDoc} - */ - public function compile($otherOperator) - { - return 'true'; - } - - /** - * {@inheritDoc} - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * {@inheritDoc} - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return (string) $this; - } - - /** - * {@inheritDoc} - */ - public function __toString() - { - return '*'; - } - - /** - * {@inheritDoc} - */ - public function getUpperBound() - { - return Bound::positiveInfinity(); - } - - /** - * {@inheritDoc} - */ - public function getLowerBound() - { - return Bound::zero(); - } -} diff --git a/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php b/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php deleted file mode 100644 index dadcf62..0000000 --- a/vendor/composer/semver/src/Constraint/MatchNoneConstraint.php +++ /dev/null @@ -1,83 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * Blackhole of constraints, nothing escapes it - */ -class MatchNoneConstraint implements ConstraintInterface -{ - /** @var string|null */ - protected $prettyString; - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - return false; - } - - /** - * {@inheritDoc} - */ - public function compile($otherOperator) - { - return 'false'; - } - - /** - * {@inheritDoc} - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * {@inheritDoc} - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return (string) $this; - } - - /** - * {@inheritDoc} - */ - public function __toString() - { - return '[]'; - } - - /** - * {@inheritDoc} - */ - public function getUpperBound() - { - return new Bound('0.0.0.0-dev', false); - } - - /** - * {@inheritDoc} - */ - public function getLowerBound() - { - return new Bound('0.0.0.0-dev', false); - } -} diff --git a/vendor/composer/semver/src/Constraint/MultiConstraint.php b/vendor/composer/semver/src/Constraint/MultiConstraint.php deleted file mode 100644 index 1f4c006..0000000 --- a/vendor/composer/semver/src/Constraint/MultiConstraint.php +++ /dev/null @@ -1,325 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver\Constraint; - -/** - * Defines a conjunctive or disjunctive set of constraints. - */ -class MultiConstraint implements ConstraintInterface -{ - /** - * @var ConstraintInterface[] - * @phpstan-var non-empty-array - */ - protected $constraints; - - /** @var string|null */ - protected $prettyString; - - /** @var string|null */ - protected $string; - - /** @var bool */ - protected $conjunctive; - - /** @var Bound|null */ - protected $lowerBound; - - /** @var Bound|null */ - protected $upperBound; - - /** - * @param ConstraintInterface[] $constraints A set of constraints - * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive - * - * @throws \InvalidArgumentException If less than 2 constraints are passed - */ - public function __construct(array $constraints, $conjunctive = true) - { - if (\count($constraints) < 2) { - throw new \InvalidArgumentException( - 'Must provide at least two constraints for a MultiConstraint. Use '. - 'the regular Constraint class for one constraint only or MatchAllConstraint for none. You may use '. - 'MultiConstraint::create() which optimizes and handles those cases automatically.' - ); - } - - $this->constraints = $constraints; - $this->conjunctive = $conjunctive; - } - - /** - * @return ConstraintInterface[] - */ - public function getConstraints() - { - return $this->constraints; - } - - /** - * @return bool - */ - public function isConjunctive() - { - return $this->conjunctive; - } - - /** - * @return bool - */ - public function isDisjunctive() - { - return !$this->conjunctive; - } - - /** - * {@inheritDoc} - */ - public function compile($otherOperator) - { - $parts = array(); - foreach ($this->constraints as $constraint) { - $code = $constraint->compile($otherOperator); - if ($code === 'true') { - if (!$this->conjunctive) { - return 'true'; - } - } elseif ($code === 'false') { - if ($this->conjunctive) { - return 'false'; - } - } else { - $parts[] = '('.$code.')'; - } - } - - if (!$parts) { - return $this->conjunctive ? 'true' : 'false'; - } - - return $this->conjunctive ? implode('&&', $parts) : implode('||', $parts); - } - - /** - * @param ConstraintInterface $provider - * - * @return bool - */ - public function matches(ConstraintInterface $provider) - { - if (false === $this->conjunctive) { - foreach ($this->constraints as $constraint) { - if ($provider->matches($constraint)) { - return true; - } - } - - return false; - } - - // when matching a conjunctive and a disjunctive multi constraint we have to iterate over the disjunctive one - // otherwise we'd return true if different parts of the disjunctive constraint match the conjunctive one - // which would lead to incorrect results, e.g. [>1 and <2] would match [<1 or >2] although they do not intersect - if ($provider instanceof MultiConstraint && $provider->isDisjunctive()) { - return $provider->matches($this); - } - - foreach ($this->constraints as $constraint) { - if (!$provider->matches($constraint)) { - return false; - } - } - - return true; - } - - /** - * {@inheritDoc} - */ - public function setPrettyString($prettyString) - { - $this->prettyString = $prettyString; - } - - /** - * {@inheritDoc} - */ - public function getPrettyString() - { - if ($this->prettyString) { - return $this->prettyString; - } - - return (string) $this; - } - - /** - * {@inheritDoc} - */ - public function __toString() - { - if ($this->string !== null) { - return $this->string; - } - - $constraints = array(); - foreach ($this->constraints as $constraint) { - $constraints[] = (string) $constraint; - } - - return $this->string = '[' . implode($this->conjunctive ? ' ' : ' || ', $constraints) . ']'; - } - - /** - * {@inheritDoc} - */ - public function getLowerBound() - { - $this->extractBounds(); - - if (null === $this->lowerBound) { - throw new \LogicException('extractBounds should have populated the lowerBound property'); - } - - return $this->lowerBound; - } - - /** - * {@inheritDoc} - */ - public function getUpperBound() - { - $this->extractBounds(); - - if (null === $this->upperBound) { - throw new \LogicException('extractBounds should have populated the upperBound property'); - } - - return $this->upperBound; - } - - /** - * Tries to optimize the constraints as much as possible, meaning - * reducing/collapsing congruent constraints etc. - * Does not necessarily return a MultiConstraint instance if - * things can be reduced to a simple constraint - * - * @param ConstraintInterface[] $constraints A set of constraints - * @param bool $conjunctive Whether the constraints should be treated as conjunctive or disjunctive - * - * @return ConstraintInterface - */ - public static function create(array $constraints, $conjunctive = true) - { - if (0 === \count($constraints)) { - return new MatchAllConstraint(); - } - - if (1 === \count($constraints)) { - return $constraints[0]; - } - - $optimized = self::optimizeConstraints($constraints, $conjunctive); - if ($optimized !== null) { - list($constraints, $conjunctive) = $optimized; - if (\count($constraints) === 1) { - return $constraints[0]; - } - } - - return new self($constraints, $conjunctive); - } - - /** - * @param ConstraintInterface[] $constraints - * @param bool $conjunctive - * @return ?array - * - * @phpstan-return array{0: list, 1: bool}|null - */ - private static function optimizeConstraints(array $constraints, $conjunctive) - { - // parse the two OR groups and if they are contiguous we collapse - // them into one constraint - // [>= 1 < 2] || [>= 2 < 3] || [>= 3 < 4] => [>= 1 < 4] - if (!$conjunctive) { - $left = $constraints[0]; - $mergedConstraints = array(); - $optimized = false; - for ($i = 1, $l = \count($constraints); $i < $l; $i++) { - $right = $constraints[$i]; - if ( - $left instanceof self - && $left->conjunctive - && $right instanceof self - && $right->conjunctive - && \count($left->constraints) === 2 - && \count($right->constraints) === 2 - && ($left0 = (string) $left->constraints[0]) - && $left0[0] === '>' && $left0[1] === '=' - && ($left1 = (string) $left->constraints[1]) - && $left1[0] === '<' - && ($right0 = (string) $right->constraints[0]) - && $right0[0] === '>' && $right0[1] === '=' - && ($right1 = (string) $right->constraints[1]) - && $right1[0] === '<' - && substr($left1, 2) === substr($right0, 3) - ) { - $optimized = true; - $left = new MultiConstraint( - array( - $left->constraints[0], - $right->constraints[1], - ), - true); - } else { - $mergedConstraints[] = $left; - $left = $right; - } - } - if ($optimized) { - $mergedConstraints[] = $left; - return array($mergedConstraints, false); - } - } - - // TODO: Here's the place to put more optimizations - - return null; - } - - /** - * @return void - */ - private function extractBounds() - { - if (null !== $this->lowerBound) { - return; - } - - foreach ($this->constraints as $constraint) { - if (null === $this->lowerBound || null === $this->upperBound) { - $this->lowerBound = $constraint->getLowerBound(); - $this->upperBound = $constraint->getUpperBound(); - continue; - } - - if ($constraint->getLowerBound()->compareTo($this->lowerBound, $this->isConjunctive() ? '>' : '<')) { - $this->lowerBound = $constraint->getLowerBound(); - } - - if ($constraint->getUpperBound()->compareTo($this->upperBound, $this->isConjunctive() ? '<' : '>')) { - $this->upperBound = $constraint->getUpperBound(); - } - } - } -} diff --git a/vendor/composer/semver/src/Interval.php b/vendor/composer/semver/src/Interval.php deleted file mode 100644 index 43d5a4f..0000000 --- a/vendor/composer/semver/src/Interval.php +++ /dev/null @@ -1,98 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; - -class Interval -{ - /** @var Constraint */ - private $start; - /** @var Constraint */ - private $end; - - public function __construct(Constraint $start, Constraint $end) - { - $this->start = $start; - $this->end = $end; - } - - /** - * @return Constraint - */ - public function getStart() - { - return $this->start; - } - - /** - * @return Constraint - */ - public function getEnd() - { - return $this->end; - } - - /** - * @return Constraint - */ - public static function fromZero() - { - static $zero; - - if (null === $zero) { - $zero = new Constraint('>=', '0.0.0.0-dev'); - } - - return $zero; - } - - /** - * @return Constraint - */ - public static function untilPositiveInfinity() - { - static $positiveInfinity; - - if (null === $positiveInfinity) { - $positiveInfinity = new Constraint('<', PHP_INT_MAX.'.0.0.0'); - } - - return $positiveInfinity; - } - - /** - * @return self - */ - public static function any() - { - return new self(self::fromZero(), self::untilPositiveInfinity()); - } - - /** - * @return array{'names': string[], 'exclude': bool} - */ - public static function anyDev() - { - // any == exclude nothing - return array('names' => array(), 'exclude' => true); - } - - /** - * @return array{'names': string[], 'exclude': bool} - */ - public static function noDev() - { - // nothing == no names included - return array('names' => array(), 'exclude' => false); - } -} diff --git a/vendor/composer/semver/src/Intervals.php b/vendor/composer/semver/src/Intervals.php deleted file mode 100644 index d889d0a..0000000 --- a/vendor/composer/semver/src/Intervals.php +++ /dev/null @@ -1,478 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; -use Composer\Semver\Constraint\ConstraintInterface; -use Composer\Semver\Constraint\MatchAllConstraint; -use Composer\Semver\Constraint\MatchNoneConstraint; -use Composer\Semver\Constraint\MultiConstraint; - -/** - * Helper class generating intervals from constraints - * - * This contains utilities for: - * - * - compacting an existing constraint which can be used to combine several into one - * by creating a MultiConstraint out of the many constraints you have. - * - * - checking whether one subset is a subset of another. - * - * Note: You should call clear to free memoization memory usage when you are done using this class - */ -class Intervals -{ - /** - * @phpstan-var array - */ - private static $intervalsCache = array(); - - /** - * @phpstan-var array - */ - private static $opSortOrder = array( - '>=' => -3, - '<' => -2, - '>' => 2, - '<=' => 3, - ); - - /** - * Clears the memoization cache once you are done - * - * @return void - */ - public static function clear() - { - self::$intervalsCache = array(); - } - - /** - * Checks whether $candidate is a subset of $constraint - * - * @return bool - */ - public static function isSubsetOf(ConstraintInterface $candidate, ConstraintInterface $constraint) - { - if ($constraint instanceof MatchAllConstraint) { - return true; - } - - if ($candidate instanceof MatchNoneConstraint || $constraint instanceof MatchNoneConstraint) { - return false; - } - - $intersectionIntervals = self::get(new MultiConstraint(array($candidate, $constraint), true)); - $candidateIntervals = self::get($candidate); - if (\count($intersectionIntervals['numeric']) !== \count($candidateIntervals['numeric'])) { - return false; - } - - foreach ($intersectionIntervals['numeric'] as $index => $interval) { - if (!isset($candidateIntervals['numeric'][$index])) { - return false; - } - - if ((string) $candidateIntervals['numeric'][$index]->getStart() !== (string) $interval->getStart()) { - return false; - } - - if ((string) $candidateIntervals['numeric'][$index]->getEnd() !== (string) $interval->getEnd()) { - return false; - } - } - - if ($intersectionIntervals['branches']['exclude'] !== $candidateIntervals['branches']['exclude']) { - return false; - } - if (\count($intersectionIntervals['branches']['names']) !== \count($candidateIntervals['branches']['names'])) { - return false; - } - foreach ($intersectionIntervals['branches']['names'] as $index => $name) { - if ($name !== $candidateIntervals['branches']['names'][$index]) { - return false; - } - } - - return true; - } - - /** - * Checks whether $a and $b have any intersection, equivalent to $a->matches($b) - * - * @return bool - */ - public static function haveIntersections(ConstraintInterface $a, ConstraintInterface $b) - { - if ($a instanceof MatchAllConstraint || $b instanceof MatchAllConstraint) { - return true; - } - - if ($a instanceof MatchNoneConstraint || $b instanceof MatchNoneConstraint) { - return false; - } - - $intersectionIntervals = self::generateIntervals(new MultiConstraint(array($a, $b), true), true); - - return \count($intersectionIntervals['numeric']) > 0 || $intersectionIntervals['branches']['exclude'] || \count($intersectionIntervals['branches']['names']) > 0; - } - - /** - * Attempts to optimize a MultiConstraint - * - * When merging MultiConstraints together they can get very large, this will - * compact it by looking at the real intervals covered by all the constraints - * and then creates a new constraint containing only the smallest amount of rules - * to match the same intervals. - * - * @return ConstraintInterface - */ - public static function compactConstraint(ConstraintInterface $constraint) - { - if (!$constraint instanceof MultiConstraint) { - return $constraint; - } - - $intervals = self::generateIntervals($constraint); - $constraints = array(); - $hasNumericMatchAll = false; - - if (\count($intervals['numeric']) === 1 && (string) $intervals['numeric'][0]->getStart() === (string) Interval::fromZero() && (string) $intervals['numeric'][0]->getEnd() === (string) Interval::untilPositiveInfinity()) { - $constraints[] = $intervals['numeric'][0]->getStart(); - $hasNumericMatchAll = true; - } else { - $unEqualConstraints = array(); - for ($i = 0, $count = \count($intervals['numeric']); $i < $count; $i++) { - $interval = $intervals['numeric'][$i]; - - // if current interval ends with < N and next interval begins with > N we can swap this out for != N - // but this needs to happen as a conjunctive expression together with the start of the current interval - // and end of next interval, so [>=M, N, [>=M, !=N, getEnd()->getOperator() === '<' && $i+1 < $count) { - $nextInterval = $intervals['numeric'][$i+1]; - if ($interval->getEnd()->getVersion() === $nextInterval->getStart()->getVersion() && $nextInterval->getStart()->getOperator() === '>') { - // only add a start if we didn't already do so, can be skipped if we're looking at second - // interval in [>=M, N, P, =M, !=N] already and we only want to add !=P right now - if (\count($unEqualConstraints) === 0 && (string) $interval->getStart() !== (string) Interval::fromZero()) { - $unEqualConstraints[] = $interval->getStart(); - } - $unEqualConstraints[] = new Constraint('!=', $interval->getEnd()->getVersion()); - continue; - } - } - - if (\count($unEqualConstraints) > 0) { - // this is where the end of the following interval of a != constraint is added as explained above - if ((string) $interval->getEnd() !== (string) Interval::untilPositiveInfinity()) { - $unEqualConstraints[] = $interval->getEnd(); - } - - // count is 1 if entire constraint is just one != expression - if (\count($unEqualConstraints) > 1) { - $constraints[] = new MultiConstraint($unEqualConstraints, true); - } else { - $constraints[] = $unEqualConstraints[0]; - } - - $unEqualConstraints = array(); - continue; - } - - // convert back >= x - <= x intervals to == x - if ($interval->getStart()->getVersion() === $interval->getEnd()->getVersion() && $interval->getStart()->getOperator() === '>=' && $interval->getEnd()->getOperator() === '<=') { - $constraints[] = new Constraint('==', $interval->getStart()->getVersion()); - continue; - } - - if ((string) $interval->getStart() === (string) Interval::fromZero()) { - $constraints[] = $interval->getEnd(); - } elseif ((string) $interval->getEnd() === (string) Interval::untilPositiveInfinity()) { - $constraints[] = $interval->getStart(); - } else { - $constraints[] = new MultiConstraint(array($interval->getStart(), $interval->getEnd()), true); - } - } - } - - $devConstraints = array(); - - if (0 === \count($intervals['branches']['names'])) { - if ($intervals['branches']['exclude']) { - if ($hasNumericMatchAll) { - return new MatchAllConstraint; - } - // otherwise constraint should contain a != operator and already cover this - } - } else { - foreach ($intervals['branches']['names'] as $branchName) { - if ($intervals['branches']['exclude']) { - $devConstraints[] = new Constraint('!=', $branchName); - } else { - $devConstraints[] = new Constraint('==', $branchName); - } - } - - // excluded branches, e.g. != dev-foo are conjunctive with the interval, so - // > 2.0 != dev-foo must return a conjunctive constraint - if ($intervals['branches']['exclude']) { - if (\count($constraints) > 1) { - return new MultiConstraint(array_merge( - array(new MultiConstraint($constraints, false)), - $devConstraints - ), true); - } - - if (\count($constraints) === 1 && (string)$constraints[0] === (string)Interval::fromZero()) { - if (\count($devConstraints) > 1) { - return new MultiConstraint($devConstraints, true); - } - return $devConstraints[0]; - } - - return new MultiConstraint(array_merge($constraints, $devConstraints), true); - } - - // otherwise devConstraints contains a list of == operators for branches which are disjunctive with the - // rest of the constraint - $constraints = array_merge($constraints, $devConstraints); - } - - if (\count($constraints) > 1) { - return new MultiConstraint($constraints, false); - } - - if (\count($constraints) === 1) { - return $constraints[0]; - } - - return new MatchNoneConstraint; - } - - /** - * Creates an array of numeric intervals and branch constraints representing a given constraint - * - * if the returned numeric array is empty it means the constraint matches nothing in the numeric range (0 - +inf) - * if the returned branches array is empty it means no dev-* versions are matched - * if a constraint matches all possible dev-* versions, branches will contain Interval::anyDev() - * - * @return array - * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}} - */ - public static function get(ConstraintInterface $constraint) - { - $key = (string) $constraint; - - if (!isset(self::$intervalsCache[$key])) { - self::$intervalsCache[$key] = self::generateIntervals($constraint); - } - - return self::$intervalsCache[$key]; - } - - /** - * @param bool $stopOnFirstValidInterval - * - * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}} - */ - private static function generateIntervals(ConstraintInterface $constraint, $stopOnFirstValidInterval = false) - { - if ($constraint instanceof MatchAllConstraint) { - return array('numeric' => array(new Interval(Interval::fromZero(), Interval::untilPositiveInfinity())), 'branches' => Interval::anyDev()); - } - - if ($constraint instanceof MatchNoneConstraint) { - return array('numeric' => array(), 'branches' => array('names' => array(), 'exclude' => false)); - } - - if ($constraint instanceof Constraint) { - return self::generateSingleConstraintIntervals($constraint); - } - - if (!$constraint instanceof MultiConstraint) { - throw new \UnexpectedValueException('The constraint passed in should be an MatchAllConstraint, Constraint or MultiConstraint instance, got '.\get_class($constraint).'.'); - } - - $constraints = $constraint->getConstraints(); - - $numericGroups = array(); - $constraintBranches = array(); - foreach ($constraints as $c) { - $res = self::get($c); - $numericGroups[] = $res['numeric']; - $constraintBranches[] = $res['branches']; - } - - if ($constraint->isDisjunctive()) { - $branches = Interval::noDev(); - foreach ($constraintBranches as $b) { - if ($b['exclude']) { - if ($branches['exclude']) { - // disjunctive constraint, so only exclude what's excluded in all constraints - // !=a,!=b || !=b,!=c => !=b - $branches['names'] = array_intersect($branches['names'], $b['names']); - } else { - // disjunctive constraint so exclude all names which are not explicitly included in the alternative - // (==b || ==c) || !=a,!=b => !=a - $branches['exclude'] = true; - $branches['names'] = array_diff($b['names'], $branches['names']); - } - } else { - if ($branches['exclude']) { - // disjunctive constraint so exclude all names which are not explicitly included in the alternative - // !=a,!=b || (==b || ==c) => !=a - $branches['names'] = array_diff($branches['names'], $b['names']); - } else { - // disjunctive constraint, so just add all the other branches - // (==a || ==b) || ==c => ==a || ==b || ==c - $branches['names'] = array_merge($branches['names'], $b['names']); - } - } - } - } else { - $branches = Interval::anyDev(); - foreach ($constraintBranches as $b) { - if ($b['exclude']) { - if ($branches['exclude']) { - // conjunctive, so just add all branch names to be excluded - // !=a && !=b => !=a,!=b - $branches['names'] = array_merge($branches['names'], $b['names']); - } else { - // conjunctive, so only keep included names which are not excluded - // (==a||==c) && !=a,!=b => ==c - $branches['names'] = array_diff($branches['names'], $b['names']); - } - } else { - if ($branches['exclude']) { - // conjunctive, so only keep included names which are not excluded - // !=a,!=b && (==a||==c) => ==c - $branches['names'] = array_diff($b['names'], $branches['names']); - $branches['exclude'] = false; - } else { - // conjunctive, so only keep names that are included in both - // (==a||==b) && (==a||==c) => ==a - $branches['names'] = array_intersect($branches['names'], $b['names']); - } - } - } - } - - $branches['names'] = array_unique($branches['names']); - - if (\count($numericGroups) === 1) { - return array('numeric' => $numericGroups[0], 'branches' => $branches); - } - - $borders = array(); - foreach ($numericGroups as $group) { - foreach ($group as $interval) { - $borders[] = array('version' => $interval->getStart()->getVersion(), 'operator' => $interval->getStart()->getOperator(), 'side' => 'start'); - $borders[] = array('version' => $interval->getEnd()->getVersion(), 'operator' => $interval->getEnd()->getOperator(), 'side' => 'end'); - } - } - - $opSortOrder = self::$opSortOrder; - usort($borders, function ($a, $b) use ($opSortOrder) { - $order = version_compare($a['version'], $b['version']); - if ($order === 0) { - return $opSortOrder[$a['operator']] - $opSortOrder[$b['operator']]; - } - - return $order; - }); - - $activeIntervals = 0; - $intervals = array(); - $index = 0; - $activationThreshold = $constraint->isConjunctive() ? \count($numericGroups) : 1; - $start = null; - foreach ($borders as $border) { - if ($border['side'] === 'start') { - $activeIntervals++; - } else { - $activeIntervals--; - } - if (!$start && $activeIntervals >= $activationThreshold) { - $start = new Constraint($border['operator'], $border['version']); - } elseif ($start && $activeIntervals < $activationThreshold) { - // filter out invalid intervals like > x - <= x, or >= x - < x - if ( - version_compare($start->getVersion(), $border['version'], '=') - && ( - ($start->getOperator() === '>' && $border['operator'] === '<=') - || ($start->getOperator() === '>=' && $border['operator'] === '<') - ) - ) { - unset($intervals[$index]); - } else { - $intervals[$index] = new Interval($start, new Constraint($border['operator'], $border['version'])); - $index++; - - if ($stopOnFirstValidInterval) { - break; - } - } - - $start = null; - } - } - - return array('numeric' => $intervals, 'branches' => $branches); - } - - /** - * @phpstan-return array{'numeric': Interval[], 'branches': array{'names': string[], 'exclude': bool}} - */ - private static function generateSingleConstraintIntervals(Constraint $constraint) - { - $op = $constraint->getOperator(); - - // handle branch constraints first - if (strpos($constraint->getVersion(), 'dev-') === 0) { - $intervals = array(); - $branches = array('names' => array(), 'exclude' => false); - - // != dev-foo means any numeric version may match, we treat >/< like != they are not really defined for branches - if ($op === '!=') { - $intervals[] = new Interval(Interval::fromZero(), Interval::untilPositiveInfinity()); - $branches = array('names' => array($constraint->getVersion()), 'exclude' => true); - } elseif ($op === '==') { - $branches['names'][] = $constraint->getVersion(); - } - - return array( - 'numeric' => $intervals, - 'branches' => $branches, - ); - } - - if ($op[0] === '>') { // > & >= - return array('numeric' => array(new Interval($constraint, Interval::untilPositiveInfinity())), 'branches' => Interval::noDev()); - } - if ($op[0] === '<') { // < & <= - return array('numeric' => array(new Interval(Interval::fromZero(), $constraint)), 'branches' => Interval::noDev()); - } - if ($op === '!=') { - // convert !=x to intervals of 0 - x - +inf + dev* - return array('numeric' => array( - new Interval(Interval::fromZero(), new Constraint('<', $constraint->getVersion())), - new Interval(new Constraint('>', $constraint->getVersion()), Interval::untilPositiveInfinity()), - ), 'branches' => Interval::anyDev()); - } - - // convert ==x to an interval of >=x - <=x - return array('numeric' => array( - new Interval(new Constraint('>=', $constraint->getVersion()), new Constraint('<=', $constraint->getVersion())), - ), 'branches' => Interval::noDev()); - } -} diff --git a/vendor/composer/semver/src/Semver.php b/vendor/composer/semver/src/Semver.php deleted file mode 100644 index 4d6de3c..0000000 --- a/vendor/composer/semver/src/Semver.php +++ /dev/null @@ -1,129 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\Constraint; - -class Semver -{ - const SORT_ASC = 1; - const SORT_DESC = -1; - - /** @var VersionParser */ - private static $versionParser; - - /** - * Determine if given version satisfies given constraints. - * - * @param string $version - * @param string $constraints - * - * @return bool - */ - public static function satisfies($version, $constraints) - { - if (null === self::$versionParser) { - self::$versionParser = new VersionParser(); - } - - $versionParser = self::$versionParser; - $provider = new Constraint('==', $versionParser->normalize($version)); - $parsedConstraints = $versionParser->parseConstraints($constraints); - - return $parsedConstraints->matches($provider); - } - - /** - * Return all versions that satisfy given constraints. - * - * @param string[] $versions - * @param string $constraints - * - * @return string[] - */ - public static function satisfiedBy(array $versions, $constraints) - { - $versions = array_filter($versions, function ($version) use ($constraints) { - return Semver::satisfies($version, $constraints); - }); - - return array_values($versions); - } - - /** - * Sort given array of versions. - * - * @param string[] $versions - * - * @return string[] - */ - public static function sort(array $versions) - { - return self::usort($versions, self::SORT_ASC); - } - - /** - * Sort given array of versions in reverse. - * - * @param string[] $versions - * - * @return string[] - */ - public static function rsort(array $versions) - { - return self::usort($versions, self::SORT_DESC); - } - - /** - * @param string[] $versions - * @param int $direction - * - * @return string[] - */ - private static function usort(array $versions, $direction) - { - if (null === self::$versionParser) { - self::$versionParser = new VersionParser(); - } - - $versionParser = self::$versionParser; - $normalized = array(); - - // Normalize outside of usort() scope for minor performance increase. - // Creates an array of arrays: [[normalized, key], ...] - foreach ($versions as $key => $version) { - $normalizedVersion = $versionParser->normalize($version); - $normalizedVersion = $versionParser->normalizeDefaultBranch($normalizedVersion); - $normalized[] = array($normalizedVersion, $key); - } - - usort($normalized, function (array $left, array $right) use ($direction) { - if ($left[0] === $right[0]) { - return 0; - } - - if (Comparator::lessThan($left[0], $right[0])) { - return -$direction; - } - - return $direction; - }); - - // Recreate input array, using the original indexes which are now in sorted order. - $sorted = array(); - foreach ($normalized as $item) { - $sorted[] = $versions[$item[1]]; - } - - return $sorted; - } -} diff --git a/vendor/composer/semver/src/VersionParser.php b/vendor/composer/semver/src/VersionParser.php deleted file mode 100644 index 305a0fa..0000000 --- a/vendor/composer/semver/src/VersionParser.php +++ /dev/null @@ -1,591 +0,0 @@ - - * - * For the full copyright and license information, please view - * the LICENSE file that was distributed with this source code. - */ - -namespace Composer\Semver; - -use Composer\Semver\Constraint\ConstraintInterface; -use Composer\Semver\Constraint\MatchAllConstraint; -use Composer\Semver\Constraint\MultiConstraint; -use Composer\Semver\Constraint\Constraint; - -/** - * Version parser. - * - * @author Jordi Boggiano - */ -class VersionParser -{ - /** - * Regex to match pre-release data (sort of). - * - * Due to backwards compatibility: - * - Instead of enforcing hyphen, an underscore, dot or nothing at all are also accepted. - * - Only stabilities as recognized by Composer are allowed to precede a numerical identifier. - * - Numerical-only pre-release identifiers are not supported, see tests. - * - * |--------------| - * [major].[minor].[patch] -[pre-release] +[build-metadata] - * - * @var string - */ - private static $modifierRegex = '[._-]?(?:(stable|beta|b|RC|alpha|a|patch|pl|p)((?:[.-]?\d+)*+)?)?([.-]?dev)?'; - - /** @var string */ - private static $stabilitiesRegex = 'stable|RC|beta|alpha|dev'; - - /** - * Returns the stability of a version. - * - * @param string $version - * - * @return string - * @phpstan-return 'stable'|'RC'|'beta'|'alpha'|'dev' - */ - public static function parseStability($version) - { - $version = (string) preg_replace('{#.+$}', '', (string) $version); - - if (strpos($version, 'dev-') === 0 || '-dev' === substr($version, -4)) { - return 'dev'; - } - - preg_match('{' . self::$modifierRegex . '(?:\+.*)?$}i', strtolower($version), $match); - - if (!empty($match[3])) { - return 'dev'; - } - - if (!empty($match[1])) { - if ('beta' === $match[1] || 'b' === $match[1]) { - return 'beta'; - } - if ('alpha' === $match[1] || 'a' === $match[1]) { - return 'alpha'; - } - if ('rc' === $match[1]) { - return 'RC'; - } - } - - return 'stable'; - } - - /** - * @param string $stability - * - * @return string - * @phpstan-return 'stable'|'RC'|'beta'|'alpha'|'dev' - */ - public static function normalizeStability($stability) - { - $stability = strtolower((string) $stability); - - if (!in_array($stability, array('stable', 'rc', 'beta', 'alpha', 'dev'), true)) { - throw new \InvalidArgumentException('Invalid stability string "'.$stability.'", expected one of stable, RC, beta, alpha or dev'); - } - - return $stability === 'rc' ? 'RC' : $stability; - } - - /** - * Normalizes a version string to be able to perform comparisons on it. - * - * @param string $version - * @param ?string $fullVersion optional complete version string to give more context - * - * @throws \UnexpectedValueException - * - * @return string - */ - public function normalize($version, $fullVersion = null) - { - $version = trim((string) $version); - $origVersion = $version; - if (null === $fullVersion) { - $fullVersion = $version; - } - - // strip off aliasing - if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $version, $match)) { - $version = $match[1]; - } - - // strip off stability flag - if (preg_match('{@(?:' . self::$stabilitiesRegex . ')$}i', $version, $match)) { - $version = substr($version, 0, strlen($version) - strlen($match[0])); - } - - // normalize master/trunk/default branches to dev-name for BC with 1.x as these used to be valid constraints - if (\in_array($version, array('master', 'trunk', 'default'), true)) { - $version = 'dev-' . $version; - } - - // if requirement is branch-like, use full name - if (stripos($version, 'dev-') === 0) { - return 'dev-' . substr($version, 4); - } - - // strip off build metadata - if (preg_match('{^([^,\s+]++)\+[^\s]++$}', $version, $match)) { - $version = $match[1]; - } - - // match classical versioning - if (preg_match('{^v?(\d{1,5}+)(\.\d++)?(\.\d++)?(\.\d++)?' . self::$modifierRegex . '$}i', $version, $matches)) { - $version = $matches[1] - . (!empty($matches[2]) ? $matches[2] : '.0') - . (!empty($matches[3]) ? $matches[3] : '.0') - . (!empty($matches[4]) ? $matches[4] : '.0'); - $index = 5; - // match date(time) based versioning - } elseif (preg_match('{^v?(\d{4}(?:[.:-]?\d{2}){1,6}(?:[.:-]?\d{1,3}){0,2})' . self::$modifierRegex . '$}i', $version, $matches)) { - $version = (string) preg_replace('{\D}', '.', $matches[1]); - $index = 2; - } - - // add version modifiers if a version was matched - if (isset($index)) { - if (!empty($matches[$index])) { - if ('stable' === $matches[$index]) { - return $version; - } - $version .= '-' . $this->expandStability($matches[$index]) . (isset($matches[$index + 1]) && '' !== $matches[$index + 1] ? ltrim($matches[$index + 1], '.-') : ''); - } - - if (!empty($matches[$index + 2])) { - $version .= '-dev'; - } - - return $version; - } - - // match dev branches - if (preg_match('{(.*?)[.-]?dev$}i', $version, $match)) { - try { - $normalized = $this->normalizeBranch($match[1]); - // a branch ending with -dev is only valid if it is numeric - // if it gets prefixed with dev- it means the branch name should - // have had a dev- prefix already when passed to normalize - if (strpos($normalized, 'dev-') === false) { - return $normalized; - } - } catch (\Exception $e) { - } - } - - $extraMessage = ''; - if (preg_match('{ +as +' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))?$}', $fullVersion)) { - $extraMessage = ' in "' . $fullVersion . '", the alias must be an exact version'; - } elseif (preg_match('{^' . preg_quote($version) . '(?:@(?:'.self::$stabilitiesRegex.'))? +as +}', $fullVersion)) { - $extraMessage = ' in "' . $fullVersion . '", the alias source must be an exact version, if it is a branch name you should prefix it with dev-'; - } - - throw new \UnexpectedValueException('Invalid version string "' . $origVersion . '"' . $extraMessage); - } - - /** - * Extract numeric prefix from alias, if it is in numeric format, suitable for version comparison. - * - * @param string $branch Branch name (e.g. 2.1.x-dev) - * - * @return string|false Numeric prefix if present (e.g. 2.1.) or false - */ - public function parseNumericAliasPrefix($branch) - { - if (preg_match('{^(?P(\d++\\.)*\d++)(?:\.x)?-dev$}i', (string) $branch, $matches)) { - return $matches['version'] . '.'; - } - - return false; - } - - /** - * Normalizes a branch name to be able to perform comparisons on it. - * - * @param string $name - * - * @return string - */ - public function normalizeBranch($name) - { - $name = trim((string) $name); - - if (preg_match('{^v?(\d++)(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?(\.(?:\d++|[xX*]))?$}i', $name, $matches)) { - $version = ''; - for ($i = 1; $i < 5; ++$i) { - $version .= isset($matches[$i]) ? str_replace(array('*', 'X'), 'x', $matches[$i]) : '.x'; - } - - return str_replace('x', '9999999', $version) . '-dev'; - } - - return 'dev-' . $name; - } - - /** - * Normalizes a default branch name (i.e. master on git) to 9999999-dev. - * - * @param string $name - * - * @return string - * - * @deprecated No need to use this anymore in theory, Composer 2 does not normalize any branch names to 9999999-dev anymore - */ - public function normalizeDefaultBranch($name) - { - if ($name === 'dev-master' || $name === 'dev-default' || $name === 'dev-trunk') { - return '9999999-dev'; - } - - return (string) $name; - } - - /** - * Parses a constraint string into MultiConstraint and/or Constraint objects. - * - * @param string $constraints - * - * @return ConstraintInterface - */ - public function parseConstraints($constraints) - { - $prettyConstraint = (string) $constraints; - - $orConstraints = preg_split('{\s*\|\|?\s*}', trim((string) $constraints)); - if (false === $orConstraints) { - throw new \RuntimeException('Failed to preg_split string: '.$constraints); - } - $orGroups = array(); - - foreach ($orConstraints as $orConstraint) { - $andConstraints = preg_split('{(?< ,]) *(? 1) { - $constraintObjects = array(); - foreach ($andConstraints as $andConstraint) { - foreach ($this->parseConstraint($andConstraint) as $parsedAndConstraint) { - $constraintObjects[] = $parsedAndConstraint; - } - } - } else { - $constraintObjects = $this->parseConstraint($andConstraints[0]); - } - - if (1 === \count($constraintObjects)) { - $constraint = $constraintObjects[0]; - } else { - $constraint = new MultiConstraint($constraintObjects); - } - - $orGroups[] = $constraint; - } - - $parsedConstraint = MultiConstraint::create($orGroups, false); - - $parsedConstraint->setPrettyString($prettyConstraint); - - return $parsedConstraint; - } - - /** - * @param string $constraint - * - * @throws \UnexpectedValueException - * - * @return array - * - * @phpstan-return non-empty-array - */ - private function parseConstraint($constraint) - { - // strip off aliasing - if (preg_match('{^([^,\s]++) ++as ++([^,\s]++)$}', $constraint, $match)) { - $constraint = $match[1]; - } - - // strip @stability flags, and keep it for later use - if (preg_match('{^([^,\s]*?)@(' . self::$stabilitiesRegex . ')$}i', $constraint, $match)) { - $constraint = '' !== $match[1] ? $match[1] : '*'; - if ($match[2] !== 'stable') { - $stabilityModifier = $match[2]; - } - } - - // get rid of #refs as those are used by composer only - if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#.+$}i', $constraint, $match)) { - $constraint = $match[1]; - } - - if (preg_match('{^(v)?[xX*](\.[xX*])*$}i', $constraint, $match)) { - if (!empty($match[1]) || !empty($match[2])) { - return array(new Constraint('>=', '0.0.0.0-dev')); - } - - return array(new MatchAllConstraint()); - } - - $versionRegex = 'v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.(\d++))?(?:' . self::$modifierRegex . '|\.([xX*][.-]?dev))(?:\+[^\s]+)?'; - - // Tilde Range - // - // Like wildcard constraints, unsuffixed tilde constraints say that they must be greater than the previous - // version, to ensure that unstable instances of the current version are allowed. However, if a stability - // suffix is added to the constraint, then a >= match on the current version is used instead. - if (preg_match('{^~>?' . $versionRegex . '$}i', $constraint, $matches)) { - if (strpos($constraint, '~>') === 0) { - throw new \UnexpectedValueException( - 'Could not parse version constraint ' . $constraint . ': ' . - 'Invalid operator "~>", you probably meant to use the "~" operator' - ); - } - - // Work out which position in the version we are operating at - if (isset($matches[4]) && '' !== $matches[4] && null !== $matches[4]) { - $position = 4; - } elseif (isset($matches[3]) && '' !== $matches[3] && null !== $matches[3]) { - $position = 3; - } elseif (isset($matches[2]) && '' !== $matches[2] && null !== $matches[2]) { - $position = 2; - } else { - $position = 1; - } - - // when matching 2.x-dev or 3.0.x-dev we have to shift the second or third number, despite no second/third number matching above - if (!empty($matches[8])) { - $position++; - } - - // Calculate the stability suffix - $stabilitySuffix = ''; - if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) { - $stabilitySuffix .= '-dev'; - } - - $lowVersion = $this->normalize(substr($constraint . $stabilitySuffix, 1)); - $lowerBound = new Constraint('>=', $lowVersion); - - // For upper bound, we increment the position of one more significance, - // but highPosition = 0 would be illegal - $highPosition = max(1, $position - 1); - $highVersion = $this->manipulateVersionString($matches, $highPosition, 1) . '-dev'; - $upperBound = new Constraint('<', $highVersion); - - return array( - $lowerBound, - $upperBound, - ); - } - - // Caret Range - // - // Allows changes that do not modify the left-most non-zero digit in the [major, minor, patch] tuple. - // In other words, this allows patch and minor updates for versions 1.0.0 and above, patch updates for - // versions 0.X >=0.1.0, and no updates for versions 0.0.X - if (preg_match('{^\^' . $versionRegex . '($)}i', $constraint, $matches)) { - // Work out which position in the version we are operating at - if ('0' !== $matches[1] || '' === $matches[2] || null === $matches[2]) { - $position = 1; - } elseif ('0' !== $matches[2] || '' === $matches[3] || null === $matches[3]) { - $position = 2; - } else { - $position = 3; - } - - // Calculate the stability suffix - $stabilitySuffix = ''; - if (empty($matches[5]) && empty($matches[7]) && empty($matches[8])) { - $stabilitySuffix .= '-dev'; - } - - $lowVersion = $this->normalize(substr($constraint . $stabilitySuffix, 1)); - $lowerBound = new Constraint('>=', $lowVersion); - - // For upper bound, we increment the position of one more significance, - // but highPosition = 0 would be illegal - $highVersion = $this->manipulateVersionString($matches, $position, 1) . '-dev'; - $upperBound = new Constraint('<', $highVersion); - - return array( - $lowerBound, - $upperBound, - ); - } - - // X Range - // - // Any of X, x, or * may be used to "stand in" for one of the numeric values in the [major, minor, patch] tuple. - // A partial version range is treated as an X-Range, so the special character is in fact optional. - if (preg_match('{^v?(\d++)(?:\.(\d++))?(?:\.(\d++))?(?:\.[xX*])++$}', $constraint, $matches)) { - if (isset($matches[3]) && '' !== $matches[3] && null !== $matches[3]) { - $position = 3; - } elseif (isset($matches[2]) && '' !== $matches[2] && null !== $matches[2]) { - $position = 2; - } else { - $position = 1; - } - - $lowVersion = $this->manipulateVersionString($matches, $position) . '-dev'; - $highVersion = $this->manipulateVersionString($matches, $position, 1) . '-dev'; - - if ($lowVersion === '0.0.0.0-dev') { - return array(new Constraint('<', $highVersion)); - } - - return array( - new Constraint('>=', $lowVersion), - new Constraint('<', $highVersion), - ); - } - - // Hyphen Range - // - // Specifies an inclusive set. If a partial version is provided as the first version in the inclusive range, - // then the missing pieces are replaced with zeroes. If a partial version is provided as the second version in - // the inclusive range, then all versions that start with the supplied parts of the tuple are accepted, but - // nothing that would be greater than the provided tuple parts. - if (preg_match('{^(?P' . $versionRegex . ') +- +(?P' . $versionRegex . ')($)}i', $constraint, $matches)) { - // Calculate the stability suffix - $lowStabilitySuffix = ''; - if (empty($matches[6]) && empty($matches[8]) && empty($matches[9])) { - $lowStabilitySuffix = '-dev'; - } - - $lowVersion = $this->normalize($matches['from']); - $lowerBound = new Constraint('>=', $lowVersion . $lowStabilitySuffix); - - $empty = function ($x) { - return ($x === 0 || $x === '0') ? false : empty($x); - }; - - if ((!$empty($matches[12]) && !$empty($matches[13])) || !empty($matches[15]) || !empty($matches[17]) || !empty($matches[18])) { - $highVersion = $this->normalize($matches['to']); - $upperBound = new Constraint('<=', $highVersion); - } else { - $highMatch = array('', $matches[11], $matches[12], $matches[13], $matches[14]); - - // validate to version - $this->normalize($matches['to']); - - $highVersion = $this->manipulateVersionString($highMatch, $empty($matches[12]) ? 1 : 2, 1) . '-dev'; - $upperBound = new Constraint('<', $highVersion); - } - - return array( - $lowerBound, - $upperBound, - ); - } - - // Basic Comparators - if (preg_match('{^(<>|!=|>=?|<=?|==?)?\s*(.*)}', $constraint, $matches)) { - try { - try { - $version = $this->normalize($matches[2]); - } catch (\UnexpectedValueException $e) { - // recover from an invalid constraint like foobar-dev which should be dev-foobar - // except if the constraint uses a known operator, in which case it must be a parse error - if (substr($matches[2], -4) === '-dev' && preg_match('{^[0-9a-zA-Z-./]+$}', $matches[2])) { - $version = $this->normalize('dev-'.substr($matches[2], 0, -4)); - } else { - throw $e; - } - } - - $op = $matches[1] ?: '='; - - if ($op !== '==' && $op !== '=' && !empty($stabilityModifier) && self::parseStability($version) === 'stable') { - $version .= '-' . $stabilityModifier; - } elseif ('<' === $op || '>=' === $op) { - if (!preg_match('/-' . self::$modifierRegex . '$/', strtolower($matches[2]))) { - if (strpos($matches[2], 'dev-') !== 0) { - $version .= '-dev'; - } - } - } - - return array(new Constraint($matches[1] ?: '=', $version)); - } catch (\Exception $e) { - } - } - - $message = 'Could not parse version constraint ' . $constraint; - if (isset($e)) { - $message .= ': ' . $e->getMessage(); - } - - throw new \UnexpectedValueException($message); - } - - /** - * Increment, decrement, or simply pad a version number. - * - * Support function for {@link parseConstraint()} - * - * @param array $matches Array with version parts in array indexes 1,2,3,4 - * @param int $position 1,2,3,4 - which segment of the version to increment/decrement - * @param int $increment - * @param string $pad The string to pad version parts after $position - * - * @return string|null The new version - * - * @phpstan-param string[] $matches - */ - private function manipulateVersionString(array $matches, $position, $increment = 0, $pad = '0') - { - for ($i = 4; $i > 0; --$i) { - if ($i > $position) { - $matches[$i] = $pad; - } elseif ($i === $position && $increment) { - $matches[$i] += $increment; - // If $matches[$i] was 0, carry the decrement - if ($matches[$i] < 0) { - $matches[$i] = $pad; - --$position; - - // Return null on a carry overflow - if ($i === 1) { - return null; - } - } - } - } - - return $matches[1] . '.' . $matches[2] . '.' . $matches[3] . '.' . $matches[4]; - } - - /** - * Expand shorthand stability string to long version. - * - * @param string $stability - * - * @return string - */ - private function expandStability($stability) - { - $stability = strtolower($stability); - - switch ($stability) { - case 'a': - return 'alpha'; - case 'b': - return 'beta'; - case 'p': - case 'pl': - return 'patch'; - case 'rc': - return 'RC'; - default: - return $stability; - } - } -} diff --git a/vendor/doctrine/cache/README.md b/vendor/doctrine/cache/README.md deleted file mode 100644 index a13196d..0000000 --- a/vendor/doctrine/cache/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Doctrine Cache - -[![Build Status](https://github.com/doctrine/cache/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/cache/actions) -[![Code Coverage](https://codecov.io/gh/doctrine/cache/branch/1.10.x/graph/badge.svg)](https://codecov.io/gh/doctrine/cache/branch/1.10.x) - -[![Latest Stable Version](https://img.shields.io/packagist/v/doctrine/cache.svg?style=flat-square)](https://packagist.org/packages/doctrine/cache) -[![Total Downloads](https://img.shields.io/packagist/dt/doctrine/cache.svg?style=flat-square)](https://packagist.org/packages/doctrine/cache) - -Cache component extracted from the Doctrine Common project. [Documentation](https://www.doctrine-project.org/projects/doctrine-cache/en/current/index.html) - -This library is deprecated and will no longer receive bug fixes from the -Doctrine Project. Please use a different cache library, preferably PSR-6 or -PSR-16 instead. diff --git a/vendor/doctrine/cache/UPGRADE-1.11.md b/vendor/doctrine/cache/UPGRADE-1.11.md deleted file mode 100644 index 6c5ddb5..0000000 --- a/vendor/doctrine/cache/UPGRADE-1.11.md +++ /dev/null @@ -1,27 +0,0 @@ -# Upgrade to 1.11 - -doctrine/cache will no longer be maintained and all cache implementations have -been marked as deprecated. These implementations will be removed in 2.0, which -will only contain interfaces to provide a lightweight package for backward -compatibility. - -There are two new classes to use in the `Doctrine\Common\Cache\Psr6` namespace: -* The `CacheAdapter` class allows using any Doctrine Cache as PSR-6 cache. This - is useful to provide a forward compatibility layer in libraries that accept - Doctrine cache implementations and switch to PSR-6. -* The `DoctrineProvider` class allows using any PSR-6 cache as Doctrine cache. - This implementation is designed for libraries that leak the cache and want to - switch to allowing PSR-6 implementations. This class is design to be used - during the transition phase of sunsetting doctrine/cache support. - -A full example to setup a filesystem based PSR-6 cache with symfony/cache -using the `DoctrineProvider` to convert back to Doctrine's `Cache` interface: - -```php -use Doctrine\Common\Cache\Psr6\DoctrineProvider; -use Symfony\Component\Cache\Adapter\FilesystemAdapter; - -$cachePool = new FilesystemAdapter(); -$cache = DoctrineProvider::wrap($cachePool); -// $cache instanceof \Doctrine\Common\Cache\Cache -``` diff --git a/vendor/doctrine/cache/UPGRADE-1.4.md b/vendor/doctrine/cache/UPGRADE-1.4.md deleted file mode 100644 index e1f8a50..0000000 --- a/vendor/doctrine/cache/UPGRADE-1.4.md +++ /dev/null @@ -1,16 +0,0 @@ -# Upgrade to 1.4 - -## Minor BC Break: `Doctrine\Common\Cache\FileCache#$extension` is now `private`. - -If you need to override the value of `Doctrine\Common\Cache\FileCache#$extension`, then use the -second parameter of `Doctrine\Common\Cache\FileCache#__construct()` instead of overriding -the property in your own implementation. - -## Minor BC Break: file based caches paths changed - -`Doctrine\Common\Cache\FileCache`, `Doctrine\Common\Cache\PhpFileCache` and -`Doctrine\Common\Cache\FilesystemCache` are using a different cache paths structure. - -If you rely on warmed up caches for deployments, consider that caches generated -with `doctrine/cache` `<1.4` are not compatible with the new directory structure, -and will be ignored. diff --git a/vendor/doctrine/cache/composer.json b/vendor/doctrine/cache/composer.json deleted file mode 100644 index 3c8ca97..0000000 --- a/vendor/doctrine/cache/composer.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "name": "doctrine/cache", - "type": "library", - "description": "PHP Doctrine Cache library is a popular cache implementation that supports many different drivers such as redis, memcache, apc, mongodb and others.", - "keywords": [ - "php", - "cache", - "caching", - "abstraction", - "redis", - "memcached", - "couchdb", - "xcache", - "apcu" - ], - "homepage": "https://www.doctrine-project.org/projects/cache.html", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"}, - {"name": "Jonathan Wage", "email": "jonwage@gmail.com"}, - {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"} - ], - "require": { - "php": "~7.1 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "doctrine/coding-standard": "^9", - "psr/cache": "^1.0 || ^2.0 || ^3.0", - "cache/integration-tests": "dev-master", - "symfony/cache": "^4.4 || ^5.4 || ^6", - "symfony/var-exporter": "^4.4 || ^5.4 || ^6" - }, - "conflict": { - "doctrine/common": ">2.2,<2.4" - }, - "autoload": { - "psr-4": { "Doctrine\\Common\\Cache\\": "lib/Doctrine/Common/Cache" } - }, - "autoload-dev": { - "psr-4": { "Doctrine\\Tests\\": "tests/Doctrine/Tests" } - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - } - } -} diff --git a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php deleted file mode 100644 index 4cfab6c..0000000 --- a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Cache.php +++ /dev/null @@ -1,90 +0,0 @@ -hits - * Number of keys that have been requested and found present. - * - * - misses - * Number of items that have been requested and not found. - * - * - uptime - * Time that the server is running. - * - * - memory_usage - * Memory used by this server to store items. - * - * - memory_available - * Memory allowed to use for storage. - * - * @return mixed[]|null An associative array with server's statistics if available, NULL otherwise. - */ - public function getStats(); -} diff --git a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php deleted file mode 100644 index 180482a..0000000 --- a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/CacheProvider.php +++ /dev/null @@ -1,325 +0,0 @@ -namespace = (string) $namespace; - $this->namespaceVersion = null; - } - - /** - * Retrieves the namespace that prefixes all cache ids. - * - * @return string - */ - public function getNamespace() - { - return $this->namespace; - } - - /** - * {@inheritdoc} - */ - public function fetch($id) - { - return $this->doFetch($this->getNamespacedId($id)); - } - - /** - * {@inheritdoc} - */ - public function fetchMultiple(array $keys) - { - if (empty($keys)) { - return []; - } - - // note: the array_combine() is in place to keep an association between our $keys and the $namespacedKeys - $namespacedKeys = array_combine($keys, array_map([$this, 'getNamespacedId'], $keys)); - $items = $this->doFetchMultiple($namespacedKeys); - $foundItems = []; - - // no internal array function supports this sort of mapping: needs to be iterative - // this filters and combines keys in one pass - foreach ($namespacedKeys as $requestedKey => $namespacedKey) { - if (! isset($items[$namespacedKey]) && ! array_key_exists($namespacedKey, $items)) { - continue; - } - - $foundItems[$requestedKey] = $items[$namespacedKey]; - } - - return $foundItems; - } - - /** - * {@inheritdoc} - */ - public function saveMultiple(array $keysAndValues, $lifetime = 0) - { - $namespacedKeysAndValues = []; - foreach ($keysAndValues as $key => $value) { - $namespacedKeysAndValues[$this->getNamespacedId($key)] = $value; - } - - return $this->doSaveMultiple($namespacedKeysAndValues, $lifetime); - } - - /** - * {@inheritdoc} - */ - public function contains($id) - { - return $this->doContains($this->getNamespacedId($id)); - } - - /** - * {@inheritdoc} - */ - public function save($id, $data, $lifeTime = 0) - { - return $this->doSave($this->getNamespacedId($id), $data, $lifeTime); - } - - /** - * {@inheritdoc} - */ - public function deleteMultiple(array $keys) - { - return $this->doDeleteMultiple(array_map([$this, 'getNamespacedId'], $keys)); - } - - /** - * {@inheritdoc} - */ - public function delete($id) - { - return $this->doDelete($this->getNamespacedId($id)); - } - - /** - * {@inheritdoc} - */ - public function getStats() - { - return $this->doGetStats(); - } - - /** - * {@inheritDoc} - */ - public function flushAll() - { - return $this->doFlush(); - } - - /** - * {@inheritDoc} - */ - public function deleteAll() - { - $namespaceCacheKey = $this->getNamespaceCacheKey(); - $namespaceVersion = $this->getNamespaceVersion() + 1; - - if ($this->doSave($namespaceCacheKey, $namespaceVersion)) { - $this->namespaceVersion = $namespaceVersion; - - return true; - } - - return false; - } - - /** - * Prefixes the passed id with the configured namespace value. - * - * @param string $id The id to namespace. - * - * @return string The namespaced id. - */ - private function getNamespacedId(string $id): string - { - $namespaceVersion = $this->getNamespaceVersion(); - - return sprintf('%s[%s][%s]', $this->namespace, $id, $namespaceVersion); - } - - /** - * Returns the namespace cache key. - */ - private function getNamespaceCacheKey(): string - { - return sprintf(self::DOCTRINE_NAMESPACE_CACHEKEY, $this->namespace); - } - - /** - * Returns the namespace version. - */ - private function getNamespaceVersion(): int - { - if ($this->namespaceVersion !== null) { - return $this->namespaceVersion; - } - - $namespaceCacheKey = $this->getNamespaceCacheKey(); - $this->namespaceVersion = (int) $this->doFetch($namespaceCacheKey) ?: 1; - - return $this->namespaceVersion; - } - - /** - * Default implementation of doFetchMultiple. Each driver that supports multi-get should owerwrite it. - * - * @param string[] $keys Array of keys to retrieve from cache - * - * @return mixed[] Array of values retrieved for the given keys. - */ - protected function doFetchMultiple(array $keys) - { - $returnValues = []; - - foreach ($keys as $key) { - $item = $this->doFetch($key); - if ($item === false && ! $this->doContains($key)) { - continue; - } - - $returnValues[$key] = $item; - } - - return $returnValues; - } - - /** - * Fetches an entry from the cache. - * - * @param string $id The id of the cache entry to fetch. - * - * @return mixed|false The cached data or FALSE, if no cache entry exists for the given id. - */ - abstract protected function doFetch($id); - - /** - * Tests if an entry exists in the cache. - * - * @param string $id The cache id of the entry to check for. - * - * @return bool TRUE if a cache entry exists for the given cache id, FALSE otherwise. - */ - abstract protected function doContains($id); - - /** - * Default implementation of doSaveMultiple. Each driver that supports multi-put should override it. - * - * @param mixed[] $keysAndValues Array of keys and values to save in cache - * @param int $lifetime The lifetime. If != 0, sets a specific lifetime for these - * cache entries (0 => infinite lifeTime). - * - * @return bool TRUE if the operation was successful, FALSE if it wasn't. - */ - protected function doSaveMultiple(array $keysAndValues, $lifetime = 0) - { - $success = true; - - foreach ($keysAndValues as $key => $value) { - if ($this->doSave($key, $value, $lifetime)) { - continue; - } - - $success = false; - } - - return $success; - } - - /** - * Puts data into the cache. - * - * @param string $id The cache id. - * @param string $data The cache entry/data. - * @param int $lifeTime The lifetime. If != 0, sets a specific lifetime for this - * cache entry (0 => infinite lifeTime). - * - * @return bool TRUE if the entry was successfully stored in the cache, FALSE otherwise. - */ - abstract protected function doSave($id, $data, $lifeTime = 0); - - /** - * Default implementation of doDeleteMultiple. Each driver that supports multi-delete should override it. - * - * @param string[] $keys Array of keys to delete from cache - * - * @return bool TRUE if the operation was successful, FALSE if it wasn't - */ - protected function doDeleteMultiple(array $keys) - { - $success = true; - - foreach ($keys as $key) { - if ($this->doDelete($key)) { - continue; - } - - $success = false; - } - - return $success; - } - - /** - * Deletes a cache entry. - * - * @param string $id The cache id. - * - * @return bool TRUE if the cache entry was successfully deleted, FALSE otherwise. - */ - abstract protected function doDelete($id); - - /** - * Flushes all cache entries. - * - * @return bool TRUE if the cache entries were successfully flushed, FALSE otherwise. - */ - abstract protected function doFlush(); - - /** - * Retrieves cached information from the data store. - * - * @return mixed[]|null An associative array with server's statistics if available, NULL otherwise. - */ - abstract protected function doGetStats(); -} diff --git a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php deleted file mode 100644 index b94618e..0000000 --- a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/ClearableCache.php +++ /dev/null @@ -1,21 +0,0 @@ - infinite lifeTime). - * - * @return bool TRUE if the operation was successful, FALSE if it wasn't. - */ - public function saveMultiple(array $keysAndValues, $lifetime = 0); -} diff --git a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheAdapter.php b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheAdapter.php deleted file mode 100644 index d3693b7..0000000 --- a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheAdapter.php +++ /dev/null @@ -1,340 +0,0 @@ - */ - private $deferredItems = []; - - public static function wrap(Cache $cache): CacheItemPoolInterface - { - if ($cache instanceof DoctrineProvider && ! $cache->getNamespace()) { - return $cache->getPool(); - } - - if ($cache instanceof SymfonyDoctrineProvider && ! $cache->getNamespace()) { - $getPool = function () { - // phpcs:ignore Squiz.Scope.StaticThisUsage.Found - return $this->pool; - }; - - return $getPool->bindTo($cache, SymfonyDoctrineProvider::class)(); - } - - return new self($cache); - } - - private function __construct(Cache $cache) - { - $this->cache = $cache; - } - - /** @internal */ - public function getCache(): Cache - { - return $this->cache; - } - - /** - * {@inheritDoc} - */ - public function getItem($key): CacheItemInterface - { - assert(self::validKey($key)); - - if (isset($this->deferredItems[$key])) { - $this->commit(); - } - - $value = $this->cache->fetch($key); - - if (PHP_VERSION_ID >= 80000) { - if ($value !== false) { - return new TypedCacheItem($key, $value, true); - } - - return new TypedCacheItem($key, null, false); - } - - if ($value !== false) { - return new CacheItem($key, $value, true); - } - - return new CacheItem($key, null, false); - } - - /** - * {@inheritDoc} - */ - public function getItems(array $keys = []): array - { - if ($this->deferredItems) { - $this->commit(); - } - - assert(self::validKeys($keys)); - - $values = $this->doFetchMultiple($keys); - $items = []; - - if (PHP_VERSION_ID >= 80000) { - foreach ($keys as $key) { - if (array_key_exists($key, $values)) { - $items[$key] = new TypedCacheItem($key, $values[$key], true); - } else { - $items[$key] = new TypedCacheItem($key, null, false); - } - } - - return $items; - } - - foreach ($keys as $key) { - if (array_key_exists($key, $values)) { - $items[$key] = new CacheItem($key, $values[$key], true); - } else { - $items[$key] = new CacheItem($key, null, false); - } - } - - return $items; - } - - /** - * {@inheritDoc} - */ - public function hasItem($key): bool - { - assert(self::validKey($key)); - - if (isset($this->deferredItems[$key])) { - $this->commit(); - } - - return $this->cache->contains($key); - } - - public function clear(): bool - { - $this->deferredItems = []; - - if (! $this->cache instanceof ClearableCache) { - return false; - } - - return $this->cache->deleteAll(); - } - - /** - * {@inheritDoc} - */ - public function deleteItem($key): bool - { - assert(self::validKey($key)); - unset($this->deferredItems[$key]); - - return $this->cache->delete($key); - } - - /** - * {@inheritDoc} - */ - public function deleteItems(array $keys): bool - { - foreach ($keys as $key) { - assert(self::validKey($key)); - unset($this->deferredItems[$key]); - } - - return $this->doDeleteMultiple($keys); - } - - public function save(CacheItemInterface $item): bool - { - return $this->saveDeferred($item) && $this->commit(); - } - - public function saveDeferred(CacheItemInterface $item): bool - { - if (! $item instanceof CacheItem && ! $item instanceof TypedCacheItem) { - return false; - } - - $this->deferredItems[$item->getKey()] = $item; - - return true; - } - - public function commit(): bool - { - if (! $this->deferredItems) { - return true; - } - - $now = microtime(true); - $itemsCount = 0; - $byLifetime = []; - $expiredKeys = []; - - foreach ($this->deferredItems as $key => $item) { - $lifetime = ($item->getExpiry() ?? $now) - $now; - - if ($lifetime < 0) { - $expiredKeys[] = $key; - - continue; - } - - ++$itemsCount; - $byLifetime[(int) $lifetime][$key] = $item->get(); - } - - $this->deferredItems = []; - - switch (count($expiredKeys)) { - case 0: - break; - case 1: - $this->cache->delete(current($expiredKeys)); - break; - default: - $this->doDeleteMultiple($expiredKeys); - break; - } - - if ($itemsCount === 1) { - return $this->cache->save($key, $item->get(), (int) $lifetime); - } - - $success = true; - foreach ($byLifetime as $lifetime => $values) { - $success = $this->doSaveMultiple($values, $lifetime) && $success; - } - - return $success; - } - - public function __destruct() - { - $this->commit(); - } - - /** - * @param mixed $key - */ - private static function validKey($key): bool - { - if (! is_string($key)) { - throw new InvalidArgument(sprintf('Cache key must be string, "%s" given.', is_object($key) ? get_class($key) : gettype($key))); - } - - if ($key === '') { - throw new InvalidArgument('Cache key length must be greater than zero.'); - } - - if (strpbrk($key, self::RESERVED_CHARACTERS) !== false) { - throw new InvalidArgument(sprintf('Cache key "%s" contains reserved characters "%s".', $key, self::RESERVED_CHARACTERS)); - } - - return true; - } - - /** - * @param mixed[] $keys - */ - private static function validKeys(array $keys): bool - { - foreach ($keys as $key) { - self::validKey($key); - } - - return true; - } - - /** - * @param mixed[] $keys - */ - private function doDeleteMultiple(array $keys): bool - { - if ($this->cache instanceof MultiDeleteCache) { - return $this->cache->deleteMultiple($keys); - } - - $success = true; - foreach ($keys as $key) { - $success = $this->cache->delete($key) && $success; - } - - return $success; - } - - /** - * @param mixed[] $keys - * - * @return mixed[] - */ - private function doFetchMultiple(array $keys): array - { - if ($this->cache instanceof MultiGetCache) { - return $this->cache->fetchMultiple($keys); - } - - $values = []; - foreach ($keys as $key) { - $value = $this->cache->fetch($key); - if (! $value) { - continue; - } - - $values[$key] = $value; - } - - return $values; - } - - /** - * @param mixed[] $keysAndValues - */ - private function doSaveMultiple(array $keysAndValues, int $lifetime = 0): bool - { - if ($this->cache instanceof MultiPutCache) { - return $this->cache->saveMultiple($keysAndValues, $lifetime); - } - - $success = true; - foreach ($keysAndValues as $key => $value) { - $success = $this->cache->save($key, $value, $lifetime) && $success; - } - - return $success; - } -} diff --git a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheItem.php b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheItem.php deleted file mode 100644 index 0b6f0a2..0000000 --- a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/CacheItem.php +++ /dev/null @@ -1,118 +0,0 @@ -key = $key; - $this->value = $data; - $this->isHit = $isHit; - } - - public function getKey(): string - { - return $this->key; - } - - /** - * {@inheritDoc} - * - * @return mixed - */ - public function get() - { - return $this->value; - } - - public function isHit(): bool - { - return $this->isHit; - } - - /** - * {@inheritDoc} - */ - public function set($value): self - { - $this->value = $value; - - return $this; - } - - /** - * {@inheritDoc} - */ - public function expiresAt($expiration): self - { - if ($expiration === null) { - $this->expiry = null; - } elseif ($expiration instanceof DateTimeInterface) { - $this->expiry = (float) $expiration->format('U.u'); - } else { - throw new TypeError(sprintf( - 'Expected $expiration to be an instance of DateTimeInterface or null, got %s', - is_object($expiration) ? get_class($expiration) : gettype($expiration) - )); - } - - return $this; - } - - /** - * {@inheritDoc} - */ - public function expiresAfter($time): self - { - if ($time === null) { - $this->expiry = null; - } elseif ($time instanceof DateInterval) { - $this->expiry = microtime(true) + DateTime::createFromFormat('U', 0)->add($time)->format('U.u'); - } elseif (is_int($time)) { - $this->expiry = $time + microtime(true); - } else { - throw new TypeError(sprintf( - 'Expected $time to be either an integer, an instance of DateInterval or null, got %s', - is_object($time) ? get_class($time) : gettype($time) - )); - } - - return $this; - } - - /** - * @internal - */ - public function getExpiry(): ?float - { - return $this->expiry; - } -} diff --git a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/DoctrineProvider.php b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/DoctrineProvider.php deleted file mode 100644 index 3b0f416..0000000 --- a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/DoctrineProvider.php +++ /dev/null @@ -1,135 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Doctrine\Common\Cache\Psr6; - -use Doctrine\Common\Cache\Cache; -use Doctrine\Common\Cache\CacheProvider; -use Psr\Cache\CacheItemPoolInterface; -use Symfony\Component\Cache\Adapter\DoctrineAdapter as SymfonyDoctrineAdapter; -use Symfony\Contracts\Service\ResetInterface; - -use function rawurlencode; - -/** - * This class was copied from the Symfony Framework, see the original copyright - * notice above. The code is distributed subject to the license terms in - * https://github.com/symfony/symfony/blob/ff0cf61278982539c49e467db9ab13cbd342f76d/LICENSE - */ -final class DoctrineProvider extends CacheProvider -{ - /** @var CacheItemPoolInterface */ - private $pool; - - public static function wrap(CacheItemPoolInterface $pool): Cache - { - if ($pool instanceof CacheAdapter) { - return $pool->getCache(); - } - - if ($pool instanceof SymfonyDoctrineAdapter) { - $getCache = function () { - // phpcs:ignore Squiz.Scope.StaticThisUsage.Found - return $this->provider; - }; - - return $getCache->bindTo($pool, SymfonyDoctrineAdapter::class)(); - } - - return new self($pool); - } - - private function __construct(CacheItemPoolInterface $pool) - { - $this->pool = $pool; - } - - /** @internal */ - public function getPool(): CacheItemPoolInterface - { - return $this->pool; - } - - public function reset(): void - { - if ($this->pool instanceof ResetInterface) { - $this->pool->reset(); - } - - $this->setNamespace($this->getNamespace()); - } - - /** - * {@inheritdoc} - */ - protected function doFetch($id) - { - $item = $this->pool->getItem(rawurlencode($id)); - - return $item->isHit() ? $item->get() : false; - } - - /** - * {@inheritdoc} - * - * @return bool - */ - protected function doContains($id) - { - return $this->pool->hasItem(rawurlencode($id)); - } - - /** - * {@inheritdoc} - * - * @return bool - */ - protected function doSave($id, $data, $lifeTime = 0) - { - $item = $this->pool->getItem(rawurlencode($id)); - - if (0 < $lifeTime) { - $item->expiresAfter($lifeTime); - } - - return $this->pool->save($item->set($data)); - } - - /** - * {@inheritdoc} - * - * @return bool - */ - protected function doDelete($id) - { - return $this->pool->deleteItem(rawurlencode($id)); - } - - /** - * {@inheritdoc} - * - * @return bool - */ - protected function doFlush() - { - return $this->pool->clear(); - } - - /** - * {@inheritdoc} - * - * @return array|null - */ - protected function doGetStats() - { - return null; - } -} diff --git a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/InvalidArgument.php b/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/InvalidArgument.php deleted file mode 100644 index 196f1bc..0000000 --- a/vendor/doctrine/cache/lib/Doctrine/Common/Cache/Psr6/InvalidArgument.php +++ /dev/null @@ -1,13 +0,0 @@ -key; - } - - public function get(): mixed - { - return $this->value; - } - - public function isHit(): bool - { - return $this->isHit; - } - - public function set(mixed $value): static - { - $this->value = $value; - - return $this; - } - - /** - * {@inheritDoc} - */ - public function expiresAt($expiration): static - { - if ($expiration === null) { - $this->expiry = null; - } elseif ($expiration instanceof DateTimeInterface) { - $this->expiry = (float) $expiration->format('U.u'); - } else { - throw new TypeError(sprintf( - 'Expected $expiration to be an instance of DateTimeInterface or null, got %s', - get_debug_type($expiration) - )); - } - - return $this; - } - - /** - * {@inheritDoc} - */ - public function expiresAfter($time): static - { - if ($time === null) { - $this->expiry = null; - } elseif ($time instanceof DateInterval) { - $this->expiry = microtime(true) + DateTime::createFromFormat('U', 0)->add($time)->format('U.u'); - } elseif (is_int($time)) { - $this->expiry = $time + microtime(true); - } else { - throw new TypeError(sprintf( - 'Expected $time to be either an integer, an instance of DateInterval or null, got %s', - get_debug_type($time) - )); - } - - return $this; - } - - /** - * @internal - */ - public function getExpiry(): ?float - { - return $this->expiry; - } -} diff --git a/vendor/doctrine/collections/CONTRIBUTING.md b/vendor/doctrine/collections/CONTRIBUTING.md deleted file mode 100644 index 7a0a8c9..0000000 --- a/vendor/doctrine/collections/CONTRIBUTING.md +++ /dev/null @@ -1,44 +0,0 @@ -# Contribute to Doctrine - -Thank you for contributing to Doctrine! - -Before we can merge your Pull-Request here are some guidelines that you need to follow. -These guidelines exist not to annoy you, but to keep the code base clean, -unified and future proof. - -## Coding Standard - -We use the [Doctrine Coding Standard](https://github.com/doctrine/coding-standard). - -## Unit-Tests - -Please try to add a test for your pull-request. - -* If you want to contribute new functionality add unit- or functional tests - depending on the scope of the feature. - -You can run the unit-tests by calling ``vendor/bin/phpunit`` from the root of the project. -It will run all the project tests. - -In order to do that, you will need a fresh copy of doctrine/collections, and you -will have to run a composer installation in the project: - -```sh -git clone git@github.com:doctrine/collections.git -cd collections -curl -sS https://getcomposer.org/installer | php -- -./composer.phar install -``` - -## Github Actions - -We automatically run your pull request through Github Actions against supported -PHP versions. If you break the tests, we cannot merge your code, so please make -sure that your code is working before opening up a Pull-Request. - -## Getting merged - -Please allow us time to review your pull requests. We will give our best to review -everything as fast as possible, but cannot always live up to our own expectations. - -Thank you very much again for your contribution! diff --git a/vendor/doctrine/collections/README.md b/vendor/doctrine/collections/README.md deleted file mode 100644 index 048fb61..0000000 --- a/vendor/doctrine/collections/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# Doctrine Collections - -[![Build Status](https://github.com/doctrine/collections/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/collections/actions) -[![Code Coverage](https://codecov.io/gh/doctrine/collections/branch/2.0.x/graph/badge.svg)](https://codecov.io/gh/doctrine/collections/branch/2.0.x) - -Collections Abstraction library diff --git a/vendor/doctrine/collections/UPGRADE.md b/vendor/doctrine/collections/UPGRADE.md deleted file mode 100644 index 44232f7..0000000 --- a/vendor/doctrine/collections/UPGRADE.md +++ /dev/null @@ -1,112 +0,0 @@ -Note about upgrading: Doctrine uses static and runtime mechanisms to raise -awareness about deprecated code. - -- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or - Static Analysis tools (like Psalm, phpstan) -- Use of our low-overhead runtime deprecation API, details: - https://github.com/doctrine/deprecations/ - -# Upgrade to 2.2 - -## Deprecated string representation of sort order - -Criteria orderings direction is now represented by the -`Doctrine\Common\Collection\Order` enum. - -As a consequence: - -- `Criteria::ASC` and `Criteria::DESC` are deprecated in favor of - `Order::Ascending` and `Order::Descending`, respectively. -- `Criteria::getOrderings()` is deprecated in favor of `Criteria::orderings()`, - which returns `array`. -- `Criteria::orderBy()` accepts `array`, but passing - anything other than `array` is deprecated. - -# Upgrade to 2.0 - -## BC breaking changes - -Native parameter types were added. Native return types will be added in 3.0.x -As a consequence, some signatures were changed and will have to be adjusted in sub-classes. - -Note that in order to keep compatibility with both 1.x and 2.x versions, -extending code would have to omit the added parameter types. -This would only work in PHP 7.2+ which is the first version featuring -[parameter widening](https://wiki.php.net/rfc/parameter-no-type-variance). -It is also recommended to add return types according to the tables below - -You can find a list of major changes to public API below. - -### Doctrine\Common\Collections\Collection - -| 1.0.x | 3.0.x | -|---------------------------------:|:-------------------------------------------------| -| `add($element)` | `add(mixed $element): void` | -| `clear()` | `clear(): void` | -| `contains($element)` | `contains(mixed $element): bool` | -| `isEmpty()` | `isEmpty(): bool` | -| `removeElement($element)` | `removeElement(mixed $element): bool` | -| `containsKey($key)` | `containsKey(string\|int $key): bool` | -| `get()` | `get(string\|int $key): mixed` | -| `getKeys()` | `getKeys(): array` | -| `getValues()` | `getValues(): array` | -| `set($key, $value)` | `set(string\|int $key, $value): void` | -| `toArray()` | `toArray(): array` | -| `first()` | `first(): mixed` | -| `last()` | `last(): mixed` | -| `key()` | `key(): int\|string\|null` | -| `current()` | `current(): mixed` | -| `next()` | `next(): mixed` | -| `exists(Closure $p)` | `exists(Closure $p): bool` | -| `filter(Closure $p)` | `filter(Closure $p): self` | -| `forAll(Closure $p)` | `forAll(Closure $p): bool` | -| `map(Closure $func)` | `map(Closure $func): self` | -| `partition(Closure $p)` | `partition(Closure $p): array` | -| `indexOf($element)` | `indexOf(mixed $element): int\|string\|false` | -| `slice($offset, $length = null)` | `slice(int $offset, ?int $length = null): array` | -| `count()` | `count(): int` | -| `getIterator()` | `getIterator(): \Traversable` | -| `offsetSet($offset, $value)` | `offsetSet(mixed $offset, mixed $value): void` | -| `offsetUnset($offset)` | `offsetUnset(mixed $offset): void` | -| `offsetExists($offset)` | `offsetExists(mixed $offset): bool` | - -### Doctrine\Common\Collections\AbstractLazyCollection - -| 1.0.x | 3.0.x | -|------------------:|:------------------------| -| `isInitialized()` | `isInitialized(): bool` | -| `initialize()` | `initialize(): void` | -| `doInitialize()` | `doInitialize(): void` | - -### Doctrine\Common\Collections\ArrayCollection - -| 1.0.x | 3.0.x | -|------------------------------:|:--------------------------------------| -| `createFrom(array $elements)` | `createFrom(array $elements): static` | -| `__toString()` | `__toString(): string` | - -### Doctrine\Common\Collections\Criteria - -| 1.0.x | 3.0.x | -|------------------------------------------:|:--------------------------------------------| -| `where(Expression $expression): self` | `where(Expression $expression): static` | -| `andWhere(Expression $expression): self` | `andWhere(Expression $expression): static` | -| `orWhere(Expression $expression): self` | `orWhere(Expression $expression): static` | -| `orderBy(array $orderings): self` | `orderBy(array $orderings): static` | -| `setFirstResult(?int $firstResult): self` | `setFirstResult(?int $firstResult): static` | -| `setMaxResult(?int $maxResults): self` | `setMaxResults(?int $maxResults): static` | - -### Doctrine\Common\Collections\Selectable - -| 1.0.x | 3.0.x | -|-------------------------------:|:-------------------------------------------| -| `matching(Criteria $criteria)` | `matching(Criteria $criteria): Collection` | - -# Upgrade to 1.7 - -## Deprecated null first result - -Passing null as `$firstResult` to -`Doctrine\Common\Collections\Criteria::__construct()` and to -`Doctrine\Common\Collections\Criteria::setFirstResult()` is deprecated. -Use `0` instead. diff --git a/vendor/doctrine/collections/composer.json b/vendor/doctrine/collections/composer.json deleted file mode 100644 index 4c36229..0000000 --- a/vendor/doctrine/collections/composer.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "name": "doctrine/collections", - "description": "PHP Doctrine Collections library that adds additional functionality on top of PHP arrays.", - "license": "MIT", - "type": "library", - "keywords": [ - "php", - "collections", - "array", - "iterators" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "homepage": "https://www.doctrine-project.org/projects/collections.html", - "require": { - "php": "^8.1", - "doctrine/deprecations": "^1" - }, - "require-dev": { - "ext-json": "*", - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.11" - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Collections\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Tests\\Common\\Collections\\": "tests" - } - }, - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "dealerdirect/phpcodesniffer-composer-installer": true - } - } -} diff --git a/vendor/doctrine/collections/docs/en/derived-collections.rst b/vendor/doctrine/collections/docs/en/derived-collections.rst deleted file mode 100644 index 03d9da5..0000000 --- a/vendor/doctrine/collections/docs/en/derived-collections.rst +++ /dev/null @@ -1,26 +0,0 @@ -Derived Collections -=================== - -You can create custom collection classes by extending the -``Doctrine\Common\Collections\ArrayCollection`` class. If the -``__construct`` semantics are different from the default ``ArrayCollection`` -you can override the ``createFrom`` method: - -.. code-block:: php - final class DerivedArrayCollection extends ArrayCollection - { - /** @var \stdClass */ - private $foo; - - public function __construct(\stdClass $foo, array $elements = []) - { - $this->foo = $foo; - - parent::__construct($elements); - } - - protected function createFrom(array $elements) : self - { - return new static($this->foo, $elements); - } - } diff --git a/vendor/doctrine/collections/docs/en/expression-builder.rst b/vendor/doctrine/collections/docs/en/expression-builder.rst deleted file mode 100644 index e022441..0000000 --- a/vendor/doctrine/collections/docs/en/expression-builder.rst +++ /dev/null @@ -1,185 +0,0 @@ -Expression Builder -================== - -The Expression Builder is a convenient fluent interface for -building expressions to be used with the ``Doctrine\Common\Collections\Criteria`` -class: - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $criteria = new Criteria(); - $criteria->where($expressionBuilder->eq('name', 'jwage')); - $criteria->orWhere($expressionBuilder->eq('name', 'romanb')); - - $collection->matching($criteria); - -The ``ExpressionBuilder`` has the following API: - -andX ----- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->andX( - $expressionBuilder->eq('foo', 1), - $expressionBuilder->eq('bar', 1) - ); - - $collection->matching(new Criteria($expression)); - -orX ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->orX( - $expressionBuilder->eq('foo', 1), - $expressionBuilder->eq('bar', 1) - ); - - $collection->matching(new Criteria($expression)); - -not ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->not( - $expressionBuilder->eq('foo', 1) - ); - - $collection->matching(new Criteria($expression)); - -eq ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->eq('foo', 1); - - $collection->matching(new Criteria($expression)); - -gt ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->gt('foo', 1); - - $collection->matching(new Criteria($expression)); - -lt ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->lt('foo', 1); - - $collection->matching(new Criteria($expression)); - -gte ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->gte('foo', 1); - - $collection->matching(new Criteria($expression)); - -lte ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->lte('foo', 1); - - $collection->matching(new Criteria($expression)); - -neq ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->neq('foo', 1); - - $collection->matching(new Criteria($expression)); - -isNull ------- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->isNull('foo'); - - $collection->matching(new Criteria($expression)); - -in ---- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->in('foo', ['value1', 'value2']); - - $collection->matching(new Criteria($expression)); - -notIn ------ - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->notIn('foo', ['value1', 'value2']); - - $collection->matching(new Criteria($expression)); - -contains --------- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->contains('foo', 'value1'); - - $collection->matching(new Criteria($expression)); - -memberOf --------- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->memberOf('foo', ['value1', 'value2']); - - $collection->matching(new Criteria($expression)); - -startsWith ----------- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->startsWith('foo', 'hello'); - - $collection->matching(new Criteria($expression)); - -endsWith --------- - -.. code-block:: php - $expressionBuilder = Criteria::expr(); - - $expression = $expressionBuilder->endsWith('foo', 'world'); - - $collection->matching(new Criteria($expression)); diff --git a/vendor/doctrine/collections/docs/en/expressions.rst b/vendor/doctrine/collections/docs/en/expressions.rst deleted file mode 100644 index 5587bfb..0000000 --- a/vendor/doctrine/collections/docs/en/expressions.rst +++ /dev/null @@ -1,117 +0,0 @@ -Expressions -=========== - -The ``Doctrine\Common\Collections\Expr\Comparison`` class -can be used to create comparison expressions to be used with the -``Doctrine\Common\Collections\Criteria`` class. It has the -following operator constants: - -- ``Comparison::EQ`` -- ``Comparison::NEQ`` -- ``Comparison::LT`` -- ``Comparison::LTE`` -- ``Comparison::GT`` -- ``Comparison::GTE`` -- ``Comparison::IS`` -- ``Comparison::IN`` -- ``Comparison::NIN`` -- ``Comparison::CONTAINS`` -- ``Comparison::MEMBER_OF`` -- ``Comparison::STARTS_WITH`` -- ``Comparison::ENDS_WITH`` - -The ``Doctrine\Common\Collections\Expr\CompositeExpression`` class -can be used to create composite expressions to be used with the -``Doctrine\Common\Collections\Criteria`` class. It has the -following operator constants: - -- ``CompositeExpression::TYPE_AND`` -- ``CompositeExpression::TYPE_OR`` -- ``CompositeExpression::TYPE_NOT`` - -When using the ``TYPE_OR`` and ``TYPE_AND`` operators the -``CompositeExpression`` accepts multiple expressions as parameter -but only one expression can be provided when using the ``NOT`` operator. - -The ``Doctrine\Common\Collections\Criteria`` class has the following -API to be used with expressions: - -where ------ - -Sets the where expression to evaluate when this Criteria is searched for. - -.. code-block:: php - $expr = new Comparison('key', Comparison::EQ, 'value'); - - $criteria->where($expr); - -andWhere --------- - -Appends the where expression to evaluate when this Criteria is searched for -using an AND with previous expression. - -.. code-block:: php - $expr = new Comparison('key', Comparison::EQ, 'value'); - - $criteria->andWhere($expr); - -orWhere -------- - -Appends the where expression to evaluate when this Criteria is searched for -using an OR with previous expression. - -.. code-block:: php - $expr1 = new Comparison('key', Comparison::EQ, 'value1'); - $expr2 = new Comparison('key', Comparison::EQ, 'value2'); - - $criteria->where($expr1); - $criteria->orWhere($expr2); - -orderBy -------- - -Sets the ordering of the result of this Criteria. - -.. code-block:: php - use Doctrine\Common\Collections\Order; - - $criteria->orderBy(['name' => Order::Ascending]); - -setFirstResult --------------- - -Set the number of first result that this Criteria should return. - -.. code-block:: php - $criteria->setFirstResult(0); - -getFirstResult --------------- - -Gets the current first result option of this Criteria. - -.. code-block:: php - $criteria->setFirstResult(10); - - echo $criteria->getFirstResult(); // 10 - -setMaxResults -------------- - -Sets the max results that this Criteria should return. - -.. code-block:: php - $criteria->setMaxResults(20); - -getMaxResults -------------- - -Gets the current max results option of this Criteria. - -.. code-block:: php - $criteria->setMaxResults(20); - - echo $criteria->getMaxResults(); // 20 diff --git a/vendor/doctrine/collections/docs/en/index.rst b/vendor/doctrine/collections/docs/en/index.rst deleted file mode 100644 index 7f2e38c..0000000 --- a/vendor/doctrine/collections/docs/en/index.rst +++ /dev/null @@ -1,357 +0,0 @@ -Introduction -============ - -Doctrine Collections is a library that contains classes for working with -arrays of data. Here is an example using the simple -``Doctrine\Common\Collections\ArrayCollection`` class: - -.. code-block:: php - filter(function($element) { - return $element > 1; - }); // [2, 3] - -Collection Methods -================== - -Doctrine Collections provides an interface named ``Doctrine\Common\Collections\Collection`` -that resembles the nature of a regular PHP array. That is, -it is essentially an **ordered map** that can also be used -like a list. - -A Collection has an internal iterator just like a PHP array. In addition, -a Collection can be iterated with external iterators, which is preferable. -To use an external iterator simply use the foreach language construct to -iterate over the collection, which calls ``getIterator()`` internally, or -explicitly retrieve an iterator though ``getIterator()`` which can then be -used to iterate over the collection. You can not rely on the internal iterator -of the collection being at a certain position unless you explicitly positioned it before. - -Methods that do not alter the collection or have template types -appearing in invariant or contravariant positions are not directly -defined in ``Doctrine\Common\Collections\Collection``, but are inherited -from the ``Doctrine\Common\Collections\ReadableCollection`` interface. - -The methods available on the interface are: - -add ---- - -Adds an element at the end of the collection. - -.. code-block:: php - $collection->add('test'); - -clear ------ - -Clears the collection, removing all elements. - -.. code-block:: php - $collection->clear(); - -contains --------- - -Checks whether an element is contained in the collection. This is an O(n) operation, where n is the size of the collection. - -.. code-block:: php - $collection = new Collection(['test']); - - $contains = $collection->contains('test'); // true - -containsKey ------------ - -Checks whether the collection contains an element with the specified key/index. - -.. code-block:: php - $collection = new Collection(['test' => true]); - - $contains = $collection->containsKey('test'); // true - -current -------- - -Gets the element of the collection at the current iterator position. - -.. code-block:: php - $collection = new Collection(['first', 'second', 'third']); - - $current = $collection->current(); // first - -get ---- - -Gets the element at the specified key/index. - -.. code-block:: php - $collection = new Collection([ - 'key' => 'value', - ]); - - $value = $collection->get('key'); // value - -getKeys -------- - -Gets all keys/indices of the collection. - -.. code-block:: php - $collection = new Collection(['a', 'b', 'c']); - - $keys = $collection->getKeys(); // [0, 1, 2] - -getValues ---------- - -Gets all values of the collection. - -.. code-block:: php - $collection = new Collection([ - 'key1' => 'value1', - 'key2' => 'value2', - 'key3' => 'value3', - ]); - - $values = $collection->getValues(); // ['value1', 'value2', 'value3'] - -isEmpty -------- - -Checks whether the collection is empty (contains no elements). - -.. code-block:: php - $collection = new Collection(['a', 'b', 'c']); - - $isEmpty = $collection->isEmpty(); // false - -first ------ - -Sets the internal iterator to the first element in the collection and returns this element. - -.. code-block:: php - $collection = new Collection(['first', 'second', 'third']); - - $first = $collection->first(); // first - -exists ------- - -Tests for the existence of an element that satisfies the given predicate. - -.. code-block:: php - $collection = new Collection(['first', 'second', 'third']); - - $exists = $collection->exists(function($key, $value) { - return $value === 'first'; - }); // true - -findFirst ---------- - -Returns the first element of this collection that satisfies the given predicate. - -.. code-block:: php - $collection = new Collection([1, 2, 3, 2, 1]); - - $one = $collection->findFirst(function(int $key, int $value): bool { - return $value > 2 && $key > 1; - }); // 3 - -filter ------- - -Returns all the elements of this collection for which your callback function returns `true`. -The order and keys of the elements are preserved. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $filteredCollection = $collection->filter(function($element) { - return $element > 1; - }); // [2, 3] - -forAll ------- - -Tests whether the given predicate holds for all elements of this collection. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $forAll = $collection->forAll(function($key, $value) { - return $value > 1; - }); // false - -indexOf -------- - -Gets the index/key of a given element. The comparison of two elements is strict, that means not only the value but also the type must match. For objects this means reference equality. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $indexOf = $collection->indexOf(3); // 2 - -key ---- - -Gets the key/index of the element at the current iterator position. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $collection->next(); - - $key = $collection->key(); // 1 - -last ----- - -Sets the internal iterator to the last element in the collection and returns this element. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $last = $collection->last(); // 3 - -map ---- - -Applies the given function to each element in the collection and returns a new collection with the elements returned by the function. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $mappedCollection = $collection->map(function($value) { - return $value + 1; - }); // [2, 3, 4] - -reduce ------- - -Applies iteratively the given function to each element in the collection, so as to reduce the collection to a single value. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $reduce = $collection->reduce(function(int $accumulator, int $value): int { - return $accumulator + $value; - }, 0); // 6 - -next ----- - -Moves the internal iterator position to the next element and returns this element. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $next = $collection->next(); // 2 - -partition ---------- - -Partitions this collection in two collections according to a predicate. Keys are preserved in the resulting collections. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $mappedCollection = $collection->partition(function($key, $value) { - return $value > 1 - }); // [[2, 3], [1]] - -remove ------- - -Removes the element at the specified index from the collection. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $collection->remove(0); // [2, 3] - -removeElement -------------- - -Removes the specified element from the collection, if it is found. - -.. code-block:: php - $collection = new ArrayCollection([1, 2, 3]); - - $collection->removeElement(3); // [1, 2] - -set ---- - -Sets an element in the collection at the specified key/index. - -.. code-block:: php - $collection = new ArrayCollection(); - - $collection->set('name', 'jwage'); - -slice ------ - -Extracts a slice of $length elements starting at position $offset from the Collection. If $length is null it returns all elements from $offset to the end of the Collection. Keys have to be preserved by this method. Calling this method will only return the selected slice and NOT change the elements contained in the collection slice is called on. - -.. code-block:: php - $collection = new ArrayCollection([0, 1, 2, 3, 4, 5]); - - $slice = $collection->slice(1, 2); // [1, 2] - -toArray -------- - -Gets a native PHP array representation of the collection. - -.. code-block:: php - $collection = new ArrayCollection([0, 1, 2, 3, 4, 5]); - - $array = $collection->toArray(); // [0, 1, 2, 3, 4, 5] - -Selectable Methods -================== - -Some Doctrine Collections, like ``Doctrine\Common\Collections\ArrayCollection``, -implement an interface named ``Doctrine\Common\Collections\Selectable`` -that offers the usage of a powerful expressions API, where conditions -can be applied to a collection to get a result with matching elements -only. - -matching --------- - -Selects all elements from a selectable that match the expression and -returns a new collection containing these elements and preserved keys. - -.. code-block:: php - use Doctrine\Common\Collections\Criteria; - use Doctrine\Common\Collections\Expr\Comparison; - - $collection = new ArrayCollection([ - 'wage' => [ - 'name' => 'jwage', - ], - 'roman' => [ - 'name' => 'romanb', - ], - ]); - - $expr = new Comparison('name', '=', 'jwage'); - - $criteria = new Criteria(); - - $criteria->where($expr); - - $matchingCollection = $collection->matching($criteria); // [ 'wage' => [ 'name' => 'jwage' ]] - -You can read more about expressions :ref:`here `. diff --git a/vendor/doctrine/collections/docs/en/lazy-collections.rst b/vendor/doctrine/collections/docs/en/lazy-collections.rst deleted file mode 100644 index b9cafb6..0000000 --- a/vendor/doctrine/collections/docs/en/lazy-collections.rst +++ /dev/null @@ -1,26 +0,0 @@ -Lazy Collections -================ - -To create a lazy collection you can extend the -``Doctrine\Common\Collections\AbstractLazyCollection`` class -and define the ``doInitialize`` method. Here is an example where -we lazily query the database for a collection of user records: - -.. code-block:: php - use Doctrine\DBAL\Connection; - - class UsersLazyCollection extends AbstractLazyCollection - { - /** @var Connection */ - private $connection; - - public function __construct(Connection $connection) - { - $this->connection = $connection; - } - - protected function doInitialize() : void - { - $this->collection = $this->connection->fetchAll('SELECT * FROM users'); - } - } diff --git a/vendor/doctrine/collections/docs/en/serialization.rst b/vendor/doctrine/collections/docs/en/serialization.rst deleted file mode 100644 index be53d6e..0000000 --- a/vendor/doctrine/collections/docs/en/serialization.rst +++ /dev/null @@ -1,29 +0,0 @@ -Serialization -============= - -Using (un-)serialize() on a collection is not a supported use-case -and may break when changes on the collection's internals happen in the future. -If a collection needs to be serialized, use ``toArray()`` and reconstruct -the collection manually. - -.. code-block:: php - - $collection = new ArrayCollection([1, 2, 3]); - $serialized = serialize($collection->toArray()); - -A reconstruction is also necessary when the collection contains objects with -infinite recursion of dependencies like in this ``json_serialize()`` example: - -.. code-block:: php - - $foo = new Foo(); - $bar = new Bar(); - - $foo->setBar($bar); - $bar->setFoo($foo); - - $collection = new ArrayCollection([$foo]); - $json = json_serialize($collection->toArray()); // recursion detected - -Serializer libraries can be used to create the serialization-output to prevent -errors. diff --git a/vendor/doctrine/collections/docs/en/sidebar.rst b/vendor/doctrine/collections/docs/en/sidebar.rst deleted file mode 100644 index ebfb11c..0000000 --- a/vendor/doctrine/collections/docs/en/sidebar.rst +++ /dev/null @@ -1,11 +0,0 @@ -:orphan: - -.. toctree:: - :depth: 3 - - index - expressions - expression-builder - derived-collections - lazy-collections - serialization diff --git a/vendor/doctrine/collections/src/AbstractLazyCollection.php b/vendor/doctrine/collections/src/AbstractLazyCollection.php deleted file mode 100644 index 56a340b..0000000 --- a/vendor/doctrine/collections/src/AbstractLazyCollection.php +++ /dev/null @@ -1,414 +0,0 @@ - - */ -abstract class AbstractLazyCollection implements Collection -{ - /** - * The backed collection to use - * - * @psalm-var Collection|null - * @var Collection|null - */ - protected Collection|null $collection; - - protected bool $initialized = false; - - /** - * {@inheritDoc} - * - * @return int - */ - #[ReturnTypeWillChange] - public function count() - { - $this->initialize(); - - return $this->collection->count(); - } - - /** - * {@inheritDoc} - */ - public function add(mixed $element) - { - $this->initialize(); - - $this->collection->add($element); - } - - /** - * {@inheritDoc} - */ - public function clear() - { - $this->initialize(); - $this->collection->clear(); - } - - /** - * {@inheritDoc} - */ - public function contains(mixed $element) - { - $this->initialize(); - - return $this->collection->contains($element); - } - - /** - * {@inheritDoc} - */ - public function isEmpty() - { - $this->initialize(); - - return $this->collection->isEmpty(); - } - - /** - * {@inheritDoc} - */ - public function remove(string|int $key) - { - $this->initialize(); - - return $this->collection->remove($key); - } - - /** - * {@inheritDoc} - */ - public function removeElement(mixed $element) - { - $this->initialize(); - - return $this->collection->removeElement($element); - } - - /** - * {@inheritDoc} - */ - public function containsKey(string|int $key) - { - $this->initialize(); - - return $this->collection->containsKey($key); - } - - /** - * {@inheritDoc} - */ - public function get(string|int $key) - { - $this->initialize(); - - return $this->collection->get($key); - } - - /** - * {@inheritDoc} - */ - public function getKeys() - { - $this->initialize(); - - return $this->collection->getKeys(); - } - - /** - * {@inheritDoc} - */ - public function getValues() - { - $this->initialize(); - - return $this->collection->getValues(); - } - - /** - * {@inheritDoc} - */ - public function set(string|int $key, mixed $value) - { - $this->initialize(); - $this->collection->set($key, $value); - } - - /** - * {@inheritDoc} - */ - public function toArray() - { - $this->initialize(); - - return $this->collection->toArray(); - } - - /** - * {@inheritDoc} - */ - public function first() - { - $this->initialize(); - - return $this->collection->first(); - } - - /** - * {@inheritDoc} - */ - public function last() - { - $this->initialize(); - - return $this->collection->last(); - } - - /** - * {@inheritDoc} - */ - public function key() - { - $this->initialize(); - - return $this->collection->key(); - } - - /** - * {@inheritDoc} - */ - public function current() - { - $this->initialize(); - - return $this->collection->current(); - } - - /** - * {@inheritDoc} - */ - public function next() - { - $this->initialize(); - - return $this->collection->next(); - } - - /** - * {@inheritDoc} - */ - public function exists(Closure $p) - { - $this->initialize(); - - return $this->collection->exists($p); - } - - /** - * {@inheritDoc} - */ - public function findFirst(Closure $p) - { - $this->initialize(); - - return $this->collection->findFirst($p); - } - - /** - * {@inheritDoc} - */ - public function filter(Closure $p) - { - $this->initialize(); - - return $this->collection->filter($p); - } - - /** - * {@inheritDoc} - */ - public function forAll(Closure $p) - { - $this->initialize(); - - return $this->collection->forAll($p); - } - - /** - * {@inheritDoc} - */ - public function map(Closure $func) - { - $this->initialize(); - - return $this->collection->map($func); - } - - /** - * {@inheritDoc} - */ - public function reduce(Closure $func, mixed $initial = null) - { - $this->initialize(); - - return $this->collection->reduce($func, $initial); - } - - /** - * {@inheritDoc} - */ - public function partition(Closure $p) - { - $this->initialize(); - - return $this->collection->partition($p); - } - - /** - * {@inheritDoc} - * - * @template TMaybeContained - */ - public function indexOf(mixed $element) - { - $this->initialize(); - - return $this->collection->indexOf($element); - } - - /** - * {@inheritDoc} - */ - public function slice(int $offset, int|null $length = null) - { - $this->initialize(); - - return $this->collection->slice($offset, $length); - } - - /** - * {@inheritDoc} - * - * @return Traversable - * @psalm-return Traversable - */ - #[ReturnTypeWillChange] - public function getIterator() - { - $this->initialize(); - - return $this->collection->getIterator(); - } - - /** - * {@inheritDoc} - * - * @param TKey $offset - * - * @return bool - */ - #[ReturnTypeWillChange] - public function offsetExists(mixed $offset) - { - $this->initialize(); - - return $this->collection->offsetExists($offset); - } - - /** - * {@inheritDoc} - * - * @param TKey $offset - * - * @return T|null - */ - #[ReturnTypeWillChange] - public function offsetGet(mixed $offset) - { - $this->initialize(); - - return $this->collection->offsetGet($offset); - } - - /** - * {@inheritDoc} - * - * @param TKey|null $offset - * @param T $value - * - * @return void - */ - #[ReturnTypeWillChange] - public function offsetSet(mixed $offset, mixed $value) - { - $this->initialize(); - $this->collection->offsetSet($offset, $value); - } - - /** - * @param TKey $offset - * - * @return void - */ - #[ReturnTypeWillChange] - public function offsetUnset(mixed $offset) - { - $this->initialize(); - $this->collection->offsetUnset($offset); - } - - /** - * Is the lazy collection already initialized? - * - * @return bool - * - * @psalm-assert-if-true Collection $this->collection - */ - public function isInitialized() - { - return $this->initialized; - } - - /** - * Initialize the collection - * - * @return void - * - * @psalm-assert Collection $this->collection - */ - protected function initialize() - { - if ($this->initialized) { - return; - } - - $this->doInitialize(); - $this->initialized = true; - - if ($this->collection === null) { - throw new LogicException('You must initialize the collection property in the doInitialize() method.'); - } - } - - /** - * Do the initialization logic - * - * @return void - */ - abstract protected function doInitialize(); -} diff --git a/vendor/doctrine/collections/src/ArrayCollection.php b/vendor/doctrine/collections/src/ArrayCollection.php deleted file mode 100644 index 2e7d0e3..0000000 --- a/vendor/doctrine/collections/src/ArrayCollection.php +++ /dev/null @@ -1,490 +0,0 @@ - - * @template-implements Selectable - * @psalm-consistent-constructor - */ -class ArrayCollection implements Collection, Selectable, Stringable -{ - /** - * An array containing the entries of this collection. - * - * @psalm-var array - * @var mixed[] - */ - private array $elements = []; - - /** - * Initializes a new ArrayCollection. - * - * @psalm-param array $elements - */ - public function __construct(array $elements = []) - { - $this->elements = $elements; - } - - /** - * {@inheritDoc} - */ - public function toArray() - { - return $this->elements; - } - - /** - * {@inheritDoc} - */ - public function first() - { - return reset($this->elements); - } - - /** - * Creates a new instance from the specified elements. - * - * This method is provided for derived classes to specify how a new - * instance should be created when constructor semantics have changed. - * - * @param array $elements Elements. - * @psalm-param array $elements - * - * @return static - * @psalm-return static - * - * @psalm-template K of array-key - * @psalm-template V - */ - protected function createFrom(array $elements) - { - return new static($elements); - } - - /** - * {@inheritDoc} - */ - public function last() - { - return end($this->elements); - } - - /** - * {@inheritDoc} - */ - public function key() - { - return key($this->elements); - } - - /** - * {@inheritDoc} - */ - public function next() - { - return next($this->elements); - } - - /** - * {@inheritDoc} - */ - public function current() - { - return current($this->elements); - } - - /** - * {@inheritDoc} - */ - public function remove(string|int $key) - { - if (! isset($this->elements[$key]) && ! array_key_exists($key, $this->elements)) { - return null; - } - - $removed = $this->elements[$key]; - unset($this->elements[$key]); - - return $removed; - } - - /** - * {@inheritDoc} - */ - public function removeElement(mixed $element) - { - $key = array_search($element, $this->elements, true); - - if ($key === false) { - return false; - } - - unset($this->elements[$key]); - - return true; - } - - /** - * Required by interface ArrayAccess. - * - * @param TKey $offset - * - * @return bool - */ - #[ReturnTypeWillChange] - public function offsetExists(mixed $offset) - { - return $this->containsKey($offset); - } - - /** - * Required by interface ArrayAccess. - * - * @param TKey $offset - * - * @return T|null - */ - #[ReturnTypeWillChange] - public function offsetGet(mixed $offset) - { - return $this->get($offset); - } - - /** - * Required by interface ArrayAccess. - * - * @param TKey|null $offset - * @param T $value - * - * @return void - */ - #[ReturnTypeWillChange] - public function offsetSet(mixed $offset, mixed $value) - { - if ($offset === null) { - $this->add($value); - - return; - } - - $this->set($offset, $value); - } - - /** - * Required by interface ArrayAccess. - * - * @param TKey $offset - * - * @return void - */ - #[ReturnTypeWillChange] - public function offsetUnset(mixed $offset) - { - $this->remove($offset); - } - - /** - * {@inheritDoc} - */ - public function containsKey(string|int $key) - { - return isset($this->elements[$key]) || array_key_exists($key, $this->elements); - } - - /** - * {@inheritDoc} - */ - public function contains(mixed $element) - { - return in_array($element, $this->elements, true); - } - - /** - * {@inheritDoc} - */ - public function exists(Closure $p) - { - foreach ($this->elements as $key => $element) { - if ($p($key, $element)) { - return true; - } - } - - return false; - } - - /** - * {@inheritDoc} - * - * @psalm-param TMaybeContained $element - * - * @return int|string|false - * @psalm-return (TMaybeContained is T ? TKey|false : false) - * - * @template TMaybeContained - */ - public function indexOf($element) - { - return array_search($element, $this->elements, true); - } - - /** - * {@inheritDoc} - */ - public function get(string|int $key) - { - return $this->elements[$key] ?? null; - } - - /** - * {@inheritDoc} - */ - public function getKeys() - { - return array_keys($this->elements); - } - - /** - * {@inheritDoc} - */ - public function getValues() - { - return array_values($this->elements); - } - - /** - * {@inheritDoc} - * - * @return int<0, max> - */ - #[ReturnTypeWillChange] - public function count() - { - return count($this->elements); - } - - /** - * {@inheritDoc} - */ - public function set(string|int $key, mixed $value) - { - $this->elements[$key] = $value; - } - - /** - * {@inheritDoc} - * - * @psalm-suppress InvalidPropertyAssignmentValue - * - * This breaks assumptions about the template type, but it would - * be a backwards-incompatible change to remove this method - */ - public function add(mixed $element) - { - $this->elements[] = $element; - } - - /** - * {@inheritDoc} - */ - public function isEmpty() - { - return empty($this->elements); - } - - /** - * {@inheritDoc} - * - * @return Traversable - * @psalm-return Traversable - */ - #[ReturnTypeWillChange] - public function getIterator() - { - return new ArrayIterator($this->elements); - } - - /** - * {@inheritDoc} - * - * @psalm-param Closure(T):U $func - * - * @return static - * @psalm-return static - * - * @psalm-template U - */ - public function map(Closure $func) - { - return $this->createFrom(array_map($func, $this->elements)); - } - - /** - * {@inheritDoc} - */ - public function reduce(Closure $func, $initial = null) - { - return array_reduce($this->elements, $func, $initial); - } - - /** - * {@inheritDoc} - * - * @psalm-param Closure(T, TKey):bool $p - * - * @return static - * @psalm-return static - */ - public function filter(Closure $p) - { - return $this->createFrom(array_filter($this->elements, $p, ARRAY_FILTER_USE_BOTH)); - } - - /** - * {@inheritDoc} - */ - public function findFirst(Closure $p) - { - foreach ($this->elements as $key => $element) { - if ($p($key, $element)) { - return $element; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function forAll(Closure $p) - { - foreach ($this->elements as $key => $element) { - if (! $p($key, $element)) { - return false; - } - } - - return true; - } - - /** - * {@inheritDoc} - */ - public function partition(Closure $p) - { - $matches = $noMatches = []; - - foreach ($this->elements as $key => $element) { - if ($p($key, $element)) { - $matches[$key] = $element; - } else { - $noMatches[$key] = $element; - } - } - - return [$this->createFrom($matches), $this->createFrom($noMatches)]; - } - - /** - * Returns a string representation of this object. - * {@inheritDoc} - * - * @return string - */ - #[ReturnTypeWillChange] - public function __toString() - { - return self::class . '@' . spl_object_hash($this); - } - - /** - * {@inheritDoc} - */ - public function clear() - { - $this->elements = []; - } - - /** - * {@inheritDoc} - */ - public function slice(int $offset, int|null $length = null) - { - return array_slice($this->elements, $offset, $length, true); - } - - /** @psalm-return Collection&Selectable */ - public function matching(Criteria $criteria) - { - $expr = $criteria->getWhereExpression(); - $filtered = $this->elements; - - if ($expr) { - $visitor = new ClosureExpressionVisitor(); - $filter = $visitor->dispatch($expr); - $filtered = array_filter($filtered, $filter); - } - - $orderings = $criteria->orderings(); - - if ($orderings) { - $next = null; - foreach (array_reverse($orderings) as $field => $ordering) { - $next = ClosureExpressionVisitor::sortByField($field, $ordering === Order::Descending ? -1 : 1, $next); - } - - uasort($filtered, $next); - } - - $offset = $criteria->getFirstResult(); - $length = $criteria->getMaxResults(); - - if ($offset !== null && $offset > 0 || $length !== null && $length > 0) { - $filtered = array_slice($filtered, (int) $offset, $length, true); - } - - return $this->createFrom($filtered); - } -} diff --git a/vendor/doctrine/collections/src/Collection.php b/vendor/doctrine/collections/src/Collection.php deleted file mode 100644 index c3c62aa..0000000 --- a/vendor/doctrine/collections/src/Collection.php +++ /dev/null @@ -1,117 +0,0 @@ -ordered map that can also be used - * like a list. - * - * A Collection has an internal iterator just like a PHP array. In addition, - * a Collection can be iterated with external iterators, which is preferable. - * To use an external iterator simply use the foreach language construct to - * iterate over the collection (which calls {@link getIterator()} internally) or - * explicitly retrieve an iterator though {@link getIterator()} which can then be - * used to iterate over the collection. - * You can not rely on the internal iterator of the collection being at a certain - * position unless you explicitly positioned it before. Prefer iteration with - * external iterators. - * - * @psalm-template TKey of array-key - * @psalm-template T - * @template-extends ReadableCollection - * @template-extends ArrayAccess - */ -interface Collection extends ReadableCollection, ArrayAccess -{ - /** - * Adds an element at the end of the collection. - * - * @param mixed $element The element to add. - * @psalm-param T $element - * - * @return void we will require a native return type declaration in 3.0 - */ - public function add(mixed $element); - - /** - * Clears the collection, removing all elements. - * - * @return void - */ - public function clear(); - - /** - * Removes the element at the specified index from the collection. - * - * @param string|int $key The key/index of the element to remove. - * @psalm-param TKey $key - * - * @return mixed The removed element or NULL, if the collection did not contain the element. - * @psalm-return T|null - */ - public function remove(string|int $key); - - /** - * Removes the specified element from the collection, if it is found. - * - * @param mixed $element The element to remove. - * @psalm-param T $element - * - * @return bool TRUE if this collection contained the specified element, FALSE otherwise. - */ - public function removeElement(mixed $element); - - /** - * Sets an element in the collection at the specified key/index. - * - * @param string|int $key The key/index of the element to set. - * @param mixed $value The element to set. - * @psalm-param TKey $key - * @psalm-param T $value - * - * @return void - */ - public function set(string|int $key, mixed $value); - - /** - * {@inheritDoc} - * - * @psalm-param Closure(T):U $func - * - * @return Collection - * @psalm-return Collection - * - * @psalm-template U - */ - public function map(Closure $func); - - /** - * {@inheritDoc} - * - * @psalm-param Closure(T, TKey):bool $p - * - * @return Collection A collection with the results of the filter operation. - * @psalm-return Collection - */ - public function filter(Closure $p); - - /** - * {@inheritDoc} - * - * @psalm-param Closure(TKey, T):bool $p - * - * @return Collection[] An array with two elements. The first element contains the collection - * of elements where the predicate returned TRUE, the second element - * contains the collection of elements where the predicate returned FALSE. - * @psalm-return array{0: Collection, 1: Collection} - */ - public function partition(Closure $p); -} diff --git a/vendor/doctrine/collections/src/Criteria.php b/vendor/doctrine/collections/src/Criteria.php deleted file mode 100644 index 4c8a0a7..0000000 --- a/vendor/doctrine/collections/src/Criteria.php +++ /dev/null @@ -1,285 +0,0 @@ - */ - private array $orderings = []; - - private int|null $firstResult = null; - private int|null $maxResults = null; - - /** - * Creates an instance of the class. - * - * @return static - */ - public static function create() - { - return new static(); - } - - /** - * Returns the expression builder. - * - * @return ExpressionBuilder - */ - public static function expr() - { - if (self::$expressionBuilder === null) { - self::$expressionBuilder = new ExpressionBuilder(); - } - - return self::$expressionBuilder; - } - - /** - * Construct a new Criteria. - * - * @param array|null $orderings - */ - public function __construct( - private Expression|null $expression = null, - array|null $orderings = null, - int|null $firstResult = null, - int|null $maxResults = null, - ) { - $this->expression = $expression; - - if ($firstResult === null && func_num_args() > 2) { - Deprecation::trigger( - 'doctrine/collections', - 'https://github.com/doctrine/collections/pull/311', - 'Passing null as $firstResult to the constructor of %s is deprecated. Pass 0 instead or omit the argument.', - self::class, - ); - } - - $this->setFirstResult($firstResult); - $this->setMaxResults($maxResults); - - if ($orderings === null) { - return; - } - - $this->orderBy($orderings); - } - - /** - * Sets the where expression to evaluate when this Criteria is searched for. - * - * @return $this - */ - public function where(Expression $expression) - { - $this->expression = $expression; - - return $this; - } - - /** - * Appends the where expression to evaluate when this Criteria is searched for - * using an AND with previous expression. - * - * @return $this - */ - public function andWhere(Expression $expression) - { - if ($this->expression === null) { - return $this->where($expression); - } - - $this->expression = new CompositeExpression( - CompositeExpression::TYPE_AND, - [$this->expression, $expression], - ); - - return $this; - } - - /** - * Appends the where expression to evaluate when this Criteria is searched for - * using an OR with previous expression. - * - * @return $this - */ - public function orWhere(Expression $expression) - { - if ($this->expression === null) { - return $this->where($expression); - } - - $this->expression = new CompositeExpression( - CompositeExpression::TYPE_OR, - [$this->expression, $expression], - ); - - return $this; - } - - /** - * Gets the expression attached to this Criteria. - * - * @return Expression|null - */ - public function getWhereExpression() - { - return $this->expression; - } - - /** - * Gets the current orderings of this Criteria. - * - * @deprecated use orderings() instead - * - * @return array - */ - public function getOrderings() - { - Deprecation::trigger( - 'doctrine/collections', - 'https://github.com/doctrine/collections/pull/389', - 'Calling %s() is deprecated. Use %s::orderings() instead.', - __METHOD__, - self::class, - ); - - return array_map( - static fn (Order $ordering): string => $ordering->value, - $this->orderings, - ); - } - - /** - * Gets the current orderings of this Criteria. - * - * @return array - */ - public function orderings(): array - { - return $this->orderings; - } - - /** - * Sets the ordering of the result of this Criteria. - * - * Keys are field and values are the order, being a valid Order enum case. - * - * @see Order::Ascending - * @see Order::Descending - * - * @param array $orderings - * - * @return $this - */ - public function orderBy(array $orderings) - { - $method = __METHOD__; - $this->orderings = array_map( - static function (string|Order $ordering) use ($method): Order { - if ($ordering instanceof Order) { - return $ordering; - } - - static $triggered = false; - - if (! $triggered) { - Deprecation::trigger( - 'doctrine/collections', - 'https://github.com/doctrine/collections/pull/389', - 'Passing non-Order enum values to %s() is deprecated. Pass Order enum values instead.', - $method, - ); - } - - $triggered = true; - - return strtoupper($ordering) === Order::Ascending->value ? Order::Ascending : Order::Descending; - }, - $orderings, - ); - - return $this; - } - - /** - * Gets the current first result option of this Criteria. - * - * @return int|null - */ - public function getFirstResult() - { - return $this->firstResult; - } - - /** - * Set the number of first result that this Criteria should return. - * - * @param int|null $firstResult The value to set. - * - * @return $this - */ - public function setFirstResult(int|null $firstResult) - { - if ($firstResult === null) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/collections', - 'https://github.com/doctrine/collections/pull/311', - 'Passing null to %s() is deprecated, pass 0 instead.', - __METHOD__, - ); - } - - $this->firstResult = $firstResult; - - return $this; - } - - /** - * Gets maxResults. - * - * @return int|null - */ - public function getMaxResults() - { - return $this->maxResults; - } - - /** - * Sets maxResults. - * - * @param int|null $maxResults The value to set. - * - * @return $this - */ - public function setMaxResults(int|null $maxResults) - { - $this->maxResults = $maxResults; - - return $this; - } -} diff --git a/vendor/doctrine/collections/src/Expr/ClosureExpressionVisitor.php b/vendor/doctrine/collections/src/Expr/ClosureExpressionVisitor.php deleted file mode 100644 index 4319b9b..0000000 --- a/vendor/doctrine/collections/src/Expr/ClosureExpressionVisitor.php +++ /dev/null @@ -1,222 +0,0 @@ -$accessor(); - } - } - - if (preg_match('/^is[A-Z]+/', $field) === 1 && method_exists($object, $field)) { - return $object->$field(); - } - - // __call should be triggered for get. - $accessor = $accessors[0] . $field; - - if (method_exists($object, '__call')) { - return $object->$accessor(); - } - - if ($object instanceof ArrayAccess) { - return $object[$field]; - } - - if (isset($object->$field)) { - return $object->$field; - } - - // camelcase field name to support different variable naming conventions - $ccField = preg_replace_callback('/_(.?)/', static fn ($matches) => strtoupper((string) $matches[1]), $field); - - foreach ($accessors as $accessor) { - $accessor .= $ccField; - - if (method_exists($object, $accessor)) { - return $object->$accessor(); - } - } - - return $object->$field; - } - - /** - * Helper for sorting arrays of objects based on multiple fields + orientations. - * - * @return Closure - */ - public static function sortByField(string $name, int $orientation = 1, Closure|null $next = null) - { - if (! $next) { - $next = static fn (): int => 0; - } - - return static function ($a, $b) use ($name, $next, $orientation): int { - $aValue = ClosureExpressionVisitor::getObjectFieldValue($a, $name); - - $bValue = ClosureExpressionVisitor::getObjectFieldValue($b, $name); - - if ($aValue === $bValue) { - return $next($a, $b); - } - - return ($aValue > $bValue ? 1 : -1) * $orientation; - }; - } - - /** - * {@inheritDoc} - */ - public function walkComparison(Comparison $comparison) - { - $field = $comparison->getField(); - $value = $comparison->getValue()->getValue(); - - return match ($comparison->getOperator()) { - Comparison::EQ => static fn ($object): bool => self::getObjectFieldValue($object, $field) === $value, - Comparison::NEQ => static fn ($object): bool => self::getObjectFieldValue($object, $field) !== $value, - Comparison::LT => static fn ($object): bool => self::getObjectFieldValue($object, $field) < $value, - Comparison::LTE => static fn ($object): bool => self::getObjectFieldValue($object, $field) <= $value, - Comparison::GT => static fn ($object): bool => self::getObjectFieldValue($object, $field) > $value, - Comparison::GTE => static fn ($object): bool => self::getObjectFieldValue($object, $field) >= $value, - Comparison::IN => static function ($object) use ($field, $value): bool { - $fieldValue = ClosureExpressionVisitor::getObjectFieldValue($object, $field); - - return in_array($fieldValue, $value, is_scalar($fieldValue)); - }, - Comparison::NIN => static function ($object) use ($field, $value): bool { - $fieldValue = ClosureExpressionVisitor::getObjectFieldValue($object, $field); - - return ! in_array($fieldValue, $value, is_scalar($fieldValue)); - }, - Comparison::CONTAINS => static fn ($object): bool => str_contains((string) self::getObjectFieldValue($object, $field), (string) $value), - Comparison::MEMBER_OF => static function ($object) use ($field, $value): bool { - $fieldValues = ClosureExpressionVisitor::getObjectFieldValue($object, $field); - - if (! is_array($fieldValues)) { - $fieldValues = iterator_to_array($fieldValues); - } - - return in_array($value, $fieldValues, true); - }, - Comparison::STARTS_WITH => static fn ($object): bool => str_starts_with((string) self::getObjectFieldValue($object, $field), (string) $value), - Comparison::ENDS_WITH => static fn ($object): bool => str_ends_with((string) self::getObjectFieldValue($object, $field), (string) $value), - default => throw new RuntimeException('Unknown comparison operator: ' . $comparison->getOperator()), - }; - } - - /** - * {@inheritDoc} - */ - public function walkValue(Value $value) - { - return $value->getValue(); - } - - /** - * {@inheritDoc} - */ - public function walkCompositeExpression(CompositeExpression $expr) - { - $expressionList = []; - - foreach ($expr->getExpressionList() as $child) { - $expressionList[] = $this->dispatch($child); - } - - return match ($expr->getType()) { - CompositeExpression::TYPE_AND => $this->andExpressions($expressionList), - CompositeExpression::TYPE_OR => $this->orExpressions($expressionList), - CompositeExpression::TYPE_NOT => $this->notExpression($expressionList), - default => throw new RuntimeException('Unknown composite ' . $expr->getType()), - }; - } - - /** @param callable[] $expressions */ - private function andExpressions(array $expressions): Closure - { - return static function ($object) use ($expressions): bool { - foreach ($expressions as $expression) { - if (! $expression($object)) { - return false; - } - } - - return true; - }; - } - - /** @param callable[] $expressions */ - private function orExpressions(array $expressions): Closure - { - return static function ($object) use ($expressions): bool { - foreach ($expressions as $expression) { - if ($expression($object)) { - return true; - } - } - - return false; - }; - } - - /** @param callable[] $expressions */ - private function notExpression(array $expressions): Closure - { - return static fn ($object) => ! $expressions[0]($object); - } -} diff --git a/vendor/doctrine/collections/src/Expr/Comparison.php b/vendor/doctrine/collections/src/Expr/Comparison.php deleted file mode 100644 index f1ea07f..0000000 --- a/vendor/doctrine/collections/src/Expr/Comparison.php +++ /dev/null @@ -1,62 +0,0 @@ -'; - final public const LT = '<'; - final public const LTE = '<='; - final public const GT = '>'; - final public const GTE = '>='; - final public const IS = '='; // no difference with EQ - final public const IN = 'IN'; - final public const NIN = 'NIN'; - final public const CONTAINS = 'CONTAINS'; - final public const MEMBER_OF = 'MEMBER_OF'; - final public const STARTS_WITH = 'STARTS_WITH'; - final public const ENDS_WITH = 'ENDS_WITH'; - - private readonly Value $value; - - public function __construct(private readonly string $field, private readonly string $op, mixed $value) - { - if (! ($value instanceof Value)) { - $value = new Value($value); - } - - $this->value = $value; - } - - /** @return string */ - public function getField() - { - return $this->field; - } - - /** @return Value */ - public function getValue() - { - return $this->value; - } - - /** @return string */ - public function getOperator() - { - return $this->op; - } - - /** - * {@inheritDoc} - */ - public function visit(ExpressionVisitor $visitor) - { - return $visitor->walkComparison($this); - } -} diff --git a/vendor/doctrine/collections/src/Expr/CompositeExpression.php b/vendor/doctrine/collections/src/Expr/CompositeExpression.php deleted file mode 100644 index b7b4544..0000000 --- a/vendor/doctrine/collections/src/Expr/CompositeExpression.php +++ /dev/null @@ -1,70 +0,0 @@ - */ - private array $expressions = []; - - /** - * @param Expression[] $expressions - * - * @throws RuntimeException - */ - public function __construct(private readonly string $type, array $expressions) - { - foreach ($expressions as $expr) { - if ($expr instanceof Value) { - throw new RuntimeException('Values are not supported expressions as children of and/or expressions.'); - } - - if (! ($expr instanceof Expression)) { - throw new RuntimeException('No expression given to CompositeExpression.'); - } - - $this->expressions[] = $expr; - } - - if ($type === self::TYPE_NOT && count($this->expressions) !== 1) { - throw new RuntimeException('Not expression only allows one expression as child.'); - } - } - - /** - * Returns the list of expressions nested in this composite. - * - * @return list - */ - public function getExpressionList() - { - return $this->expressions; - } - - /** @return string */ - public function getType() - { - return $this->type; - } - - /** - * {@inheritDoc} - */ - public function visit(ExpressionVisitor $visitor) - { - return $visitor->walkCompositeExpression($this); - } -} diff --git a/vendor/doctrine/collections/src/Expr/Expression.php b/vendor/doctrine/collections/src/Expr/Expression.php deleted file mode 100644 index 70ad45f..0000000 --- a/vendor/doctrine/collections/src/Expr/Expression.php +++ /dev/null @@ -1,14 +0,0 @@ - $this->walkComparison($expr), - $expr instanceof Value => $this->walkValue($expr), - $expr instanceof CompositeExpression => $this->walkCompositeExpression($expr), - default => throw new RuntimeException('Unknown Expression ' . $expr::class), - }; - } -} diff --git a/vendor/doctrine/collections/src/Expr/Value.php b/vendor/doctrine/collections/src/Expr/Value.php deleted file mode 100644 index 776770d..0000000 --- a/vendor/doctrine/collections/src/Expr/Value.php +++ /dev/null @@ -1,26 +0,0 @@ -value; - } - - /** - * {@inheritDoc} - */ - public function visit(ExpressionVisitor $visitor) - { - return $visitor->walkValue($this); - } -} diff --git a/vendor/doctrine/collections/src/ExpressionBuilder.php b/vendor/doctrine/collections/src/ExpressionBuilder.php deleted file mode 100644 index fc25e3a..0000000 --- a/vendor/doctrine/collections/src/ExpressionBuilder.php +++ /dev/null @@ -1,123 +0,0 @@ - - */ -interface ReadableCollection extends Countable, IteratorAggregate -{ - /** - * Checks whether an element is contained in the collection. - * This is an O(n) operation, where n is the size of the collection. - * - * @param mixed $element The element to search for. - * @psalm-param TMaybeContained $element - * - * @return bool TRUE if the collection contains the element, FALSE otherwise. - * @psalm-return (TMaybeContained is T ? bool : false) - * - * @template TMaybeContained - */ - public function contains(mixed $element); - - /** - * Checks whether the collection is empty (contains no elements). - * - * @return bool TRUE if the collection is empty, FALSE otherwise. - */ - public function isEmpty(); - - /** - * Checks whether the collection contains an element with the specified key/index. - * - * @param string|int $key The key/index to check for. - * @psalm-param TKey $key - * - * @return bool TRUE if the collection contains an element with the specified key/index, - * FALSE otherwise. - */ - public function containsKey(string|int $key); - - /** - * Gets the element at the specified key/index. - * - * @param string|int $key The key/index of the element to retrieve. - * @psalm-param TKey $key - * - * @return mixed - * @psalm-return T|null - */ - public function get(string|int $key); - - /** - * Gets all keys/indices of the collection. - * - * @return int[]|string[] The keys/indices of the collection, in the order of the corresponding - * elements in the collection. - * @psalm-return list - */ - public function getKeys(); - - /** - * Gets all values of the collection. - * - * @return mixed[] The values of all elements in the collection, in the - * order they appear in the collection. - * @psalm-return list - */ - public function getValues(); - - /** - * Gets a native PHP array representation of the collection. - * - * @return mixed[] - * @psalm-return array - */ - public function toArray(); - - /** - * Sets the internal iterator to the first element in the collection and returns this element. - * - * @return mixed - * @psalm-return T|false - */ - public function first(); - - /** - * Sets the internal iterator to the last element in the collection and returns this element. - * - * @return mixed - * @psalm-return T|false - */ - public function last(); - - /** - * Gets the key/index of the element at the current iterator position. - * - * @return int|string|null - * @psalm-return TKey|null - */ - public function key(); - - /** - * Gets the element of the collection at the current iterator position. - * - * @return mixed - * @psalm-return T|false - */ - public function current(); - - /** - * Moves the internal iterator position to the next element and returns this element. - * - * @return mixed - * @psalm-return T|false - */ - public function next(); - - /** - * Extracts a slice of $length elements starting at position $offset from the Collection. - * - * If $length is null it returns all elements from $offset to the end of the Collection. - * Keys have to be preserved by this method. Calling this method will only return the - * selected slice and NOT change the elements contained in the collection slice is called on. - * - * @param int $offset The offset to start from. - * @param int|null $length The maximum number of elements to return, or null for no limit. - * - * @return mixed[] - * @psalm-return array - */ - public function slice(int $offset, int|null $length = null); - - /** - * Tests for the existence of an element that satisfies the given predicate. - * - * @param Closure $p The predicate. - * @psalm-param Closure(TKey, T):bool $p - * - * @return bool TRUE if the predicate is TRUE for at least one element, FALSE otherwise. - */ - public function exists(Closure $p); - - /** - * Returns all the elements of this collection that satisfy the predicate p. - * The order of the elements is preserved. - * - * @param Closure $p The predicate used for filtering. - * @psalm-param Closure(T, TKey):bool $p - * - * @return ReadableCollection A collection with the results of the filter operation. - * @psalm-return ReadableCollection - */ - public function filter(Closure $p); - - /** - * Applies the given function to each element in the collection and returns - * a new collection with the elements returned by the function. - * - * @psalm-param Closure(T):U $func - * - * @return ReadableCollection - * @psalm-return ReadableCollection - * - * @psalm-template U - */ - public function map(Closure $func); - - /** - * Partitions this collection in two collections according to a predicate. - * Keys are preserved in the resulting collections. - * - * @param Closure $p The predicate on which to partition. - * @psalm-param Closure(TKey, T):bool $p - * - * @return ReadableCollection[] An array with two elements. The first element contains the collection - * of elements where the predicate returned TRUE, the second element - * contains the collection of elements where the predicate returned FALSE. - * @psalm-return array{0: ReadableCollection, 1: ReadableCollection} - */ - public function partition(Closure $p); - - /** - * Tests whether the given predicate p holds for all elements of this collection. - * - * @param Closure $p The predicate. - * @psalm-param Closure(TKey, T):bool $p - * - * @return bool TRUE, if the predicate yields TRUE for all elements, FALSE otherwise. - */ - public function forAll(Closure $p); - - /** - * Gets the index/key of a given element. The comparison of two elements is strict, - * that means not only the value but also the type must match. - * For objects this means reference equality. - * - * @param mixed $element The element to search for. - * @psalm-param TMaybeContained $element - * - * @return int|string|bool The key/index of the element or FALSE if the element was not found. - * @psalm-return (TMaybeContained is T ? TKey|false : false) - * - * @template TMaybeContained - */ - public function indexOf(mixed $element); - - /** - * Returns the first element of this collection that satisfies the predicate p. - * - * @param Closure $p The predicate. - * @psalm-param Closure(TKey, T):bool $p - * - * @return mixed The first element respecting the predicate, - * null if no element respects the predicate. - * @psalm-return T|null - */ - public function findFirst(Closure $p); - - /** - * Applies iteratively the given function to each element in the collection, - * so as to reduce the collection to a single value. - * - * @psalm-param Closure(TReturn|TInitial, T):TReturn $func - * @psalm-param TInitial $initial - * - * @return mixed - * @psalm-return TReturn|TInitial - * - * @psalm-template TReturn - * @psalm-template TInitial - */ - public function reduce(Closure $func, mixed $initial = null); -} diff --git a/vendor/doctrine/collections/src/Selectable.php b/vendor/doctrine/collections/src/Selectable.php deleted file mode 100644 index 5fa87cb..0000000 --- a/vendor/doctrine/collections/src/Selectable.php +++ /dev/null @@ -1,32 +0,0 @@ -&Selectable - * @psalm-return ReadableCollection&Selectable - */ - public function matching(Criteria $criteria); -} diff --git a/vendor/doctrine/dbal/CONTRIBUTING.md b/vendor/doctrine/dbal/CONTRIBUTING.md deleted file mode 100644 index 31b6eff..0000000 --- a/vendor/doctrine/dbal/CONTRIBUTING.md +++ /dev/null @@ -1,6 +0,0 @@ -This repository has [guidelines specific to testing][testing guidelines], and -Doctrine has [general contributing guidelines][contributor workflow], make -sure you follow both. - -[contributor workflow]: https://www.doctrine-project.org/contribute/index.html -[testing guidelines]: https://www.doctrine-project.org/projects/doctrine-dbal/en/stable/reference/testing.html diff --git a/vendor/doctrine/dbal/README.md b/vendor/doctrine/dbal/README.md deleted file mode 100644 index 7f2f66c..0000000 --- a/vendor/doctrine/dbal/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# Doctrine DBAL - -| [5.0-dev][5.0] | [4.2-dev][4.2] | [4.1][4.1] | [3.9][3.9] | -|:---------------------------------------------------:|:---------------------------------------------------:|:---------------------------------------------------:|:---------------------------------------------------:| -| [![GitHub Actions][GA 5.0 image]][GA 5.0] | [![GitHub Actions][GA 4.2 image]][GA 4.2] | [![GitHub Actions][GA 4.1 image]][GA 4.1] | [![GitHub Actions][GA 3.9 image]][GA 3.9] | -| [![AppVeyor][AppVeyor 5.0 image]][AppVeyor 5.0] | [![AppVeyor][AppVeyor 4.2 image]][AppVeyor 4.2] | [![AppVeyor][AppVeyor 4.1 image]][AppVeyor 4.1] | [![AppVeyor][AppVeyor 3.9 image]][AppVeyor 3.9] | -| [![Code Coverage][Coverage 5.0 image]][CodeCov 5.0] | [![Code Coverage][Coverage 4.2 image]][CodeCov 4.2] | [![Code Coverage][Coverage 4.1 image]][CodeCov 4.1] | [![Code Coverage][Coverage 3.9 image]][CodeCov 3.9] | -| N/A | N/A | [![Type Coverage][TypeCov image]][TypeCov] | N/A | - -Powerful ***D***ata***B***ase ***A***bstraction ***L***ayer with many features for database schema introspection and schema management. - -## More resources: - -* [Website](http://www.doctrine-project.org/projects/dbal.html) -* [Documentation](http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/) -* [Issue Tracker](https://github.com/doctrine/dbal/issues) - - [Coverage 5.0 image]: https://codecov.io/gh/doctrine/dbal/branch/5.0.x/graph/badge.svg - [5.0]: https://github.com/doctrine/dbal/tree/5.0.x - [CodeCov 5.0]: https://codecov.io/gh/doctrine/dbal/branch/5.0.x - [AppVeyor 5.0]: https://ci.appveyor.com/project/doctrine/dbal/branch/5.0.x - [AppVeyor 5.0 image]: https://ci.appveyor.com/api/projects/status/i88kitq8qpbm0vie/branch/5.0.x?svg=true - [GA 5.0]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A5.0.x - [GA 5.0 image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg?branch=5.0.x - - [Coverage 4.2 image]: https://codecov.io/gh/doctrine/dbal/branch/4.2.x/graph/badge.svg - [4.2]: https://github.com/doctrine/dbal/tree/4.2.x - [CodeCov 4.2]: https://codecov.io/gh/doctrine/dbal/branch/4.2.x - [AppVeyor 4.2]: https://ci.appveyor.com/project/doctrine/dbal/branch/4.2.x - [AppVeyor 4.2 image]: https://ci.appveyor.com/api/projects/status/i88kitq8qpbm0vie/branch/4.2.x?svg=true - [GA 4.2]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A4.2.x - [GA 4.2 image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg?branch=4.2.x - - [Coverage 4.1 image]: https://codecov.io/gh/doctrine/dbal/branch/4.1.x/graph/badge.svg - [4.1]: https://github.com/doctrine/dbal/tree/4.1.x - [CodeCov 4.1]: https://codecov.io/gh/doctrine/dbal/branch/4.1.x - [AppVeyor 4.1]: https://ci.appveyor.com/project/doctrine/dbal/branch/4.1.x - [AppVeyor 4.1 image]: https://ci.appveyor.com/api/projects/status/i88kitq8qpbm0vie/branch/4.1.x?svg=true - [GA 4.1]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A4.1.x - [GA 4.1 image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg?branch=4.1.x - [TypeCov]: https://shepherd.dev/github/doctrine/dbal - [TypeCov image]: https://shepherd.dev/github/doctrine/dbal/coverage.svg - - [Coverage 3.9 image]: https://codecov.io/gh/doctrine/dbal/branch/3.9.x/graph/badge.svg - [3.9]: https://github.com/doctrine/dbal/tree/3.9.x - [CodeCov 3.9]: https://codecov.io/gh/doctrine/dbal/branch/3.9.x - [AppVeyor 3.9]: https://ci.appveyor.com/project/doctrine/dbal/branch/3.9.x - [AppVeyor 3.9 image]: https://ci.appveyor.com/api/projects/status/i88kitq8qpbm0vie/branch/3.9.x?svg=true - [GA 3.9]: https://github.com/doctrine/dbal/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A3.9.x - [GA 3.9 image]: https://github.com/doctrine/dbal/workflows/Continuous%20Integration/badge.svg?branch=3.9.x diff --git a/vendor/doctrine/dbal/bin/doctrine-dbal.php b/vendor/doctrine/dbal/bin/doctrine-dbal.php deleted file mode 100644 index 4a88f78..0000000 --- a/vendor/doctrine/dbal/bin/doctrine-dbal.php +++ /dev/null @@ -1,55 +0,0 @@ -> */ - private array $data; - - private int $columnCount = 0; - private int $num = 0; - - /** @param list> $data */ - public function __construct(array $data) - { - $this->data = $data; - if (count($data) === 0) { - return; - } - - $this->columnCount = count($data[0]); - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - $row = $this->fetch(); - - if ($row === false) { - return false; - } - - return array_values($row); - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - return $this->fetch(); - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - $row = $this->fetch(); - - if ($row === false) { - return false; - } - - return reset($row); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return FetchUtils::fetchAllNumeric($this); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - return FetchUtils::fetchAllAssociative($this); - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return FetchUtils::fetchFirstColumn($this); - } - - public function rowCount(): int - { - return count($this->data); - } - - public function columnCount(): int - { - return $this->columnCount; - } - - public function free(): void - { - $this->data = []; - } - - /** @return array|false */ - private function fetch() - { - if (! isset($this->data[$this->num])) { - return false; - } - - return $this->data[$this->num++]; - } -} diff --git a/vendor/doctrine/dbal/src/Cache/CacheException.php b/vendor/doctrine/dbal/src/Cache/CacheException.php deleted file mode 100644 index 18e95d6..0000000 --- a/vendor/doctrine/dbal/src/Cache/CacheException.php +++ /dev/null @@ -1,21 +0,0 @@ -lifetime = $lifetime; - $this->cacheKey = $cacheKey; - if ($resultCache instanceof CacheItemPoolInterface) { - $this->resultCache = $resultCache; - } elseif ($resultCache instanceof Cache) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4620', - 'Passing an instance of %s to %s as $resultCache is deprecated. Pass an instance of %s instead.', - Cache::class, - __METHOD__, - CacheItemPoolInterface::class, - ); - - $this->resultCache = CacheAdapter::wrap($resultCache); - } elseif ($resultCache !== null) { - throw new TypeError(sprintf( - '$resultCache: Expected either null or an instance of %s or %s, got %s.', - CacheItemPoolInterface::class, - Cache::class, - get_class($resultCache), - )); - } - } - - public function getResultCache(): ?CacheItemPoolInterface - { - return $this->resultCache; - } - - /** - * @deprecated Use {@see getResultCache()} instead. - * - * @return Cache|null - */ - public function getResultCacheDriver() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4620', - '%s is deprecated, call getResultCache() instead.', - __METHOD__, - ); - - return $this->resultCache !== null ? DoctrineProvider::wrap($this->resultCache) : null; - } - - /** @return int */ - public function getLifetime() - { - return $this->lifetime; - } - - /** - * @return string - * - * @throws CacheException - */ - public function getCacheKey() - { - if ($this->cacheKey === null) { - throw CacheException::noCacheKey(); - } - - return $this->cacheKey; - } - - /** - * Generates the real cache key from query, params, types and connection parameters. - * - * @param string $sql - * @param list|array $params - * @param array|array $types - * @param array $connectionParams - * - * @return array{string, string} - */ - public function generateCacheKeys($sql, $params, $types, array $connectionParams = []) - { - if (isset($connectionParams['password'])) { - unset($connectionParams['password']); - } - - $realCacheKey = 'query=' . $sql . - '¶ms=' . serialize($params) . - '&types=' . serialize($types) . - '&connectionParams=' . hash('sha256', serialize($connectionParams)); - - // should the key be automatically generated using the inputs or is the cache key set? - $cacheKey = $this->cacheKey ?? sha1($realCacheKey); - - return [$cacheKey, $realCacheKey]; - } - - public function setResultCache(CacheItemPoolInterface $cache): QueryCacheProfile - { - return new QueryCacheProfile($this->lifetime, $this->cacheKey, $cache); - } - - /** - * @deprecated Use {@see setResultCache()} instead. - * - * @return QueryCacheProfile - */ - public function setResultCacheDriver(Cache $cache) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4620', - '%s is deprecated, call setResultCache() instead.', - __METHOD__, - ); - - return new QueryCacheProfile($this->lifetime, $this->cacheKey, CacheAdapter::wrap($cache)); - } - - /** - * @param string|null $cacheKey - * - * @return QueryCacheProfile - */ - public function setCacheKey($cacheKey) - { - return new QueryCacheProfile($this->lifetime, $cacheKey, $this->resultCache); - } - - /** - * @param int $lifetime - * - * @return QueryCacheProfile - */ - public function setLifetime($lifetime) - { - return new QueryCacheProfile($lifetime, $this->cacheKey, $this->resultCache); - } -} diff --git a/vendor/doctrine/dbal/src/ColumnCase.php b/vendor/doctrine/dbal/src/ColumnCase.php deleted file mode 100644 index cb0dd40..0000000 --- a/vendor/doctrine/dbal/src/ColumnCase.php +++ /dev/null @@ -1,28 +0,0 @@ -schemaAssetsFilter = static function (): bool { - return true; - }; - } - - /** - * Sets the SQL logger to use. Defaults to NULL which means SQL logging is disabled. - * - * @deprecated Use {@see setMiddlewares()} and {@see \Doctrine\DBAL\Logging\Middleware} instead. - */ - public function setSQLLogger(?SQLLogger $logger = null): void - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4967', - '%s is deprecated, use setMiddlewares() and Logging\\Middleware instead.', - __METHOD__, - ); - - $this->sqlLogger = $logger; - } - - /** - * Gets the SQL logger that is used. - * - * @deprecated - */ - public function getSQLLogger(): ?SQLLogger - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4967', - '%s is deprecated.', - __METHOD__, - ); - - return $this->sqlLogger; - } - - /** - * Gets the cache driver implementation that is used for query result caching. - */ - public function getResultCache(): ?CacheItemPoolInterface - { - return $this->resultCache; - } - - /** - * Gets the cache driver implementation that is used for query result caching. - * - * @deprecated Use {@see getResultCache()} instead. - */ - public function getResultCacheImpl(): ?Cache - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4620', - '%s is deprecated, call getResultCache() instead.', - __METHOD__, - ); - - return $this->resultCacheImpl; - } - - /** - * Sets the cache driver implementation that is used for query result caching. - */ - public function setResultCache(CacheItemPoolInterface $cache): void - { - $this->resultCacheImpl = DoctrineProvider::wrap($cache); - $this->resultCache = $cache; - } - - /** - * Sets the cache driver implementation that is used for query result caching. - * - * @deprecated Use {@see setResultCache()} instead. - */ - public function setResultCacheImpl(Cache $cacheImpl): void - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4620', - '%s is deprecated, call setResultCache() instead.', - __METHOD__, - ); - - $this->resultCacheImpl = $cacheImpl; - $this->resultCache = CacheAdapter::wrap($cacheImpl); - } - - /** - * Sets the callable to use to filter schema assets. - */ - public function setSchemaAssetsFilter(?callable $callable = null): void - { - if (func_num_args() < 1) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5483', - 'Not passing an argument to %s is deprecated.', - __METHOD__, - ); - } elseif ($callable === null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5483', - 'Using NULL as a schema asset filter is deprecated.' - . ' Use a callable that always returns true instead.', - ); - } - - $this->schemaAssetsFilter = $callable; - } - - /** - * Returns the callable to use to filter schema assets. - */ - public function getSchemaAssetsFilter(): ?callable - { - return $this->schemaAssetsFilter; - } - - /** - * Sets the default auto-commit mode for connections. - * - * If a connection is in auto-commit mode, then all its SQL statements will be executed and committed as individual - * transactions. Otherwise, its SQL statements are grouped into transactions that are terminated by a call to either - * the method commit or the method rollback. By default, new connections are in auto-commit mode. - * - * @see getAutoCommit - * - * @param bool $autoCommit True to enable auto-commit mode; false to disable it - */ - public function setAutoCommit(bool $autoCommit): void - { - $this->autoCommit = $autoCommit; - } - - /** - * Returns the default auto-commit mode for connections. - * - * @see setAutoCommit - * - * @return bool True if auto-commit mode is enabled by default for connections, false otherwise. - */ - public function getAutoCommit(): bool - { - return $this->autoCommit; - } - - /** - * @param Middleware[] $middlewares - * - * @return $this - */ - public function setMiddlewares(array $middlewares): self - { - $this->middlewares = $middlewares; - - return $this; - } - - /** @return Middleware[] */ - public function getMiddlewares(): array - { - return $this->middlewares; - } - - public function getSchemaManagerFactory(): ?SchemaManagerFactory - { - return $this->schemaManagerFactory; - } - - /** @return $this */ - public function setSchemaManagerFactory(SchemaManagerFactory $schemaManagerFactory): self - { - $this->schemaManagerFactory = $schemaManagerFactory; - - return $this; - } - - public function getDisableTypeComments(): bool - { - return $this->disableTypeComments; - } - - /** @return $this */ - public function setDisableTypeComments(bool $disableTypeComments): self - { - $this->disableTypeComments = $disableTypeComments; - - return $this; - } -} diff --git a/vendor/doctrine/dbal/src/Connection.php b/vendor/doctrine/dbal/src/Connection.php deleted file mode 100644 index b975670..0000000 --- a/vendor/doctrine/dbal/src/Connection.php +++ /dev/null @@ -1,2001 +0,0 @@ - - * @psalm-var Params - */ - private array $params; - - /** - * The database platform object used by the connection or NULL before it's initialized. - */ - private ?AbstractPlatform $platform = null; - - private ?ExceptionConverter $exceptionConverter = null; - private ?Parser $parser = null; - - /** - * The schema manager. - * - * @deprecated Use {@see createSchemaManager()} instead. - * - * @var AbstractSchemaManager|null - */ - protected $_schemaManager; - - /** - * The used DBAL driver. - * - * @var Driver - */ - protected $_driver; - - /** - * Flag that indicates whether the current transaction is marked for rollback only. - */ - private bool $isRollbackOnly = false; - - private SchemaManagerFactory $schemaManagerFactory; - - /** - * Initializes a new instance of the Connection class. - * - * @internal The connection can be only instantiated by the driver manager. - * - * @param array $params The connection parameters. - * @param Driver $driver The driver to use. - * @param Configuration|null $config The configuration, optional. - * @param EventManager|null $eventManager The event manager, optional. - * @psalm-param Params $params - * - * @throws Exception - */ - public function __construct( - #[SensitiveParameter] - array $params, - Driver $driver, - ?Configuration $config = null, - ?EventManager $eventManager = null - ) { - $this->_driver = $driver; - $this->params = $params; - - // Create default config and event manager if none given - $config ??= new Configuration(); - $eventManager ??= new EventManager(); - - $this->_config = $config; - $this->_eventManager = $eventManager; - - if (isset($params['platform'])) { - if (! $params['platform'] instanceof Platforms\AbstractPlatform) { - throw Exception::invalidPlatformType($params['platform']); - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5699', - 'The "platform" connection parameter is deprecated.' - . ' Use a driver middleware that would instantiate the platform instead.', - ); - - $this->platform = $params['platform']; - $this->platform->setEventManager($this->_eventManager); - $this->platform->setDisableTypeComments($config->getDisableTypeComments()); - } - - $this->_expr = $this->createExpressionBuilder(); - - $this->autoCommit = $config->getAutoCommit(); - - $schemaManagerFactory = $config->getSchemaManagerFactory(); - if ($schemaManagerFactory === null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5812', - 'Not configuring a schema manager factory is deprecated.' - . ' Use %s which is going to be the default in DBAL 4.', - DefaultSchemaManagerFactory::class, - ); - - $schemaManagerFactory = new LegacySchemaManagerFactory(); - } - - $this->schemaManagerFactory = $schemaManagerFactory; - } - - /** - * Gets the parameters used during instantiation. - * - * @internal - * - * @return array - * @psalm-return Params - */ - public function getParams() - { - return $this->params; - } - - /** - * Gets the name of the currently selected database. - * - * @return string|null The name of the database or NULL if a database is not selected. - * The platforms which don't support the concept of a database (e.g. embedded databases) - * must always return a string as an indicator of an implicitly selected database. - * - * @throws Exception - */ - public function getDatabase() - { - $platform = $this->getDatabasePlatform(); - $query = $platform->getDummySelectSQL($platform->getCurrentDatabaseExpression()); - $database = $this->fetchOne($query); - - assert(is_string($database) || $database === null); - - return $database; - } - - /** - * Gets the DBAL driver instance. - * - * @return Driver - */ - public function getDriver() - { - return $this->_driver; - } - - /** - * Gets the Configuration used by the Connection. - * - * @return Configuration - */ - public function getConfiguration() - { - return $this->_config; - } - - /** - * Gets the EventManager used by the Connection. - * - * @deprecated - * - * @return EventManager - */ - public function getEventManager() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - '%s is deprecated.', - __METHOD__, - ); - - return $this->_eventManager; - } - - /** - * Gets the DatabasePlatform for the connection. - * - * @return AbstractPlatform - * - * @throws Exception - */ - public function getDatabasePlatform() - { - if ($this->platform === null) { - $this->platform = $this->detectDatabasePlatform(); - $this->platform->setEventManager($this->_eventManager); - $this->platform->setDisableTypeComments($this->_config->getDisableTypeComments()); - } - - return $this->platform; - } - - /** - * Creates an expression builder for the connection. - */ - public function createExpressionBuilder(): ExpressionBuilder - { - return new ExpressionBuilder($this); - } - - /** - * Gets the ExpressionBuilder for the connection. - * - * @deprecated Use {@see createExpressionBuilder()} instead. - * - * @return ExpressionBuilder - */ - public function getExpressionBuilder() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4515', - 'Connection::getExpressionBuilder() is deprecated,' - . ' use Connection::createExpressionBuilder() instead.', - ); - - return $this->_expr; - } - - /** - * Establishes the connection with the database. - * - * @internal This method will be made protected in DBAL 4.0. - * - * @return bool TRUE if the connection was successfully established, FALSE if - * the connection is already open. - * - * @throws Exception - * - * @psalm-assert !null $this->_conn - */ - public function connect() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4966', - 'Public access to Connection::connect() is deprecated.', - ); - - if ($this->_conn !== null) { - return false; - } - - try { - $this->_conn = $this->_driver->connect($this->params); - } catch (Driver\Exception $e) { - throw $this->convertException($e); - } - - if ($this->autoCommit === false) { - $this->beginTransaction(); - } - - if ($this->_eventManager->hasListeners(Events::postConnect)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated. Implement a middleware instead.', - Events::postConnect, - ); - - $eventArgs = new Event\ConnectionEventArgs($this); - $this->_eventManager->dispatchEvent(Events::postConnect, $eventArgs); - } - - return true; - } - - /** - * Detects and sets the database platform. - * - * Evaluates custom platform class and version in order to set the correct platform. - * - * @throws Exception If an invalid platform was specified for this connection. - */ - private function detectDatabasePlatform(): AbstractPlatform - { - $version = $this->getDatabasePlatformVersion(); - - if ($version !== null) { - assert($this->_driver instanceof VersionAwarePlatformDriver); - - return $this->_driver->createDatabasePlatformForVersion($version); - } - - return $this->_driver->getDatabasePlatform(); - } - - /** - * Returns the version of the related platform if applicable. - * - * Returns null if either the driver is not capable to create version - * specific platform instances, no explicit server version was specified - * or the underlying driver connection cannot determine the platform - * version without having to query it (performance reasons). - * - * @return string|null - * - * @throws Throwable - */ - private function getDatabasePlatformVersion() - { - // Driver does not support version specific platforms. - if (! $this->_driver instanceof VersionAwarePlatformDriver) { - return null; - } - - // Explicit platform version requested (supersedes auto-detection). - if (isset($this->params['serverVersion'])) { - return $this->params['serverVersion']; - } - - if (isset($this->params['primary']) && isset($this->params['primary']['serverVersion'])) { - return $this->params['primary']['serverVersion']; - } - - // If not connected, we need to connect now to determine the platform version. - if ($this->_conn === null) { - try { - $this->connect(); - } catch (Exception $originalException) { - if (! isset($this->params['dbname'])) { - throw $originalException; - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5707', - 'Relying on a fallback connection used to determine the database platform while connecting' - . ' to a non-existing database is deprecated. Either use an existing database name in' - . ' connection parameters or omit the database name if the platform' - . ' and the server configuration allow that.', - ); - - // The database to connect to might not yet exist. - // Retry detection without database name connection parameter. - $params = $this->params; - - unset($this->params['dbname']); - - try { - $this->connect(); - } catch (Exception $fallbackException) { - // Either the platform does not support database-less connections - // or something else went wrong. - throw $originalException; - } finally { - $this->params = $params; - } - - $serverVersion = $this->getServerVersion(); - - // Close "temporary" connection to allow connecting to the real database again. - $this->close(); - - return $serverVersion; - } - } - - return $this->getServerVersion(); - } - - /** - * Returns the database server version if the underlying driver supports it. - * - * @return string|null - * - * @throws Exception - */ - private function getServerVersion() - { - $connection = $this->getWrappedConnection(); - - // Automatic platform version detection. - if ($connection instanceof ServerInfoAwareConnection) { - try { - return $connection->getServerVersion(); - } catch (Driver\Exception $e) { - throw $this->convertException($e); - } - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4750', - 'Not implementing the ServerInfoAwareConnection interface in %s is deprecated', - get_class($connection), - ); - - // Unable to detect platform version. - return null; - } - - /** - * Returns the current auto-commit mode for this connection. - * - * @see setAutoCommit - * - * @return bool True if auto-commit mode is currently enabled for this connection, false otherwise. - */ - public function isAutoCommit() - { - return $this->autoCommit === true; - } - - /** - * Sets auto-commit mode for this connection. - * - * If a connection is in auto-commit mode, then all its SQL statements will be executed and committed as individual - * transactions. Otherwise, its SQL statements are grouped into transactions that are terminated by a call to either - * the method commit or the method rollback. By default, new connections are in auto-commit mode. - * - * NOTE: If this method is called during a transaction and the auto-commit mode is changed, the transaction is - * committed. If this method is called and the auto-commit mode is not changed, the call is a no-op. - * - * @see isAutoCommit - * - * @param bool $autoCommit True to enable auto-commit mode; false to disable it. - * - * @return void - */ - public function setAutoCommit($autoCommit) - { - $autoCommit = (bool) $autoCommit; - - // Mode not changed, no-op. - if ($autoCommit === $this->autoCommit) { - return; - } - - $this->autoCommit = $autoCommit; - - // Commit all currently active transactions if any when switching auto-commit mode. - if ($this->_conn === null || $this->transactionNestingLevel === 0) { - return; - } - - $this->commitAll(); - } - - /** - * Prepares and executes an SQL query and returns the first row of the result - * as an associative array. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return array|false False is returned if no rows are found. - * - * @throws Exception - */ - public function fetchAssociative(string $query, array $params = [], array $types = []) - { - return $this->executeQuery($query, $params, $types)->fetchAssociative(); - } - - /** - * Prepares and executes an SQL query and returns the first row of the result - * as a numerically indexed array. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return list|false False is returned if no rows are found. - * - * @throws Exception - */ - public function fetchNumeric(string $query, array $params = [], array $types = []) - { - return $this->executeQuery($query, $params, $types)->fetchNumeric(); - } - - /** - * Prepares and executes an SQL query and returns the value of a single column - * of the first row of the result. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return mixed|false False is returned if no rows are found. - * - * @throws Exception - */ - public function fetchOne(string $query, array $params = [], array $types = []) - { - return $this->executeQuery($query, $params, $types)->fetchOne(); - } - - /** - * Whether an actual connection to the database is established. - * - * @return bool - */ - public function isConnected() - { - return $this->_conn !== null; - } - - /** - * Checks whether a transaction is currently active. - * - * @return bool TRUE if a transaction is currently active, FALSE otherwise. - */ - public function isTransactionActive() - { - return $this->transactionNestingLevel > 0; - } - - /** - * Adds condition based on the criteria to the query components - * - * @param array $criteria Map of key columns to their values - * @param string[] $columns Column names - * @param mixed[] $values Column values - * @param string[] $conditions Key conditions - * - * @throws Exception - */ - private function addCriteriaCondition( - array $criteria, - array &$columns, - array &$values, - array &$conditions - ): void { - $platform = $this->getDatabasePlatform(); - - foreach ($criteria as $columnName => $value) { - if ($value === null) { - $conditions[] = $platform->getIsNullExpression($columnName); - continue; - } - - $columns[] = $columnName; - $values[] = $value; - $conditions[] = $columnName . ' = ?'; - } - } - - /** - * Executes an SQL DELETE statement on a table. - * - * Table expression and columns are not escaped and are not safe for user-input. - * - * @param string $table Table name - * @param array $criteria Deletion criteria - * @param array|array $types Parameter types - * - * @return int|string The number of affected rows. - * - * @throws Exception - */ - public function delete($table, array $criteria, array $types = []) - { - if (count($criteria) === 0) { - throw InvalidArgumentException::fromEmptyCriteria(); - } - - $columns = $values = $conditions = []; - - $this->addCriteriaCondition($criteria, $columns, $values, $conditions); - - return $this->executeStatement( - 'DELETE FROM ' . $table . ' WHERE ' . implode(' AND ', $conditions), - $values, - is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types, - ); - } - - /** - * Closes the connection. - * - * @return void - */ - public function close() - { - $this->_conn = null; - $this->transactionNestingLevel = 0; - } - - /** - * Sets the transaction isolation level. - * - * @param TransactionIsolationLevel::* $level The level to set. - * - * @return int|string - * - * @throws Exception - */ - public function setTransactionIsolation($level) - { - $this->transactionIsolationLevel = $level; - - return $this->executeStatement($this->getDatabasePlatform()->getSetTransactionIsolationSQL($level)); - } - - /** - * Gets the currently active transaction isolation level. - * - * @return TransactionIsolationLevel::* The current transaction isolation level. - * - * @throws Exception - */ - public function getTransactionIsolation() - { - return $this->transactionIsolationLevel ??= $this->getDatabasePlatform()->getDefaultTransactionIsolationLevel(); - } - - /** - * Executes an SQL UPDATE statement on a table. - * - * Table expression and columns are not escaped and are not safe for user-input. - * - * @param string $table Table name - * @param array $data Column-value pairs - * @param array $criteria Update criteria - * @param array|array $types Parameter types - * - * @return int|string The number of affected rows. - * - * @throws Exception - */ - public function update($table, array $data, array $criteria, array $types = []) - { - $columns = $values = $conditions = $set = []; - - foreach ($data as $columnName => $value) { - $columns[] = $columnName; - $values[] = $value; - $set[] = $columnName . ' = ?'; - } - - $this->addCriteriaCondition($criteria, $columns, $values, $conditions); - - if (is_string(key($types))) { - $types = $this->extractTypeValues($columns, $types); - } - - $sql = 'UPDATE ' . $table . ' SET ' . implode(', ', $set) - . ' WHERE ' . implode(' AND ', $conditions); - - return $this->executeStatement($sql, $values, $types); - } - - /** - * Inserts a table row with specified data. - * - * Table expression and columns are not escaped and are not safe for user-input. - * - * @param string $table Table name - * @param array $data Column-value pairs - * @param array|array $types Parameter types - * - * @return int|string The number of affected rows. - * - * @throws Exception - */ - public function insert($table, array $data, array $types = []) - { - if (count($data) === 0) { - return $this->executeStatement('INSERT INTO ' . $table . ' () VALUES ()'); - } - - $columns = []; - $values = []; - $set = []; - - foreach ($data as $columnName => $value) { - $columns[] = $columnName; - $values[] = $value; - $set[] = '?'; - } - - return $this->executeStatement( - 'INSERT INTO ' . $table . ' (' . implode(', ', $columns) . ')' . - ' VALUES (' . implode(', ', $set) . ')', - $values, - is_string(key($types)) ? $this->extractTypeValues($columns, $types) : $types, - ); - } - - /** - * Extract ordered type list from an ordered column list and type map. - * - * @param array $columnList - * @param array|array $types - * - * @return array|array - */ - private function extractTypeValues(array $columnList, array $types): array - { - $typeValues = []; - - foreach ($columnList as $columnName) { - $typeValues[] = $types[$columnName] ?? ParameterType::STRING; - } - - return $typeValues; - } - - /** - * Quotes a string so it can be safely used as a table or column name, even if - * it is a reserved name. - * - * Delimiting style depends on the underlying database platform that is being used. - * - * NOTE: Just because you CAN use quoted identifiers does not mean - * you SHOULD use them. In general, they end up causing way more - * problems than they solve. - * - * @param string $str The name to be quoted. - * - * @return string The quoted name. - */ - public function quoteIdentifier($str) - { - return $this->getDatabasePlatform()->quoteIdentifier($str); - } - - /** - * The usage of this method is discouraged. Use prepared statements - * or {@see AbstractPlatform::quoteStringLiteral()} instead. - * - * @param mixed $value - * @param int|string|Type|null $type - * - * @return mixed - */ - public function quote($value, $type = ParameterType::STRING) - { - $connection = $this->getWrappedConnection(); - - [$value, $bindingType] = $this->getBindingInfo($value, $type); - - return $connection->quote($value, $bindingType); - } - - /** - * Prepares and executes an SQL query and returns the result as an array of numeric arrays. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return list> - * - * @throws Exception - */ - public function fetchAllNumeric(string $query, array $params = [], array $types = []): array - { - return $this->executeQuery($query, $params, $types)->fetchAllNumeric(); - } - - /** - * Prepares and executes an SQL query and returns the result as an array of associative arrays. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return list> - * - * @throws Exception - */ - public function fetchAllAssociative(string $query, array $params = [], array $types = []): array - { - return $this->executeQuery($query, $params, $types)->fetchAllAssociative(); - } - - /** - * Prepares and executes an SQL query and returns the result as an associative array with the keys - * mapped to the first column and the values mapped to the second column. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return array - * - * @throws Exception - */ - public function fetchAllKeyValue(string $query, array $params = [], array $types = []): array - { - return $this->executeQuery($query, $params, $types)->fetchAllKeyValue(); - } - - /** - * Prepares and executes an SQL query and returns the result as an associative array with the keys mapped - * to the first column and the values being an associative array representing the rest of the columns - * and their values. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return array> - * - * @throws Exception - */ - public function fetchAllAssociativeIndexed(string $query, array $params = [], array $types = []): array - { - return $this->executeQuery($query, $params, $types)->fetchAllAssociativeIndexed(); - } - - /** - * Prepares and executes an SQL query and returns the result as an array of the first column values. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return list - * - * @throws Exception - */ - public function fetchFirstColumn(string $query, array $params = [], array $types = []): array - { - return $this->executeQuery($query, $params, $types)->fetchFirstColumn(); - } - - /** - * Prepares and executes an SQL query and returns the result as an iterator over rows represented as numeric arrays. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return Traversable> - * - * @throws Exception - */ - public function iterateNumeric(string $query, array $params = [], array $types = []): Traversable - { - return $this->executeQuery($query, $params, $types)->iterateNumeric(); - } - - /** - * Prepares and executes an SQL query and returns the result as an iterator over rows represented - * as associative arrays. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return Traversable> - * - * @throws Exception - */ - public function iterateAssociative(string $query, array $params = [], array $types = []): Traversable - { - return $this->executeQuery($query, $params, $types)->iterateAssociative(); - } - - /** - * Prepares and executes an SQL query and returns the result as an iterator with the keys - * mapped to the first column and the values mapped to the second column. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return Traversable - * - * @throws Exception - */ - public function iterateKeyValue(string $query, array $params = [], array $types = []): Traversable - { - return $this->executeQuery($query, $params, $types)->iterateKeyValue(); - } - - /** - * Prepares and executes an SQL query and returns the result as an iterator with the keys mapped - * to the first column and the values being an associative array representing the rest of the columns - * and their values. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return Traversable> - * - * @throws Exception - */ - public function iterateAssociativeIndexed(string $query, array $params = [], array $types = []): Traversable - { - return $this->executeQuery($query, $params, $types)->iterateAssociativeIndexed(); - } - - /** - * Prepares and executes an SQL query and returns the result as an iterator over the first column values. - * - * @param string $query SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @return Traversable - * - * @throws Exception - */ - public function iterateColumn(string $query, array $params = [], array $types = []): Traversable - { - return $this->executeQuery($query, $params, $types)->iterateColumn(); - } - - /** - * Prepares an SQL statement. - * - * @param string $sql The SQL statement to prepare. - * - * @throws Exception - */ - public function prepare(string $sql): Statement - { - $connection = $this->getWrappedConnection(); - - try { - $statement = $connection->prepare($sql); - } catch (Driver\Exception $e) { - throw $this->convertExceptionDuringQuery($e, $sql); - } - - return new Statement($this, $statement, $sql); - } - - /** - * Executes an, optionally parameterized, SQL query. - * - * If the query is parametrized, a prepared statement is used. - * If an SQLLogger is configured, the execution is logged. - * - * @param string $sql SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @throws Exception - */ - public function executeQuery( - string $sql, - array $params = [], - $types = [], - ?QueryCacheProfile $qcp = null - ): Result { - if ($qcp !== null) { - return $this->executeCacheQuery($sql, $params, $types, $qcp); - } - - $connection = $this->getWrappedConnection(); - - $logger = $this->_config->getSQLLogger(); - if ($logger !== null) { - $logger->startQuery($sql, $params, $types); - } - - try { - if (count($params) > 0) { - if ($this->needsArrayParameterConversion($params, $types)) { - [$sql, $params, $types] = $this->expandArrayParameters($sql, $params, $types); - } - - $stmt = $connection->prepare($sql); - - $this->bindParameters($stmt, $params, $types); - - $result = $stmt->execute(); - } else { - $result = $connection->query($sql); - } - - return new Result($result, $this); - } catch (Driver\Exception $e) { - throw $this->convertExceptionDuringQuery($e, $sql, $params, $types); - } finally { - if ($logger !== null) { - $logger->stopQuery(); - } - } - } - - /** - * Executes a caching query. - * - * @param string $sql SQL query - * @param list|array $params Query parameters - * @param array|array $types Parameter types - * - * @throws CacheException - * @throws Exception - */ - public function executeCacheQuery($sql, $params, $types, QueryCacheProfile $qcp): Result - { - $resultCache = $qcp->getResultCache() ?? $this->_config->getResultCache(); - - if ($resultCache === null) { - throw CacheException::noResultDriverConfigured(); - } - - $connectionParams = $this->params; - unset($connectionParams['platform'], $connectionParams['password'], $connectionParams['url']); - - [$cacheKey, $realKey] = $qcp->generateCacheKeys($sql, $params, $types, $connectionParams); - - $item = $resultCache->getItem($cacheKey); - - if ($item->isHit()) { - $value = $item->get(); - if (! is_array($value)) { - $value = []; - } - - if (isset($value[$realKey])) { - return new Result(new ArrayResult($value[$realKey]), $this); - } - } else { - $value = []; - } - - $data = $this->fetchAllAssociative($sql, $params, $types); - - $value[$realKey] = $data; - - $item->set($value); - - $lifetime = $qcp->getLifetime(); - if ($lifetime > 0) { - $item->expiresAfter($lifetime); - } - - $resultCache->save($item); - - return new Result(new ArrayResult($data), $this); - } - - /** - * Executes an SQL statement with the given parameters and returns the number of affected rows. - * - * Could be used for: - * - DML statements: INSERT, UPDATE, DELETE, etc. - * - DDL statements: CREATE, DROP, ALTER, etc. - * - DCL statements: GRANT, REVOKE, etc. - * - Session control statements: ALTER SESSION, SET, DECLARE, etc. - * - Other statements that don't yield a row set. - * - * This method supports PDO binding types as well as DBAL mapping types. - * - * @param string $sql SQL statement - * @param list|array $params Statement parameters - * @param array|array $types Parameter types - * - * @return int|string The number of affected rows. - * - * @throws Exception - */ - public function executeStatement($sql, array $params = [], array $types = []) - { - $connection = $this->getWrappedConnection(); - - $logger = $this->_config->getSQLLogger(); - if ($logger !== null) { - $logger->startQuery($sql, $params, $types); - } - - try { - if (count($params) > 0) { - if ($this->needsArrayParameterConversion($params, $types)) { - [$sql, $params, $types] = $this->expandArrayParameters($sql, $params, $types); - } - - $stmt = $connection->prepare($sql); - - $this->bindParameters($stmt, $params, $types); - - return $stmt->execute() - ->rowCount(); - } - - return $connection->exec($sql); - } catch (Driver\Exception $e) { - throw $this->convertExceptionDuringQuery($e, $sql, $params, $types); - } finally { - if ($logger !== null) { - $logger->stopQuery(); - } - } - } - - /** - * Returns the current transaction nesting level. - * - * @return int The nesting level. A value of 0 means there's no active transaction. - */ - public function getTransactionNestingLevel() - { - return $this->transactionNestingLevel; - } - - /** - * Returns the ID of the last inserted row, or the last value from a sequence object, - * depending on the underlying driver. - * - * Note: This method may not return a meaningful or consistent result across different drivers, - * because the underlying database may not even support the notion of AUTO_INCREMENT/IDENTITY - * columns or sequences. - * - * @param string|null $name Name of the sequence object from which the ID should be returned. - * - * @return string|int|false A string representation of the last inserted ID. - * - * @throws Exception - */ - public function lastInsertId($name = null) - { - if ($name !== null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - } - - try { - return $this->getWrappedConnection()->lastInsertId($name); - } catch (Driver\Exception $e) { - throw $this->convertException($e); - } - } - - /** - * Executes a function in a transaction. - * - * The function gets passed this Connection instance as an (optional) parameter. - * - * If an exception occurs during execution of the function or transaction commit, - * the transaction is rolled back and the exception re-thrown. - * - * @param Closure(self):T $func The function to execute transactionally. - * - * @return T The value returned by $func - * - * @throws Throwable - * - * @template T - */ - public function transactional(Closure $func) - { - $this->beginTransaction(); - try { - $res = $func($this); - $this->commit(); - - return $res; - } catch (Throwable $e) { - $this->rollBack(); - - throw $e; - } - } - - /** - * Sets if nested transactions should use savepoints. - * - * @param bool $nestTransactionsWithSavepoints - * - * @return void - * - * @throws Exception - */ - public function setNestTransactionsWithSavepoints($nestTransactionsWithSavepoints) - { - if (! $nestTransactionsWithSavepoints) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5383', - <<<'DEPRECATION' - Nesting transactions without enabling savepoints is deprecated. - Call %s::setNestTransactionsWithSavepoints(true) to enable savepoints. - DEPRECATION, - self::class, - ); - } - - if ($this->transactionNestingLevel > 0) { - throw ConnectionException::mayNotAlterNestedTransactionWithSavepointsInTransaction(); - } - - $this->nestTransactionsWithSavepoints = (bool) $nestTransactionsWithSavepoints; - } - - /** - * Gets if nested transactions should use savepoints. - * - * @return bool - */ - public function getNestTransactionsWithSavepoints() - { - return $this->nestTransactionsWithSavepoints; - } - - /** - * Returns the savepoint name to use for nested transactions. - * - * @return string - */ - protected function _getNestedTransactionSavePointName() - { - return 'DOCTRINE_' . $this->transactionNestingLevel; - } - - /** - * @return bool - * - * @throws Exception - */ - public function beginTransaction() - { - $connection = $this->getWrappedConnection(); - - ++$this->transactionNestingLevel; - - $logger = $this->_config->getSQLLogger(); - - if ($this->transactionNestingLevel === 1) { - if ($logger !== null) { - $logger->startQuery('"START TRANSACTION"'); - } - - $connection->beginTransaction(); - - if ($logger !== null) { - $logger->stopQuery(); - } - } elseif ($this->nestTransactionsWithSavepoints) { - if ($logger !== null) { - $logger->startQuery('"SAVEPOINT"'); - } - - $this->createSavepoint($this->_getNestedTransactionSavePointName()); - if ($logger !== null) { - $logger->stopQuery(); - } - } else { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5383', - <<<'DEPRECATION' - Nesting transactions without enabling savepoints is deprecated. - Call %s::setNestTransactionsWithSavepoints(true) to enable savepoints. - DEPRECATION, - self::class, - ); - } - - $eventManager = $this->getEventManager(); - - if ($eventManager->hasListeners(Events::onTransactionBegin)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onTransactionBegin, - ); - - $eventManager->dispatchEvent(Events::onTransactionBegin, new TransactionBeginEventArgs($this)); - } - - return true; - } - - /** - * @return bool - * - * @throws Exception - */ - public function commit() - { - if ($this->transactionNestingLevel === 0) { - throw ConnectionException::noActiveTransaction(); - } - - if ($this->isRollbackOnly) { - throw ConnectionException::commitFailedRollbackOnly(); - } - - $result = true; - - $connection = $this->getWrappedConnection(); - - if ($this->transactionNestingLevel === 1) { - $result = $this->doCommit($connection); - } elseif ($this->nestTransactionsWithSavepoints) { - $this->releaseSavepoint($this->_getNestedTransactionSavePointName()); - } - - --$this->transactionNestingLevel; - - $eventManager = $this->getEventManager(); - - if ($eventManager->hasListeners(Events::onTransactionCommit)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onTransactionCommit, - ); - - $eventManager->dispatchEvent(Events::onTransactionCommit, new TransactionCommitEventArgs($this)); - } - - if ($this->autoCommit !== false || $this->transactionNestingLevel !== 0) { - return $result; - } - - $this->beginTransaction(); - - return $result; - } - - /** - * @return bool - * - * @throws DriverException - */ - private function doCommit(DriverConnection $connection) - { - $logger = $this->_config->getSQLLogger(); - - if ($logger !== null) { - $logger->startQuery('"COMMIT"'); - } - - $result = $connection->commit(); - - if ($logger !== null) { - $logger->stopQuery(); - } - - return $result; - } - - /** - * Commits all current nesting transactions. - * - * @throws Exception - */ - private function commitAll(): void - { - while ($this->transactionNestingLevel !== 0) { - if ($this->autoCommit === false && $this->transactionNestingLevel === 1) { - // When in no auto-commit mode, the last nesting commit immediately starts a new transaction. - // Therefore we need to do the final commit here and then leave to avoid an infinite loop. - $this->commit(); - - return; - } - - $this->commit(); - } - } - - /** - * Cancels any database changes done during the current transaction. - * - * @return bool - * - * @throws Exception - */ - public function rollBack() - { - if ($this->transactionNestingLevel === 0) { - throw ConnectionException::noActiveTransaction(); - } - - $connection = $this->getWrappedConnection(); - - $logger = $this->_config->getSQLLogger(); - - if ($this->transactionNestingLevel === 1) { - if ($logger !== null) { - $logger->startQuery('"ROLLBACK"'); - } - - $this->transactionNestingLevel = 0; - $connection->rollBack(); - $this->isRollbackOnly = false; - if ($logger !== null) { - $logger->stopQuery(); - } - - if ($this->autoCommit === false) { - $this->beginTransaction(); - } - } elseif ($this->nestTransactionsWithSavepoints) { - if ($logger !== null) { - $logger->startQuery('"ROLLBACK TO SAVEPOINT"'); - } - - $this->rollbackSavepoint($this->_getNestedTransactionSavePointName()); - --$this->transactionNestingLevel; - if ($logger !== null) { - $logger->stopQuery(); - } - } else { - $this->isRollbackOnly = true; - --$this->transactionNestingLevel; - } - - $eventManager = $this->getEventManager(); - - if ($eventManager->hasListeners(Events::onTransactionRollBack)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onTransactionRollBack, - ); - - $eventManager->dispatchEvent(Events::onTransactionRollBack, new TransactionRollBackEventArgs($this)); - } - - return true; - } - - /** - * Creates a new savepoint. - * - * @param string $savepoint The name of the savepoint to create. - * - * @return void - * - * @throws Exception - */ - public function createSavepoint($savepoint) - { - $platform = $this->getDatabasePlatform(); - - if (! $platform->supportsSavepoints()) { - throw ConnectionException::savepointsNotSupported(); - } - - $this->executeStatement($platform->createSavePoint($savepoint)); - } - - /** - * Releases the given savepoint. - * - * @param string $savepoint The name of the savepoint to release. - * - * @return void - * - * @throws Exception - */ - public function releaseSavepoint($savepoint) - { - $logger = $this->_config->getSQLLogger(); - - $platform = $this->getDatabasePlatform(); - - if (! $platform->supportsSavepoints()) { - throw ConnectionException::savepointsNotSupported(); - } - - if (! $platform->supportsReleaseSavepoints()) { - if ($logger !== null) { - $logger->stopQuery(); - } - - return; - } - - if ($logger !== null) { - $logger->startQuery('"RELEASE SAVEPOINT"'); - } - - $this->executeStatement($platform->releaseSavePoint($savepoint)); - - if ($logger === null) { - return; - } - - $logger->stopQuery(); - } - - /** - * Rolls back to the given savepoint. - * - * @param string $savepoint The name of the savepoint to rollback to. - * - * @return void - * - * @throws Exception - */ - public function rollbackSavepoint($savepoint) - { - $platform = $this->getDatabasePlatform(); - - if (! $platform->supportsSavepoints()) { - throw ConnectionException::savepointsNotSupported(); - } - - $this->executeStatement($platform->rollbackSavePoint($savepoint)); - } - - /** - * Gets the wrapped driver connection. - * - * @deprecated Use {@link getNativeConnection()} to access the native connection. - * - * @return DriverConnection - * - * @throws Exception - */ - public function getWrappedConnection() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4966', - 'Connection::getWrappedConnection() is deprecated.' - . ' Use Connection::getNativeConnection() to access the native connection.', - ); - - $this->connect(); - - return $this->_conn; - } - - /** @return resource|object */ - public function getNativeConnection() - { - $this->connect(); - - if (! method_exists($this->_conn, 'getNativeConnection')) { - throw new LogicException(sprintf( - 'The driver connection %s does not support accessing the native connection.', - get_class($this->_conn), - )); - } - - return $this->_conn->getNativeConnection(); - } - - /** - * Creates a SchemaManager that can be used to inspect or change the - * database schema through the connection. - * - * @throws Exception - */ - public function createSchemaManager(): AbstractSchemaManager - { - return $this->schemaManagerFactory->createSchemaManager($this); - } - - /** - * Gets the SchemaManager that can be used to inspect or change the - * database schema through the connection. - * - * @deprecated Use {@see createSchemaManager()} instead. - * - * @return AbstractSchemaManager - * - * @throws Exception - */ - public function getSchemaManager() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4515', - 'Connection::getSchemaManager() is deprecated, use Connection::createSchemaManager() instead.', - ); - - return $this->_schemaManager ??= $this->createSchemaManager(); - } - - /** - * Marks the current transaction so that the only possible - * outcome for the transaction to be rolled back. - * - * @return void - * - * @throws ConnectionException If no transaction is active. - */ - public function setRollbackOnly() - { - if ($this->transactionNestingLevel === 0) { - throw ConnectionException::noActiveTransaction(); - } - - $this->isRollbackOnly = true; - } - - /** - * Checks whether the current transaction is marked for rollback only. - * - * @return bool - * - * @throws ConnectionException If no transaction is active. - */ - public function isRollbackOnly() - { - if ($this->transactionNestingLevel === 0) { - throw ConnectionException::noActiveTransaction(); - } - - return $this->isRollbackOnly; - } - - /** - * Converts a given value to its database representation according to the conversion - * rules of a specific DBAL mapping type. - * - * @param mixed $value The value to convert. - * @param string $type The name of the DBAL mapping type. - * - * @return mixed The converted value. - * - * @throws Exception - */ - public function convertToDatabaseValue($value, $type) - { - return Type::getType($type)->convertToDatabaseValue($value, $this->getDatabasePlatform()); - } - - /** - * Converts a given value to its PHP representation according to the conversion - * rules of a specific DBAL mapping type. - * - * @param mixed $value The value to convert. - * @param string $type The name of the DBAL mapping type. - * - * @return mixed The converted type. - * - * @throws Exception - */ - public function convertToPHPValue($value, $type) - { - return Type::getType($type)->convertToPHPValue($value, $this->getDatabasePlatform()); - } - - /** - * Binds a set of parameters, some or all of which are typed with a PDO binding type - * or DBAL mapping type, to a given statement. - * - * @param DriverStatement $stmt Prepared statement - * @param list|array $params Statement parameters - * @param array|array $types Parameter types - * - * @throws Exception - */ - private function bindParameters(DriverStatement $stmt, array $params, array $types): void - { - // Check whether parameters are positional or named. Mixing is not allowed. - if (is_int(key($params))) { - $bindIndex = 1; - - foreach ($params as $key => $value) { - if (isset($types[$key])) { - $type = $types[$key]; - [$value, $bindingType] = $this->getBindingInfo($value, $type); - } else { - if (array_key_exists($key, $types)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5550', - 'Using NULL as prepared statement parameter type is deprecated.' - . 'Omit or use ParameterType::STRING instead', - ); - } - - $bindingType = ParameterType::STRING; - } - - $stmt->bindValue($bindIndex, $value, $bindingType); - - ++$bindIndex; - } - } else { - // Named parameters - foreach ($params as $name => $value) { - if (isset($types[$name])) { - $type = $types[$name]; - [$value, $bindingType] = $this->getBindingInfo($value, $type); - } else { - if (array_key_exists($name, $types)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5550', - 'Using NULL as prepared statement parameter type is deprecated.' - . 'Omit or use ParameterType::STRING instead', - ); - } - - $bindingType = ParameterType::STRING; - } - - $stmt->bindValue($name, $value, $bindingType); - } - } - } - - /** - * Gets the binding type of a given type. - * - * @param mixed $value The value to bind. - * @param int|string|Type|null $type The type to bind (PDO or DBAL). - * - * @return array{mixed, int} [0] => the (escaped) value, [1] => the binding type. - * - * @throws Exception - */ - private function getBindingInfo($value, $type): array - { - if (is_string($type)) { - $type = Type::getType($type); - } - - if ($type instanceof Type) { - $value = $type->convertToDatabaseValue($value, $this->getDatabasePlatform()); - $bindingType = $type->getBindingType(); - } else { - $bindingType = $type ?? ParameterType::STRING; - } - - return [$value, $bindingType]; - } - - /** - * Creates a new instance of a SQL query builder. - * - * @return QueryBuilder - */ - public function createQueryBuilder() - { - return new Query\QueryBuilder($this); - } - - /** - * @internal - * - * @param list|array $params - * @param array|array $types - */ - final public function convertExceptionDuringQuery( - Driver\Exception $e, - string $sql, - array $params = [], - array $types = [] - ): DriverException { - return $this->handleDriverException($e, new Query($sql, $params, $types)); - } - - /** @internal */ - final public function convertException(Driver\Exception $e): DriverException - { - return $this->handleDriverException($e, null); - } - - /** - * @param array|array $params - * @param array|array $types - * - * @return array{string, list, array} - */ - private function expandArrayParameters(string $sql, array $params, array $types): array - { - $this->parser ??= $this->getDatabasePlatform()->createSQLParser(); - $visitor = new ExpandArrayParameters($params, $types); - - $this->parser->parse($sql, $visitor); - - return [ - $visitor->getSQL(), - $visitor->getParameters(), - $visitor->getTypes(), - ]; - } - - /** - * @param array|array $params - * @param array|array $types - */ - private function needsArrayParameterConversion(array $params, array $types): bool - { - if (is_string(key($params))) { - return true; - } - - foreach ($types as $type) { - if ( - $type === ArrayParameterType::INTEGER - || $type === ArrayParameterType::STRING - || $type === ArrayParameterType::ASCII - || $type === ArrayParameterType::BINARY - ) { - return true; - } - } - - return false; - } - - private function handleDriverException( - Driver\Exception $driverException, - ?Query $query - ): DriverException { - $this->exceptionConverter ??= $this->_driver->getExceptionConverter(); - $exception = $this->exceptionConverter->convert($driverException, $query); - - if ($exception instanceof ConnectionLost) { - $this->close(); - } - - return $exception; - } - - /** - * BC layer for a wide-spread use-case of old DBAL APIs - * - * @deprecated Use {@see executeStatement()} instead - * - * @param array $params The query parameters - * @param array $types The parameter types - */ - public function executeUpdate(string $sql, array $params = [], array $types = []): int - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4163', - '%s is deprecated, please use executeStatement() instead.', - __METHOD__, - ); - - return $this->executeStatement($sql, $params, $types); - } - - /** - * BC layer for a wide-spread use-case of old DBAL APIs - * - * @deprecated Use {@see executeQuery()} instead - */ - public function query(string $sql): Result - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4163', - '%s is deprecated, please use executeQuery() instead.', - __METHOD__, - ); - - return $this->executeQuery($sql); - } - - /** - * BC layer for a wide-spread use-case of old DBAL APIs - * - * @deprecated please use {@see executeStatement()} instead - */ - public function exec(string $sql): int - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4163', - '%s is deprecated, please use executeStatement() instead.', - __METHOD__, - ); - - return $this->executeStatement($sql); - } -} diff --git a/vendor/doctrine/dbal/src/ConnectionException.php b/vendor/doctrine/dbal/src/ConnectionException.php deleted file mode 100644 index f1e1898..0000000 --- a/vendor/doctrine/dbal/src/ConnectionException.php +++ /dev/null @@ -1,31 +0,0 @@ -executeQuery("DELETE FROM table"); - * - * Be aware that Connection#executeQuery is a method specifically for READ - * operations only. - * - * Use Connection#executeStatement for any SQL statement that changes/updates - * state in the database (UPDATE, INSERT, DELETE or DDL statements). - * - * This connection is limited to replica operations using the - * Connection#executeQuery operation only, because it wouldn't be compatible - * with the ORM or SchemaManager code otherwise. Both use all the other - * operations in a context where writes could happen to a replica, which makes - * this restricted approach necessary. - * - * You can manually connect to the primary at any time by calling: - * - * $conn->ensureConnectedToPrimary(); - * - * Instantiation through the DriverManager looks like: - * - * @psalm-import-type Params from DriverManager - * @example - * - * $conn = DriverManager::getConnection(array( - * 'wrapperClass' => 'Doctrine\DBAL\Connections\PrimaryReadReplicaConnection', - * 'driver' => 'pdo_mysql', - * 'primary' => array('user' => '', 'password' => '', 'host' => '', 'dbname' => ''), - * 'replica' => array( - * array('user' => 'replica1', 'password' => '', 'host' => '', 'dbname' => ''), - * array('user' => 'replica2', 'password' => '', 'host' => '', 'dbname' => ''), - * ) - * )); - * - * You can also pass 'driverOptions' and any other documented option to each of this drivers - * to pass additional information. - */ -class PrimaryReadReplicaConnection extends Connection -{ - /** - * Primary and Replica connection (one of the randomly picked replicas). - * - * @var DriverConnection[]|null[] - */ - protected $connections = ['primary' => null, 'replica' => null]; - - /** - * You can keep the replica connection and then switch back to it - * during the request if you know what you are doing. - * - * @var bool - */ - protected $keepReplica = false; - - /** - * Creates Primary Replica Connection. - * - * @internal The connection can be only instantiated by the driver manager. - * - * @param array $params - * @psalm-param Params $params - * - * @throws Exception - * @throws InvalidArgumentException - */ - public function __construct( - array $params, - Driver $driver, - ?Configuration $config = null, - ?EventManager $eventManager = null - ) { - if (! isset($params['replica'], $params['primary'])) { - throw new InvalidArgumentException('primary or replica configuration missing'); - } - - if (count($params['replica']) === 0) { - throw new InvalidArgumentException('You have to configure at least one replica.'); - } - - if (isset($params['driver'])) { - $params['primary']['driver'] = $params['driver']; - - foreach ($params['replica'] as $replicaKey => $replica) { - $params['replica'][$replicaKey]['driver'] = $params['driver']; - } - } - - $this->keepReplica = (bool) ($params['keepReplica'] ?? false); - - parent::__construct($params, $driver, $config, $eventManager); - } - - /** - * Checks if the connection is currently towards the primary or not. - */ - public function isConnectedToPrimary(): bool - { - return $this->_conn !== null && $this->_conn === $this->connections['primary']; - } - - /** - * @param string|null $connectionName - * - * @return bool - */ - public function connect($connectionName = null) - { - if ($connectionName !== null) { - throw new InvalidArgumentException( - 'Passing a connection name as first argument is not supported anymore.' - . ' Use ensureConnectedToPrimary()/ensureConnectedToReplica() instead.', - ); - } - - return $this->performConnect(); - } - - protected function performConnect(?string $connectionName = null): bool - { - $requestedConnectionChange = ($connectionName !== null); - $connectionName = $connectionName ?? 'replica'; - - if ($connectionName !== 'replica' && $connectionName !== 'primary') { - throw new InvalidArgumentException('Invalid option to connect(), only primary or replica allowed.'); - } - - // If we have a connection open, and this is not an explicit connection - // change request, then abort right here, because we are already done. - // This prevents writes to the replica in case of "keepReplica" option enabled. - if ($this->_conn !== null && ! $requestedConnectionChange) { - return false; - } - - $forcePrimaryAsReplica = false; - - if ($this->getTransactionNestingLevel() > 0) { - $connectionName = 'primary'; - $forcePrimaryAsReplica = true; - } - - if (isset($this->connections[$connectionName])) { - $this->_conn = $this->connections[$connectionName]; - - if ($forcePrimaryAsReplica && ! $this->keepReplica) { - $this->connections['replica'] = $this->_conn; - } - - return false; - } - - if ($connectionName === 'primary') { - $this->connections['primary'] = $this->_conn = $this->connectTo($connectionName); - - // Set replica connection to primary to avoid invalid reads - if (! $this->keepReplica) { - $this->connections['replica'] = $this->connections['primary']; - } - } else { - $this->connections['replica'] = $this->_conn = $this->connectTo($connectionName); - } - - if ($this->_eventManager->hasListeners(Events::postConnect)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated. Implement a middleware instead.', - Events::postConnect, - ); - - $eventArgs = new ConnectionEventArgs($this); - $this->_eventManager->dispatchEvent(Events::postConnect, $eventArgs); - } - - return true; - } - - /** - * Connects to the primary node of the database cluster. - * - * All following statements after this will be executed against the primary node. - */ - public function ensureConnectedToPrimary(): bool - { - return $this->performConnect('primary'); - } - - /** - * Connects to a replica node of the database cluster. - * - * All following statements after this will be executed against the replica node, - * unless the keepReplica option is set to false and a primary connection - * was already opened. - */ - public function ensureConnectedToReplica(): bool - { - return $this->performConnect('replica'); - } - - /** - * Connects to a specific connection. - * - * @param string $connectionName - * - * @return DriverConnection - * - * @throws Exception - */ - protected function connectTo($connectionName) - { - $params = $this->getParams(); - - $connectionParams = $this->chooseConnectionConfiguration($connectionName, $params); - - try { - return $this->_driver->connect($connectionParams); - } catch (DriverException $e) { - throw $this->convertException($e); - } - } - - /** - * @param string $connectionName - * @param mixed[] $params - * - * @return mixed - */ - protected function chooseConnectionConfiguration( - $connectionName, - #[SensitiveParameter] - $params - ) { - if ($connectionName === 'primary') { - return $params['primary']; - } - - $config = $params['replica'][array_rand($params['replica'])]; - - if (! isset($config['charset']) && isset($params['primary']['charset'])) { - $config['charset'] = $params['primary']['charset']; - } - - return $config; - } - - /** - * {@inheritDoc} - */ - public function executeStatement($sql, array $params = [], array $types = []) - { - $this->ensureConnectedToPrimary(); - - return parent::executeStatement($sql, $params, $types); - } - - /** - * {@inheritDoc} - */ - public function beginTransaction() - { - $this->ensureConnectedToPrimary(); - - return parent::beginTransaction(); - } - - /** - * {@inheritDoc} - */ - public function commit() - { - $this->ensureConnectedToPrimary(); - - return parent::commit(); - } - - /** - * {@inheritDoc} - */ - public function rollBack() - { - $this->ensureConnectedToPrimary(); - - return parent::rollBack(); - } - - /** - * {@inheritDoc} - */ - public function close() - { - unset($this->connections['primary'], $this->connections['replica']); - - parent::close(); - - $this->_conn = null; - $this->connections = ['primary' => null, 'replica' => null]; - } - - /** - * {@inheritDoc} - */ - public function createSavepoint($savepoint) - { - $this->ensureConnectedToPrimary(); - - parent::createSavepoint($savepoint); - } - - /** - * {@inheritDoc} - */ - public function releaseSavepoint($savepoint) - { - $this->ensureConnectedToPrimary(); - - parent::releaseSavepoint($savepoint); - } - - /** - * {@inheritDoc} - */ - public function rollbackSavepoint($savepoint) - { - $this->ensureConnectedToPrimary(); - - parent::rollbackSavepoint($savepoint); - } - - public function prepare(string $sql): Statement - { - $this->ensureConnectedToPrimary(); - - return parent::prepare($sql); - } -} diff --git a/vendor/doctrine/dbal/src/Driver.php b/vendor/doctrine/dbal/src/Driver.php deleted file mode 100644 index 46e422b..0000000 --- a/vendor/doctrine/dbal/src/Driver.php +++ /dev/null @@ -1,57 +0,0 @@ - $params All connection parameters. - * @psalm-param Params $params All connection parameters. - * - * @return DriverConnection The database connection. - * - * @throws Exception - */ - public function connect( - #[SensitiveParameter] - array $params - ); - - /** - * Gets the DatabasePlatform instance that provides all the metadata about - * the platform this driver connects to. - * - * @return AbstractPlatform The database platform. - */ - public function getDatabasePlatform(); - - /** - * Gets the SchemaManager that can be used to inspect and change the underlying - * database schema of the platform this driver connects to. - * - * @deprecated Use {@link AbstractPlatform::createSchemaManager()} instead. - * - * @return AbstractSchemaManager - */ - public function getSchemaManager(Connection $conn, AbstractPlatform $platform); - - /** - * Gets the ExceptionConverter that can be used to convert driver-level exceptions into DBAL exceptions. - */ - public function getExceptionConverter(): ExceptionConverter; -} diff --git a/vendor/doctrine/dbal/src/Driver/API/ExceptionConverter.php b/vendor/doctrine/dbal/src/Driver/API/ExceptionConverter.php deleted file mode 100644 index a7bf271..0000000 --- a/vendor/doctrine/dbal/src/Driver/API/ExceptionConverter.php +++ /dev/null @@ -1,25 +0,0 @@ -getCode()) { - case -104: - return new SyntaxErrorException($exception, $query); - - case -203: - return new NonUniqueFieldNameException($exception, $query); - - case -204: - return new TableNotFoundException($exception, $query); - - case -206: - return new InvalidFieldNameException($exception, $query); - - case -407: - return new NotNullConstraintViolationException($exception, $query); - - case -530: - case -531: - case -532: - case -20356: - return new ForeignKeyConstraintViolationException($exception, $query); - - case -601: - return new TableExistsException($exception, $query); - - case -803: - return new UniqueConstraintViolationException($exception, $query); - - case -1336: - case -30082: - return new ConnectionException($exception, $query); - } - - return new DriverException($exception, $query); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php b/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php deleted file mode 100644 index fdfc75a..0000000 --- a/vendor/doctrine/dbal/src/Driver/API/MySQL/ExceptionConverter.php +++ /dev/null @@ -1,120 +0,0 @@ -getCode()) { - case 1008: - return new DatabaseDoesNotExist($exception, $query); - - case 1213: - return new DeadlockException($exception, $query); - - case 1205: - return new LockWaitTimeoutException($exception, $query); - - case 1050: - return new TableExistsException($exception, $query); - - case 1051: - case 1146: - return new TableNotFoundException($exception, $query); - - case 1216: - case 1217: - case 1451: - case 1452: - case 1701: - return new ForeignKeyConstraintViolationException($exception, $query); - - case 1062: - case 1557: - case 1569: - case 1586: - return new UniqueConstraintViolationException($exception, $query); - - case 1054: - case 1166: - case 1611: - return new InvalidFieldNameException($exception, $query); - - case 1052: - case 1060: - case 1110: - return new NonUniqueFieldNameException($exception, $query); - - case 1064: - case 1149: - case 1287: - case 1341: - case 1342: - case 1343: - case 1344: - case 1382: - case 1479: - case 1541: - case 1554: - case 1626: - return new SyntaxErrorException($exception, $query); - - case 1044: - case 1045: - case 1046: - case 1049: - case 1095: - case 1142: - case 1143: - case 1227: - case 1370: - case 1429: - case 2002: - case 2005: - case 2054: - return new ConnectionException($exception, $query); - - case 2006: - case 4031: - return new ConnectionLost($exception, $query); - - case 1048: - case 1121: - case 1138: - case 1171: - case 1252: - case 1263: - case 1364: - case 1566: - return new NotNullConstraintViolationException($exception, $query); - } - - return new DriverException($exception, $query); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/API/OCI/ExceptionConverter.php b/vendor/doctrine/dbal/src/Driver/API/OCI/ExceptionConverter.php deleted file mode 100644 index 4703a57..0000000 --- a/vendor/doctrine/dbal/src/Driver/API/OCI/ExceptionConverter.php +++ /dev/null @@ -1,74 +0,0 @@ -getCode()) { - case 1: - case 2299: - case 38911: - return new UniqueConstraintViolationException($exception, $query); - - case 904: - return new InvalidFieldNameException($exception, $query); - - case 918: - case 960: - return new NonUniqueFieldNameException($exception, $query); - - case 923: - return new SyntaxErrorException($exception, $query); - - case 942: - return new TableNotFoundException($exception, $query); - - case 955: - return new TableExistsException($exception, $query); - - case 1017: - case 12545: - return new ConnectionException($exception, $query); - - case 1400: - return new NotNullConstraintViolationException($exception, $query); - - case 1918: - return new DatabaseDoesNotExist($exception, $query); - - case 2289: - case 2443: - case 4080: - return new DatabaseObjectNotFoundException($exception, $query); - - case 2266: - case 2291: - case 2292: - return new ForeignKeyConstraintViolationException($exception, $query); - } - - return new DriverException($exception, $query); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php b/vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php deleted file mode 100644 index 2baca1e..0000000 --- a/vendor/doctrine/dbal/src/Driver/API/PostgreSQL/ExceptionConverter.php +++ /dev/null @@ -1,89 +0,0 @@ -getSQLState()) { - case '40001': - case '40P01': - return new DeadlockException($exception, $query); - - case '0A000': - // Foreign key constraint violations during a TRUNCATE operation - // are considered "feature not supported" in PostgreSQL. - if (strpos($exception->getMessage(), 'truncate') !== false) { - return new ForeignKeyConstraintViolationException($exception, $query); - } - - break; - - case '23502': - return new NotNullConstraintViolationException($exception, $query); - - case '23503': - return new ForeignKeyConstraintViolationException($exception, $query); - - case '23505': - return new UniqueConstraintViolationException($exception, $query); - - case '3D000': - return new DatabaseDoesNotExist($exception, $query); - - case '3F000': - return new SchemaDoesNotExist($exception, $query); - - case '42601': - return new SyntaxErrorException($exception, $query); - - case '42702': - return new NonUniqueFieldNameException($exception, $query); - - case '42703': - return new InvalidFieldNameException($exception, $query); - - case '42P01': - return new TableNotFoundException($exception, $query); - - case '42P07': - return new TableExistsException($exception, $query); - - case '08006': - return new ConnectionException($exception, $query); - } - - // Prior to fixing https://bugs.php.net/bug.php?id=64705 (PHP 7.4.10), - // in some cases (mainly connection errors) the PDO exception wouldn't provide a SQLSTATE via its code. - // We have to match against the SQLSTATE in the error message in these cases. - if ($exception->getCode() === 7 && strpos($exception->getMessage(), 'SQLSTATE[08006]') !== false) { - return new ConnectionException($exception, $query); - } - - return new DriverException($exception, $query); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/API/SQLSrv/ExceptionConverter.php b/vendor/doctrine/dbal/src/Driver/API/SQLSrv/ExceptionConverter.php deleted file mode 100644 index d0e8e9f..0000000 --- a/vendor/doctrine/dbal/src/Driver/API/SQLSrv/ExceptionConverter.php +++ /dev/null @@ -1,69 +0,0 @@ -getCode()) { - case 102: - return new SyntaxErrorException($exception, $query); - - case 207: - return new InvalidFieldNameException($exception, $query); - - case 208: - return new TableNotFoundException($exception, $query); - - case 209: - return new NonUniqueFieldNameException($exception, $query); - - case 515: - return new NotNullConstraintViolationException($exception, $query); - - case 547: - case 4712: - return new ForeignKeyConstraintViolationException($exception, $query); - - case 2601: - case 2627: - return new UniqueConstraintViolationException($exception, $query); - - case 2714: - return new TableExistsException($exception, $query); - - case 3701: - case 15151: - return new DatabaseObjectNotFoundException($exception, $query); - - case 11001: - case 18456: - return new ConnectionException($exception, $query); - } - - return new DriverException($exception, $query); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/API/SQLite/ExceptionConverter.php b/vendor/doctrine/dbal/src/Driver/API/SQLite/ExceptionConverter.php deleted file mode 100644 index 9e67155..0000000 --- a/vendor/doctrine/dbal/src/Driver/API/SQLite/ExceptionConverter.php +++ /dev/null @@ -1,85 +0,0 @@ -getMessage(), 'database is locked') !== false) { - return new LockWaitTimeoutException($exception, $query); - } - - if ( - strpos($exception->getMessage(), 'must be unique') !== false || - strpos($exception->getMessage(), 'is not unique') !== false || - strpos($exception->getMessage(), 'are not unique') !== false || - strpos($exception->getMessage(), 'UNIQUE constraint failed') !== false - ) { - return new UniqueConstraintViolationException($exception, $query); - } - - if ( - strpos($exception->getMessage(), 'may not be NULL') !== false || - strpos($exception->getMessage(), 'NOT NULL constraint failed') !== false - ) { - return new NotNullConstraintViolationException($exception, $query); - } - - if (strpos($exception->getMessage(), 'no such table:') !== false) { - return new TableNotFoundException($exception, $query); - } - - if (strpos($exception->getMessage(), 'already exists') !== false) { - return new TableExistsException($exception, $query); - } - - if (strpos($exception->getMessage(), 'has no column named') !== false) { - return new InvalidFieldNameException($exception, $query); - } - - if (strpos($exception->getMessage(), 'ambiguous column name') !== false) { - return new NonUniqueFieldNameException($exception, $query); - } - - if (strpos($exception->getMessage(), 'syntax error') !== false) { - return new SyntaxErrorException($exception, $query); - } - - if (strpos($exception->getMessage(), 'attempt to write a readonly database') !== false) { - return new ReadOnlyException($exception, $query); - } - - if (strpos($exception->getMessage(), 'unable to open database file') !== false) { - return new ConnectionException($exception, $query); - } - - if (strpos($exception->getMessage(), 'FOREIGN KEY constraint failed') !== false) { - return new ForeignKeyConstraintViolationException($exception, $query); - } - - return new DriverException($exception, $query); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/API/SQLite/UserDefinedFunctions.php b/vendor/doctrine/dbal/src/Driver/API/SQLite/UserDefinedFunctions.php deleted file mode 100644 index 3779c8b..0000000 --- a/vendor/doctrine/dbal/src/Driver/API/SQLite/UserDefinedFunctions.php +++ /dev/null @@ -1,80 +0,0 @@ - ['callback' => [SqlitePlatform::class, 'udfSqrt'], 'numArgs' => 1], - 'mod' => ['callback' => [SqlitePlatform::class, 'udfMod'], 'numArgs' => 2], - 'locate' => ['callback' => [SqlitePlatform::class, 'udfLocate'], 'numArgs' => -1], - ]; - - /** - * @param callable(string, callable, int): bool $callback - * @param array $additionalFunctions - */ - public static function register(callable $callback, array $additionalFunctions = []): void - { - $userDefinedFunctions = array_merge(self::DEFAULT_FUNCTIONS, $additionalFunctions); - - foreach ($userDefinedFunctions as $function => $data) { - $callback($function, $data['callback'], $data['numArgs']); - } - } - - /** - * User-defined function that implements MOD(). - * - * @param int $a - * @param int $b - */ - public static function mod($a, $b): int - { - return $a % $b; - } - - /** - * User-defined function that implements LOCATE(). - * - * @param string $str - * @param string $substr - * @param int $offset - */ - public static function locate($str, $substr, $offset = 0): int - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5749', - 'Relying on DBAL\'s emulated LOCATE() function is deprecated. ' - . 'Use INSTR() or %s::getLocateExpression() instead.', - AbstractPlatform::class, - ); - - // SQL's LOCATE function works on 1-based positions, while PHP's strpos works on 0-based positions. - // So we have to make them compatible if an offset is given. - if ($offset > 0) { - $offset -= 1; - } - - $pos = strpos($str, $substr, $offset); - - if ($pos !== false) { - return $pos + 1; - } - - return 0; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php b/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php deleted file mode 100644 index 81d8432..0000000 --- a/vendor/doctrine/dbal/src/Driver/AbstractDB2Driver.php +++ /dev/null @@ -1,100 +0,0 @@ -getVersionNumber($version), '11.1', '>=')) { - return new DB2111Platform(); - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5156', - 'IBM DB2 < 11.1 support is deprecated and will be removed in DBAL 4.' - . ' Consider upgrading to IBM DB2 11.1 or later.', - ); - - return $this->getDatabasePlatform(); - } - - /** - * Detects IBM DB2 server version - * - * @param string $versionString Version string as returned by IBM DB2 server, i.e. 'DB2/LINUXX8664 11.5.8.0' - * - * @throws DBALException - */ - private function getVersionNumber(string $versionString): string - { - if ( - preg_match( - '/^(?:[^\s]+\s)?(?P\d+)\.(?P\d+)\.(?P\d+)/i', - $versionString, - $versionParts, - ) !== 1 - ) { - throw DBALException::invalidPlatformVersionSpecified( - $versionString, - '^(?:[^\s]+\s)?..', - ); - } - - return $versionParts['major'] . '.' . $versionParts['minor'] . '.' . $versionParts['patch']; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/AbstractException.php b/vendor/doctrine/dbal/src/Driver/AbstractException.php deleted file mode 100644 index 389f82e..0000000 --- a/vendor/doctrine/dbal/src/Driver/AbstractException.php +++ /dev/null @@ -1,44 +0,0 @@ -sqlState = $sqlState; - } - - /** - * {@inheritDoc} - */ - public function getSQLState() - { - return $this->sqlState; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php b/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php deleted file mode 100644 index f8c3b39..0000000 --- a/vendor/doctrine/dbal/src/Driver/AbstractMySQLDriver.php +++ /dev/null @@ -1,231 +0,0 @@ -getMariaDbMysqlVersionNumber($version); - if (version_compare($mariaDbVersion, '10.10.0', '>=')) { - return new MariaDb1010Platform(); - } - - if (version_compare($mariaDbVersion, '10.6.0', '>=')) { - return new MariaDb1060Platform(); - } - - if (version_compare($mariaDbVersion, '10.5.2', '>=')) { - return new MariaDb1052Platform(); - } - - if (version_compare($mariaDbVersion, '10.4.3', '>=')) { - return new MariaDb1043Platform(); - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6110', - 'Support for MariaDB < 10.4 is deprecated and will be removed in DBAL 4.' - . ' Consider upgrading to a more recent version of MariaDB.', - ); - - if (version_compare($mariaDbVersion, '10.2.7', '>=')) { - return new MariaDb1027Platform(); - } - } else { - $oracleMysqlVersion = $this->getOracleMysqlVersionNumber($version); - - if (version_compare($oracleMysqlVersion, '8.4.0', '>=')) { - if (! version_compare($version, '8.4.0', '>=')) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/dbal/pull/5779', - 'Version detection logic for MySQL will change in DBAL 4. ' - . 'Please specify the version as the server reports it, e.g. "8.4.0" instead of "8.4".', - ); - } - - return new MySQL84Platform(); - } - - if (version_compare($oracleMysqlVersion, '8', '>=')) { - if (! version_compare($version, '8.0.0', '>=')) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/dbal/pull/5779', - 'Version detection logic for MySQL will change in DBAL 4. ' - . 'Please specify the version as the server reports it, e.g. "8.0.31" instead of "8".', - ); - } - - return new MySQL80Platform(); - } - - if (version_compare($oracleMysqlVersion, '5.7.9', '>=')) { - if (! version_compare($version, '5.7.9', '>=')) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/dbal/pull/5779', - 'Version detection logic for MySQL will change in DBAL 4. ' - . 'Please specify the version as the server reports it, e.g. "5.7.40" instead of "5.7".', - ); - } - - return new MySQL57Platform(); - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5072', - 'MySQL 5.6 support is deprecated and will be removed in DBAL 4.' - . ' Consider upgrading to MySQL 5.7 or later.', - ); - } - - return $this->getDatabasePlatform(); - } - - /** - * Get a normalized 'version number' from the server string - * returned by Oracle MySQL servers. - * - * @param string $versionString Version string returned by the driver, i.e. '5.7.10' - * - * @throws Exception - */ - private function getOracleMysqlVersionNumber(string $versionString): string - { - if ( - preg_match( - '/^(?P\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?/', - $versionString, - $versionParts, - ) !== 1 - ) { - throw Exception::invalidPlatformVersionSpecified( - $versionString, - '..', - ); - } - - $majorVersion = $versionParts['major']; - $minorVersion = $versionParts['minor'] ?? 0; - $patchVersion = $versionParts['patch'] ?? null; - - if ($majorVersion === '5' && $minorVersion === '7') { - $patchVersion ??= '9'; - } else { - $patchVersion ??= '0'; - } - - return $majorVersion . '.' . $minorVersion . '.' . $patchVersion; - } - - /** - * Detect MariaDB server version, including hack for some mariadb distributions - * that starts with the prefix '5.5.5-' - * - * @param string $versionString Version string as returned by mariadb server, i.e. '5.5.5-Mariadb-10.0.8-xenial' - * - * @throws Exception - */ - private function getMariaDbMysqlVersionNumber(string $versionString): string - { - if (stripos($versionString, 'MariaDB') === 0) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/dbal/pull/5779', - 'Version detection logic for MySQL will change in DBAL 4. ' - . 'Please specify the version as the server reports it, ' - . 'e.g. "10.9.3-MariaDB" instead of "mariadb-10.9".', - ); - } - - if ( - preg_match( - '/^(?:5\.5\.5-)?(mariadb-)?(?P\d+)\.(?P\d+)\.(?P\d+)/i', - $versionString, - $versionParts, - ) !== 1 - ) { - throw Exception::invalidPlatformVersionSpecified( - $versionString, - '^(?:5\.5\.5-)?(mariadb-)?..', - ); - } - - return $versionParts['major'] . '.' . $versionParts['minor'] . '.' . $versionParts['patch']; - } - - /** - * {@inheritDoc} - * - * @return AbstractMySQLPlatform - */ - public function getDatabasePlatform() - { - return new MySQLPlatform(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@link AbstractMySQLPlatform::createSchemaManager()} instead. - * - * @return MySQLSchemaManager - */ - public function getSchemaManager(Connection $conn, AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5458', - 'AbstractMySQLDriver::getSchemaManager() is deprecated.' - . ' Use MySQLPlatform::createSchemaManager() instead.', - ); - - assert($platform instanceof AbstractMySQLPlatform); - - return new MySQLSchemaManager($conn, $platform); - } - - public function getExceptionConverter(): ExceptionConverter - { - return new MySQL\ExceptionConverter(); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php b/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php deleted file mode 100644 index b0f9245..0000000 --- a/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver.php +++ /dev/null @@ -1,65 +0,0 @@ - $params The connection parameters to return the Easy Connect String for. - * - * @return string - */ - protected function getEasyConnectString(array $params) - { - return (string) EasyConnectString::fromConnectionParameters($params); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver/EasyConnectString.php b/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver/EasyConnectString.php deleted file mode 100644 index 91bc6a7..0000000 --- a/vendor/doctrine/dbal/src/Driver/AbstractOracleDriver/EasyConnectString.php +++ /dev/null @@ -1,116 +0,0 @@ -string = $string; - } - - public function __toString(): string - { - return $this->string; - } - - /** - * Creates the object from an array representation - * - * @param mixed[] $params - */ - public static function fromArray(array $params): self - { - return new self(self::renderParams($params)); - } - - /** - * Creates the object from the given DBAL connection parameters. - * - * @param mixed[] $params - */ - public static function fromConnectionParameters(array $params): self - { - if (isset($params['connectstring'])) { - return new self($params['connectstring']); - } - - if (! isset($params['host'])) { - return new self($params['dbname'] ?? ''); - } - - $connectData = []; - - if (isset($params['servicename']) || isset($params['dbname'])) { - $serviceKey = 'SID'; - - if (isset($params['service'])) { - $serviceKey = 'SERVICE_NAME'; - } - - $serviceName = $params['servicename'] ?? $params['dbname']; - - $connectData[$serviceKey] = $serviceName; - } - - if (isset($params['instancename'])) { - $connectData['INSTANCE_NAME'] = $params['instancename']; - } - - if (! empty($params['pooled'])) { - $connectData['SERVER'] = 'POOLED'; - } - - return self::fromArray([ - 'DESCRIPTION' => [ - 'ADDRESS' => [ - 'PROTOCOL' => 'TCP', - 'HOST' => $params['host'], - 'PORT' => $params['port'] ?? 1521, - ], - 'CONNECT_DATA' => $connectData, - ], - ]); - } - - /** @param mixed[] $params */ - private static function renderParams(array $params): string - { - $chunks = []; - - foreach ($params as $key => $value) { - $string = self::renderValue($value); - - if ($string === '') { - continue; - } - - $chunks[] = sprintf('(%s=%s)', $key, $string); - } - - return implode('', $chunks); - } - - /** @param mixed $value */ - private static function renderValue($value): string - { - if (is_array($value)) { - return self::renderParams($value); - } - - return (string) $value; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php b/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php deleted file mode 100644 index eba309d..0000000 --- a/vendor/doctrine/dbal/src/Driver/AbstractPostgreSQLDriver.php +++ /dev/null @@ -1,93 +0,0 @@ -\d+)(?:\.(?P\d+)(?:\.(?P\d+))?)?/', $version, $versionParts) !== 1) { - throw Exception::invalidPlatformVersionSpecified( - $version, - '..', - ); - } - - $majorVersion = $versionParts['major']; - $minorVersion = $versionParts['minor'] ?? 0; - $patchVersion = $versionParts['patch'] ?? 0; - $version = $majorVersion . '.' . $minorVersion . '.' . $patchVersion; - - if (version_compare($version, '12.0', '>=')) { - return new PostgreSQL120Platform(); - } - - if (version_compare($version, '10.0', '>=')) { - return new PostgreSQL100Platform(); - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5060', - 'PostgreSQL 9 support is deprecated and will be removed in DBAL 4.' - . ' Consider upgrading to Postgres 10 or later.', - ); - - return new PostgreSQL94Platform(); - } - - /** - * {@inheritDoc} - */ - public function getDatabasePlatform() - { - return new PostgreSQL94Platform(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@link PostgreSQLPlatform::createSchemaManager()} instead. - */ - public function getSchemaManager(Connection $conn, AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5458', - 'AbstractPostgreSQLDriver::getSchemaManager() is deprecated.' - . ' Use PostgreSQLPlatform::createSchemaManager() instead.', - ); - - assert($platform instanceof PostgreSQLPlatform); - - return new PostgreSQLSchemaManager($conn, $platform); - } - - public function getExceptionConverter(): ExceptionConverter - { - return new PostgreSQL\ExceptionConverter(); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php b/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php deleted file mode 100644 index b9a9955..0000000 --- a/vendor/doctrine/dbal/src/Driver/AbstractSQLServerDriver.php +++ /dev/null @@ -1,53 +0,0 @@ -exec('PRAGMA foreign_keys=ON'); - - return $connection; - } - }; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Connection.php b/vendor/doctrine/dbal/src/Driver/Connection.php deleted file mode 100644 index 2f460fd..0000000 --- a/vendor/doctrine/dbal/src/Driver/Connection.php +++ /dev/null @@ -1,86 +0,0 @@ -fetchNumeric(); - - if ($row === false) { - return false; - } - - return $row[0]; - } - - /** - * @return list> - * - * @throws Exception - */ - public static function fetchAllNumeric(Result $result): array - { - $rows = []; - - while (($row = $result->fetchNumeric()) !== false) { - $rows[] = $row; - } - - return $rows; - } - - /** - * @return list> - * - * @throws Exception - */ - public static function fetchAllAssociative(Result $result): array - { - $rows = []; - - while (($row = $result->fetchAssociative()) !== false) { - $rows[] = $row; - } - - return $rows; - } - - /** - * @return list - * - * @throws Exception - */ - public static function fetchFirstColumn(Result $result): array - { - $rows = []; - - while (($row = $result->fetchOne()) !== false) { - $rows[] = $row; - } - - return $rows; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php b/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php deleted file mode 100644 index dfb11c2..0000000 --- a/vendor/doctrine/dbal/src/Driver/IBMDB2/Connection.php +++ /dev/null @@ -1,141 +0,0 @@ -connection = $connection; - } - - /** - * {@inheritDoc} - */ - public function getServerVersion() - { - $serverInfo = db2_server_info($this->connection); - assert($serverInfo instanceof stdClass); - - return $serverInfo->DBMS_VER; - } - - public function prepare(string $sql): DriverStatement - { - $stmt = @db2_prepare($this->connection, $sql); - - if ($stmt === false) { - throw PrepareFailed::new(error_get_last()); - } - - return new Statement($stmt); - } - - public function query(string $sql): ResultInterface - { - return $this->prepare($sql)->execute(); - } - - /** - * {@inheritDoc} - */ - public function quote($value, $type = ParameterType::STRING) - { - $value = db2_escape_string($value); - - if ($type === ParameterType::INTEGER) { - return $value; - } - - return "'" . $value . "'"; - } - - public function exec(string $sql): int - { - $stmt = @db2_exec($this->connection, $sql); - - if ($stmt === false) { - throw StatementError::new(); - } - - return db2_num_rows($stmt); - } - - /** - * {@inheritDoc} - */ - public function lastInsertId($name = null) - { - if ($name !== null) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - } - - return db2_last_insert_id($this->connection) ?? false; - } - - public function beginTransaction(): bool - { - return db2_autocommit($this->connection, DB2_AUTOCOMMIT_OFF); - } - - public function commit(): bool - { - if (! db2_commit($this->connection)) { - throw ConnectionError::new($this->connection); - } - - return db2_autocommit($this->connection, DB2_AUTOCOMMIT_ON); - } - - public function rollBack(): bool - { - if (! db2_rollback($this->connection)) { - throw ConnectionError::new($this->connection); - } - - return db2_autocommit($this->connection, DB2_AUTOCOMMIT_ON); - } - - /** @return resource */ - public function getNativeConnection() - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/IBMDB2/DataSourceName.php b/vendor/doctrine/dbal/src/Driver/IBMDB2/DataSourceName.php deleted file mode 100644 index 124a6f6..0000000 --- a/vendor/doctrine/dbal/src/Driver/IBMDB2/DataSourceName.php +++ /dev/null @@ -1,84 +0,0 @@ -string = $string; - } - - public function toString(): string - { - return $this->string; - } - - /** - * Creates the object from an array representation - * - * @param array $params - */ - public static function fromArray( - #[SensitiveParameter] - array $params - ): self { - $chunks = []; - - foreach ($params as $key => $value) { - $chunks[] = sprintf('%s=%s', $key, $value); - } - - return new self(implode(';', $chunks)); - } - - /** - * Creates the object from the given DBAL connection parameters. - * - * @param array $params - */ - public static function fromConnectionParameters( - #[SensitiveParameter] - array $params - ): self { - if (isset($params['dbname']) && strpos($params['dbname'], '=') !== false) { - return new self($params['dbname']); - } - - $dsnParams = []; - - foreach ( - [ - 'host' => 'HOSTNAME', - 'port' => 'PORT', - 'protocol' => 'PROTOCOL', - 'dbname' => 'DATABASE', - 'user' => 'UID', - 'password' => 'PWD', - ] as $dbalParam => $dsnParam - ) { - if (! isset($params[$dbalParam])) { - continue; - } - - $dsnParams[$dsnParam] = $params[$dbalParam]; - } - - return self::fromArray($dsnParams); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/IBMDB2/Driver.php b/vendor/doctrine/dbal/src/Driver/IBMDB2/Driver.php deleted file mode 100644 index 7650db5..0000000 --- a/vendor/doctrine/dbal/src/Driver/IBMDB2/Driver.php +++ /dev/null @@ -1,41 +0,0 @@ -toString(); - - $username = $params['user'] ?? ''; - $password = $params['password'] ?? ''; - $driverOptions = $params['driverOptions'] ?? []; - - if (! empty($params['persistent'])) { - $connection = db2_pconnect($dataSourceName, $username, $password, $driverOptions); - } else { - $connection = db2_connect($dataSourceName, $username, $password, $driverOptions); - } - - if ($connection === false) { - throw ConnectionFailed::new(); - } - - return new Connection($connection); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCopyStreamToStream.php b/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCopyStreamToStream.php deleted file mode 100644 index 231c9d4..0000000 --- a/vendor/doctrine/dbal/src/Driver/IBMDB2/Exception/CannotCopyStreamToStream.php +++ /dev/null @@ -1,27 +0,0 @@ -statement = $statement; - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - $row = @db2_fetch_array($this->statement); - - if ($row === false && db2_stmt_error($this->statement) !== '02000') { - throw StatementError::new($this->statement); - } - - return $row; - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - $row = @db2_fetch_assoc($this->statement); - - if ($row === false && db2_stmt_error($this->statement) !== '02000') { - throw StatementError::new($this->statement); - } - - return $row; - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - return FetchUtils::fetchOne($this); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return FetchUtils::fetchAllNumeric($this); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - return FetchUtils::fetchAllAssociative($this); - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return FetchUtils::fetchFirstColumn($this); - } - - public function rowCount(): int - { - return @db2_num_rows($this->statement); - } - - public function columnCount(): int - { - $count = db2_num_fields($this->statement); - - if ($count !== false) { - return $count; - } - - return 0; - } - - public function free(): void - { - db2_free_result($this->statement); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/IBMDB2/Statement.php b/vendor/doctrine/dbal/src/Driver/IBMDB2/Statement.php deleted file mode 100644 index 699e236..0000000 --- a/vendor/doctrine/dbal/src/Driver/IBMDB2/Statement.php +++ /dev/null @@ -1,220 +0,0 @@ - - */ - private array $lobs = []; - - /** - * @internal The statement can be only instantiated by its driver connection. - * - * @param resource $stmt - */ - public function __construct($stmt) - { - $this->stmt = $stmt; - } - - /** - * {@inheritDoc} - */ - public function bindValue($param, $value, $type = ParameterType::STRING): bool - { - assert(is_int($param)); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - return $this->bindParam($param, $value, $type); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see bindValue()} instead. - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - assert(is_int($param)); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - switch ($type) { - case ParameterType::INTEGER: - $this->bind($param, $variable, DB2_PARAM_IN, DB2_LONG); - break; - - case ParameterType::LARGE_OBJECT: - $this->lobs[$param] = &$variable; - break; - - default: - $this->bind($param, $variable, DB2_PARAM_IN, DB2_CHAR); - break; - } - - return true; - } - - /** - * @param int $position Parameter position - * @param mixed $variable - * - * @throws Exception - */ - private function bind($position, &$variable, int $parameterType, int $dataType): void - { - $this->parameters[$position] =& $variable; - - if (! db2_bind_param($this->stmt, $position, '', $parameterType, $dataType)) { - throw StatementError::new($this->stmt); - } - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): ResultInterface - { - if ($params !== null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::execute() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - } - - $handles = $this->bindLobs(); - - $result = @db2_execute($this->stmt, $params ?? $this->parameters); - - foreach ($handles as $handle) { - fclose($handle); - } - - $this->lobs = []; - - if ($result === false) { - throw StatementError::new($this->stmt); - } - - return new Result($this->stmt); - } - - /** - * @return list - * - * @throws Exception - */ - private function bindLobs(): array - { - $handles = []; - - foreach ($this->lobs as $param => $value) { - if (is_resource($value)) { - $handle = $handles[] = $this->createTemporaryFile(); - $path = stream_get_meta_data($handle)['uri']; - - $this->copyStreamToStream($value, $handle); - - $this->bind($param, $path, DB2_PARAM_FILE, DB2_BINARY); - } else { - $this->bind($param, $value, DB2_PARAM_IN, DB2_CHAR); - } - - unset($value); - } - - return $handles; - } - - /** - * @return resource - * - * @throws Exception - */ - private function createTemporaryFile() - { - $handle = @tmpfile(); - - if ($handle === false) { - throw CannotCreateTemporaryFile::new(error_get_last()); - } - - return $handle; - } - - /** - * @param resource $source - * @param resource $target - * - * @throws Exception - */ - private function copyStreamToStream($source, $target): void - { - if (@stream_copy_to_stream($source, $target) === false) { - throw CannotCopyStreamToStream::new(error_get_last()); - } - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Middleware.php b/vendor/doctrine/dbal/src/Driver/Middleware.php deleted file mode 100644 index 4629d9a..0000000 --- a/vendor/doctrine/dbal/src/Driver/Middleware.php +++ /dev/null @@ -1,12 +0,0 @@ -wrappedConnection = $wrappedConnection; - } - - public function prepare(string $sql): Statement - { - return $this->wrappedConnection->prepare($sql); - } - - public function query(string $sql): Result - { - return $this->wrappedConnection->query($sql); - } - - /** - * {@inheritDoc} - */ - public function quote($value, $type = ParameterType::STRING) - { - return $this->wrappedConnection->quote($value, $type); - } - - public function exec(string $sql): int - { - return $this->wrappedConnection->exec($sql); - } - - /** - * {@inheritDoc} - */ - public function lastInsertId($name = null) - { - if ($name !== null) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - } - - return $this->wrappedConnection->lastInsertId($name); - } - - /** - * {@inheritDoc} - */ - public function beginTransaction() - { - return $this->wrappedConnection->beginTransaction(); - } - - /** - * {@inheritDoc} - */ - public function commit() - { - return $this->wrappedConnection->commit(); - } - - /** - * {@inheritDoc} - */ - public function rollBack() - { - return $this->wrappedConnection->rollBack(); - } - - /** - * {@inheritDoc} - */ - public function getServerVersion() - { - if (! $this->wrappedConnection instanceof ServerInfoAwareConnection) { - throw new LogicException('The underlying connection is not a ServerInfoAwareConnection'); - } - - return $this->wrappedConnection->getServerVersion(); - } - - /** @return resource|object */ - public function getNativeConnection() - { - if (! method_exists($this->wrappedConnection, 'getNativeConnection')) { - throw new LogicException(sprintf( - 'The driver connection %s does not support accessing the native connection.', - get_class($this->wrappedConnection), - )); - } - - return $this->wrappedConnection->getNativeConnection(); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php b/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php deleted file mode 100644 index 1c9d430..0000000 --- a/vendor/doctrine/dbal/src/Driver/Middleware/AbstractDriverMiddleware.php +++ /dev/null @@ -1,73 +0,0 @@ -wrappedDriver = $wrappedDriver; - } - - /** - * {@inheritDoc} - */ - public function connect( - #[SensitiveParameter] - array $params - ) { - return $this->wrappedDriver->connect($params); - } - - /** - * {@inheritDoc} - */ - public function getDatabasePlatform() - { - return $this->wrappedDriver->getDatabasePlatform(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@link AbstractPlatform::createSchemaManager()} instead. - */ - public function getSchemaManager(Connection $conn, AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5458', - 'AbstractDriverMiddleware::getSchemaManager() is deprecated.' - . ' Use AbstractPlatform::createSchemaManager() instead.', - ); - - return $this->wrappedDriver->getSchemaManager($conn, $platform); - } - - public function getExceptionConverter(): ExceptionConverter - { - return $this->wrappedDriver->getExceptionConverter(); - } - - /** - * {@inheritDoc} - */ - public function createDatabasePlatformForVersion($version) - { - if ($this->wrappedDriver instanceof VersionAwarePlatformDriver) { - return $this->wrappedDriver->createDatabasePlatformForVersion($version); - } - - return $this->wrappedDriver->getDatabasePlatform(); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php b/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php deleted file mode 100644 index 198d39b..0000000 --- a/vendor/doctrine/dbal/src/Driver/Middleware/AbstractResultMiddleware.php +++ /dev/null @@ -1,78 +0,0 @@ -wrappedResult = $result; - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - return $this->wrappedResult->fetchNumeric(); - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - return $this->wrappedResult->fetchAssociative(); - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - return $this->wrappedResult->fetchOne(); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return $this->wrappedResult->fetchAllNumeric(); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - return $this->wrappedResult->fetchAllAssociative(); - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return $this->wrappedResult->fetchFirstColumn(); - } - - public function rowCount(): int - { - return $this->wrappedResult->rowCount(); - } - - public function columnCount(): int - { - return $this->wrappedResult->columnCount(); - } - - public function free(): void - { - $this->wrappedResult->free(); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php b/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php deleted file mode 100644 index 6cd2f8f..0000000 --- a/vendor/doctrine/dbal/src/Driver/Middleware/AbstractStatementMiddleware.php +++ /dev/null @@ -1,71 +0,0 @@ -wrappedStatement = $wrappedStatement; - } - - /** - * {@inheritDoc} - */ - public function bindValue($param, $value, $type = ParameterType::STRING) - { - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - return $this->wrappedStatement->bindValue($param, $value, $type); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see bindValue()} instead. - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - return $this->wrappedStatement->bindParam($param, $variable, $type, $length); - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): Result - { - return $this->wrappedStatement->execute($params); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php deleted file mode 100644 index d492684..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Connection.php +++ /dev/null @@ -1,141 +0,0 @@ -connection = $connection; - } - - /** - * Retrieves mysqli native resource handle. - * - * Could be used if part of your application is not using DBAL. - * - * @deprecated Call {@see getNativeConnection()} instead. - */ - public function getWrappedResourceHandle(): mysqli - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5037', - '%s is deprecated, call getNativeConnection() instead.', - __METHOD__, - ); - - return $this->getNativeConnection(); - } - - public function getServerVersion(): string - { - return $this->connection->get_server_info(); - } - - public function prepare(string $sql): DriverStatement - { - try { - $stmt = $this->connection->prepare($sql); - } catch (mysqli_sql_exception $e) { - throw ConnectionError::upcast($e); - } - - if ($stmt === false) { - throw ConnectionError::new($this->connection); - } - - return new Statement($stmt); - } - - public function query(string $sql): ResultInterface - { - return $this->prepare($sql)->execute(); - } - - /** - * {@inheritDoc} - */ - public function quote($value, $type = ParameterType::STRING) - { - return "'" . $this->connection->escape_string($value) . "'"; - } - - public function exec(string $sql): int - { - try { - $result = $this->connection->query($sql); - } catch (mysqli_sql_exception $e) { - throw ConnectionError::upcast($e); - } - - if ($result === false) { - throw ConnectionError::new($this->connection); - } - - return $this->connection->affected_rows; - } - - /** - * {@inheritDoc} - */ - public function lastInsertId($name = null) - { - if ($name !== null) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - } - - return $this->connection->insert_id; - } - - public function beginTransaction(): bool - { - $this->connection->begin_transaction(); - - return true; - } - - public function commit(): bool - { - try { - return $this->connection->commit(); - } catch (mysqli_sql_exception $e) { - return false; - } - } - - public function rollBack(): bool - { - try { - return $this->connection->rollback(); - } catch (mysqli_sql_exception $e) { - return false; - } - } - - public function getNativeConnection(): mysqli - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php deleted file mode 100644 index 4f51868..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Driver.php +++ /dev/null @@ -1,117 +0,0 @@ -compilePreInitializers($params) as $initializer) { - $initializer->initialize($connection); - } - - try { - $success = @$connection->real_connect( - $host, - $params['user'] ?? null, - $params['password'] ?? null, - $params['dbname'] ?? null, - $params['port'] ?? null, - $params['unix_socket'] ?? null, - $params['driverOptions'][Connection::OPTION_FLAGS] ?? 0, - ); - } catch (mysqli_sql_exception $e) { - throw ConnectionFailed::upcast($e); - } - - if (! $success) { - throw ConnectionFailed::new($connection); - } - - foreach ($this->compilePostInitializers($params) as $initializer) { - $initializer->initialize($connection); - } - - return new Connection($connection); - } - - /** - * @param array $params - * - * @return Generator - */ - private function compilePreInitializers( - #[SensitiveParameter] - array $params - ): Generator { - unset($params['driverOptions'][Connection::OPTION_FLAGS]); - - if (isset($params['driverOptions']) && $params['driverOptions'] !== []) { - yield new Options($params['driverOptions']); - } - - if ( - ! isset($params['ssl_key']) && - ! isset($params['ssl_cert']) && - ! isset($params['ssl_ca']) && - ! isset($params['ssl_capath']) && - ! isset($params['ssl_cipher']) - ) { - return; - } - - yield new Secure( - $params['ssl_key'] ?? '', - $params['ssl_cert'] ?? '', - $params['ssl_ca'] ?? '', - $params['ssl_capath'] ?? '', - $params['ssl_cipher'] ?? '', - ); - } - - /** - * @param array $params - * - * @return Generator - */ - private function compilePostInitializers( - #[SensitiveParameter] - array $params - ): Generator { - if (! isset($params['charset'])) { - return; - } - - yield new Charset($params['charset']); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/ConnectionError.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/ConnectionError.php deleted file mode 100644 index ef5b980..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/ConnectionError.php +++ /dev/null @@ -1,31 +0,0 @@ -error, $connection->sqlstate, $connection->errno); - } - - public static function upcast(mysqli_sql_exception $exception): self - { - $p = new ReflectionProperty(mysqli_sql_exception::class, 'sqlstate'); - $p->setAccessible(true); - - return new self($exception->getMessage(), $p->getValue($exception), (int) $exception->getCode(), $exception); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/ConnectionFailed.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/ConnectionFailed.php deleted file mode 100644 index 44a8cab..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/ConnectionFailed.php +++ /dev/null @@ -1,36 +0,0 @@ -connect_error; - assert($error !== null); - - return new self($error, 'HY000', $connection->connect_errno); - } - - public static function upcast(mysqli_sql_exception $exception): self - { - $p = new ReflectionProperty(mysqli_sql_exception::class, 'sqlstate'); - $p->setAccessible(true); - - return new self($exception->getMessage(), $p->getValue($exception), (int) $exception->getCode(), $exception); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/FailedReadingStreamOffset.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/FailedReadingStreamOffset.php deleted file mode 100644 index 6f26dbe..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/FailedReadingStreamOffset.php +++ /dev/null @@ -1,22 +0,0 @@ -error), - $connection->sqlstate, - $connection->errno, - ); - } - - public static function upcast(mysqli_sql_exception $exception, string $charset): self - { - $p = new ReflectionProperty(mysqli_sql_exception::class, 'sqlstate'); - $p->setAccessible(true); - - return new self( - sprintf('Failed to set charset "%s": %s', $charset, $exception->getMessage()), - $p->getValue($exception), - (int) $exception->getCode(), - $exception, - ); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidOption.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidOption.php deleted file mode 100644 index 6fb4631..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Exception/InvalidOption.php +++ /dev/null @@ -1,25 +0,0 @@ -error, $statement->sqlstate, $statement->errno); - } - - public static function upcast(mysqli_sql_exception $exception): self - { - $p = new ReflectionProperty(mysqli_sql_exception::class, 'sqlstate'); - $p->setAccessible(true); - - return new self($exception->getMessage(), $p->getValue($exception), (int) $exception->getCode(), $exception); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer.php deleted file mode 100644 index efab67e..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer.php +++ /dev/null @@ -1,14 +0,0 @@ -charset = $charset; - } - - public function initialize(mysqli $connection): void - { - try { - $success = $connection->set_charset($this->charset); - } catch (mysqli_sql_exception $e) { - throw InvalidCharset::upcast($e, $this->charset); - } - - if ($success) { - return; - } - - throw InvalidCharset::fromCharset($connection, $this->charset); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Options.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Options.php deleted file mode 100644 index 2e66f8d..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Options.php +++ /dev/null @@ -1,32 +0,0 @@ - */ - private array $options; - - /** @param array $options */ - public function __construct(array $options) - { - $this->options = $options; - } - - public function initialize(mysqli $connection): void - { - foreach ($this->options as $option => $value) { - if (! mysqli_options($connection, $option, $value)) { - throw InvalidOption::fromOption($option, $value); - } - } - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Secure.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Secure.php deleted file mode 100644 index a25fcfc..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Initializer/Secure.php +++ /dev/null @@ -1,38 +0,0 @@ -key = $key; - $this->cert = $cert; - $this->ca = $ca; - $this->capath = $capath; - $this->cipher = $cipher; - } - - public function initialize(mysqli $connection): void - { - $connection->ssl_set($this->key, $this->cert, $this->ca, $this->capath, $this->cipher); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php deleted file mode 100644 index c7dc65d..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Result.php +++ /dev/null @@ -1,179 +0,0 @@ - - */ - private array $columnNames = []; - - /** @var mixed[] */ - private array $boundValues = []; - - /** - * @internal The result can be only instantiated by its driver connection or statement. - * - * @throws Exception - */ - public function __construct(mysqli_stmt $statement) - { - $this->statement = $statement; - - $meta = $statement->result_metadata(); - - if ($meta === false) { - return; - } - - $this->hasColumns = true; - - $this->columnNames = array_column($meta->fetch_fields(), 'name'); - - $meta->free(); - - // Store result of every execution which has it. Otherwise it will be impossible - // to execute a new statement in case if the previous one has non-fetched rows - // @link http://dev.mysql.com/doc/refman/5.7/en/commands-out-of-sync.html - $this->statement->store_result(); - - // Bind row values _after_ storing the result. Otherwise, if mysqli is compiled with libmysql, - // it will have to allocate as much memory as it may be needed for the given column type - // (e.g. for a LONGBLOB column it's 4 gigabytes) - // @link https://bugs.php.net/bug.php?id=51386#1270673122 - // - // Make sure that the values are bound after each execution. Otherwise, if free() has been - // previously called on the result, the values are unbound making the statement unusable. - // - // It's also important that row values are bound after _each_ call to store_result(). Otherwise, - // if mysqli is compiled with libmysql, subsequently fetched string values will get truncated - // to the length of the ones fetched during the previous execution. - $this->boundValues = array_fill(0, count($this->columnNames), null); - - // The following is necessary as PHP cannot handle references to properties properly - $refs = &$this->boundValues; - - if (! $this->statement->bind_result(...$refs)) { - throw StatementError::new($this->statement); - } - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - try { - $ret = $this->statement->fetch(); - } catch (mysqli_sql_exception $e) { - throw StatementError::upcast($e); - } - - if ($ret === false) { - throw StatementError::new($this->statement); - } - - if ($ret === null) { - return false; - } - - $values = []; - - foreach ($this->boundValues as $v) { - $values[] = $v; - } - - return $values; - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - $values = $this->fetchNumeric(); - - if ($values === false) { - return false; - } - - return array_combine($this->columnNames, $values); - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - return FetchUtils::fetchOne($this); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return FetchUtils::fetchAllNumeric($this); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - return FetchUtils::fetchAllAssociative($this); - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return FetchUtils::fetchFirstColumn($this); - } - - public function rowCount(): int - { - if ($this->hasColumns) { - return $this->statement->num_rows; - } - - return $this->statement->affected_rows; - } - - public function columnCount(): int - { - return $this->statement->field_count; - } - - public function free(): void - { - $this->statement->free_result(); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php b/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php deleted file mode 100644 index fec7c95..0000000 --- a/vendor/doctrine/dbal/src/Driver/Mysqli/Statement.php +++ /dev/null @@ -1,239 +0,0 @@ - 's', - ParameterType::STRING => 's', - ParameterType::BINARY => 's', - ParameterType::BOOLEAN => 'i', - ParameterType::NULL => 's', - ParameterType::INTEGER => 'i', - ParameterType::LARGE_OBJECT => 'b', - ]; - - private mysqli_stmt $stmt; - - /** @var mixed[] */ - private array $boundValues; - - private string $types; - - /** - * Contains ref values for bindValue(). - * - * @var mixed[] - */ - private array $values = []; - - /** @internal The statement can be only instantiated by its driver connection. */ - public function __construct(mysqli_stmt $stmt) - { - $this->stmt = $stmt; - - $paramCount = $this->stmt->param_count; - $this->types = str_repeat('s', $paramCount); - $this->boundValues = array_fill(1, $paramCount, null); - } - - /** - * @deprecated Use {@see bindValue()} instead. - * - * {@inheritDoc} - * - * @psalm-assert ParameterType::* $type - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - assert(is_int($param)); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - if (! isset(self::PARAM_TYPE_MAP[$type])) { - throw UnknownParameterType::new($type); - } - - $this->boundValues[$param] =& $variable; - $this->types[$param - 1] = self::PARAM_TYPE_MAP[$type]; - - return true; - } - - /** - * {@inheritDoc} - * - * @psalm-assert ParameterType::* $type - */ - public function bindValue($param, $value, $type = ParameterType::STRING): bool - { - assert(is_int($param)); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - if (! isset(self::PARAM_TYPE_MAP[$type])) { - throw UnknownParameterType::new($type); - } - - $this->values[$param] = $value; - $this->boundValues[$param] =& $this->values[$param]; - $this->types[$param - 1] = self::PARAM_TYPE_MAP[$type]; - - return true; - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): ResultInterface - { - if ($params !== null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::execute() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - } - - if ($params !== null && count($params) > 0) { - if (! $this->bindUntypedValues($params)) { - throw StatementError::new($this->stmt); - } - } elseif (count($this->boundValues) > 0) { - $this->bindTypedParameters(); - } - - try { - $result = $this->stmt->execute(); - } catch (mysqli_sql_exception $e) { - throw StatementError::upcast($e); - } - - if (! $result) { - throw StatementError::new($this->stmt); - } - - return new Result($this->stmt); - } - - /** - * Binds parameters with known types previously bound to the statement - * - * @throws Exception - */ - private function bindTypedParameters(): void - { - $streams = $values = []; - $types = $this->types; - - foreach ($this->boundValues as $parameter => $value) { - assert(is_int($parameter)); - - if (! isset($types[$parameter - 1])) { - $types[$parameter - 1] = self::PARAM_TYPE_MAP[ParameterType::STRING]; - } - - if ($types[$parameter - 1] === self::PARAM_TYPE_MAP[ParameterType::LARGE_OBJECT]) { - if (is_resource($value)) { - if (get_resource_type($value) !== 'stream') { - throw NonStreamResourceUsedAsLargeObject::new($parameter); - } - - $streams[$parameter] = $value; - $values[$parameter] = null; - continue; - } - - $types[$parameter - 1] = self::PARAM_TYPE_MAP[ParameterType::STRING]; - } - - $values[$parameter] = $value; - } - - if (! $this->stmt->bind_param($types, ...$values)) { - throw StatementError::new($this->stmt); - } - - $this->sendLongData($streams); - } - - /** - * Handle $this->_longData after regular query parameters have been bound - * - * @param array $streams - * - * @throws Exception - */ - private function sendLongData(array $streams): void - { - foreach ($streams as $paramNr => $stream) { - while (! feof($stream)) { - $chunk = fread($stream, 8192); - - if ($chunk === false) { - throw FailedReadingStreamOffset::new($paramNr); - } - - if (! $this->stmt->send_long_data($paramNr - 1, $chunk)) { - throw StatementError::new($this->stmt); - } - } - } - } - - /** - * Binds a array of values to bound parameters. - * - * @param mixed[] $values - */ - private function bindUntypedValues(array $values): bool - { - return $this->stmt->bind_param(str_repeat('s', count($values)), ...$values); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php b/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php deleted file mode 100644 index 72353fa..0000000 --- a/vendor/doctrine/dbal/src/Driver/OCI8/Connection.php +++ /dev/null @@ -1,170 +0,0 @@ -connection = $connection; - $this->parser = new Parser(false); - $this->executionMode = new ExecutionMode(); - } - - public function getServerVersion(): string - { - $version = oci_server_version($this->connection); - - if ($version === false) { - throw Error::new($this->connection); - } - - $result = preg_match('/\s+(\d+\.\d+\.\d+\.\d+\.\d+)\s+/', $version, $matches); - assert($result === 1); - - return $matches[1]; - } - - /** @throws Parser\Exception */ - public function prepare(string $sql): DriverStatement - { - $visitor = new ConvertPositionalToNamedPlaceholders(); - - $this->parser->parse($sql, $visitor); - - $statement = oci_parse($this->connection, $visitor->getSQL()); - assert(is_resource($statement)); - - return new Statement($this->connection, $statement, $visitor->getParameterMap(), $this->executionMode); - } - - /** - * @throws Exception - * @throws Parser\Exception - */ - public function query(string $sql): ResultInterface - { - return $this->prepare($sql)->execute(); - } - - /** - * {@inheritDoc} - */ - public function quote($value, $type = ParameterType::STRING) - { - if (is_int($value) || is_float($value)) { - return $value; - } - - $value = str_replace("'", "''", $value); - - return "'" . addcslashes($value, "\000\n\r\\\032") . "'"; - } - - /** - * @throws Exception - * @throws Parser\Exception - */ - public function exec(string $sql): int - { - return $this->prepare($sql)->execute()->rowCount(); - } - - /** - * {@inheritDoc} - * - * @param string|null $name - * - * @return int|false - * - * @throws Parser\Exception - */ - public function lastInsertId($name = null) - { - if ($name === null) { - return false; - } - - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - - $result = $this->query('SELECT ' . $name . '.CURRVAL FROM DUAL')->fetchOne(); - - if ($result === false) { - throw SequenceDoesNotExist::new(); - } - - return (int) $result; - } - - public function beginTransaction(): bool - { - $this->executionMode->disableAutoCommit(); - - return true; - } - - public function commit(): bool - { - if (! oci_commit($this->connection)) { - throw Error::new($this->connection); - } - - $this->executionMode->enableAutoCommit(); - - return true; - } - - public function rollBack(): bool - { - if (! oci_rollback($this->connection)) { - throw Error::new($this->connection); - } - - $this->executionMode->enableAutoCommit(); - - return true; - } - - /** @return resource */ - public function getNativeConnection() - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/OCI8/ConvertPositionalToNamedPlaceholders.php b/vendor/doctrine/dbal/src/Driver/OCI8/ConvertPositionalToNamedPlaceholders.php deleted file mode 100644 index e2a1126..0000000 --- a/vendor/doctrine/dbal/src/Driver/OCI8/ConvertPositionalToNamedPlaceholders.php +++ /dev/null @@ -1,56 +0,0 @@ -). - * - * Oracle does not support positional parameters, hence this method converts all - * positional parameters into artificially named parameters. - * - * @internal This class is not covered by the backward compatibility promise - */ -final class ConvertPositionalToNamedPlaceholders implements Visitor -{ - /** @var list */ - private array $buffer = []; - - /** @var array */ - private array $parameterMap = []; - - public function acceptOther(string $sql): void - { - $this->buffer[] = $sql; - } - - public function acceptPositionalParameter(string $sql): void - { - $position = count($this->parameterMap) + 1; - $param = ':param' . $position; - - $this->parameterMap[$position] = $param; - - $this->buffer[] = $param; - } - - public function acceptNamedParameter(string $sql): void - { - $this->buffer[] = $sql; - } - - public function getSQL(): string - { - return implode('', $this->buffer); - } - - /** @return array */ - public function getParameterMap(): array - { - return $this->parameterMap; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/OCI8/Driver.php b/vendor/doctrine/dbal/src/Driver/OCI8/Driver.php deleted file mode 100644 index 650a4f9..0000000 --- a/vendor/doctrine/dbal/src/Driver/OCI8/Driver.php +++ /dev/null @@ -1,58 +0,0 @@ -getEasyConnectString($params); - - $persistent = ! empty($params['persistent']); - $exclusive = ! empty($params['driverOptions']['exclusive']); - - if ($persistent && $exclusive) { - throw InvalidConfiguration::forPersistentAndExclusive(); - } - - if ($persistent) { - $connection = @oci_pconnect($username, $password, $connectionString, $charset, $sessionMode); - } elseif ($exclusive) { - $connection = @oci_new_connect($username, $password, $connectionString, $charset, $sessionMode); - } else { - $connection = @oci_connect($username, $password, $connectionString, $charset, $sessionMode); - } - - if ($connection === false) { - throw ConnectionFailed::new(); - } - - return new Connection($connection); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/OCI8/Exception/ConnectionFailed.php b/vendor/doctrine/dbal/src/Driver/OCI8/Exception/ConnectionFailed.php deleted file mode 100644 index cefe9a3..0000000 --- a/vendor/doctrine/dbal/src/Driver/OCI8/Exception/ConnectionFailed.php +++ /dev/null @@ -1,26 +0,0 @@ -isAutoCommitEnabled = true; - } - - public function disableAutoCommit(): void - { - $this->isAutoCommitEnabled = false; - } - - public function isAutoCommitEnabled(): bool - { - return $this->isAutoCommitEnabled; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/OCI8/Middleware/InitializeSession.php b/vendor/doctrine/dbal/src/Driver/OCI8/Middleware/InitializeSession.php deleted file mode 100644 index 3a356fb..0000000 --- a/vendor/doctrine/dbal/src/Driver/OCI8/Middleware/InitializeSession.php +++ /dev/null @@ -1,38 +0,0 @@ -exec( - 'ALTER SESSION SET' - . " NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS'" - . " NLS_TIME_FORMAT = 'HH24:MI:SS'" - . " NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH24:MI:SS'" - . " NLS_TIMESTAMP_TZ_FORMAT = 'YYYY-MM-DD HH24:MI:SS TZH:TZM'" - . " NLS_NUMERIC_CHARACTERS = '.,'", - ); - - return $connection; - } - }; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/OCI8/Result.php b/vendor/doctrine/dbal/src/Driver/OCI8/Result.php deleted file mode 100644 index 08add4f..0000000 --- a/vendor/doctrine/dbal/src/Driver/OCI8/Result.php +++ /dev/null @@ -1,145 +0,0 @@ -statement = $statement; - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - return $this->fetch(OCI_NUM); - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - return $this->fetch(OCI_ASSOC); - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - return FetchUtils::fetchOne($this); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return $this->fetchAll(OCI_NUM, OCI_FETCHSTATEMENT_BY_ROW); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - return $this->fetchAll(OCI_ASSOC, OCI_FETCHSTATEMENT_BY_ROW); - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return $this->fetchAll(OCI_NUM, OCI_FETCHSTATEMENT_BY_COLUMN)[0]; - } - - public function rowCount(): int - { - $count = oci_num_rows($this->statement); - - if ($count !== false) { - return $count; - } - - return 0; - } - - public function columnCount(): int - { - $count = oci_num_fields($this->statement); - - if ($count !== false) { - return $count; - } - - return 0; - } - - public function free(): void - { - oci_cancel($this->statement); - } - - /** - * @return mixed|false - * - * @throws Exception - */ - private function fetch(int $mode) - { - $result = oci_fetch_array($this->statement, $mode | OCI_RETURN_NULLS | OCI_RETURN_LOBS); - - if ($result === false && oci_error($this->statement) !== false) { - throw Error::new($this->statement); - } - - return $result; - } - - /** @return array */ - private function fetchAll(int $mode, int $fetchStructure): array - { - oci_fetch_all( - $this->statement, - $result, - 0, - -1, - $mode | OCI_RETURN_NULLS | $fetchStructure | OCI_RETURN_LOBS, - ); - - return $result; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php b/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php deleted file mode 100644 index 015a14b..0000000 --- a/vendor/doctrine/dbal/src/Driver/OCI8/Statement.php +++ /dev/null @@ -1,174 +0,0 @@ - */ - private array $parameterMap; - - private ExecutionMode $executionMode; - - /** - * @internal The statement can be only instantiated by its driver connection. - * - * @param resource $connection - * @param resource $statement - * @param array $parameterMap - */ - public function __construct($connection, $statement, array $parameterMap, ExecutionMode $executionMode) - { - $this->connection = $connection; - $this->statement = $statement; - $this->parameterMap = $parameterMap; - $this->executionMode = $executionMode; - } - - /** - * {@inheritDoc} - */ - public function bindValue($param, $value, $type = ParameterType::STRING): bool - { - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - return $this->bindParam($param, $value, $type); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see bindValue()} instead. - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - if (is_int($param)) { - if (! isset($this->parameterMap[$param])) { - throw UnknownParameterIndex::new($param); - } - - $param = $this->parameterMap[$param]; - } - - if ($type === ParameterType::LARGE_OBJECT) { - if ($variable !== null) { - $lob = oci_new_descriptor($this->connection, OCI_D_LOB); - $lob->writeTemporary($variable, OCI_TEMP_BLOB); - - $variable =& $lob; - } else { - $type = ParameterType::STRING; - } - } - - return oci_bind_by_name( - $this->statement, - $param, - $variable, - $length ?? -1, - $this->convertParameterType($type), - ); - } - - /** - * Converts DBAL parameter type to oci8 parameter type - */ - private function convertParameterType(int $type): int - { - switch ($type) { - case ParameterType::BINARY: - return OCI_B_BIN; - - case ParameterType::LARGE_OBJECT: - return OCI_B_BLOB; - - default: - return SQLT_CHR; - } - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): ResultInterface - { - if ($params !== null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::execute() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - - foreach ($params as $key => $val) { - if (is_int($key)) { - $this->bindValue($key + 1, $val, ParameterType::STRING); - } else { - $this->bindValue($key, $val, ParameterType::STRING); - } - } - } - - if ($this->executionMode->isAutoCommitEnabled()) { - $mode = OCI_COMMIT_ON_SUCCESS; - } else { - $mode = OCI_NO_AUTO_COMMIT; - } - - $ret = @oci_execute($this->statement, $mode); - if (! $ret) { - throw Error::new($this->statement); - } - - return new Result($this->statement); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/Connection.php b/vendor/doctrine/dbal/src/Driver/PDO/Connection.php deleted file mode 100644 index 290dcc2..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/Connection.php +++ /dev/null @@ -1,158 +0,0 @@ -setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - - $this->connection = $connection; - } - - public function exec(string $sql): int - { - try { - $result = $this->connection->exec($sql); - - assert($result !== false); - - return $result; - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - /** - * {@inheritDoc} - */ - public function getServerVersion() - { - return $this->connection->getAttribute(PDO::ATTR_SERVER_VERSION); - } - - /** - * {@inheritDoc} - * - * @return Statement - */ - public function prepare(string $sql): StatementInterface - { - try { - $stmt = $this->connection->prepare($sql); - assert($stmt instanceof PDOStatement); - - return new Statement($stmt); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - public function query(string $sql): ResultInterface - { - try { - $stmt = $this->connection->query($sql); - assert($stmt instanceof PDOStatement); - - return new Result($stmt); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - /** - * {@inheritDoc} - * - * @throws UnknownParameterType - * - * @psalm-assert ParameterType::* $type - */ - public function quote($value, $type = ParameterType::STRING) - { - return $this->connection->quote($value, ParameterTypeMap::convertParamType($type)); - } - - /** - * {@inheritDoc} - */ - public function lastInsertId($name = null) - { - try { - if ($name === null) { - return $this->connection->lastInsertId(); - } - - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - - return $this->connection->lastInsertId($name); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - public function beginTransaction(): bool - { - try { - return $this->connection->beginTransaction(); - } catch (PDOException $exception) { - throw DriverPDOException::new($exception); - } - } - - public function commit(): bool - { - try { - return $this->connection->commit(); - } catch (PDOException $exception) { - throw DriverPDOException::new($exception); - } - } - - public function rollBack(): bool - { - try { - return $this->connection->rollBack(); - } catch (PDOException $exception) { - throw DriverPDOException::new($exception); - } - } - - public function getNativeConnection(): PDO - { - return $this->connection; - } - - /** @deprecated Call {@see getNativeConnection()} instead. */ - public function getWrappedConnection(): PDO - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5037', - '%s is deprecated, call getNativeConnection() instead.', - __METHOD__, - ); - - return $this->getNativeConnection(); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/Exception.php b/vendor/doctrine/dbal/src/Driver/PDO/Exception.php deleted file mode 100644 index fbb8125..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/Exception.php +++ /dev/null @@ -1,30 +0,0 @@ -errorInfo !== null) { - [$sqlState, $code] = $exception->errorInfo; - - $code ??= 0; - } else { - $code = $exception->getCode(); - $sqlState = null; - } - - return new self($exception->getMessage(), $sqlState, $code, $exception); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php b/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php deleted file mode 100644 index 2492698..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/MySQL/Driver.php +++ /dev/null @@ -1,76 +0,0 @@ -constructPdoDsn($safeParams), - $params['user'] ?? '', - $params['password'] ?? '', - $driverOptions, - ); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - - return new Connection($pdo); - } - - /** - * Constructs the MySQL PDO DSN. - * - * @param mixed[] $params - */ - private function constructPdoDsn(array $params): string - { - $dsn = 'mysql:'; - if (isset($params['host']) && $params['host'] !== '') { - $dsn .= 'host=' . $params['host'] . ';'; - } - - if (isset($params['port'])) { - $dsn .= 'port=' . $params['port'] . ';'; - } - - if (isset($params['dbname'])) { - $dsn .= 'dbname=' . $params['dbname'] . ';'; - } - - if (isset($params['unix_socket'])) { - $dsn .= 'unix_socket=' . $params['unix_socket'] . ';'; - } - - if (isset($params['charset'])) { - $dsn .= 'charset=' . $params['charset'] . ';'; - } - - return $dsn; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php b/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php deleted file mode 100644 index 10ada9f..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/OCI/Driver.php +++ /dev/null @@ -1,61 +0,0 @@ -constructPdoDsn($params), - $params['user'] ?? '', - $params['password'] ?? '', - $driverOptions, - ); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - - return new Connection($pdo); - } - - /** - * Constructs the Oracle PDO DSN. - * - * @param mixed[] $params - */ - private function constructPdoDsn(array $params): string - { - $dsn = 'oci:dbname=' . $this->getEasyConnectString($params); - - if (isset($params['charset'])) { - $dsn .= ';charset=' . $params['charset']; - } - - return $dsn; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/PDOException.php b/vendor/doctrine/dbal/src/Driver/PDO/PDOException.php deleted file mode 100644 index 6eefda4..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/PDOException.php +++ /dev/null @@ -1,33 +0,0 @@ -message, 0, $previous); - - $exception->errorInfo = $previous->errorInfo; - $exception->code = $previous->code; - $exception->sqlState = $previous->errorInfo[0] ?? null; - - return $exception; - } - - public function getSQLState(): ?string - { - return $this->sqlState; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/ParameterTypeMap.php b/vendor/doctrine/dbal/src/Driver/PDO/ParameterTypeMap.php deleted file mode 100644 index f17b585..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/ParameterTypeMap.php +++ /dev/null @@ -1,49 +0,0 @@ - PDO::PARAM_NULL, - ParameterType::INTEGER => PDO::PARAM_INT, - ParameterType::STRING => PDO::PARAM_STR, - ParameterType::ASCII => PDO::PARAM_STR, - ParameterType::BINARY => PDO::PARAM_LOB, - ParameterType::LARGE_OBJECT => PDO::PARAM_LOB, - ParameterType::BOOLEAN => PDO::PARAM_BOOL, - ]; - - /** - * Converts DBAL parameter type to PDO parameter type - * - * @psalm-return PDO::PARAM_* - * - * @throws UnknownParameterType - * - * @psalm-assert ParameterType::* $type - */ - public static function convertParamType(int $type): int - { - if (! isset(self::PARAM_TYPE_MAP[$type])) { - throw UnknownParameterType::new($type); - } - - return self::PARAM_TYPE_MAP[$type]; - } - - private function __construct() - { - } - - private function __clone() - { - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php b/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php deleted file mode 100644 index 5bfcd73..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/PgSQL/Driver.php +++ /dev/null @@ -1,135 +0,0 @@ -constructPdoDsn($safeParams), - $params['user'] ?? '', - $params['password'] ?? '', - $driverOptions, - ); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - - if ( - ! isset($driverOptions[PDO::PGSQL_ATTR_DISABLE_PREPARES]) - || $driverOptions[PDO::PGSQL_ATTR_DISABLE_PREPARES] === true - ) { - $pdo->setAttribute(PDO::PGSQL_ATTR_DISABLE_PREPARES, true); - } - - $connection = new Connection($pdo); - - /* defining client_encoding via SET NAMES to avoid inconsistent DSN support - * - passing client_encoding via the 'options' param breaks pgbouncer support - */ - if (isset($params['charset'])) { - $connection->exec('SET NAMES \'' . $params['charset'] . '\''); - } - - return $connection; - } - - /** - * Constructs the Postgres PDO DSN. - * - * @param array $params - */ - private function constructPdoDsn(array $params): string - { - $dsn = 'pgsql:'; - - if (isset($params['host']) && $params['host'] !== '') { - $dsn .= 'host=' . $params['host'] . ';'; - } - - if (isset($params['port']) && $params['port'] !== '') { - $dsn .= 'port=' . $params['port'] . ';'; - } - - if (isset($params['dbname'])) { - $dsn .= 'dbname=' . $params['dbname'] . ';'; - } elseif (isset($params['default_dbname'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5705', - 'The "default_dbname" connection parameter is deprecated. Use "dbname" instead.', - ); - - $dsn .= 'dbname=' . $params['default_dbname'] . ';'; - } else { - if (isset($params['user']) && $params['user'] !== 'postgres') { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5705', - 'Relying on the DBAL connecting to the "postgres" database by default is deprecated.' - . ' Unless you want to have the server determine the default database for the connection,' - . ' specify the database name explicitly.', - ); - } - - // Used for temporary connections to allow operations like dropping the database currently connected to. - $dsn .= 'dbname=postgres;'; - } - - if (isset($params['sslmode'])) { - $dsn .= 'sslmode=' . $params['sslmode'] . ';'; - } - - if (isset($params['sslrootcert'])) { - $dsn .= 'sslrootcert=' . $params['sslrootcert'] . ';'; - } - - if (isset($params['sslcert'])) { - $dsn .= 'sslcert=' . $params['sslcert'] . ';'; - } - - if (isset($params['sslkey'])) { - $dsn .= 'sslkey=' . $params['sslkey'] . ';'; - } - - if (isset($params['sslcrl'])) { - $dsn .= 'sslcrl=' . $params['sslcrl'] . ';'; - } - - if (isset($params['application_name'])) { - $dsn .= 'application_name=' . $params['application_name'] . ';'; - } - - if (isset($params['gssencmode'])) { - $dsn .= 'gssencmode=' . $params['gssencmode'] . ';'; - } - - return $dsn; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/Result.php b/vendor/doctrine/dbal/src/Driver/PDO/Result.php deleted file mode 100644 index 67970ac..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/Result.php +++ /dev/null @@ -1,124 +0,0 @@ -statement = $statement; - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - return $this->fetch(PDO::FETCH_NUM); - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - return $this->fetch(PDO::FETCH_ASSOC); - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - return $this->fetch(PDO::FETCH_COLUMN); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return $this->fetchAll(PDO::FETCH_NUM); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - return $this->fetchAll(PDO::FETCH_ASSOC); - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return $this->fetchAll(PDO::FETCH_COLUMN); - } - - public function rowCount(): int - { - try { - return $this->statement->rowCount(); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - public function columnCount(): int - { - try { - return $this->statement->columnCount(); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - public function free(): void - { - $this->statement->closeCursor(); - } - - /** - * @psalm-param PDO::FETCH_* $mode - * - * @return mixed - * - * @throws Exception - */ - private function fetch(int $mode) - { - try { - return $this->statement->fetch($mode); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - /** - * @psalm-param PDO::FETCH_* $mode - * - * @return list - * - * @throws Exception - */ - private function fetchAll(int $mode): array - { - try { - return $this->statement->fetchAll($mode); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Connection.php b/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Connection.php deleted file mode 100644 index 9015f55..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Connection.php +++ /dev/null @@ -1,70 +0,0 @@ -connection = $connection; - } - - public function prepare(string $sql): StatementInterface - { - return new Statement( - $this->connection->prepare($sql), - ); - } - - /** - * {@inheritDoc} - */ - public function lastInsertId($name = null) - { - if ($name === null) { - return parent::lastInsertId($name); - } - - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - - $statement = $this->prepare( - 'SELECT CONVERT(VARCHAR(MAX), current_value) FROM sys.sequences WHERE name = ?', - ); - $statement->bindValue(1, $name); - - return $statement->execute() - ->fetchOne(); - } - - public function getNativeConnection(): PDO - { - return $this->connection->getNativeConnection(); - } - - /** @deprecated Call {@see getNativeConnection()} instead. */ - public function getWrappedConnection(): PDO - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5037', - '%s is deprecated, call getNativeConnection() instead.', - __METHOD__, - ); - - return $this->connection->getWrappedConnection(); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php b/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php deleted file mode 100644 index 63eabb7..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Driver.php +++ /dev/null @@ -1,108 +0,0 @@ - $value) { - if (is_int($option)) { - $driverOptions[$option] = $value; - } else { - $dsnOptions[$option] = $value; - } - } - } - - if (! empty($params['persistent'])) { - $driverOptions[PDO::ATTR_PERSISTENT] = true; - } - - $safeParams = $params; - unset($safeParams['password'], $safeParams['url']); - - try { - $pdo = new PDO( - $this->constructDsn($safeParams, $dsnOptions), - $params['user'] ?? '', - $params['password'] ?? '', - $driverOptions, - ); - } catch (\PDOException $exception) { - throw PDOException::new($exception); - } - - return new Connection(new PDOConnection($pdo)); - } - - /** - * Constructs the Sqlsrv PDO DSN. - * - * @param mixed[] $params - * @param string[] $connectionOptions - * - * @throws Exception - */ - private function constructDsn(array $params, array $connectionOptions): string - { - $dsn = 'sqlsrv:server='; - - if (isset($params['host'])) { - $dsn .= $params['host']; - - if (isset($params['port'])) { - $dsn .= ',' . $params['port']; - } - } elseif (isset($params['port'])) { - throw PortWithoutHost::new(); - } - - if (isset($params['dbname'])) { - $connectionOptions['Database'] = $params['dbname']; - } - - if (isset($params['MultipleActiveResultSets'])) { - $connectionOptions['MultipleActiveResultSets'] = $params['MultipleActiveResultSets'] ? 'true' : 'false'; - } - - return $dsn . $this->getConnectionOptionsDsn($connectionOptions); - } - - /** - * Converts a connection options array to the DSN - * - * @param string[] $connectionOptions - */ - private function getConnectionOptionsDsn(array $connectionOptions): string - { - $connectionOptionsDsn = ''; - - foreach ($connectionOptions as $paramName => $paramValue) { - $connectionOptionsDsn .= sprintf(';%s=%s', $paramName, $paramValue); - } - - return $connectionOptionsDsn; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php b/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php deleted file mode 100644 index cb2dfae..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/SQLSrv/Statement.php +++ /dev/null @@ -1,109 +0,0 @@ -statement = $statement; - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see bindValue()} instead. - * - * @param string|int $param - * @param mixed $variable - * @param int $type - * @param int|null $length - * @param mixed $driverOptions The usage of the argument is deprecated. - * - * @throws UnknownParameterType - * - * @psalm-assert ParameterType::* $type - */ - public function bindParam( - $param, - &$variable, - $type = ParameterType::STRING, - $length = null, - $driverOptions = null - ): bool { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - if (func_num_args() > 4) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4533', - 'The $driverOptions argument of Statement::bindParam() is deprecated.', - ); - } - - switch ($type) { - case ParameterType::LARGE_OBJECT: - case ParameterType::BINARY: - $driverOptions ??= PDO::SQLSRV_ENCODING_BINARY; - - break; - - case ParameterType::ASCII: - $type = ParameterType::STRING; - $length = 0; - $driverOptions = PDO::SQLSRV_ENCODING_SYSTEM; - break; - } - - return $this->statement->bindParam($param, $variable, $type, $length ?? 0, $driverOptions); - } - - /** - * @throws UnknownParameterType - * - * {@inheritDoc} - * - * @psalm-assert ParameterType::* $type - */ - public function bindValue($param, $value, $type = ParameterType::STRING): bool - { - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - return $this->bindParam($param, $value, $type); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php b/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php deleted file mode 100644 index 2e97788..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/SQLite/Driver.php +++ /dev/null @@ -1,77 +0,0 @@ -constructPdoDsn(array_intersect_key($params, ['path' => true, 'memory' => true])), - $params['user'] ?? '', - $params['password'] ?? '', - $driverOptions, - ); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - - UserDefinedFunctions::register( - [$pdo, 'sqliteCreateFunction'], - $userDefinedFunctions, - ); - - return new Connection($pdo); - } - - /** - * Constructs the Sqlite PDO DSN. - * - * @param array $params - */ - private function constructPdoDsn(array $params): string - { - $dsn = 'sqlite:'; - if (isset($params['path'])) { - $dsn .= $params['path']; - } elseif (isset($params['memory'])) { - $dsn .= ':memory:'; - } - - return $dsn; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PDO/Statement.php b/vendor/doctrine/dbal/src/Driver/PDO/Statement.php deleted file mode 100644 index 64f318d..0000000 --- a/vendor/doctrine/dbal/src/Driver/PDO/Statement.php +++ /dev/null @@ -1,137 +0,0 @@ -stmt = $stmt; - } - - /** - * {@inheritDoc} - * - * @throws UnknownParameterType - * - * @psalm-assert ParameterType::* $type - */ - public function bindValue($param, $value, $type = ParameterType::STRING) - { - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - $pdoType = ParameterTypeMap::convertParamType($type); - - try { - return $this->stmt->bindValue($param, $value, $pdoType); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see bindValue()} instead. - * - * @param mixed $param - * @param mixed $variable - * @param int $type - * @param int|null $length - * @param mixed $driverOptions The usage of the argument is deprecated. - * - * @throws UnknownParameterType - * - * @psalm-assert ParameterType::* $type - */ - public function bindParam( - $param, - &$variable, - $type = ParameterType::STRING, - $length = null, - $driverOptions = null - ): bool { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - if (func_num_args() > 4) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4533', - 'The $driverOptions argument of Statement::bindParam() is deprecated.', - ); - } - - $pdoType = ParameterTypeMap::convertParamType($type); - - try { - return $this->stmt->bindParam( - $param, - $variable, - $pdoType, - $length ?? 0, - ...array_slice(func_get_args(), 4), - ); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): ResultInterface - { - if ($params !== null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::execute() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - } - - try { - $this->stmt->execute($params); - } catch (PDOException $exception) { - throw Exception::new($exception); - } - - return new Result($this->stmt); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PgSQL/Connection.php b/vendor/doctrine/dbal/src/Driver/PgSQL/Connection.php deleted file mode 100644 index 378e8ed..0000000 --- a/vendor/doctrine/dbal/src/Driver/PgSQL/Connection.php +++ /dev/null @@ -1,161 +0,0 @@ -connection = $connection; - $this->parser = new Parser(false); - } - - public function __destruct() - { - if (! isset($this->connection)) { - return; - } - - @pg_close($this->connection); - } - - public function prepare(string $sql): Statement - { - $visitor = new ConvertParameters(); - $this->parser->parse($sql, $visitor); - - $statementName = uniqid('dbal', true); - if (@pg_send_prepare($this->connection, $statementName, $visitor->getSQL()) !== true) { - throw new Exception(pg_last_error($this->connection)); - } - - $result = @pg_get_result($this->connection); - assert($result !== false); - - if ((bool) pg_result_error($result)) { - throw Exception::fromResult($result); - } - - return new Statement($this->connection, $statementName, $visitor->getParameterMap()); - } - - public function query(string $sql): Result - { - if (@pg_send_query($this->connection, $sql) !== true) { - throw new Exception(pg_last_error($this->connection)); - } - - $result = @pg_get_result($this->connection); - assert($result !== false); - - if ((bool) pg_result_error($result)) { - throw Exception::fromResult($result); - } - - return new Result($result); - } - - /** {@inheritDoc} */ - public function quote($value, $type = ParameterType::STRING) - { - if ($type === ParameterType::BINARY || $type === ParameterType::LARGE_OBJECT) { - return sprintf("'%s'", pg_escape_bytea($this->connection, $value)); - } - - return pg_escape_literal($this->connection, $value); - } - - public function exec(string $sql): int - { - return $this->query($sql)->rowCount(); - } - - /** {@inheritDoc} */ - public function lastInsertId($name = null) - { - if ($name !== null) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - - return $this->query(sprintf('SELECT CURRVAL(%s)', $this->quote($name)))->fetchOne(); - } - - return $this->query('SELECT LASTVAL()')->fetchOne(); - } - - /** @return true */ - public function beginTransaction(): bool - { - $this->exec('BEGIN'); - - return true; - } - - /** @return true */ - public function commit(): bool - { - $this->exec('COMMIT'); - - return true; - } - - /** @return true */ - public function rollBack(): bool - { - $this->exec('ROLLBACK'); - - return true; - } - - public function getServerVersion(): string - { - return (string) pg_version($this->connection)['server']; - } - - /** @return PgSqlConnection|resource */ - public function getNativeConnection() - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PgSQL/ConvertParameters.php b/vendor/doctrine/dbal/src/Driver/PgSQL/ConvertParameters.php deleted file mode 100644 index 795f12d..0000000 --- a/vendor/doctrine/dbal/src/Driver/PgSQL/ConvertParameters.php +++ /dev/null @@ -1,49 +0,0 @@ - */ - private array $buffer = []; - - /** @var array */ - private array $parameterMap = []; - - public function acceptPositionalParameter(string $sql): void - { - $position = count($this->parameterMap) + 1; - $this->parameterMap[$position] = $position; - $this->buffer[] = '$' . $position; - } - - public function acceptNamedParameter(string $sql): void - { - $position = count($this->parameterMap) + 1; - $this->parameterMap[$sql] = $position; - $this->buffer[] = '$' . $position; - } - - public function acceptOther(string $sql): void - { - $this->buffer[] = $sql; - } - - public function getSQL(): string - { - return implode('', $this->buffer); - } - - /** @return array */ - public function getParameterMap(): array - { - return $this->parameterMap; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php b/vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php deleted file mode 100644 index 6377499..0000000 --- a/vendor/doctrine/dbal/src/Driver/PgSQL/Driver.php +++ /dev/null @@ -1,86 +0,0 @@ -constructConnectionString($params), PGSQL_CONNECT_FORCE_NEW); - } catch (ErrorException $e) { - throw new Exception($e->getMessage(), '08006', 0, $e); - } finally { - restore_error_handler(); - } - - if ($connection === false) { - throw new Exception('Unable to connect to Postgres server.'); - } - - $driverConnection = new Connection($connection); - - if (isset($params['application_name'])) { - $driverConnection->exec('SET application_name = ' . $driverConnection->quote($params['application_name'])); - } - - return $driverConnection; - } - - /** - * Constructs the Postgres connection string - * - * @param array $params - */ - private function constructConnectionString( - #[SensitiveParameter] - array $params - ): string { - $components = array_filter( - [ - 'host' => $params['host'] ?? null, - 'port' => $params['port'] ?? null, - 'dbname' => $params['dbname'] ?? 'postgres', - 'user' => $params['user'] ?? null, - 'password' => $params['password'] ?? null, - 'sslmode' => $params['sslmode'] ?? null, - 'gssencmode' => $params['gssencmode'] ?? null, - ], - static fn ($value) => $value !== '' && $value !== null, - ); - - return implode(' ', array_map( - static fn ($value, string $key) => sprintf("%s='%s'", $key, addslashes($value)), - array_values($components), - array_keys($components), - )); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PgSQL/Exception.php b/vendor/doctrine/dbal/src/Driver/PgSQL/Exception.php deleted file mode 100644 index 41e0dff..0000000 --- a/vendor/doctrine/dbal/src/Driver/PgSQL/Exception.php +++ /dev/null @@ -1,30 +0,0 @@ -result = $result; - } - - public function __destruct() - { - if (! isset($this->result)) { - return; - } - - $this->free(); - } - - /** {@inheritDoc} */ - public function fetchNumeric() - { - if ($this->result === null) { - return false; - } - - $row = pg_fetch_row($this->result); - if ($row === false) { - return false; - } - - return $this->mapNumericRow($row, $this->fetchNumericColumnTypes()); - } - - /** {@inheritDoc} */ - public function fetchAssociative() - { - if ($this->result === null) { - return false; - } - - $row = pg_fetch_assoc($this->result); - if ($row === false) { - return false; - } - - return $this->mapAssociativeRow($row, $this->fetchAssociativeColumnTypes()); - } - - /** {@inheritDoc} */ - public function fetchOne() - { - return FetchUtils::fetchOne($this); - } - - /** {@inheritDoc} */ - public function fetchAllNumeric(): array - { - if ($this->result === null) { - return []; - } - - $resultSet = pg_fetch_all($this->result, PGSQL_NUM); - // On PHP 7.4, pg_fetch_all() might return false for empty result sets. - if ($resultSet === false) { - return []; - } - - $types = $this->fetchNumericColumnTypes(); - - return array_map( - fn (array $row) => $this->mapNumericRow($row, $types), - $resultSet, - ); - } - - /** {@inheritDoc} */ - public function fetchAllAssociative(): array - { - if ($this->result === null) { - return []; - } - - $resultSet = pg_fetch_all($this->result, PGSQL_ASSOC); - // On PHP 7.4, pg_fetch_all() might return false for empty result sets. - if ($resultSet === false) { - return []; - } - - $types = $this->fetchAssociativeColumnTypes(); - - return array_map( - fn (array $row) => $this->mapAssociativeRow($row, $types), - $resultSet, - ); - } - - /** {@inheritDoc} */ - public function fetchFirstColumn(): array - { - if ($this->result === null) { - return []; - } - - $postgresType = pg_field_type($this->result, 0); - - return array_map( - fn ($value) => $this->mapType($postgresType, $value), - pg_fetch_all_columns($this->result), - ); - } - - public function rowCount(): int - { - if ($this->result === null) { - return 0; - } - - return pg_affected_rows($this->result); - } - - public function columnCount(): int - { - if ($this->result === null) { - return 0; - } - - return pg_num_fields($this->result); - } - - public function free(): void - { - if ($this->result === null) { - return; - } - - pg_free_result($this->result); - $this->result = null; - } - - /** @return array */ - private function fetchNumericColumnTypes(): array - { - assert($this->result !== null); - - $types = []; - $numFields = pg_num_fields($this->result); - for ($i = 0; $i < $numFields; ++$i) { - $types[$i] = pg_field_type($this->result, $i); - } - - return $types; - } - - /** @return array */ - private function fetchAssociativeColumnTypes(): array - { - assert($this->result !== null); - - $types = []; - $numFields = pg_num_fields($this->result); - for ($i = 0; $i < $numFields; ++$i) { - $types[pg_field_name($this->result, $i)] = pg_field_type($this->result, $i); - } - - return $types; - } - - /** - * @param list $row - * @param array $types - * - * @return list - */ - private function mapNumericRow(array $row, array $types): array - { - assert($this->result !== null); - - return array_map( - fn ($value, $field) => $this->mapType($types[$field], $value), - $row, - array_keys($row), - ); - } - - /** - * @param array $row - * @param array $types - * - * @return array - */ - private function mapAssociativeRow(array $row, array $types): array - { - assert($this->result !== null); - - $mappedRow = []; - foreach ($row as $field => $value) { - $mappedRow[$field] = $this->mapType($types[$field], $value); - } - - return $mappedRow; - } - - /** @return string|int|float|bool|null */ - private function mapType(string $postgresType, ?string $value) - { - if ($value === null) { - return null; - } - - switch ($postgresType) { - case 'bool': - switch ($value) { - case 't': - return true; - case 'f': - return false; - } - - throw UnexpectedValue::new($value, $postgresType); - - case 'bytea': - return hex2bin(substr($value, 2)); - - case 'float4': - case 'float8': - return (float) $value; - - case 'int2': - case 'int4': - return (int) $value; - - case 'int8': - return PHP_INT_SIZE >= 8 ? (int) $value : $value; - } - - return $value; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/PgSQL/Statement.php b/vendor/doctrine/dbal/src/Driver/PgSQL/Statement.php deleted file mode 100644 index 75af66f..0000000 --- a/vendor/doctrine/dbal/src/Driver/PgSQL/Statement.php +++ /dev/null @@ -1,177 +0,0 @@ - */ - private array $parameterMap; - - /** @var array */ - private array $parameters = []; - - /** @psalm-var array */ - private array $parameterTypes = []; - - /** - * @param PgSqlConnection|resource $connection - * @param array $parameterMap - */ - public function __construct($connection, string $name, array $parameterMap) - { - if (! is_resource($connection) && ! $connection instanceof PgSqlConnection) { - throw new TypeError(sprintf( - 'Expected connection to be a resource or an instance of %s, got %s.', - PgSqlConnection::class, - is_object($connection) ? get_class($connection) : gettype($connection), - )); - } - - $this->connection = $connection; - $this->name = $name; - $this->parameterMap = $parameterMap; - } - - public function __destruct() - { - if (! isset($this->connection)) { - return; - } - - @pg_query( - $this->connection, - 'DEALLOCATE ' . pg_escape_identifier($this->connection, $this->name), - ); - } - - /** {@inheritDoc} */ - public function bindValue($param, $value, $type = ParameterType::STRING): bool - { - if (! isset($this->parameterMap[$param])) { - throw UnknownParameter::new((string) $param); - } - - $this->parameters[$this->parameterMap[$param]] = $value; - $this->parameterTypes[$this->parameterMap[$param]] = $type; - - return true; - } - - /** {@inheritDoc} */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - if (func_num_args() > 4) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4533', - 'The $driverOptions argument of Statement::bindParam() is deprecated.', - ); - } - - if (! isset($this->parameterMap[$param])) { - throw UnknownParameter::new((string) $param); - } - - $this->parameters[$this->parameterMap[$param]] = &$variable; - $this->parameterTypes[$this->parameterMap[$param]] = $type; - - return true; - } - - /** {@inheritDoc} */ - public function execute($params = null): Result - { - if ($params !== null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::execute() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - - foreach ($params as $param => $value) { - if (is_int($param)) { - $this->bindValue($param + 1, $value, ParameterType::STRING); - } else { - $this->bindValue($param, $value, ParameterType::STRING); - } - } - } - - ksort($this->parameters); - - $escapedParameters = []; - foreach ($this->parameters as $parameter => $value) { - switch ($this->parameterTypes[$parameter]) { - case ParameterType::BINARY: - case ParameterType::LARGE_OBJECT: - $escapedParameters[] = $value === null ? null : pg_escape_bytea( - $this->connection, - is_resource($value) ? stream_get_contents($value) : $value, - ); - break; - default: - $escapedParameters[] = $value; - } - } - - if (@pg_send_execute($this->connection, $this->name, $escapedParameters) !== true) { - throw new Exception(pg_last_error($this->connection)); - } - - $result = @pg_get_result($this->connection); - assert($result !== false); - - if ((bool) pg_result_error($result)) { - throw Exception::fromResult($result); - } - - return new Result($result); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/Result.php b/vendor/doctrine/dbal/src/Driver/Result.php deleted file mode 100644 index 7843a95..0000000 --- a/vendor/doctrine/dbal/src/Driver/Result.php +++ /dev/null @@ -1,93 +0,0 @@ -|false - * - * @throws Exception - */ - public function fetchNumeric(); - - /** - * Returns the next row of the result as an associative array or FALSE if there are no more rows. - * - * @return array|false - * - * @throws Exception - */ - public function fetchAssociative(); - - /** - * Returns the first value of the next row of the result or FALSE if there are no more rows. - * - * @return mixed|false - * - * @throws Exception - */ - public function fetchOne(); - - /** - * Returns an array containing all of the result rows represented as numeric arrays. - * - * @return list> - * - * @throws Exception - */ - public function fetchAllNumeric(): array; - - /** - * Returns an array containing all of the result rows represented as associative arrays. - * - * @return list> - * - * @throws Exception - */ - public function fetchAllAssociative(): array; - - /** - * Returns an array containing the values of the first column of the result. - * - * @return list - * - * @throws Exception - */ - public function fetchFirstColumn(): array; - - /** - * Returns the number of rows affected by the DELETE, INSERT, or UPDATE statement that produced the result. - * - * If the statement executed a SELECT query or a similar platform-specific SQL (e.g. DESCRIBE, SHOW, etc.), - * some database drivers may return the number of rows returned by that query. However, this behaviour - * is not guaranteed for all drivers and should not be relied on in portable applications. - * - * @return int The number of rows. - * - * @throws Exception - */ - public function rowCount(): int; - - /** - * Returns the number of columns in the result - * - * @return int The number of columns in the result. If the columns cannot be counted, - * this method must return 0. - * - * @throws Exception - */ - public function columnCount(): int; - - /** - * Discards the non-fetched portion of the result, enabling the originating statement to be executed again. - */ - public function free(): void; -} diff --git a/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php b/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php deleted file mode 100644 index 16e45d1..0000000 --- a/vendor/doctrine/dbal/src/Driver/SQLSrv/Connection.php +++ /dev/null @@ -1,144 +0,0 @@ -connection = $connection; - } - - /** - * {@inheritDoc} - */ - public function getServerVersion() - { - $serverInfo = sqlsrv_server_info($this->connection); - - return $serverInfo['SQLServerVersion']; - } - - public function prepare(string $sql): DriverStatement - { - return new Statement($this->connection, $sql); - } - - public function query(string $sql): ResultInterface - { - return $this->prepare($sql)->execute(); - } - - /** - * {@inheritDoc} - */ - public function quote($value, $type = ParameterType::STRING) - { - if (is_int($value)) { - return $value; - } - - if (is_float($value)) { - return sprintf('%F', $value); - } - - return "'" . str_replace("'", "''", $value) . "'"; - } - - public function exec(string $sql): int - { - $stmt = sqlsrv_query($this->connection, $sql); - - if ($stmt === false) { - throw Error::new(); - } - - $rowsAffected = sqlsrv_rows_affected($stmt); - - if ($rowsAffected === false) { - throw Error::new(); - } - - return $rowsAffected; - } - - /** - * {@inheritDoc} - */ - public function lastInsertId($name = null) - { - if ($name !== null) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4687', - 'The usage of Connection::lastInsertId() with a sequence name is deprecated.', - ); - - $result = $this->prepare('SELECT CONVERT(VARCHAR(MAX), current_value) FROM sys.sequences WHERE name = ?') - ->execute([$name]); - } else { - $result = $this->query('SELECT @@IDENTITY'); - } - - return $result->fetchOne(); - } - - public function beginTransaction(): bool - { - if (! sqlsrv_begin_transaction($this->connection)) { - throw Error::new(); - } - - return true; - } - - public function commit(): bool - { - if (! sqlsrv_commit($this->connection)) { - throw Error::new(); - } - - return true; - } - - public function rollBack(): bool - { - if (! sqlsrv_rollback($this->connection)) { - throw Error::new(); - } - - return true; - } - - /** @return resource */ - public function getNativeConnection() - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/SQLSrv/Driver.php b/vendor/doctrine/dbal/src/Driver/SQLSrv/Driver.php deleted file mode 100644 index fcbdb77..0000000 --- a/vendor/doctrine/dbal/src/Driver/SQLSrv/Driver.php +++ /dev/null @@ -1,73 +0,0 @@ -statement = $stmt; - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - return $this->fetch(SQLSRV_FETCH_NUMERIC); - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - return $this->fetch(SQLSRV_FETCH_ASSOC); - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - return FetchUtils::fetchOne($this); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return FetchUtils::fetchAllNumeric($this); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - return FetchUtils::fetchAllAssociative($this); - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return FetchUtils::fetchFirstColumn($this); - } - - public function rowCount(): int - { - $count = sqlsrv_rows_affected($this->statement); - - if ($count !== false) { - return $count; - } - - return 0; - } - - public function columnCount(): int - { - $count = sqlsrv_num_fields($this->statement); - - if ($count !== false) { - return $count; - } - - return 0; - } - - public function free(): void - { - // emulate it by fetching and discarding rows, similarly to what PDO does in this case - // @link http://php.net/manual/en/pdostatement.closecursor.php - // @link https://github.com/php/php-src/blob/php-7.0.11/ext/pdo/pdo_stmt.c#L2075 - // deliberately do not consider multiple result sets, since doctrine/dbal doesn't support them - while (sqlsrv_fetch($this->statement)) { - } - } - - /** @return mixed|false */ - private function fetch(int $fetchType) - { - return sqlsrv_fetch_array($this->statement, $fetchType) ?? false; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php b/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php deleted file mode 100644 index 227c334..0000000 --- a/vendor/doctrine/dbal/src/Driver/SQLSrv/Statement.php +++ /dev/null @@ -1,223 +0,0 @@ - - */ - private array $variables = []; - - /** - * Bound parameter types. - * - * @var array - */ - private array $types = []; - - /** - * Append to any INSERT query to retrieve the last insert id. - */ - private const LAST_INSERT_ID_SQL = ';SELECT SCOPE_IDENTITY() AS LastInsertId;'; - - /** - * @internal The statement can be only instantiated by its driver connection. - * - * @param resource $conn - * @param string $sql - */ - public function __construct($conn, $sql) - { - $this->conn = $conn; - $this->sql = $sql; - - if (stripos($sql, 'INSERT INTO ') !== 0) { - return; - } - - $this->sql .= self::LAST_INSERT_ID_SQL; - } - - /** - * {@inheritDoc} - */ - public function bindValue($param, $value, $type = ParameterType::STRING): bool - { - assert(is_int($param)); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - $this->variables[$param] = $value; - $this->types[$param] = $type; - - return true; - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see bindValue()} instead. - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - assert(is_int($param)); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - $this->variables[$param] =& $variable; - $this->types[$param] = $type; - - // unset the statement resource if it exists as the new one will need to be bound to the new variable - $this->stmt = null; - - return true; - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): ResultInterface - { - if ($params !== null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::execute() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - - foreach ($params as $key => $val) { - if (is_int($key)) { - $this->bindValue($key + 1, $val, ParameterType::STRING); - } else { - $this->bindValue($key, $val, ParameterType::STRING); - } - } - } - - $this->stmt ??= $this->prepare(); - - if (! sqlsrv_execute($this->stmt)) { - throw Error::new(); - } - - return new Result($this->stmt); - } - - /** - * Prepares SQL Server statement resource - * - * @return resource - * - * @throws Exception - */ - private function prepare() - { - $params = []; - - foreach ($this->variables as $column => &$variable) { - switch ($this->types[$column]) { - case ParameterType::LARGE_OBJECT: - $params[$column - 1] = [ - &$variable, - SQLSRV_PARAM_IN, - SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY), - SQLSRV_SQLTYPE_VARBINARY('max'), - ]; - break; - - case ParameterType::BINARY: - $params[$column - 1] = [ - &$variable, - SQLSRV_PARAM_IN, - SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_BINARY), - ]; - break; - - case ParameterType::ASCII: - $params[$column - 1] = [ - &$variable, - SQLSRV_PARAM_IN, - SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), - ]; - break; - - default: - $params[$column - 1] =& $variable; - break; - } - } - - $stmt = sqlsrv_prepare($this->conn, $this->sql, $params); - - if ($stmt === false) { - throw Error::new(); - } - - return $stmt; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/SQLite3/Connection.php b/vendor/doctrine/dbal/src/Driver/SQLite3/Connection.php deleted file mode 100644 index 91b9b5f..0000000 --- a/vendor/doctrine/dbal/src/Driver/SQLite3/Connection.php +++ /dev/null @@ -1,107 +0,0 @@ -connection = $connection; - } - - public function prepare(string $sql): Statement - { - try { - $statement = $this->connection->prepare($sql); - } catch (\Exception $e) { - throw Exception::new($e); - } - - assert($statement !== false); - - return new Statement($this->connection, $statement); - } - - public function query(string $sql): Result - { - try { - $result = $this->connection->query($sql); - } catch (\Exception $e) { - throw Exception::new($e); - } - - assert($result !== false); - - return new Result($result, $this->connection->changes()); - } - - /** @inheritDoc */ - public function quote($value, $type = ParameterType::STRING): string - { - return sprintf('\'%s\'', SQLite3::escapeString($value)); - } - - public function exec(string $sql): int - { - try { - $this->connection->exec($sql); - } catch (\Exception $e) { - throw Exception::new($e); - } - - return $this->connection->changes(); - } - - /** @inheritDoc */ - public function lastInsertId($name = null): int - { - return $this->connection->lastInsertRowID(); - } - - public function beginTransaction(): bool - { - try { - return $this->connection->exec('BEGIN'); - } catch (\Exception $e) { - return false; - } - } - - public function commit(): bool - { - try { - return $this->connection->exec('COMMIT'); - } catch (\Exception $e) { - return false; - } - } - - public function rollBack(): bool - { - try { - return $this->connection->exec('ROLLBACK'); - } catch (\Exception $e) { - return false; - } - } - - public function getNativeConnection(): SQLite3 - { - return $this->connection; - } - - public function getServerVersion(): string - { - return SQLite3::version()['versionString']; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php b/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php deleted file mode 100644 index fecc481..0000000 --- a/vendor/doctrine/dbal/src/Driver/SQLite3/Driver.php +++ /dev/null @@ -1,49 +0,0 @@ -enableExceptions(true); - - UserDefinedFunctions::register([$connection, 'createFunction']); - - return new Connection($connection); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/SQLite3/Exception.php b/vendor/doctrine/dbal/src/Driver/SQLite3/Exception.php deleted file mode 100644 index 3ca1190..0000000 --- a/vendor/doctrine/dbal/src/Driver/SQLite3/Exception.php +++ /dev/null @@ -1,18 +0,0 @@ -getMessage(), null, (int) $exception->getCode(), $exception); - } -} diff --git a/vendor/doctrine/dbal/src/Driver/SQLite3/Result.php b/vendor/doctrine/dbal/src/Driver/SQLite3/Result.php deleted file mode 100644 index 3881e18..0000000 --- a/vendor/doctrine/dbal/src/Driver/SQLite3/Result.php +++ /dev/null @@ -1,91 +0,0 @@ -result = $result; - $this->changes = $changes; - } - - /** @inheritDoc */ - public function fetchNumeric() - { - if ($this->result === null) { - return false; - } - - return $this->result->fetchArray(SQLITE3_NUM); - } - - /** @inheritDoc */ - public function fetchAssociative() - { - if ($this->result === null) { - return false; - } - - return $this->result->fetchArray(SQLITE3_ASSOC); - } - - /** @inheritDoc */ - public function fetchOne() - { - return FetchUtils::fetchOne($this); - } - - /** @inheritDoc */ - public function fetchAllNumeric(): array - { - return FetchUtils::fetchAllNumeric($this); - } - - /** @inheritDoc */ - public function fetchAllAssociative(): array - { - return FetchUtils::fetchAllAssociative($this); - } - - /** @inheritDoc */ - public function fetchFirstColumn(): array - { - return FetchUtils::fetchFirstColumn($this); - } - - public function rowCount(): int - { - return $this->changes; - } - - public function columnCount(): int - { - if ($this->result === null) { - return 0; - } - - return $this->result->numColumns(); - } - - public function free(): void - { - if ($this->result === null) { - return; - } - - $this->result->finalize(); - $this->result = null; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/SQLite3/Statement.php b/vendor/doctrine/dbal/src/Driver/SQLite3/Statement.php deleted file mode 100644 index a4166aa..0000000 --- a/vendor/doctrine/dbal/src/Driver/SQLite3/Statement.php +++ /dev/null @@ -1,136 +0,0 @@ - SQLITE3_NULL, - ParameterType::INTEGER => SQLITE3_INTEGER, - ParameterType::STRING => SQLITE3_TEXT, - ParameterType::ASCII => SQLITE3_TEXT, - ParameterType::BINARY => SQLITE3_BLOB, - ParameterType::LARGE_OBJECT => SQLITE3_BLOB, - ParameterType::BOOLEAN => SQLITE3_INTEGER, - ]; - - private SQLite3 $connection; - private SQLite3Stmt $statement; - - /** @internal The statement can be only instantiated by its driver connection. */ - public function __construct(SQLite3 $connection, SQLite3Stmt $statement) - { - $this->connection = $connection; - $this->statement = $statement; - } - - /** - * @throws UnknownParameterType - * - * {@inheritDoc} - * - * @psalm-assert ParameterType::* $type - */ - public function bindValue($param, $value, $type = ParameterType::STRING): bool - { - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - return $this->statement->bindValue($param, $value, $this->convertParamType($type)); - } - - /** - * @throws UnknownParameterType - * - * {@inheritDoc} - * - * @psalm-assert ParameterType::* $type - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null): bool - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - return $this->statement->bindParam($param, $variable, $this->convertParamType($type)); - } - - /** @inheritDoc */ - public function execute($params = null): Result - { - if ($params !== null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::execute() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - - foreach ($params as $param => $value) { - if (is_int($param)) { - $this->bindValue($param + 1, $value, ParameterType::STRING); - } else { - $this->bindValue($param, $value, ParameterType::STRING); - } - } - } - - try { - $result = $this->statement->execute(); - } catch (\Exception $e) { - throw Exception::new($e); - } - - assert($result !== false); - - return new Result($result, $this->connection->changes()); - } - - /** - * @psalm-return value-of - * - * @psalm-assert ParameterType::* $type - */ - private function convertParamType(int $type): int - { - if (! isset(self::PARAM_TYPE_MAP[$type])) { - throw UnknownParameterType::new($type); - } - - return self::PARAM_TYPE_MAP[$type]; - } -} diff --git a/vendor/doctrine/dbal/src/Driver/ServerInfoAwareConnection.php b/vendor/doctrine/dbal/src/Driver/ServerInfoAwareConnection.php deleted file mode 100644 index 5687ab0..0000000 --- a/vendor/doctrine/dbal/src/Driver/ServerInfoAwareConnection.php +++ /dev/null @@ -1,21 +0,0 @@ -execute() is called. - * - * As mentioned above, the named parameters are not natively supported by the mysqli driver, use executeQuery(), - * fetchAll(), fetchArray(), fetchColumn(), fetchAssoc() methods to have the named parameter emulated by doctrine. - * - * Most parameters are input parameters, that is, parameters that are - * used in a read-only fashion to build up the query. Some drivers support the invocation - * of stored procedures that return data as output parameters, and some also as input/output - * parameters that both send in data and are updated to receive it. - * - * @deprecated Use {@see bindValue()} instead. - * - * @param string|int $param Parameter identifier. For a prepared statement using named placeholders, - * this will be a parameter name of the form :name. For a prepared statement using - * question mark placeholders, this will be the 1-indexed position of the parameter. - * @param mixed $variable Name of the PHP variable to bind to the SQL statement parameter. - * @param int $type Explicit data type for the parameter using the {@see ParameterType} - * constants. - * @param int|null $length You must specify maxlength when using an OUT bind - * so that PHP allocates enough memory to hold the returned value. - * - * @return bool TRUE on success or FALSE on failure. - * - * @throws Exception - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null); - - /** - * Executes a prepared statement - * - * If the prepared statement included parameter markers, you must either: - * call {@see bindParam()} to bind PHP variables to the parameter markers: - * bound variables pass their value as input and receive the output value, - * if any, of their associated parameter markers or pass an array of input-only - * parameter values. - * - * @param mixed[]|null $params A numeric array of values with as many elements as there are - * bound parameters in the SQL statement being executed. - * - * @throws Exception - */ - public function execute($params = null): Result; -} diff --git a/vendor/doctrine/dbal/src/DriverManager.php b/vendor/doctrine/dbal/src/DriverManager.php deleted file mode 100644 index 056f420..0000000 --- a/vendor/doctrine/dbal/src/DriverManager.php +++ /dev/null @@ -1,288 +0,0 @@ -, - * driverClass?: class-string, - * driverOptions?: array, - * host?: string, - * password?: string, - * path?: string, - * persistent?: bool, - * platform?: Platforms\AbstractPlatform, - * port?: int, - * serverVersion?: string, - * url?: string, - * user?: string, - * unix_socket?: string, - * } - * @psalm-type Params = array{ - * application_name?: string, - * charset?: string, - * dbname?: string, - * defaultTableOptions?: array, - * default_dbname?: string, - * driver?: key-of, - * driverClass?: class-string, - * driverOptions?: array, - * host?: string, - * keepSlave?: bool, - * keepReplica?: bool, - * master?: OverrideParams, - * memory?: bool, - * password?: string, - * path?: string, - * persistent?: bool, - * platform?: Platforms\AbstractPlatform, - * port?: int, - * primary?: OverrideParams, - * replica?: array, - * serverVersion?: string, - * sharding?: array, - * slaves?: array, - * url?: string, - * user?: string, - * wrapperClass?: class-string, - * unix_socket?: string, - * } - */ -final class DriverManager -{ - /** - * List of supported drivers and their mappings to the driver classes. - * - * To add your own driver use the 'driverClass' parameter to {@see DriverManager::getConnection()}. - */ - private const DRIVER_MAP = [ - 'pdo_mysql' => PDO\MySQL\Driver::class, - 'pdo_sqlite' => PDO\SQLite\Driver::class, - 'pdo_pgsql' => PDO\PgSQL\Driver::class, - 'pdo_oci' => PDO\OCI\Driver::class, - 'oci8' => OCI8\Driver::class, - 'ibm_db2' => IBMDB2\Driver::class, - 'pdo_sqlsrv' => PDO\SQLSrv\Driver::class, - 'mysqli' => Mysqli\Driver::class, - 'pgsql' => PgSQL\Driver::class, - 'sqlsrv' => SQLSrv\Driver::class, - 'sqlite3' => SQLite3\Driver::class, - ]; - - /** - * List of URL schemes from a database URL and their mappings to driver. - * - * @deprecated Use actual driver names instead. - * - * @var array - * @psalm-var array> - */ - private static array $driverSchemeAliases = [ - 'db2' => 'ibm_db2', - 'mssql' => 'pdo_sqlsrv', - 'mysql' => 'pdo_mysql', - 'mysql2' => 'pdo_mysql', // Amazon RDS, for some weird reason - 'postgres' => 'pdo_pgsql', - 'postgresql' => 'pdo_pgsql', - 'pgsql' => 'pdo_pgsql', - 'sqlite' => 'pdo_sqlite', - 'sqlite3' => 'pdo_sqlite', - ]; - - /** - * Private constructor. This class cannot be instantiated. - * - * @codeCoverageIgnore - */ - private function __construct() - { - } - - /** - * Creates a connection object based on the specified parameters. - * This method returns a Doctrine\DBAL\Connection which wraps the underlying - * driver connection. - * - * $params must contain at least one of the following. - * - * Either 'driver' with one of the array keys of {@see DRIVER_MAP}, - * OR 'driverClass' that contains the full class name (with namespace) of the - * driver class to instantiate. - * - * Other (optional) parameters: - * - * user (string): - * The username to use when connecting. - * - * password (string): - * The password to use when connecting. - * - * driverOptions (array): - * Any additional driver-specific options for the driver. These are just passed - * through to the driver. - * - * wrapperClass: - * You may specify a custom wrapper class through the 'wrapperClass' - * parameter but this class MUST inherit from Doctrine\DBAL\Connection. - * - * driverClass: - * The driver class to use. - * - * @param Configuration|null $config The configuration to use. - * @param EventManager|null $eventManager The event manager to use. - * @psalm-param Params $params - * - * @psalm-return ($params is array{wrapperClass: class-string} ? T : Connection) - * - * @throws Exception - * - * @template T of Connection - */ - public static function getConnection( - #[SensitiveParameter] - array $params, - ?Configuration $config = null, - ?EventManager $eventManager = null - ): Connection { - // create default config and event manager, if not set - $config ??= new Configuration(); - $eventManager ??= new EventManager(); - $params = self::parseDatabaseUrl($params); - - // URL support for PrimaryReplicaConnection - if (isset($params['primary'])) { - $params['primary'] = self::parseDatabaseUrl($params['primary']); - } - - if (isset($params['replica'])) { - foreach ($params['replica'] as $key => $replicaParams) { - $params['replica'][$key] = self::parseDatabaseUrl($replicaParams); - } - } - - $driver = self::createDriver($params['driver'] ?? null, $params['driverClass'] ?? null); - - foreach ($config->getMiddlewares() as $middleware) { - $driver = $middleware->wrap($driver); - } - - $wrapperClass = $params['wrapperClass'] ?? Connection::class; - if (! is_a($wrapperClass, Connection::class, true)) { - throw Exception::invalidWrapperClass($wrapperClass); - } - - return new $wrapperClass($params, $driver, $config, $eventManager); - } - - /** - * Returns the list of supported drivers. - * - * @return string[] - * @psalm-return list> - */ - public static function getAvailableDrivers(): array - { - return array_keys(self::DRIVER_MAP); - } - - /** - * @throws Exception - * - * @psalm-assert key-of|null $driver - * @psalm-assert class-string|null $driverClass - */ - private static function createDriver(?string $driver, ?string $driverClass): Driver - { - if ($driverClass === null) { - if ($driver === null) { - throw Exception::driverRequired(); - } - - if (! isset(self::DRIVER_MAP[$driver])) { - throw Exception::unknownDriver($driver, array_keys(self::DRIVER_MAP)); - } - - $driverClass = self::DRIVER_MAP[$driver]; - } elseif (! is_a($driverClass, Driver::class, true)) { - throw Exception::invalidDriverClass($driverClass); - } - - return new $driverClass(); - } - - /** - * Extracts parts from a database URL, if present, and returns an - * updated list of parameters. - * - * @param mixed[] $params The list of parameters. - * @psalm-param Params $params - * - * @return mixed[] A modified list of parameters with info from a database - * URL extracted into indidivual parameter parts. - * @psalm-return Params - * - * @throws Exception - */ - private static function parseDatabaseUrl( - #[SensitiveParameter] - array $params - ): array { - if (! isset($params['url'])) { - return $params; - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5843', - 'The "url" connection parameter is deprecated. Please use %s to parse a database url before calling %s.', - DsnParser::class, - self::class, - ); - - $parser = new DsnParser(self::$driverSchemeAliases); - try { - $parsedParams = $parser->parse($params['url']); - } catch (MalformedDsnException $e) { - throw new Exception('Malformed parameter "url".', 0, $e); - } - - if (isset($parsedParams['driver'])) { - // The requested driver from the URL scheme takes precedence - // over the default custom driver from the connection parameters (if any). - unset($params['driverClass']); - } - - $params = array_merge($params, $parsedParams); - - // If a schemeless connection URL is given, we require a default driver or default custom driver - // as connection parameter. - if (! isset($params['driverClass']) && ! isset($params['driver'])) { - throw Exception::driverRequired($params['url']); - } - - return $params; - } -} diff --git a/vendor/doctrine/dbal/src/Event/ConnectionEventArgs.php b/vendor/doctrine/dbal/src/Event/ConnectionEventArgs.php deleted file mode 100644 index 9a69c25..0000000 --- a/vendor/doctrine/dbal/src/Event/ConnectionEventArgs.php +++ /dev/null @@ -1,27 +0,0 @@ -connection = $connection; - } - - /** @return Connection */ - public function getConnection() - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php b/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php deleted file mode 100644 index 9598f43..0000000 --- a/vendor/doctrine/dbal/src/Event/Listeners/OracleSessionInit.php +++ /dev/null @@ -1,77 +0,0 @@ - 'HH24:MI:SS', - 'NLS_DATE_FORMAT' => 'YYYY-MM-DD HH24:MI:SS', - 'NLS_TIMESTAMP_FORMAT' => 'YYYY-MM-DD HH24:MI:SS', - 'NLS_TIMESTAMP_TZ_FORMAT' => 'YYYY-MM-DD HH24:MI:SS TZH:TZM', - 'NLS_NUMERIC_CHARACTERS' => '.,', - ]; - - /** @param string[] $oracleSessionVars */ - public function __construct(array $oracleSessionVars = []) - { - $this->_defaultSessionVars = array_merge($this->_defaultSessionVars, $oracleSessionVars); - } - - /** - * @return void - * - * @throws Exception - */ - public function postConnect(ConnectionEventArgs $args) - { - if (count($this->_defaultSessionVars) === 0) { - return; - } - - $vars = []; - foreach (array_change_key_case($this->_defaultSessionVars, CASE_UPPER) as $option => $value) { - if ($option === 'CURRENT_SCHEMA') { - $vars[] = $option . ' = ' . $value; - } else { - $vars[] = $option . " = '" . $value . "'"; - } - } - - $sql = 'ALTER SESSION SET ' . implode(' ', $vars); - $args->getConnection()->executeStatement($sql); - } - - /** - * {@inheritDoc} - */ - public function getSubscribedEvents() - { - return [Events::postConnect]; - } -} diff --git a/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php b/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php deleted file mode 100644 index 4ce32d6..0000000 --- a/vendor/doctrine/dbal/src/Event/Listeners/SQLSessionInit.php +++ /dev/null @@ -1,43 +0,0 @@ -sql = $sql; - } - - /** - * @return void - * - * @throws Exception - */ - public function postConnect(ConnectionEventArgs $args) - { - $args->getConnection()->executeStatement($this->sql); - } - - /** - * {@inheritDoc} - */ - public function getSubscribedEvents() - { - return [Events::postConnect]; - } -} diff --git a/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php b/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php deleted file mode 100644 index 950f05f..0000000 --- a/vendor/doctrine/dbal/src/Event/Listeners/SQLiteSessionInit.php +++ /dev/null @@ -1,30 +0,0 @@ -getConnection()->executeStatement('PRAGMA foreign_keys=ON'); - } - - /** - * {@inheritDoc} - */ - public function getSubscribedEvents() - { - return [Events::postConnect]; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaAlterTableAddColumnEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaAlterTableAddColumnEventArgs.php deleted file mode 100644 index 9f3ff6e..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaAlterTableAddColumnEventArgs.php +++ /dev/null @@ -1,81 +0,0 @@ -column = $column; - $this->tableDiff = $tableDiff; - $this->platform = $platform; - } - - /** @return Column */ - public function getColumn() - { - return $this->column; - } - - /** @return TableDiff */ - public function getTableDiff() - { - return $this->tableDiff; - } - - /** @return AbstractPlatform */ - public function getPlatform() - { - return $this->platform; - } - - /** - * Passing multiple SQL statements as an array is deprecated. Pass each statement as an individual argument instead. - * - * @param string|string[] $sql - * - * @return SchemaAlterTableAddColumnEventArgs - */ - public function addSql($sql) - { - if (is_array($sql)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3580', - 'Passing multiple SQL statements as an array to SchemaAlterTableAddColumnEventaArrgs::addSql() ' . - 'is deprecated. Pass each statement as an individual argument instead.', - ); - } - - $this->sql = array_merge($this->sql, is_array($sql) ? $sql : func_get_args()); - - return $this; - } - - /** @return string[] */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaAlterTableChangeColumnEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaAlterTableChangeColumnEventArgs.php deleted file mode 100644 index 9ba37aa..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaAlterTableChangeColumnEventArgs.php +++ /dev/null @@ -1,71 +0,0 @@ -columnDiff = $columnDiff; - $this->tableDiff = $tableDiff; - $this->platform = $platform; - } - - /** @return ColumnDiff */ - public function getColumnDiff() - { - return $this->columnDiff; - } - - /** @return TableDiff */ - public function getTableDiff() - { - return $this->tableDiff; - } - - /** @return AbstractPlatform */ - public function getPlatform() - { - return $this->platform; - } - - /** - * Passing multiple SQL statements as an array is deprecated. Pass each statement as an individual argument instead. - * - * @param string|string[] $sql - * - * @return SchemaAlterTableChangeColumnEventArgs - */ - public function addSql($sql) - { - $this->sql = array_merge($this->sql, is_array($sql) ? $sql : func_get_args()); - - return $this; - } - - /** @return string[] */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaAlterTableEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaAlterTableEventArgs.php deleted file mode 100644 index 07c065a..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaAlterTableEventArgs.php +++ /dev/null @@ -1,62 +0,0 @@ -tableDiff = $tableDiff; - $this->platform = $platform; - } - - /** @return TableDiff */ - public function getTableDiff() - { - return $this->tableDiff; - } - - /** @return AbstractPlatform */ - public function getPlatform() - { - return $this->platform; - } - - /** - * Passing multiple SQL statements as an array is deprecated. Pass each statement as an individual argument instead. - * - * @param string|string[] $sql - * - * @return SchemaAlterTableEventArgs - */ - public function addSql($sql) - { - $this->sql = array_merge($this->sql, is_array($sql) ? $sql : func_get_args()); - - return $this; - } - - /** @return string[] */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaAlterTableRemoveColumnEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaAlterTableRemoveColumnEventArgs.php deleted file mode 100644 index 4122b41..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaAlterTableRemoveColumnEventArgs.php +++ /dev/null @@ -1,71 +0,0 @@ -column = $column; - $this->tableDiff = $tableDiff; - $this->platform = $platform; - } - - /** @return Column */ - public function getColumn() - { - return $this->column; - } - - /** @return TableDiff */ - public function getTableDiff() - { - return $this->tableDiff; - } - - /** @return AbstractPlatform */ - public function getPlatform() - { - return $this->platform; - } - - /** - * Passing multiple SQL statements as an array is deprecated. Pass each statement as an individual argument instead. - * - * @param string|string[] $sql - * - * @return SchemaAlterTableRemoveColumnEventArgs - */ - public function addSql($sql) - { - $this->sql = array_merge($this->sql, is_array($sql) ? $sql : func_get_args()); - - return $this; - } - - /** @return string[] */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaAlterTableRenameColumnEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaAlterTableRenameColumnEventArgs.php deleted file mode 100644 index 21d3c16..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaAlterTableRenameColumnEventArgs.php +++ /dev/null @@ -1,82 +0,0 @@ -oldColumnName = $oldColumnName; - $this->column = $column; - $this->tableDiff = $tableDiff; - $this->platform = $platform; - } - - /** @return string */ - public function getOldColumnName() - { - return $this->oldColumnName; - } - - /** @return Column */ - public function getColumn() - { - return $this->column; - } - - /** @return TableDiff */ - public function getTableDiff() - { - return $this->tableDiff; - } - - /** @return AbstractPlatform */ - public function getPlatform() - { - return $this->platform; - } - - /** - * Passing multiple SQL statements as an array is deprecated. Pass each statement as an individual argument instead. - * - * @param string|string[] $sql - * - * @return SchemaAlterTableRenameColumnEventArgs - */ - public function addSql($sql) - { - $this->sql = array_merge($this->sql, is_array($sql) ? $sql : func_get_args()); - - return $this; - } - - /** @return string[] */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaColumnDefinitionEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaColumnDefinitionEventArgs.php deleted file mode 100644 index 04fcbde..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaColumnDefinitionEventArgs.php +++ /dev/null @@ -1,87 +0,0 @@ -tableColumn = $tableColumn; - $this->table = $table; - $this->database = $database; - $this->connection = $connection; - } - - /** - * Allows to clear the column which means the column will be excluded from - * tables column list. - * - * @return SchemaColumnDefinitionEventArgs - */ - public function setColumn(?Column $column = null) - { - $this->column = $column; - - return $this; - } - - /** @return Column|null */ - public function getColumn() - { - return $this->column; - } - - /** @return mixed[] */ - public function getTableColumn() - { - return $this->tableColumn; - } - - /** @return string */ - public function getTable() - { - return $this->table; - } - - /** @return string */ - public function getDatabase() - { - return $this->database; - } - - /** @return Connection */ - public function getConnection() - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaCreateTableColumnEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaCreateTableColumnEventArgs.php deleted file mode 100644 index 54f134d..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaCreateTableColumnEventArgs.php +++ /dev/null @@ -1,71 +0,0 @@ -column = $column; - $this->table = $table; - $this->platform = $platform; - } - - /** @return Column */ - public function getColumn() - { - return $this->column; - } - - /** @return Table */ - public function getTable() - { - return $this->table; - } - - /** @return AbstractPlatform */ - public function getPlatform() - { - return $this->platform; - } - - /** - * Passing multiple SQL statements as an array is deprecated. Pass each statement as an individual argument instead. - * - * @param string|string[] $sql - * - * @return SchemaCreateTableColumnEventArgs - */ - public function addSql($sql) - { - $this->sql = array_merge($this->sql, is_array($sql) ? $sql : func_get_args()); - - return $this; - } - - /** @return string[] */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaCreateTableEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaCreateTableEventArgs.php deleted file mode 100644 index a7d548d..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaCreateTableEventArgs.php +++ /dev/null @@ -1,87 +0,0 @@ -table = $table; - $this->columns = $columns; - $this->options = $options; - $this->platform = $platform; - } - - /** @return Table */ - public function getTable() - { - return $this->table; - } - - /** @return mixed[][] */ - public function getColumns() - { - return $this->columns; - } - - /** @return mixed[] */ - public function getOptions() - { - return $this->options; - } - - /** @return AbstractPlatform */ - public function getPlatform() - { - return $this->platform; - } - - /** - * Passing multiple SQL statements as an array is deprecated. Pass each statement as an individual argument instead. - * - * @param string|string[] $sql - * - * @return SchemaCreateTableEventArgs - */ - public function addSql($sql) - { - $this->sql = array_merge($this->sql, is_array($sql) ? $sql : func_get_args()); - - return $this; - } - - /** @return string[] */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaDropTableEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaDropTableEventArgs.php deleted file mode 100644 index f45e3a1..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaDropTableEventArgs.php +++ /dev/null @@ -1,64 +0,0 @@ -table = $table; - $this->platform = $platform; - } - - /** @return string|Table */ - public function getTable() - { - return $this->table; - } - - /** @return AbstractPlatform */ - public function getPlatform() - { - return $this->platform; - } - - /** - * @param string $sql - * - * @return SchemaDropTableEventArgs - */ - public function setSql($sql) - { - $this->sql = $sql; - - return $this; - } - - /** @return string|null */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaEventArgs.php deleted file mode 100644 index 77d1d39..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaEventArgs.php +++ /dev/null @@ -1,29 +0,0 @@ -preventDefault = true; - - return $this; - } - - /** @return bool */ - public function isDefaultPrevented() - { - return $this->preventDefault; - } -} diff --git a/vendor/doctrine/dbal/src/Event/SchemaIndexDefinitionEventArgs.php b/vendor/doctrine/dbal/src/Event/SchemaIndexDefinitionEventArgs.php deleted file mode 100644 index dbee55a..0000000 --- a/vendor/doctrine/dbal/src/Event/SchemaIndexDefinitionEventArgs.php +++ /dev/null @@ -1,75 +0,0 @@ -tableIndex = $tableIndex; - $this->table = $table; - $this->connection = $connection; - } - - /** - * Allows to clear the index which means the index will be excluded from tables index list. - * - * @return SchemaIndexDefinitionEventArgs - */ - public function setIndex(?Index $index = null) - { - $this->index = $index; - - return $this; - } - - /** @return Index|null */ - public function getIndex() - { - return $this->index; - } - - /** @return mixed[] */ - public function getTableIndex() - { - return $this->tableIndex; - } - - /** @return string */ - public function getTable() - { - return $this->table; - } - - /** @return Connection */ - public function getConnection() - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Event/TransactionBeginEventArgs.php b/vendor/doctrine/dbal/src/Event/TransactionBeginEventArgs.php deleted file mode 100644 index be4ccdf..0000000 --- a/vendor/doctrine/dbal/src/Event/TransactionBeginEventArgs.php +++ /dev/null @@ -1,10 +0,0 @@ -connection = $connection; - } - - public function getConnection(): Connection - { - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Event/TransactionRollBackEventArgs.php b/vendor/doctrine/dbal/src/Event/TransactionRollBackEventArgs.php deleted file mode 100644 index 9e6e650..0000000 --- a/vendor/doctrine/dbal/src/Event/TransactionRollBackEventArgs.php +++ /dev/null @@ -1,10 +0,0 @@ -getMessage(); - } else { - $message = 'An exception occurred in the driver: ' . $driverException->getMessage(); - } - - parent::__construct($message, $driverException->getCode(), $driverException); - - $this->query = $query; - } - - /** - * {@inheritDoc} - */ - public function getSQLState() - { - $previous = $this->getPrevious(); - assert($previous instanceof TheDriverException); - - return $previous->getSQLState(); - } - - public function getQuery(): ?Query - { - return $this->query; - } -} diff --git a/vendor/doctrine/dbal/src/Exception/ForeignKeyConstraintViolationException.php b/vendor/doctrine/dbal/src/Exception/ForeignKeyConstraintViolationException.php deleted file mode 100644 index f1a612b..0000000 --- a/vendor/doctrine/dbal/src/Exception/ForeignKeyConstraintViolationException.php +++ /dev/null @@ -1,12 +0,0 @@ -|array */ - private array $originalParameters; - - /** @var array|array */ - private array $originalTypes; - - private int $originalParameterIndex = 0; - - /** @var list */ - private array $convertedSQL = []; - - /** @var list */ - private array $convertedParameters = []; - - /** @var array */ - private array $convertedTypes = []; - - /** - * @param array|array $parameters - * @param array|array $types - */ - public function __construct(array $parameters, array $types) - { - $this->originalParameters = $parameters; - $this->originalTypes = $types; - } - - public function acceptPositionalParameter(string $sql): void - { - $index = $this->originalParameterIndex; - - if (! array_key_exists($index, $this->originalParameters)) { - throw MissingPositionalParameter::new($index); - } - - $this->acceptParameter($index, $this->originalParameters[$index]); - - $this->originalParameterIndex++; - } - - public function acceptNamedParameter(string $sql): void - { - $name = substr($sql, 1); - - if (! array_key_exists($name, $this->originalParameters)) { - throw MissingNamedParameter::new($name); - } - - $this->acceptParameter($name, $this->originalParameters[$name]); - } - - public function acceptOther(string $sql): void - { - $this->convertedSQL[] = $sql; - } - - public function getSQL(): string - { - return implode('', $this->convertedSQL); - } - - /** @return list */ - public function getParameters(): array - { - return $this->convertedParameters; - } - - /** - * @param int|string $key - * @param mixed $value - */ - private function acceptParameter($key, $value): void - { - if (! isset($this->originalTypes[$key])) { - $this->convertedSQL[] = '?'; - $this->convertedParameters[] = $value; - - return; - } - - $type = $this->originalTypes[$key]; - - if ( - $type !== ArrayParameterType::INTEGER - && $type !== ArrayParameterType::STRING - && $type !== ArrayParameterType::ASCII - && $type !== ArrayParameterType::BINARY - ) { - $this->appendTypedParameter([$value], $type); - - return; - } - - if (count($value) === 0) { - $this->convertedSQL[] = 'NULL'; - - return; - } - - $this->appendTypedParameter($value, ArrayParameterType::toElementParameterType($type)); - } - - /** @return array */ - public function getTypes(): array - { - return $this->convertedTypes; - } - - /** - * @param list $values - * @param Type|int|string|null $type - */ - private function appendTypedParameter(array $values, $type): void - { - $this->convertedSQL[] = implode(', ', array_fill(0, count($values), '?')); - - $index = count($this->convertedParameters); - - foreach ($values as $value) { - $this->convertedParameters[] = $value; - $this->convertedTypes[$index] = $type; - - $index++; - } - } -} diff --git a/vendor/doctrine/dbal/src/FetchMode.php b/vendor/doctrine/dbal/src/FetchMode.php deleted file mode 100644 index d80719f..0000000 --- a/vendor/doctrine/dbal/src/FetchMode.php +++ /dev/null @@ -1,20 +0,0 @@ -getDriver() instanceof Driver\PDO\SQLite\Driver) { - throw new Exception('Cannot use TableGenerator with SQLite.'); - } - - $this->conn = DriverManager::getConnection( - $conn->getParams(), - $conn->getConfiguration(), - $conn->getEventManager(), - ); - - $this->generatorTableName = $generatorTableName; - } - - /** - * Generates the next unused value for the given sequence name. - * - * @param string $sequence - * - * @return int - * - * @throws Exception - */ - public function nextValue($sequence) - { - if (isset($this->sequences[$sequence])) { - $value = $this->sequences[$sequence]['value']; - $this->sequences[$sequence]['value']++; - if ($this->sequences[$sequence]['value'] >= $this->sequences[$sequence]['max']) { - unset($this->sequences[$sequence]); - } - - return $value; - } - - $this->conn->beginTransaction(); - - try { - $row = $this->conn->createQueryBuilder() - ->select('sequence_value', 'sequence_increment_by') - ->from($this->generatorTableName) - ->where('sequence_name = ?') - ->forUpdate() - ->setParameter(1, $sequence) - ->fetchAssociative(); - - if ($row !== false) { - $row = array_change_key_case($row, CASE_LOWER); - - $value = $row['sequence_value']; - $value++; - - assert(is_int($value)); - - if ($row['sequence_increment_by'] > 1) { - $this->sequences[$sequence] = [ - 'value' => $value, - 'max' => $row['sequence_value'] + $row['sequence_increment_by'], - ]; - } - - $sql = 'UPDATE ' . $this->generatorTableName . ' ' . - 'SET sequence_value = sequence_value + sequence_increment_by ' . - 'WHERE sequence_name = ? AND sequence_value = ?'; - $rows = $this->conn->executeStatement($sql, [$sequence, $row['sequence_value']]); - - if ($rows !== 1) { - throw new Exception('Race-condition detected while updating sequence. Aborting generation'); - } - } else { - $this->conn->insert( - $this->generatorTableName, - ['sequence_name' => $sequence, 'sequence_value' => 1, 'sequence_increment_by' => 1], - ); - $value = 1; - } - - $this->conn->commit(); - } catch (Throwable $e) { - $this->conn->rollBack(); - - throw new Exception( - 'Error occurred while generating ID with TableGenerator, aborted generation: ' . $e->getMessage(), - 0, - $e, - ); - } - - return $value; - } -} diff --git a/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php b/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php deleted file mode 100644 index 75c9fe9..0000000 --- a/vendor/doctrine/dbal/src/Id/TableGeneratorSchemaVisitor.php +++ /dev/null @@ -1,77 +0,0 @@ -generatorTableName = $generatorTableName; - } - - /** - * {@inheritDoc} - */ - public function acceptSchema(Schema $schema) - { - $table = $schema->createTable($this->generatorTableName); - $table->addColumn('sequence_name', 'string'); - $table->addColumn('sequence_value', 'integer', ['default' => 1]); - $table->addColumn('sequence_increment_by', 'integer', ['default' => 1]); - } - - /** - * {@inheritDoc} - */ - public function acceptTable(Table $table) - { - } - - /** - * {@inheritDoc} - */ - public function acceptColumn(Table $table, Column $column) - { - } - - /** - * {@inheritDoc} - */ - public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) - { - } - - /** - * {@inheritDoc} - */ - public function acceptIndex(Table $table, Index $index) - { - } - - /** - * {@inheritDoc} - */ - public function acceptSequence(Sequence $sequence) - { - } -} diff --git a/vendor/doctrine/dbal/src/LockMode.php b/vendor/doctrine/dbal/src/LockMode.php deleted file mode 100644 index 1a7ed23..0000000 --- a/vendor/doctrine/dbal/src/LockMode.php +++ /dev/null @@ -1,23 +0,0 @@ -logger = $logger; - } - - public function __destruct() - { - $this->logger->info('Disconnecting'); - } - - public function prepare(string $sql): DriverStatement - { - return new Statement( - parent::prepare($sql), - $this->logger, - $sql, - ); - } - - public function query(string $sql): Result - { - $this->logger->debug('Executing query: {sql}', ['sql' => $sql]); - - return parent::query($sql); - } - - public function exec(string $sql): int - { - $this->logger->debug('Executing statement: {sql}', ['sql' => $sql]); - - return parent::exec($sql); - } - - /** - * {@inheritDoc} - */ - public function beginTransaction() - { - $this->logger->debug('Beginning transaction'); - - return parent::beginTransaction(); - } - - /** - * {@inheritDoc} - */ - public function commit() - { - $this->logger->debug('Committing transaction'); - - return parent::commit(); - } - - /** - * {@inheritDoc} - */ - public function rollBack() - { - $this->logger->debug('Rolling back transaction'); - - return parent::rollBack(); - } -} diff --git a/vendor/doctrine/dbal/src/Logging/DebugStack.php b/vendor/doctrine/dbal/src/Logging/DebugStack.php deleted file mode 100644 index 1a970d0..0000000 --- a/vendor/doctrine/dbal/src/Logging/DebugStack.php +++ /dev/null @@ -1,75 +0,0 @@ -> - */ - public $queries = []; - - /** - * If Debug Stack is enabled (log queries) or not. - * - * @var bool - */ - public $enabled = true; - - /** @var float|null */ - public $start = null; - - /** @var int */ - public $currentQuery = 0; - - public function __construct() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4967', - 'DebugStack is deprecated.', - ); - } - - /** - * {@inheritDoc} - */ - public function startQuery($sql, ?array $params = null, ?array $types = null) - { - if (! $this->enabled) { - return; - } - - $this->start = microtime(true); - - $this->queries[++$this->currentQuery] = [ - 'sql' => $sql, - 'params' => $params, - 'types' => $types, - 'executionMS' => 0, - ]; - } - - /** - * {@inheritDoc} - */ - public function stopQuery() - { - if (! $this->enabled) { - return; - } - - $this->queries[$this->currentQuery]['executionMS'] = microtime(true) - $this->start; - } -} diff --git a/vendor/doctrine/dbal/src/Logging/Driver.php b/vendor/doctrine/dbal/src/Logging/Driver.php deleted file mode 100644 index 32a5cd2..0000000 --- a/vendor/doctrine/dbal/src/Logging/Driver.php +++ /dev/null @@ -1,58 +0,0 @@ -logger = $logger; - } - - /** - * {@inheritDoc} - */ - public function connect( - #[SensitiveParameter] - array $params - ) { - $this->logger->info('Connecting with parameters {params}', ['params' => $this->maskPassword($params)]); - - return new Connection( - parent::connect($params), - $this->logger, - ); - } - - /** - * @param array $params Connection parameters - * - * @return array - */ - private function maskPassword( - #[SensitiveParameter] - array $params - ): array { - if (isset($params['password'])) { - $params['password'] = ''; - } - - if (isset($params['url'])) { - $params['url'] = ''; - } - - return $params; - } -} diff --git a/vendor/doctrine/dbal/src/Logging/LoggerChain.php b/vendor/doctrine/dbal/src/Logging/LoggerChain.php deleted file mode 100644 index 7a4eaa4..0000000 --- a/vendor/doctrine/dbal/src/Logging/LoggerChain.php +++ /dev/null @@ -1,48 +0,0 @@ - */ - private iterable $loggers; - - /** @param iterable $loggers */ - public function __construct(iterable $loggers = []) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4967', - 'LoggerChain is deprecated', - ); - - $this->loggers = $loggers; - } - - /** - * {@inheritDoc} - */ - public function startQuery($sql, ?array $params = null, ?array $types = null) - { - foreach ($this->loggers as $logger) { - $logger->startQuery($sql, $params, $types); - } - } - - /** - * {@inheritDoc} - */ - public function stopQuery() - { - foreach ($this->loggers as $logger) { - $logger->stopQuery(); - } - } -} diff --git a/vendor/doctrine/dbal/src/Logging/Middleware.php b/vendor/doctrine/dbal/src/Logging/Middleware.php deleted file mode 100644 index da0c1b9..0000000 --- a/vendor/doctrine/dbal/src/Logging/Middleware.php +++ /dev/null @@ -1,24 +0,0 @@ -logger = $logger; - } - - public function wrap(DriverInterface $driver): DriverInterface - { - return new Driver($driver, $this->logger); - } -} diff --git a/vendor/doctrine/dbal/src/Logging/SQLLogger.php b/vendor/doctrine/dbal/src/Logging/SQLLogger.php deleted file mode 100644 index dab4a3a..0000000 --- a/vendor/doctrine/dbal/src/Logging/SQLLogger.php +++ /dev/null @@ -1,32 +0,0 @@ -|array|null $params Statement parameters - * @param array|array|null $types Parameter types - * - * @return void - */ - public function startQuery($sql, ?array $params = null, ?array $types = null); - - /** - * Marks the last started query as stopped. This can be used for timing of queries. - * - * @return void - */ - public function stopQuery(); -} diff --git a/vendor/doctrine/dbal/src/Logging/Statement.php b/vendor/doctrine/dbal/src/Logging/Statement.php deleted file mode 100644 index 039b93b..0000000 --- a/vendor/doctrine/dbal/src/Logging/Statement.php +++ /dev/null @@ -1,100 +0,0 @@ -|array */ - private array $params = []; - - /** @var array|array */ - private array $types = []; - - /** @internal This statement can be only instantiated by its connection. */ - public function __construct(StatementInterface $statement, LoggerInterface $logger, string $sql) - { - parent::__construct($statement); - - $this->logger = $logger; - $this->sql = $sql; - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see bindValue()} instead. - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindParam() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - $this->params[$param] = &$variable; - $this->types[$param] = $type; - - return parent::bindParam($param, $variable, $type, ...array_slice(func_get_args(), 3)); - } - - /** - * {@inheritDoc} - */ - public function bindValue($param, $value, $type = ParameterType::STRING) - { - if (func_num_args() < 3) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5558', - 'Not passing $type to Statement::bindValue() is deprecated.' - . ' Pass the type corresponding to the parameter being bound.', - ); - } - - $this->params[$param] = $value; - $this->types[$param] = $type; - - return parent::bindValue($param, $value, $type); - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): ResultInterface - { - $this->logger->debug('Executing statement: {sql} (parameters: {params}, types: {types})', [ - 'sql' => $this->sql, - 'params' => $params ?? $this->params, - 'types' => $this->types, - ]); - - return parent::execute($params); - } -} diff --git a/vendor/doctrine/dbal/src/ParameterType.php b/vendor/doctrine/dbal/src/ParameterType.php deleted file mode 100644 index 77917e8..0000000 --- a/vendor/doctrine/dbal/src/ParameterType.php +++ /dev/null @@ -1,57 +0,0 @@ - 0) { - $query .= sprintf(' OFFSET %d', $offset); - } - } elseif ($offset > 0) { - // 2^64-1 is the maximum of unsigned BIGINT, the biggest limit possible - $query .= sprintf(' LIMIT 18446744073709551615 OFFSET %d', $offset); - } - - return $query; - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see quoteIdentifier()} to quote identifiers instead. - */ - public function getIdentifierQuoteCharacter() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5388', - 'AbstractMySQLPlatform::getIdentifierQuoteCharacter() is deprecated. Use quoteIdentifier() instead.', - ); - - return '`'; - } - - /** - * {@inheritDoc} - */ - public function getRegexpExpression() - { - return 'RLIKE'; - } - - /** - * {@inheritDoc} - */ - public function getLocateExpression($str, $substr, $startPos = false) - { - if ($startPos === false) { - return 'LOCATE(' . $substr . ', ' . $str . ')'; - } - - return 'LOCATE(' . $substr . ', ' . $str . ', ' . $startPos . ')'; - } - - /** - * {@inheritDoc} - */ - public function getConcatExpression() - { - return sprintf('CONCAT(%s)', implode(', ', func_get_args())); - } - - /** - * {@inheritDoc} - */ - protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) - { - $function = $operator === '+' ? 'DATE_ADD' : 'DATE_SUB'; - - return $function . '(' . $date . ', INTERVAL ' . $interval . ' ' . $unit . ')'; - } - - /** - * {@inheritDoc} - */ - public function getDateDiffExpression($date1, $date2) - { - return 'DATEDIFF(' . $date1 . ', ' . $date2 . ')'; - } - - public function getCurrentDatabaseExpression(): string - { - return 'DATABASE()'; - } - - /** - * {@inheritDoc} - */ - public function getLengthExpression($column) - { - return 'CHAR_LENGTH(' . $column . ')'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListDatabasesSQL() - { - return 'SHOW DATABASES'; - } - - /** - * @deprecated - * - * {@inheritDoc} - */ - public function getListTableConstraintsSQL($table) - { - return 'SHOW INDEX FROM ' . $table; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - * - * Two approaches to listing the table indexes. The information_schema is - * preferred, because it doesn't cause problems with SQL keywords such as "order" or "table". - */ - public function getListTableIndexesSQL($table, $database = null) - { - if ($database !== null) { - return 'SELECT NON_UNIQUE AS Non_Unique, INDEX_NAME AS Key_name, COLUMN_NAME AS Column_Name,' . - ' SUB_PART AS Sub_Part, INDEX_TYPE AS Index_Type' . - ' FROM information_schema.STATISTICS WHERE TABLE_NAME = ' . $this->quoteStringLiteral($table) . - ' AND TABLE_SCHEMA = ' . $this->quoteStringLiteral($database) . - ' ORDER BY SEQ_IN_INDEX ASC'; - } - - return 'SHOW INDEX FROM ' . $table; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListViewsSQL($database) - { - return 'SELECT * FROM information_schema.VIEWS WHERE TABLE_SCHEMA = ' . $this->quoteStringLiteral($database); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * @param string $table - * @param string|null $database - * - * @return string - */ - public function getListTableForeignKeysSQL($table, $database = null) - { - // The schema name is passed multiple times as a literal in the WHERE clause instead of using a JOIN condition - // in order to avoid performance issues on MySQL older than 8.0 and the corresponding MariaDB versions - // caused by https://bugs.mysql.com/bug.php?id=81347 - return 'SELECT k.CONSTRAINT_NAME, k.COLUMN_NAME, k.REFERENCED_TABLE_NAME, ' . - 'k.REFERENCED_COLUMN_NAME /*!50116 , c.UPDATE_RULE, c.DELETE_RULE */ ' . - 'FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE k /*!50116 ' . - 'INNER JOIN INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS c ON ' . - 'c.CONSTRAINT_NAME = k.CONSTRAINT_NAME AND ' . - 'c.TABLE_NAME = k.TABLE_NAME */ ' . - 'WHERE k.TABLE_NAME = ' . $this->quoteStringLiteral($table) . ' ' . - 'AND k.TABLE_SCHEMA = ' . $this->getDatabaseNameSQL($database) . ' /*!50116 ' . - 'AND c.CONSTRAINT_SCHEMA = ' . $this->getDatabaseNameSQL($database) . ' */' . - 'ORDER BY k.ORDINAL_POSITION'; - } - - /** - * {@inheritDoc} - */ - protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default string column length on MySQL is deprecated' - . ', specify the length explicitly.', - ); - } - - return $fixed ? ($length > 0 ? 'CHAR(' . $length . ')' : 'CHAR(255)') - : ($length > 0 ? 'VARCHAR(' . $length . ')' : 'VARCHAR(255)'); - } - - /** - * {@inheritDoc} - */ - protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default binary column length on MySQL is deprecated' - . ', specify the length explicitly.', - ); - } - - return $fixed - ? 'BINARY(' . ($length > 0 ? $length : 255) . ')' - : 'VARBINARY(' . ($length > 0 ? $length : 255) . ')'; - } - - /** - * Gets the SQL snippet used to declare a CLOB column type. - * TINYTEXT : 2 ^ 8 - 1 = 255 - * TEXT : 2 ^ 16 - 1 = 65535 - * MEDIUMTEXT : 2 ^ 24 - 1 = 16777215 - * LONGTEXT : 2 ^ 32 - 1 = 4294967295 - * - * {@inheritDoc} - */ - public function getClobTypeDeclarationSQL(array $column) - { - if (! empty($column['length']) && is_numeric($column['length'])) { - $length = $column['length']; - - if ($length <= static::LENGTH_LIMIT_TINYTEXT) { - return 'TINYTEXT'; - } - - if ($length <= static::LENGTH_LIMIT_TEXT) { - return 'TEXT'; - } - - if ($length <= static::LENGTH_LIMIT_MEDIUMTEXT) { - return 'MEDIUMTEXT'; - } - } - - return 'LONGTEXT'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTypeDeclarationSQL(array $column) - { - if (isset($column['version']) && $column['version'] === true) { - return 'TIMESTAMP'; - } - - return 'DATETIME'; - } - - /** - * {@inheritDoc} - */ - public function getDateTypeDeclarationSQL(array $column) - { - return 'DATE'; - } - - /** - * {@inheritDoc} - */ - public function getTimeTypeDeclarationSQL(array $column) - { - return 'TIME'; - } - - /** - * {@inheritDoc} - */ - public function getBooleanTypeDeclarationSQL(array $column) - { - return 'TINYINT(1)'; - } - - /** - * {@inheritDoc} - * - * @deprecated - * - * MySQL prefers "autoincrement" identity columns since sequences can only - * be emulated with a table. - */ - public function prefersIdentityColumns() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/1519', - 'AbstractMySQLPlatform::prefersIdentityColumns() is deprecated.', - ); - - return true; - } - - /** - * {@inheritDoc} - * - * MySQL supports this through AUTO_INCREMENT columns. - */ - public function supportsIdentityColumns() - { - return true; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsInlineColumnComments() - { - return true; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsColumnCollation() - { - return true; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTablesSQL() - { - return "SHOW FULL TABLES WHERE Table_type = 'BASE TABLE'"; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableColumnsSQL($table, $database = null) - { - return 'SELECT COLUMN_NAME AS Field, COLUMN_TYPE AS Type, IS_NULLABLE AS `Null`, ' . - 'COLUMN_KEY AS `Key`, COLUMN_DEFAULT AS `Default`, EXTRA AS Extra, COLUMN_COMMENT AS Comment, ' . - 'CHARACTER_SET_NAME AS CharacterSet, COLLATION_NAME AS Collation ' . - 'FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ' . $this->getDatabaseNameSQL($database) . - ' AND TABLE_NAME = ' . $this->quoteStringLiteral($table) . - ' ORDER BY ORDINAL_POSITION ASC'; - } - - /** - * @deprecated Use {@see getColumnTypeSQLSnippet()} instead. - * - * The SQL snippets required to elucidate a column type - * - * Returns an array of the form [column type SELECT snippet, additional JOIN statement snippet] - * - * @return array{string, string} - */ - public function getColumnTypeSQLSnippets(string $tableAlias = 'c'): array - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6202', - 'AbstractMySQLPlatform::getColumnTypeSQLSnippets() is deprecated. ' - . 'Use AbstractMySQLPlatform::getColumnTypeSQLSnippet() instead.', - ); - - return [$this->getColumnTypeSQLSnippet(...func_get_args()), '']; - } - - /** - * The SQL snippet required to elucidate a column type - * - * Returns a column type SELECT snippet string - */ - public function getColumnTypeSQLSnippet(string $tableAlias = 'c', ?string $databaseName = null): string - { - return $tableAlias . '.COLUMN_TYPE'; - } - - /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */ - public function getListTableMetadataSQL(string $table, ?string $database = null): string - { - return sprintf( - <<<'SQL' -SELECT t.ENGINE, - t.AUTO_INCREMENT, - t.TABLE_COMMENT, - t.CREATE_OPTIONS, - t.TABLE_COLLATION, - ccsa.CHARACTER_SET_NAME -FROM information_schema.TABLES t - INNER JOIN information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` ccsa - ON ccsa.COLLATION_NAME = t.TABLE_COLLATION -WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = %s AND TABLE_NAME = %s -SQL - , - $this->getDatabaseNameSQL($database), - $this->quoteStringLiteral($table), - ); - } - - /** - * {@inheritDoc} - */ - public function getCreateTablesSQL(array $tables): array - { - $sql = []; - - foreach ($tables as $table) { - $sql = array_merge($sql, $this->getCreateTableWithoutForeignKeysSQL($table)); - } - - foreach ($tables as $table) { - if (! $table->hasOption('engine') || $this->engineSupportsForeignKeys($table->getOption('engine'))) { - foreach ($table->getForeignKeys() as $foreignKey) { - $sql[] = $this->getCreateForeignKeySQL( - $foreignKey, - $table->getQuotedName($this), - ); - } - } elseif (count($table->getForeignKeys()) > 0) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5414', - 'Relying on the DBAL not generating DDL for foreign keys on MySQL engines' - . ' other than InnoDB is deprecated.' - . ' Define foreign key constraints only if they are necessary.', - ); - } - } - - return $sql; - } - - /** - * {@inheritDoc} - */ - protected function _getCreateTableSQL($name, array $columns, array $options = []) - { - $queryFields = $this->getColumnDeclarationListSQL($columns); - - if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) { - foreach ($options['uniqueConstraints'] as $constraintName => $definition) { - $queryFields .= ', ' . $this->getUniqueConstraintDeclarationSQL($constraintName, $definition); - } - } - - // add all indexes - if (isset($options['indexes']) && ! empty($options['indexes'])) { - foreach ($options['indexes'] as $indexName => $definition) { - $queryFields .= ', ' . $this->getIndexDeclarationSQL($indexName, $definition); - } - } - - // attach all primary keys - if (isset($options['primary']) && ! empty($options['primary'])) { - $keyColumns = array_unique(array_values($options['primary'])); - $queryFields .= ', PRIMARY KEY(' . implode(', ', $keyColumns) . ')'; - } - - $query = 'CREATE '; - - if (! empty($options['temporary'])) { - $query .= 'TEMPORARY '; - } - - $query .= 'TABLE ' . $name . ' (' . $queryFields . ') '; - $query .= $this->buildTableOptions($options); - $query .= $this->buildPartitionOptions($options); - - $sql = [$query]; - - // Propagate foreign key constraints only for InnoDB. - if (isset($options['foreignKeys'])) { - if (! isset($options['engine']) || $this->engineSupportsForeignKeys($options['engine'])) { - foreach ($options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $name); - } - } elseif (count($options['foreignKeys']) > 0) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5414', - 'Relying on the DBAL not generating DDL for foreign keys on MySQL engines' - . ' other than InnoDB is deprecated.' - . ' Define foreign key constraints only if they are necessary.', - ); - } - } - - return $sql; - } - - public function createSelectSQLBuilder(): SelectSQLBuilder - { - return new DefaultSelectSQLBuilder($this, 'FOR UPDATE', null); - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getDefaultValueDeclarationSQL($column) - { - // Unset the default value if the given column definition does not allow default values. - if ($column['type'] instanceof TextType || $column['type'] instanceof BlobType) { - $column['default'] = null; - } - - return parent::getDefaultValueDeclarationSQL($column); - } - - /** - * Build SQL for table options - * - * @param mixed[] $options - */ - private function buildTableOptions(array $options): string - { - if (isset($options['table_options'])) { - return $options['table_options']; - } - - $tableOptions = []; - - // Charset - if (! isset($options['charset'])) { - $options['charset'] = 'utf8'; - } - - $tableOptions[] = sprintf('DEFAULT CHARACTER SET %s', $options['charset']); - - if (isset($options['collate'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5214', - 'The "collate" option is deprecated in favor of "collation" and will be removed in 4.0.', - ); - $options['collation'] = $options['collate']; - } - - // Collation - if (! isset($options['collation'])) { - $options['collation'] = $options['charset'] . '_unicode_ci'; - } - - $tableOptions[] = $this->getColumnCollationDeclarationSQL($options['collation']); - - // Engine - if (! isset($options['engine'])) { - $options['engine'] = 'InnoDB'; - } - - $tableOptions[] = sprintf('ENGINE = %s', $options['engine']); - - // Auto increment - if (isset($options['auto_increment'])) { - $tableOptions[] = sprintf('AUTO_INCREMENT = %s', $options['auto_increment']); - } - - // Comment - if (isset($options['comment'])) { - $tableOptions[] = sprintf('COMMENT = %s ', $this->quoteStringLiteral($options['comment'])); - } - - // Row format - if (isset($options['row_format'])) { - $tableOptions[] = sprintf('ROW_FORMAT = %s', $options['row_format']); - } - - return implode(' ', $tableOptions); - } - - /** - * Build SQL for partition options. - * - * @param mixed[] $options - */ - private function buildPartitionOptions(array $options): string - { - return isset($options['partition_options']) - ? ' ' . $options['partition_options'] - : ''; - } - - private function engineSupportsForeignKeys(string $engine): bool - { - return strcasecmp(trim($engine), 'InnoDB') === 0; - } - - /** - * {@inheritDoc} - */ - public function getAlterTableSQL(TableDiff $diff) - { - $columnSql = []; - $queryParts = []; - $newName = $diff->getNewName(); - - if ($newName !== false) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5663', - 'Generation of SQL that renames a table using %s is deprecated. Use getRenameTableSQL() instead.', - __METHOD__, - ); - - $queryParts[] = 'RENAME TO ' . $newName->getQuotedName($this); - } - - foreach ($diff->getAddedColumns() as $column) { - if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) { - continue; - } - - $columnProperties = array_merge($column->toArray(), [ - 'comment' => $this->getColumnComment($column), - ]); - - $queryParts[] = 'ADD ' . $this->getColumnDeclarationSQL( - $column->getQuotedName($this), - $columnProperties, - ); - } - - foreach ($diff->getDroppedColumns() as $column) { - if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) { - continue; - } - - $queryParts[] = 'DROP ' . $column->getQuotedName($this); - } - - foreach ($diff->getModifiedColumns() as $columnDiff) { - if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) { - continue; - } - - $newColumn = $columnDiff->getNewColumn(); - - $newColumnProperties = array_merge($newColumn->toArray(), [ - 'comment' => $this->getColumnComment($newColumn), - ]); - - $oldColumn = $columnDiff->getOldColumn() ?? $columnDiff->getOldColumnName(); - - $queryParts[] = 'CHANGE ' . $oldColumn->getQuotedName($this) . ' ' - . $this->getColumnDeclarationSQL($newColumn->getQuotedName($this), $newColumnProperties); - } - - foreach ($diff->getRenamedColumns() as $oldColumnName => $column) { - if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) { - continue; - } - - $oldColumnName = new Identifier($oldColumnName); - - $columnProperties = array_merge($column->toArray(), [ - 'comment' => $this->getColumnComment($column), - ]); - - $queryParts[] = 'CHANGE ' . $oldColumnName->getQuotedName($this) . ' ' - . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnProperties); - } - - $addedIndexes = $this->indexAssetsByLowerCaseName($diff->getAddedIndexes()); - $modifiedIndexes = $this->indexAssetsByLowerCaseName($diff->getModifiedIndexes()); - $diffModified = false; - - if (isset($addedIndexes['primary'])) { - $keyColumns = array_unique(array_values($addedIndexes['primary']->getColumns())); - $queryParts[] = 'ADD PRIMARY KEY (' . implode(', ', $keyColumns) . ')'; - unset($addedIndexes['primary']); - $diffModified = true; - } elseif (isset($modifiedIndexes['primary'])) { - $addedColumns = $this->indexAssetsByLowerCaseName($diff->getAddedColumns()); - - // Necessary in case the new primary key includes a new auto_increment column - foreach ($modifiedIndexes['primary']->getColumns() as $columnName) { - if (isset($addedColumns[$columnName]) && $addedColumns[$columnName]->getAutoincrement()) { - $keyColumns = array_unique(array_values($modifiedIndexes['primary']->getColumns())); - $queryParts[] = 'DROP PRIMARY KEY'; - $queryParts[] = 'ADD PRIMARY KEY (' . implode(', ', $keyColumns) . ')'; - unset($modifiedIndexes['primary']); - $diffModified = true; - break; - } - } - } - - if ($diffModified) { - $diff = new TableDiff( - $diff->name, - $diff->getAddedColumns(), - $diff->getModifiedColumns(), - $diff->getDroppedColumns(), - array_values($addedIndexes), - array_values($modifiedIndexes), - $diff->getDroppedIndexes(), - $diff->getOldTable(), - $diff->getAddedForeignKeys(), - $diff->getModifiedForeignKeys(), - $diff->getDroppedForeignKeys(), - $diff->getRenamedColumns(), - $diff->getRenamedIndexes(), - ); - } - - $sql = []; - $tableSql = []; - - if (! $this->onSchemaAlterTable($diff, $tableSql)) { - if (count($queryParts) > 0) { - $sql[] = 'ALTER TABLE ' . ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this) . ' ' - . implode(', ', $queryParts); - } - - $sql = array_merge( - $this->getPreAlterTableIndexForeignKeySQL($diff), - $sql, - $this->getPostAlterTableIndexForeignKeySQL($diff), - ); - } - - return array_merge($sql, $tableSql, $columnSql); - } - - /** - * {@inheritDoc} - */ - protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff) - { - $sql = []; - - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - - foreach ($diff->getModifiedIndexes() as $changedIndex) { - $sql = array_merge($sql, $this->getPreAlterTableAlterPrimaryKeySQL($diff, $changedIndex)); - } - - foreach ($diff->getDroppedIndexes() as $droppedIndex) { - $sql = array_merge($sql, $this->getPreAlterTableAlterPrimaryKeySQL($diff, $droppedIndex)); - - foreach ($diff->getAddedIndexes() as $addedIndex) { - if ($droppedIndex->getColumns() !== $addedIndex->getColumns()) { - continue; - } - - $indexClause = 'INDEX ' . $addedIndex->getName(); - - if ($addedIndex->isPrimary()) { - $indexClause = 'PRIMARY KEY'; - } elseif ($addedIndex->isUnique()) { - $indexClause = 'UNIQUE INDEX ' . $addedIndex->getName(); - } - - $query = 'ALTER TABLE ' . $tableNameSQL . ' DROP INDEX ' . $droppedIndex->getName() . ', '; - $query .= 'ADD ' . $indexClause; - $query .= ' (' . $this->getIndexFieldDeclarationListSQL($addedIndex) . ')'; - - $sql[] = $query; - - $diff->unsetAddedIndex($addedIndex); - $diff->unsetDroppedIndex($droppedIndex); - - break; - } - } - - $engine = 'INNODB'; - - $table = $diff->getOldTable(); - - if ($table !== null && $table->hasOption('engine')) { - $engine = strtoupper(trim($table->getOption('engine'))); - } - - // Suppress foreign key constraint propagation on non-supporting engines. - if ($engine !== 'INNODB') { - $diff->addedForeignKeys = []; - $diff->changedForeignKeys = []; - $diff->removedForeignKeys = []; - } - - $sql = array_merge( - $sql, - $this->getPreAlterTableAlterIndexForeignKeySQL($diff), - parent::getPreAlterTableIndexForeignKeySQL($diff), - $this->getPreAlterTableRenameIndexForeignKeySQL($diff), - ); - - return $sql; - } - - /** - * @return string[] - * - * @throws Exception - */ - private function getPreAlterTableAlterPrimaryKeySQL(TableDiff $diff, Index $index): array - { - if (! $index->isPrimary()) { - return []; - } - - $table = $diff->getOldTable(); - - if ($table === null) { - return []; - } - - $sql = []; - - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - - // Dropping primary keys requires to unset autoincrement attribute on the particular column first. - foreach ($index->getColumns() as $columnName) { - if (! $table->hasColumn($columnName)) { - continue; - } - - $column = $table->getColumn($columnName); - - if ($column->getAutoincrement() !== true) { - continue; - } - - $column->setAutoincrement(false); - - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' MODIFY ' . - $this->getColumnDeclarationSQL($column->getQuotedName($this), $column->toArray()); - - // original autoincrement information might be needed later on by other parts of the table alteration - $column->setAutoincrement(true); - } - - return $sql; - } - - /** - * @param TableDiff $diff The table diff to gather the SQL for. - * - * @return string[] - * - * @throws Exception - */ - private function getPreAlterTableAlterIndexForeignKeySQL(TableDiff $diff): array - { - $table = $diff->getOldTable(); - - if ($table === null) { - return []; - } - - $primaryKey = $table->getPrimaryKey(); - - if ($primaryKey === null) { - return []; - } - - $primaryKeyColumns = []; - - foreach ($primaryKey->getColumns() as $columnName) { - if (! $table->hasColumn($columnName)) { - continue; - } - - $primaryKeyColumns[] = $table->getColumn($columnName); - } - - if (count($primaryKeyColumns) === 0) { - return []; - } - - $sql = []; - - $tableNameSQL = $table->getQuotedName($this); - - foreach ($diff->getModifiedIndexes() as $changedIndex) { - // Changed primary key - if (! $changedIndex->isPrimary()) { - continue; - } - - foreach ($primaryKeyColumns as $column) { - // Check if an autoincrement column was dropped from the primary key. - if (! $column->getAutoincrement() || in_array($column->getName(), $changedIndex->getColumns(), true)) { - continue; - } - - // The autoincrement attribute needs to be removed from the dropped column - // before we can drop and recreate the primary key. - $column->setAutoincrement(false); - - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' MODIFY ' . - $this->getColumnDeclarationSQL($column->getQuotedName($this), $column->toArray()); - - // Restore the autoincrement attribute as it might be needed later on - // by other parts of the table alteration. - $column->setAutoincrement(true); - } - } - - return $sql; - } - - /** - * @param TableDiff $diff The table diff to gather the SQL for. - * - * @return string[] - */ - protected function getPreAlterTableRenameIndexForeignKeySQL(TableDiff $diff) - { - $sql = []; - - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - - foreach ($this->getRemainingForeignKeyConstraintsRequiringRenamedIndexes($diff) as $foreignKey) { - if (in_array($foreignKey, $diff->getModifiedForeignKeys(), true)) { - continue; - } - - $sql[] = $this->getDropForeignKeySQL($foreignKey->getQuotedName($this), $tableNameSQL); - } - - return $sql; - } - - /** - * Returns the remaining foreign key constraints that require one of the renamed indexes. - * - * "Remaining" here refers to the diff between the foreign keys currently defined in the associated - * table and the foreign keys to be removed. - * - * @param TableDiff $diff The table diff to evaluate. - * - * @return ForeignKeyConstraint[] - */ - private function getRemainingForeignKeyConstraintsRequiringRenamedIndexes(TableDiff $diff): array - { - if (count($diff->getRenamedIndexes()) === 0) { - return []; - } - - $table = $diff->getOldTable(); - - if ($table === null) { - return []; - } - - $foreignKeys = []; - /** @var ForeignKeyConstraint[] $remainingForeignKeys */ - $remainingForeignKeys = array_diff_key( - $table->getForeignKeys(), - $diff->getDroppedForeignKeys(), - ); - - foreach ($remainingForeignKeys as $foreignKey) { - foreach ($diff->getRenamedIndexes() as $index) { - if ($foreignKey->intersectsIndexColumns($index)) { - $foreignKeys[] = $foreignKey; - - break; - } - } - } - - return $foreignKeys; - } - - /** - * {@inheritDoc} - */ - protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff) - { - return array_merge( - parent::getPostAlterTableIndexForeignKeySQL($diff), - $this->getPostAlterTableRenameIndexForeignKeySQL($diff), - ); - } - - /** - * @param TableDiff $diff The table diff to gather the SQL for. - * - * @return string[] - */ - protected function getPostAlterTableRenameIndexForeignKeySQL(TableDiff $diff) - { - $sql = []; - $newName = $diff->getNewName(); - - if ($newName !== false) { - $tableNameSQL = $newName->getQuotedName($this); - } else { - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - } - - foreach ($this->getRemainingForeignKeyConstraintsRequiringRenamedIndexes($diff) as $foreignKey) { - if (in_array($foreignKey, $diff->getModifiedForeignKeys(), true)) { - continue; - } - - $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableNameSQL); - } - - return $sql; - } - - /** - * {@inheritDoc} - */ - protected function getCreateIndexSQLFlags(Index $index) - { - $type = ''; - if ($index->isUnique()) { - $type .= 'UNIQUE '; - } elseif ($index->hasFlag('fulltext')) { - $type .= 'FULLTEXT '; - } elseif ($index->hasFlag('spatial')) { - $type .= 'SPATIAL '; - } - - return $type; - } - - /** - * {@inheritDoc} - */ - public function getIntegerTypeDeclarationSQL(array $column) - { - return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getBigIntTypeDeclarationSQL(array $column) - { - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getSmallIntTypeDeclarationSQL(array $column) - { - return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getFloatDeclarationSQL(array $column) - { - return 'DOUBLE PRECISION' . $this->getUnsignedDeclaration($column); - } - - /** - * {@inheritDoc} - */ - public function getDecimalTypeDeclarationSQL(array $column) - { - return parent::getDecimalTypeDeclarationSQL($column) . $this->getUnsignedDeclaration($column); - } - - /** - * Get unsigned declaration for a column. - * - * @param mixed[] $columnDef - */ - private function getUnsignedDeclaration(array $columnDef): string - { - return ! empty($columnDef['unsigned']) ? ' UNSIGNED' : ''; - } - - /** - * {@inheritDoc} - */ - protected function _getCommonIntegerTypeDeclarationSQL(array $column) - { - $autoinc = ''; - if (! empty($column['autoincrement'])) { - $autoinc = ' AUTO_INCREMENT'; - } - - return $this->getUnsignedDeclaration($column) . $autoinc; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getColumnCharsetDeclarationSQL($charset) - { - return 'CHARACTER SET ' . $charset; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey) - { - $query = ''; - if ($foreignKey->hasOption('match')) { - $query .= ' MATCH ' . $foreignKey->getOption('match'); - } - - $query .= parent::getAdvancedForeignKeyOptionsSQL($foreignKey); - - return $query; - } - - /** - * {@inheritDoc} - */ - public function getDropIndexSQL($index, $table = null) - { - if ($index instanceof Index) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $index as an Index object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $indexName = $index->getQuotedName($this); - } elseif (is_string($index)) { - $indexName = $index; - } else { - throw new InvalidArgumentException( - __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.', - ); - } - - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } elseif (! is_string($table)) { - throw new InvalidArgumentException( - __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.', - ); - } - - if ($index instanceof Index && $index->isPrimary()) { - // MySQL primary keys are always named "PRIMARY", - // so we cannot use them in statements because of them being keyword. - return $this->getDropPrimaryKeySQL($table); - } - - return 'DROP INDEX ' . $indexName . ' ON ' . $table; - } - - /** - * @param string $table - * - * @return string - */ - protected function getDropPrimaryKeySQL($table) - { - return 'ALTER TABLE ' . $table . ' DROP PRIMARY KEY'; - } - - /** - * The `ALTER TABLE ... DROP CONSTRAINT` syntax is only available as of MySQL 8.0.19. - * - * @link https://dev.mysql.com/doc/refman/8.0/en/alter-table.html - */ - public function getDropUniqueConstraintSQL(string $name, string $tableName): string - { - return $this->getDropIndexSQL($name, $tableName); - } - - /** - * {@inheritDoc} - */ - public function getSetTransactionIsolationSQL($level) - { - return 'SET SESSION TRANSACTION ISOLATION LEVEL ' . $this->_getTransactionIsolationLevelSQL($level); - } - - /** - * {@inheritDoc} - */ - public function getName() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4749', - 'AbstractMySQLPlatform::getName() is deprecated. Identify platforms by their class.', - ); - - return 'mysql'; - } - - /** - * {@inheritDoc} - */ - public function getReadLockSQL() - { - return 'LOCK IN SHARE MODE'; - } - - /** - * {@inheritDoc} - */ - protected function initializeDoctrineTypeMappings() - { - $this->doctrineTypeMapping = [ - 'bigint' => Types::BIGINT, - 'binary' => Types::BINARY, - 'blob' => Types::BLOB, - 'char' => Types::STRING, - 'date' => Types::DATE_MUTABLE, - 'datetime' => Types::DATETIME_MUTABLE, - 'decimal' => Types::DECIMAL, - 'double' => Types::FLOAT, - 'float' => Types::FLOAT, - 'int' => Types::INTEGER, - 'integer' => Types::INTEGER, - 'longblob' => Types::BLOB, - 'longtext' => Types::TEXT, - 'mediumblob' => Types::BLOB, - 'mediumint' => Types::INTEGER, - 'mediumtext' => Types::TEXT, - 'numeric' => Types::DECIMAL, - 'real' => Types::FLOAT, - 'set' => Types::SIMPLE_ARRAY, - 'smallint' => Types::SMALLINT, - 'string' => Types::STRING, - 'text' => Types::TEXT, - 'time' => Types::TIME_MUTABLE, - 'timestamp' => Types::DATETIME_MUTABLE, - 'tinyblob' => Types::BLOB, - 'tinyint' => Types::BOOLEAN, - 'tinytext' => Types::TEXT, - 'varbinary' => Types::BINARY, - 'varchar' => Types::STRING, - 'year' => Types::DATE_MUTABLE, - ]; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getVarcharMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'AbstractMySQLPlatform::getVarcharMaxLength() is deprecated.', - ); - - return 65535; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getBinaryMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'AbstractMySQLPlatform::getBinaryMaxLength() is deprecated.', - ); - - return 65535; - } - - /** - * {@inheritDoc} - * - * @deprecated Implement {@see createReservedKeywordsList()} instead. - */ - protected function getReservedKeywordsClass() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - 'AbstractMySQLPlatform::getReservedKeywordsClass() is deprecated,' - . ' use AbstractMySQLPlatform::createReservedKeywordsList() instead.', - ); - - return Keywords\MySQLKeywords::class; - } - - /** - * {@inheritDoc} - * - * MySQL commits a transaction implicitly when DROP TABLE is executed, however not - * if DROP TEMPORARY TABLE is executed. - */ - public function getDropTemporaryTableSQL($table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } elseif (! is_string($table)) { - throw new InvalidArgumentException( - __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.', - ); - } - - return 'DROP TEMPORARY TABLE ' . $table; - } - - /** - * Gets the SQL Snippet used to declare a BLOB column type. - * TINYBLOB : 2 ^ 8 - 1 = 255 - * BLOB : 2 ^ 16 - 1 = 65535 - * MEDIUMBLOB : 2 ^ 24 - 1 = 16777215 - * LONGBLOB : 2 ^ 32 - 1 = 4294967295 - * - * {@inheritDoc} - */ - public function getBlobTypeDeclarationSQL(array $column) - { - if (! empty($column['length']) && is_numeric($column['length'])) { - $length = $column['length']; - - if ($length <= static::LENGTH_LIMIT_TINYBLOB) { - return 'TINYBLOB'; - } - - if ($length <= static::LENGTH_LIMIT_BLOB) { - return 'BLOB'; - } - - if ($length <= static::LENGTH_LIMIT_MEDIUMBLOB) { - return 'MEDIUMBLOB'; - } - } - - return 'LONGBLOB'; - } - - /** - * {@inheritDoc} - */ - public function quoteStringLiteral($str) - { - $str = str_replace('\\', '\\\\', $str); // MySQL requires backslashes to be escaped - - return parent::quoteStringLiteral($str); - } - - /** - * {@inheritDoc} - */ - public function getDefaultTransactionIsolationLevel() - { - return TransactionIsolationLevel::REPEATABLE_READ; - } - - public function supportsColumnLengthIndexes(): bool - { - return true; - } - - /** @deprecated Will be removed without replacement. */ - protected function getDatabaseNameSQL(?string $databaseName): string - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6215', - '%s is deprecated without replacement.', - __METHOD__, - ); - - if ($databaseName !== null) { - return $this->quoteStringLiteral($databaseName); - } - - return $this->getCurrentDatabaseExpression(); - } - - public function createSchemaManager(Connection $connection): MySQLSchemaManager - { - return new MySQLSchemaManager($connection, $this); - } - - /** - * @param list $assets - * - * @return array - * - * @template T of AbstractAsset - */ - private function indexAssetsByLowerCaseName(array $assets): array - { - $result = []; - - foreach ($assets as $asset) { - $result[strtolower($asset->getName())] = $asset; - } - - return $result; - } - - public function fetchTableOptionsByTable(bool $includeTableName): string - { - $sql = <<<'SQL' - SELECT t.TABLE_NAME, - t.ENGINE, - t.AUTO_INCREMENT, - t.TABLE_COMMENT, - t.CREATE_OPTIONS, - t.TABLE_COLLATION, - ccsa.CHARACTER_SET_NAME - FROM information_schema.TABLES t - INNER JOIN information_schema.COLLATION_CHARACTER_SET_APPLICABILITY ccsa - ON ccsa.COLLATION_NAME = t.TABLE_COLLATION -SQL; - - $conditions = ['t.TABLE_SCHEMA = ?']; - - if ($includeTableName) { - $conditions[] = 't.TABLE_NAME = ?'; - } - - $conditions[] = "t.TABLE_TYPE = 'BASE TABLE'"; - - return $sql . ' WHERE ' . implode(' AND ', $conditions); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php b/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php deleted file mode 100644 index 928a5a0..0000000 --- a/vendor/doctrine/dbal/src/Platforms/AbstractPlatform.php +++ /dev/null @@ -1,4727 +0,0 @@ -disableTypeComments = $value; - } - - /** - * Sets the EventManager used by the Platform. - * - * @deprecated - * - * @return void - */ - public function setEventManager(EventManager $eventManager) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - '%s is deprecated.', - __METHOD__, - ); - - $this->_eventManager = $eventManager; - } - - /** - * Gets the EventManager used by the Platform. - * - * @deprecated - * - * @return EventManager|null - */ - public function getEventManager() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - '%s is deprecated.', - __METHOD__, - ); - - return $this->_eventManager; - } - - /** - * Returns the SQL snippet that declares a boolean column. - * - * @param mixed[] $column - * - * @return string - */ - abstract public function getBooleanTypeDeclarationSQL(array $column); - - /** - * Returns the SQL snippet that declares a 4 byte integer column. - * - * @param mixed[] $column - * - * @return string - */ - abstract public function getIntegerTypeDeclarationSQL(array $column); - - /** - * Returns the SQL snippet that declares an 8 byte integer column. - * - * @param mixed[] $column - * - * @return string - */ - abstract public function getBigIntTypeDeclarationSQL(array $column); - - /** - * Returns the SQL snippet that declares a 2 byte integer column. - * - * @param mixed[] $column - * - * @return string - */ - abstract public function getSmallIntTypeDeclarationSQL(array $column); - - /** - * Returns the SQL snippet that declares common properties of an integer column. - * - * @param mixed[] $column - * - * @return string - */ - abstract protected function _getCommonIntegerTypeDeclarationSQL(array $column); - - /** - * Lazy load Doctrine Type Mappings. - * - * @return void - */ - abstract protected function initializeDoctrineTypeMappings(); - - /** - * Initializes Doctrine Type Mappings with the platform defaults - * and with all additional type mappings. - */ - private function initializeAllDoctrineTypeMappings(): void - { - $this->initializeDoctrineTypeMappings(); - - foreach (Type::getTypesMap() as $typeName => $className) { - foreach (Type::getType($typeName)->getMappedDatabaseTypes($this) as $dbType) { - $dbType = strtolower($dbType); - $this->doctrineTypeMapping[$dbType] = $typeName; - } - } - } - - /** - * Returns the SQL snippet used to declare a column that can - * store characters in the ASCII character set - * - * @param mixed[] $column - */ - public function getAsciiStringTypeDeclarationSQL(array $column): string - { - return $this->getStringTypeDeclarationSQL($column); - } - - /** - * Returns the SQL snippet used to declare a VARCHAR column type. - * - * @deprecated Use {@link getStringTypeDeclarationSQL()} instead. - * - * @param mixed[] $column - * - * @return string - */ - public function getVarcharTypeDeclarationSQL(array $column) - { - if (isset($column['length'])) { - $lengthOmitted = false; - } else { - $column['length'] = $this->getVarcharDefaultLength(); - $lengthOmitted = true; - } - - $fixed = $column['fixed'] ?? false; - - $maxLength = $fixed - ? $this->getCharMaxLength() - : $this->getVarcharMaxLength(); - - if ($column['length'] > $maxLength) { - return $this->getClobTypeDeclarationSQL($column); - } - - return $this->getVarcharTypeDeclarationSQLSnippet($column['length'], $fixed, $lengthOmitted); - } - - /** - * Returns the SQL snippet used to declare a string column type. - * - * @param mixed[] $column - * - * @return string - */ - public function getStringTypeDeclarationSQL(array $column) - { - return $this->getVarcharTypeDeclarationSQL($column); - } - - /** - * Returns the SQL snippet used to declare a BINARY/VARBINARY column type. - * - * @param mixed[] $column The column definition. - * - * @return string - */ - public function getBinaryTypeDeclarationSQL(array $column) - { - if (isset($column['length'])) { - $lengthOmitted = false; - } else { - $column['length'] = $this->getBinaryDefaultLength(); - $lengthOmitted = true; - } - - $fixed = $column['fixed'] ?? false; - - $maxLength = $this->getBinaryMaxLength(); - - if ($column['length'] > $maxLength) { - if ($maxLength > 0) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3187', - 'Binary column length %d is greater than supported by the platform (%d).' - . ' Reduce the column length or use a BLOB column instead.', - $column['length'], - $maxLength, - ); - } - - return $this->getBlobTypeDeclarationSQL($column); - } - - return $this->getBinaryTypeDeclarationSQLSnippet($column['length'], $fixed, $lengthOmitted); - } - - /** - * Returns the SQL snippet to declare a GUID/UUID column. - * - * By default this maps directly to a CHAR(36) and only maps to more - * special datatypes when the underlying databases support this datatype. - * - * @param mixed[] $column - * - * @return string - */ - public function getGuidTypeDeclarationSQL(array $column) - { - $column['length'] = 36; - $column['fixed'] = true; - - return $this->getStringTypeDeclarationSQL($column); - } - - /** - * Returns the SQL snippet to declare a JSON column. - * - * By default this maps directly to a CLOB and only maps to more - * special datatypes when the underlying databases support this datatype. - * - * @param mixed[] $column - * - * @return string - */ - public function getJsonTypeDeclarationSQL(array $column) - { - return $this->getClobTypeDeclarationSQL($column); - } - - /** - * @param int|false $length - * @param bool $fixed - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - throw Exception::notSupported('VARCHARs not supported by Platform.'); - } - - /** - * Returns the SQL snippet used to declare a BINARY/VARBINARY column type. - * - * @param int|false $length The length of the column. - * @param bool $fixed Whether the column length is fixed. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - throw Exception::notSupported('BINARY/VARBINARY column types are not supported by this platform.'); - } - - /** - * Returns the SQL snippet used to declare a CLOB column type. - * - * @param mixed[] $column - * - * @return string - */ - abstract public function getClobTypeDeclarationSQL(array $column); - - /** - * Returns the SQL Snippet used to declare a BLOB column type. - * - * @param mixed[] $column - * - * @return string - */ - abstract public function getBlobTypeDeclarationSQL(array $column); - - /** - * Gets the name of the platform. - * - * @deprecated Identify platforms by their class. - * - * @return string - */ - abstract public function getName(); - - /** - * Registers a doctrine type to be used in conjunction with a column type of this platform. - * - * @param string $dbType - * @param string $doctrineType - * - * @return void - * - * @throws Exception If the type is not found. - */ - public function registerDoctrineTypeMapping($dbType, $doctrineType) - { - if ($this->doctrineTypeMapping === null) { - $this->initializeAllDoctrineTypeMappings(); - } - - if (! Types\Type::hasType($doctrineType)) { - throw Exception::typeNotFound($doctrineType); - } - - $dbType = strtolower($dbType); - $this->doctrineTypeMapping[$dbType] = $doctrineType; - - $doctrineType = Type::getType($doctrineType); - - if (! $doctrineType->requiresSQLCommentHint($this)) { - return; - } - - $this->markDoctrineTypeCommented($doctrineType); - } - - /** - * Gets the Doctrine type that is mapped for the given database column type. - * - * @param string $dbType - * - * @return string - * - * @throws Exception - */ - public function getDoctrineTypeMapping($dbType) - { - if ($this->doctrineTypeMapping === null) { - $this->initializeAllDoctrineTypeMappings(); - } - - $dbType = strtolower($dbType); - - if (! isset($this->doctrineTypeMapping[$dbType])) { - throw new Exception( - 'Unknown database type ' . $dbType . ' requested, ' . static::class . ' may not support it.', - ); - } - - return $this->doctrineTypeMapping[$dbType]; - } - - /** - * Checks if a database type is currently supported by this platform. - * - * @param string $dbType - * - * @return bool - */ - public function hasDoctrineTypeMappingFor($dbType) - { - if ($this->doctrineTypeMapping === null) { - $this->initializeAllDoctrineTypeMappings(); - } - - $dbType = strtolower($dbType); - - return isset($this->doctrineTypeMapping[$dbType]); - } - - /** - * Initializes the Doctrine Type comments instance variable for in_array() checks. - * - * @deprecated This API will be removed in Doctrine DBAL 4.0. - * - * @return void - */ - protected function initializeCommentedDoctrineTypes() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5058', - '%s is deprecated and will be removed in Doctrine DBAL 4.0.', - __METHOD__, - ); - - $this->doctrineTypeComments = []; - - foreach (Type::getTypesMap() as $typeName => $className) { - $type = Type::getType($typeName); - - if (! $type->requiresSQLCommentHint($this)) { - continue; - } - - $this->doctrineTypeComments[] = $typeName; - } - } - - /** - * Is it necessary for the platform to add a parsable type comment to allow reverse engineering the given type? - * - * @deprecated Use {@link Type::requiresSQLCommentHint()} instead. - * - * @return bool - */ - public function isCommentedDoctrineType(Type $doctrineType) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5058', - '%s is deprecated and will be removed in Doctrine DBAL 4.0. Use Type::requiresSQLCommentHint() instead.', - __METHOD__, - ); - - if ($this->doctrineTypeComments === null) { - $this->initializeCommentedDoctrineTypes(); - } - - return $doctrineType->requiresSQLCommentHint($this); - } - - /** - * Marks this type as to be commented in ALTER TABLE and CREATE TABLE statements. - * - * @param string|Type $doctrineType - * - * @return void - */ - public function markDoctrineTypeCommented($doctrineType) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5058', - '%s is deprecated and will be removed in Doctrine DBAL 4.0. Use Type::requiresSQLCommentHint() instead.', - __METHOD__, - ); - - if ($this->doctrineTypeComments === null) { - $this->initializeCommentedDoctrineTypes(); - } - - assert(is_array($this->doctrineTypeComments)); - - $this->doctrineTypeComments[] = $doctrineType instanceof Type ? $doctrineType->getName() : $doctrineType; - } - - /** - * Gets the comment to append to a column comment that helps parsing this type in reverse engineering. - * - * @deprecated This method will be removed without replacement. - * - * @return string - */ - public function getDoctrineTypeComment(Type $doctrineType) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5107', - '%s is deprecated and will be removed in Doctrine DBAL 4.0.', - __METHOD__, - ); - - return '(DC2Type:' . $doctrineType->getName() . ')'; - } - - /** - * Gets the comment of a passed column modified by potential doctrine type comment hints. - * - * @deprecated This method will be removed without replacement. - * - * @return string|null - */ - protected function getColumnComment(Column $column) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5107', - '%s is deprecated and will be removed in Doctrine DBAL 4.0.', - __METHOD__, - ); - - $comment = $column->getComment(); - - if (! $this->disableTypeComments && $column->getType()->requiresSQLCommentHint($this)) { - $comment .= $this->getDoctrineTypeComment($column->getType()); - } - - return $comment; - } - - /** - * Gets the character used for identifier quoting. - * - * @deprecated Use {@see quoteIdentifier()} to quote identifiers instead. - * - * @return string - */ - public function getIdentifierQuoteCharacter() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5388', - 'AbstractPlatform::getIdentifierQuoteCharacter() is deprecated. Use quoteIdentifier() instead.', - ); - - return '"'; - } - - /** - * Gets the string portion that starts an SQL comment. - * - * @deprecated - * - * @return string - */ - public function getSqlCommentStartString() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getSqlCommentStartString() is deprecated.', - ); - - return '--'; - } - - /** - * Gets the string portion that ends an SQL comment. - * - * @deprecated - * - * @return string - */ - public function getSqlCommentEndString() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getSqlCommentEndString() is deprecated.', - ); - - return "\n"; - } - - /** - * Gets the maximum length of a char column. - * - * @deprecated - */ - public function getCharMaxLength(): int - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'AbstractPlatform::getCharMaxLength() is deprecated.', - ); - - return $this->getVarcharMaxLength(); - } - - /** - * Gets the maximum length of a varchar column. - * - * @deprecated - * - * @return int - */ - public function getVarcharMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'AbstractPlatform::getVarcharMaxLength() is deprecated.', - ); - - return 4000; - } - - /** - * Gets the default length of a varchar column. - * - * @deprecated - * - * @return int - */ - public function getVarcharDefaultLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default varchar column length is deprecated, specify the length explicitly.', - ); - - return 255; - } - - /** - * Gets the maximum length of a binary column. - * - * @deprecated - * - * @return int - */ - public function getBinaryMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'AbstractPlatform::getBinaryMaxLength() is deprecated.', - ); - - return 4000; - } - - /** - * Gets the default length of a binary column. - * - * @deprecated - * - * @return int - */ - public function getBinaryDefaultLength() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default binary column length is deprecated, specify the length explicitly.', - ); - - return 255; - } - - /** - * Gets all SQL wildcard characters of the platform. - * - * @deprecated Use {@see AbstractPlatform::getLikeWildcardCharacters()} instead. - * - * @return string[] - */ - public function getWildcards() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getWildcards() is deprecated.' - . ' Use AbstractPlatform::getLikeWildcardCharacters() instead.', - ); - - return ['%', '_']; - } - - /** - * Returns the regular expression operator. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getRegexpExpression() - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Returns the SQL snippet to get the average value of a column. - * - * @deprecated Use AVG() in SQL instead. - * - * @param string $column The column to use. - * - * @return string Generated SQL including an AVG aggregate function. - */ - public function getAvgExpression($column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getAvgExpression() is deprecated. Use AVG() in SQL instead.', - ); - - return 'AVG(' . $column . ')'; - } - - /** - * Returns the SQL snippet to get the number of rows (without a NULL value) of a column. - * - * If a '*' is used instead of a column the number of selected rows is returned. - * - * @deprecated Use COUNT() in SQL instead. - * - * @param string|int $column The column to use. - * - * @return string Generated SQL including a COUNT aggregate function. - */ - public function getCountExpression($column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getCountExpression() is deprecated. Use COUNT() in SQL instead.', - ); - - return 'COUNT(' . $column . ')'; - } - - /** - * Returns the SQL snippet to get the highest value of a column. - * - * @deprecated Use MAX() in SQL instead. - * - * @param string $column The column to use. - * - * @return string Generated SQL including a MAX aggregate function. - */ - public function getMaxExpression($column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getMaxExpression() is deprecated. Use MAX() in SQL instead.', - ); - - return 'MAX(' . $column . ')'; - } - - /** - * Returns the SQL snippet to get the lowest value of a column. - * - * @deprecated Use MIN() in SQL instead. - * - * @param string $column The column to use. - * - * @return string Generated SQL including a MIN aggregate function. - */ - public function getMinExpression($column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getMinExpression() is deprecated. Use MIN() in SQL instead.', - ); - - return 'MIN(' . $column . ')'; - } - - /** - * Returns the SQL snippet to get the total sum of a column. - * - * @deprecated Use SUM() in SQL instead. - * - * @param string $column The column to use. - * - * @return string Generated SQL including a SUM aggregate function. - */ - public function getSumExpression($column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getSumExpression() is deprecated. Use SUM() in SQL instead.', - ); - - return 'SUM(' . $column . ')'; - } - - // scalar functions - - /** - * Returns the SQL snippet to get the md5 sum of a column. - * - * Note: Not SQL92, but common functionality. - * - * @deprecated - * - * @param string $column - * - * @return string - */ - public function getMd5Expression($column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getMd5Expression() is deprecated.', - ); - - return 'MD5(' . $column . ')'; - } - - /** - * Returns the SQL snippet to get the length of a text column in characters. - * - * @param string $column - * - * @return string - */ - public function getLengthExpression($column) - { - return 'LENGTH(' . $column . ')'; - } - - /** - * Returns the SQL snippet to get the squared value of a column. - * - * @deprecated Use SQRT() in SQL instead. - * - * @param string $column The column to use. - * - * @return string Generated SQL including an SQRT aggregate function. - */ - public function getSqrtExpression($column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getSqrtExpression() is deprecated. Use SQRT() in SQL instead.', - ); - - return 'SQRT(' . $column . ')'; - } - - /** - * Returns the SQL snippet to round a numeric column to the number of decimals specified. - * - * @deprecated Use ROUND() in SQL instead. - * - * @param string $column - * @param string|int $decimals - * - * @return string - */ - public function getRoundExpression($column, $decimals = 0) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getRoundExpression() is deprecated. Use ROUND() in SQL instead.', - ); - - return 'ROUND(' . $column . ', ' . $decimals . ')'; - } - - /** - * Returns the SQL snippet to get the remainder of the division operation $expression1 / $expression2. - * - * @param string $expression1 - * @param string $expression2 - * - * @return string - */ - public function getModExpression($expression1, $expression2) - { - return 'MOD(' . $expression1 . ', ' . $expression2 . ')'; - } - - /** - * Returns the SQL snippet to trim a string. - * - * @param string $str The expression to apply the trim to. - * @param int $mode The position of the trim (leading/trailing/both). - * @param string|bool $char The char to trim, has to be quoted already. Defaults to space. - * - * @return string - */ - public function getTrimExpression($str, $mode = TrimMode::UNSPECIFIED, $char = false) - { - $expression = ''; - - switch ($mode) { - case TrimMode::LEADING: - $expression = 'LEADING '; - break; - - case TrimMode::TRAILING: - $expression = 'TRAILING '; - break; - - case TrimMode::BOTH: - $expression = 'BOTH '; - break; - } - - if ($char !== false) { - $expression .= $char . ' '; - } - - if ($mode !== TrimMode::UNSPECIFIED || $char !== false) { - $expression .= 'FROM '; - } - - return 'TRIM(' . $expression . $str . ')'; - } - - /** - * Returns the SQL snippet to trim trailing space characters from the expression. - * - * @deprecated Use RTRIM() in SQL instead. - * - * @param string $str Literal string or column name. - * - * @return string - */ - public function getRtrimExpression($str) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getRtrimExpression() is deprecated. Use RTRIM() in SQL instead.', - ); - - return 'RTRIM(' . $str . ')'; - } - - /** - * Returns the SQL snippet to trim leading space characters from the expression. - * - * @deprecated Use LTRIM() in SQL instead. - * - * @param string $str Literal string or column name. - * - * @return string - */ - public function getLtrimExpression($str) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getLtrimExpression() is deprecated. Use LTRIM() in SQL instead.', - ); - - return 'LTRIM(' . $str . ')'; - } - - /** - * Returns the SQL snippet to change all characters from the expression to uppercase, - * according to the current character set mapping. - * - * @deprecated Use UPPER() in SQL instead. - * - * @param string $str Literal string or column name. - * - * @return string - */ - public function getUpperExpression($str) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getUpperExpression() is deprecated. Use UPPER() in SQL instead.', - ); - - return 'UPPER(' . $str . ')'; - } - - /** - * Returns the SQL snippet to change all characters from the expression to lowercase, - * according to the current character set mapping. - * - * @deprecated Use LOWER() in SQL instead. - * - * @param string $str Literal string or column name. - * - * @return string - */ - public function getLowerExpression($str) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getLowerExpression() is deprecated. Use LOWER() in SQL instead.', - ); - - return 'LOWER(' . $str . ')'; - } - - /** - * Returns the SQL snippet to get the position of the first occurrence of substring $substr in string $str. - * - * @param string $str Literal string. - * @param string $substr Literal string to find. - * @param string|int|false $startPos Position to start at, beginning of string by default. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getLocateExpression($str, $substr, $startPos = false) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Returns the SQL snippet to get the current system date. - * - * @deprecated Generate dates within the application. - * - * @return string - */ - public function getNowExpression() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4753', - 'AbstractPlatform::getNowExpression() is deprecated. Generate dates within the application.', - ); - - return 'NOW()'; - } - - /** - * Returns a SQL snippet to get a substring inside an SQL statement. - * - * Note: Not SQL92, but common functionality. - * - * SQLite only supports the 2 parameter variant of this function. - * - * @param string $string An sql string literal or column name/alias. - * @param string|int $start Where to start the substring portion. - * @param string|int|null $length The substring portion length. - * - * @return string - */ - public function getSubstringExpression($string, $start, $length = null) - { - if ($length === null) { - return 'SUBSTRING(' . $string . ' FROM ' . $start . ')'; - } - - return 'SUBSTRING(' . $string . ' FROM ' . $start . ' FOR ' . $length . ')'; - } - - /** - * Returns a SQL snippet to concatenate the given expressions. - * - * Accepts an arbitrary number of string parameters. Each parameter must contain an expression. - * - * @return string - */ - public function getConcatExpression() - { - return implode(' || ', func_get_args()); - } - - /** - * Returns the SQL for a logical not. - * - * Example: - * - * $q = new Doctrine_Query(); - * $e = $q->expr; - * $q->select('*')->from('table') - * ->where($e->eq('id', $e->not('null')); - * - * - * @deprecated Use NOT() in SQL instead. - * - * @param string $expression - * - * @return string The logical expression. - */ - public function getNotExpression($expression) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getNotExpression() is deprecated. Use NOT() in SQL instead.', - ); - - return 'NOT(' . $expression . ')'; - } - - /** - * Returns the SQL that checks if an expression is null. - * - * @deprecated Use IS NULL in SQL instead. - * - * @param string $expression The expression that should be compared to null. - * - * @return string The logical expression. - */ - public function getIsNullExpression($expression) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getIsNullExpression() is deprecated. Use IS NULL in SQL instead.', - ); - - return $expression . ' IS NULL'; - } - - /** - * Returns the SQL that checks if an expression is not null. - * - * @deprecated Use IS NOT NULL in SQL instead. - * - * @param string $expression The expression that should be compared to null. - * - * @return string The logical expression. - */ - public function getIsNotNullExpression($expression) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getIsNotNullExpression() is deprecated. Use IS NOT NULL in SQL instead.', - ); - - return $expression . ' IS NOT NULL'; - } - - /** - * Returns the SQL that checks if an expression evaluates to a value between two values. - * - * The parameter $expression is checked if it is between $value1 and $value2. - * - * Note: There is a slight difference in the way BETWEEN works on some databases. - * http://www.w3schools.com/sql/sql_between.asp. If you want complete database - * independence you should avoid using between(). - * - * @deprecated Use BETWEEN in SQL instead. - * - * @param string $expression The value to compare to. - * @param string $value1 The lower value to compare with. - * @param string $value2 The higher value to compare with. - * - * @return string The logical expression. - */ - public function getBetweenExpression($expression, $value1, $value2) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getBetweenExpression() is deprecated. Use BETWEEN in SQL instead.', - ); - - return $expression . ' BETWEEN ' . $value1 . ' AND ' . $value2; - } - - /** - * Returns the SQL to get the arccosine of a value. - * - * @deprecated Use ACOS() in SQL instead. - * - * @param string $value - * - * @return string - */ - public function getAcosExpression($value) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getAcosExpression() is deprecated. Use ACOS() in SQL instead.', - ); - - return 'ACOS(' . $value . ')'; - } - - /** - * Returns the SQL to get the sine of a value. - * - * @deprecated Use SIN() in SQL instead. - * - * @param string $value - * - * @return string - */ - public function getSinExpression($value) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getSinExpression() is deprecated. Use SIN() in SQL instead.', - ); - - return 'SIN(' . $value . ')'; - } - - /** - * Returns the SQL to get the PI value. - * - * @deprecated Use PI() in SQL instead. - * - * @return string - */ - public function getPiExpression() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getPiExpression() is deprecated. Use PI() in SQL instead.', - ); - - return 'PI()'; - } - - /** - * Returns the SQL to get the cosine of a value. - * - * @deprecated Use COS() in SQL instead. - * - * @param string $value - * - * @return string - */ - public function getCosExpression($value) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getCosExpression() is deprecated. Use COS() in SQL instead.', - ); - - return 'COS(' . $value . ')'; - } - - /** - * Returns the SQL to calculate the difference in days between the two passed dates. - * - * Computes diff = date1 - date2. - * - * @param string $date1 - * @param string $date2 - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateDiffExpression($date1, $date2) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Returns the SQL to add the number of given seconds to a date. - * - * @param string $date - * @param int|string $seconds - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateAddSecondsExpression($date, $seconds) - { - if (is_int($seconds)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $seconds as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '+', $seconds, DateIntervalUnit::SECOND); - } - - /** - * Returns the SQL to subtract the number of given seconds from a date. - * - * @param string $date - * @param int|string $seconds - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateSubSecondsExpression($date, $seconds) - { - if (is_int($seconds)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $seconds as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '-', $seconds, DateIntervalUnit::SECOND); - } - - /** - * Returns the SQL to add the number of given minutes to a date. - * - * @param string $date - * @param int|string $minutes - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateAddMinutesExpression($date, $minutes) - { - if (is_int($minutes)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $minutes as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '+', $minutes, DateIntervalUnit::MINUTE); - } - - /** - * Returns the SQL to subtract the number of given minutes from a date. - * - * @param string $date - * @param int|string $minutes - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateSubMinutesExpression($date, $minutes) - { - if (is_int($minutes)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $minutes as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '-', $minutes, DateIntervalUnit::MINUTE); - } - - /** - * Returns the SQL to add the number of given hours to a date. - * - * @param string $date - * @param int|string $hours - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateAddHourExpression($date, $hours) - { - if (is_int($hours)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $hours as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '+', $hours, DateIntervalUnit::HOUR); - } - - /** - * Returns the SQL to subtract the number of given hours to a date. - * - * @param string $date - * @param int|string $hours - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateSubHourExpression($date, $hours) - { - if (is_int($hours)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $hours as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '-', $hours, DateIntervalUnit::HOUR); - } - - /** - * Returns the SQL to add the number of given days to a date. - * - * @param string $date - * @param int|string $days - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateAddDaysExpression($date, $days) - { - if (is_int($days)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $days as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '+', $days, DateIntervalUnit::DAY); - } - - /** - * Returns the SQL to subtract the number of given days to a date. - * - * @param string $date - * @param int|string $days - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateSubDaysExpression($date, $days) - { - if (is_int($days)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $days as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '-', $days, DateIntervalUnit::DAY); - } - - /** - * Returns the SQL to add the number of given weeks to a date. - * - * @param string $date - * @param int|string $weeks - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateAddWeeksExpression($date, $weeks) - { - if (is_int($weeks)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $weeks as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '+', $weeks, DateIntervalUnit::WEEK); - } - - /** - * Returns the SQL to subtract the number of given weeks from a date. - * - * @param string $date - * @param int|string $weeks - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateSubWeeksExpression($date, $weeks) - { - if (is_int($weeks)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $weeks as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '-', $weeks, DateIntervalUnit::WEEK); - } - - /** - * Returns the SQL to add the number of given months to a date. - * - * @param string $date - * @param int|string $months - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateAddMonthExpression($date, $months) - { - if (is_int($months)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $months as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '+', $months, DateIntervalUnit::MONTH); - } - - /** - * Returns the SQL to subtract the number of given months to a date. - * - * @param string $date - * @param int|string $months - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateSubMonthExpression($date, $months) - { - if (is_int($months)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $months as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '-', $months, DateIntervalUnit::MONTH); - } - - /** - * Returns the SQL to add the number of given quarters to a date. - * - * @param string $date - * @param int|string $quarters - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateAddQuartersExpression($date, $quarters) - { - if (is_int($quarters)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $quarters as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '+', $quarters, DateIntervalUnit::QUARTER); - } - - /** - * Returns the SQL to subtract the number of given quarters from a date. - * - * @param string $date - * @param int|string $quarters - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateSubQuartersExpression($date, $quarters) - { - if (is_int($quarters)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $quarters as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '-', $quarters, DateIntervalUnit::QUARTER); - } - - /** - * Returns the SQL to add the number of given years to a date. - * - * @param string $date - * @param int|string $years - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateAddYearsExpression($date, $years) - { - if (is_int($years)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $years as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '+', $years, DateIntervalUnit::YEAR); - } - - /** - * Returns the SQL to subtract the number of given years from a date. - * - * @param string $date - * @param int|string $years - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateSubYearsExpression($date, $years) - { - if (is_int($years)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3498', - 'Passing $years as an integer is deprecated. Pass it as a numeric string instead.', - ); - } - - return $this->getDateArithmeticIntervalExpression($date, '-', $years, DateIntervalUnit::YEAR); - } - - /** - * Returns the SQL for a date arithmetic expression. - * - * @param string $date The column or literal representing a date - * to perform the arithmetic operation on. - * @param string $operator The arithmetic operator (+ or -). - * @param int|string $interval The interval that shall be calculated into the date. - * @param string $unit The unit of the interval that shall be calculated into the date. - * One of the {@see DateIntervalUnit} constants. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Generates the SQL expression which represents the given date interval multiplied by a number - * - * @param string $interval SQL expression describing the interval value - * @param int $multiplier Interval multiplier - */ - protected function multiplyInterval(string $interval, int $multiplier): string - { - return sprintf('(%s * %d)', $interval, $multiplier); - } - - /** - * Returns the SQL bit AND comparison expression. - * - * @param string $value1 - * @param string $value2 - * - * @return string - */ - public function getBitAndComparisonExpression($value1, $value2) - { - return '(' . $value1 . ' & ' . $value2 . ')'; - } - - /** - * Returns the SQL bit OR comparison expression. - * - * @param string $value1 - * @param string $value2 - * - * @return string - */ - public function getBitOrComparisonExpression($value1, $value2) - { - return '(' . $value1 . ' | ' . $value2 . ')'; - } - - /** - * Returns the SQL expression which represents the currently selected database. - */ - abstract public function getCurrentDatabaseExpression(): string; - - /** - * Returns the FOR UPDATE expression. - * - * @deprecated This API is not portable. Use {@link QueryBuilder::forUpdate()}` instead. - * - * @return string - */ - public function getForUpdateSQL() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6191', - '%s is deprecated as non-portable.', - __METHOD__, - ); - - return 'FOR UPDATE'; - } - - /** - * Honors that some SQL vendors such as MsSql use table hints for locking instead of the - * ANSI SQL FOR UPDATE specification. - * - * @param string $fromClause The FROM clause to append the hint for the given lock mode to - * @param int $lockMode One of the Doctrine\DBAL\LockMode::* constants - * @psalm-param LockMode::* $lockMode - */ - public function appendLockHint(string $fromClause, int $lockMode): string - { - switch ($lockMode) { - case LockMode::NONE: - case LockMode::OPTIMISTIC: - case LockMode::PESSIMISTIC_READ: - case LockMode::PESSIMISTIC_WRITE: - return $fromClause; - - default: - throw InvalidLockMode::fromLockMode($lockMode); - } - } - - /** - * Returns the SQL snippet to append to any SELECT statement which locks rows in shared read lock. - * - * This defaults to the ANSI SQL "FOR UPDATE", which is an exclusive lock (Write). Some database - * vendors allow to lighten this constraint up to be a real read lock. - * - * @deprecated This API is not portable. - * - * @return string - */ - public function getReadLockSQL() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6191', - '%s is deprecated as non-portable.', - __METHOD__, - ); - - return $this->getForUpdateSQL(); - } - - /** - * Returns the SQL snippet to append to any SELECT statement which obtains an exclusive lock on the rows. - * - * The semantics of this lock mode should equal the SELECT .. FOR UPDATE of the ANSI SQL standard. - * - * @deprecated This API is not portable. - * - * @return string - */ - public function getWriteLockSQL() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6191', - '%s is deprecated as non-portable.', - __METHOD__, - ); - - return $this->getForUpdateSQL(); - } - - /** - * Returns the SQL snippet to drop an existing table. - * - * @param Table|string $table - * - * @return string - * - * @throws InvalidArgumentException - */ - public function getDropTableSQL($table) - { - $tableArg = $table; - - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } - - if (! is_string($table)) { - throw new InvalidArgumentException( - __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.', - ); - } - - if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaDropTable)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onSchemaDropTable, - ); - - $eventArgs = new SchemaDropTableEventArgs($tableArg, $this); - $this->_eventManager->dispatchEvent(Events::onSchemaDropTable, $eventArgs); - - if ($eventArgs->isDefaultPrevented()) { - $sql = $eventArgs->getSql(); - - if ($sql === null) { - throw new UnexpectedValueException('Default implementation of DROP TABLE was overridden with NULL'); - } - - return $sql; - } - } - - return 'DROP TABLE ' . $table; - } - - /** - * Returns the SQL to safely drop a temporary table WITHOUT implicitly committing an open transaction. - * - * @param Table|string $table - * - * @return string - */ - public function getDropTemporaryTableSQL($table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } - - return $this->getDropTableSQL($table); - } - - /** - * Returns the SQL to drop an index from a table. - * - * @param Index|string $index - * @param Table|string|null $table - * - * @return string - * - * @throws InvalidArgumentException - */ - public function getDropIndexSQL($index, $table = null) - { - if ($index instanceof Index) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $index as an Index object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $index = $index->getQuotedName($this); - } elseif (! is_string($index)) { - throw new InvalidArgumentException( - __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.', - ); - } - - return 'DROP INDEX ' . $index; - } - - /** - * Returns the SQL to drop a constraint. - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - * - * @param Constraint|string $constraint - * @param Table|string $table - * - * @return string - */ - public function getDropConstraintSQL($constraint, $table) - { - if ($constraint instanceof Constraint) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $constraint as a Constraint object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - } else { - $constraint = new Identifier($constraint); - } - - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - } else { - $table = new Identifier($table); - } - - $constraint = $constraint->getQuotedName($this); - $table = $table->getQuotedName($this); - - return 'ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $constraint; - } - - /** - * Returns the SQL to drop a foreign key. - * - * @param ForeignKeyConstraint|string $foreignKey - * @param Table|string $table - * - * @return string - */ - public function getDropForeignKeySQL($foreignKey, $table) - { - if ($foreignKey instanceof ForeignKeyConstraint) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $foreignKey as a ForeignKeyConstraint object to %s is deprecated.' - . ' Pass it as a quoted name instead.', - __METHOD__, - ); - } else { - $foreignKey = new Identifier($foreignKey); - } - - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - } else { - $table = new Identifier($table); - } - - $foreignKey = $foreignKey->getQuotedName($this); - $table = $table->getQuotedName($this); - - return 'ALTER TABLE ' . $table . ' DROP FOREIGN KEY ' . $foreignKey; - } - - /** - * Returns the SQL to drop a unique constraint. - */ - public function getDropUniqueConstraintSQL(string $name, string $tableName): string - { - return $this->getDropConstraintSQL($name, $tableName); - } - - /** - * Returns the SQL statement(s) to create a table with the specified name, columns and constraints - * on this platform. - * - * @param int $createFlags - * @psalm-param int-mask-of $createFlags - * - * @return list The list of SQL statements. - * - * @throws Exception - * @throws InvalidArgumentException - */ - public function getCreateTableSQL(Table $table, $createFlags = self::CREATE_INDEXES) - { - if (! is_int($createFlags)) { - throw new InvalidArgumentException( - 'Second argument of AbstractPlatform::getCreateTableSQL() has to be integer.', - ); - } - - if (($createFlags & self::CREATE_INDEXES) === 0) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5416', - 'Unsetting the CREATE_INDEXES flag in AbstractPlatform::getCreateTableSQL() is deprecated.', - ); - } - - if (($createFlags & self::CREATE_FOREIGNKEYS) === 0) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5416', - 'Not setting the CREATE_FOREIGNKEYS flag in AbstractPlatform::getCreateTableSQL()' - . ' is deprecated. In order to build the statements that create multiple tables' - . ' referencing each other via foreign keys, use AbstractPlatform::getCreateTablesSQL().', - ); - } - - return $this->buildCreateTableSQL( - $table, - ($createFlags & self::CREATE_INDEXES) > 0, - ($createFlags & self::CREATE_FOREIGNKEYS) > 0, - ); - } - - public function createSelectSQLBuilder(): SelectSQLBuilder - { - return new DefaultSelectSQLBuilder($this, 'FOR UPDATE', 'SKIP LOCKED'); - } - - /** - * @internal - * - * @return list - * - * @throws Exception - */ - final protected function getCreateTableWithoutForeignKeysSQL(Table $table): array - { - return $this->buildCreateTableSQL($table, true, false); - } - - /** - * @return list - * - * @throws Exception - */ - private function buildCreateTableSQL(Table $table, bool $createIndexes, bool $createForeignKeys): array - { - if (count($table->getColumns()) === 0) { - throw Exception::noColumnsSpecifiedForTable($table->getName()); - } - - $tableName = $table->getQuotedName($this); - $options = $table->getOptions(); - $options['uniqueConstraints'] = []; - $options['indexes'] = []; - $options['primary'] = []; - - if ($createIndexes) { - foreach ($table->getIndexes() as $index) { - if (! $index->isPrimary()) { - $options['indexes'][$index->getQuotedName($this)] = $index; - - continue; - } - - $options['primary'] = $index->getQuotedColumns($this); - $options['primary_index'] = $index; - } - - foreach ($table->getUniqueConstraints() as $uniqueConstraint) { - $options['uniqueConstraints'][$uniqueConstraint->getQuotedName($this)] = $uniqueConstraint; - } - } - - if ($createForeignKeys) { - $options['foreignKeys'] = []; - - foreach ($table->getForeignKeys() as $fkConstraint) { - $options['foreignKeys'][] = $fkConstraint; - } - } - - $columnSql = []; - $columns = []; - - foreach ($table->getColumns() as $column) { - if ( - $this->_eventManager !== null - && $this->_eventManager->hasListeners(Events::onSchemaCreateTableColumn) - ) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onSchemaCreateTableColumn, - ); - - $eventArgs = new SchemaCreateTableColumnEventArgs($column, $table, $this); - - $this->_eventManager->dispatchEvent(Events::onSchemaCreateTableColumn, $eventArgs); - - $columnSql = array_merge($columnSql, $eventArgs->getSql()); - - if ($eventArgs->isDefaultPrevented()) { - continue; - } - } - - $columnData = $this->columnToArray($column); - - if (in_array($column->getName(), $options['primary'], true)) { - $columnData['primary'] = true; - } - - $columns[$columnData['name']] = $columnData; - } - - if ($this->_eventManager !== null && $this->_eventManager->hasListeners(Events::onSchemaCreateTable)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onSchemaCreateTable, - ); - - $eventArgs = new SchemaCreateTableEventArgs($table, $columns, $options, $this); - - $this->_eventManager->dispatchEvent(Events::onSchemaCreateTable, $eventArgs); - - if ($eventArgs->isDefaultPrevented()) { - return array_merge($eventArgs->getSql(), $columnSql); - } - } - - $sql = $this->_getCreateTableSQL($tableName, $columns, $options); - - if ($this->supportsCommentOnStatement()) { - if ($table->hasOption('comment')) { - $sql[] = $this->getCommentOnTableSQL($tableName, $table->getOption('comment')); - } - - foreach ($table->getColumns() as $column) { - $comment = $this->getColumnComment($column); - - if ($comment === null || $comment === '') { - continue; - } - - $sql[] = $this->getCommentOnColumnSQL($tableName, $column->getQuotedName($this), $comment); - } - } - - return array_merge($sql, $columnSql); - } - - /** - * @param list $tables - * - * @return list - * - * @throws Exception - */ - public function getCreateTablesSQL(array $tables): array - { - $sql = []; - - foreach ($tables as $table) { - $sql = array_merge($sql, $this->getCreateTableWithoutForeignKeysSQL($table)); - } - - foreach ($tables as $table) { - foreach ($table->getForeignKeys() as $foreignKey) { - $sql[] = $this->getCreateForeignKeySQL( - $foreignKey, - $table->getQuotedName($this), - ); - } - } - - return $sql; - } - - /** - * @param list
$tables - * - * @return list - */ - public function getDropTablesSQL(array $tables): array - { - $sql = []; - - foreach ($tables as $table) { - foreach ($table->getForeignKeys() as $foreignKey) { - $sql[] = $this->getDropForeignKeySQL( - $foreignKey->getQuotedName($this), - $table->getQuotedName($this), - ); - } - } - - foreach ($tables as $table) { - $sql[] = $this->getDropTableSQL($table->getQuotedName($this)); - } - - return $sql; - } - - protected function getCommentOnTableSQL(string $tableName, ?string $comment): string - { - $tableName = new Identifier($tableName); - - return sprintf( - 'COMMENT ON TABLE %s IS %s', - $tableName->getQuotedName($this), - $this->quoteStringLiteral((string) $comment), - ); - } - - /** - * @param string $tableName - * @param string $columnName - * @param string|null $comment - * - * @return string - */ - public function getCommentOnColumnSQL($tableName, $columnName, $comment) - { - $tableName = new Identifier($tableName); - $columnName = new Identifier($columnName); - - return sprintf( - 'COMMENT ON COLUMN %s.%s IS %s', - $tableName->getQuotedName($this), - $columnName->getQuotedName($this), - $this->quoteStringLiteral((string) $comment), - ); - } - - /** - * Returns the SQL to create inline comment on a column. - * - * @param string $comment - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getInlineColumnCommentSQL($comment) - { - if (! $this->supportsInlineColumnComments()) { - throw Exception::notSupported(__METHOD__); - } - - return 'COMMENT ' . $this->quoteStringLiteral($comment); - } - - /** - * Returns the SQL used to create a table. - * - * @param string $name - * @param mixed[][] $columns - * @param mixed[] $options - * - * @return string[] - */ - protected function _getCreateTableSQL($name, array $columns, array $options = []) - { - $columnListSql = $this->getColumnDeclarationListSQL($columns); - - if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) { - foreach ($options['uniqueConstraints'] as $index => $definition) { - $columnListSql .= ', ' . $this->getUniqueConstraintDeclarationSQL($index, $definition); - } - } - - if (isset($options['primary']) && ! empty($options['primary'])) { - $columnListSql .= ', PRIMARY KEY(' . implode(', ', array_unique(array_values($options['primary']))) . ')'; - } - - if (isset($options['indexes']) && ! empty($options['indexes'])) { - foreach ($options['indexes'] as $index => $definition) { - $columnListSql .= ', ' . $this->getIndexDeclarationSQL($index, $definition); - } - } - - $query = 'CREATE TABLE ' . $name . ' (' . $columnListSql; - $check = $this->getCheckDeclarationSQL($columns); - - if (! empty($check)) { - $query .= ', ' . $check; - } - - $query .= ')'; - - $sql = [$query]; - - if (isset($options['foreignKeys'])) { - foreach ($options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $name); - } - } - - return $sql; - } - - /** @return string */ - public function getCreateTemporaryTableSnippetSQL() - { - return 'CREATE TEMPORARY TABLE'; - } - - /** - * Generates SQL statements that can be used to apply the diff. - * - * @return list - */ - public function getAlterSchemaSQL(SchemaDiff $diff): array - { - return $diff->toSql($this); - } - - /** - * Returns the SQL to create a sequence on this platform. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getCreateSequenceSQL(Sequence $sequence) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Returns the SQL to change a sequence on this platform. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getAlterSequenceSQL(Sequence $sequence) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Returns the SQL snippet to drop an existing sequence. - * - * @param Sequence|string $sequence - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDropSequenceSQL($sequence) - { - if (! $this->supportsSequences()) { - throw Exception::notSupported(__METHOD__); - } - - if ($sequence instanceof Sequence) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $sequence as a Sequence object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $sequence = $sequence->getQuotedName($this); - } - - return 'DROP SEQUENCE ' . $sequence; - } - - /** - * Returns the SQL to create a constraint on a table on this platform. - * - * @deprecated Use {@see getCreateIndexSQL()}, {@see getCreateForeignKeySQL()} - * or {@see getCreateUniqueConstraintSQL()} instead. - * - * @param Table|string $table - * - * @return string - * - * @throws InvalidArgumentException - */ - public function getCreateConstraintSQL(Constraint $constraint, $table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } - - $query = 'ALTER TABLE ' . $table . ' ADD CONSTRAINT ' . $constraint->getQuotedName($this); - - $columnList = '(' . implode(', ', $constraint->getQuotedColumns($this)) . ')'; - - $referencesClause = ''; - if ($constraint instanceof Index) { - if ($constraint->isPrimary()) { - $query .= ' PRIMARY KEY'; - } elseif ($constraint->isUnique()) { - $query .= ' UNIQUE'; - } else { - throw new InvalidArgumentException( - 'Can only create primary or unique constraints, no common indexes with getCreateConstraintSQL().', - ); - } - } elseif ($constraint instanceof UniqueConstraint) { - $query .= ' UNIQUE'; - } elseif ($constraint instanceof ForeignKeyConstraint) { - $query .= ' FOREIGN KEY'; - - $referencesClause = ' REFERENCES ' . $constraint->getQuotedForeignTableName($this) . - ' (' . implode(', ', $constraint->getQuotedForeignColumns($this)) . ')'; - } - - $query .= ' ' . $columnList . $referencesClause; - - return $query; - } - - /** - * Returns the SQL to create an index on a table on this platform. - * - * @param Table|string $table The name of the table on which the index is to be created. - * - * @return string - * - * @throws InvalidArgumentException - */ - public function getCreateIndexSQL(Index $index, $table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } - - $name = $index->getQuotedName($this); - $columns = $index->getColumns(); - - if (count($columns) === 0) { - throw new InvalidArgumentException(sprintf( - 'Incomplete or invalid index definition %s on table %s', - $name, - $table, - )); - } - - if ($index->isPrimary()) { - return $this->getCreatePrimaryKeySQL($index, $table); - } - - $query = 'CREATE ' . $this->getCreateIndexSQLFlags($index) . 'INDEX ' . $name . ' ON ' . $table; - $query .= ' (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); - - return $query; - } - - /** - * Adds condition for partial index. - * - * @return string - */ - protected function getPartialIndexSQL(Index $index) - { - if ($this->supportsPartialIndexes() && $index->hasOption('where')) { - return ' WHERE ' . $index->getOption('where'); - } - - return ''; - } - - /** - * Adds additional flags for index generation. - * - * @return string - */ - protected function getCreateIndexSQLFlags(Index $index) - { - return $index->isUnique() ? 'UNIQUE ' : ''; - } - - /** - * Returns the SQL to create an unnamed primary key constraint. - * - * @param Table|string $table - * - * @return string - */ - public function getCreatePrimaryKeySQL(Index $index, $table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } - - return 'ALTER TABLE ' . $table . ' ADD PRIMARY KEY (' . $this->getIndexFieldDeclarationListSQL($index) . ')'; - } - - /** - * Returns the SQL to create a named schema. - * - * @param string $schemaName - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getCreateSchemaSQL($schemaName) - { - if (! $this->supportsSchemas()) { - throw Exception::notSupported(__METHOD__); - } - - return 'CREATE SCHEMA ' . $schemaName; - } - - /** - * Returns the SQL to create a unique constraint on a table on this platform. - */ - public function getCreateUniqueConstraintSQL(UniqueConstraint $constraint, string $tableName): string - { - return $this->getCreateConstraintSQL($constraint, $tableName); - } - - /** - * Returns the SQL snippet to drop a schema. - * - * @throws Exception If not supported on this platform. - */ - public function getDropSchemaSQL(string $schemaName): string - { - if (! $this->supportsSchemas()) { - throw Exception::notSupported(__METHOD__); - } - - return 'DROP SCHEMA ' . $schemaName; - } - - /** - * Quotes a string so that it can be safely used as a table or column name, - * even if it is a reserved word of the platform. This also detects identifier - * chains separated by dot and quotes them independently. - * - * NOTE: Just because you CAN use quoted identifiers doesn't mean - * you SHOULD use them. In general, they end up causing way more - * problems than they solve. - * - * @param string $str The identifier name to be quoted. - * - * @return string The quoted identifier string. - */ - public function quoteIdentifier($str) - { - if (strpos($str, '.') !== false) { - $parts = array_map([$this, 'quoteSingleIdentifier'], explode('.', $str)); - - return implode('.', $parts); - } - - return $this->quoteSingleIdentifier($str); - } - - /** - * Quotes a single identifier (no dot chain separation). - * - * @param string $str The identifier name to be quoted. - * - * @return string The quoted identifier string. - */ - public function quoteSingleIdentifier($str) - { - $c = $this->getIdentifierQuoteCharacter(); - - return $c . str_replace($c, $c . $c, $str) . $c; - } - - /** - * Returns the SQL to create a new foreign key. - * - * @param ForeignKeyConstraint $foreignKey The foreign key constraint. - * @param Table|string $table The name of the table on which the foreign key is to be created. - * - * @return string - */ - public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } - - return 'ALTER TABLE ' . $table . ' ADD ' . $this->getForeignKeyDeclarationSQL($foreignKey); - } - - /** - * Gets the SQL statements for altering an existing table. - * - * This method returns an array of SQL statements, since some platforms need several statements. - * - * @return list - * - * @throws Exception If not supported on this platform. - */ - public function getAlterTableSQL(TableDiff $diff) - { - throw Exception::notSupported(__METHOD__); - } - - /** @return list */ - public function getRenameTableSQL(string $oldName, string $newName): array - { - return [ - sprintf('ALTER TABLE %s RENAME TO %s', $oldName, $newName), - ]; - } - - /** - * @param mixed[] $columnSql - * - * @return bool - */ - protected function onSchemaAlterTableAddColumn(Column $column, TableDiff $diff, &$columnSql) - { - if ($this->_eventManager === null) { - return false; - } - - if (! $this->_eventManager->hasListeners(Events::onSchemaAlterTableAddColumn)) { - return false; - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onSchemaAlterTableAddColumn, - ); - - $eventArgs = new SchemaAlterTableAddColumnEventArgs($column, $diff, $this); - $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableAddColumn, $eventArgs); - - $columnSql = array_merge($columnSql, $eventArgs->getSql()); - - return $eventArgs->isDefaultPrevented(); - } - - /** - * @param string[] $columnSql - * - * @return bool - */ - protected function onSchemaAlterTableRemoveColumn(Column $column, TableDiff $diff, &$columnSql) - { - if ($this->_eventManager === null) { - return false; - } - - if (! $this->_eventManager->hasListeners(Events::onSchemaAlterTableRemoveColumn)) { - return false; - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onSchemaAlterTableRemoveColumn, - ); - - $eventArgs = new SchemaAlterTableRemoveColumnEventArgs($column, $diff, $this); - $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableRemoveColumn, $eventArgs); - - $columnSql = array_merge($columnSql, $eventArgs->getSql()); - - return $eventArgs->isDefaultPrevented(); - } - - /** - * @param string[] $columnSql - * - * @return bool - */ - protected function onSchemaAlterTableChangeColumn(ColumnDiff $columnDiff, TableDiff $diff, &$columnSql) - { - if ($this->_eventManager === null) { - return false; - } - - if (! $this->_eventManager->hasListeners(Events::onSchemaAlterTableChangeColumn)) { - return false; - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onSchemaAlterTableChangeColumn, - ); - - $eventArgs = new SchemaAlterTableChangeColumnEventArgs($columnDiff, $diff, $this); - $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableChangeColumn, $eventArgs); - - $columnSql = array_merge($columnSql, $eventArgs->getSql()); - - return $eventArgs->isDefaultPrevented(); - } - - /** - * @param string $oldColumnName - * @param string[] $columnSql - * - * @return bool - */ - protected function onSchemaAlterTableRenameColumn($oldColumnName, Column $column, TableDiff $diff, &$columnSql) - { - if ($this->_eventManager === null) { - return false; - } - - if (! $this->_eventManager->hasListeners(Events::onSchemaAlterTableRenameColumn)) { - return false; - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onSchemaAlterTableRenameColumn, - ); - - $eventArgs = new SchemaAlterTableRenameColumnEventArgs($oldColumnName, $column, $diff, $this); - $this->_eventManager->dispatchEvent(Events::onSchemaAlterTableRenameColumn, $eventArgs); - - $columnSql = array_merge($columnSql, $eventArgs->getSql()); - - return $eventArgs->isDefaultPrevented(); - } - - /** - * @param string[] $sql - * - * @return bool - */ - protected function onSchemaAlterTable(TableDiff $diff, &$sql) - { - if ($this->_eventManager === null) { - return false; - } - - if (! $this->_eventManager->hasListeners(Events::onSchemaAlterTable)) { - return false; - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated.', - Events::onSchemaAlterTable, - ); - - $eventArgs = new SchemaAlterTableEventArgs($diff, $this); - $this->_eventManager->dispatchEvent(Events::onSchemaAlterTable, $eventArgs); - - $sql = array_merge($sql, $eventArgs->getSql()); - - return $eventArgs->isDefaultPrevented(); - } - - /** @return string[] */ - protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff) - { - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - - $sql = []; - if ($this->supportsForeignKeyConstraints()) { - foreach ($diff->getDroppedForeignKeys() as $foreignKey) { - if ($foreignKey instanceof ForeignKeyConstraint) { - $foreignKey = $foreignKey->getQuotedName($this); - } - - $sql[] = $this->getDropForeignKeySQL($foreignKey, $tableNameSQL); - } - - foreach ($diff->getModifiedForeignKeys() as $foreignKey) { - $sql[] = $this->getDropForeignKeySQL($foreignKey->getQuotedName($this), $tableNameSQL); - } - } - - foreach ($diff->getDroppedIndexes() as $index) { - $sql[] = $this->getDropIndexSQL($index->getQuotedName($this), $tableNameSQL); - } - - foreach ($diff->getModifiedIndexes() as $index) { - $sql[] = $this->getDropIndexSQL($index->getQuotedName($this), $tableNameSQL); - } - - return $sql; - } - - /** @return string[] */ - protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff) - { - $sql = []; - $newName = $diff->getNewName(); - - if ($newName !== false) { - $tableNameSQL = $newName->getQuotedName($this); - } else { - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - } - - if ($this->supportsForeignKeyConstraints()) { - foreach ($diff->getAddedForeignKeys() as $foreignKey) { - $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableNameSQL); - } - - foreach ($diff->getModifiedForeignKeys() as $foreignKey) { - $sql[] = $this->getCreateForeignKeySQL($foreignKey, $tableNameSQL); - } - } - - foreach ($diff->getAddedIndexes() as $index) { - $sql[] = $this->getCreateIndexSQL($index, $tableNameSQL); - } - - foreach ($diff->getModifiedIndexes() as $index) { - $sql[] = $this->getCreateIndexSQL($index, $tableNameSQL); - } - - foreach ($diff->getRenamedIndexes() as $oldIndexName => $index) { - $oldIndexName = new Identifier($oldIndexName); - $sql = array_merge( - $sql, - $this->getRenameIndexSQL($oldIndexName->getQuotedName($this), $index, $tableNameSQL), - ); - } - - return $sql; - } - - /** - * Returns the SQL for renaming an index on a table. - * - * @param string $oldIndexName The name of the index to rename from. - * @param Index $index The definition of the index to rename to. - * @param string $tableName The table to rename the given index on. - * - * @return string[] The sequence of SQL statements for renaming the given index. - */ - protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) - { - return [ - $this->getDropIndexSQL($oldIndexName, $tableName), - $this->getCreateIndexSQL($index, $tableName), - ]; - } - - /** - * Gets declaration of a number of columns in bulk. - * - * @param mixed[][] $columns A multidimensional associative array. - * The first dimension determines the column name, while the second - * dimension is keyed with the name of the properties - * of the column being declared as array indexes. Currently, the types - * of supported column properties are as follows: - * - * length - * Integer value that determines the maximum length of the text - * column. If this argument is missing the column should be - * declared to have the longest length allowed by the DBMS. - * - * default - * Text value to be used as default for this column. - * - * notnull - * Boolean flag that indicates whether this column is constrained - * to not be set to null. - * charset - * Text value with the default CHARACTER SET for this column. - * collation - * Text value with the default COLLATION for this column. - * unique - * unique constraint - * - * @return string - */ - public function getColumnDeclarationListSQL(array $columns) - { - $declarations = []; - - foreach ($columns as $name => $column) { - $declarations[] = $this->getColumnDeclarationSQL($name, $column); - } - - return implode(', ', $declarations); - } - - /** - * Obtains DBMS specific SQL code portion needed to declare a generic type - * column to be used in statements like CREATE TABLE. - * - * @param string $name The name the column to be declared. - * @param mixed[] $column An associative array with the name of the properties - * of the column being declared as array indexes. Currently, the types - * of supported column properties are as follows: - * - * length - * Integer value that determines the maximum length of the text - * column. If this argument is missing the column should be - * declared to have the longest length allowed by the DBMS. - * - * default - * Text value to be used as default for this column. - * - * notnull - * Boolean flag that indicates whether this column is constrained - * to not be set to null. - * charset - * Text value with the default CHARACTER SET for this column. - * collation - * Text value with the default COLLATION for this column. - * unique - * unique constraint - * check - * column check constraint - * columnDefinition - * a string that defines the complete column - * - * @return string DBMS specific SQL code portion that should be used to declare the column. - * - * @throws Exception - */ - public function getColumnDeclarationSQL($name, array $column) - { - if (isset($column['columnDefinition'])) { - $declaration = $this->getCustomTypeDeclarationSQL($column); - } else { - $default = $this->getDefaultValueDeclarationSQL($column); - - $charset = ! empty($column['charset']) ? - ' ' . $this->getColumnCharsetDeclarationSQL($column['charset']) : ''; - - $collation = ! empty($column['collation']) ? - ' ' . $this->getColumnCollationDeclarationSQL($column['collation']) : ''; - - $notnull = ! empty($column['notnull']) ? ' NOT NULL' : ''; - - if (! empty($column['unique'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5656', - 'The usage of the "unique" column property is deprecated. Use unique constraints instead.', - ); - - $unique = ' ' . $this->getUniqueFieldDeclarationSQL(); - } else { - $unique = ''; - } - - if (! empty($column['check'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5656', - 'The usage of the "check" column property is deprecated.', - ); - - $check = ' ' . $column['check']; - } else { - $check = ''; - } - - $typeDecl = $column['type']->getSQLDeclaration($column, $this); - $declaration = $typeDecl . $charset . $default . $notnull . $unique . $check . $collation; - - if ($this->supportsInlineColumnComments() && isset($column['comment']) && $column['comment'] !== '') { - $declaration .= ' ' . $this->getInlineColumnCommentSQL($column['comment']); - } - } - - return $name . ' ' . $declaration; - } - - /** - * Returns the SQL snippet that declares a floating point column of arbitrary precision. - * - * @param mixed[] $column - * - * @return string - */ - public function getDecimalTypeDeclarationSQL(array $column) - { - if (empty($column['precision'])) { - if (! isset($column['precision'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5637', - 'Relying on the default decimal column precision is deprecated' - . ', specify the precision explicitly.', - ); - } - - $precision = 10; - } else { - $precision = $column['precision']; - } - - if (empty($column['scale'])) { - if (! isset($column['scale'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5637', - 'Relying on the default decimal column scale is deprecated' - . ', specify the scale explicitly.', - ); - } - - $scale = 0; - } else { - $scale = $column['scale']; - } - - return 'NUMERIC(' . $precision . ', ' . $scale . ')'; - } - - /** - * Obtains DBMS specific SQL code portion needed to set a default value - * declaration to be used in statements like CREATE TABLE. - * - * @param mixed[] $column The column definition array. - * - * @return string DBMS specific SQL code portion needed to set a default value. - */ - public function getDefaultValueDeclarationSQL($column) - { - if (! isset($column['default'])) { - return empty($column['notnull']) ? ' DEFAULT NULL' : ''; - } - - $default = $column['default']; - - if (! isset($column['type'])) { - return " DEFAULT '" . $default . "'"; - } - - $type = $column['type']; - - if ($type instanceof Types\PhpIntegerMappingType) { - return ' DEFAULT ' . $default; - } - - if ($type instanceof Types\PhpDateTimeMappingType && $default === $this->getCurrentTimestampSQL()) { - return ' DEFAULT ' . $this->getCurrentTimestampSQL(); - } - - if ($type instanceof Types\TimeType && $default === $this->getCurrentTimeSQL()) { - return ' DEFAULT ' . $this->getCurrentTimeSQL(); - } - - if ($type instanceof Types\DateType && $default === $this->getCurrentDateSQL()) { - return ' DEFAULT ' . $this->getCurrentDateSQL(); - } - - if ($type instanceof Types\BooleanType) { - return ' DEFAULT ' . $this->convertBooleans($default); - } - - return ' DEFAULT ' . $this->quoteStringLiteral($default); - } - - /** - * Obtains DBMS specific SQL code portion needed to set a CHECK constraint - * declaration to be used in statements like CREATE TABLE. - * - * @param string[]|mixed[][] $definition The check definition. - * - * @return string DBMS specific SQL code portion needed to set a CHECK constraint. - */ - public function getCheckDeclarationSQL(array $definition) - { - $constraints = []; - foreach ($definition as $column => $def) { - if (is_string($def)) { - $constraints[] = 'CHECK (' . $def . ')'; - } else { - if (isset($def['min'])) { - $constraints[] = 'CHECK (' . $column . ' >= ' . $def['min'] . ')'; - } - - if (isset($def['max'])) { - $constraints[] = 'CHECK (' . $column . ' <= ' . $def['max'] . ')'; - } - } - } - - return implode(', ', $constraints); - } - - /** - * Obtains DBMS specific SQL code portion needed to set a unique - * constraint declaration to be used in statements like CREATE TABLE. - * - * @param string $name The name of the unique constraint. - * @param UniqueConstraint $constraint The unique constraint definition. - * - * @return string DBMS specific SQL code portion needed to set a constraint. - * - * @throws InvalidArgumentException - */ - public function getUniqueConstraintDeclarationSQL($name, UniqueConstraint $constraint) - { - $columns = $constraint->getQuotedColumns($this); - $name = new Identifier($name); - - if (count($columns) === 0) { - throw new InvalidArgumentException("Incomplete definition. 'columns' required."); - } - - $constraintFlags = array_merge(['UNIQUE'], array_map('strtoupper', $constraint->getFlags())); - $constraintName = $name->getQuotedName($this); - $columnListNames = $this->getColumnsFieldDeclarationListSQL($columns); - - return sprintf('CONSTRAINT %s %s (%s)', $constraintName, implode(' ', $constraintFlags), $columnListNames); - } - - /** - * Obtains DBMS specific SQL code portion needed to set an index - * declaration to be used in statements like CREATE TABLE. - * - * @param string $name The name of the index. - * @param Index $index The index definition. - * - * @return string DBMS specific SQL code portion needed to set an index. - * - * @throws InvalidArgumentException - */ - public function getIndexDeclarationSQL($name, Index $index) - { - $columns = $index->getColumns(); - $name = new Identifier($name); - - if (count($columns) === 0) { - throw new InvalidArgumentException("Incomplete definition. 'columns' required."); - } - - return $this->getCreateIndexSQLFlags($index) . 'INDEX ' . $name->getQuotedName($this) - . ' (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); - } - - /** - * Obtains SQL code portion needed to create a custom column, - * e.g. when a column has the "columnDefinition" keyword. - * Only "AUTOINCREMENT" and "PRIMARY KEY" are added if appropriate. - * - * @deprecated - * - * @param mixed[] $column - * - * @return string - */ - public function getCustomTypeDeclarationSQL(array $column) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5527', - '%s is deprecated.', - __METHOD__, - ); - - return $column['columnDefinition']; - } - - /** - * Obtains DBMS specific SQL code portion needed to set an index - * declaration to be used in statements like CREATE TABLE. - * - * @deprecated - */ - public function getIndexFieldDeclarationListSQL(Index $index): string - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5527', - '%s is deprecated.', - __METHOD__, - ); - - return implode(', ', $index->getQuotedColumns($this)); - } - - /** - * Obtains DBMS specific SQL code portion needed to set an index - * declaration to be used in statements like CREATE TABLE. - * - * @deprecated - * - * @param mixed[] $columns - */ - public function getColumnsFieldDeclarationListSQL(array $columns): string - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5527', - '%s is deprecated.', - __METHOD__, - ); - - $ret = []; - - foreach ($columns as $column => $definition) { - if (is_array($definition)) { - $ret[] = $column; - } else { - $ret[] = $definition; - } - } - - return implode(', ', $ret); - } - - /** - * Returns the required SQL string that fits between CREATE ... TABLE - * to create the table as a temporary table. - * - * Should be overridden in driver classes to return the correct string for the - * specific database type. - * - * The default is to return the string "TEMPORARY" - this will result in a - * SQL error for any database that does not support temporary tables, or that - * requires a different SQL command from "CREATE TEMPORARY TABLE". - * - * @deprecated - * - * @return string The string required to be placed between "CREATE" and "TABLE" - * to generate a temporary table, if possible. - */ - public function getTemporaryTableSQL() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getTemporaryTableSQL() is deprecated.', - ); - - return 'TEMPORARY'; - } - - /** - * Some vendors require temporary table names to be qualified specially. - * - * @param string $tableName - * - * @return string - */ - public function getTemporaryTableName($tableName) - { - return $tableName; - } - - /** - * Obtain DBMS specific SQL code portion needed to set the FOREIGN KEY constraint - * of a column declaration to be used in statements like CREATE TABLE. - * - * @return string DBMS specific SQL code portion needed to set the FOREIGN KEY constraint - * of a column declaration. - */ - public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey) - { - $sql = $this->getForeignKeyBaseDeclarationSQL($foreignKey); - $sql .= $this->getAdvancedForeignKeyOptionsSQL($foreignKey); - - return $sql; - } - - /** - * Returns the FOREIGN KEY query section dealing with non-standard options - * as MATCH, INITIALLY DEFERRED, ON UPDATE, ... - * - * @param ForeignKeyConstraint $foreignKey The foreign key definition. - * - * @return string - */ - public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey) - { - $query = ''; - if ($foreignKey->hasOption('onUpdate')) { - $query .= ' ON UPDATE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onUpdate')); - } - - if ($foreignKey->hasOption('onDelete')) { - $query .= ' ON DELETE ' . $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onDelete')); - } - - return $query; - } - - /** - * Returns the given referential action in uppercase if valid, otherwise throws an exception. - * - * @param string $action The foreign key referential action. - * - * @return string - * - * @throws InvalidArgumentException If unknown referential action given. - */ - public function getForeignKeyReferentialActionSQL($action) - { - $upper = strtoupper($action); - switch ($upper) { - case 'CASCADE': - case 'SET NULL': - case 'NO ACTION': - case 'RESTRICT': - case 'SET DEFAULT': - return $upper; - - default: - throw new InvalidArgumentException('Invalid foreign key action: ' . $upper); - } - } - - /** - * Obtains DBMS specific SQL code portion needed to set the FOREIGN KEY constraint - * of a column declaration to be used in statements like CREATE TABLE. - * - * @return string - * - * @throws InvalidArgumentException - */ - public function getForeignKeyBaseDeclarationSQL(ForeignKeyConstraint $foreignKey) - { - $sql = ''; - if (strlen($foreignKey->getName()) > 0) { - $sql .= 'CONSTRAINT ' . $foreignKey->getQuotedName($this) . ' '; - } - - $sql .= 'FOREIGN KEY ('; - - if (count($foreignKey->getLocalColumns()) === 0) { - throw new InvalidArgumentException("Incomplete definition. 'local' required."); - } - - if (count($foreignKey->getForeignColumns()) === 0) { - throw new InvalidArgumentException("Incomplete definition. 'foreign' required."); - } - - if (strlen($foreignKey->getForeignTableName()) === 0) { - throw new InvalidArgumentException("Incomplete definition. 'foreignTable' required."); - } - - return $sql . implode(', ', $foreignKey->getQuotedLocalColumns($this)) - . ') REFERENCES ' - . $foreignKey->getQuotedForeignTableName($this) . ' (' - . implode(', ', $foreignKey->getQuotedForeignColumns($this)) . ')'; - } - - /** - * Obtains DBMS specific SQL code portion needed to set the UNIQUE constraint - * of a column declaration to be used in statements like CREATE TABLE. - * - * @deprecated Use UNIQUE in SQL instead. - * - * @return string DBMS specific SQL code portion needed to set the UNIQUE constraint - * of a column declaration. - */ - public function getUniqueFieldDeclarationSQL() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getUniqueFieldDeclarationSQL() is deprecated. Use UNIQUE in SQL instead.', - ); - - return 'UNIQUE'; - } - - /** - * Obtains DBMS specific SQL code portion needed to set the CHARACTER SET - * of a column declaration to be used in statements like CREATE TABLE. - * - * @param string $charset The name of the charset. - * - * @return string DBMS specific SQL code portion needed to set the CHARACTER SET - * of a column declaration. - */ - public function getColumnCharsetDeclarationSQL($charset) - { - return ''; - } - - /** - * Obtains DBMS specific SQL code portion needed to set the COLLATION - * of a column declaration to be used in statements like CREATE TABLE. - * - * @param string $collation The name of the collation. - * - * @return string DBMS specific SQL code portion needed to set the COLLATION - * of a column declaration. - */ - public function getColumnCollationDeclarationSQL($collation) - { - return $this->supportsColumnCollation() ? 'COLLATE ' . $this->quoteSingleIdentifier($collation) : ''; - } - - /** - * Whether the platform prefers identity columns (eg. autoincrement) for ID generation. - * Subclasses should override this method to return TRUE if they prefer identity columns. - * - * @deprecated - * - * @return bool - */ - public function prefersIdentityColumns() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/1519', - 'AbstractPlatform::prefersIdentityColumns() is deprecated.', - ); - - return false; - } - - /** - * Some platforms need the boolean values to be converted. - * - * The default conversion in this implementation converts to integers (false => 0, true => 1). - * - * Note: if the input is not a boolean the original input might be returned. - * - * There are two contexts when converting booleans: Literals and Prepared Statements. - * This method should handle the literal case - * - * @param mixed $item A boolean or an array of them. - * - * @return mixed A boolean database value or an array of them. - */ - public function convertBooleans($item) - { - if (is_array($item)) { - foreach ($item as $k => $value) { - if (! is_bool($value)) { - continue; - } - - $item[$k] = (int) $value; - } - } elseif (is_bool($item)) { - $item = (int) $item; - } - - return $item; - } - - /** - * Some platforms have boolean literals that needs to be correctly converted - * - * The default conversion tries to convert value into bool "(bool)$item" - * - * @param T $item - * - * @return (T is null ? null : bool) - * - * @template T - */ - public function convertFromBoolean($item) - { - return $item === null ? null : (bool) $item; - } - - /** - * This method should handle the prepared statements case. When there is no - * distinction, it's OK to use the same method. - * - * Note: if the input is not a boolean the original input might be returned. - * - * @param mixed $item A boolean or an array of them. - * - * @return mixed A boolean database value or an array of them. - */ - public function convertBooleansToDatabaseValue($item) - { - return $this->convertBooleans($item); - } - - /** - * Returns the SQL specific for the platform to get the current date. - * - * @return string - */ - public function getCurrentDateSQL() - { - return 'CURRENT_DATE'; - } - - /** - * Returns the SQL specific for the platform to get the current time. - * - * @return string - */ - public function getCurrentTimeSQL() - { - return 'CURRENT_TIME'; - } - - /** - * Returns the SQL specific for the platform to get the current timestamp - * - * @return string - */ - public function getCurrentTimestampSQL() - { - return 'CURRENT_TIMESTAMP'; - } - - /** - * Returns the SQL for a given transaction isolation level Connection constant. - * - * @param int $level - * - * @return string - * - * @throws InvalidArgumentException - */ - protected function _getTransactionIsolationLevelSQL($level) - { - switch ($level) { - case TransactionIsolationLevel::READ_UNCOMMITTED: - return 'READ UNCOMMITTED'; - - case TransactionIsolationLevel::READ_COMMITTED: - return 'READ COMMITTED'; - - case TransactionIsolationLevel::REPEATABLE_READ: - return 'REPEATABLE READ'; - - case TransactionIsolationLevel::SERIALIZABLE: - return 'SERIALIZABLE'; - - default: - throw new InvalidArgumentException('Invalid isolation level:' . $level); - } - } - - /** - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListDatabasesSQL() - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Returns the SQL statement for retrieving the namespaces defined in the database. - * - * @deprecated Use {@see AbstractSchemaManager::listSchemaNames()} instead. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListNamespacesSQL() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'AbstractPlatform::getListNamespacesSQL() is deprecated,' - . ' use AbstractSchemaManager::listSchemaNames() instead.', - ); - - throw Exception::notSupported(__METHOD__); - } - - /** - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - * - * @param string $database - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListSequencesSQL($database) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * @deprecated - * - * @param string $table - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListTableConstraintsSQL($table) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * @param string $table - * @param string $database - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListTableColumnsSQL($table, $database = null) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListTablesSQL() - { - throw Exception::notSupported(__METHOD__); - } - - /** - * @deprecated - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListUsersSQL() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::getListUsersSQL() is deprecated.', - ); - - throw Exception::notSupported(__METHOD__); - } - - /** - * Returns the SQL to list all views of a database or user. - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - * - * @param string $database - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListViewsSQL($database) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * Returns the list of indexes for the current database. - * - * The current database parameter is optional but will always be passed - * when using the SchemaManager API and is the database the given table is in. - * - * Attention: Some platforms only support currentDatabase when they - * are connected with that database. Cross-database information schema - * requests may be impossible. - * - * @param string $table - * @param string $database - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListTableIndexesSQL($table, $database = null) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * @param string $table - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getListTableForeignKeysSQL($table) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * @param string $name - * @param string $sql - * - * @return string - */ - public function getCreateViewSQL($name, $sql) - { - return 'CREATE VIEW ' . $name . ' AS ' . $sql; - } - - /** - * @param string $name - * - * @return string - */ - public function getDropViewSQL($name) - { - return 'DROP VIEW ' . $name; - } - - /** - * @param string $sequence - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getSequenceNextValSQL($sequence) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Returns the SQL to create a new database. - * - * @param string $name The name of the database that should be created. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getCreateDatabaseSQL($name) - { - if (! $this->supportsCreateDropDatabase()) { - throw Exception::notSupported(__METHOD__); - } - - return 'CREATE DATABASE ' . $name; - } - - /** - * Returns the SQL snippet to drop an existing database. - * - * @param string $name The name of the database that should be dropped. - * - * @return string - */ - public function getDropDatabaseSQL($name) - { - if (! $this->supportsCreateDropDatabase()) { - throw Exception::notSupported(__METHOD__); - } - - return 'DROP DATABASE ' . $name; - } - - /** - * Returns the SQL to set the transaction isolation level. - * - * @param int $level - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getSetTransactionIsolationSQL($level) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Obtains DBMS specific SQL to be used to create datetime columns in - * statements like CREATE TABLE. - * - * @param mixed[] $column - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateTimeTypeDeclarationSQL(array $column) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Obtains DBMS specific SQL to be used to create datetime with timezone offset columns. - * - * @param mixed[] $column - * - * @return string - */ - public function getDateTimeTzTypeDeclarationSQL(array $column) - { - return $this->getDateTimeTypeDeclarationSQL($column); - } - - /** - * Obtains DBMS specific SQL to be used to create date columns in statements - * like CREATE TABLE. - * - * @param mixed[] $column - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDateTypeDeclarationSQL(array $column) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Obtains DBMS specific SQL to be used to create time columns in statements - * like CREATE TABLE. - * - * @param mixed[] $column - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getTimeTypeDeclarationSQL(array $column) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * @param mixed[] $column - * - * @return string - */ - public function getFloatDeclarationSQL(array $column) - { - return 'DOUBLE PRECISION'; - } - - /** - * Gets the default transaction isolation level of the platform. - * - * @see TransactionIsolationLevel - * - * @return TransactionIsolationLevel::* The default isolation level. - */ - public function getDefaultTransactionIsolationLevel() - { - return TransactionIsolationLevel::READ_COMMITTED; - } - - /* supports*() methods */ - - /** - * Whether the platform supports sequences. - * - * @return bool - */ - public function supportsSequences() - { - return false; - } - - /** - * Whether the platform supports identity columns. - * - * Identity columns are columns that receive an auto-generated value from the - * database on insert of a row. - * - * @return bool - */ - public function supportsIdentityColumns() - { - return false; - } - - /** - * Whether the platform emulates identity columns through sequences. - * - * Some platforms that do not support identity columns natively - * but support sequences can emulate identity columns by using - * sequences. - * - * @deprecated - * - * @return bool - */ - public function usesSequenceEmulatedIdentityColumns() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s is deprecated.', - __METHOD__, - ); - - return false; - } - - /** - * Returns the name of the sequence for a particular identity column in a particular table. - * - * @deprecated - * - * @see usesSequenceEmulatedIdentityColumns - * - * @param string $tableName The name of the table to return the sequence name for. - * @param string $columnName The name of the identity column in the table to return the sequence name for. - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getIdentitySequenceName($tableName, $columnName) - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Whether the platform supports indexes. - * - * @deprecated - * - * @return bool - */ - public function supportsIndexes() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::supportsIndexes() is deprecated.', - ); - - return true; - } - - /** - * Whether the platform supports partial indexes. - * - * @return bool - */ - public function supportsPartialIndexes() - { - return false; - } - - /** - * Whether the platform supports indexes with column length definitions. - */ - public function supportsColumnLengthIndexes(): bool - { - return false; - } - - /** - * Whether the platform supports altering tables. - * - * @deprecated All platforms must implement altering tables. - * - * @return bool - */ - public function supportsAlterTable() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::supportsAlterTable() is deprecated. All platforms must implement altering tables.', - ); - - return true; - } - - /** - * Whether the platform supports transactions. - * - * @deprecated - * - * @return bool - */ - public function supportsTransactions() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::supportsTransactions() is deprecated.', - ); - - return true; - } - - /** - * Whether the platform supports savepoints. - * - * @return bool - */ - public function supportsSavepoints() - { - return true; - } - - /** - * Whether the platform supports releasing savepoints. - * - * @return bool - */ - public function supportsReleaseSavepoints() - { - return $this->supportsSavepoints(); - } - - /** - * Whether the platform supports primary key constraints. - * - * @deprecated - * - * @return bool - */ - public function supportsPrimaryConstraints() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::supportsPrimaryConstraints() is deprecated.', - ); - - return true; - } - - /** - * Whether the platform supports foreign key constraints. - * - * @deprecated All platforms should support foreign key constraints. - * - * @return bool - */ - public function supportsForeignKeyConstraints() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5409', - 'AbstractPlatform::supportsForeignKeyConstraints() is deprecated.', - ); - - return true; - } - - /** - * Whether the platform supports database schemas. - * - * @return bool - */ - public function supportsSchemas() - { - return false; - } - - /** - * Whether this platform can emulate schemas. - * - * @deprecated - * - * Platforms that either support or emulate schemas don't automatically - * filter a schema for the namespaced elements in {@see AbstractManager::introspectSchema()}. - * - * @return bool - */ - public function canEmulateSchemas() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4805', - 'AbstractPlatform::canEmulateSchemas() is deprecated.', - ); - - return false; - } - - /** - * Returns the default schema name. - * - * @deprecated - * - * @return string - * - * @throws Exception If not supported on this platform. - */ - public function getDefaultSchemaName() - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Whether this platform supports create database. - * - * Some databases don't allow to create and drop databases at all or only with certain tools. - * - * @deprecated - * - * @return bool - */ - public function supportsCreateDropDatabase() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } - - /** - * Whether the platform supports getting the affected rows of a recent update/delete type query. - * - * @deprecated - * - * @return bool - */ - public function supportsGettingAffectedRows() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::supportsGettingAffectedRows() is deprecated.', - ); - - return true; - } - - /** - * Whether this platform support to add inline column comments as postfix. - * - * @return bool - */ - public function supportsInlineColumnComments() - { - return false; - } - - /** - * Whether this platform support the proprietary syntax "COMMENT ON asset". - * - * @return bool - */ - public function supportsCommentOnStatement() - { - return false; - } - - /** - * Does this platform have native guid type. - * - * @deprecated - * - * @return bool - */ - public function hasNativeGuidType() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return false; - } - - /** - * Does this platform have native JSON type. - * - * @deprecated - * - * @return bool - */ - public function hasNativeJsonType() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return false; - } - - /** - * Whether this platform supports views. - * - * @deprecated All platforms must implement support for views. - * - * @return bool - */ - public function supportsViews() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::supportsViews() is deprecated. All platforms must implement support for views.', - ); - - return true; - } - - /** - * Does this platform support column collation? - * - * @return bool - */ - public function supportsColumnCollation() - { - return false; - } - - /** - * Gets the format string, as accepted by the date() function, that describes - * the format of a stored datetime value of this platform. - * - * @return string The format string. - */ - public function getDateTimeFormatString() - { - return 'Y-m-d H:i:s'; - } - - /** - * Gets the format string, as accepted by the date() function, that describes - * the format of a stored datetime with timezone value of this platform. - * - * @return string The format string. - */ - public function getDateTimeTzFormatString() - { - return 'Y-m-d H:i:s'; - } - - /** - * Gets the format string, as accepted by the date() function, that describes - * the format of a stored date value of this platform. - * - * @return string The format string. - */ - public function getDateFormatString() - { - return 'Y-m-d'; - } - - /** - * Gets the format string, as accepted by the date() function, that describes - * the format of a stored time value of this platform. - * - * @return string The format string. - */ - public function getTimeFormatString() - { - return 'H:i:s'; - } - - /** - * Adds an driver-specific LIMIT clause to the query. - * - * @param string $query - * @param int|null $limit - * @param int $offset - * - * @throws Exception - */ - final public function modifyLimitQuery($query, $limit, $offset = 0): string - { - if ($offset < 0) { - throw new Exception(sprintf( - 'Offset must be a positive integer or zero, %d given', - $offset, - )); - } - - if ($offset > 0 && ! $this->supportsLimitOffset()) { - throw new Exception(sprintf( - 'Platform %s does not support offset values in limit queries.', - $this->getName(), - )); - } - - if ($limit !== null) { - $limit = (int) $limit; - } - - return $this->doModifyLimitQuery($query, $limit, (int) $offset); - } - - /** - * Adds an platform-specific LIMIT clause to the query. - * - * @param string $query - * @param int|null $limit - * @param int $offset - * - * @return string - */ - protected function doModifyLimitQuery($query, $limit, $offset) - { - if ($limit !== null) { - $query .= sprintf(' LIMIT %d', $limit); - } - - if ($offset > 0) { - $query .= sprintf(' OFFSET %d', $offset); - } - - return $query; - } - - /** - * Whether the database platform support offsets in modify limit clauses. - * - * @deprecated All platforms must implement support for offsets in modify limit clauses. - * - * @return bool - */ - public function supportsLimitOffset() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4724', - 'AbstractPlatform::supportsViews() is deprecated.' - . ' All platforms must implement support for offsets in modify limit clauses.', - ); - - return true; - } - - /** - * Maximum length of any given database identifier, like tables or column names. - * - * @return int - */ - public function getMaxIdentifierLength() - { - return 63; - } - - /** - * Returns the insert SQL for an empty insert statement. - * - * @param string $quotedTableName - * @param string $quotedIdentifierColumnName - * - * @return string - */ - public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName) - { - return 'INSERT INTO ' . $quotedTableName . ' (' . $quotedIdentifierColumnName . ') VALUES (null)'; - } - - /** - * Generates a Truncate Table SQL statement for a given table. - * - * Cascade is not supported on many platforms but would optionally cascade the truncate by - * following the foreign keys. - * - * @param string $tableName - * @param bool $cascade - * - * @return string - */ - public function getTruncateTableSQL($tableName, $cascade = false) - { - $tableIdentifier = new Identifier($tableName); - - return 'TRUNCATE ' . $tableIdentifier->getQuotedName($this); - } - - /** - * This is for test reasons, many vendors have special requirements for dummy statements. - * - * @return string - */ - public function getDummySelectSQL() - { - $expression = func_num_args() > 0 ? func_get_arg(0) : '1'; - - return sprintf('SELECT %s', $expression); - } - - /** - * Returns the SQL to create a new savepoint. - * - * @param string $savepoint - * - * @return string - */ - public function createSavePoint($savepoint) - { - return 'SAVEPOINT ' . $savepoint; - } - - /** - * Returns the SQL to release a savepoint. - * - * @param string $savepoint - * - * @return string - */ - public function releaseSavePoint($savepoint) - { - return 'RELEASE SAVEPOINT ' . $savepoint; - } - - /** - * Returns the SQL to rollback a savepoint. - * - * @param string $savepoint - * - * @return string - */ - public function rollbackSavePoint($savepoint) - { - return 'ROLLBACK TO SAVEPOINT ' . $savepoint; - } - - /** - * Returns the keyword list instance of this platform. - * - * @throws Exception If no keyword list is specified. - */ - final public function getReservedKeywordsList(): KeywordList - { - // Store the instance so it doesn't need to be generated on every request. - return $this->_keywords ??= $this->createReservedKeywordsList(); - } - - /** - * Creates an instance of the reserved keyword list of this platform. - * - * This method will become @abstract in DBAL 4.0.0. - * - * @throws Exception - */ - protected function createReservedKeywordsList(): KeywordList - { - $class = $this->getReservedKeywordsClass(); - $keywords = new $class(); - if (! $keywords instanceof KeywordList) { - throw Exception::notSupported(__METHOD__); - } - - return $keywords; - } - - /** - * Returns the class name of the reserved keywords list. - * - * @deprecated Implement {@see createReservedKeywordsList()} instead. - * - * @return string - * @psalm-return class-string - * - * @throws Exception If not supported on this platform. - */ - protected function getReservedKeywordsClass() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - 'AbstractPlatform::getReservedKeywordsClass() is deprecated,' - . ' use AbstractPlatform::createReservedKeywordsList() instead.', - ); - - throw Exception::notSupported(__METHOD__); - } - - /** - * Quotes a literal string. - * This method is NOT meant to fix SQL injections! - * It is only meant to escape this platform's string literal - * quote character inside the given literal string. - * - * @param string $str The literal string to be quoted. - * - * @return string The quoted literal string. - */ - public function quoteStringLiteral($str) - { - $c = $this->getStringLiteralQuoteCharacter(); - - return $c . str_replace($c, $c . $c, $str) . $c; - } - - /** - * Gets the character used for string literal quoting. - * - * @deprecated Use {@see quoteStringLiteral()} to quote string literals instead. - * - * @return string - */ - public function getStringLiteralQuoteCharacter() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5388', - 'AbstractPlatform::getStringLiteralQuoteCharacter() is deprecated.' - . ' Use quoteStringLiteral() instead.', - ); - - return "'"; - } - - /** - * Escapes metacharacters in a string intended to be used with a LIKE - * operator. - * - * @param string $inputString a literal, unquoted string - * @param string $escapeChar should be reused by the caller in the LIKE - * expression. - */ - final public function escapeStringForLike(string $inputString, string $escapeChar): string - { - return preg_replace( - '~([' . preg_quote($this->getLikeWildcardCharacters() . $escapeChar, '~') . '])~u', - addcslashes($escapeChar, '\\') . '$1', - $inputString, - ); - } - - /** - * @return array An associative array with the name of the properties - * of the column being declared as array indexes. - */ - private function columnToArray(Column $column): array - { - $name = $column->getQuotedName($this); - - return array_merge($column->toArray(), [ - 'name' => $name, - 'version' => $column->hasPlatformOption('version') ? $column->getPlatformOption('version') : false, - 'comment' => $this->getColumnComment($column), - ]); - } - - /** @internal */ - public function createSQLParser(): Parser - { - return new Parser(false); - } - - protected function getLikeWildcardCharacters(): string - { - return '%_'; - } - - /** - * Compares the definitions of the given columns in the context of this platform. - * - * @throws Exception - */ - public function columnsEqual(Column $column1, Column $column2): bool - { - $column1Array = $this->columnToArray($column1); - $column2Array = $this->columnToArray($column2); - - // ignore explicit columnDefinition since it's not set on the Column generated by the SchemaManager - unset($column1Array['columnDefinition']); - unset($column2Array['columnDefinition']); - - if ( - $this->getColumnDeclarationSQL('', $column1Array) - !== $this->getColumnDeclarationSQL('', $column2Array) - ) { - return false; - } - - if (! $this->columnDeclarationsMatch($column1, $column2)) { - return false; - } - - // If the platform supports inline comments, all comparison is already done above - if ($this->supportsInlineColumnComments()) { - return true; - } - - if ($column1->getComment() !== $column2->getComment()) { - return false; - } - - // If disableTypeComments is true, we do not need to check types, all comparison is already done above - if ($this->disableTypeComments) { - return true; - } - - return $column1->getType() === $column2->getType(); - } - - /** - * Whether the database data type matches that expected for the doctrine type for the given colunms. - */ - private function columnDeclarationsMatch(Column $column1, Column $column2): bool - { - return ! ( - $column1->hasPlatformOption('declarationMismatch') || - $column2->hasPlatformOption('declarationMismatch') - ); - } - - /** - * Creates the schema manager that can be used to inspect and change the underlying - * database schema according to the dialect of the platform. - * - * @throws Exception - * - * @abstract - */ - public function createSchemaManager(Connection $connection): AbstractSchemaManager - { - throw Exception::notSupported(__METHOD__); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/DB2111Platform.php b/vendor/doctrine/dbal/src/Platforms/DB2111Platform.php deleted file mode 100644 index 40ab42f..0000000 --- a/vendor/doctrine/dbal/src/Platforms/DB2111Platform.php +++ /dev/null @@ -1,40 +0,0 @@ - 0) { - $query .= sprintf(' OFFSET %u ROWS', $offset); - } - - if ($limit !== null) { - if ($limit < 0) { - throw new Exception(sprintf('Limit must be a positive integer or zero, %d given', $limit)); - } - - $query .= sprintf(' FETCH %s %u ROWS ONLY', $offset === 0 ? 'FIRST' : 'NEXT', $limit); - } - - return $query; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/DB2Platform.php b/vendor/doctrine/dbal/src/Platforms/DB2Platform.php deleted file mode 100644 index 69234f4..0000000 --- a/vendor/doctrine/dbal/src/Platforms/DB2Platform.php +++ /dev/null @@ -1,1053 +0,0 @@ -getCharMaxLength(); - } - - return parent::getVarcharTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getBlobTypeDeclarationSQL(array $column) - { - // todo blob(n) with $column['length']; - return 'BLOB(1M)'; - } - - /** - * {@inheritDoc} - */ - protected function initializeDoctrineTypeMappings() - { - $this->doctrineTypeMapping = [ - 'bigint' => Types::BIGINT, - 'binary' => Types::BINARY, - 'blob' => Types::BLOB, - 'character' => Types::STRING, - 'clob' => Types::TEXT, - 'date' => Types::DATE_MUTABLE, - 'decimal' => Types::DECIMAL, - 'double' => Types::FLOAT, - 'integer' => Types::INTEGER, - 'real' => Types::FLOAT, - 'smallint' => Types::SMALLINT, - 'time' => Types::TIME_MUTABLE, - 'timestamp' => Types::DATETIME_MUTABLE, - 'varbinary' => Types::BINARY, - 'varchar' => Types::STRING, - ]; - } - - /** - * {@inheritDoc} - */ - public function isCommentedDoctrineType(Type $doctrineType) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5058', - '%s() is deprecated and will be removed in Doctrine DBAL 4.0. Use Type::requiresSQLCommentHint() instead.', - __METHOD__, - ); - - if ($doctrineType->getName() === Types::BOOLEAN) { - // We require a commented boolean type in order to distinguish between boolean and smallint - // as both (have to) map to the same native type. - return true; - } - - return parent::isCommentedDoctrineType($doctrineType); - } - - /** - * {@inheritDoc} - */ - protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default string column length on IBM DB2 is deprecated' - . ', specify the length explicitly.', - ); - } - - return $fixed ? ($length > 0 ? 'CHAR(' . $length . ')' : 'CHAR(254)') - : ($length > 0 ? 'VARCHAR(' . $length . ')' : 'VARCHAR(255)'); - } - - /** - * {@inheritDoc} - */ - protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default binary column length on IBM DB2 is deprecated' - . ', specify the length explicitly.', - ); - } - - return $this->getVarcharTypeDeclarationSQLSnippet($length, $fixed) . ' FOR BIT DATA'; - } - - /** - * {@inheritDoc} - */ - public function getClobTypeDeclarationSQL(array $column) - { - // todo clob(n) with $column['length']; - return 'CLOB(1M)'; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4749', - '%s() is deprecated. Identify platforms by their class.', - __METHOD__, - ); - - return 'db2'; - } - - /** - * {@inheritDoc} - */ - public function getBooleanTypeDeclarationSQL(array $column) - { - return 'SMALLINT'; - } - - /** - * {@inheritDoc} - */ - public function getIntegerTypeDeclarationSQL(array $column) - { - return 'INTEGER' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getBigIntTypeDeclarationSQL(array $column) - { - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getSmallIntTypeDeclarationSQL(array $column) - { - return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - protected function _getCommonIntegerTypeDeclarationSQL(array $column) - { - $autoinc = ''; - if (! empty($column['autoincrement'])) { - $autoinc = ' GENERATED BY DEFAULT AS IDENTITY'; - } - - return $autoinc; - } - - /** - * {@inheritDoc} - */ - public function getBitAndComparisonExpression($value1, $value2) - { - return 'BITAND(' . $value1 . ', ' . $value2 . ')'; - } - - /** - * {@inheritDoc} - */ - public function getBitOrComparisonExpression($value1, $value2) - { - return 'BITOR(' . $value1 . ', ' . $value2 . ')'; - } - - /** - * {@inheritDoc} - */ - protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) - { - switch ($unit) { - case DateIntervalUnit::WEEK: - $interval = $this->multiplyInterval((string) $interval, 7); - $unit = DateIntervalUnit::DAY; - break; - - case DateIntervalUnit::QUARTER: - $interval = $this->multiplyInterval((string) $interval, 3); - $unit = DateIntervalUnit::MONTH; - break; - } - - return $date . ' ' . $operator . ' ' . $interval . ' ' . $unit; - } - - /** - * {@inheritDoc} - */ - public function getDateDiffExpression($date1, $date2) - { - return 'DAYS(' . $date1 . ') - DAYS(' . $date2 . ')'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTypeDeclarationSQL(array $column) - { - if (isset($column['version']) && $column['version'] === true) { - return 'TIMESTAMP(0) WITH DEFAULT'; - } - - return 'TIMESTAMP(0)'; - } - - /** - * {@inheritDoc} - */ - public function getDateTypeDeclarationSQL(array $column) - { - return 'DATE'; - } - - /** - * {@inheritDoc} - */ - public function getTimeTypeDeclarationSQL(array $column) - { - return 'TIME'; - } - - /** - * {@inheritDoc} - */ - public function getTruncateTableSQL($tableName, $cascade = false) - { - $tableIdentifier = new Identifier($tableName); - - return 'TRUNCATE ' . $tableIdentifier->getQuotedName($this) . ' IMMEDIATE'; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * This code fragment is originally from the Zend_Db_Adapter_Db2 class, but has been edited. - * - * @param string $table - * @param string $database - * - * @return string - */ - public function getListTableColumnsSQL($table, $database = null) - { - $table = $this->quoteStringLiteral($table); - - // We do the funky subquery and join syscat.columns.default this crazy way because - // as of db2 v10, the column is CLOB(64k) and the distinct operator won't allow a CLOB, - // it wants shorter stuff like a varchar. - return " - SELECT - cols.default, - subq.* - FROM ( - SELECT DISTINCT - c.tabschema, - c.tabname, - c.colname, - c.colno, - c.typename, - c.codepage, - c.nulls, - c.length, - c.scale, - c.identity, - tc.type AS tabconsttype, - c.remarks AS comment, - k.colseq, - CASE - WHEN c.generated = '" . self::SYSCAT_COLUMNS_GENERATED_DEFAULT . "' THEN 1 - ELSE 0 - END AS autoincrement - FROM syscat.columns c - LEFT JOIN (syscat.keycoluse k JOIN syscat.tabconst tc - ON (k.tabschema = tc.tabschema - AND k.tabname = tc.tabname - AND tc.type = '" . self::SYSCAT_TABCONST_TYPE_PRIMARY_KEY . "')) - ON (c.tabschema = k.tabschema - AND c.tabname = k.tabname - AND c.colname = k.colname) - WHERE UPPER(c.tabname) = UPPER(" . $table . ') - ORDER BY c.colno - ) subq - JOIN syscat.columns cols - ON subq.tabschema = cols.tabschema - AND subq.tabname = cols.tabname - AND subq.colno = cols.colno - ORDER BY subq.colno - '; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTablesSQL() - { - return "SELECT NAME FROM SYSIBM.SYSTABLES WHERE TYPE = '" . self::SYSIBM_SYSTABLES_TYPE_TABLE . "'" - . ' AND CREATOR = CURRENT_USER'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListViewsSQL($database) - { - return 'SELECT NAME, TEXT FROM SYSIBM.SYSVIEWS'; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableIndexesSQL($table, $database = null) - { - $table = $this->quoteStringLiteral($table); - - return "SELECT idx.INDNAME AS key_name, - idxcol.COLNAME AS column_name, - CASE - WHEN idx.UNIQUERULE = '" . self::SYSCAT_INDEXES_UNIQUERULE_IMPLEMENTS_PRIMARY_KEY . "' - THEN 1 - ELSE 0 - END AS primary, - CASE - WHEN idx.UNIQUERULE = '" . self::SYSCAT_INDEXES_UNIQUERULE_PERMITS_DUPLICATES . "' - THEN 1 - ELSE 0 - END AS non_unique - FROM SYSCAT.INDEXES AS idx - JOIN SYSCAT.INDEXCOLUSE AS idxcol - ON idx.INDSCHEMA = idxcol.INDSCHEMA AND idx.INDNAME = idxcol.INDNAME - WHERE idx.TABNAME = UPPER(" . $table . ') - ORDER BY idxcol.COLSEQ ASC'; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableForeignKeysSQL($table) - { - $table = $this->quoteStringLiteral($table); - - return "SELECT fkcol.COLNAME AS local_column, - fk.REFTABNAME AS foreign_table, - pkcol.COLNAME AS foreign_column, - fk.CONSTNAME AS index_name, - CASE - WHEN fk.UPDATERULE = '" . self::SYSCAT_REFERENCES_UPDATERULE_RESTRICT . "' THEN 'RESTRICT' - ELSE NULL - END AS on_update, - CASE - WHEN fk.DELETERULE = '" . self::SYSCAT_REFERENCES_DELETERULE_CASCADE . "' THEN 'CASCADE' - WHEN fk.DELETERULE = '" . self::SYSCAT_REFERENCES_DELETERULE_SET_NULL . "' THEN 'SET NULL' - WHEN fk.DELETERULE = '" . self::SYSCAT_REFERENCES_DELETERULE_RESTRICT . "' THEN 'RESTRICT' - ELSE NULL - END AS on_delete - FROM SYSCAT.REFERENCES AS fk - JOIN SYSCAT.KEYCOLUSE AS fkcol - ON fk.CONSTNAME = fkcol.CONSTNAME - AND fk.TABSCHEMA = fkcol.TABSCHEMA - AND fk.TABNAME = fkcol.TABNAME - JOIN SYSCAT.KEYCOLUSE AS pkcol - ON fk.REFKEYNAME = pkcol.CONSTNAME - AND fk.REFTABSCHEMA = pkcol.TABSCHEMA - AND fk.REFTABNAME = pkcol.TABNAME - WHERE fk.TABNAME = UPPER(" . $table . ') - ORDER BY fkcol.COLSEQ ASC'; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function supportsCreateDropDatabase() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s() is deprecated.', - __METHOD__, - ); - - return false; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsCommentOnStatement() - { - return true; - } - - /** - * {@inheritDoc} - */ - public function getCurrentDateSQL() - { - return 'CURRENT DATE'; - } - - /** - * {@inheritDoc} - */ - public function getCurrentTimeSQL() - { - return 'CURRENT TIME'; - } - - /** - * {@inheritDoc} - */ - public function getCurrentTimestampSQL() - { - return 'CURRENT TIMESTAMP'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getIndexDeclarationSQL($name, Index $index) - { - // Index declaration in statements like CREATE TABLE is not supported. - throw Exception::notSupported(__METHOD__); - } - - /** - * {@inheritDoc} - */ - protected function _getCreateTableSQL($name, array $columns, array $options = []) - { - $indexes = []; - if (isset($options['indexes'])) { - $indexes = $options['indexes']; - } - - $options['indexes'] = []; - - $sqls = parent::_getCreateTableSQL($name, $columns, $options); - - foreach ($indexes as $definition) { - $sqls[] = $this->getCreateIndexSQL($definition, $name); - } - - return $sqls; - } - - /** - * {@inheritDoc} - */ - public function getAlterTableSQL(TableDiff $diff) - { - $sql = []; - $columnSql = []; - $commentsSQL = []; - - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - - $queryParts = []; - foreach ($diff->getAddedColumns() as $column) { - if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) { - continue; - } - - $columnDef = $column->toArray(); - $queryPart = 'ADD COLUMN ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnDef); - - // Adding non-nullable columns to a table requires a default value to be specified. - if ( - ! empty($columnDef['notnull']) && - ! isset($columnDef['default']) && - empty($columnDef['autoincrement']) - ) { - $queryPart .= ' WITH DEFAULT'; - } - - $queryParts[] = $queryPart; - - $comment = $this->getColumnComment($column); - - if ($comment === null || $comment === '') { - continue; - } - - $commentsSQL[] = $this->getCommentOnColumnSQL( - $tableNameSQL, - $column->getQuotedName($this), - $comment, - ); - } - - foreach ($diff->getDroppedColumns() as $column) { - if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) { - continue; - } - - $queryParts[] = 'DROP COLUMN ' . $column->getQuotedName($this); - } - - foreach ($diff->getModifiedColumns() as $columnDiff) { - if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) { - continue; - } - - if ($columnDiff->hasCommentChanged()) { - $commentsSQL[] = $this->getCommentOnColumnSQL( - $tableNameSQL, - $columnDiff->getNewColumn()->getQuotedName($this), - $this->getColumnComment($columnDiff->getNewColumn()), - ); - } - - $this->gatherAlterColumnSQL( - $tableNameSQL, - $columnDiff, - $sql, - $queryParts, - ); - } - - foreach ($diff->getRenamedColumns() as $oldColumnName => $column) { - if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) { - continue; - } - - $oldColumnName = new Identifier($oldColumnName); - - $queryParts[] = 'RENAME COLUMN ' . $oldColumnName->getQuotedName($this) . - ' TO ' . $column->getQuotedName($this); - } - - $tableSql = []; - - if (! $this->onSchemaAlterTable($diff, $tableSql)) { - if (count($queryParts) > 0) { - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . implode(' ', $queryParts); - } - - // Some table alteration operations require a table reorganization. - if (count($diff->getDroppedColumns()) > 0 || count($diff->getModifiedColumns()) > 0) { - $sql[] = "CALL SYSPROC.ADMIN_CMD ('REORG TABLE " . $tableNameSQL . "')"; - } - - $sql = array_merge($sql, $commentsSQL); - - $newName = $diff->getNewName(); - - if ($newName !== false) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5663', - 'Generation of "rename table" SQL using %s() is deprecated. Use getRenameTableSQL() instead.', - __METHOD__, - ); - - $sql[] = sprintf( - 'RENAME TABLE %s TO %s', - $tableNameSQL, - $newName->getQuotedName($this), - ); - } - - $sql = array_merge( - $this->getPreAlterTableIndexForeignKeySQL($diff), - $sql, - $this->getPostAlterTableIndexForeignKeySQL($diff), - ); - } - - return array_merge($sql, $tableSql, $columnSql); - } - - /** - * {@inheritDoc} - */ - public function getRenameTableSQL(string $oldName, string $newName): array - { - return [ - sprintf('RENAME TABLE %s TO %s', $oldName, $newName), - ]; - } - - /** - * Gathers the table alteration SQL for a given column diff. - * - * @param string $table The table to gather the SQL for. - * @param ColumnDiff $columnDiff The column diff to evaluate. - * @param string[] $sql The sequence of table alteration statements to fill. - * @param mixed[] $queryParts The sequence of column alteration clauses to fill. - */ - private function gatherAlterColumnSQL( - string $table, - ColumnDiff $columnDiff, - array &$sql, - array &$queryParts - ): void { - $alterColumnClauses = $this->getAlterColumnClausesSQL($columnDiff); - - if (empty($alterColumnClauses)) { - return; - } - - // If we have a single column alteration, we can append the clause to the main query. - if (count($alterColumnClauses) === 1) { - $queryParts[] = current($alterColumnClauses); - - return; - } - - // We have multiple alterations for the same column, - // so we need to trigger a complete ALTER TABLE statement - // for each ALTER COLUMN clause. - foreach ($alterColumnClauses as $alterColumnClause) { - $sql[] = 'ALTER TABLE ' . $table . ' ' . $alterColumnClause; - } - } - - /** - * Returns the ALTER COLUMN SQL clauses for altering a column described by the given column diff. - * - * @return string[] - */ - private function getAlterColumnClausesSQL(ColumnDiff $columnDiff): array - { - $newColumn = $columnDiff->getNewColumn()->toArray(); - - $alterClause = 'ALTER COLUMN ' . $columnDiff->getNewColumn()->getQuotedName($this); - - if ($newColumn['columnDefinition'] !== null) { - return [$alterClause . ' ' . $newColumn['columnDefinition']]; - } - - $clauses = []; - - if ( - $columnDiff->hasTypeChanged() || - $columnDiff->hasLengthChanged() || - $columnDiff->hasPrecisionChanged() || - $columnDiff->hasScaleChanged() || - $columnDiff->hasFixedChanged() - ) { - $clauses[] = $alterClause . ' SET DATA TYPE ' . $newColumn['type']->getSQLDeclaration($newColumn, $this); - } - - if ($columnDiff->hasNotNullChanged()) { - $clauses[] = $newColumn['notnull'] ? $alterClause . ' SET NOT NULL' : $alterClause . ' DROP NOT NULL'; - } - - if ($columnDiff->hasDefaultChanged()) { - if (isset($newColumn['default'])) { - $defaultClause = $this->getDefaultValueDeclarationSQL($newColumn); - - if ($defaultClause !== '') { - $clauses[] = $alterClause . ' SET' . $defaultClause; - } - } else { - $clauses[] = $alterClause . ' DROP DEFAULT'; - } - } - - return $clauses; - } - - /** - * {@inheritDoc} - */ - protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff) - { - $sql = []; - - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - - foreach ($diff->getDroppedIndexes() as $droppedIndex) { - foreach ($diff->getAddedIndexes() as $addedIndex) { - if ($droppedIndex->getColumns() !== $addedIndex->getColumns()) { - continue; - } - - if ($droppedIndex->isPrimary()) { - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' DROP PRIMARY KEY'; - } elseif ($droppedIndex->isUnique()) { - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' DROP UNIQUE ' . $droppedIndex->getQuotedName($this); - } else { - $sql[] = $this->getDropIndexSQL($droppedIndex, $tableNameSQL); - } - - $sql[] = $this->getCreateIndexSQL($addedIndex, $tableNameSQL); - - $diff->unsetAddedIndex($addedIndex); - $diff->unsetDroppedIndex($droppedIndex); - - break; - } - } - - return array_merge($sql, parent::getPreAlterTableIndexForeignKeySQL($diff)); - } - - /** - * {@inheritDoc} - */ - protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) - { - if (strpos($tableName, '.') !== false) { - [$schema] = explode('.', $tableName); - $oldIndexName = $schema . '.' . $oldIndexName; - } - - return ['RENAME INDEX ' . $oldIndexName . ' TO ' . $index->getQuotedName($this)]; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getDefaultValueDeclarationSQL($column) - { - if (! empty($column['autoincrement'])) { - return ''; - } - - if (! empty($column['version'])) { - if ((string) $column['type'] !== 'DateTime') { - $column['default'] = '1'; - } - } - - return parent::getDefaultValueDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName) - { - return 'INSERT INTO ' . $quotedTableName . ' (' . $quotedIdentifierColumnName . ') VALUES (DEFAULT)'; - } - - /** - * {@inheritDoc} - */ - public function getCreateTemporaryTableSnippetSQL() - { - return 'DECLARE GLOBAL TEMPORARY TABLE'; - } - - /** - * {@inheritDoc} - */ - public function getTemporaryTableName($tableName) - { - return 'SESSION.' . $tableName; - } - - /** - * {@inheritDoc} - */ - protected function doModifyLimitQuery($query, $limit, $offset) - { - $where = []; - - if ($offset > 0) { - $where[] = sprintf('db22.DC_ROWNUM >= %d', $offset + 1); - } - - if ($limit !== null) { - $where[] = sprintf('db22.DC_ROWNUM <= %d', $offset + $limit); - } - - if (empty($where)) { - return $query; - } - - // Todo OVER() needs ORDER BY data! - return sprintf( - 'SELECT db22.* FROM (SELECT db21.*, ROW_NUMBER() OVER() AS DC_ROWNUM FROM (%s) db21) db22 WHERE %s', - $query, - implode(' AND ', $where), - ); - } - - /** - * {@inheritDoc} - */ - public function getLocateExpression($str, $substr, $startPos = false) - { - if ($startPos === false) { - return 'LOCATE(' . $substr . ', ' . $str . ')'; - } - - return 'LOCATE(' . $substr . ', ' . $str . ', ' . $startPos . ')'; - } - - /** - * {@inheritDoc} - */ - public function getSubstringExpression($string, $start, $length = null) - { - if ($length === null) { - return 'SUBSTR(' . $string . ', ' . $start . ')'; - } - - return 'SUBSTR(' . $string . ', ' . $start . ', ' . $length . ')'; - } - - /** - * {@inheritDoc} - */ - public function getLengthExpression($column) - { - return 'LENGTH(' . $column . ', CODEUNITS32)'; - } - - public function getCurrentDatabaseExpression(): string - { - return 'CURRENT_USER'; - } - - /** - * {@inheritDoc} - */ - public function supportsIdentityColumns() - { - return true; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function prefersIdentityColumns() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/1519', - '%s() is deprecated.', - __METHOD__, - ); - - return true; - } - - public function createSelectSQLBuilder(): SelectSQLBuilder - { - return new DefaultSelectSQLBuilder($this, 'WITH RR USE AND KEEP UPDATE LOCKS', null); - } - - /** - * {@inheritDoc} - * - * @deprecated This API is not portable. - */ - public function getForUpdateSQL() - { - return ' WITH RR USE AND KEEP UPDATE LOCKS'; - } - - /** - * {@inheritDoc} - */ - public function getDummySelectSQL() - { - $expression = func_num_args() > 0 ? func_get_arg(0) : '1'; - - return sprintf('SELECT %s FROM sysibm.sysdummy1', $expression); - } - - /** - * {@inheritDoc} - * - * DB2 supports savepoints, but they work semantically different than on other vendor platforms. - * - * TODO: We have to investigate how to get DB2 up and running with savepoints. - */ - public function supportsSavepoints() - { - return false; - } - - /** - * {@inheritDoc} - * - * @deprecated Implement {@see createReservedKeywordsList()} instead. - */ - protected function getReservedKeywordsClass() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - '%s() is deprecated,' - . ' use %s::createReservedKeywordsList() instead.', - __METHOD__, - static::class, - ); - - return Keywords\DB2Keywords::class; - } - - /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */ - public function getListTableCommentsSQL(string $table): string - { - return sprintf( - <<<'SQL' -SELECT REMARKS - FROM SYSIBM.SYSTABLES - WHERE NAME = UPPER( %s ) -SQL - , - $this->quoteStringLiteral($table), - ); - } - - public function createSchemaManager(Connection $connection): DB2SchemaManager - { - return new DB2SchemaManager($connection, $this); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/DateIntervalUnit.php b/vendor/doctrine/dbal/src/Platforms/DateIntervalUnit.php deleted file mode 100644 index a95c4e2..0000000 --- a/vendor/doctrine/dbal/src/Platforms/DateIntervalUnit.php +++ /dev/null @@ -1,29 +0,0 @@ -keywords === null) { - $this->initializeKeywords(); - } - - return isset($this->keywords[strtoupper($word)]); - } - - /** @return void */ - protected function initializeKeywords() - { - $this->keywords = array_flip(array_map('strtoupper', $this->getKeywords())); - } - - /** - * Returns the list of keywords. - * - * @return string[] - */ - abstract protected function getKeywords(); - - /** - * Returns the name of this keyword list. - * - * @deprecated - * - * @return string - */ - abstract public function getName(); -} diff --git a/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php b/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php deleted file mode 100644 index 5417c6c..0000000 --- a/vendor/doctrine/dbal/src/Platforms/Keywords/MariaDBKeywords.php +++ /dev/null @@ -1,276 +0,0 @@ -keywordLists = $keywordLists; - } - - /** @return string[] */ - public function getViolations() - { - return $this->violations; - } - - /** - * @param string $word - * - * @return string[] - */ - private function isReservedWord($word): array - { - if ($word[0] === '`') { - $word = str_replace('`', '', $word); - } - - $keywordLists = []; - foreach ($this->keywordLists as $keywordList) { - if (! $keywordList->isKeyword($word)) { - continue; - } - - $keywordLists[] = $keywordList->getName(); - } - - return $keywordLists; - } - - /** - * @param string $asset - * @param string[] $violatedPlatforms - */ - private function addViolation($asset, $violatedPlatforms): void - { - if (count($violatedPlatforms) === 0) { - return; - } - - $this->violations[] = $asset . ' keyword violations: ' . implode(', ', $violatedPlatforms); - } - - /** - * {@inheritDoc} - */ - public function acceptColumn(Table $table, Column $column) - { - $this->addViolation( - 'Table ' . $table->getName() . ' column ' . $column->getName(), - $this->isReservedWord($column->getName()), - ); - } - - /** - * {@inheritDoc} - */ - public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) - { - } - - /** - * {@inheritDoc} - */ - public function acceptIndex(Table $table, Index $index) - { - } - - /** - * {@inheritDoc} - */ - public function acceptSchema(Schema $schema) - { - } - - /** - * {@inheritDoc} - */ - public function acceptSequence(Sequence $sequence) - { - } - - /** - * {@inheritDoc} - */ - public function acceptTable(Table $table) - { - $this->addViolation( - 'Table ' . $table->getName(), - $this->isReservedWord($table->getName()), - ); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServer2012Keywords.php b/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServer2012Keywords.php deleted file mode 100644 index ebc45c4..0000000 --- a/vendor/doctrine/dbal/src/Platforms/Keywords/SQLServer2012Keywords.php +++ /dev/null @@ -1,12 +0,0 @@ -doctrineTypeMapping['json'] = Types::JSON; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/MariaDb1010Platform.php b/vendor/doctrine/dbal/src/Platforms/MariaDb1010Platform.php deleted file mode 100644 index 6cddbdd..0000000 --- a/vendor/doctrine/dbal/src/Platforms/MariaDb1010Platform.php +++ /dev/null @@ -1,47 +0,0 @@ -getColumnTypeSQLSnippets('c', $database); - - return sprintf( - <<getDatabaseNameSQL($database), - $this->quoteStringLiteral($table), - ); - } - - /** - * Generate SQL snippets to reverse the aliasing of JSON to LONGTEXT. - * - * MariaDb aliases columns specified as JSON to LONGTEXT and sets a CHECK constraint to ensure the column - * is valid json. This function generates the SQL snippets which reverse this aliasing i.e. report a column - * as JSON where it was originally specified as such instead of LONGTEXT. - * - * The CHECK constraints are stored in information_schema.CHECK_CONSTRAINTS so query that table. - */ - public function getColumnTypeSQLSnippet(string $tableAlias = 'c', ?string $databaseName = null): string - { - if ($this->getJsonTypeDeclarationSQL([]) !== 'JSON') { - return parent::getColumnTypeSQLSnippet($tableAlias, $databaseName); - } - - if ($databaseName === null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6215', - 'Not passing a database name to methods "getColumnTypeSQLSnippet()", ' - . '"getColumnTypeSQLSnippets()", and "getListTableColumnsSQL()" of "%s" is deprecated.', - self::class, - ); - } - - $subQueryAlias = 'i_' . $tableAlias; - - $databaseName = $this->getDatabaseNameSQL($databaseName); - - // The check for `CONSTRAINT_SCHEMA = $databaseName` is mandatory here to prevent performance issues - return <<getJsonTypeDeclarationSQL([]) === 'JSON' && ($column['type'] ?? null) instanceof JsonType) { - unset($column['collation']); - unset($column['charset']); - } - - return parent::getColumnDeclarationSQL($name, $column); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/MariaDb1052Platform.php b/vendor/doctrine/dbal/src/Platforms/MariaDb1052Platform.php deleted file mode 100644 index a2199cd..0000000 --- a/vendor/doctrine/dbal/src/Platforms/MariaDb1052Platform.php +++ /dev/null @@ -1,36 +0,0 @@ -getQuotedName($this)]; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/MariaDb1060Platform.php b/vendor/doctrine/dbal/src/Platforms/MariaDb1060Platform.php deleted file mode 100644 index b3ce4eb..0000000 --- a/vendor/doctrine/dbal/src/Platforms/MariaDb1060Platform.php +++ /dev/null @@ -1,16 +0,0 @@ - */ - private $cache = []; - - public function __construct(CollationMetadataProvider $collationMetadataProvider) - { - $this->collationMetadataProvider = $collationMetadataProvider; - } - - public function getCollationCharset(string $collation): ?string - { - if (array_key_exists($collation, $this->cache)) { - return $this->cache[$collation]; - } - - return $this->cache[$collation] = $this->collationMetadataProvider->getCollationCharset($collation); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider/ConnectionCollationMetadataProvider.php b/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider/ConnectionCollationMetadataProvider.php deleted file mode 100644 index 8dc2421..0000000 --- a/vendor/doctrine/dbal/src/Platforms/MySQL/CollationMetadataProvider/ConnectionCollationMetadataProvider.php +++ /dev/null @@ -1,41 +0,0 @@ -connection = $connection; - } - - /** @throws Exception */ - public function getCollationCharset(string $collation): ?string - { - $charset = $this->connection->fetchOne( - <<<'SQL' -SELECT CHARACTER_SET_NAME -FROM information_schema.COLLATIONS -WHERE COLLATION_NAME = ?; -SQL - , - [$collation], - ); - - if ($charset !== false) { - return $charset; - } - - return null; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/MySQL/Comparator.php b/vendor/doctrine/dbal/src/Platforms/MySQL/Comparator.php deleted file mode 100644 index c27fef7..0000000 --- a/vendor/doctrine/dbal/src/Platforms/MySQL/Comparator.php +++ /dev/null @@ -1,94 +0,0 @@ -collationMetadataProvider = $collationMetadataProvider; - } - - public function compareTables(Table $fromTable, Table $toTable): TableDiff - { - return parent::compareTables( - $this->normalizeColumns($fromTable), - $this->normalizeColumns($toTable), - ); - } - - /** - * {@inheritDoc} - */ - public function diffTable(Table $fromTable, Table $toTable) - { - return parent::diffTable( - $this->normalizeColumns($fromTable), - $this->normalizeColumns($toTable), - ); - } - - private function normalizeColumns(Table $table): Table - { - $tableOptions = array_intersect_key($table->getOptions(), [ - 'charset' => null, - 'collation' => null, - ]); - - $table = clone $table; - - foreach ($table->getColumns() as $column) { - $originalOptions = $column->getPlatformOptions(); - $normalizedOptions = $this->normalizeOptions($originalOptions); - - $overrideOptions = array_diff_assoc($normalizedOptions, $tableOptions); - - if ($overrideOptions === $originalOptions) { - continue; - } - - $column->setPlatformOptions($overrideOptions); - } - - return $table; - } - - /** - * @param array $options - * - * @return array - */ - private function normalizeOptions(array $options): array - { - if (isset($options['collation']) && ! isset($options['charset'])) { - $charset = $this->collationMetadataProvider->getCollationCharset($options['collation']); - - if ($charset !== null) { - $options['charset'] = $charset; - } - } - - return $options; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php b/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php deleted file mode 100644 index d5169bd..0000000 --- a/vendor/doctrine/dbal/src/Platforms/MySQL57Platform.php +++ /dev/null @@ -1,99 +0,0 @@ -getQuotedName($this)]; - } - - /** - * {@inheritDoc} - * - * @deprecated Implement {@see createReservedKeywordsList()} instead. - */ - protected function getReservedKeywordsClass() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - 'MySQL57Platform::getReservedKeywordsClass() is deprecated,' - . ' use MySQL57Platform::createReservedKeywordsList() instead.', - ); - - return Keywords\MySQL57Keywords::class; - } - - /** - * {@inheritDoc} - */ - protected function initializeDoctrineTypeMappings() - { - parent::initializeDoctrineTypeMappings(); - - $this->doctrineTypeMapping['json'] = Types::JSON; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php b/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php deleted file mode 100644 index d932428..0000000 --- a/vendor/doctrine/dbal/src/Platforms/MySQL80Platform.php +++ /dev/null @@ -1,34 +0,0 @@ -multiplyInterval((string) $interval, 3); - break; - - case DateIntervalUnit::YEAR: - $interval = $this->multiplyInterval((string) $interval, 12); - break; - } - - return 'ADD_MONTHS(' . $date . ', ' . $operator . $interval . ')'; - - default: - $calculationClause = ''; - - switch ($unit) { - case DateIntervalUnit::SECOND: - $calculationClause = '/24/60/60'; - break; - - case DateIntervalUnit::MINUTE: - $calculationClause = '/24/60'; - break; - - case DateIntervalUnit::HOUR: - $calculationClause = '/24'; - break; - - case DateIntervalUnit::WEEK: - $calculationClause = '*7'; - break; - } - - return '(' . $date . $operator . $interval . $calculationClause . ')'; - } - } - - /** - * {@inheritDoc} - */ - public function getDateDiffExpression($date1, $date2) - { - return sprintf('TRUNC(%s) - TRUNC(%s)', $date1, $date2); - } - - /** - * {@inheritDoc} - */ - public function getBitAndComparisonExpression($value1, $value2) - { - return 'BITAND(' . $value1 . ', ' . $value2 . ')'; - } - - public function getCurrentDatabaseExpression(): string - { - return "SYS_CONTEXT('USERENV', 'CURRENT_SCHEMA')"; - } - - /** - * {@inheritDoc} - */ - public function getBitOrComparisonExpression($value1, $value2) - { - return '(' . $value1 . '-' . - $this->getBitAndComparisonExpression($value1, $value2) - . '+' . $value2 . ')'; - } - - /** - * {@inheritDoc} - */ - public function getCreatePrimaryKeySQL(Index $index, $table): string - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } - - return 'ALTER TABLE ' . $table . ' ADD CONSTRAINT ' . $index->getQuotedName($this) - . ' PRIMARY KEY (' . $this->getIndexFieldDeclarationListSQL($index) . ')'; - } - - /** - * {@inheritDoc} - * - * Need to specifiy minvalue, since start with is hidden in the system and MINVALUE <= START WITH. - * Therefore we can use MINVALUE to be able to get a hint what START WITH was for later introspection - * in {@see listSequences()} - */ - public function getCreateSequenceSQL(Sequence $sequence) - { - return 'CREATE SEQUENCE ' . $sequence->getQuotedName($this) . - ' START WITH ' . $sequence->getInitialValue() . - ' MINVALUE ' . $sequence->getInitialValue() . - ' INCREMENT BY ' . $sequence->getAllocationSize() . - $this->getSequenceCacheSQL($sequence); - } - - /** - * {@inheritDoc} - */ - public function getAlterSequenceSQL(Sequence $sequence) - { - return 'ALTER SEQUENCE ' . $sequence->getQuotedName($this) . - ' INCREMENT BY ' . $sequence->getAllocationSize() - . $this->getSequenceCacheSQL($sequence); - } - - /** - * Cache definition for sequences - */ - private function getSequenceCacheSQL(Sequence $sequence): string - { - if ($sequence->getCache() === 0) { - return ' NOCACHE'; - } - - if ($sequence->getCache() === 1) { - return ' NOCACHE'; - } - - if ($sequence->getCache() > 1) { - return ' CACHE ' . $sequence->getCache(); - } - - return ''; - } - - /** - * {@inheritDoc} - */ - public function getSequenceNextValSQL($sequence) - { - return 'SELECT ' . $sequence . '.nextval FROM DUAL'; - } - - /** - * {@inheritDoc} - */ - public function getSetTransactionIsolationSQL($level) - { - return 'SET TRANSACTION ISOLATION LEVEL ' . $this->_getTransactionIsolationLevelSQL($level); - } - - /** - * {@inheritDoc} - */ - protected function _getTransactionIsolationLevelSQL($level) - { - switch ($level) { - case TransactionIsolationLevel::READ_UNCOMMITTED: - return 'READ UNCOMMITTED'; - - case TransactionIsolationLevel::READ_COMMITTED: - return 'READ COMMITTED'; - - case TransactionIsolationLevel::REPEATABLE_READ: - case TransactionIsolationLevel::SERIALIZABLE: - return 'SERIALIZABLE'; - - default: - return parent::_getTransactionIsolationLevelSQL($level); - } - } - - /** - * {@inheritDoc} - */ - public function getBooleanTypeDeclarationSQL(array $column) - { - return 'NUMBER(1)'; - } - - /** - * {@inheritDoc} - */ - public function getIntegerTypeDeclarationSQL(array $column) - { - return 'NUMBER(10)'; - } - - /** - * {@inheritDoc} - */ - public function getBigIntTypeDeclarationSQL(array $column) - { - return 'NUMBER(20)'; - } - - /** - * {@inheritDoc} - */ - public function getSmallIntTypeDeclarationSQL(array $column) - { - return 'NUMBER(5)'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTypeDeclarationSQL(array $column) - { - return 'TIMESTAMP(0)'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTzTypeDeclarationSQL(array $column) - { - return 'TIMESTAMP(0) WITH TIME ZONE'; - } - - /** - * {@inheritDoc} - */ - public function getDateTypeDeclarationSQL(array $column) - { - return 'DATE'; - } - - /** - * {@inheritDoc} - */ - public function getTimeTypeDeclarationSQL(array $column) - { - return 'DATE'; - } - - /** - * {@inheritDoc} - */ - protected function _getCommonIntegerTypeDeclarationSQL(array $column) - { - return ''; - } - - /** - * {@inheritDoc} - */ - protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default string column length on Oracle is deprecated' - . ', specify the length explicitly.', - ); - } - - return $fixed ? ($length > 0 ? 'CHAR(' . $length . ')' : 'CHAR(2000)') - : ($length > 0 ? 'VARCHAR2(' . $length . ')' : 'VARCHAR2(4000)'); - } - - /** - * {@inheritDoc} - */ - protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default binary column length on Oracle is deprecated' - . ', specify the length explicitly.', - ); - } - - return 'RAW(' . ($length > 0 ? $length : $this->getBinaryMaxLength()) . ')'; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getBinaryMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'OraclePlatform::getBinaryMaxLength() is deprecated.', - ); - - return 2000; - } - - /** - * {@inheritDoc} - */ - public function getClobTypeDeclarationSQL(array $column) - { - return 'CLOB'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListDatabasesSQL() - { - return 'SELECT username FROM all_users'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListSequencesSQL($database) - { - $database = $this->normalizeIdentifier($database); - $database = $this->quoteStringLiteral($database->getName()); - - return 'SELECT sequence_name, min_value, increment_by FROM sys.all_sequences ' . - 'WHERE SEQUENCE_OWNER = ' . $database; - } - - /** - * {@inheritDoc} - */ - protected function _getCreateTableSQL($name, array $columns, array $options = []) - { - $indexes = $options['indexes'] ?? []; - $options['indexes'] = []; - $sql = parent::_getCreateTableSQL($name, $columns, $options); - - foreach ($columns as $columnName => $column) { - if (isset($column['sequence'])) { - $sql[] = $this->getCreateSequenceSQL($column['sequence']); - } - - if ( - ! isset($column['autoincrement']) || ! $column['autoincrement'] && - (! isset($column['autoinc']) || ! $column['autoinc']) - ) { - continue; - } - - $sql = array_merge($sql, $this->getCreateAutoincrementSql($columnName, $name)); - } - - foreach ($indexes as $index) { - $sql[] = $this->getCreateIndexSQL($index, $name); - } - - return $sql; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - * - * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaOracleReader.html - */ - public function getListTableIndexesSQL($table, $database = null) - { - $table = $this->normalizeIdentifier($table); - $table = $this->quoteStringLiteral($table->getName()); - - return "SELECT uind_col.index_name AS name, - ( - SELECT uind.index_type - FROM user_indexes uind - WHERE uind.index_name = uind_col.index_name - ) AS type, - decode( - ( - SELECT uind.uniqueness - FROM user_indexes uind - WHERE uind.index_name = uind_col.index_name - ), - 'NONUNIQUE', - 0, - 'UNIQUE', - 1 - ) AS is_unique, - uind_col.column_name AS column_name, - uind_col.column_position AS column_pos, - ( - SELECT ucon.constraint_type - FROM user_constraints ucon - WHERE ucon.index_name = uind_col.index_name - AND ucon.table_name = uind_col.table_name - ) AS is_primary - FROM user_ind_columns uind_col - WHERE uind_col.table_name = " . $table . ' - ORDER BY uind_col.column_position ASC'; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTablesSQL() - { - return 'SELECT * FROM sys.user_tables'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListViewsSQL($database) - { - return 'SELECT view_name, text FROM sys.user_views'; - } - - /** - * @internal The method should be only used from within the OraclePlatform class hierarchy. - * - * @param string $name - * @param string $table - * @param int $start - * - * @return string[] - */ - public function getCreateAutoincrementSql($name, $table, $start = 1) - { - $tableIdentifier = $this->normalizeIdentifier($table); - $quotedTableName = $tableIdentifier->getQuotedName($this); - $unquotedTableName = $tableIdentifier->getName(); - - $nameIdentifier = $this->normalizeIdentifier($name); - $quotedName = $nameIdentifier->getQuotedName($this); - $unquotedName = $nameIdentifier->getName(); - - $sql = []; - - $autoincrementIdentifierName = $this->getAutoincrementIdentifierName($tableIdentifier); - - $idx = new Index($autoincrementIdentifierName, [$quotedName], true, true); - - $sql[] = "DECLARE - constraints_Count NUMBER; -BEGIN - SELECT COUNT(CONSTRAINT_NAME) INTO constraints_Count - FROM USER_CONSTRAINTS - WHERE TABLE_NAME = '" . $unquotedTableName . "' - AND CONSTRAINT_TYPE = 'P'; - IF constraints_Count = 0 OR constraints_Count = '' THEN - EXECUTE IMMEDIATE '" . $this->getCreateConstraintSQL($idx, $quotedTableName) . "'; - END IF; -END;"; - - $sequenceName = $this->getIdentitySequenceName( - $tableIdentifier->isQuoted() ? $quotedTableName : $unquotedTableName, - $nameIdentifier->isQuoted() ? $quotedName : $unquotedName, - ); - $sequence = new Sequence($sequenceName, $start); - $sql[] = $this->getCreateSequenceSQL($sequence); - - $sql[] = 'CREATE TRIGGER ' . $autoincrementIdentifierName . ' - BEFORE INSERT - ON ' . $quotedTableName . ' - FOR EACH ROW -DECLARE - last_Sequence NUMBER; - last_InsertID NUMBER; -BEGIN - IF (:NEW.' . $quotedName . ' IS NULL OR :NEW.' . $quotedName . ' = 0) THEN - SELECT ' . $sequenceName . '.NEXTVAL INTO :NEW.' . $quotedName . ' FROM DUAL; - ELSE - SELECT NVL(Last_Number, 0) INTO last_Sequence - FROM User_Sequences - WHERE Sequence_Name = \'' . $sequence->getName() . '\'; - SELECT :NEW.' . $quotedName . ' INTO last_InsertID FROM DUAL; - WHILE (last_InsertID > last_Sequence) LOOP - SELECT ' . $sequenceName . '.NEXTVAL INTO last_Sequence FROM DUAL; - END LOOP; - SELECT ' . $sequenceName . '.NEXTVAL INTO last_Sequence FROM DUAL; - END IF; -END;'; - - return $sql; - } - - /** - * @internal The method should be only used from within the OracleSchemaManager class hierarchy. - * - * Returns the SQL statements to drop the autoincrement for the given table name. - * - * @param string $table The table name to drop the autoincrement for. - * - * @return string[] - */ - public function getDropAutoincrementSql($table) - { - $table = $this->normalizeIdentifier($table); - $autoincrementIdentifierName = $this->getAutoincrementIdentifierName($table); - $identitySequenceName = $this->getIdentitySequenceName( - $table->isQuoted() ? $table->getQuotedName($this) : $table->getName(), - '', - ); - - return [ - 'DROP TRIGGER ' . $autoincrementIdentifierName, - $this->getDropSequenceSQL($identitySequenceName), - $this->getDropConstraintSQL($autoincrementIdentifierName, $table->getQuotedName($this)), - ]; - } - - /** - * Normalizes the given identifier. - * - * Uppercases the given identifier if it is not quoted by intention - * to reflect Oracle's internal auto uppercasing strategy of unquoted identifiers. - * - * @param string $name The identifier to normalize. - */ - private function normalizeIdentifier($name): Identifier - { - $identifier = new Identifier($name); - - return $identifier->isQuoted() ? $identifier : new Identifier(strtoupper($name)); - } - - /** - * Adds suffix to identifier, - * - * if the new string exceeds max identifier length, - * keeps $suffix, cuts from $identifier as much as the part exceeding. - */ - private function addSuffix(string $identifier, string $suffix): string - { - $maxPossibleLengthWithoutSuffix = $this->getMaxIdentifierLength() - strlen($suffix); - if (strlen($identifier) > $maxPossibleLengthWithoutSuffix) { - $identifier = substr($identifier, 0, $maxPossibleLengthWithoutSuffix); - } - - return $identifier . $suffix; - } - - /** - * Returns the autoincrement primary key identifier name for the given table identifier. - * - * Quotes the autoincrement primary key identifier name - * if the given table name is quoted by intention. - */ - private function getAutoincrementIdentifierName(Identifier $table): string - { - $identifierName = $this->addSuffix($table->getName(), '_AI_PK'); - - return $table->isQuoted() - ? $this->quoteSingleIdentifier($identifierName) - : $identifierName; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableForeignKeysSQL($table) - { - $table = $this->normalizeIdentifier($table); - $table = $this->quoteStringLiteral($table->getName()); - - return "SELECT alc.constraint_name, - alc.DELETE_RULE, - cols.column_name \"local_column\", - cols.position, - ( - SELECT r_cols.table_name - FROM user_cons_columns r_cols - WHERE alc.r_constraint_name = r_cols.constraint_name - AND r_cols.position = cols.position - ) AS \"references_table\", - ( - SELECT r_cols.column_name - FROM user_cons_columns r_cols - WHERE alc.r_constraint_name = r_cols.constraint_name - AND r_cols.position = cols.position - ) AS \"foreign_column\" - FROM user_cons_columns cols - JOIN user_constraints alc - ON alc.constraint_name = cols.constraint_name - AND alc.constraint_type = 'R' - AND alc.table_name = " . $table . ' - ORDER BY cols.constraint_name ASC, cols.position ASC'; - } - - /** - * @deprecated - * - * {@inheritDoc} - */ - public function getListTableConstraintsSQL($table) - { - $table = $this->normalizeIdentifier($table); - $table = $this->quoteStringLiteral($table->getName()); - - return 'SELECT * FROM user_constraints WHERE table_name = ' . $table; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableColumnsSQL($table, $database = null) - { - $table = $this->normalizeIdentifier($table); - $table = $this->quoteStringLiteral($table->getName()); - - $tabColumnsTableName = 'user_tab_columns'; - $colCommentsTableName = 'user_col_comments'; - $tabColumnsOwnerCondition = ''; - $colCommentsOwnerCondition = ''; - - if ($database !== null && $database !== '/') { - $database = $this->normalizeIdentifier($database); - $database = $this->quoteStringLiteral($database->getName()); - $tabColumnsTableName = 'all_tab_columns'; - $colCommentsTableName = 'all_col_comments'; - $tabColumnsOwnerCondition = ' AND c.owner = ' . $database; - $colCommentsOwnerCondition = ' AND d.OWNER = c.OWNER'; - } - - return sprintf( - <<<'SQL' -SELECT c.*, - ( - SELECT d.comments - FROM %s d - WHERE d.TABLE_NAME = c.TABLE_NAME%s - AND d.COLUMN_NAME = c.COLUMN_NAME - ) AS comments -FROM %s c -WHERE c.table_name = %s%s -ORDER BY c.column_id -SQL - , - $colCommentsTableName, - $colCommentsOwnerCondition, - $tabColumnsTableName, - $table, - $tabColumnsOwnerCondition, - ); - } - - /** - * {@inheritDoc} - */ - public function getDropForeignKeySQL($foreignKey, $table) - { - if ($foreignKey instanceof ForeignKeyConstraint) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $foreignKey as a ForeignKeyConstraint object to %s is deprecated.' - . ' Pass it as a quoted name instead.', - __METHOD__, - ); - } else { - $foreignKey = new Identifier($foreignKey); - } - - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - } else { - $table = new Identifier($table); - } - - $foreignKey = $foreignKey->getQuotedName($this); - $table = $table->getQuotedName($this); - - return 'ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $foreignKey; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey) - { - $referentialAction = ''; - - if ($foreignKey->hasOption('onDelete')) { - $referentialAction = $this->getForeignKeyReferentialActionSQL($foreignKey->getOption('onDelete')); - } - - if ($referentialAction !== '') { - return ' ON DELETE ' . $referentialAction; - } - - return ''; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getForeignKeyReferentialActionSQL($action) - { - $action = strtoupper($action); - - switch ($action) { - case 'RESTRICT': // RESTRICT is not supported, therefore falling back to NO ACTION. - case 'NO ACTION': - // NO ACTION cannot be declared explicitly, - // therefore returning empty string to indicate to OMIT the referential clause. - return ''; - - case 'CASCADE': - case 'SET NULL': - return $action; - - default: - // SET DEFAULT is not supported, throw exception instead. - throw new InvalidArgumentException('Invalid foreign key action: ' . $action); - } - } - - /** - * {@inheritDoc} - */ - public function getCreateDatabaseSQL($name) - { - return 'CREATE USER ' . $name; - } - - /** - * {@inheritDoc} - */ - public function getDropDatabaseSQL($name) - { - return 'DROP USER ' . $name . ' CASCADE'; - } - - /** - * {@inheritDoc} - */ - public function getAlterTableSQL(TableDiff $diff) - { - $sql = []; - $commentsSQL = []; - $columnSql = []; - - $fields = []; - - $tableNameSQL = ($diff->getOldTable() ?? $diff->getName($this))->getQuotedName($this); - - foreach ($diff->getAddedColumns() as $column) { - if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) { - continue; - } - - $fields[] = $this->getColumnDeclarationSQL($column->getQuotedName($this), $column->toArray()); - $comment = $this->getColumnComment($column); - - if ($comment === null || $comment === '') { - continue; - } - - $commentsSQL[] = $this->getCommentOnColumnSQL( - $tableNameSQL, - $column->getQuotedName($this), - $comment, - ); - } - - if (count($fields) > 0) { - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ADD (' . implode(', ', $fields) . ')'; - } - - $fields = []; - foreach ($diff->getModifiedColumns() as $columnDiff) { - if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) { - continue; - } - - $newColumn = $columnDiff->getNewColumn(); - - // Do not generate column alteration clause if type is binary and only fixed property has changed. - // Oracle only supports binary type columns with variable length. - // Avoids unnecessary table alteration statements. - if ( - $newColumn->getType() instanceof BinaryType && - $columnDiff->hasFixedChanged() && - count($columnDiff->changedProperties) === 1 - ) { - continue; - } - - $columnHasChangedComment = $columnDiff->hasCommentChanged(); - - /** - * Do not add query part if only comment has changed - */ - if (! ($columnHasChangedComment && count($columnDiff->changedProperties) === 1)) { - $newColumnProperties = $newColumn->toArray(); - - if (! $columnDiff->hasNotNullChanged()) { - unset($newColumnProperties['notnull']); - } - - $fields[] = $newColumn->getQuotedName($this) . $this->getColumnDeclarationSQL('', $newColumnProperties); - } - - if (! $columnHasChangedComment) { - continue; - } - - $commentsSQL[] = $this->getCommentOnColumnSQL( - $tableNameSQL, - $newColumn->getQuotedName($this), - $this->getColumnComment($newColumn), - ); - } - - if (count($fields) > 0) { - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' MODIFY (' . implode(', ', $fields) . ')'; - } - - foreach ($diff->getRenamedColumns() as $oldColumnName => $column) { - if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) { - continue; - } - - $oldColumnName = new Identifier($oldColumnName); - - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' RENAME COLUMN ' . $oldColumnName->getQuotedName($this) - . ' TO ' . $column->getQuotedName($this); - } - - $fields = []; - foreach ($diff->getDroppedColumns() as $column) { - if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) { - continue; - } - - $fields[] = $column->getQuotedName($this); - } - - if (count($fields) > 0) { - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' DROP (' . implode(', ', $fields) . ')'; - } - - $tableSql = []; - - if (! $this->onSchemaAlterTable($diff, $tableSql)) { - $sql = array_merge($sql, $commentsSQL); - - $newName = $diff->getNewName(); - - if ($newName !== false) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5663', - 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.', - __METHOD__, - ); - - $sql[] = sprintf( - 'ALTER TABLE %s RENAME TO %s', - $tableNameSQL, - $newName->getQuotedName($this), - ); - } - - $sql = array_merge( - $this->getPreAlterTableIndexForeignKeySQL($diff), - $sql, - $this->getPostAlterTableIndexForeignKeySQL($diff), - ); - } - - return array_merge($sql, $tableSql, $columnSql); - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getColumnDeclarationSQL($name, array $column) - { - if (isset($column['columnDefinition'])) { - $columnDef = $this->getCustomTypeDeclarationSQL($column); - } else { - $default = $this->getDefaultValueDeclarationSQL($column); - - $notnull = ''; - - if (isset($column['notnull'])) { - $notnull = $column['notnull'] ? ' NOT NULL' : ' NULL'; - } - - if (! empty($column['unique'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5656', - 'The usage of the "unique" column property is deprecated. Use unique constraints instead.', - ); - - $unique = ' ' . $this->getUniqueFieldDeclarationSQL(); - } else { - $unique = ''; - } - - if (! empty($column['check'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5656', - 'The usage of the "check" column property is deprecated.', - ); - - $check = ' ' . $column['check']; - } else { - $check = ''; - } - - $typeDecl = $column['type']->getSQLDeclaration($column, $this); - $columnDef = $typeDecl . $default . $notnull . $unique . $check; - } - - return $name . ' ' . $columnDef; - } - - /** - * {@inheritDoc} - */ - protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) - { - if (strpos($tableName, '.') !== false) { - [$schema] = explode('.', $tableName); - $oldIndexName = $schema . '.' . $oldIndexName; - } - - return ['ALTER INDEX ' . $oldIndexName . ' RENAME TO ' . $index->getQuotedName($this)]; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function usesSequenceEmulatedIdentityColumns() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the OraclePlatform class hierarchy. - */ - public function getIdentitySequenceName($tableName, $columnName) - { - $table = new Identifier($tableName); - - // No usage of column name to preserve BC compatibility with <2.5 - $identitySequenceName = $this->addSuffix($table->getName(), '_SEQ'); - - if ($table->isQuoted()) { - $identitySequenceName = '"' . $identitySequenceName . '"'; - } - - $identitySequenceIdentifier = $this->normalizeIdentifier($identitySequenceName); - - return $identitySequenceIdentifier->getQuotedName($this); - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsCommentOnStatement() - { - return true; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4749', - 'OraclePlatform::getName() is deprecated. Identify platforms by their class.', - ); - - return 'oracle'; - } - - /** - * {@inheritDoc} - */ - protected function doModifyLimitQuery($query, $limit, $offset) - { - if ($limit === null && $offset <= 0) { - return $query; - } - - if (preg_match('/^\s*SELECT/i', $query) === 1) { - if (preg_match('/\sFROM\s/i', $query) === 0) { - $query .= ' FROM dual'; - } - - $columns = ['a.*']; - - if ($offset > 0) { - $columns[] = 'ROWNUM AS doctrine_rownum'; - } - - $query = sprintf('SELECT %s FROM (%s) a', implode(', ', $columns), $query); - - if ($limit !== null) { - $query .= sprintf(' WHERE ROWNUM <= %d', $offset + $limit); - } - - if ($offset > 0) { - $query = sprintf('SELECT * FROM (%s) WHERE doctrine_rownum >= %d', $query, $offset + 1); - } - } - - return $query; - } - - /** - * {@inheritDoc} - */ - public function getCreateTemporaryTableSnippetSQL() - { - return 'CREATE GLOBAL TEMPORARY TABLE'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTzFormatString() - { - return 'Y-m-d H:i:sP'; - } - - /** - * {@inheritDoc} - */ - public function getDateFormatString() - { - return 'Y-m-d 00:00:00'; - } - - /** - * {@inheritDoc} - */ - public function getTimeFormatString() - { - return '1900-01-01 H:i:s'; - } - - /** - * {@inheritDoc} - */ - public function getMaxIdentifierLength() - { - return 30; - } - - /** - * {@inheritDoc} - */ - public function supportsSequences() - { - return true; - } - - /** - * {@inheritDoc} - */ - public function supportsReleaseSavepoints() - { - return false; - } - - /** - * {@inheritDoc} - */ - public function getTruncateTableSQL($tableName, $cascade = false) - { - $tableIdentifier = new Identifier($tableName); - - return 'TRUNCATE TABLE ' . $tableIdentifier->getQuotedName($this); - } - - /** - * {@inheritDoc} - */ - public function getDummySelectSQL() - { - $expression = func_num_args() > 0 ? func_get_arg(0) : '1'; - - return sprintf('SELECT %s FROM DUAL', $expression); - } - - /** - * {@inheritDoc} - */ - protected function initializeDoctrineTypeMappings() - { - $this->doctrineTypeMapping = [ - 'binary_double' => Types::FLOAT, - 'binary_float' => Types::FLOAT, - 'binary_integer' => Types::BOOLEAN, - 'blob' => Types::BLOB, - 'char' => Types::STRING, - 'clob' => Types::TEXT, - 'date' => Types::DATE_MUTABLE, - 'float' => Types::FLOAT, - 'integer' => Types::INTEGER, - 'long' => Types::STRING, - 'long raw' => Types::BLOB, - 'nchar' => Types::STRING, - 'nclob' => Types::TEXT, - 'number' => Types::INTEGER, - 'nvarchar2' => Types::STRING, - 'pls_integer' => Types::BOOLEAN, - 'raw' => Types::BINARY, - 'rowid' => Types::STRING, - 'timestamp' => Types::DATETIME_MUTABLE, - 'timestamptz' => Types::DATETIMETZ_MUTABLE, - 'urowid' => Types::STRING, - 'varchar' => Types::STRING, - 'varchar2' => Types::STRING, - ]; - } - - /** - * {@inheritDoc} - */ - public function releaseSavePoint($savepoint) - { - return ''; - } - - /** - * {@inheritDoc} - * - * @deprecated Implement {@see createReservedKeywordsList()} instead. - */ - protected function getReservedKeywordsClass() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - 'OraclePlatform::getReservedKeywordsClass() is deprecated,' - . ' use OraclePlatform::createReservedKeywordsList() instead.', - ); - - return Keywords\OracleKeywords::class; - } - - /** - * {@inheritDoc} - */ - public function getBlobTypeDeclarationSQL(array $column) - { - return 'BLOB'; - } - - /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */ - public function getListTableCommentsSQL(string $table, ?string $database = null): string - { - $tableCommentsName = 'user_tab_comments'; - $ownerCondition = ''; - - if ($database !== null && $database !== '/') { - $tableCommentsName = 'all_tab_comments'; - $ownerCondition = ' AND owner = ' . $this->quoteStringLiteral( - $this->normalizeIdentifier($database)->getName(), - ); - } - - return sprintf( - <<<'SQL' -SELECT comments FROM %s WHERE table_name = %s%s -SQL - , - $tableCommentsName, - $this->quoteStringLiteral($this->normalizeIdentifier($table)->getName()), - $ownerCondition, - ); - } - - public function createSchemaManager(Connection $connection): OracleSchemaManager - { - return new OracleSchemaManager($connection, $this); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/PostgreSQL100Platform.php b/vendor/doctrine/dbal/src/Platforms/PostgreSQL100Platform.php deleted file mode 100644 index 6ee1f90..0000000 --- a/vendor/doctrine/dbal/src/Platforms/PostgreSQL100Platform.php +++ /dev/null @@ -1,36 +0,0 @@ - [ - 't', - 'true', - 'y', - 'yes', - 'on', - '1', - ], - 'false' => [ - 'f', - 'false', - 'n', - 'no', - 'off', - '0', - ], - ]; - - /** - * PostgreSQL has different behavior with some drivers - * with regard to how booleans have to be handled. - * - * Enables use of 'true'/'false' or otherwise 1 and 0 instead. - * - * @param bool $flag - * - * @return void - */ - public function setUseBooleanTrueFalseStrings($flag) - { - $this->useBooleanTrueFalseStrings = (bool) $flag; - } - - /** - * {@inheritDoc} - */ - public function getSubstringExpression($string, $start, $length = null) - { - if ($length === null) { - return 'SUBSTRING(' . $string . ' FROM ' . $start . ')'; - } - - return 'SUBSTRING(' . $string . ' FROM ' . $start . ' FOR ' . $length . ')'; - } - - /** - * {@inheritDoc} - * - * @deprecated Generate dates within the application. - */ - public function getNowExpression() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4753', - 'PostgreSQLPlatform::getNowExpression() is deprecated. Generate dates within the application.', - ); - - return 'LOCALTIMESTAMP(0)'; - } - - /** - * {@inheritDoc} - */ - public function getRegexpExpression() - { - return 'SIMILAR TO'; - } - - /** - * {@inheritDoc} - */ - public function getLocateExpression($str, $substr, $startPos = false) - { - if ($startPos !== false) { - $str = $this->getSubstringExpression($str, $startPos); - - return 'CASE WHEN (POSITION(' . $substr . ' IN ' . $str . ') = 0) THEN 0' - . ' ELSE (POSITION(' . $substr . ' IN ' . $str . ') + ' . $startPos . ' - 1) END'; - } - - return 'POSITION(' . $substr . ' IN ' . $str . ')'; - } - - /** - * {@inheritDoc} - */ - protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) - { - if ($unit === DateIntervalUnit::QUARTER) { - $interval = $this->multiplyInterval((string) $interval, 3); - $unit = DateIntervalUnit::MONTH; - } - - return '(' . $date . ' ' . $operator . ' (' . $interval . " || ' " . $unit . "')::interval)"; - } - - /** - * {@inheritDoc} - */ - public function getDateDiffExpression($date1, $date2) - { - return '(DATE(' . $date1 . ')-DATE(' . $date2 . '))'; - } - - public function getCurrentDatabaseExpression(): string - { - return 'CURRENT_DATABASE()'; - } - - /** - * {@inheritDoc} - */ - public function supportsSequences() - { - return true; - } - - /** - * {@inheritDoc} - */ - public function supportsSchemas() - { - return true; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getDefaultSchemaName() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s is deprecated.', - __METHOD__, - ); - - return 'public'; - } - - /** - * {@inheritDoc} - */ - public function supportsIdentityColumns() - { - return true; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsPartialIndexes() - { - return true; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function usesSequenceEmulatedIdentityColumns() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getIdentitySequenceName($tableName, $columnName) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s is deprecated.', - __METHOD__, - ); - - return $tableName . '_' . $columnName . '_seq'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsCommentOnStatement() - { - return true; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function hasNativeGuidType() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } - - public function createSelectSQLBuilder(): SelectSQLBuilder - { - return new DefaultSelectSQLBuilder($this, 'FOR UPDATE', null); - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListDatabasesSQL() - { - return 'SELECT datname FROM pg_database'; - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see PostgreSQLSchemaManager::listSchemaNames()} instead. - */ - public function getListNamespacesSQL() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'PostgreSQLPlatform::getListNamespacesSQL() is deprecated,' - . ' use PostgreSQLSchemaManager::listSchemaNames() instead.', - ); - - return "SELECT schema_name AS nspname - FROM information_schema.schemata - WHERE schema_name NOT LIKE 'pg\_%' - AND schema_name != 'information_schema'"; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListSequencesSQL($database) - { - return 'SELECT sequence_name AS relname, - sequence_schema AS schemaname, - minimum_value AS min_value, - increment AS increment_by - FROM information_schema.sequences - WHERE sequence_catalog = ' . $this->quoteStringLiteral($database) . " - AND sequence_schema NOT LIKE 'pg\_%' - AND sequence_schema != 'information_schema'"; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTablesSQL() - { - return "SELECT quote_ident(table_name) AS table_name, - table_schema AS schema_name - FROM information_schema.tables - WHERE table_schema NOT LIKE 'pg\_%' - AND table_schema != 'information_schema' - AND table_name != 'geometry_columns' - AND table_name != 'spatial_ref_sys' - AND table_type != 'VIEW'"; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListViewsSQL($database) - { - return 'SELECT quote_ident(table_name) AS viewname, - table_schema AS schemaname, - view_definition AS definition - FROM information_schema.views - WHERE view_definition IS NOT NULL'; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * @param string $table - * @param string|null $database - * - * @return string - */ - public function getListTableForeignKeysSQL($table, $database = null) - { - return 'SELECT quote_ident(r.conname) as conname, pg_catalog.pg_get_constraintdef(r.oid, true) as condef - FROM pg_catalog.pg_constraint r - WHERE r.conrelid = - ( - SELECT c.oid - FROM pg_catalog.pg_class c, pg_catalog.pg_namespace n - WHERE ' . $this->getTableWhereClause($table) . " AND n.oid = c.relnamespace - ) - AND r.contype = 'f'"; - } - - /** - * @deprecated - * - * {@inheritDoc} - */ - public function getListTableConstraintsSQL($table) - { - $table = new Identifier($table); - $table = $this->quoteStringLiteral($table->getName()); - - return sprintf( - <<<'SQL' -SELECT - quote_ident(relname) as relname -FROM - pg_class -WHERE oid IN ( - SELECT indexrelid - FROM pg_index, pg_class - WHERE pg_class.relname = %s - AND pg_class.oid = pg_index.indrelid - AND (indisunique = 't' OR indisprimary = 't') - ) -SQL - , - $table, - ); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - * - * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html - */ - public function getListTableIndexesSQL($table, $database = null) - { - return 'SELECT quote_ident(relname) as relname, pg_index.indisunique, pg_index.indisprimary, - pg_index.indkey, pg_index.indrelid, - pg_get_expr(indpred, indrelid) AS where - FROM pg_class, pg_index - WHERE oid IN ( - SELECT indexrelid - FROM pg_index si, pg_class sc, pg_namespace sn - WHERE ' . $this->getTableWhereClause($table, 'sc', 'sn') . ' - AND sc.oid=si.indrelid AND sc.relnamespace = sn.oid - ) AND pg_index.indexrelid = oid'; - } - - /** - * @param string $table - * @param string $classAlias - * @param string $namespaceAlias - */ - private function getTableWhereClause($table, $classAlias = 'c', $namespaceAlias = 'n'): string - { - $whereClause = $namespaceAlias . ".nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast') AND "; - if (strpos($table, '.') !== false) { - [$schema, $table] = explode('.', $table); - $schema = $this->quoteStringLiteral($schema); - } else { - $schema = 'ANY(current_schemas(false))'; - } - - $table = new Identifier($table); - $table = $this->quoteStringLiteral($table->getName()); - - return $whereClause . sprintf( - '%s.relname = %s AND %s.nspname = %s', - $classAlias, - $table, - $namespaceAlias, - $schema, - ); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableColumnsSQL($table, $database = null) - { - return "SELECT - a.attnum, - quote_ident(a.attname) AS field, - t.typname AS type, - format_type(a.atttypid, a.atttypmod) AS complete_type, - (SELECT tc.collcollate FROM pg_catalog.pg_collation tc WHERE tc.oid = a.attcollation) AS collation, - (SELECT t1.typname FROM pg_catalog.pg_type t1 WHERE t1.oid = t.typbasetype) AS domain_type, - (SELECT format_type(t2.typbasetype, t2.typtypmod) FROM - pg_catalog.pg_type t2 WHERE t2.typtype = 'd' AND t2.oid = a.atttypid) AS domain_complete_type, - a.attnotnull AS isnotnull, - (SELECT 't' - FROM pg_index - WHERE c.oid = pg_index.indrelid - AND pg_index.indkey[0] = a.attnum - AND pg_index.indisprimary = 't' - ) AS pri, - (SELECT pg_get_expr(adbin, adrelid) - FROM pg_attrdef - WHERE c.oid = pg_attrdef.adrelid - AND pg_attrdef.adnum=a.attnum - ) AS default, - (SELECT pg_description.description - FROM pg_description WHERE pg_description.objoid = c.oid AND a.attnum = pg_description.objsubid - ) AS comment - FROM pg_attribute a, pg_class c, pg_type t, pg_namespace n - WHERE " . $this->getTableWhereClause($table, 'c', 'n') . ' - AND a.attnum > 0 - AND a.attrelid = c.oid - AND a.atttypid = t.oid - AND n.oid = c.relnamespace - ORDER BY a.attnum'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey) - { - $query = ''; - - if ($foreignKey->hasOption('match')) { - $query .= ' MATCH ' . $foreignKey->getOption('match'); - } - - $query .= parent::getAdvancedForeignKeyOptionsSQL($foreignKey); - - if ($foreignKey->hasOption('deferrable') && $foreignKey->getOption('deferrable') !== false) { - $query .= ' DEFERRABLE'; - } else { - $query .= ' NOT DEFERRABLE'; - } - - if ( - ($foreignKey->hasOption('feferred') && $foreignKey->getOption('feferred') !== false) - || ($foreignKey->hasOption('deferred') && $foreignKey->getOption('deferred') !== false) - ) { - $query .= ' INITIALLY DEFERRED'; - } else { - $query .= ' INITIALLY IMMEDIATE'; - } - - return $query; - } - - /** - * {@inheritDoc} - */ - public function getAlterTableSQL(TableDiff $diff) - { - $sql = []; - $commentsSQL = []; - $columnSql = []; - - $table = $diff->getOldTable() ?? $diff->getName($this); - - $tableNameSQL = $table->getQuotedName($this); - - foreach ($diff->getAddedColumns() as $addedColumn) { - if ($this->onSchemaAlterTableAddColumn($addedColumn, $diff, $columnSql)) { - continue; - } - - $query = 'ADD ' . $this->getColumnDeclarationSQL( - $addedColumn->getQuotedName($this), - $addedColumn->toArray(), - ); - - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query; - - $comment = $this->getColumnComment($addedColumn); - - if ($comment === null || $comment === '') { - continue; - } - - $commentsSQL[] = $this->getCommentOnColumnSQL( - $tableNameSQL, - $addedColumn->getQuotedName($this), - $comment, - ); - } - - foreach ($diff->getDroppedColumns() as $droppedColumn) { - if ($this->onSchemaAlterTableRemoveColumn($droppedColumn, $diff, $columnSql)) { - continue; - } - - $query = 'DROP ' . $droppedColumn->getQuotedName($this); - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query; - } - - foreach ($diff->getModifiedColumns() as $columnDiff) { - if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) { - continue; - } - - if ($this->isUnchangedBinaryColumn($columnDiff)) { - continue; - } - - $oldColumn = $columnDiff->getOldColumn() ?? $columnDiff->getOldColumnName(); - $newColumn = $columnDiff->getNewColumn(); - - $oldColumnName = $oldColumn->getQuotedName($this); - - if ( - $columnDiff->hasTypeChanged() - || $columnDiff->hasPrecisionChanged() - || $columnDiff->hasScaleChanged() - || $columnDiff->hasFixedChanged() - ) { - $type = $newColumn->getType(); - - // SERIAL/BIGSERIAL are not "real" types and we can't alter a column to that type - $columnDefinition = $newColumn->toArray(); - $columnDefinition['autoincrement'] = false; - - // here was a server version check before, but DBAL API does not support this anymore. - $query = 'ALTER ' . $oldColumnName . ' TYPE ' . $type->getSQLDeclaration($columnDefinition, $this); - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query; - } - - if ($columnDiff->hasDefaultChanged()) { - $defaultClause = $newColumn->getDefault() === null - ? ' DROP DEFAULT' - : ' SET' . $this->getDefaultValueDeclarationSQL($newColumn->toArray()); - - $query = 'ALTER ' . $oldColumnName . $defaultClause; - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query; - } - - if ($columnDiff->hasNotNullChanged()) { - $query = 'ALTER ' . $oldColumnName . ' ' . ($newColumn->getNotnull() ? 'SET' : 'DROP') . ' NOT NULL'; - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query; - } - - if ($columnDiff->hasAutoIncrementChanged()) { - if ($newColumn->getAutoincrement()) { - // add autoincrement - $seqName = $this->getIdentitySequenceName( - $table->getName(), - $oldColumnName, - ); - - $sql[] = 'CREATE SEQUENCE ' . $seqName; - $sql[] = "SELECT setval('" . $seqName . "', (SELECT MAX(" . $oldColumnName . ') FROM ' - . $tableNameSQL . '))'; - $query = 'ALTER ' . $oldColumnName . " SET DEFAULT nextval('" . $seqName . "')"; - } else { - // Drop autoincrement, but do NOT drop the sequence. It might be re-used by other tables or have - $query = 'ALTER ' . $oldColumnName . ' DROP DEFAULT'; - } - - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query; - } - - $oldComment = $this->getOldColumnComment($columnDiff); - $newComment = $this->getColumnComment($newColumn); - - if ( - $columnDiff->hasCommentChanged() - || ($columnDiff->getOldColumn() !== null && $oldComment !== $newComment) - ) { - $commentsSQL[] = $this->getCommentOnColumnSQL( - $tableNameSQL, - $newColumn->getQuotedName($this), - $newComment, - ); - } - - if (! $columnDiff->hasLengthChanged()) { - continue; - } - - $query = 'ALTER ' . $oldColumnName . ' TYPE ' - . $newColumn->getType()->getSQLDeclaration($newColumn->toArray(), $this); - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query; - } - - foreach ($diff->getRenamedColumns() as $oldColumnName => $column) { - if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) { - continue; - } - - $oldColumnName = new Identifier($oldColumnName); - - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' RENAME COLUMN ' . $oldColumnName->getQuotedName($this) - . ' TO ' . $column->getQuotedName($this); - } - - $tableSql = []; - - if (! $this->onSchemaAlterTable($diff, $tableSql)) { - $sql = array_merge($sql, $commentsSQL); - - $newName = $diff->getNewName(); - - if ($newName !== false) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5663', - 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.', - __METHOD__, - ); - - $sql[] = sprintf( - 'ALTER TABLE %s RENAME TO %s', - $tableNameSQL, - $newName->getQuotedName($this), - ); - } - - $sql = array_merge( - $this->getPreAlterTableIndexForeignKeySQL($diff), - $sql, - $this->getPostAlterTableIndexForeignKeySQL($diff), - ); - } - - return array_merge($sql, $tableSql, $columnSql); - } - - /** - * Checks whether a given column diff is a logically unchanged binary type column. - * - * Used to determine whether a column alteration for a binary type column can be skipped. - * Doctrine's {@see BinaryType} and {@see BlobType} are mapped to the same database column type on this platform - * as this platform does not have a native VARBINARY/BINARY column type. Therefore the comparator - * might detect differences for binary type columns which do not have to be propagated - * to database as there actually is no difference at database level. - */ - private function isUnchangedBinaryColumn(ColumnDiff $columnDiff): bool - { - $newColumnType = $columnDiff->getNewColumn()->getType(); - - if (! $newColumnType instanceof BinaryType && ! $newColumnType instanceof BlobType) { - return false; - } - - $oldColumn = $columnDiff->getOldColumn() instanceof Column ? $columnDiff->getOldColumn() : null; - - if ($oldColumn !== null) { - $oldColumnType = $oldColumn->getType(); - - if (! $oldColumnType instanceof BinaryType && ! $oldColumnType instanceof BlobType) { - return false; - } - - return count(array_diff($columnDiff->changedProperties, ['type', 'length', 'fixed'])) === 0; - } - - if ($columnDiff->hasTypeChanged()) { - return false; - } - - return count(array_diff($columnDiff->changedProperties, ['length', 'fixed'])) === 0; - } - - /** - * {@inheritDoc} - */ - protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) - { - if (strpos($tableName, '.') !== false) { - [$schema] = explode('.', $tableName); - $oldIndexName = $schema . '.' . $oldIndexName; - } - - return ['ALTER INDEX ' . $oldIndexName . ' RENAME TO ' . $index->getQuotedName($this)]; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getCommentOnColumnSQL($tableName, $columnName, $comment) - { - $tableName = new Identifier($tableName); - $columnName = new Identifier($columnName); - $comment = $comment === null ? 'NULL' : $this->quoteStringLiteral($comment); - - return sprintf( - 'COMMENT ON COLUMN %s.%s IS %s', - $tableName->getQuotedName($this), - $columnName->getQuotedName($this), - $comment, - ); - } - - /** - * {@inheritDoc} - */ - public function getCreateSequenceSQL(Sequence $sequence) - { - return 'CREATE SEQUENCE ' . $sequence->getQuotedName($this) . - ' INCREMENT BY ' . $sequence->getAllocationSize() . - ' MINVALUE ' . $sequence->getInitialValue() . - ' START ' . $sequence->getInitialValue() . - $this->getSequenceCacheSQL($sequence); - } - - /** - * {@inheritDoc} - */ - public function getAlterSequenceSQL(Sequence $sequence) - { - return 'ALTER SEQUENCE ' . $sequence->getQuotedName($this) . - ' INCREMENT BY ' . $sequence->getAllocationSize() . - $this->getSequenceCacheSQL($sequence); - } - - /** - * Cache definition for sequences - */ - private function getSequenceCacheSQL(Sequence $sequence): string - { - if ($sequence->getCache() > 1) { - return ' CACHE ' . $sequence->getCache(); - } - - return ''; - } - - /** - * {@inheritDoc} - */ - public function getDropSequenceSQL($sequence) - { - return parent::getDropSequenceSQL($sequence) . ' CASCADE'; - } - - /** - * {@inheritDoc} - */ - public function getDropForeignKeySQL($foreignKey, $table) - { - return $this->getDropConstraintSQL($foreignKey, $table); - } - - /** - * {@inheritDoc} - */ - public function getDropIndexSQL($index, $table = null) - { - if ($index instanceof Index && $index->isPrimary() && $table !== null) { - $constraintName = $index->getName() === 'primary' ? $this->tableName($table) . '_pkey' : $index->getName(); - - return $this->getDropConstraintSQL($constraintName, $table); - } - - if ($index === '"primary"' && $table !== null) { - $constraintName = $this->tableName($table) . '_pkey'; - - return $this->getDropConstraintSQL($constraintName, $table); - } - - return parent::getDropIndexSQL($index, $table); - } - - /** - * @param Table|string|null $table - * - * @return string - */ - private function tableName($table) - { - return $table instanceof Table ? $table->getName() : (string) $table; - } - - /** - * {@inheritDoc} - */ - protected function _getCreateTableSQL($name, array $columns, array $options = []) - { - $queryFields = $this->getColumnDeclarationListSQL($columns); - - if (isset($options['primary']) && ! empty($options['primary'])) { - $keyColumns = array_unique(array_values($options['primary'])); - $queryFields .= ', PRIMARY KEY(' . implode(', ', $keyColumns) . ')'; - } - - $unlogged = isset($options['unlogged']) && $options['unlogged'] === true ? ' UNLOGGED' : ''; - - $query = 'CREATE' . $unlogged . ' TABLE ' . $name . ' (' . $queryFields . ')'; - - $sql = [$query]; - - if (isset($options['indexes']) && ! empty($options['indexes'])) { - foreach ($options['indexes'] as $index) { - $sql[] = $this->getCreateIndexSQL($index, $name); - } - } - - if (isset($options['uniqueConstraints'])) { - foreach ($options['uniqueConstraints'] as $uniqueConstraint) { - $sql[] = $this->getCreateConstraintSQL($uniqueConstraint, $name); - } - } - - if (isset($options['foreignKeys'])) { - foreach ($options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $name); - } - } - - return $sql; - } - - /** - * Converts a single boolean value. - * - * First converts the value to its native PHP boolean type - * and passes it to the given callback function to be reconverted - * into any custom representation. - * - * @param mixed $value The value to convert. - * @param callable $callback The callback function to use for converting the real boolean value. - * - * @return mixed - * - * @throws UnexpectedValueException - */ - private function convertSingleBooleanValue($value, $callback) - { - if ($value === null) { - return $callback(null); - } - - if (is_bool($value) || is_numeric($value)) { - return $callback((bool) $value); - } - - if (! is_string($value)) { - return $callback(true); - } - - /** - * Better safe than sorry: http://php.net/in_array#106319 - */ - if (in_array(strtolower(trim($value)), $this->booleanLiterals['false'], true)) { - return $callback(false); - } - - if (in_array(strtolower(trim($value)), $this->booleanLiterals['true'], true)) { - return $callback(true); - } - - throw new UnexpectedValueException(sprintf("Unrecognized boolean literal '%s'", $value)); - } - - /** - * Converts one or multiple boolean values. - * - * First converts the value(s) to their native PHP boolean type - * and passes them to the given callback function to be reconverted - * into any custom representation. - * - * @param mixed $item The value(s) to convert. - * @param callable $callback The callback function to use for converting the real boolean value(s). - * - * @return mixed - */ - private function doConvertBooleans($item, $callback) - { - if (is_array($item)) { - foreach ($item as $key => $value) { - $item[$key] = $this->convertSingleBooleanValue($value, $callback); - } - - return $item; - } - - return $this->convertSingleBooleanValue($item, $callback); - } - - /** - * {@inheritDoc} - * - * Postgres wants boolean values converted to the strings 'true'/'false'. - */ - public function convertBooleans($item) - { - if (! $this->useBooleanTrueFalseStrings) { - return parent::convertBooleans($item); - } - - return $this->doConvertBooleans( - $item, - /** @param mixed $value */ - static function ($value) { - if ($value === null) { - return 'NULL'; - } - - return $value === true ? 'true' : 'false'; - }, - ); - } - - /** - * {@inheritDoc} - */ - public function convertBooleansToDatabaseValue($item) - { - if (! $this->useBooleanTrueFalseStrings) { - return parent::convertBooleansToDatabaseValue($item); - } - - return $this->doConvertBooleans( - $item, - /** @param mixed $value */ - static function ($value): ?int { - return $value === null ? null : (int) $value; - }, - ); - } - - /** - * {@inheritDoc} - * - * @param T $item - * - * @return (T is null ? null : bool) - * - * @template T - */ - public function convertFromBoolean($item) - { - if ($item !== null && in_array(strtolower($item), $this->booleanLiterals['false'], true)) { - return false; - } - - return parent::convertFromBoolean($item); - } - - /** - * {@inheritDoc} - */ - public function getSequenceNextValSQL($sequence) - { - return "SELECT NEXTVAL('" . $sequence . "')"; - } - - /** - * {@inheritDoc} - */ - public function getSetTransactionIsolationSQL($level) - { - return 'SET SESSION CHARACTERISTICS AS TRANSACTION ISOLATION LEVEL ' - . $this->_getTransactionIsolationLevelSQL($level); - } - - /** - * {@inheritDoc} - */ - public function getBooleanTypeDeclarationSQL(array $column) - { - return 'BOOLEAN'; - } - - /** - * {@inheritDoc} - */ - public function getIntegerTypeDeclarationSQL(array $column) - { - if (! empty($column['autoincrement'])) { - return 'SERIAL'; - } - - return 'INT'; - } - - /** - * {@inheritDoc} - */ - public function getBigIntTypeDeclarationSQL(array $column) - { - if (! empty($column['autoincrement'])) { - return 'BIGSERIAL'; - } - - return 'BIGINT'; - } - - /** - * {@inheritDoc} - */ - public function getSmallIntTypeDeclarationSQL(array $column) - { - if (! empty($column['autoincrement'])) { - return 'SMALLSERIAL'; - } - - return 'SMALLINT'; - } - - /** - * {@inheritDoc} - */ - public function getGuidTypeDeclarationSQL(array $column) - { - return 'UUID'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTypeDeclarationSQL(array $column) - { - return 'TIMESTAMP(0) WITHOUT TIME ZONE'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTzTypeDeclarationSQL(array $column) - { - return 'TIMESTAMP(0) WITH TIME ZONE'; - } - - /** - * {@inheritDoc} - */ - public function getDateTypeDeclarationSQL(array $column) - { - return 'DATE'; - } - - /** - * {@inheritDoc} - */ - public function getTimeTypeDeclarationSQL(array $column) - { - return 'TIME(0) WITHOUT TIME ZONE'; - } - - /** - * {@inheritDoc} - */ - protected function _getCommonIntegerTypeDeclarationSQL(array $column) - { - return ''; - } - - /** - * {@inheritDoc} - */ - protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed) - { - return $fixed ? ($length > 0 ? 'CHAR(' . $length . ')' : 'CHAR(255)') - : ($length > 0 ? 'VARCHAR(' . $length . ')' : 'VARCHAR(255)'); - } - - /** - * {@inheritDoc} - */ - protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed) - { - return 'BYTEA'; - } - - /** - * {@inheritDoc} - */ - public function getClobTypeDeclarationSQL(array $column) - { - return 'TEXT'; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4749', - 'PostgreSQLPlatform::getName() is deprecated. Identify platforms by their class.', - ); - - return 'postgresql'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTzFormatString() - { - return 'Y-m-d H:i:sO'; - } - - /** - * {@inheritDoc} - */ - public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName) - { - return 'INSERT INTO ' . $quotedTableName . ' (' . $quotedIdentifierColumnName . ') VALUES (DEFAULT)'; - } - - /** - * {@inheritDoc} - */ - public function getTruncateTableSQL($tableName, $cascade = false) - { - $tableIdentifier = new Identifier($tableName); - $sql = 'TRUNCATE ' . $tableIdentifier->getQuotedName($this); - - if ($cascade) { - $sql .= ' CASCADE'; - } - - return $sql; - } - - /** - * Get the snippet used to retrieve the default value for a given column - */ - public function getDefaultColumnValueSQLSnippet(): string - { - return <<<'SQL' - SELECT pg_get_expr(adbin, adrelid) - FROM pg_attrdef - WHERE c.oid = pg_attrdef.adrelid - AND pg_attrdef.adnum=a.attnum - SQL; - } - - /** - * {@inheritDoc} - */ - public function getReadLockSQL() - { - return 'FOR SHARE'; - } - - /** - * {@inheritDoc} - */ - protected function initializeDoctrineTypeMappings() - { - $this->doctrineTypeMapping = [ - 'bigint' => Types::BIGINT, - 'bigserial' => Types::BIGINT, - 'bool' => Types::BOOLEAN, - 'boolean' => Types::BOOLEAN, - 'bpchar' => Types::STRING, - 'bytea' => Types::BLOB, - 'char' => Types::STRING, - 'date' => Types::DATE_MUTABLE, - 'datetime' => Types::DATETIME_MUTABLE, - 'decimal' => Types::DECIMAL, - 'double' => Types::FLOAT, - 'double precision' => Types::FLOAT, - 'float' => Types::FLOAT, - 'float4' => Types::FLOAT, - 'float8' => Types::FLOAT, - 'inet' => Types::STRING, - 'int' => Types::INTEGER, - 'int2' => Types::SMALLINT, - 'int4' => Types::INTEGER, - 'int8' => Types::BIGINT, - 'integer' => Types::INTEGER, - 'interval' => Types::STRING, - 'json' => Types::JSON, - 'jsonb' => Types::JSON, - 'money' => Types::DECIMAL, - 'numeric' => Types::DECIMAL, - 'serial' => Types::INTEGER, - 'serial4' => Types::INTEGER, - 'serial8' => Types::BIGINT, - 'real' => Types::FLOAT, - 'smallint' => Types::SMALLINT, - 'text' => Types::TEXT, - 'time' => Types::TIME_MUTABLE, - 'timestamp' => Types::DATETIME_MUTABLE, - 'timestamptz' => Types::DATETIMETZ_MUTABLE, - 'timetz' => Types::TIME_MUTABLE, - 'tsvector' => Types::TEXT, - 'uuid' => Types::GUID, - 'varchar' => Types::STRING, - 'year' => Types::DATE_MUTABLE, - '_varchar' => Types::STRING, - ]; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getVarcharMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'PostgreSQLPlatform::getVarcharMaxLength() is deprecated.', - ); - - return 65535; - } - - /** - * {@inheritDoc} - */ - public function getBinaryMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'PostgreSQLPlatform::getBinaryMaxLength() is deprecated.', - ); - - return 0; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getBinaryDefaultLength() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default binary column length is deprecated, specify the length explicitly.', - ); - - return 0; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function hasNativeJsonType() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } - - /** - * {@inheritDoc} - * - * @deprecated Implement {@see createReservedKeywordsList()} instead. - */ - protected function getReservedKeywordsClass() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - 'PostgreSQLPlatform::getReservedKeywordsClass() is deprecated,' - . ' use PostgreSQLPlatform::createReservedKeywordsList() instead.', - ); - - return Keywords\PostgreSQL94Keywords::class; - } - - /** - * {@inheritDoc} - */ - public function getBlobTypeDeclarationSQL(array $column) - { - return 'BYTEA'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getDefaultValueDeclarationSQL($column) - { - if (isset($column['autoincrement']) && $column['autoincrement'] === true) { - return ''; - } - - return parent::getDefaultValueDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsColumnCollation() - { - return true; - } - - /** - * {@inheritDoc} - */ - public function getJsonTypeDeclarationSQL(array $column) - { - if (! empty($column['jsonb'])) { - return 'JSONB'; - } - - return 'JSON'; - } - - private function getOldColumnComment(ColumnDiff $columnDiff): ?string - { - $oldColumn = $columnDiff->getOldColumn(); - - if ($oldColumn !== null) { - return $this->getColumnComment($oldColumn); - } - - return null; - } - - /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */ - public function getListTableMetadataSQL(string $table, ?string $schema = null): string - { - if ($schema !== null) { - $table = $schema . '.' . $table; - } - - return sprintf( - <<<'SQL' -SELECT obj_description(%s::regclass) AS table_comment; -SQL - , - $this->quoteStringLiteral($table), - ); - } - - public function createSchemaManager(Connection $connection): PostgreSQLSchemaManager - { - return new PostgreSQLSchemaManager($connection, $this); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/SQLServer/Comparator.php b/vendor/doctrine/dbal/src/Platforms/SQLServer/Comparator.php deleted file mode 100644 index 41ef422..0000000 --- a/vendor/doctrine/dbal/src/Platforms/SQLServer/Comparator.php +++ /dev/null @@ -1,63 +0,0 @@ -databaseCollation = $databaseCollation; - } - - public function compareTables(Table $fromTable, Table $toTable): TableDiff - { - return parent::compareTables( - $this->normalizeColumns($fromTable), - $this->normalizeColumns($toTable), - ); - } - - /** - * {@inheritDoc} - */ - public function diffTable(Table $fromTable, Table $toTable) - { - return parent::diffTable( - $this->normalizeColumns($fromTable), - $this->normalizeColumns($toTable), - ); - } - - private function normalizeColumns(Table $table): Table - { - $table = clone $table; - - foreach ($table->getColumns() as $column) { - $options = $column->getPlatformOptions(); - - if (! isset($options['collation']) || $options['collation'] !== $this->databaseCollation) { - continue; - } - - unset($options['collation']); - $column->setPlatformOptions($options); - } - - return $table; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/SQLServer/SQL/Builder/SQLServerSelectSQLBuilder.php b/vendor/doctrine/dbal/src/Platforms/SQLServer/SQL/Builder/SQLServerSelectSQLBuilder.php deleted file mode 100644 index dff1222..0000000 --- a/vendor/doctrine/dbal/src/Platforms/SQLServer/SQL/Builder/SQLServerSelectSQLBuilder.php +++ /dev/null @@ -1,86 +0,0 @@ -platform = $platform; - } - - public function buildSQL(SelectQuery $query): string - { - $parts = ['SELECT']; - - if ($query->isDistinct()) { - $parts[] = 'DISTINCT'; - } - - $parts[] = implode(', ', $query->getColumns()); - - $from = $query->getFrom(); - - if (count($from) > 0) { - $parts[] = 'FROM ' . implode(', ', $from); - } - - $forUpdate = $query->getForUpdate(); - - if ($forUpdate !== null) { - $with = ['UPDLOCK', 'ROWLOCK']; - - if ($forUpdate->getConflictResolutionMode() === ConflictResolutionMode::SKIP_LOCKED) { - $with[] = 'READPAST'; - } - - $parts[] = 'WITH (' . implode(', ', $with) . ')'; - } - - $where = $query->getWhere(); - - if ($where !== null) { - $parts[] = 'WHERE ' . $where; - } - - $groupBy = $query->getGroupBy(); - - if (count($groupBy) > 0) { - $parts[] = 'GROUP BY ' . implode(', ', $groupBy); - } - - $having = $query->getHaving(); - - if ($having !== null) { - $parts[] = 'HAVING ' . $having; - } - - $orderBy = $query->getOrderBy(); - - if (count($orderBy) > 0) { - $parts[] = 'ORDER BY ' . implode(', ', $orderBy); - } - - $sql = implode(' ', $parts); - $limit = $query->getLimit(); - - if ($limit->isDefined()) { - $sql = $this->platform->modifyLimitQuery($sql, $limit->getMaxResults(), $limit->getFirstResult()); - } - - return $sql; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/SQLServer2012Platform.php b/vendor/doctrine/dbal/src/Platforms/SQLServer2012Platform.php deleted file mode 100644 index a8ba2fa..0000000 --- a/vendor/doctrine/dbal/src/Platforms/SQLServer2012Platform.php +++ /dev/null @@ -1,13 +0,0 @@ -getConvertExpression('date', 'GETDATE()'); - } - - /** - * {@inheritDoc} - */ - public function getCurrentTimeSQL() - { - return $this->getConvertExpression('time', 'GETDATE()'); - } - - /** - * Returns an expression that converts an expression of one data type to another. - * - * @param string $dataType The target native data type. Alias data types cannot be used. - * @param string $expression The SQL expression to convert. - */ - private function getConvertExpression($dataType, $expression): string - { - return sprintf('CONVERT(%s, %s)', $dataType, $expression); - } - - /** - * {@inheritDoc} - */ - protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) - { - $factorClause = ''; - - if ($operator === '-') { - $factorClause = '-1 * '; - } - - return 'DATEADD(' . $unit . ', ' . $factorClause . $interval . ', ' . $date . ')'; - } - - /** - * {@inheritDoc} - */ - public function getDateDiffExpression($date1, $date2) - { - return 'DATEDIFF(day, ' . $date2 . ',' . $date1 . ')'; - } - - /** - * {@inheritDoc} - * - * Microsoft SQL Server prefers "autoincrement" identity columns - * since sequences can only be emulated with a table. - * - * @deprecated - */ - public function prefersIdentityColumns() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/1519', - 'SQLServerPlatform::prefersIdentityColumns() is deprecated.', - ); - - return true; - } - - /** - * {@inheritDoc} - * - * Microsoft SQL Server supports this through AUTO_INCREMENT columns. - */ - public function supportsIdentityColumns() - { - return true; - } - - /** - * {@inheritDoc} - */ - public function supportsReleaseSavepoints() - { - return false; - } - - /** - * {@inheritDoc} - */ - public function supportsSchemas() - { - return true; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getDefaultSchemaName() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s is deprecated.', - __METHOD__, - ); - - return 'dbo'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsColumnCollation() - { - return true; - } - - public function supportsSequences(): bool - { - return true; - } - - public function getAlterSequenceSQL(Sequence $sequence): string - { - return 'ALTER SEQUENCE ' . $sequence->getQuotedName($this) . - ' INCREMENT BY ' . $sequence->getAllocationSize(); - } - - public function getCreateSequenceSQL(Sequence $sequence): string - { - return 'CREATE SEQUENCE ' . $sequence->getQuotedName($this) . - ' START WITH ' . $sequence->getInitialValue() . - ' INCREMENT BY ' . $sequence->getAllocationSize() . - ' MINVALUE ' . $sequence->getInitialValue(); - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListSequencesSQL($database) - { - return 'SELECT seq.name, - CAST( - seq.increment AS VARCHAR(MAX) - ) AS increment, -- CAST avoids driver error for sql_variant type - CAST( - seq.start_value AS VARCHAR(MAX) - ) AS start_value -- CAST avoids driver error for sql_variant type - FROM sys.sequences AS seq'; - } - - /** - * {@inheritDoc} - */ - public function getSequenceNextValSQL($sequence) - { - return 'SELECT NEXT VALUE FOR ' . $sequence; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function hasNativeGuidType() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } - - /** - * {@inheritDoc} - */ - public function getDropForeignKeySQL($foreignKey, $table) - { - if (! $foreignKey instanceof ForeignKeyConstraint) { - $foreignKey = new Identifier($foreignKey); - } - - if (! $table instanceof Table) { - $table = new Identifier($table); - } - - $foreignKey = $foreignKey->getQuotedName($this); - $table = $table->getQuotedName($this); - - return 'ALTER TABLE ' . $table . ' DROP CONSTRAINT ' . $foreignKey; - } - - /** - * {@inheritDoc} - */ - public function getDropIndexSQL($index, $table = null) - { - if ($index instanceof Index) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $index as an Index object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $index = $index->getQuotedName($this); - } elseif (! is_string($index)) { - throw new InvalidArgumentException( - __METHOD__ . '() expects $index parameter to be string or ' . Index::class . '.', - ); - } - - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as an Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } elseif (! is_string($table)) { - throw new InvalidArgumentException( - __METHOD__ . '() expects $table parameter to be string or ' . Table::class . '.', - ); - } - - return 'DROP INDEX ' . $index . ' ON ' . $table; - } - - /** - * {@inheritDoc} - */ - protected function _getCreateTableSQL($name, array $columns, array $options = []) - { - $defaultConstraintsSql = []; - $commentsSql = []; - - $tableComment = $options['comment'] ?? null; - if ($tableComment !== null) { - $commentsSql[] = $this->getCommentOnTableSQL($name, $tableComment); - } - - // @todo does other code breaks because of this? - // force primary keys to be not null - foreach ($columns as &$column) { - if (! empty($column['primary'])) { - $column['notnull'] = true; - } - - // Build default constraints SQL statements. - if (isset($column['default'])) { - $defaultConstraintsSql[] = 'ALTER TABLE ' . $name . - ' ADD' . $this->getDefaultConstraintDeclarationSQL($name, $column); - } - - if (empty($column['comment']) && ! is_numeric($column['comment'])) { - continue; - } - - $commentsSql[] = $this->getCreateColumnCommentSQL($name, $column['name'], $column['comment']); - } - - $columnListSql = $this->getColumnDeclarationListSQL($columns); - - if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) { - foreach ($options['uniqueConstraints'] as $constraintName => $definition) { - $columnListSql .= ', ' . $this->getUniqueConstraintDeclarationSQL($constraintName, $definition); - } - } - - if (isset($options['primary']) && ! empty($options['primary'])) { - $flags = ''; - if (isset($options['primary_index']) && $options['primary_index']->hasFlag('nonclustered')) { - $flags = ' NONCLUSTERED'; - } - - $columnListSql .= ', PRIMARY KEY' . $flags - . ' (' . implode(', ', array_unique(array_values($options['primary']))) . ')'; - } - - $query = 'CREATE TABLE ' . $name . ' (' . $columnListSql; - - $check = $this->getCheckDeclarationSQL($columns); - if (! empty($check)) { - $query .= ', ' . $check; - } - - $query .= ')'; - - $sql = [$query]; - - if (isset($options['indexes']) && ! empty($options['indexes'])) { - foreach ($options['indexes'] as $index) { - $sql[] = $this->getCreateIndexSQL($index, $name); - } - } - - if (isset($options['foreignKeys'])) { - foreach ($options['foreignKeys'] as $definition) { - $sql[] = $this->getCreateForeignKeySQL($definition, $name); - } - } - - return array_merge($sql, $commentsSql, $defaultConstraintsSql); - } - - /** - * {@inheritDoc} - */ - public function getCreatePrimaryKeySQL(Index $index, $table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $identifier = $table->getQuotedName($this); - } else { - $identifier = $table; - } - - $sql = 'ALTER TABLE ' . $identifier . ' ADD PRIMARY KEY'; - - if ($index->hasFlag('nonclustered')) { - $sql .= ' NONCLUSTERED'; - } - - return $sql . ' (' . $this->getIndexFieldDeclarationListSQL($index) . ')'; - } - - private function unquoteSingleIdentifier(string $possiblyQuotedName): string - { - return str_starts_with($possiblyQuotedName, '[') && str_ends_with($possiblyQuotedName, ']') - ? substr($possiblyQuotedName, 1, -1) - : $possiblyQuotedName; - } - - /** - * Returns the SQL statement for creating a column comment. - * - * SQL Server does not support native column comments, - * therefore the extended properties functionality is used - * as a workaround to store them. - * The property name used to store column comments is "MS_Description" - * which provides compatibility with SQL Server Management Studio, - * as column comments are stored in the same property there when - * specifying a column's "Description" attribute. - * - * @param string $tableName The quoted table name to which the column belongs. - * @param string $columnName The quoted column name to create the comment for. - * @param string|null $comment The column's comment. - * - * @return string - */ - protected function getCreateColumnCommentSQL($tableName, $columnName, $comment) - { - if (strpos($tableName, '.') !== false) { - [$schemaName, $tableName] = explode('.', $tableName); - } else { - $schemaName = 'dbo'; - } - - return $this->getAddExtendedPropertySQL( - 'MS_Description', - $comment, - 'SCHEMA', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($schemaName)), - 'TABLE', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($tableName)), - 'COLUMN', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($columnName)), - ); - } - - /** - * Returns the SQL snippet for declaring a default constraint. - * - * @internal The method should be only used from within the SQLServerPlatform class hierarchy. - * - * @param string $table Name of the table to return the default constraint declaration for. - * @param mixed[] $column Column definition. - * - * @return string - * - * @throws InvalidArgumentException - */ - public function getDefaultConstraintDeclarationSQL($table, array $column) - { - if (! isset($column['default'])) { - throw new InvalidArgumentException("Incomplete column definition. 'default' required."); - } - - $columnName = new Identifier($column['name']); - - return ' CONSTRAINT ' . - $this->generateDefaultConstraintName($table, $column['name']) . - $this->getDefaultValueDeclarationSQL($column) . - ' FOR ' . $columnName->getQuotedName($this); - } - - /** - * {@inheritDoc} - */ - public function getCreateIndexSQL(Index $index, $table) - { - $constraint = parent::getCreateIndexSQL($index, $table); - - if ($index->isUnique() && ! $index->isPrimary()) { - $constraint = $this->_appendUniqueConstraintDefinition($constraint, $index); - } - - return $constraint; - } - - /** - * {@inheritDoc} - */ - protected function getCreateIndexSQLFlags(Index $index) - { - $type = ''; - if ($index->isUnique()) { - $type .= 'UNIQUE '; - } - - if ($index->hasFlag('clustered')) { - $type .= 'CLUSTERED '; - } elseif ($index->hasFlag('nonclustered')) { - $type .= 'NONCLUSTERED '; - } - - return $type; - } - - /** - * Extend unique key constraint with required filters - * - * @param string $sql - */ - private function _appendUniqueConstraintDefinition($sql, Index $index): string - { - $fields = []; - - foreach ($index->getQuotedColumns($this) as $field) { - $fields[] = $field . ' IS NOT NULL'; - } - - return $sql . ' WHERE ' . implode(' AND ', $fields); - } - - /** - * {@inheritDoc} - */ - public function getAlterTableSQL(TableDiff $diff) - { - $queryParts = []; - $sql = []; - $columnSql = []; - $commentsSql = []; - - $table = $diff->getOldTable() ?? $diff->getName($this); - - $tableName = $table->getName(); - - foreach ($diff->getAddedColumns() as $column) { - if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) { - continue; - } - - $columnProperties = $column->toArray(); - - $addColumnSql = 'ADD ' . $this->getColumnDeclarationSQL($column->getQuotedName($this), $columnProperties); - - if (isset($columnProperties['default'])) { - $addColumnSql .= ' CONSTRAINT ' . $this->generateDefaultConstraintName( - $tableName, - $column->getQuotedName($this), - ) . $this->getDefaultValueDeclarationSQL($columnProperties); - } - - $queryParts[] = $addColumnSql; - - $comment = $this->getColumnComment($column); - - if (empty($comment) && ! is_numeric($comment)) { - continue; - } - - $commentsSql[] = $this->getCreateColumnCommentSQL( - $tableName, - $column->getQuotedName($this), - $comment, - ); - } - - foreach ($diff->getDroppedColumns() as $column) { - if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) { - continue; - } - - $queryParts[] = 'DROP COLUMN ' . $column->getQuotedName($this); - } - - foreach ($diff->getModifiedColumns() as $columnDiff) { - if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) { - continue; - } - - $newColumn = $columnDiff->getNewColumn(); - $newComment = $this->getColumnComment($newColumn); - $hasNewComment = ! empty($newComment) || is_numeric($newComment); - - $oldColumn = $columnDiff->getOldColumn(); - - if ($oldColumn instanceof Column) { - $oldComment = $this->getColumnComment($oldColumn); - $hasOldComment = ! empty($oldComment) || is_numeric($oldComment); - - if ($hasOldComment && $hasNewComment && $oldComment !== $newComment) { - $commentsSql[] = $this->getAlterColumnCommentSQL( - $tableName, - $newColumn->getQuotedName($this), - $newComment, - ); - } elseif ($hasOldComment && ! $hasNewComment) { - $commentsSql[] = $this->getDropColumnCommentSQL( - $tableName, - $newColumn->getQuotedName($this), - ); - } elseif (! $hasOldComment && $hasNewComment) { - $commentsSql[] = $this->getCreateColumnCommentSQL( - $tableName, - $newColumn->getQuotedName($this), - $newComment, - ); - } - } - - // Do not add query part if only comment has changed. - if ($columnDiff->hasCommentChanged() && count($columnDiff->changedProperties) === 1) { - continue; - } - - $requireDropDefaultConstraint = $this->alterColumnRequiresDropDefaultConstraint($columnDiff); - - if ($requireDropDefaultConstraint) { - $oldColumn = $columnDiff->getOldColumn(); - - if ($oldColumn !== null) { - $oldColumnName = $oldColumn->getName(); - } else { - $oldColumnName = $columnDiff->oldColumnName; - } - - $queryParts[] = $this->getAlterTableDropDefaultConstraintClause($tableName, $oldColumnName); - } - - $columnProperties = $newColumn->toArray(); - - $queryParts[] = 'ALTER COLUMN ' . - $this->getColumnDeclarationSQL($newColumn->getQuotedName($this), $columnProperties); - - if ( - ! isset($columnProperties['default']) - || (! $requireDropDefaultConstraint && ! $columnDiff->hasDefaultChanged()) - ) { - continue; - } - - $queryParts[] = $this->getAlterTableAddDefaultConstraintClause($tableName, $newColumn); - } - - $tableNameSQL = $table->getQuotedName($this); - - foreach ($diff->getRenamedColumns() as $oldColumnName => $newColumn) { - if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $newColumn, $diff, $columnSql)) { - continue; - } - - $oldColumnName = new Identifier($oldColumnName); - - $sql[] = "sp_rename '" . $tableNameSQL . '.' . $oldColumnName->getQuotedName($this) . - "', '" . $newColumn->getQuotedName($this) . "', 'COLUMN'"; - - // Recreate default constraint with new column name if necessary (for future reference). - if ($newColumn->getDefault() === null) { - continue; - } - - $queryParts[] = $this->getAlterTableDropDefaultConstraintClause( - $tableName, - $oldColumnName->getQuotedName($this), - ); - $queryParts[] = $this->getAlterTableAddDefaultConstraintClause($tableName, $newColumn); - } - - $tableSql = []; - - if ($this->onSchemaAlterTable($diff, $tableSql)) { - return array_merge($tableSql, $columnSql); - } - - foreach ($queryParts as $query) { - $sql[] = 'ALTER TABLE ' . $tableNameSQL . ' ' . $query; - } - - $sql = array_merge($sql, $commentsSql); - - $newName = $diff->getNewName(); - - if ($newName !== false) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5663', - 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.', - __METHOD__, - ); - - $sql = array_merge($sql, $this->getRenameTableSQL($tableName, $newName->getName())); - } - - $sql = array_merge( - $this->getPreAlterTableIndexForeignKeySQL($diff), - $sql, - $this->getPostAlterTableIndexForeignKeySQL($diff), - ); - - return array_merge($sql, $tableSql, $columnSql); - } - - /** - * {@inheritDoc} - */ - public function getRenameTableSQL(string $oldName, string $newName): array - { - return [ - sprintf('sp_rename %s, %s', $this->quoteStringLiteral($oldName), $this->quoteStringLiteral($newName)), - - /* Rename table's default constraints names - * to match the new table name. - * This is necessary to ensure that the default - * constraints can be referenced in future table - * alterations as the table name is encoded in - * default constraints' names. */ - sprintf( - <<<'SQL' - DECLARE @sql NVARCHAR(MAX) = N''; - SELECT @sql += N'EXEC sp_rename N''' + dc.name + ''', N''' - + REPLACE(dc.name, '%s', '%s') + ''', ''OBJECT'';' - FROM sys.default_constraints dc - JOIN sys.tables tbl - ON dc.parent_object_id = tbl.object_id - WHERE tbl.name = %s; - EXEC sp_executesql @sql - SQL, - $this->generateIdentifierName($oldName), - $this->generateIdentifierName($newName), - $this->quoteStringLiteral($newName), - ), - ]; - } - - /** - * Returns the SQL clause for adding a default constraint in an ALTER TABLE statement. - * - * @param string $tableName The name of the table to generate the clause for. - * @param Column $column The column to generate the clause for. - */ - private function getAlterTableAddDefaultConstraintClause($tableName, Column $column): string - { - $columnDef = $column->toArray(); - $columnDef['name'] = $column->getQuotedName($this); - - return 'ADD' . $this->getDefaultConstraintDeclarationSQL($tableName, $columnDef); - } - - /** - * Returns the SQL clause for dropping an existing default constraint in an ALTER TABLE statement. - * - * @param string $tableName The name of the table to generate the clause for. - * @param string $columnName The name of the column to generate the clause for. - */ - private function getAlterTableDropDefaultConstraintClause($tableName, $columnName): string - { - return 'DROP CONSTRAINT ' . $this->generateDefaultConstraintName($tableName, $columnName); - } - - /** - * Checks whether a column alteration requires dropping its default constraint first. - * - * Different to other database vendors SQL Server implements column default values - * as constraints and therefore changes in a column's default value as well as changes - * in a column's type require dropping the default constraint first before being to - * alter the particular column to the new definition. - */ - private function alterColumnRequiresDropDefaultConstraint(ColumnDiff $columnDiff): bool - { - $oldColumn = $columnDiff->getOldColumn(); - - // We can only decide whether to drop an existing default constraint - // if we know the original default value. - if (! $oldColumn instanceof Column) { - return false; - } - - // We only need to drop an existing default constraint if we know the - // column was defined with a default value before. - if ($oldColumn->getDefault() === null) { - return false; - } - - // We need to drop an existing default constraint if the column was - // defined with a default value before and it has changed. - if ($columnDiff->hasDefaultChanged()) { - return true; - } - - // We need to drop an existing default constraint if the column was - // defined with a default value before and the native column type has changed. - return $columnDiff->hasTypeChanged() || $columnDiff->hasFixedChanged(); - } - - /** - * Returns the SQL statement for altering a column comment. - * - * SQL Server does not support native column comments, - * therefore the extended properties functionality is used - * as a workaround to store them. - * The property name used to store column comments is "MS_Description" - * which provides compatibility with SQL Server Management Studio, - * as column comments are stored in the same property there when - * specifying a column's "Description" attribute. - * - * @param string $tableName The quoted table name to which the column belongs. - * @param string $columnName The quoted column name to alter the comment for. - * @param string|null $comment The column's comment. - * - * @return string - */ - protected function getAlterColumnCommentSQL($tableName, $columnName, $comment) - { - if (strpos($tableName, '.') !== false) { - [$schemaName, $tableName] = explode('.', $tableName); - } else { - $schemaName = 'dbo'; - } - - return $this->getUpdateExtendedPropertySQL( - 'MS_Description', - $comment, - 'SCHEMA', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($schemaName)), - 'TABLE', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($tableName)), - 'COLUMN', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($columnName)), - ); - } - - /** - * Returns the SQL statement for dropping a column comment. - * - * SQL Server does not support native column comments, - * therefore the extended properties functionality is used - * as a workaround to store them. - * The property name used to store column comments is "MS_Description" - * which provides compatibility with SQL Server Management Studio, - * as column comments are stored in the same property there when - * specifying a column's "Description" attribute. - * - * @param string $tableName The quoted table name to which the column belongs. - * @param string $columnName The quoted column name to drop the comment for. - * - * @return string - */ - protected function getDropColumnCommentSQL($tableName, $columnName) - { - if (strpos($tableName, '.') !== false) { - [$schemaName, $tableName] = explode('.', $tableName); - } else { - $schemaName = 'dbo'; - } - - return $this->getDropExtendedPropertySQL( - 'MS_Description', - 'SCHEMA', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($schemaName)), - 'TABLE', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($tableName)), - 'COLUMN', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($columnName)), - ); - } - - /** - * {@inheritDoc} - */ - protected function getRenameIndexSQL($oldIndexName, Index $index, $tableName) - { - return [sprintf( - "EXEC sp_rename N'%s.%s', N'%s', N'INDEX'", - $tableName, - $oldIndexName, - $index->getQuotedName($this), - ), - ]; - } - - /** - * Returns the SQL statement for adding an extended property to a database object. - * - * @internal The method should be only used from within the SQLServerPlatform class hierarchy. - * - * @link http://msdn.microsoft.com/en-us/library/ms180047%28v=sql.90%29.aspx - * - * @param string $name The name of the property to add. - * @param string|null $value The value of the property to add. - * @param string|null $level0Type The type of the object at level 0 the property belongs to. - * @param string|null $level0Name The name of the object at level 0 the property belongs to. - * @param string|null $level1Type The type of the object at level 1 the property belongs to. - * @param string|null $level1Name The name of the object at level 1 the property belongs to. - * @param string|null $level2Type The type of the object at level 2 the property belongs to. - * @param string|null $level2Name The name of the object at level 2 the property belongs to. - * - * @return string - */ - public function getAddExtendedPropertySQL( - $name, - $value = null, - $level0Type = null, - $level0Name = null, - $level1Type = null, - $level1Name = null, - $level2Type = null, - $level2Name = null - ) { - return 'EXEC sp_addextendedproperty ' . - 'N' . $this->quoteStringLiteral($name) . ', N' . $this->quoteStringLiteral($value ?? '') . ', ' . - 'N' . $this->quoteStringLiteral($level0Type ?? '') . ', ' . $level0Name . ', ' . - 'N' . $this->quoteStringLiteral($level1Type ?? '') . ', ' . $level1Name . - ($level2Type !== null || $level2Name !== null - ? ', N' . $this->quoteStringLiteral($level2Type ?? '') . ', ' . $level2Name - : '' - ); - } - - /** - * Returns the SQL statement for dropping an extended property from a database object. - * - * @internal The method should be only used from within the SQLServerPlatform class hierarchy. - * - * @link http://technet.microsoft.com/en-gb/library/ms178595%28v=sql.90%29.aspx - * - * @param string $name The name of the property to drop. - * @param string|null $level0Type The type of the object at level 0 the property belongs to. - * @param string|null $level0Name The name of the object at level 0 the property belongs to. - * @param string|null $level1Type The type of the object at level 1 the property belongs to. - * @param string|null $level1Name The name of the object at level 1 the property belongs to. - * @param string|null $level2Type The type of the object at level 2 the property belongs to. - * @param string|null $level2Name The name of the object at level 2 the property belongs to. - * - * @return string - */ - public function getDropExtendedPropertySQL( - $name, - $level0Type = null, - $level0Name = null, - $level1Type = null, - $level1Name = null, - $level2Type = null, - $level2Name = null - ) { - return 'EXEC sp_dropextendedproperty ' . - 'N' . $this->quoteStringLiteral($name) . ', ' . - 'N' . $this->quoteStringLiteral($level0Type ?? '') . ', ' . $level0Name . ', ' . - 'N' . $this->quoteStringLiteral($level1Type ?? '') . ', ' . $level1Name . - ($level2Type !== null || $level2Name !== null - ? ', N' . $this->quoteStringLiteral($level2Type ?? '') . ', ' . $level2Name - : '' - ); - } - - /** - * Returns the SQL statement for updating an extended property of a database object. - * - * @internal The method should be only used from within the SQLServerPlatform class hierarchy. - * - * @link http://msdn.microsoft.com/en-us/library/ms186885%28v=sql.90%29.aspx - * - * @param string $name The name of the property to update. - * @param string|null $value The value of the property to update. - * @param string|null $level0Type The type of the object at level 0 the property belongs to. - * @param string|null $level0Name The name of the object at level 0 the property belongs to. - * @param string|null $level1Type The type of the object at level 1 the property belongs to. - * @param string|null $level1Name The name of the object at level 1 the property belongs to. - * @param string|null $level2Type The type of the object at level 2 the property belongs to. - * @param string|null $level2Name The name of the object at level 2 the property belongs to. - * - * @return string - */ - public function getUpdateExtendedPropertySQL( - $name, - $value = null, - $level0Type = null, - $level0Name = null, - $level1Type = null, - $level1Name = null, - $level2Type = null, - $level2Name = null - ) { - return 'EXEC sp_updateextendedproperty ' . - 'N' . $this->quoteStringLiteral($name) . ', N' . $this->quoteStringLiteral($value ?? '') . ', ' . - 'N' . $this->quoteStringLiteral($level0Type ?? '') . ', ' . $level0Name . ', ' . - 'N' . $this->quoteStringLiteral($level1Type ?? '') . ', ' . $level1Name . - ($level2Type !== null || $level2Name !== null - ? ', N' . $this->quoteStringLiteral($level2Type ?? '') . ', ' . $level2Name - : '' - ); - } - - /** - * {@inheritDoc} - */ - public function getEmptyIdentityInsertSQL($quotedTableName, $quotedIdentifierColumnName) - { - return 'INSERT INTO ' . $quotedTableName . ' DEFAULT VALUES'; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTablesSQL() - { - // "sysdiagrams" table must be ignored as it's internal SQL Server table for Database Diagrams - // Category 2 must be ignored as it is "MS SQL Server 'pseudo-system' object[s]" for replication - return 'SELECT name, SCHEMA_NAME (uid) AS schema_name FROM sysobjects' - . " WHERE type = 'U' AND name != 'sysdiagrams' AND category != 2 ORDER BY name"; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableColumnsSQL($table, $database = null) - { - return "SELECT col.name, - type.name AS type, - col.max_length AS length, - ~col.is_nullable AS notnull, - def.definition AS [default], - col.scale, - col.precision, - col.is_identity AS autoincrement, - col.collation_name AS collation, - CAST(prop.value AS NVARCHAR(MAX)) AS comment -- CAST avoids driver error for sql_variant type - FROM sys.columns AS col - JOIN sys.types AS type - ON col.user_type_id = type.user_type_id - JOIN sys.objects AS obj - ON col.object_id = obj.object_id - JOIN sys.schemas AS scm - ON obj.schema_id = scm.schema_id - LEFT JOIN sys.default_constraints def - ON col.default_object_id = def.object_id - AND col.object_id = def.parent_object_id - LEFT JOIN sys.extended_properties AS prop - ON obj.object_id = prop.major_id - AND col.column_id = prop.minor_id - AND prop.name = 'MS_Description' - WHERE obj.type = 'U' - AND " . $this->getTableWhereClause($table, 'scm.name', 'obj.name'); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * @param string $table - * @param string|null $database - * - * @return string - */ - public function getListTableForeignKeysSQL($table, $database = null) - { - return 'SELECT f.name AS ForeignKey, - SCHEMA_NAME (f.SCHEMA_ID) AS SchemaName, - OBJECT_NAME (f.parent_object_id) AS TableName, - COL_NAME (fc.parent_object_id,fc.parent_column_id) AS ColumnName, - SCHEMA_NAME (o.SCHEMA_ID) ReferenceSchemaName, - OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, - COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName, - f.delete_referential_action_desc, - f.update_referential_action_desc - FROM sys.foreign_keys AS f - INNER JOIN sys.foreign_key_columns AS fc - INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id - ON f.OBJECT_ID = fc.constraint_object_id - WHERE ' . - $this->getTableWhereClause($table, 'SCHEMA_NAME (f.schema_id)', 'OBJECT_NAME (f.parent_object_id)') . - ' ORDER BY fc.constraint_column_id'; - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableIndexesSQL($table, $database = null) - { - return "SELECT idx.name AS key_name, - col.name AS column_name, - ~idx.is_unique AS non_unique, - idx.is_primary_key AS [primary], - CASE idx.type - WHEN '1' THEN 'clustered' - WHEN '2' THEN 'nonclustered' - ELSE NULL - END AS flags - FROM sys.tables AS tbl - JOIN sys.schemas AS scm ON tbl.schema_id = scm.schema_id - JOIN sys.indexes AS idx ON tbl.object_id = idx.object_id - JOIN sys.index_columns AS idxcol ON idx.object_id = idxcol.object_id AND idx.index_id = idxcol.index_id - JOIN sys.columns AS col ON idxcol.object_id = col.object_id AND idxcol.column_id = col.column_id - WHERE " . $this->getTableWhereClause($table, 'scm.name', 'tbl.name') . ' - ORDER BY idx.index_id ASC, idxcol.key_ordinal ASC'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListViewsSQL($database) - { - return "SELECT name, definition FROM sysobjects - INNER JOIN sys.sql_modules ON sysobjects.id = sys.sql_modules.object_id - WHERE type = 'V' ORDER BY name"; - } - - /** - * Returns the where clause to filter schema and table name in a query. - * - * @param string $table The full qualified name of the table. - * @param string $schemaColumn The name of the column to compare the schema to in the where clause. - * @param string $tableColumn The name of the column to compare the table to in the where clause. - */ - private function getTableWhereClause($table, $schemaColumn, $tableColumn): string - { - if (strpos($table, '.') !== false) { - [$schema, $table] = explode('.', $table); - $schema = $this->quoteStringLiteral($schema); - $table = $this->quoteStringLiteral($table); - } else { - $schema = 'SCHEMA_NAME()'; - $table = $this->quoteStringLiteral($table); - } - - return sprintf('(%s = %s AND %s = %s)', $tableColumn, $table, $schemaColumn, $schema); - } - - /** - * {@inheritDoc} - */ - public function getLocateExpression($str, $substr, $startPos = false) - { - if ($startPos === false) { - return 'CHARINDEX(' . $substr . ', ' . $str . ')'; - } - - return 'CHARINDEX(' . $substr . ', ' . $str . ', ' . $startPos . ')'; - } - - /** - * {@inheritDoc} - */ - public function getModExpression($expression1, $expression2) - { - return $expression1 . ' % ' . $expression2; - } - - /** - * {@inheritDoc} - */ - public function getTrimExpression($str, $mode = TrimMode::UNSPECIFIED, $char = false) - { - if ($char === false) { - switch ($mode) { - case TrimMode::LEADING: - $trimFn = 'LTRIM'; - break; - - case TrimMode::TRAILING: - $trimFn = 'RTRIM'; - break; - - default: - return 'LTRIM(RTRIM(' . $str . '))'; - } - - return $trimFn . '(' . $str . ')'; - } - - $pattern = "'%[^' + " . $char . " + ']%'"; - - if ($mode === TrimMode::LEADING) { - return 'stuff(' . $str . ', 1, patindex(' . $pattern . ', ' . $str . ') - 1, null)'; - } - - if ($mode === TrimMode::TRAILING) { - return 'reverse(stuff(reverse(' . $str . '), 1, ' - . 'patindex(' . $pattern . ', reverse(' . $str . ')) - 1, null))'; - } - - return 'reverse(stuff(reverse(stuff(' . $str . ', 1, patindex(' . $pattern . ', ' . $str . ') - 1, null)), 1, ' - . 'patindex(' . $pattern . ', reverse(stuff(' . $str . ', 1, patindex(' . $pattern . ', ' . $str - . ') - 1, null))) - 1, null))'; - } - - /** - * {@inheritDoc} - */ - public function getConcatExpression() - { - return sprintf('CONCAT(%s)', implode(', ', func_get_args())); - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListDatabasesSQL() - { - return 'SELECT * FROM sys.databases'; - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see SQLServerSchemaManager::listSchemaNames()} instead. - */ - public function getListNamespacesSQL() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'SQLServerPlatform::getListNamespacesSQL() is deprecated,' - . ' use SQLServerSchemaManager::listSchemaNames() instead.', - ); - - return "SELECT name FROM sys.schemas WHERE name NOT IN('guest', 'INFORMATION_SCHEMA', 'sys')"; - } - - /** - * {@inheritDoc} - */ - public function getSubstringExpression($string, $start, $length = null) - { - if ($length !== null) { - return 'SUBSTRING(' . $string . ', ' . $start . ', ' . $length . ')'; - } - - return 'SUBSTRING(' . $string . ', ' . $start . ', LEN(' . $string . ') - ' . $start . ' + 1)'; - } - - /** - * {@inheritDoc} - */ - public function getLengthExpression($column) - { - return 'LEN(' . $column . ')'; - } - - public function getCurrentDatabaseExpression(): string - { - return 'DB_NAME()'; - } - - /** - * {@inheritDoc} - */ - public function getSetTransactionIsolationSQL($level) - { - return 'SET TRANSACTION ISOLATION LEVEL ' . $this->_getTransactionIsolationLevelSQL($level); - } - - /** - * {@inheritDoc} - */ - public function getIntegerTypeDeclarationSQL(array $column) - { - return 'INT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getBigIntTypeDeclarationSQL(array $column) - { - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getSmallIntTypeDeclarationSQL(array $column) - { - return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getGuidTypeDeclarationSQL(array $column) - { - return 'UNIQUEIDENTIFIER'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTzTypeDeclarationSQL(array $column) - { - return 'DATETIMEOFFSET(6)'; - } - - /** - * {@inheritDoc} - */ - public function getAsciiStringTypeDeclarationSQL(array $column): string - { - $length = $column['length'] ?? null; - - if (empty($column['fixed'])) { - return sprintf('VARCHAR(%d)', $length ?? 255); - } - - return sprintf('CHAR(%d)', $length ?? 255); - } - - /** - * {@inheritDoc} - */ - protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default string column length on SQL Server is deprecated' - . ', specify the length explicitly.', - ); - } - - return $fixed - ? 'NCHAR(' . ($length > 0 ? $length : 255) . ')' - : 'NVARCHAR(' . ($length > 0 ? $length : 255) . ')'; - } - - /** - * {@inheritDoc} - */ - protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed/*, $lengthOmitted = false*/) - { - if ($length <= 0 || (func_num_args() > 2 && func_get_arg(2))) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default binary column length on SQL Server is deprecated' - . ', specify the length explicitly.', - ); - } - - return $fixed - ? 'BINARY(' . ($length > 0 ? $length : 255) . ')' - : 'VARBINARY(' . ($length > 0 ? $length : 255) . ')'; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getBinaryMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'SQLServerPlatform::getBinaryMaxLength() is deprecated.', - ); - - return 8000; - } - - /** - * {@inheritDoc} - */ - public function getClobTypeDeclarationSQL(array $column) - { - return 'VARCHAR(MAX)'; - } - - /** - * {@inheritDoc} - */ - protected function _getCommonIntegerTypeDeclarationSQL(array $column) - { - return ! empty($column['autoincrement']) ? ' IDENTITY' : ''; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTypeDeclarationSQL(array $column) - { - // 3 - microseconds precision length - // http://msdn.microsoft.com/en-us/library/ms187819.aspx - return 'DATETIME2(6)'; - } - - /** - * {@inheritDoc} - */ - public function getDateTypeDeclarationSQL(array $column) - { - return 'DATE'; - } - - /** - * {@inheritDoc} - */ - public function getTimeTypeDeclarationSQL(array $column) - { - return 'TIME(0)'; - } - - /** - * {@inheritDoc} - */ - public function getBooleanTypeDeclarationSQL(array $column) - { - return 'BIT'; - } - - /** - * {@inheritDoc} - */ - protected function doModifyLimitQuery($query, $limit, $offset) - { - if ($limit === null && $offset <= 0) { - return $query; - } - - if ($this->shouldAddOrderBy($query)) { - if (preg_match('/^SELECT\s+DISTINCT/im', $query) > 0) { - // SQL Server won't let us order by a non-selected column in a DISTINCT query, - // so we have to do this madness. This says, order by the first column in the - // result. SQL Server's docs say that a nonordered query's result order is non- - // deterministic anyway, so this won't do anything that a bunch of update and - // deletes to the table wouldn't do anyway. - $query .= ' ORDER BY 1'; - } else { - // In another DBMS, we could do ORDER BY 0, but SQL Server gets angry if you - // use constant expressions in the order by list. - $query .= ' ORDER BY (SELECT 0)'; - } - } - - // This looks somewhat like MYSQL, but limit/offset are in inverse positions - // Supposedly SQL:2008 core standard. - // Per TSQL spec, FETCH NEXT n ROWS ONLY is not valid without OFFSET n ROWS. - $query .= sprintf(' OFFSET %d ROWS', $offset); - - if ($limit !== null) { - $query .= sprintf(' FETCH NEXT %d ROWS ONLY', $limit); - } - - return $query; - } - - /** - * {@inheritDoc} - */ - public function convertBooleans($item) - { - if (is_array($item)) { - foreach ($item as $key => $value) { - if (! is_bool($value) && ! is_numeric($value)) { - continue; - } - - $item[$key] = (int) (bool) $value; - } - } elseif (is_bool($item) || is_numeric($item)) { - $item = (int) (bool) $item; - } - - return $item; - } - - /** - * {@inheritDoc} - */ - public function getCreateTemporaryTableSnippetSQL() - { - return 'CREATE TABLE'; - } - - /** - * {@inheritDoc} - */ - public function getTemporaryTableName($tableName) - { - return '#' . $tableName; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeFormatString() - { - return 'Y-m-d H:i:s.u'; - } - - /** - * {@inheritDoc} - */ - public function getDateFormatString() - { - return 'Y-m-d'; - } - - /** - * {@inheritDoc} - */ - public function getTimeFormatString() - { - return 'H:i:s'; - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTzFormatString() - { - return 'Y-m-d H:i:s.u P'; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return 'mssql'; - } - - /** - * {@inheritDoc} - */ - protected function initializeDoctrineTypeMappings() - { - $this->doctrineTypeMapping = [ - 'bigint' => Types::BIGINT, - 'binary' => Types::BINARY, - 'bit' => Types::BOOLEAN, - 'blob' => Types::BLOB, - 'char' => Types::STRING, - 'date' => Types::DATE_MUTABLE, - 'datetime' => Types::DATETIME_MUTABLE, - 'datetime2' => Types::DATETIME_MUTABLE, - 'datetimeoffset' => Types::DATETIMETZ_MUTABLE, - 'decimal' => Types::DECIMAL, - 'double' => Types::FLOAT, - 'double precision' => Types::FLOAT, - 'float' => Types::FLOAT, - 'image' => Types::BLOB, - 'int' => Types::INTEGER, - 'money' => Types::INTEGER, - 'nchar' => Types::STRING, - 'ntext' => Types::TEXT, - 'numeric' => Types::DECIMAL, - 'nvarchar' => Types::STRING, - 'real' => Types::FLOAT, - 'smalldatetime' => Types::DATETIME_MUTABLE, - 'smallint' => Types::SMALLINT, - 'smallmoney' => Types::INTEGER, - 'sysname' => Types::STRING, - 'text' => Types::TEXT, - 'time' => Types::TIME_MUTABLE, - 'tinyint' => Types::SMALLINT, - 'uniqueidentifier' => Types::GUID, - 'varbinary' => Types::BINARY, - 'varchar' => Types::STRING, - 'xml' => Types::TEXT, - ]; - } - - /** - * {@inheritDoc} - */ - public function createSavePoint($savepoint) - { - return 'SAVE TRANSACTION ' . $savepoint; - } - - /** - * {@inheritDoc} - */ - public function releaseSavePoint($savepoint) - { - return ''; - } - - /** - * {@inheritDoc} - */ - public function rollbackSavePoint($savepoint) - { - return 'ROLLBACK TRANSACTION ' . $savepoint; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getForeignKeyReferentialActionSQL($action) - { - // RESTRICT is not supported, therefore falling back to NO ACTION. - if (strtoupper($action) === 'RESTRICT') { - return 'NO ACTION'; - } - - return parent::getForeignKeyReferentialActionSQL($action); - } - - public function appendLockHint(string $fromClause, int $lockMode): string - { - switch ($lockMode) { - case LockMode::NONE: - case LockMode::OPTIMISTIC: - return $fromClause; - - case LockMode::PESSIMISTIC_READ: - return $fromClause . ' WITH (HOLDLOCK, ROWLOCK)'; - - case LockMode::PESSIMISTIC_WRITE: - return $fromClause . ' WITH (UPDLOCK, ROWLOCK)'; - - default: - throw InvalidLockMode::fromLockMode($lockMode); - } - } - - /** - * {@inheritDoc} - * - * @deprecated This API is not portable. - */ - public function getForUpdateSQL() - { - return ' '; - } - - /** - * {@inheritDoc} - * - * @deprecated Implement {@see createReservedKeywordsList()} instead. - */ - protected function getReservedKeywordsClass() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - 'SQLServerPlatform::getReservedKeywordsClass() is deprecated,' - . ' use SQLServerPlatform::createReservedKeywordsList() instead.', - ); - - return Keywords\SQLServer2012Keywords::class; - } - - /** - * {@inheritDoc} - */ - public function quoteSingleIdentifier($str) - { - return '[' . str_replace(']', ']]', $str) . ']'; - } - - /** - * {@inheritDoc} - */ - public function getTruncateTableSQL($tableName, $cascade = false) - { - $tableIdentifier = new Identifier($tableName); - - return 'TRUNCATE TABLE ' . $tableIdentifier->getQuotedName($this); - } - - /** - * {@inheritDoc} - */ - public function getBlobTypeDeclarationSQL(array $column) - { - return 'VARBINARY(MAX)'; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getColumnDeclarationSQL($name, array $column) - { - if (isset($column['columnDefinition'])) { - $columnDef = $this->getCustomTypeDeclarationSQL($column); - } else { - $collation = ! empty($column['collation']) ? - ' ' . $this->getColumnCollationDeclarationSQL($column['collation']) : ''; - - $notnull = ! empty($column['notnull']) ? ' NOT NULL' : ''; - - if (! empty($column['unique'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5656', - 'The usage of the "unique" column property is deprecated. Use unique constraints instead.', - ); - - $unique = ' ' . $this->getUniqueFieldDeclarationSQL(); - } else { - $unique = ''; - } - - if (! empty($column['check'])) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5656', - 'The usage of the "check" column property is deprecated.', - ); - - $check = ' ' . $column['check']; - } else { - $check = ''; - } - - $typeDecl = $column['type']->getSQLDeclaration($column, $this); - $columnDef = $typeDecl . $collation . $notnull . $unique . $check; - } - - return $name . ' ' . $columnDef; - } - - /** - * {@inheritDoc} - * - * SQL Server does not support quoting collation identifiers. - */ - public function getColumnCollationDeclarationSQL($collation) - { - return 'COLLATE ' . $collation; - } - - public function columnsEqual(Column $column1, Column $column2): bool - { - if (! parent::columnsEqual($column1, $column2)) { - return false; - } - - return $this->getDefaultValueDeclarationSQL($column1->toArray()) - === $this->getDefaultValueDeclarationSQL($column2->toArray()); - } - - protected function getLikeWildcardCharacters(): string - { - return parent::getLikeWildcardCharacters() . '[]^'; - } - - /** - * Returns a unique default constraint name for a table and column. - * - * @param string $table Name of the table to generate the unique default constraint name for. - * @param string $column Name of the column in the table to generate the unique default constraint name for. - */ - private function generateDefaultConstraintName($table, $column): string - { - return 'DF_' . $this->generateIdentifierName($table) . '_' . $this->generateIdentifierName($column); - } - - /** - * Returns a hash value for a given identifier. - * - * @param string $identifier Identifier to generate a hash value for. - */ - private function generateIdentifierName($identifier): string - { - // Always generate name for unquoted identifiers to ensure consistency. - $identifier = new Identifier($identifier); - - return strtoupper(dechex(crc32($identifier->getName()))); - } - - protected function getCommentOnTableSQL(string $tableName, ?string $comment): string - { - return $this->getAddExtendedPropertySQL( - 'MS_Description', - $comment, - 'SCHEMA', - $this->quoteStringLiteral('dbo'), - 'TABLE', - $this->quoteStringLiteral($this->unquoteSingleIdentifier($tableName)), - ); - } - - /** @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. */ - public function getListTableMetadataSQL(string $table): string - { - return sprintf( - <<<'SQL' - SELECT - p.value AS [table_comment] - FROM - sys.tables AS tbl - INNER JOIN sys.extended_properties AS p ON p.major_id=tbl.object_id AND p.minor_id=0 AND p.class=1 - WHERE - (tbl.name=N%s and SCHEMA_NAME(tbl.schema_id)=N'dbo' and p.name=N'MS_Description') - SQL - , - $this->quoteStringLiteral($table), - ); - } - - /** @param string $query */ - private function shouldAddOrderBy($query): bool - { - // Find the position of the last instance of ORDER BY and ensure it is not within a parenthetical statement - // but can be in a newline - $matches = []; - $matchesCount = preg_match_all('/[\\s]+order\\s+by\\s/im', $query, $matches, PREG_OFFSET_CAPTURE); - if ($matchesCount === 0) { - return true; - } - - // ORDER BY instance may be in a subquery after ORDER BY - // e.g. SELECT col1 FROM test ORDER BY (SELECT col2 from test ORDER BY col2) - // if in the searched query ORDER BY clause was found where - // number of open parentheses after the occurrence of the clause is equal to - // number of closed brackets after the occurrence of the clause, - // it means that ORDER BY is included in the query being checked - while ($matchesCount > 0) { - $orderByPos = $matches[0][--$matchesCount][1]; - $openBracketsCount = substr_count($query, '(', $orderByPos); - $closedBracketsCount = substr_count($query, ')', $orderByPos); - if ($openBracketsCount === $closedBracketsCount) { - return false; - } - } - - return true; - } - - public function createSchemaManager(Connection $connection): SQLServerSchemaManager - { - return new SQLServerSchemaManager($connection, $this); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/SQLite/Comparator.php b/vendor/doctrine/dbal/src/Platforms/SQLite/Comparator.php deleted file mode 100644 index 5218871..0000000 --- a/vendor/doctrine/dbal/src/Platforms/SQLite/Comparator.php +++ /dev/null @@ -1,61 +0,0 @@ -normalizeColumns($fromTable), - $this->normalizeColumns($toTable), - ); - } - - /** - * {@inheritDoc} - */ - public function diffTable(Table $fromTable, Table $toTable) - { - return parent::diffTable( - $this->normalizeColumns($fromTable), - $this->normalizeColumns($toTable), - ); - } - - private function normalizeColumns(Table $table): Table - { - $table = clone $table; - - foreach ($table->getColumns() as $column) { - $options = $column->getPlatformOptions(); - - if (! isset($options['collation']) || strcasecmp($options['collation'], 'binary') !== 0) { - continue; - } - - unset($options['collation']); - $column->setPlatformOptions($options); - } - - return $table; - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php b/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php deleted file mode 100644 index 48c692f..0000000 --- a/vendor/doctrine/dbal/src/Platforms/SqlitePlatform.php +++ /dev/null @@ -1,1545 +0,0 @@ - 0 THEN INSTR(SUBSTR(' . $str . ', ' . $startPos . '), ' . $substr . ') + ' . $startPos - . ' - 1 ELSE 0 END'; - } - - /** - * {@inheritDoc} - */ - protected function getDateArithmeticIntervalExpression($date, $operator, $interval, $unit) - { - switch ($unit) { - case DateIntervalUnit::SECOND: - case DateIntervalUnit::MINUTE: - case DateIntervalUnit::HOUR: - return 'DATETIME(' . $date . ",'" . $operator . $interval . ' ' . $unit . "')"; - } - - switch ($unit) { - case DateIntervalUnit::WEEK: - $interval = $this->multiplyInterval((string) $interval, 7); - $unit = DateIntervalUnit::DAY; - break; - - case DateIntervalUnit::QUARTER: - $interval = $this->multiplyInterval((string) $interval, 3); - $unit = DateIntervalUnit::MONTH; - break; - } - - if (! is_numeric($interval)) { - $interval = "' || " . $interval . " || '"; - } - - return 'DATE(' . $date . ",'" . $operator . $interval . ' ' . $unit . "')"; - } - - /** - * {@inheritDoc} - */ - public function getDateDiffExpression($date1, $date2) - { - return sprintf("JULIANDAY(%s, 'start of day') - JULIANDAY(%s, 'start of day')", $date1, $date2); - } - - /** - * {@inheritDoc} - * - * The DBAL doesn't support databases on the SQLite platform. The expression here always returns a fixed string - * as an indicator of an implicitly selected database. - * - * @link https://www.sqlite.org/lang_select.html - * @see Connection::getDatabase() - */ - public function getCurrentDatabaseExpression(): string - { - return "'main'"; - } - - /** @link https://www2.sqlite.org/cvstrac/wiki?p=UnsupportedSql */ - public function createSelectSQLBuilder(): SelectSQLBuilder - { - return new DefaultSelectSQLBuilder($this, null, null); - } - - /** - * {@inheritDoc} - */ - protected function _getTransactionIsolationLevelSQL($level) - { - switch ($level) { - case TransactionIsolationLevel::READ_UNCOMMITTED: - return '0'; - - case TransactionIsolationLevel::READ_COMMITTED: - case TransactionIsolationLevel::REPEATABLE_READ: - case TransactionIsolationLevel::SERIALIZABLE: - return '1'; - - default: - return parent::_getTransactionIsolationLevelSQL($level); - } - } - - /** - * {@inheritDoc} - */ - public function getSetTransactionIsolationSQL($level) - { - return 'PRAGMA read_uncommitted = ' . $this->_getTransactionIsolationLevelSQL($level); - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function prefersIdentityColumns() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/1519', - 'SqlitePlatform::prefersIdentityColumns() is deprecated.', - ); - - return true; - } - - /** - * {@inheritDoc} - */ - public function getBooleanTypeDeclarationSQL(array $column) - { - return 'BOOLEAN'; - } - - /** - * {@inheritDoc} - */ - public function getIntegerTypeDeclarationSQL(array $column) - { - return 'INTEGER' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getBigIntTypeDeclarationSQL(array $column) - { - // SQLite autoincrement is implicit for INTEGER PKs, but not for BIGINT columns - if (! empty($column['autoincrement'])) { - return $this->getIntegerTypeDeclarationSQL($column); - } - - return 'BIGINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * @deprecated Use {@see getSmallIntTypeDeclarationSQL()} instead. - * - * @param array $column - * - * @return string - */ - public function getTinyIntTypeDeclarationSQL(array $column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5511', - '%s is deprecated. Use getSmallIntTypeDeclarationSQL() instead.', - __METHOD__, - ); - - // SQLite autoincrement is implicit for INTEGER PKs, but not for TINYINT columns - if (! empty($column['autoincrement'])) { - return $this->getIntegerTypeDeclarationSQL($column); - } - - return 'TINYINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getSmallIntTypeDeclarationSQL(array $column) - { - // SQLite autoincrement is implicit for INTEGER PKs, but not for SMALLINT columns - if (! empty($column['autoincrement'])) { - return $this->getIntegerTypeDeclarationSQL($column); - } - - return 'SMALLINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * @deprecated Use {@see getIntegerTypeDeclarationSQL()} instead. - * - * @param array $column - * - * @return string - */ - public function getMediumIntTypeDeclarationSQL(array $column) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5511', - '%s is deprecated. Use getIntegerTypeDeclarationSQL() instead.', - __METHOD__, - ); - - // SQLite autoincrement is implicit for INTEGER PKs, but not for MEDIUMINT columns - if (! empty($column['autoincrement'])) { - return $this->getIntegerTypeDeclarationSQL($column); - } - - return 'MEDIUMINT' . $this->_getCommonIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getDateTimeTypeDeclarationSQL(array $column) - { - return 'DATETIME'; - } - - /** - * {@inheritDoc} - */ - public function getDateTypeDeclarationSQL(array $column) - { - return 'DATE'; - } - - /** - * {@inheritDoc} - */ - public function getTimeTypeDeclarationSQL(array $column) - { - return 'TIME'; - } - - /** - * {@inheritDoc} - */ - protected function _getCommonIntegerTypeDeclarationSQL(array $column) - { - // sqlite autoincrement is only possible for the primary key - if (! empty($column['autoincrement'])) { - return ' PRIMARY KEY AUTOINCREMENT'; - } - - return ! empty($column['unsigned']) ? ' UNSIGNED' : ''; - } - - /** - * Disables schema emulation. - * - * Schema emulation is enabled by default to maintain backwards compatibility. - * Disable it to opt-in to the behavior of DBAL 4. - * - * @deprecated Will be removed in DBAL 4.0. - */ - public function disableSchemaEmulation(): void - { - $this->schemaEmulationEnabled = false; - } - - private function emulateSchemaNamespacing(string $tableName): string - { - return $this->schemaEmulationEnabled - ? str_replace('.', '__', $tableName) - : $tableName; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getForeignKeyDeclarationSQL(ForeignKeyConstraint $foreignKey) - { - return parent::getForeignKeyDeclarationSQL(new ForeignKeyConstraint( - $foreignKey->getQuotedLocalColumns($this), - $this->emulateSchemaNamespacing($foreignKey->getQuotedForeignTableName($this)), - $foreignKey->getQuotedForeignColumns($this), - $foreignKey->getName(), - $foreignKey->getOptions(), - )); - } - - /** - * {@inheritDoc} - */ - protected function _getCreateTableSQL($name, array $columns, array $options = []) - { - $name = $this->emulateSchemaNamespacing($name); - $queryFields = $this->getColumnDeclarationListSQL($columns); - - if (isset($options['uniqueConstraints']) && ! empty($options['uniqueConstraints'])) { - foreach ($options['uniqueConstraints'] as $constraintName => $definition) { - $queryFields .= ', ' . $this->getUniqueConstraintDeclarationSQL($constraintName, $definition); - } - } - - $queryFields .= $this->getNonAutoincrementPrimaryKeyDefinition($columns, $options); - - if (isset($options['foreignKeys'])) { - foreach ($options['foreignKeys'] as $foreignKey) { - $queryFields .= ', ' . $this->getForeignKeyDeclarationSQL($foreignKey); - } - } - - $tableComment = ''; - if (isset($options['comment'])) { - $comment = trim($options['comment'], " '"); - - $tableComment = $this->getInlineTableCommentSQL($comment); - } - - $query = ['CREATE TABLE ' . $name . ' ' . $tableComment . '(' . $queryFields . ')']; - - if (isset($options['alter']) && $options['alter'] === true) { - return $query; - } - - if (isset($options['indexes']) && ! empty($options['indexes'])) { - foreach ($options['indexes'] as $indexDef) { - $query[] = $this->getCreateIndexSQL($indexDef, $name); - } - } - - if (isset($options['unique']) && ! empty($options['unique'])) { - foreach ($options['unique'] as $indexDef) { - $query[] = $this->getCreateIndexSQL($indexDef, $name); - } - } - - return $query; - } - - /** - * Generate a PRIMARY KEY definition if no autoincrement value is used - * - * @param mixed[][] $columns - * @param mixed[] $options - */ - private function getNonAutoincrementPrimaryKeyDefinition(array $columns, array $options): string - { - if (empty($options['primary'])) { - return ''; - } - - $keyColumns = array_unique(array_values($options['primary'])); - - foreach ($keyColumns as $keyColumn) { - if (! empty($columns[$keyColumn]['autoincrement'])) { - return ''; - } - } - - return ', PRIMARY KEY(' . implode(', ', $keyColumns) . ')'; - } - - /** - * {@inheritDoc} - */ - protected function getVarcharTypeDeclarationSQLSnippet($length, $fixed) - { - return $fixed ? ($length > 0 ? 'CHAR(' . $length . ')' : 'CHAR(255)') - : ($length > 0 ? 'VARCHAR(' . $length . ')' : 'TEXT'); - } - - /** - * {@inheritDoc} - */ - protected function getBinaryTypeDeclarationSQLSnippet($length, $fixed) - { - return 'BLOB'; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getBinaryMaxLength() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'SqlitePlatform::getBinaryMaxLength() is deprecated.', - ); - - return 0; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getBinaryDefaultLength() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3263', - 'Relying on the default binary column length is deprecated, specify the length explicitly.', - ); - - return 0; - } - - /** - * {@inheritDoc} - */ - public function getClobTypeDeclarationSQL(array $column) - { - return 'CLOB'; - } - - /** - * @deprecated - * - * {@inheritDoc} - */ - public function getListTableConstraintsSQL($table) - { - $table = $this->emulateSchemaNamespacing($table); - - return sprintf( - "SELECT sql FROM sqlite_master WHERE type='index' AND tbl_name = %s AND sql NOT NULL ORDER BY name", - $this->quoteStringLiteral($table), - ); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableColumnsSQL($table, $database = null) - { - $table = $this->emulateSchemaNamespacing($table); - - return sprintf('PRAGMA table_info(%s)', $this->quoteStringLiteral($table)); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTableIndexesSQL($table, $database = null) - { - $table = $this->emulateSchemaNamespacing($table); - - return sprintf('PRAGMA index_list(%s)', $this->quoteStringLiteral($table)); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * {@inheritDoc} - */ - public function getListTablesSQL() - { - return 'SELECT name FROM sqlite_master' - . " WHERE type = 'table'" - . " AND name != 'sqlite_sequence'" - . " AND name != 'geometry_columns'" - . " AND name != 'spatial_ref_sys'" - . ' UNION ALL SELECT name FROM sqlite_temp_master' - . " WHERE type = 'table' ORDER BY name"; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractSchemaManager} class hierarchy. - */ - public function getListViewsSQL($database) - { - return "SELECT name, sql FROM sqlite_master WHERE type='view' AND sql NOT NULL"; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getAdvancedForeignKeyOptionsSQL(ForeignKeyConstraint $foreignKey) - { - $query = parent::getAdvancedForeignKeyOptionsSQL($foreignKey); - - if (! $foreignKey->hasOption('deferrable') || $foreignKey->getOption('deferrable') === false) { - $query .= ' NOT'; - } - - $query .= ' DEFERRABLE'; - $query .= ' INITIALLY'; - - if ($foreignKey->hasOption('deferred') && $foreignKey->getOption('deferred') !== false) { - $query .= ' DEFERRED'; - } else { - $query .= ' IMMEDIATE'; - } - - return $query; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function supportsCreateDropDatabase() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5513', - '%s is deprecated.', - __METHOD__, - ); - - return false; - } - - /** - * {@inheritDoc} - */ - public function supportsIdentityColumns() - { - return true; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsColumnCollation() - { - return true; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function supportsInlineColumnComments() - { - return true; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4749', - 'SqlitePlatform::getName() is deprecated. Identify platforms by their class.', - ); - - return 'sqlite'; - } - - /** - * {@inheritDoc} - */ - public function getTruncateTableSQL($tableName, $cascade = false) - { - $tableIdentifier = new Identifier($tableName); - $tableName = $this->emulateSchemaNamespacing($tableIdentifier->getQuotedName($this)); - - return 'DELETE FROM ' . $tableName; - } - - /** - * User-defined function for Sqlite that is used with PDO::sqliteCreateFunction(). - * - * @deprecated The driver will use {@see sqrt()} in the next major release. - * - * @param int|float $value - * - * @return float - */ - public static function udfSqrt($value) - { - return sqrt($value); - } - - /** - * User-defined function for Sqlite that implements MOD(a, b). - * - * @deprecated The driver will use {@see UserDefinedFunctions::mod()} in the next major release. - * - * @param int $a - * @param int $b - * - * @return int - */ - public static function udfMod($a, $b) - { - return UserDefinedFunctions::mod($a, $b); - } - - /** - * @deprecated The driver will use {@see UserDefinedFunctions::locate()} in the next major release. - * - * @param string $str - * @param string $substr - * @param int $offset - * - * @return int - */ - public static function udfLocate($str, $substr, $offset = 0) - { - return UserDefinedFunctions::locate($str, $substr, $offset); - } - - /** - * {@inheritDoc} - * - * @deprecated This API is not portable. - */ - public function getForUpdateSQL() - { - return ''; - } - - /** - * {@inheritDoc} - * - * @internal The method should be only used from within the {@see AbstractPlatform} class hierarchy. - */ - public function getInlineColumnCommentSQL($comment) - { - return '--' . str_replace("\n", "\n--", $comment) . "\n"; - } - - private function getInlineTableCommentSQL(string $comment): string - { - return $this->getInlineColumnCommentSQL($comment); - } - - /** - * {@inheritDoc} - */ - protected function initializeDoctrineTypeMappings() - { - $this->doctrineTypeMapping = [ - 'bigint' => Types\Types::BIGINT, - 'bigserial' => Types\Types::BIGINT, - 'blob' => Types\Types::BLOB, - 'boolean' => Types\Types::BOOLEAN, - 'char' => Types\Types::STRING, - 'clob' => Types\Types::TEXT, - 'date' => Types\Types::DATE_MUTABLE, - 'datetime' => Types\Types::DATETIME_MUTABLE, - 'decimal' => Types\Types::DECIMAL, - 'double' => Types\Types::FLOAT, - 'double precision' => Types\Types::FLOAT, - 'float' => Types\Types::FLOAT, - 'image' => Types\Types::STRING, - 'int' => Types\Types::INTEGER, - 'integer' => Types\Types::INTEGER, - 'longtext' => Types\Types::TEXT, - 'longvarchar' => Types\Types::STRING, - 'mediumint' => Types\Types::INTEGER, - 'mediumtext' => Types\Types::TEXT, - 'ntext' => Types\Types::STRING, - 'numeric' => Types\Types::DECIMAL, - 'nvarchar' => Types\Types::STRING, - 'real' => Types\Types::FLOAT, - 'serial' => Types\Types::INTEGER, - 'smallint' => Types\Types::SMALLINT, - 'text' => Types\Types::TEXT, - 'time' => Types\Types::TIME_MUTABLE, - 'timestamp' => Types\Types::DATETIME_MUTABLE, - 'tinyint' => Types\Types::BOOLEAN, - 'tinytext' => Types\Types::TEXT, - 'varchar' => Types\Types::STRING, - 'varchar2' => Types\Types::STRING, - ]; - } - - /** - * {@inheritDoc} - * - * @deprecated Implement {@see createReservedKeywordsList()} instead. - */ - protected function getReservedKeywordsClass() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - 'SqlitePlatform::getReservedKeywordsClass() is deprecated,' - . ' use SqlitePlatform::createReservedKeywordsList() instead.', - ); - - return Keywords\SQLiteKeywords::class; - } - - /** - * {@inheritDoc} - */ - protected function getPreAlterTableIndexForeignKeySQL(TableDiff $diff) - { - return []; - } - - /** - * {@inheritDoc} - */ - protected function getPostAlterTableIndexForeignKeySQL(TableDiff $diff) - { - $table = $diff->getOldTable(); - - if (! $table instanceof Table) { - throw new Exception( - 'Sqlite platform requires for alter table the table diff with reference to original table schema', - ); - } - - $sql = []; - $tableName = $diff->getNewName(); - - if ($tableName === false) { - $tableName = $diff->getName($this); - } - - foreach ($this->getIndexesInAlteredTable($diff, $table) as $index) { - if ($index->isPrimary()) { - continue; - } - - $sql[] = $this->getCreateIndexSQL($index, $tableName->getQuotedName($this)); - } - - return $sql; - } - - /** - * {@inheritDoc} - */ - protected function doModifyLimitQuery($query, $limit, $offset) - { - if ($limit === null && $offset > 0) { - return sprintf('%s LIMIT -1 OFFSET %d', $query, $offset); - } - - return parent::doModifyLimitQuery($query, $limit, $offset); - } - - /** - * {@inheritDoc} - */ - public function getBlobTypeDeclarationSQL(array $column) - { - return 'BLOB'; - } - - /** - * {@inheritDoc} - */ - public function getTemporaryTableName($tableName) - { - $tableName = $this->emulateSchemaNamespacing($tableName); - - return $tableName; - } - - /** - * {@inheritDoc} - * - * @deprecated - * - * Sqlite Platform emulates schema by underscoring each dot and generating tables - * into the default database. - * - * This hack is implemented to be able to use SQLite as testdriver when - * using schema supporting databases. - */ - public function canEmulateSchemas() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4805', - 'SqlitePlatform::canEmulateSchemas() is deprecated.', - ); - - return $this->schemaEmulationEnabled; - } - - /** - * {@inheritDoc} - */ - public function getCreateTablesSQL(array $tables): array - { - $sql = []; - - foreach ($tables as $table) { - $sql = array_merge($sql, $this->getCreateTableSQL($table)); - } - - return $sql; - } - - /** - * {@inheritDoc} - */ - public function getCreateIndexSQL(Index $index, $table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this); - } - - $name = $index->getQuotedName($this); - $columns = $index->getColumns(); - - if (count($columns) === 0) { - throw new InvalidArgumentException(sprintf( - 'Incomplete or invalid index definition %s on table %s', - $name, - $table, - )); - } - - if ($index->isPrimary()) { - return $this->getCreatePrimaryKeySQL($index, $table); - } - - if (strpos($table, '.') !== false) { - [$schema, $table] = explode('.', $table, 2); - $name = $schema . '.' . $name; - } - - $query = 'CREATE ' . $this->getCreateIndexSQLFlags($index) . 'INDEX ' . $name . ' ON ' . $table; - $query .= ' (' . $this->getIndexFieldDeclarationListSQL($index) . ')' . $this->getPartialIndexSQL($index); - - return $query; - } - - /** - * {@inheritDoc} - */ - public function getDropTablesSQL(array $tables): array - { - $sql = []; - - foreach ($tables as $table) { - $sql[] = $this->getDropTableSQL($table->getQuotedName($this)); - } - - return $sql; - } - - /** - * {@inheritDoc} - */ - public function getCreatePrimaryKeySQL(Index $index, $table) - { - throw new Exception('Sqlite platform does not support alter primary key.'); - } - - /** - * {@inheritDoc} - */ - public function getCreateForeignKeySQL(ForeignKeyConstraint $foreignKey, $table) - { - throw new Exception('Sqlite platform does not support alter foreign key.'); - } - - /** - * {@inheritDoc} - */ - public function getDropForeignKeySQL($foreignKey, $table) - { - throw new Exception('Sqlite platform does not support alter foreign key.'); - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getCreateConstraintSQL(Constraint $constraint, $table) - { - throw new Exception('Sqlite platform does not support alter constraint.'); - } - - /** - * {@inheritDoc} - * - * @param int|null $createFlags - * @psalm-param int-mask-of|null $createFlags - */ - public function getCreateTableSQL(Table $table, $createFlags = null) - { - $createFlags = $createFlags ?? self::CREATE_INDEXES | self::CREATE_FOREIGNKEYS; - - return parent::getCreateTableSQL($table, $createFlags); - } - - /** - * @deprecated The SQL used for schema introspection is an implementation detail and should not be relied upon. - * - * @param string $table - * @param string|null $database - * - * @return string - */ - public function getListTableForeignKeysSQL($table, $database = null) - { - $table = $this->emulateSchemaNamespacing($table); - - return sprintf('PRAGMA foreign_key_list(%s)', $this->quoteStringLiteral($table)); - } - - /** - * {@inheritDoc} - */ - public function getAlterTableSQL(TableDiff $diff) - { - $sql = $this->getSimpleAlterTableSQL($diff); - if ($sql !== false) { - return $sql; - } - - $table = $diff->getOldTable(); - - if (! $table instanceof Table) { - throw new Exception( - 'Sqlite platform requires for alter table the table diff with reference to original table schema', - ); - } - - $columns = []; - $oldColumnNames = []; - $newColumnNames = []; - $columnSql = []; - - foreach ($table->getColumns() as $columnName => $column) { - $columnName = strtolower($columnName); - $columns[$columnName] = $column; - $oldColumnNames[$columnName] = $newColumnNames[$columnName] = $column->getQuotedName($this); - } - - foreach ($diff->getDroppedColumns() as $column) { - if ($this->onSchemaAlterTableRemoveColumn($column, $diff, $columnSql)) { - continue; - } - - $columnName = strtolower($column->getName()); - if (! isset($columns[$columnName])) { - continue; - } - - unset( - $columns[$columnName], - $oldColumnNames[$columnName], - $newColumnNames[$columnName], - ); - } - - foreach ($diff->getRenamedColumns() as $oldColumnName => $column) { - if ($this->onSchemaAlterTableRenameColumn($oldColumnName, $column, $diff, $columnSql)) { - continue; - } - - $oldColumnName = strtolower($oldColumnName); - - $columns = $this->replaceColumn( - $table->getName(), - $columns, - $oldColumnName, - $column, - ); - - if (! isset($newColumnNames[$oldColumnName])) { - continue; - } - - $newColumnNames[$oldColumnName] = $column->getQuotedName($this); - } - - foreach ($diff->getModifiedColumns() as $columnDiff) { - if ($this->onSchemaAlterTableChangeColumn($columnDiff, $diff, $columnSql)) { - continue; - } - - $oldColumn = $columnDiff->getOldColumn() ?? $columnDiff->getOldColumnName(); - - $oldColumnName = strtolower($oldColumn->getName()); - - $columns = $this->replaceColumn( - $table->getName(), - $columns, - $oldColumnName, - $columnDiff->getNewColumn(), - ); - - if (! isset($newColumnNames[$oldColumnName])) { - continue; - } - - $newColumnNames[$oldColumnName] = $columnDiff->getNewColumn()->getQuotedName($this); - } - - foreach ($diff->getAddedColumns() as $column) { - if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) { - continue; - } - - $columns[strtolower($column->getName())] = $column; - } - - $sql = []; - $tableSql = []; - if (! $this->onSchemaAlterTable($diff, $tableSql)) { - $tableName = $table->getName(); - if (strpos($tableName, '.') !== false) { - [, $tableName] = explode('.', $tableName, 2); - } - - $dataTable = new Table('__temp__' . $tableName); - - $newTable = new Table( - $table->getQuotedName($this), - $columns, - $this->getPrimaryIndexInAlteredTable($diff, $table), - [], - $this->getForeignKeysInAlteredTable($diff, $table), - $table->getOptions(), - ); - $newTable->addOption('alter', true); - - $sql = $this->getPreAlterTableIndexForeignKeySQL($diff); - - $sql[] = sprintf( - 'CREATE TEMPORARY TABLE %s AS SELECT %s FROM %s', - $dataTable->getQuotedName($this), - implode(', ', $oldColumnNames), - $table->getQuotedName($this), - ); - $sql[] = $this->getDropTableSQL($table); - - $sql = array_merge($sql, $this->getCreateTableSQL($newTable)); - $sql[] = sprintf( - 'INSERT INTO %s (%s) SELECT %s FROM %s', - $newTable->getQuotedName($this), - implode(', ', $newColumnNames), - implode(', ', $oldColumnNames), - $dataTable->getQuotedName($this), - ); - $sql[] = $this->getDropTableSQL($dataTable->getQuotedName($this)); - - $newName = $diff->getNewName(); - - if ($newName !== false) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5663', - 'Generation of "rename table" SQL using %s is deprecated. Use getRenameTableSQL() instead.', - __METHOD__, - ); - - $sql[] = sprintf( - 'ALTER TABLE %s RENAME TO %s', - $newTable->getQuotedName($this), - $newName->getQuotedName($this), - ); - } - - $sql = array_merge($sql, $this->getPostAlterTableIndexForeignKeySQL($diff)); - } - - return array_merge($sql, $tableSql, $columnSql); - } - - /** - * Replace the column with the given name with the new column. - * - * @param string $tableName - * @param array $columns - * @param string $columnName - * - * @return array - * - * @throws Exception - */ - private function replaceColumn($tableName, array $columns, $columnName, Column $column): array - { - $keys = array_keys($columns); - $index = array_search($columnName, $keys, true); - - if ($index === false) { - throw SchemaException::columnDoesNotExist($columnName, $tableName); - } - - $values = array_values($columns); - - $keys[$index] = strtolower($column->getName()); - $values[$index] = $column; - - return array_combine($keys, $values); - } - - /** - * @return string[]|false - * - * @throws Exception - */ - private function getSimpleAlterTableSQL(TableDiff $diff) - { - // Suppress changes on integer type autoincrement columns. - foreach ($diff->getModifiedColumns() as $columnDiff) { - $oldColumn = $columnDiff->getOldColumn(); - - if ($oldColumn === null) { - continue; - } - - $newColumn = $columnDiff->getNewColumn(); - - if (! $newColumn->getAutoincrement() || ! $newColumn->getType() instanceof IntegerType) { - continue; - } - - $oldColumnName = $oldColumn->getName(); - - if (! $columnDiff->hasTypeChanged() && $columnDiff->hasUnsignedChanged()) { - unset($diff->changedColumns[$oldColumnName]); - - continue; - } - - $fromColumnType = $oldColumn->getType(); - - if (! ($fromColumnType instanceof Types\SmallIntType) && ! ($fromColumnType instanceof Types\BigIntType)) { - continue; - } - - unset($diff->changedColumns[$oldColumnName]); - } - - if ( - count($diff->getModifiedColumns()) > 0 - || count($diff->getDroppedColumns()) > 0 - || count($diff->getRenamedColumns()) > 0 - || count($diff->getAddedIndexes()) > 0 - || count($diff->getModifiedIndexes()) > 0 - || count($diff->getDroppedIndexes()) > 0 - || count($diff->getRenamedIndexes()) > 0 - || count($diff->getAddedForeignKeys()) > 0 - || count($diff->getModifiedForeignKeys()) > 0 - || count($diff->getDroppedForeignKeys()) > 0 - ) { - return false; - } - - $table = $diff->getOldTable() ?? $diff->getName($this); - - $sql = []; - $tableSql = []; - $columnSql = []; - - foreach ($diff->getAddedColumns() as $column) { - if ($this->onSchemaAlterTableAddColumn($column, $diff, $columnSql)) { - continue; - } - - $definition = array_merge([ - 'unique' => null, - 'autoincrement' => null, - 'default' => null, - ], $column->toArray()); - - $type = $definition['type']; - - switch (true) { - case isset($definition['columnDefinition']) || $definition['autoincrement'] || $definition['unique']: - case $type instanceof Types\DateTimeType && $definition['default'] === $this->getCurrentTimestampSQL(): - case $type instanceof Types\DateType && $definition['default'] === $this->getCurrentDateSQL(): - case $type instanceof Types\TimeType && $definition['default'] === $this->getCurrentTimeSQL(): - return false; - } - - $definition['name'] = $column->getQuotedName($this); - if ($type instanceof Types\StringType) { - $definition['length'] ??= 255; - } - - $sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' ADD COLUMN ' - . $this->getColumnDeclarationSQL($definition['name'], $definition); - } - - if (! $this->onSchemaAlterTable($diff, $tableSql)) { - if ($diff->newName !== false) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5663', - 'Generation of SQL that renames a table using %s is deprecated.' - . ' Use getRenameTableSQL() instead.', - __METHOD__, - ); - - $newTable = new Identifier($diff->newName); - - $sql[] = 'ALTER TABLE ' . $table->getQuotedName($this) . ' RENAME TO ' - . $newTable->getQuotedName($this); - } - } - - return array_merge($sql, $tableSql, $columnSql); - } - - /** @return string[] */ - private function getColumnNamesInAlteredTable(TableDiff $diff, Table $fromTable): array - { - $columns = []; - - foreach ($fromTable->getColumns() as $columnName => $column) { - $columns[strtolower($columnName)] = $column->getName(); - } - - foreach ($diff->getDroppedColumns() as $column) { - $columnName = strtolower($column->getName()); - if (! isset($columns[$columnName])) { - continue; - } - - unset($columns[$columnName]); - } - - foreach ($diff->getRenamedColumns() as $oldColumnName => $column) { - $columnName = $column->getName(); - $columns[strtolower($oldColumnName)] = $columnName; - $columns[strtolower($columnName)] = $columnName; - } - - foreach ($diff->getModifiedColumns() as $columnDiff) { - $oldColumn = $columnDiff->getOldColumn() ?? $columnDiff->getOldColumnName(); - - $oldColumnName = $oldColumn->getName(); - $newColumnName = $columnDiff->getNewColumn()->getName(); - $columns[strtolower($oldColumnName)] = $newColumnName; - $columns[strtolower($newColumnName)] = $newColumnName; - } - - foreach ($diff->getAddedColumns() as $column) { - $columnName = $column->getName(); - $columns[strtolower($columnName)] = $columnName; - } - - return $columns; - } - - /** @return Index[] */ - private function getIndexesInAlteredTable(TableDiff $diff, Table $fromTable): array - { - $indexes = $fromTable->getIndexes(); - $columnNames = $this->getColumnNamesInAlteredTable($diff, $fromTable); - - foreach ($indexes as $key => $index) { - foreach ($diff->getRenamedIndexes() as $oldIndexName => $renamedIndex) { - if (strtolower($key) !== strtolower($oldIndexName)) { - continue; - } - - unset($indexes[$key]); - } - - $changed = false; - $indexColumns = []; - foreach ($index->getColumns() as $columnName) { - $normalizedColumnName = strtolower($columnName); - if (! isset($columnNames[$normalizedColumnName])) { - unset($indexes[$key]); - continue 2; - } - - $indexColumns[] = $columnNames[$normalizedColumnName]; - if ($columnName === $columnNames[$normalizedColumnName]) { - continue; - } - - $changed = true; - } - - if (! $changed) { - continue; - } - - $indexes[$key] = new Index( - $index->getName(), - $indexColumns, - $index->isUnique(), - $index->isPrimary(), - $index->getFlags(), - ); - } - - foreach ($diff->getDroppedIndexes() as $index) { - $indexName = strtolower($index->getName()); - if (strlen($indexName) === 0 || ! isset($indexes[$indexName])) { - continue; - } - - unset($indexes[$indexName]); - } - - foreach ( - array_merge( - $diff->getModifiedIndexes(), - $diff->getAddedIndexes(), - $diff->getRenamedIndexes(), - ) as $index - ) { - $indexName = strtolower($index->getName()); - if (strlen($indexName) > 0) { - $indexes[$indexName] = $index; - } else { - $indexes[] = $index; - } - } - - return $indexes; - } - - /** @return ForeignKeyConstraint[] */ - private function getForeignKeysInAlteredTable(TableDiff $diff, Table $fromTable): array - { - $foreignKeys = $fromTable->getForeignKeys(); - $columnNames = $this->getColumnNamesInAlteredTable($diff, $fromTable); - - foreach ($foreignKeys as $key => $constraint) { - $changed = false; - $localColumns = []; - foreach ($constraint->getLocalColumns() as $columnName) { - $normalizedColumnName = strtolower($columnName); - if (! isset($columnNames[$normalizedColumnName])) { - unset($foreignKeys[$key]); - continue 2; - } - - $localColumns[] = $columnNames[$normalizedColumnName]; - if ($columnName === $columnNames[$normalizedColumnName]) { - continue; - } - - $changed = true; - } - - if (! $changed) { - continue; - } - - $foreignKeys[$key] = new ForeignKeyConstraint( - $localColumns, - $constraint->getForeignTableName(), - $constraint->getForeignColumns(), - $constraint->getName(), - $constraint->getOptions(), - ); - } - - foreach ($diff->getDroppedForeignKeys() as $constraint) { - if (! $constraint instanceof ForeignKeyConstraint) { - $constraint = new Identifier($constraint); - } - - $constraintName = strtolower($constraint->getName()); - if (strlen($constraintName) === 0 || ! isset($foreignKeys[$constraintName])) { - continue; - } - - unset($foreignKeys[$constraintName]); - } - - foreach (array_merge($diff->getModifiedForeignKeys(), $diff->getAddedForeignKeys()) as $constraint) { - $constraintName = strtolower($constraint->getName()); - if (strlen($constraintName) > 0) { - $foreignKeys[$constraintName] = $constraint; - } else { - $foreignKeys[] = $constraint; - } - } - - return $foreignKeys; - } - - /** @return Index[] */ - private function getPrimaryIndexInAlteredTable(TableDiff $diff, Table $fromTable): array - { - $primaryIndex = []; - - foreach ($this->getIndexesInAlteredTable($diff, $fromTable) as $index) { - if (! $index->isPrimary()) { - continue; - } - - $primaryIndex = [$index->getName() => $index]; - } - - return $primaryIndex; - } - - public function createSchemaManager(Connection $connection): SqliteSchemaManager - { - return new SqliteSchemaManager($connection, $this); - } -} diff --git a/vendor/doctrine/dbal/src/Platforms/TrimMode.php b/vendor/doctrine/dbal/src/Platforms/TrimMode.php deleted file mode 100644 index 01356c0..0000000 --- a/vendor/doctrine/dbal/src/Platforms/TrimMode.php +++ /dev/null @@ -1,21 +0,0 @@ -converter = $converter; - } - - public function prepare(string $sql): DriverStatement - { - return new Statement( - parent::prepare($sql), - $this->converter, - ); - } - - public function query(string $sql): DriverResult - { - return new Result( - parent::query($sql), - $this->converter, - ); - } -} diff --git a/vendor/doctrine/dbal/src/Portability/Converter.php b/vendor/doctrine/dbal/src/Portability/Converter.php deleted file mode 100644 index d050397..0000000 --- a/vendor/doctrine/dbal/src/Portability/Converter.php +++ /dev/null @@ -1,300 +0,0 @@ -createConvertValue($convertEmptyStringToNull, $rightTrimString); - $convertNumeric = $this->createConvertRow($convertValue, null); - $convertAssociative = $this->createConvertRow($convertValue, $case); - - $this->convertNumeric = $this->createConvert($convertNumeric, [self::class, 'id']); - $this->convertAssociative = $this->createConvert($convertAssociative, [self::class, 'id']); - $this->convertOne = $this->createConvert($convertValue, [self::class, 'id']); - - $this->convertAllNumeric = $this->createConvertAll($convertNumeric, [self::class, 'id']); - $this->convertAllAssociative = $this->createConvertAll($convertAssociative, [self::class, 'id']); - $this->convertFirstColumn = $this->createConvertAll($convertValue, [self::class, 'id']); - } - - /** - * @param array|false $row - * - * @return list|false - */ - public function convertNumeric($row) - { - return ($this->convertNumeric)($row); - } - - /** - * @param array|false $row - * - * @return array|false - */ - public function convertAssociative($row) - { - return ($this->convertAssociative)($row); - } - - /** - * @param mixed|false $value - * - * @return mixed|false - */ - public function convertOne($value) - { - return ($this->convertOne)($value); - } - - /** - * @param list> $data - * - * @return list> - */ - public function convertAllNumeric(array $data): array - { - return ($this->convertAllNumeric)($data); - } - - /** - * @param list> $data - * - * @return list> - */ - public function convertAllAssociative(array $data): array - { - return ($this->convertAllAssociative)($data); - } - - /** - * @param list $data - * - * @return list - */ - public function convertFirstColumn(array $data): array - { - return ($this->convertFirstColumn)($data); - } - - /** - * @param T $value - * - * @return T - * - * @template T - */ - private static function id($value) - { - return $value; - } - - /** - * @param T $value - * - * @return T|null - * - * @template T - */ - private static function convertEmptyStringToNull($value) - { - if ($value === '') { - return null; - } - - return $value; - } - - /** - * @param T $value - * - * @return T|string - * @psalm-return (T is string ? string : T) - * - * @template T - */ - private static function rightTrimString($value) - { - if (! is_string($value)) { - return $value; - } - - return rtrim($value); - } - - /** - * Creates a function that will convert each individual value retrieved from the database - * - * @param bool $convertEmptyStringToNull Whether each empty string should be converted to NULL - * @param bool $rightTrimString Whether each string should right-trimmed - * - * @return callable|null The resulting function or NULL if no conversion is needed - */ - private function createConvertValue(bool $convertEmptyStringToNull, bool $rightTrimString): ?callable - { - $functions = []; - - if ($convertEmptyStringToNull) { - $functions[] = [self::class, 'convertEmptyStringToNull']; - } - - if ($rightTrimString) { - $functions[] = [self::class, 'rightTrimString']; - } - - return $this->compose(...$functions); - } - - /** - * Creates a function that will convert each array-row retrieved from the database - * - * @param callable|null $function The function that will convert each value - * @param self::CASE_LOWER|self::CASE_UPPER|null $case Column name case - * - * @return callable|null The resulting function or NULL if no conversion is needed - */ - private function createConvertRow(?callable $function, ?int $case): ?callable - { - $functions = []; - - if ($function !== null) { - $functions[] = $this->createMapper($function); - } - - if ($case !== null) { - $functions[] = static function (array $row) use ($case): array { - return array_change_key_case($row, $case); - }; - } - - return $this->compose(...$functions); - } - - /** - * Creates a function that will be applied to the return value of Statement::fetch*() - * or an identity function if no conversion is needed - * - * @param callable|null $function The function that will convert each tow - * @param callable $id Identity function - */ - private function createConvert(?callable $function, callable $id): callable - { - if ($function === null) { - return $id; - } - - return /** - * @param T $value - * - * @psalm-return (T is false ? false : T) - * - * @template T - */ - static function ($value) use ($function) { - if ($value === false) { - return false; - } - - return $function($value); - }; - } - - /** - * Creates a function that will be applied to the return value of Statement::fetchAll*() - * or an identity function if no transformation is required - * - * @param callable|null $function The function that will transform each value - * @param callable $id Identity function - */ - private function createConvertAll(?callable $function, callable $id): callable - { - if ($function === null) { - return $id; - } - - return $this->createMapper($function); - } - - /** - * Creates a function that maps each value of the array using the given function - * - * @param callable $function The function that maps each value of the array - */ - private function createMapper(callable $function): callable - { - return static function (array $array) use ($function): array { - return array_map($function, $array); - }; - } - - /** - * Creates a composition of the given set of functions - * - * @param callable(T):T ...$functions The functions to compose - * - * @return callable(T):T|null - * - * @template T - */ - private function compose(callable ...$functions): ?callable - { - return array_reduce($functions, static function (?callable $carry, callable $item): callable { - if ($carry === null) { - return $item; - } - - return /** - * @param T $value - * - * @return T - * - * @template T - */ - static function ($value) use ($carry, $item) { - return $item($carry($value)); - }; - }); - } -} diff --git a/vendor/doctrine/dbal/src/Portability/Driver.php b/vendor/doctrine/dbal/src/Portability/Driver.php deleted file mode 100644 index a5ac967..0000000 --- a/vendor/doctrine/dbal/src/Portability/Driver.php +++ /dev/null @@ -1,83 +0,0 @@ -mode = $mode; - $this->case = $case; - } - - /** - * {@inheritDoc} - */ - public function connect( - #[SensitiveParameter] - array $params - ) { - $connection = parent::connect($params); - - $portability = (new OptimizeFlags())( - $this->getDatabasePlatform(), - $this->mode, - ); - - $case = null; - - if ($this->case !== 0 && ($portability & Connection::PORTABILITY_FIX_CASE) !== 0) { - $nativeConnection = null; - if (method_exists($connection, 'getNativeConnection')) { - try { - $nativeConnection = $connection->getNativeConnection(); - } catch (LogicException $e) { - } - } - - if ($nativeConnection instanceof PDO) { - $portability &= ~Connection::PORTABILITY_FIX_CASE; - $nativeConnection->setAttribute( - PDO::ATTR_CASE, - $this->case === ColumnCase::LOWER ? PDO::CASE_LOWER : PDO::CASE_UPPER, - ); - } else { - $case = $this->case === ColumnCase::LOWER ? Converter::CASE_LOWER : Converter::CASE_UPPER; - } - } - - $convertEmptyStringToNull = ($portability & Connection::PORTABILITY_EMPTY_TO_NULL) !== 0; - $rightTrimString = ($portability & Connection::PORTABILITY_RTRIM) !== 0; - - if (! $convertEmptyStringToNull && ! $rightTrimString && $case === null) { - return $connection; - } - - return new Connection( - $connection, - new Converter($convertEmptyStringToNull, $rightTrimString, $case), - ); - } -} diff --git a/vendor/doctrine/dbal/src/Portability/Middleware.php b/vendor/doctrine/dbal/src/Portability/Middleware.php deleted file mode 100644 index fae2c55..0000000 --- a/vendor/doctrine/dbal/src/Portability/Middleware.php +++ /dev/null @@ -1,38 +0,0 @@ -mode = $mode; - $this->case = $case; - } - - public function wrap(DriverInterface $driver): DriverInterface - { - if ($this->mode !== 0) { - return new Driver($driver, $this->mode, $this->case); - } - - return $driver; - } -} diff --git a/vendor/doctrine/dbal/src/Portability/OptimizeFlags.php b/vendor/doctrine/dbal/src/Portability/OptimizeFlags.php deleted file mode 100644 index 884a936..0000000 --- a/vendor/doctrine/dbal/src/Portability/OptimizeFlags.php +++ /dev/null @@ -1,42 +0,0 @@ - - */ - private static array $platforms = [ - DB2Platform::class => 0, - OraclePlatform::class => Connection::PORTABILITY_EMPTY_TO_NULL, - PostgreSQLPlatform::class => 0, - SqlitePlatform::class => 0, - SQLServerPlatform::class => 0, - ]; - - public function __invoke(AbstractPlatform $platform, int $flags): int - { - foreach (self::$platforms as $class => $mask) { - if ($platform instanceof $class) { - $flags &= ~$mask; - - break; - } - } - - return $flags; - } -} diff --git a/vendor/doctrine/dbal/src/Portability/Result.php b/vendor/doctrine/dbal/src/Portability/Result.php deleted file mode 100644 index da1eca9..0000000 --- a/vendor/doctrine/dbal/src/Portability/Result.php +++ /dev/null @@ -1,81 +0,0 @@ -converter = $converter; - } - - /** - * {@inheritDoc} - */ - public function fetchNumeric() - { - return $this->converter->convertNumeric( - parent::fetchNumeric(), - ); - } - - /** - * {@inheritDoc} - */ - public function fetchAssociative() - { - return $this->converter->convertAssociative( - parent::fetchAssociative(), - ); - } - - /** - * {@inheritDoc} - */ - public function fetchOne() - { - return $this->converter->convertOne( - parent::fetchOne(), - ); - } - - /** - * {@inheritDoc} - */ - public function fetchAllNumeric(): array - { - return $this->converter->convertAllNumeric( - parent::fetchAllNumeric(), - ); - } - - /** - * {@inheritDoc} - */ - public function fetchAllAssociative(): array - { - return $this->converter->convertAllAssociative( - parent::fetchAllAssociative(), - ); - } - - /** - * {@inheritDoc} - */ - public function fetchFirstColumn(): array - { - return $this->converter->convertFirstColumn( - parent::fetchFirstColumn(), - ); - } -} diff --git a/vendor/doctrine/dbal/src/Portability/Statement.php b/vendor/doctrine/dbal/src/Portability/Statement.php deleted file mode 100644 index 8fcd79d..0000000 --- a/vendor/doctrine/dbal/src/Portability/Statement.php +++ /dev/null @@ -1,36 +0,0 @@ -Statement and applies portability measures. - */ - public function __construct(DriverStatement $stmt, Converter $converter) - { - parent::__construct($stmt); - - $this->converter = $converter; - } - - /** - * {@inheritDoc} - */ - public function execute($params = null): ResultInterface - { - return new Result( - parent::execute($params), - $this->converter, - ); - } -} diff --git a/vendor/doctrine/dbal/src/Query.php b/vendor/doctrine/dbal/src/Query.php deleted file mode 100644 index bfc9b14..0000000 --- a/vendor/doctrine/dbal/src/Query.php +++ /dev/null @@ -1,64 +0,0 @@ - - */ - private array $params; - - /** - * The types of the parameters bound to the query. - * - * @var array - */ - private array $types; - - /** - * @param array $params - * @param array $types - * - * @psalm-suppress ImpurePropertyAssignment - */ - public function __construct(string $sql, array $params, array $types) - { - $this->sql = $sql; - $this->params = $params; - $this->types = $types; - } - - public function getSQL(): string - { - return $this->sql; - } - - /** @return array */ - public function getParams(): array - { - return $this->params; - } - - /** @return array */ - public function getTypes(): array - { - return $this->types; - } -} diff --git a/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php b/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php deleted file mode 100644 index 4cad8ec..0000000 --- a/vendor/doctrine/dbal/src/Query/Expression/CompositeExpression.php +++ /dev/null @@ -1,183 +0,0 @@ -type = $type; - - $this->addMultiple($parts); - - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3864', - 'Do not use CompositeExpression constructor directly, use static and() and or() factory methods.', - ); - } - - /** - * @param self|string $part - * @param self|string ...$parts - */ - public static function and($part, ...$parts): self - { - return new self(self::TYPE_AND, array_merge([$part], $parts)); - } - - /** - * @param self|string $part - * @param self|string ...$parts - */ - public static function or($part, ...$parts): self - { - return new self(self::TYPE_OR, array_merge([$part], $parts)); - } - - /** - * Adds multiple parts to composite expression. - * - * @deprecated This class will be made immutable. Use with() instead. - * - * @param self[]|string[] $parts - * - * @return CompositeExpression - */ - public function addMultiple(array $parts = []) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3844', - 'CompositeExpression::addMultiple() is deprecated, use CompositeExpression::with() instead.', - ); - - foreach ($parts as $part) { - $this->add($part); - } - - return $this; - } - - /** - * Adds an expression to composite expression. - * - * @deprecated This class will be made immutable. Use with() instead. - * - * @param mixed $part - * - * @return CompositeExpression - */ - public function add($part) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3844', - 'CompositeExpression::add() is deprecated, use CompositeExpression::with() instead.', - ); - - if ($part === null) { - return $this; - } - - if ($part instanceof self && count($part) === 0) { - return $this; - } - - $this->parts[] = $part; - - return $this; - } - - /** - * Returns a new CompositeExpression with the given parts added. - * - * @param self|string $part - * @param self|string ...$parts - */ - public function with($part, ...$parts): self - { - $that = clone $this; - - $that->parts = array_merge($that->parts, [$part], $parts); - - return $that; - } - - /** - * Retrieves the amount of expressions on composite expression. - * - * @return int - * @psalm-return int<0, max> - */ - #[ReturnTypeWillChange] - public function count() - { - return count($this->parts); - } - - /** - * Retrieves the string representation of this composite expression. - * - * @return string - */ - public function __toString() - { - if ($this->count() === 1) { - return (string) $this->parts[0]; - } - - return '(' . implode(') ' . $this->type . ' (', $this->parts) . ')'; - } - - /** - * Returns the type of this composite expression (AND/OR). - * - * @return string - */ - public function getType() - { - return $this->type; - } -} diff --git a/vendor/doctrine/dbal/src/Query/Expression/ExpressionBuilder.php b/vendor/doctrine/dbal/src/Query/Expression/ExpressionBuilder.php deleted file mode 100644 index d532b28..0000000 --- a/vendor/doctrine/dbal/src/Query/Expression/ExpressionBuilder.php +++ /dev/null @@ -1,323 +0,0 @@ -'; - public const LT = '<'; - public const LTE = '<='; - public const GT = '>'; - public const GTE = '>='; - - /** - * The DBAL Connection. - */ - private Connection $connection; - - /** - * Initializes a new ExpressionBuilder. - * - * @param Connection $connection The DBAL Connection. - */ - public function __construct(Connection $connection) - { - $this->connection = $connection; - } - - /** - * Creates a conjunction of the given expressions. - * - * @param string|CompositeExpression $expression - * @param string|CompositeExpression ...$expressions - */ - public function and($expression, ...$expressions): CompositeExpression - { - return CompositeExpression::and($expression, ...$expressions); - } - - /** - * Creates a disjunction of the given expressions. - * - * @param string|CompositeExpression $expression - * @param string|CompositeExpression ...$expressions - */ - public function or($expression, ...$expressions): CompositeExpression - { - return CompositeExpression::or($expression, ...$expressions); - } - - /** - * @deprecated Use `and()` instead. - * - * @param mixed $x Optional clause. Defaults = null, but requires - * at least one defined when converting to string. - * - * @return CompositeExpression - */ - public function andX($x = null) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3851', - 'ExpressionBuilder::andX() is deprecated, use ExpressionBuilder::and() instead.', - ); - - return new CompositeExpression(CompositeExpression::TYPE_AND, func_get_args()); - } - - /** - * @deprecated Use `or()` instead. - * - * @param mixed $x Optional clause. Defaults = null, but requires - * at least one defined when converting to string. - * - * @return CompositeExpression - */ - public function orX($x = null) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/3851', - 'ExpressionBuilder::orX() is deprecated, use ExpressionBuilder::or() instead.', - ); - - return new CompositeExpression(CompositeExpression::TYPE_OR, func_get_args()); - } - - /** - * Creates a comparison expression. - * - * @param mixed $x The left expression. - * @param string $operator One of the ExpressionBuilder::* constants. - * @param mixed $y The right expression. - * - * @return string - */ - public function comparison($x, $operator, $y) - { - return $x . ' ' . $operator . ' ' . $y; - } - - /** - * Creates an equality comparison expression with the given arguments. - * - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a = . Example: - * - * [php] - * // u.id = ? - * $expr->eq('u.id', '?'); - * - * @param mixed $x The left expression. - * @param mixed $y The right expression. - * - * @return string - */ - public function eq($x, $y) - { - return $this->comparison($x, self::EQ, $y); - } - - /** - * Creates a non equality comparison expression with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a <> . Example: - * - * [php] - * // u.id <> 1 - * $q->where($q->expr()->neq('u.id', '1')); - * - * @param mixed $x The left expression. - * @param mixed $y The right expression. - * - * @return string - */ - public function neq($x, $y) - { - return $this->comparison($x, self::NEQ, $y); - } - - /** - * Creates a lower-than comparison expression with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a < . Example: - * - * [php] - * // u.id < ? - * $q->where($q->expr()->lt('u.id', '?')); - * - * @param mixed $x The left expression. - * @param mixed $y The right expression. - * - * @return string - */ - public function lt($x, $y) - { - return $this->comparison($x, self::LT, $y); - } - - /** - * Creates a lower-than-equal comparison expression with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a <= . Example: - * - * [php] - * // u.id <= ? - * $q->where($q->expr()->lte('u.id', '?')); - * - * @param mixed $x The left expression. - * @param mixed $y The right expression. - * - * @return string - */ - public function lte($x, $y) - { - return $this->comparison($x, self::LTE, $y); - } - - /** - * Creates a greater-than comparison expression with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a > . Example: - * - * [php] - * // u.id > ? - * $q->where($q->expr()->gt('u.id', '?')); - * - * @param mixed $x The left expression. - * @param mixed $y The right expression. - * - * @return string - */ - public function gt($x, $y) - { - return $this->comparison($x, self::GT, $y); - } - - /** - * Creates a greater-than-equal comparison expression with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a >= . Example: - * - * [php] - * // u.id >= ? - * $q->where($q->expr()->gte('u.id', '?')); - * - * @param mixed $x The left expression. - * @param mixed $y The right expression. - * - * @return string - */ - public function gte($x, $y) - { - return $this->comparison($x, self::GTE, $y); - } - - /** - * Creates an IS NULL expression with the given arguments. - * - * @param string $x The expression to be restricted by IS NULL. - * - * @return string - */ - public function isNull($x) - { - return $x . ' IS NULL'; - } - - /** - * Creates an IS NOT NULL expression with the given arguments. - * - * @param string $x The expression to be restricted by IS NOT NULL. - * - * @return string - */ - public function isNotNull($x) - { - return $x . ' IS NOT NULL'; - } - - /** - * Creates a LIKE() comparison expression with the given arguments. - * - * @param string $x The expression to be inspected by the LIKE comparison - * @param mixed $y The pattern to compare against - * - * @return string - */ - public function like($x, $y/*, ?string $escapeChar = null */) - { - return $this->comparison($x, 'LIKE', $y) . - (func_num_args() >= 3 ? sprintf(' ESCAPE %s', func_get_arg(2)) : ''); - } - - /** - * Creates a NOT LIKE() comparison expression with the given arguments. - * - * @param string $x The expression to be inspected by the NOT LIKE comparison - * @param mixed $y The pattern to compare against - * - * @return string - */ - public function notLike($x, $y/*, ?string $escapeChar = null */) - { - return $this->comparison($x, 'NOT LIKE', $y) . - (func_num_args() >= 3 ? sprintf(' ESCAPE %s', func_get_arg(2)) : ''); - } - - /** - * Creates an IN () comparison expression with the given arguments. - * - * @param string $x The SQL expression to be matched against the set. - * @param string|string[] $y The SQL expression or an array of SQL expressions representing the set. - * - * @return string - */ - public function in($x, $y) - { - return $this->comparison($x, 'IN', '(' . implode(', ', (array) $y) . ')'); - } - - /** - * Creates a NOT IN () comparison expression with the given arguments. - * - * @param string $x The SQL expression to be matched against the set. - * @param string|string[] $y The SQL expression or an array of SQL expressions representing the set. - * - * @return string - */ - public function notIn($x, $y) - { - return $this->comparison($x, 'NOT IN', '(' . implode(', ', (array) $y) . ')'); - } - - /** - * Builds an SQL literal from a given input parameter. - * - * The usage of this method is discouraged. Use prepared statements - * or {@see AbstractPlatform::quoteStringLiteral()} instead. - * - * @param mixed $input The parameter to be quoted. - * @param int|null $type The type of the parameter. - * - * @return string - */ - public function literal($input, $type = null) - { - return $this->connection->quote($input, $type); - } -} diff --git a/vendor/doctrine/dbal/src/Query/ForUpdate.php b/vendor/doctrine/dbal/src/Query/ForUpdate.php deleted file mode 100644 index fe54df9..0000000 --- a/vendor/doctrine/dbal/src/Query/ForUpdate.php +++ /dev/null @@ -1,21 +0,0 @@ -conflictResolutionMode = $conflictResolutionMode; - } - - public function getConflictResolutionMode(): int - { - return $this->conflictResolutionMode; - } -} diff --git a/vendor/doctrine/dbal/src/Query/ForUpdate/ConflictResolutionMode.php b/vendor/doctrine/dbal/src/Query/ForUpdate/ConflictResolutionMode.php deleted file mode 100644 index f968f7b..0000000 --- a/vendor/doctrine/dbal/src/Query/ForUpdate/ConflictResolutionMode.php +++ /dev/null @@ -1,27 +0,0 @@ -maxResults = $maxResults; - $this->firstResult = $firstResult; - } - - public function isDefined(): bool - { - return $this->maxResults !== null || $this->firstResult !== 0; - } - - public function getMaxResults(): ?int - { - return $this->maxResults; - } - - public function getFirstResult(): int - { - return $this->firstResult; - } -} diff --git a/vendor/doctrine/dbal/src/Query/QueryBuilder.php b/vendor/doctrine/dbal/src/Query/QueryBuilder.php deleted file mode 100644 index 4c5d6b8..0000000 --- a/vendor/doctrine/dbal/src/Query/QueryBuilder.php +++ /dev/null @@ -1,1759 +0,0 @@ - [], - 'distinct' => false, - 'from' => [], - 'join' => [], - 'set' => [], - 'where' => null, - 'groupBy' => [], - 'having' => null, - 'orderBy' => [], - 'values' => [], - 'for_update' => null, - ]; - - /** - * The array of SQL parts collected. - * - * @var mixed[] - */ - private array $sqlParts = self::SQL_PARTS_DEFAULTS; - - /** - * The complete SQL string for this query. - */ - private ?string $sql = null; - - /** - * The query parameters. - * - * @var list|array - */ - private $params = []; - - /** - * The parameter type map of this query. - * - * @var array|array - */ - private array $paramTypes = []; - - /** - * The type of query this is. Can be select, update or delete. - * - * @psalm-var self::SELECT|self::DELETE|self::UPDATE|self::INSERT - */ - private int $type = self::SELECT; - - /** - * The state of the query object. Can be dirty or clean. - * - * @psalm-var self::STATE_* - */ - private int $state = self::STATE_CLEAN; - - /** - * The index of the first result to retrieve. - */ - private int $firstResult = 0; - - /** - * The maximum number of results to retrieve or NULL to retrieve all results. - */ - private ?int $maxResults = null; - - /** - * The counter of bound parameters used with {@see bindValue). - */ - private int $boundCounter = 0; - - /** - * The query cache profile used for caching results. - */ - private ?QueryCacheProfile $resultCacheProfile = null; - - /** - * Initializes a new QueryBuilder. - * - * @param Connection $connection The DBAL Connection. - */ - public function __construct(Connection $connection) - { - $this->connection = $connection; - } - - /** - * Gets an ExpressionBuilder used for object-oriented construction of query expressions. - * This producer method is intended for convenient inline usage. Example: - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u') - * ->from('users', 'u') - * ->where($qb->expr()->eq('u.id', 1)); - * - * - * For more complex expression construction, consider storing the expression - * builder object in a local variable. - * - * @return ExpressionBuilder - */ - public function expr() - { - return $this->connection->getExpressionBuilder(); - } - - /** - * Gets the type of the currently built query. - * - * @deprecated If necessary, track the type of the query being built outside of the builder. - * - * @return int - */ - public function getType() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5551', - 'Relying on the type of the query being built is deprecated.' - . ' If necessary, track the type of the query being built outside of the builder.', - ); - - return $this->type; - } - - /** - * Gets the associated DBAL Connection for this query builder. - * - * @deprecated Use the connection used to instantiate the builder instead. - * - * @return Connection - */ - public function getConnection() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5780', - '%s is deprecated. Use the connection used to instantiate the builder instead.', - __METHOD__, - ); - - return $this->connection; - } - - /** - * Gets the state of this query builder instance. - * - * @deprecated The builder state is an internal concern. - * - * @return int Either QueryBuilder::STATE_DIRTY or QueryBuilder::STATE_CLEAN. - * @psalm-return self::STATE_* - */ - public function getState() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5551', - 'Relying on the query builder state is deprecated as it is an internal concern.', - ); - - return $this->state; - } - - /** - * Prepares and executes an SQL query and returns the first row of the result - * as an associative array. - * - * @return array|false False is returned if no rows are found. - * - * @throws Exception - */ - public function fetchAssociative() - { - return $this->executeQuery()->fetchAssociative(); - } - - /** - * Prepares and executes an SQL query and returns the first row of the result - * as a numerically indexed array. - * - * @return array|false False is returned if no rows are found. - * - * @throws Exception - */ - public function fetchNumeric() - { - return $this->executeQuery()->fetchNumeric(); - } - - /** - * Prepares and executes an SQL query and returns the value of a single column - * of the first row of the result. - * - * @return mixed|false False is returned if no rows are found. - * - * @throws Exception - */ - public function fetchOne() - { - return $this->executeQuery()->fetchOne(); - } - - /** - * Prepares and executes an SQL query and returns the result as an array of numeric arrays. - * - * @return array> - * - * @throws Exception - */ - public function fetchAllNumeric(): array - { - return $this->executeQuery()->fetchAllNumeric(); - } - - /** - * Prepares and executes an SQL query and returns the result as an array of associative arrays. - * - * @return array> - * - * @throws Exception - */ - public function fetchAllAssociative(): array - { - return $this->executeQuery()->fetchAllAssociative(); - } - - /** - * Prepares and executes an SQL query and returns the result as an associative array with the keys - * mapped to the first column and the values mapped to the second column. - * - * @return array - * - * @throws Exception - */ - public function fetchAllKeyValue(): array - { - return $this->executeQuery()->fetchAllKeyValue(); - } - - /** - * Prepares and executes an SQL query and returns the result as an associative array with the keys mapped - * to the first column and the values being an associative array representing the rest of the columns - * and their values. - * - * @return array> - * - * @throws Exception - */ - public function fetchAllAssociativeIndexed(): array - { - return $this->executeQuery()->fetchAllAssociativeIndexed(); - } - - /** - * Prepares and executes an SQL query and returns the result as an array of the first column values. - * - * @return array - * - * @throws Exception - */ - public function fetchFirstColumn(): array - { - return $this->executeQuery()->fetchFirstColumn(); - } - - /** - * Executes an SQL query (SELECT) and returns a Result. - * - * @throws Exception - */ - public function executeQuery(): Result - { - return $this->connection->executeQuery( - $this->getSQL(), - $this->params, - $this->paramTypes, - $this->resultCacheProfile, - ); - } - - /** - * Executes an SQL statement and returns the number of affected rows. - * - * Should be used for INSERT, UPDATE and DELETE - * - * @return int The number of affected rows. - * - * @throws Exception - */ - public function executeStatement(): int - { - return $this->connection->executeStatement($this->getSQL(), $this->params, $this->paramTypes); - } - - /** - * Executes this query using the bound parameters and their types. - * - * @deprecated Use {@see executeQuery()} or {@see executeStatement()} instead. - * - * @return Result|int|string - * - * @throws Exception - */ - public function execute() - { - if ($this->type === self::SELECT) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4578', - 'QueryBuilder::execute() is deprecated, use QueryBuilder::executeQuery() for SQL queries instead.', - ); - - return $this->executeQuery(); - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4578', - 'QueryBuilder::execute() is deprecated, use QueryBuilder::executeStatement() for SQL statements instead.', - ); - - return $this->connection->executeStatement($this->getSQL(), $this->params, $this->paramTypes); - } - - /** - * Gets the complete SQL string formed by the current specifications of this QueryBuilder. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * echo $qb->getSQL(); // SELECT u FROM User u - * - * - * @return string The SQL query string. - */ - public function getSQL() - { - if ($this->sql !== null && $this->state === self::STATE_CLEAN) { - return $this->sql; - } - - switch ($this->type) { - case self::INSERT: - $sql = $this->getSQLForInsert(); - break; - - case self::DELETE: - $sql = $this->getSQLForDelete(); - break; - - case self::UPDATE: - $sql = $this->getSQLForUpdate(); - break; - - case self::SELECT: - $sql = $this->getSQLForSelect(); - break; - } - - $this->state = self::STATE_CLEAN; - $this->sql = $sql; - - return $sql; - } - - /** - * Sets a query parameter for the query being constructed. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u') - * ->from('users', 'u') - * ->where('u.id = :user_id') - * ->setParameter('user_id', 1); - * - * - * @param int|string $key Parameter position or name - * @param mixed $value Parameter value - * @param int|string|Type|null $type Parameter type - * - * @return $this This QueryBuilder instance. - */ - public function setParameter($key, $value, $type = ParameterType::STRING) - { - if ($type !== null) { - $this->paramTypes[$key] = $type; - } else { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5550', - 'Using NULL as prepared statement parameter type is deprecated.' - . 'Omit or use ParameterType::STRING instead', - ); - } - - $this->params[$key] = $value; - - return $this; - } - - /** - * Sets a collection of query parameters for the query being constructed. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u') - * ->from('users', 'u') - * ->where('u.id = :user_id1 OR u.id = :user_id2') - * ->setParameters(array( - * 'user_id1' => 1, - * 'user_id2' => 2 - * )); - * - * - * @param list|array $params Parameters to set - * @param array|array $types Parameter types - * - * @return $this This QueryBuilder instance. - */ - public function setParameters(array $params, array $types = []) - { - $this->paramTypes = $types; - $this->params = $params; - - return $this; - } - - /** - * Gets all defined query parameters for the query being constructed indexed by parameter index or name. - * - * @return list|array The currently defined query parameters - */ - public function getParameters() - { - return $this->params; - } - - /** - * Gets a (previously set) query parameter of the query being constructed. - * - * @param mixed $key The key (index or name) of the bound parameter. - * - * @return mixed The value of the bound parameter. - */ - public function getParameter($key) - { - return $this->params[$key] ?? null; - } - - /** - * Gets all defined query parameter types for the query being constructed indexed by parameter index or name. - * - * @return array|array The currently defined - * query parameter types - */ - public function getParameterTypes() - { - return $this->paramTypes; - } - - /** - * Gets a (previously set) query parameter type of the query being constructed. - * - * @param int|string $key The key of the bound parameter type - * - * @return int|string|Type The value of the bound parameter type - */ - public function getParameterType($key) - { - return $this->paramTypes[$key] ?? ParameterType::STRING; - } - - /** - * Sets the position of the first result to retrieve (the "offset"). - * - * @param int $firstResult The first result to return. - * - * @return $this This QueryBuilder instance. - */ - public function setFirstResult($firstResult) - { - $this->state = self::STATE_DIRTY; - $this->firstResult = $firstResult; - - return $this; - } - - /** - * Gets the position of the first result the query object was set to retrieve (the "offset"). - * - * @return int The position of the first result. - */ - public function getFirstResult() - { - return $this->firstResult; - } - - /** - * Sets the maximum number of results to retrieve (the "limit"). - * - * @param int|null $maxResults The maximum number of results to retrieve or NULL to retrieve all results. - * - * @return $this This QueryBuilder instance. - */ - public function setMaxResults($maxResults) - { - $this->state = self::STATE_DIRTY; - $this->maxResults = $maxResults; - - return $this; - } - - /** - * Gets the maximum number of results the query object was set to retrieve (the "limit"). - * Returns NULL if all results will be returned. - * - * @return int|null The maximum number of results. - */ - public function getMaxResults() - { - return $this->maxResults; - } - - /** - * Locks the queried rows for a subsequent update. - * - * @return $this - */ - public function forUpdate(int $conflictResolutionMode = ConflictResolutionMode::ORDINARY): self - { - $this->state = self::STATE_DIRTY; - - $this->sqlParts['for_update'] = new ForUpdate($conflictResolutionMode); - - return $this; - } - - /** - * Either appends to or replaces a single, generic query part. - * - * The available parts are: 'select', 'from', 'set', 'where', - * 'groupBy', 'having' and 'orderBy'. - * - * @param string $sqlPartName - * @param mixed $sqlPart - * @param bool $append - * - * @return $this This QueryBuilder instance. - */ - public function add($sqlPartName, $sqlPart, $append = false) - { - $isArray = is_array($sqlPart); - $isMultiple = is_array($this->sqlParts[$sqlPartName]); - - if ($isMultiple && ! $isArray) { - $sqlPart = [$sqlPart]; - } - - $this->state = self::STATE_DIRTY; - - if ($append) { - if ( - $sqlPartName === 'orderBy' - || $sqlPartName === 'groupBy' - || $sqlPartName === 'select' - || $sqlPartName === 'set' - ) { - foreach ($sqlPart as $part) { - $this->sqlParts[$sqlPartName][] = $part; - } - } elseif ($isArray && is_array($sqlPart[key($sqlPart)])) { - $key = key($sqlPart); - $this->sqlParts[$sqlPartName][$key][] = $sqlPart[$key]; - } elseif ($isMultiple) { - $this->sqlParts[$sqlPartName][] = $sqlPart; - } else { - $this->sqlParts[$sqlPartName] = $sqlPart; - } - - return $this; - } - - $this->sqlParts[$sqlPartName] = $sqlPart; - - return $this; - } - - /** - * Specifies an item that is to be returned in the query result. - * Replaces any previously specified selections, if any. - * - * USING AN ARRAY ARGUMENT IS DEPRECATED. Pass each value as an individual argument. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.id', 'p.id') - * ->from('users', 'u') - * ->leftJoin('u', 'phonenumbers', 'p', 'u.id = p.user_id'); - * - * - * @param string|string[]|null $select The selection expression. USING AN ARRAY OR NULL IS DEPRECATED. - * Pass each value as an individual argument. - * - * @return $this This QueryBuilder instance. - */ - public function select($select = null/*, string ...$selects*/) - { - $this->type = self::SELECT; - - if ($select === null) { - return $this; - } - - if (is_array($select)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3837', - 'Passing an array for the first argument to QueryBuilder::select() is deprecated, ' . - 'pass each value as an individual variadic argument instead.', - ); - } - - $selects = is_array($select) ? $select : func_get_args(); - - return $this->add('select', $selects); - } - - /** - * Adds or removes DISTINCT to/from the query. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.id') - * ->distinct() - * ->from('users', 'u') - * - * - * @return $this This QueryBuilder instance. - */ - public function distinct(/* bool $distinct = true */): self - { - $this->sqlParts['distinct'] = func_num_args() < 1 || func_get_arg(0); - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Adds an item that is to be returned in the query result. - * - * USING AN ARRAY ARGUMENT IS DEPRECATED. Pass each value as an individual argument. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.id') - * ->addSelect('p.id') - * ->from('users', 'u') - * ->leftJoin('u', 'phonenumbers', 'u.id = p.user_id'); - * - * - * @param string|string[]|null $select The selection expression. USING AN ARRAY OR NULL IS DEPRECATED. - * Pass each value as an individual argument. - * - * @return $this This QueryBuilder instance. - */ - public function addSelect($select = null/*, string ...$selects*/) - { - $this->type = self::SELECT; - - if ($select === null) { - return $this; - } - - if (is_array($select)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3837', - 'Passing an array for the first argument to QueryBuilder::addSelect() is deprecated, ' . - 'pass each value as an individual variadic argument instead.', - ); - } - - $selects = is_array($select) ? $select : func_get_args(); - - return $this->add('select', $selects, true); - } - - /** - * Turns the query being built into a bulk delete query that ranges over - * a certain table. - * - * - * $qb = $conn->createQueryBuilder() - * ->delete('users', 'u') - * ->where('u.id = :user_id') - * ->setParameter(':user_id', 1); - * - * - * @param string $delete The table whose rows are subject to the deletion. - * @param string $alias The table alias used in the constructed query. - * - * @return $this This QueryBuilder instance. - */ - public function delete($delete = null, $alias = null) - { - $this->type = self::DELETE; - - if ($delete === null) { - return $this; - } - - return $this->add('from', [ - 'table' => $delete, - 'alias' => $alias, - ]); - } - - /** - * Turns the query being built into a bulk update query that ranges over - * a certain table - * - * - * $qb = $conn->createQueryBuilder() - * ->update('counters', 'c') - * ->set('c.value', 'c.value + 1') - * ->where('c.id = ?'); - * - * - * @param string $update The table whose rows are subject to the update. - * @param string $alias The table alias used in the constructed query. - * - * @return $this This QueryBuilder instance. - */ - public function update($update = null, $alias = null) - { - $this->type = self::UPDATE; - - if ($update === null) { - return $this; - } - - return $this->add('from', [ - 'table' => $update, - 'alias' => $alias, - ]); - } - - /** - * Turns the query being built into an insert query that inserts into - * a certain table - * - * - * $qb = $conn->createQueryBuilder() - * ->insert('users') - * ->values( - * array( - * 'name' => '?', - * 'password' => '?' - * ) - * ); - * - * - * @param string $insert The table into which the rows should be inserted. - * - * @return $this This QueryBuilder instance. - */ - public function insert($insert = null) - { - $this->type = self::INSERT; - - if ($insert === null) { - return $this; - } - - return $this->add('from', ['table' => $insert]); - } - - /** - * Creates and adds a query root corresponding to the table identified by the - * given alias, forming a cartesian product with any existing query roots. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.id') - * ->from('users', 'u') - * - * - * @param string $from The table. - * @param string|null $alias The alias of the table. - * - * @return $this This QueryBuilder instance. - */ - public function from($from, $alias = null) - { - return $this->add('from', [ - 'table' => $from, - 'alias' => $alias, - ], true); - } - - /** - * Creates and adds a join to the query. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.name') - * ->from('users', 'u') - * ->join('u', 'phonenumbers', 'p', 'p.is_primary = 1'); - * - * - * @param string $fromAlias The alias that points to a from clause. - * @param string $join The table name to join. - * @param string $alias The alias of the join table. - * @param string $condition The condition for the join. - * - * @return $this This QueryBuilder instance. - */ - public function join($fromAlias, $join, $alias, $condition = null) - { - return $this->innerJoin($fromAlias, $join, $alias, $condition); - } - - /** - * Creates and adds a join to the query. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.name') - * ->from('users', 'u') - * ->innerJoin('u', 'phonenumbers', 'p', 'p.is_primary = 1'); - * - * - * @param string $fromAlias The alias that points to a from clause. - * @param string $join The table name to join. - * @param string $alias The alias of the join table. - * @param string $condition The condition for the join. - * - * @return $this This QueryBuilder instance. - */ - public function innerJoin($fromAlias, $join, $alias, $condition = null) - { - return $this->add('join', [ - $fromAlias => [ - 'joinType' => 'inner', - 'joinTable' => $join, - 'joinAlias' => $alias, - 'joinCondition' => $condition, - ], - ], true); - } - - /** - * Creates and adds a left join to the query. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.name') - * ->from('users', 'u') - * ->leftJoin('u', 'phonenumbers', 'p', 'p.is_primary = 1'); - * - * - * @param string $fromAlias The alias that points to a from clause. - * @param string $join The table name to join. - * @param string $alias The alias of the join table. - * @param string $condition The condition for the join. - * - * @return $this This QueryBuilder instance. - */ - public function leftJoin($fromAlias, $join, $alias, $condition = null) - { - return $this->add('join', [ - $fromAlias => [ - 'joinType' => 'left', - 'joinTable' => $join, - 'joinAlias' => $alias, - 'joinCondition' => $condition, - ], - ], true); - } - - /** - * Creates and adds a right join to the query. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.name') - * ->from('users', 'u') - * ->rightJoin('u', 'phonenumbers', 'p', 'p.is_primary = 1'); - * - * - * @param string $fromAlias The alias that points to a from clause. - * @param string $join The table name to join. - * @param string $alias The alias of the join table. - * @param string $condition The condition for the join. - * - * @return $this This QueryBuilder instance. - */ - public function rightJoin($fromAlias, $join, $alias, $condition = null) - { - return $this->add('join', [ - $fromAlias => [ - 'joinType' => 'right', - 'joinTable' => $join, - 'joinAlias' => $alias, - 'joinCondition' => $condition, - ], - ], true); - } - - /** - * Sets a new value for a column in a bulk update query. - * - * - * $qb = $conn->createQueryBuilder() - * ->update('counters', 'c') - * ->set('c.value', 'c.value + 1') - * ->where('c.id = ?'); - * - * - * @param string $key The column to set. - * @param string $value The value, expression, placeholder, etc. - * - * @return $this This QueryBuilder instance. - */ - public function set($key, $value) - { - return $this->add('set', $key . ' = ' . $value, true); - } - - /** - * Specifies one or more restrictions to the query result. - * Replaces any previously specified restrictions, if any. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('c.value') - * ->from('counters', 'c') - * ->where('c.id = ?'); - * - * // You can optionally programmatically build and/or expressions - * $qb = $conn->createQueryBuilder(); - * - * $or = $qb->expr()->orx(); - * $or->add($qb->expr()->eq('c.id', 1)); - * $or->add($qb->expr()->eq('c.id', 2)); - * - * $qb->update('counters', 'c') - * ->set('c.value', 'c.value + 1') - * ->where($or); - * - * - * @param mixed $predicates The restriction predicates. - * - * @return $this This QueryBuilder instance. - */ - public function where($predicates) - { - if (! (func_num_args() === 1 && $predicates instanceof CompositeExpression)) { - $predicates = CompositeExpression::and(...func_get_args()); - } - - return $this->add('where', $predicates); - } - - /** - * Adds one or more restrictions to the query results, forming a logical - * conjunction with any previously specified restrictions. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u') - * ->from('users', 'u') - * ->where('u.username LIKE ?') - * ->andWhere('u.is_active = 1'); - * - * - * @see where() - * - * @param mixed $where The query restrictions. - * - * @return $this This QueryBuilder instance. - */ - public function andWhere($where) - { - $args = func_get_args(); - $where = $this->getQueryPart('where'); - - if ($where instanceof CompositeExpression && $where->getType() === CompositeExpression::TYPE_AND) { - $where = $where->with(...$args); - } else { - array_unshift($args, $where); - $where = CompositeExpression::and(...$args); - } - - return $this->add('where', $where, true); - } - - /** - * Adds one or more restrictions to the query results, forming a logical - * disjunction with any previously specified restrictions. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u.name') - * ->from('users', 'u') - * ->where('u.id = 1') - * ->orWhere('u.id = 2'); - * - * - * @see where() - * - * @param mixed $where The WHERE statement. - * - * @return $this This QueryBuilder instance. - */ - public function orWhere($where) - { - $args = func_get_args(); - $where = $this->getQueryPart('where'); - - if ($where instanceof CompositeExpression && $where->getType() === CompositeExpression::TYPE_OR) { - $where = $where->with(...$args); - } else { - array_unshift($args, $where); - $where = CompositeExpression::or(...$args); - } - - return $this->add('where', $where, true); - } - - /** - * Specifies a grouping over the results of the query. - * Replaces any previously specified groupings, if any. - * - * USING AN ARRAY ARGUMENT IS DEPRECATED. Pass each value as an individual argument. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.name') - * ->from('users', 'u') - * ->groupBy('u.id'); - * - * - * @param string|string[] $groupBy The grouping expression. USING AN ARRAY IS DEPRECATED. - * Pass each value as an individual argument. - * - * @return $this This QueryBuilder instance. - */ - public function groupBy($groupBy/*, string ...$groupBys*/) - { - if (is_array($groupBy) && count($groupBy) === 0) { - return $this; - } - - if (is_array($groupBy)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3837', - 'Passing an array for the first argument to QueryBuilder::groupBy() is deprecated, ' . - 'pass each value as an individual variadic argument instead.', - ); - } - - $groupBy = is_array($groupBy) ? $groupBy : func_get_args(); - - return $this->add('groupBy', $groupBy, false); - } - - /** - * Adds a grouping expression to the query. - * - * USING AN ARRAY ARGUMENT IS DEPRECATED. Pass each value as an individual argument. - * - * - * $qb = $conn->createQueryBuilder() - * ->select('u.name') - * ->from('users', 'u') - * ->groupBy('u.lastLogin') - * ->addGroupBy('u.createdAt'); - * - * - * @param string|string[] $groupBy The grouping expression. USING AN ARRAY IS DEPRECATED. - * Pass each value as an individual argument. - * - * @return $this This QueryBuilder instance. - */ - public function addGroupBy($groupBy/*, string ...$groupBys*/) - { - if (is_array($groupBy) && count($groupBy) === 0) { - return $this; - } - - if (is_array($groupBy)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3837', - 'Passing an array for the first argument to QueryBuilder::addGroupBy() is deprecated, ' . - 'pass each value as an individual variadic argument instead.', - ); - } - - $groupBy = is_array($groupBy) ? $groupBy : func_get_args(); - - return $this->add('groupBy', $groupBy, true); - } - - /** - * Sets a value for a column in an insert query. - * - * - * $qb = $conn->createQueryBuilder() - * ->insert('users') - * ->values( - * array( - * 'name' => '?' - * ) - * ) - * ->setValue('password', '?'); - * - * - * @param string $column The column into which the value should be inserted. - * @param string $value The value that should be inserted into the column. - * - * @return $this This QueryBuilder instance. - */ - public function setValue($column, $value) - { - $this->sqlParts['values'][$column] = $value; - - return $this; - } - - /** - * Specifies values for an insert query indexed by column names. - * Replaces any previous values, if any. - * - * - * $qb = $conn->createQueryBuilder() - * ->insert('users') - * ->values( - * array( - * 'name' => '?', - * 'password' => '?' - * ) - * ); - * - * - * @param mixed[] $values The values to specify for the insert query indexed by column names. - * - * @return $this This QueryBuilder instance. - */ - public function values(array $values) - { - return $this->add('values', $values); - } - - /** - * Specifies a restriction over the groups of the query. - * Replaces any previous having restrictions, if any. - * - * @param mixed $having The restriction over the groups. - * - * @return $this This QueryBuilder instance. - */ - public function having($having) - { - if (! (func_num_args() === 1 && $having instanceof CompositeExpression)) { - $having = CompositeExpression::and(...func_get_args()); - } - - return $this->add('having', $having); - } - - /** - * Adds a restriction over the groups of the query, forming a logical - * conjunction with any existing having restrictions. - * - * @param mixed $having The restriction to append. - * - * @return $this This QueryBuilder instance. - */ - public function andHaving($having) - { - $args = func_get_args(); - $having = $this->getQueryPart('having'); - - if ($having instanceof CompositeExpression && $having->getType() === CompositeExpression::TYPE_AND) { - $having = $having->with(...$args); - } else { - array_unshift($args, $having); - $having = CompositeExpression::and(...$args); - } - - return $this->add('having', $having); - } - - /** - * Adds a restriction over the groups of the query, forming a logical - * disjunction with any existing having restrictions. - * - * @param mixed $having The restriction to add. - * - * @return $this This QueryBuilder instance. - */ - public function orHaving($having) - { - $args = func_get_args(); - $having = $this->getQueryPart('having'); - - if ($having instanceof CompositeExpression && $having->getType() === CompositeExpression::TYPE_OR) { - $having = $having->with(...$args); - } else { - array_unshift($args, $having); - $having = CompositeExpression::or(...$args); - } - - return $this->add('having', $having); - } - - /** - * Specifies an ordering for the query results. - * Replaces any previously specified orderings, if any. - * - * @param string $sort The ordering expression. - * @param string $order The ordering direction. - * - * @return $this This QueryBuilder instance. - */ - public function orderBy($sort, $order = null) - { - return $this->add('orderBy', $sort . ' ' . ($order ?? 'ASC'), false); - } - - /** - * Adds an ordering to the query results. - * - * @param string $sort The ordering expression. - * @param string $order The ordering direction. - * - * @return $this This QueryBuilder instance. - */ - public function addOrderBy($sort, $order = null) - { - return $this->add('orderBy', $sort . ' ' . ($order ?? 'ASC'), true); - } - - /** - * Gets a query part by its name. - * - * @deprecated The query parts are implementation details and should not be relied upon. - * - * @param string $queryPartName - * - * @return mixed - */ - public function getQueryPart($queryPartName) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6179', - 'Getting query parts is deprecated as they are implementation details.', - ); - - return $this->sqlParts[$queryPartName]; - } - - /** - * Gets all query parts. - * - * @deprecated The query parts are implementation details and should not be relied upon. - * - * @return mixed[] - */ - public function getQueryParts() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6179', - 'Getting query parts is deprecated as they are implementation details.', - ); - - return $this->sqlParts; - } - - /** - * Resets SQL parts. - * - * @deprecated Use the dedicated reset*() methods instead. - * - * @param string[]|null $queryPartNames - * - * @return $this This QueryBuilder instance. - */ - public function resetQueryParts($queryPartNames = null) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6193', - '%s() is deprecated, instead use dedicated reset methods for the parts that shall be reset.', - __METHOD__, - ); - - $queryPartNames ??= array_keys($this->sqlParts); - - foreach ($queryPartNames as $queryPartName) { - $this->sqlParts[$queryPartName] = self::SQL_PARTS_DEFAULTS[$queryPartName]; - } - - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Resets a single SQL part. - * - * @deprecated Use the dedicated reset*() methods instead. - * - * @param string $queryPartName - * - * @return $this This QueryBuilder instance. - */ - public function resetQueryPart($queryPartName) - { - if ($queryPartName === 'distinct') { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6193', - 'Calling %s() with "distinct" is deprecated, call distinct(false) instead.', - __METHOD__, - ); - - return $this->distinct(false); - } - - $newMethodName = 'reset' . ucfirst($queryPartName); - if (array_key_exists($queryPartName, self::SQL_PARTS_DEFAULTS) && method_exists($this, $newMethodName)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6193', - 'Calling %s() with "%s" is deprecated, call %s() instead.', - __METHOD__, - $queryPartName, - $newMethodName, - ); - - return $this->$newMethodName(); - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6193', - 'Calling %s() with "%s" is deprecated without replacement.', - __METHOD__, - $queryPartName, - $newMethodName, - ); - - $this->sqlParts[$queryPartName] = self::SQL_PARTS_DEFAULTS[$queryPartName]; - - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Resets the WHERE conditions for the query. - * - * @return $this This QueryBuilder instance. - */ - public function resetWhere(): self - { - $this->sqlParts['where'] = self::SQL_PARTS_DEFAULTS['where']; - - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Resets the grouping for the query. - * - * @return $this This QueryBuilder instance. - */ - public function resetGroupBy(): self - { - $this->sqlParts['groupBy'] = self::SQL_PARTS_DEFAULTS['groupBy']; - - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Resets the HAVING conditions for the query. - * - * @return $this This QueryBuilder instance. - */ - public function resetHaving(): self - { - $this->sqlParts['having'] = self::SQL_PARTS_DEFAULTS['having']; - - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Resets the ordering for the query. - * - * @return $this This QueryBuilder instance. - */ - public function resetOrderBy(): self - { - $this->sqlParts['orderBy'] = self::SQL_PARTS_DEFAULTS['orderBy']; - - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** @throws Exception */ - private function getSQLForSelect(): string - { - return $this->connection->getDatabasePlatform() - ->createSelectSQLBuilder() - ->buildSQL( - new SelectQuery( - $this->sqlParts['distinct'], - $this->sqlParts['select'], - $this->getFromClauses(), - $this->sqlParts['where'], - $this->sqlParts['groupBy'], - $this->sqlParts['having'], - $this->sqlParts['orderBy'], - new Limit($this->maxResults, $this->firstResult), - $this->sqlParts['for_update'], - ), - ); - } - - /** - * @return string[] - * - * @throws QueryException - */ - private function getFromClauses(): array - { - $fromClauses = []; - $knownAliases = []; - - // Loop through all FROM clauses - foreach ($this->sqlParts['from'] as $from) { - if ($from['alias'] === null) { - $tableSql = $from['table']; - $tableReference = $from['table']; - } else { - $tableSql = $from['table'] . ' ' . $from['alias']; - $tableReference = $from['alias']; - } - - $knownAliases[$tableReference] = true; - - $fromClauses[$tableReference] = $tableSql . $this->getSQLForJoins($tableReference, $knownAliases); - } - - $this->verifyAllAliasesAreKnown($knownAliases); - - return $fromClauses; - } - - /** - * @param array $knownAliases - * - * @throws QueryException - */ - private function verifyAllAliasesAreKnown(array $knownAliases): void - { - foreach ($this->sqlParts['join'] as $fromAlias => $joins) { - if (! isset($knownAliases[$fromAlias])) { - throw QueryException::unknownAlias($fromAlias, array_keys($knownAliases)); - } - } - } - - /** - * Converts this instance into an INSERT string in SQL. - */ - private function getSQLForInsert(): string - { - return 'INSERT INTO ' . $this->sqlParts['from']['table'] . - ' (' . implode(', ', array_keys($this->sqlParts['values'])) . ')' . - ' VALUES(' . implode(', ', $this->sqlParts['values']) . ')'; - } - - /** - * Converts this instance into an UPDATE string in SQL. - */ - private function getSQLForUpdate(): string - { - $table = $this->sqlParts['from']['table'] - . ($this->sqlParts['from']['alias'] ? ' ' . $this->sqlParts['from']['alias'] : ''); - - return 'UPDATE ' . $table - . ' SET ' . implode(', ', $this->sqlParts['set']) - . ($this->sqlParts['where'] !== null ? ' WHERE ' . ((string) $this->sqlParts['where']) : ''); - } - - /** - * Converts this instance into a DELETE string in SQL. - */ - private function getSQLForDelete(): string - { - $table = $this->sqlParts['from']['table'] - . ($this->sqlParts['from']['alias'] ? ' ' . $this->sqlParts['from']['alias'] : ''); - - return 'DELETE FROM ' . $table - . ($this->sqlParts['where'] !== null ? ' WHERE ' . ((string) $this->sqlParts['where']) : ''); - } - - /** - * Gets a string representation of this QueryBuilder which corresponds to - * the final SQL query being constructed. - * - * @return string The string representation of this QueryBuilder. - */ - public function __toString() - { - return $this->getSQL(); - } - - /** - * Creates a new named parameter and bind the value $value to it. - * - * This method provides a shortcut for {@see Statement::bindValue()} - * when using prepared statements. - * - * The parameter $value specifies the value that you want to bind. If - * $placeholder is not provided createNamedParameter() will automatically - * create a placeholder for you. An automatic placeholder will be of the - * name ':dcValue1', ':dcValue2' etc. - * - * Example: - * - * $value = 2; - * $q->eq( 'id', $q->createNamedParameter( $value ) ); - * $stmt = $q->executeQuery(); // executed with 'id = 2' - * - * - * @link http://www.zetacomponents.org - * - * @param mixed $value - * @param int|string|Type|null $type - * @param string $placeHolder The name to bind with. The string must start with a colon ':'. - * - * @return string the placeholder name used. - */ - public function createNamedParameter($value, $type = ParameterType::STRING, $placeHolder = null) - { - if ($placeHolder === null) { - $this->boundCounter++; - $placeHolder = ':dcValue' . $this->boundCounter; - } - - $this->setParameter(substr($placeHolder, 1), $value, $type); - - return $placeHolder; - } - - /** - * Creates a new positional parameter and bind the given value to it. - * - * Attention: If you are using positional parameters with the query builder you have - * to be very careful to bind all parameters in the order they appear in the SQL - * statement , otherwise they get bound in the wrong order which can lead to serious - * bugs in your code. - * - * Example: - * - * $qb = $conn->createQueryBuilder(); - * $qb->select('u.*') - * ->from('users', 'u') - * ->where('u.username = ' . $qb->createPositionalParameter('Foo', ParameterType::STRING)) - * ->orWhere('u.username = ' . $qb->createPositionalParameter('Bar', ParameterType::STRING)) - * - * - * @param mixed $value - * @param int|string|Type|null $type - * - * @return string - */ - public function createPositionalParameter($value, $type = ParameterType::STRING) - { - $this->setParameter($this->boundCounter, $value, $type); - $this->boundCounter++; - - return '?'; - } - - /** - * @param string $fromAlias - * @param array $knownAliases - * - * @throws QueryException - */ - private function getSQLForJoins($fromAlias, array &$knownAliases): string - { - $sql = ''; - - if (isset($this->sqlParts['join'][$fromAlias])) { - foreach ($this->sqlParts['join'][$fromAlias] as $join) { - if (array_key_exists($join['joinAlias'], $knownAliases)) { - throw QueryException::nonUniqueAlias((string) $join['joinAlias'], array_keys($knownAliases)); - } - - $sql .= ' ' . strtoupper($join['joinType']) - . ' JOIN ' . $join['joinTable'] . ' ' . $join['joinAlias']; - if ($join['joinCondition'] !== null) { - $sql .= ' ON ' . $join['joinCondition']; - } - - $knownAliases[$join['joinAlias']] = true; - } - - foreach ($this->sqlParts['join'][$fromAlias] as $join) { - $sql .= $this->getSQLForJoins($join['joinAlias'], $knownAliases); - } - } - - return $sql; - } - - /** - * Deep clone of all expression objects in the SQL parts. - * - * @return void - */ - public function __clone() - { - foreach ($this->sqlParts as $part => $elements) { - if (is_array($this->sqlParts[$part])) { - foreach ($this->sqlParts[$part] as $idx => $element) { - if (! is_object($element)) { - continue; - } - - $this->sqlParts[$part][$idx] = clone $element; - } - } elseif (is_object($elements)) { - $this->sqlParts[$part] = clone $elements; - } - } - - foreach ($this->params as $name => $param) { - if (! is_object($param)) { - continue; - } - - $this->params[$name] = clone $param; - } - } - - /** - * Enables caching of the results of this query, for given amount of seconds - * and optionally specified which key to use for the cache entry. - * - * @return $this - */ - public function enableResultCache(QueryCacheProfile $cacheProfile): self - { - $this->resultCacheProfile = $cacheProfile; - - return $this; - } - - /** - * Disables caching of the results of this query. - * - * @return $this - */ - public function disableResultCache(): self - { - $this->resultCacheProfile = null; - - return $this; - } -} diff --git a/vendor/doctrine/dbal/src/Query/QueryException.php b/vendor/doctrine/dbal/src/Query/QueryException.php deleted file mode 100644 index 90d1f47..0000000 --- a/vendor/doctrine/dbal/src/Query/QueryException.php +++ /dev/null @@ -1,37 +0,0 @@ -distinct = $distinct; - $this->columns = $columns; - $this->from = $from; - $this->where = $where; - $this->groupBy = $groupBy; - $this->having = $having; - $this->orderBy = $orderBy; - $this->limit = $limit; - $this->forUpdate = $forUpdate; - } - - public function isDistinct(): bool - { - return $this->distinct; - } - - /** @return string[] */ - public function getColumns(): array - { - return $this->columns; - } - - /** @return string[] */ - public function getFrom(): array - { - return $this->from; - } - - public function getWhere(): ?string - { - return $this->where; - } - - /** @return string[] */ - public function getGroupBy(): array - { - return $this->groupBy; - } - - public function getHaving(): ?string - { - return $this->having; - } - - /** @return string[] */ - public function getOrderBy(): array - { - return $this->orderBy; - } - - public function getLimit(): Limit - { - return $this->limit; - } - - public function getForUpdate(): ?ForUpdate - { - return $this->forUpdate; - } -} diff --git a/vendor/doctrine/dbal/src/Result.php b/vendor/doctrine/dbal/src/Result.php deleted file mode 100644 index 92235d0..0000000 --- a/vendor/doctrine/dbal/src/Result.php +++ /dev/null @@ -1,339 +0,0 @@ -result = $result; - $this->connection = $connection; - } - - /** - * Returns the next row of the result as a numeric array or FALSE if there are no more rows. - * - * @return list|false - * - * @throws Exception - */ - public function fetchNumeric() - { - try { - return $this->result->fetchNumeric(); - } catch (DriverException $e) { - throw $this->connection->convertException($e); - } - } - - /** - * Returns the next row of the result as an associative array or FALSE if there are no more rows. - * - * @return array|false - * - * @throws Exception - */ - public function fetchAssociative() - { - try { - return $this->result->fetchAssociative(); - } catch (DriverException $e) { - throw $this->connection->convertException($e); - } - } - - /** - * Returns the first value of the next row of the result or FALSE if there are no more rows. - * - * @return mixed|false - * - * @throws Exception - */ - public function fetchOne() - { - try { - return $this->result->fetchOne(); - } catch (DriverException $e) { - throw $this->connection->convertException($e); - } - } - - /** - * Returns an array containing all of the result rows represented as numeric arrays. - * - * @return list> - * - * @throws Exception - */ - public function fetchAllNumeric(): array - { - try { - return $this->result->fetchAllNumeric(); - } catch (DriverException $e) { - throw $this->connection->convertException($e); - } - } - - /** - * Returns an array containing all of the result rows represented as associative arrays. - * - * @return list> - * - * @throws Exception - */ - public function fetchAllAssociative(): array - { - try { - return $this->result->fetchAllAssociative(); - } catch (DriverException $e) { - throw $this->connection->convertException($e); - } - } - - /** - * Returns an array containing the values of the first column of the result. - * - * @return array - * - * @throws Exception - */ - public function fetchAllKeyValue(): array - { - $this->ensureHasKeyValue(); - - $data = []; - - foreach ($this->fetchAllNumeric() as [$key, $value]) { - $data[$key] = $value; - } - - return $data; - } - - /** - * Returns an associative array with the keys mapped to the first column and the values being - * an associative array representing the rest of the columns and their values. - * - * @return array> - * - * @throws Exception - */ - public function fetchAllAssociativeIndexed(): array - { - $data = []; - - foreach ($this->fetchAllAssociative() as $row) { - $data[array_shift($row)] = $row; - } - - return $data; - } - - /** - * @return list - * - * @throws Exception - */ - public function fetchFirstColumn(): array - { - try { - return $this->result->fetchFirstColumn(); - } catch (DriverException $e) { - throw $this->connection->convertException($e); - } - } - - /** - * @return Traversable> - * - * @throws Exception - */ - public function iterateNumeric(): Traversable - { - while (($row = $this->fetchNumeric()) !== false) { - yield $row; - } - } - - /** - * @return Traversable> - * - * @throws Exception - */ - public function iterateAssociative(): Traversable - { - while (($row = $this->fetchAssociative()) !== false) { - yield $row; - } - } - - /** - * @return Traversable - * - * @throws Exception - */ - public function iterateKeyValue(): Traversable - { - $this->ensureHasKeyValue(); - - foreach ($this->iterateNumeric() as [$key, $value]) { - yield $key => $value; - } - } - - /** - * Returns an iterator over the result set with the keys mapped to the first column and the values being - * an associative array representing the rest of the columns and their values. - * - * @return Traversable> - * - * @throws Exception - */ - public function iterateAssociativeIndexed(): Traversable - { - foreach ($this->iterateAssociative() as $row) { - yield array_shift($row) => $row; - } - } - - /** - * @return Traversable - * - * @throws Exception - */ - public function iterateColumn(): Traversable - { - while (($value = $this->fetchOne()) !== false) { - yield $value; - } - } - - /** @throws Exception */ - public function rowCount(): int - { - try { - return $this->result->rowCount(); - } catch (DriverException $e) { - throw $this->connection->convertException($e); - } - } - - /** @throws Exception */ - public function columnCount(): int - { - try { - return $this->result->columnCount(); - } catch (DriverException $e) { - throw $this->connection->convertException($e); - } - } - - public function free(): void - { - $this->result->free(); - } - - /** @throws Exception */ - private function ensureHasKeyValue(): void - { - $columnCount = $this->columnCount(); - - if ($columnCount < 2) { - throw NoKeyValue::fromColumnCount($columnCount); - } - } - - /** - * BC layer for a wide-spread use-case of old DBAL APIs - * - * @deprecated Use {@see fetchNumeric()}, {@see fetchAssociative()} or {@see fetchOne()} instead. - * - * @psalm-param FetchMode::* $mode - * - * @return mixed - * - * @throws Exception - */ - public function fetch(int $mode = FetchMode::ASSOCIATIVE) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4007', - '%s is deprecated, please use fetchNumeric(), fetchAssociative() or fetchOne() instead.', - __METHOD__, - ); - - if (func_num_args() > 1) { - throw new LogicException('Only invocations with one argument are still supported by this legacy API.'); - } - - if ($mode === FetchMode::ASSOCIATIVE) { - return $this->fetchAssociative(); - } - - if ($mode === FetchMode::NUMERIC) { - return $this->fetchNumeric(); - } - - if ($mode === FetchMode::COLUMN) { - return $this->fetchOne(); - } - - throw new LogicException('Only fetch modes declared on Doctrine\DBAL\FetchMode are supported by legacy API.'); - } - - /** - * BC layer for a wide-spread use-case of old DBAL APIs - * - * @deprecated Use {@see fetchAllNumeric()}, {@see fetchAllAssociative()} or {@see fetchFirstColumn()} instead. - * - * @psalm-param FetchMode::* $mode - * - * @return list - * - * @throws Exception - */ - public function fetchAll(int $mode = FetchMode::ASSOCIATIVE): array - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4007', - '%s is deprecated, please use fetchAllNumeric(), fetchAllAssociative() or fetchFirstColumn() instead.', - __METHOD__, - ); - - if (func_num_args() > 1) { - throw new LogicException('Only invocations with one argument are still supported by this legacy API.'); - } - - if ($mode === FetchMode::ASSOCIATIVE) { - return $this->fetchAllAssociative(); - } - - if ($mode === FetchMode::NUMERIC) { - return $this->fetchAllNumeric(); - } - - if ($mode === FetchMode::COLUMN) { - return $this->fetchFirstColumn(); - } - - throw new LogicException('Only fetch modes declared on Doctrine\DBAL\FetchMode are supported by legacy API.'); - } -} diff --git a/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php b/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php deleted file mode 100644 index 2e392e6..0000000 --- a/vendor/doctrine/dbal/src/SQL/Builder/CreateSchemaObjectsSQLBuilder.php +++ /dev/null @@ -1,85 +0,0 @@ -platform = $platform; - } - - /** - * @return list - * - * @throws Exception - */ - public function buildSQL(Schema $schema): array - { - return array_merge( - $this->buildNamespaceStatements($schema->getNamespaces()), - $this->buildSequenceStatements($schema->getSequences()), - $this->buildTableStatements($schema->getTables()), - ); - } - - /** - * @param list $namespaces - * - * @return list - * - * @throws Exception - */ - private function buildNamespaceStatements(array $namespaces): array - { - $statements = []; - - if ($this->platform->supportsSchemas()) { - foreach ($namespaces as $namespace) { - $statements[] = $this->platform->getCreateSchemaSQL($namespace); - } - } - - return $statements; - } - - /** - * @param list
$tables - * - * @return list - * - * @throws Exception - */ - private function buildTableStatements(array $tables): array - { - return $this->platform->getCreateTablesSQL($tables); - } - - /** - * @param list $sequences - * - * @return list - * - * @throws Exception - */ - private function buildSequenceStatements(array $sequences): array - { - $statements = []; - - foreach ($sequences as $sequence) { - $statements[] = $this->platform->getCreateSequenceSQL($sequence); - } - - return $statements; - } -} diff --git a/vendor/doctrine/dbal/src/SQL/Builder/DefaultSelectSQLBuilder.php b/vendor/doctrine/dbal/src/SQL/Builder/DefaultSelectSQLBuilder.php deleted file mode 100644 index 9dcb7a1..0000000 --- a/vendor/doctrine/dbal/src/SQL/Builder/DefaultSelectSQLBuilder.php +++ /dev/null @@ -1,95 +0,0 @@ -platform = $platform; - $this->forUpdateSQL = $forUpdateSQL; - $this->skipLockedSQL = $skipLockedSQL; - } - - /** @throws Exception */ - public function buildSQL(SelectQuery $query): string - { - $parts = ['SELECT']; - - if ($query->isDistinct()) { - $parts[] = 'DISTINCT'; - } - - $parts[] = implode(', ', $query->getColumns()); - - $from = $query->getFrom(); - - if (count($from) > 0) { - $parts[] = 'FROM ' . implode(', ', $from); - } - - $where = $query->getWhere(); - - if ($where !== null) { - $parts[] = 'WHERE ' . $where; - } - - $groupBy = $query->getGroupBy(); - - if (count($groupBy) > 0) { - $parts[] = 'GROUP BY ' . implode(', ', $groupBy); - } - - $having = $query->getHaving(); - - if ($having !== null) { - $parts[] = 'HAVING ' . $having; - } - - $orderBy = $query->getOrderBy(); - - if (count($orderBy) > 0) { - $parts[] = 'ORDER BY ' . implode(', ', $orderBy); - } - - $sql = implode(' ', $parts); - $limit = $query->getLimit(); - - if ($limit->isDefined()) { - $sql = $this->platform->modifyLimitQuery($sql, $limit->getMaxResults(), $limit->getFirstResult()); - } - - $forUpdate = $query->getForUpdate(); - - if ($forUpdate !== null) { - if ($this->forUpdateSQL === null) { - throw Exception::notSupported('FOR UPDATE'); - } - - $sql .= ' ' . $this->forUpdateSQL; - - if ($forUpdate->getConflictResolutionMode() === ConflictResolutionMode::SKIP_LOCKED) { - if ($this->skipLockedSQL === null) { - throw Exception::notSupported('SKIP LOCKED'); - } - - $sql .= ' ' . $this->skipLockedSQL; - } - } - - return $sql; - } -} diff --git a/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php b/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php deleted file mode 100644 index 8de742a..0000000 --- a/vendor/doctrine/dbal/src/SQL/Builder/DropSchemaObjectsSQLBuilder.php +++ /dev/null @@ -1,62 +0,0 @@ -platform = $platform; - } - - /** - * @return list - * - * @throws Exception - */ - public function buildSQL(Schema $schema): array - { - return array_merge( - $this->buildSequenceStatements($schema->getSequences()), - $this->buildTableStatements($schema->getTables()), - ); - } - - /** - * @param list
$tables - * - * @return list - */ - private function buildTableStatements(array $tables): array - { - return $this->platform->getDropTablesSQL($tables); - } - - /** - * @param list $sequences - * - * @return list - * - * @throws Exception - */ - private function buildSequenceStatements(array $sequences): array - { - $statements = []; - - foreach ($sequences as $sequence) { - $statements[] = $this->platform->getDropSequenceSQL($sequence); - } - - return $statements; - } -} diff --git a/vendor/doctrine/dbal/src/SQL/Builder/SelectSQLBuilder.php b/vendor/doctrine/dbal/src/SQL/Builder/SelectSQLBuilder.php deleted file mode 100644 index ddbf73c..0000000 --- a/vendor/doctrine/dbal/src/SQL/Builder/SelectSQLBuilder.php +++ /dev/null @@ -1,12 +0,0 @@ -getMySQLStringLiteralPattern("'"), - $this->getMySQLStringLiteralPattern('"'), - ]; - } else { - $patterns = [ - $this->getAnsiSQLStringLiteralPattern("'"), - $this->getAnsiSQLStringLiteralPattern('"'), - ]; - } - - $patterns = array_merge($patterns, [ - self::BACKTICK_IDENTIFIER, - self::BRACKET_IDENTIFIER, - self::MULTICHAR, - self::ONE_LINE_COMMENT, - self::MULTI_LINE_COMMENT, - self::OTHER, - ]); - - $this->sqlPattern = sprintf('(%s)', implode('|', $patterns)); - } - - /** - * Parses the given SQL statement - * - * @throws Exception - */ - public function parse(string $sql, Visitor $visitor): void - { - /** @var array $patterns */ - $patterns = [ - self::NAMED_PARAMETER => static function (string $sql) use ($visitor): void { - $visitor->acceptNamedParameter($sql); - }, - self::POSITIONAL_PARAMETER => static function (string $sql) use ($visitor): void { - $visitor->acceptPositionalParameter($sql); - }, - $this->sqlPattern => static function (string $sql) use ($visitor): void { - $visitor->acceptOther($sql); - }, - self::SPECIAL => static function (string $sql) use ($visitor): void { - $visitor->acceptOther($sql); - }, - ]; - - $offset = 0; - - while (($handler = current($patterns)) !== false) { - if (preg_match('~\G' . key($patterns) . '~s', $sql, $matches, 0, $offset) === 1) { - $handler($matches[0]); - reset($patterns); - - $offset += strlen($matches[0]); - } elseif (preg_last_error() !== PREG_NO_ERROR) { - // @codeCoverageIgnoreStart - throw RegularExpressionError::new(); - // @codeCoverageIgnoreEnd - } else { - next($patterns); - } - } - - assert($offset === strlen($sql)); - } - - private function getMySQLStringLiteralPattern(string $delimiter): string - { - return $delimiter . '((\\\\.)|(?![' . $delimiter . '\\\\]).)*' . $delimiter; - } - - private function getAnsiSQLStringLiteralPattern(string $delimiter): string - { - return $delimiter . '[^' . $delimiter . ']*' . $delimiter; - } -} diff --git a/vendor/doctrine/dbal/src/SQL/Parser/Exception.php b/vendor/doctrine/dbal/src/SQL/Parser/Exception.php deleted file mode 100644 index 0c14b35..0000000 --- a/vendor/doctrine/dbal/src/SQL/Parser/Exception.php +++ /dev/null @@ -1,11 +0,0 @@ - Table($tableName)); if you want to rename the table, you have to make sure this does not get - * recreated during schema migration. - */ -abstract class AbstractAsset -{ - /** @var string */ - protected $_name = ''; - - /** - * Namespace of the asset. If none isset the default namespace is assumed. - * - * @var string|null - */ - protected $_namespace; - - /** @var bool */ - protected $_quoted = false; - - /** - * Sets the name of this asset. - * - * @param string $name - * - * @return void - */ - protected function _setName($name) - { - if ($this->isIdentifierQuoted($name)) { - $this->_quoted = true; - $name = $this->trimQuotes($name); - } - - if (strpos($name, '.') !== false) { - $parts = explode('.', $name); - $this->_namespace = $parts[0]; - $name = $parts[1]; - } - - $this->_name = $name; - } - - /** - * Is this asset in the default namespace? - * - * @param string $defaultNamespaceName - * - * @return bool - */ - public function isInDefaultNamespace($defaultNamespaceName) - { - return $this->_namespace === $defaultNamespaceName || $this->_namespace === null; - } - - /** - * Gets the namespace name of this asset. - * - * If NULL is returned this means the default namespace is used. - * - * @return string|null - */ - public function getNamespaceName() - { - return $this->_namespace; - } - - /** - * The shortest name is stripped of the default namespace. All other - * namespaced elements are returned as full-qualified names. - * - * @param string|null $defaultNamespaceName - * - * @return string - */ - public function getShortestName($defaultNamespaceName) - { - $shortestName = $this->getName(); - if ($this->_namespace === $defaultNamespaceName) { - $shortestName = $this->_name; - } - - return strtolower($shortestName); - } - - /** - * The normalized name is full-qualified and lower-cased. Lower-casing is - * actually wrong, but we have to do it to keep our sanity. If you are - * using database objects that only differentiate in the casing (FOO vs - * Foo) then you will NOT be able to use Doctrine Schema abstraction. - * - * Every non-namespaced element is prefixed with the default namespace - * name which is passed as argument to this method. - * - * @deprecated Use {@see getNamespaceName()} and {@see getName()} instead. - * - * @param string $defaultNamespaceName - * - * @return string - */ - public function getFullQualifiedName($defaultNamespaceName) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4814', - 'AbstractAsset::getFullQualifiedName() is deprecated.' - . ' Use AbstractAsset::getNamespaceName() and ::getName() instead.', - ); - - $name = $this->getName(); - if ($this->_namespace === null) { - $name = $defaultNamespaceName . '.' . $name; - } - - return strtolower($name); - } - - /** - * Checks if this asset's name is quoted. - * - * @return bool - */ - public function isQuoted() - { - return $this->_quoted; - } - - /** - * Checks if this identifier is quoted. - * - * @param string $identifier - * - * @return bool - */ - protected function isIdentifierQuoted($identifier) - { - return isset($identifier[0]) && ($identifier[0] === '`' || $identifier[0] === '"' || $identifier[0] === '['); - } - - /** - * Trim quotes from the identifier. - * - * @param string $identifier - * - * @return string - */ - protected function trimQuotes($identifier) - { - return str_replace(['`', '"', '[', ']'], '', $identifier); - } - - /** - * Returns the name of this schema asset. - * - * @return string - */ - public function getName() - { - if ($this->_namespace !== null) { - return $this->_namespace . '.' . $this->_name; - } - - return $this->_name; - } - - /** - * Gets the quoted representation of this asset but only if it was defined with one. Otherwise - * return the plain unquoted value as inserted. - * - * @return string - */ - public function getQuotedName(AbstractPlatform $platform) - { - $keywords = $platform->getReservedKeywordsList(); - $parts = explode('.', $this->getName()); - foreach ($parts as $k => $v) { - $parts[$k] = $this->_quoted || $keywords->isKeyword($v) ? $platform->quoteIdentifier($v) : $v; - } - - return implode('.', $parts); - } - - /** - * Generates an identifier from a list of column names obeying a certain string length. - * - * This is especially important for Oracle, since it does not allow identifiers larger than 30 chars, - * however building idents automatically for foreign keys, composite keys or such can easily create - * very long names. - * - * @param string[] $columnNames - * @param string $prefix - * @param int $maxSize - * - * @return string - */ - protected function _generateIdentifierName($columnNames, $prefix = '', $maxSize = 30) - { - $hash = implode('', array_map(static function ($column): string { - return dechex(crc32($column)); - }, $columnNames)); - - return strtoupper(substr($prefix . '_' . $hash, 0, $maxSize)); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php b/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php deleted file mode 100644 index 2e38bb8..0000000 --- a/vendor/doctrine/dbal/src/Schema/AbstractSchemaManager.php +++ /dev/null @@ -1,1808 +0,0 @@ -_conn = $connection; - $this->_platform = $platform; - } - - /** - * Returns the associated platform. - * - * @deprecated Use {@link Connection::getDatabasePlatform()} instead. - * - * @return T - */ - public function getDatabasePlatform() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5387', - 'AbstractSchemaManager::getDatabasePlatform() is deprecated.' - . ' Use Connection::getDatabasePlatform() instead.', - ); - - return $this->_platform; - } - - /** - * Tries any method on the schema manager. Normally a method throws an - * exception when your DBMS doesn't support it or if an error occurs. - * This method allows you to try and method on your SchemaManager - * instance and will return false if it does not work or is not supported. - * - * - * $result = $sm->tryMethod('dropView', 'view_name'); - * - * - * @deprecated - * - * @return mixed - */ - public function tryMethod() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'AbstractSchemaManager::tryMethod() is deprecated.', - ); - - $args = func_get_args(); - $method = $args[0]; - unset($args[0]); - $args = array_values($args); - - $callback = [$this, $method]; - assert(is_callable($callback)); - - try { - return call_user_func_array($callback, $args); - } catch (Throwable $e) { - return false; - } - } - - /** - * Lists the available databases for this connection. - * - * @return string[] - * - * @throws Exception - */ - public function listDatabases() - { - $sql = $this->_platform->getListDatabasesSQL(); - - $databases = $this->_conn->fetchAllAssociative($sql); - - return $this->_getPortableDatabasesList($databases); - } - - /** - * Returns a list of all namespaces in the current database. - * - * @deprecated Use {@see listSchemaNames()} instead. - * - * @return string[] - * - * @throws Exception - */ - public function listNamespaceNames() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'AbstractSchemaManager::listNamespaceNames() is deprecated,' - . ' use AbstractSchemaManager::listSchemaNames() instead.', - ); - - $sql = $this->_platform->getListNamespacesSQL(); - - $namespaces = $this->_conn->fetchAllAssociative($sql); - - return $this->getPortableNamespacesList($namespaces); - } - - /** - * Returns a list of the names of all schemata in the current database. - * - * @return list - * - * @throws Exception - */ - public function listSchemaNames(): array - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Lists the available sequences for this connection. - * - * @param string|null $database - * - * @return Sequence[] - * - * @throws Exception - */ - public function listSequences($database = null) - { - if ($database === null) { - $database = $this->getDatabase(__METHOD__); - } else { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5284', - 'Passing $database to AbstractSchemaManager::listSequences() is deprecated.', - ); - } - - $sql = $this->_platform->getListSequencesSQL($database); - - $sequences = $this->_conn->fetchAllAssociative($sql); - - return $this->filterAssetNames($this->_getPortableSequencesList($sequences)); - } - - /** - * Lists the columns for a given table. - * - * In contrast to other libraries and to the old version of Doctrine, - * this column definition does try to contain the 'primary' column for - * the reason that it is not portable across different RDBMS. Use - * {@see listTableIndexes($tableName)} to retrieve the primary key - * of a table. Where a RDBMS specifies more details, these are held - * in the platformDetails array. - * - * @param string $table The name of the table. - * @param string|null $database - * - * @return Column[] - * - * @throws Exception - */ - public function listTableColumns($table, $database = null) - { - if ($database === null) { - $database = $this->getDatabase(__METHOD__); - } else { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5284', - 'Passing $database to AbstractSchemaManager::listTableColumns() is deprecated.', - ); - } - - $sql = $this->_platform->getListTableColumnsSQL($table, $database); - - $tableColumns = $this->_conn->fetchAllAssociative($sql); - - return $this->_getPortableTableColumnList($table, $database, $tableColumns); - } - - /** - * @param string $table - * @param string|null $database - * - * @return Column[] - * - * @throws Exception - */ - protected function doListTableColumns($table, $database = null): array - { - if ($database === null) { - $database = $this->getDatabase(__METHOD__); - } else { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5284', - 'Passing $database to AbstractSchemaManager::doListTableColumns() is deprecated.', - ); - } - - return $this->_getPortableTableColumnList( - $table, - $database, - $this->selectTableColumns($database, $this->normalizeName($table)) - ->fetchAllAssociative(), - ); - } - - /** - * Lists the indexes for a given table returning an array of Index instances. - * - * Keys of the portable indexes list are all lower-cased. - * - * @param string $table The name of the table. - * - * @return Index[] - * - * @throws Exception - */ - public function listTableIndexes($table) - { - $sql = $this->_platform->getListTableIndexesSQL($table, $this->_conn->getDatabase()); - - $tableIndexes = $this->_conn->fetchAllAssociative($sql); - - return $this->_getPortableTableIndexesList($tableIndexes, $table); - } - - /** - * @param string $table - * - * @return Index[] - * - * @throws Exception - */ - protected function doListTableIndexes($table): array - { - $database = $this->getDatabase(__METHOD__); - $table = $this->normalizeName($table); - - return $this->_getPortableTableIndexesList( - $this->selectIndexColumns( - $database, - $table, - )->fetchAllAssociative(), - $table, - ); - } - - /** - * Returns true if all the given tables exist. - * - * The usage of a string $tableNames is deprecated. Pass a one-element array instead. - * - * @param string|string[] $names - * - * @return bool - * - * @throws Exception - */ - public function tablesExist($names) - { - if (is_string($names)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/3580', - 'The usage of a string $tableNames in AbstractSchemaManager::tablesExist() is deprecated. ' . - 'Pass a one-element array instead.', - ); - } - - $names = array_map('strtolower', (array) $names); - - return count($names) === count(array_intersect($names, array_map('strtolower', $this->listTableNames()))); - } - - /** - * Returns a list of all tables in the current database. - * - * @return string[] - * - * @throws Exception - */ - public function listTableNames() - { - $sql = $this->_platform->getListTablesSQL(); - - $tables = $this->_conn->fetchAllAssociative($sql); - $tableNames = $this->_getPortableTablesList($tables); - - return $this->filterAssetNames($tableNames); - } - - /** - * @return list - * - * @throws Exception - */ - protected function doListTableNames(): array - { - $database = $this->getDatabase(__METHOD__); - - return $this->filterAssetNames( - $this->_getPortableTablesList( - $this->selectTableNames($database) - ->fetchAllAssociative(), - ), - ); - } - - /** - * Filters asset names if they are configured to return only a subset of all - * the found elements. - * - * @param mixed[] $assetNames - * - * @return mixed[] - */ - protected function filterAssetNames($assetNames) - { - $filter = $this->_conn->getConfiguration()->getSchemaAssetsFilter(); - if ($filter === null) { - return $assetNames; - } - - return array_values(array_filter($assetNames, $filter)); - } - - /** - * Lists the tables for this connection. - * - * @return list
- * - * @throws Exception - */ - public function listTables() - { - $tableNames = $this->listTableNames(); - - $tables = []; - foreach ($tableNames as $tableName) { - $tables[] = $this->introspectTable($tableName); - } - - return $tables; - } - - /** - * @return list
- * - * @throws Exception - */ - protected function doListTables(): array - { - $database = $this->getDatabase(__METHOD__); - - $tableColumnsByTable = $this->fetchTableColumnsByTable($database); - $indexColumnsByTable = $this->fetchIndexColumnsByTable($database); - $foreignKeyColumnsByTable = $this->fetchForeignKeyColumnsByTable($database); - $tableOptionsByTable = $this->fetchTableOptionsByTable($database); - - $filter = $this->_conn->getConfiguration()->getSchemaAssetsFilter(); - $tables = []; - - foreach ($tableColumnsByTable as $tableName => $tableColumns) { - if ($filter !== null && ! $filter($tableName)) { - continue; - } - - $tables[] = new Table( - $tableName, - $this->_getPortableTableColumnList($tableName, $database, $tableColumns), - $this->_getPortableTableIndexesList($indexColumnsByTable[$tableName] ?? [], $tableName), - [], - $this->_getPortableTableForeignKeysList($foreignKeyColumnsByTable[$tableName] ?? []), - $tableOptionsByTable[$tableName] ?? [], - ); - } - - return $tables; - } - - /** - * @deprecated Use {@see introspectTable()} instead. - * - * @param string $name - * - * @return Table - * - * @throws Exception - */ - public function listTableDetails($name) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5595', - '%s is deprecated. Use introspectTable() instead.', - __METHOD__, - ); - - $columns = $this->listTableColumns($name); - $foreignKeys = []; - - if ($this->_platform->supportsForeignKeyConstraints()) { - $foreignKeys = $this->listTableForeignKeys($name); - } - - $indexes = $this->listTableIndexes($name); - - return new Table($name, $columns, $indexes, [], $foreignKeys); - } - - /** - * @param string $name - * - * @throws Exception - */ - protected function doListTableDetails($name): Table - { - $database = $this->getDatabase(__METHOD__); - - $normalizedName = $this->normalizeName($name); - - $tableOptionsByTable = $this->fetchTableOptionsByTable($database, $normalizedName); - - if ($this->_platform->supportsForeignKeyConstraints()) { - $foreignKeys = $this->listTableForeignKeys($name); - } else { - $foreignKeys = []; - } - - return new Table( - $name, - $this->listTableColumns($name, $database), - $this->listTableIndexes($name), - [], - $foreignKeys, - $tableOptionsByTable[$normalizedName] ?? [], - ); - } - - /** - * An extension point for those platforms where case sensitivity of the object name depends on whether it's quoted. - * - * Such platforms should convert a possibly quoted name into a value of the corresponding case. - */ - protected function normalizeName(string $name): string - { - $identifier = new Identifier($name); - - return $identifier->getName(); - } - - /** - * Selects names of tables in the specified database. - * - * @throws Exception - * - * @abstract - */ - protected function selectTableNames(string $databaseName): Result - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Selects definitions of table columns in the specified database. If the table name is specified, narrows down - * the selection to this table. - * - * @throws Exception - * - * @abstract - */ - protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Selects definitions of index columns in the specified database. If the table name is specified, narrows down - * the selection to this table. - * - * @throws Exception - */ - protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Selects definitions of foreign key columns in the specified database. If the table name is specified, - * narrows down the selection to this table. - * - * @throws Exception - */ - protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Fetches definitions of table columns in the specified database and returns them grouped by table name. - * - * @return array>> - * - * @throws Exception - */ - protected function fetchTableColumnsByTable(string $databaseName): array - { - return $this->fetchAllAssociativeGrouped($this->selectTableColumns($databaseName)); - } - - /** - * Fetches definitions of index columns in the specified database and returns them grouped by table name. - * - * @return array>> - * - * @throws Exception - */ - protected function fetchIndexColumnsByTable(string $databaseName): array - { - return $this->fetchAllAssociativeGrouped($this->selectIndexColumns($databaseName)); - } - - /** - * Fetches definitions of foreign key columns in the specified database and returns them grouped by table name. - * - * @return array>> - * - * @throws Exception - */ - protected function fetchForeignKeyColumnsByTable(string $databaseName): array - { - if (! $this->_platform->supportsForeignKeyConstraints()) { - return []; - } - - return $this->fetchAllAssociativeGrouped( - $this->selectForeignKeyColumns($databaseName), - ); - } - - /** - * Fetches table options for the tables in the specified database and returns them grouped by table name. - * If the table name is specified, narrows down the selection to this table. - * - * @return array> - * - * @throws Exception - */ - protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array - { - throw Exception::notSupported(__METHOD__); - } - - /** - * Introspects the table with the given name. - * - * @throws Exception - */ - public function introspectTable(string $name): Table - { - $table = $this->listTableDetails($name); - - if ($table->getColumns() === []) { - throw SchemaException::tableDoesNotExist($name); - } - - return $table; - } - - /** - * Lists the views this connection has. - * - * @return View[] - * - * @throws Exception - */ - public function listViews() - { - $database = $this->_conn->getDatabase(); - $sql = $this->_platform->getListViewsSQL($database); - $views = $this->_conn->fetchAllAssociative($sql); - - return $this->_getPortableViewsList($views); - } - - /** - * Lists the foreign keys for the given table. - * - * @param string $table The name of the table. - * @param string|null $database - * - * @return ForeignKeyConstraint[] - * - * @throws Exception - */ - public function listTableForeignKeys($table, $database = null) - { - if ($database === null) { - $database = $this->getDatabase(__METHOD__); - } else { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5284', - 'Passing $database to AbstractSchemaManager::listTableForeignKeys() is deprecated.', - ); - } - - $sql = $this->_platform->getListTableForeignKeysSQL($table, $database); - $tableForeignKeys = $this->_conn->fetchAllAssociative($sql); - - return $this->_getPortableTableForeignKeysList($tableForeignKeys); - } - - /** - * @param string $table - * @param string|null $database - * - * @return ForeignKeyConstraint[] - * - * @throws Exception - */ - protected function doListTableForeignKeys($table, $database = null): array - { - if ($database === null) { - $database = $this->getDatabase(__METHOD__); - } else { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5284', - 'Passing $database to AbstractSchemaManager::listTableForeignKeys() is deprecated.', - ); - } - - return $this->_getPortableTableForeignKeysList( - $this->selectForeignKeyColumns( - $database, - $this->normalizeName($table), - )->fetchAllAssociative(), - ); - } - - /* drop*() Methods */ - - /** - * Drops a database. - * - * NOTE: You can not drop the database this SchemaManager is currently connected to. - * - * @param string $database The name of the database to drop. - * - * @return void - * - * @throws Exception - */ - public function dropDatabase($database) - { - $this->_conn->executeStatement( - $this->_platform->getDropDatabaseSQL($database), - ); - } - - /** - * Drops a schema. - * - * @throws Exception - */ - public function dropSchema(string $schemaName): void - { - $this->_conn->executeStatement( - $this->_platform->getDropSchemaSQL($schemaName), - ); - } - - /** - * Drops the given table. - * - * @param string $name The name of the table to drop. - * - * @return void - * - * @throws Exception - */ - public function dropTable($name) - { - $this->_conn->executeStatement( - $this->_platform->getDropTableSQL($name), - ); - } - - /** - * Drops the index from the given table. - * - * @param Index|string $index The name of the index. - * @param Table|string $table The name of the table. - * - * @return void - * - * @throws Exception - */ - public function dropIndex($index, $table) - { - if ($index instanceof Index) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $index as an Index object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $index = $index->getQuotedName($this->_platform); - } - - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as an Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this->_platform); - } - - $this->_conn->executeStatement( - $this->_platform->getDropIndexSQL($index, $table), - ); - } - - /** - * Drops the constraint from the given table. - * - * @deprecated Use {@see dropIndex()}, {@see dropForeignKey()} or {@see dropUniqueConstraint()} instead. - * - * @param Table|string $table The name of the table. - * - * @return void - * - * @throws Exception - */ - public function dropConstraint(Constraint $constraint, $table) - { - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this->_platform); - } - - $this->_conn->executeStatement($this->_platform->getDropConstraintSQL( - $constraint->getQuotedName($this->_platform), - $table, - )); - } - - /** - * Drops a foreign key from a table. - * - * @param ForeignKeyConstraint|string $foreignKey The name of the foreign key. - * @param Table|string $table The name of the table with the foreign key. - * - * @return void - * - * @throws Exception - */ - public function dropForeignKey($foreignKey, $table) - { - if ($foreignKey instanceof ForeignKeyConstraint) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $foreignKey as a ForeignKeyConstraint object to %s is deprecated.' - . ' Pass it as a quoted name instead.', - __METHOD__, - ); - - $foreignKey = $foreignKey->getQuotedName($this->_platform); - } - - if ($table instanceof Table) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4798', - 'Passing $table as a Table object to %s is deprecated. Pass it as a quoted name instead.', - __METHOD__, - ); - - $table = $table->getQuotedName($this->_platform); - } - - $this->_conn->executeStatement( - $this->_platform->getDropForeignKeySQL($foreignKey, $table), - ); - } - - /** - * Drops a sequence with a given name. - * - * @param string $name The name of the sequence to drop. - * - * @return void - * - * @throws Exception - */ - public function dropSequence($name) - { - $this->_conn->executeStatement( - $this->_platform->getDropSequenceSQL($name), - ); - } - - /** - * Drops the unique constraint from the given table. - * - * @throws Exception - */ - public function dropUniqueConstraint(string $name, string $tableName): void - { - $this->_conn->executeStatement( - $this->_platform->getDropUniqueConstraintSQL($name, $tableName), - ); - } - - /** - * Drops a view. - * - * @param string $name The name of the view. - * - * @return void - * - * @throws Exception - */ - public function dropView($name) - { - $this->_conn->executeStatement( - $this->_platform->getDropViewSQL($name), - ); - } - - /* create*() Methods */ - - /** @throws Exception */ - public function createSchemaObjects(Schema $schema): void - { - $this->_execSql($schema->toSql($this->_platform)); - } - - /** - * Creates a new database. - * - * @param string $database The name of the database to create. - * - * @return void - * - * @throws Exception - */ - public function createDatabase($database) - { - $this->_conn->executeStatement( - $this->_platform->getCreateDatabaseSQL($database), - ); - } - - /** - * Creates a new table. - * - * @return void - * - * @throws Exception - */ - public function createTable(Table $table) - { - $createFlags = AbstractPlatform::CREATE_INDEXES | AbstractPlatform::CREATE_FOREIGNKEYS; - $this->_execSql($this->_platform->getCreateTableSQL($table, $createFlags)); - } - - /** - * Creates a new sequence. - * - * @param Sequence $sequence - * - * @return void - * - * @throws Exception - */ - public function createSequence($sequence) - { - $this->_conn->executeStatement( - $this->_platform->getCreateSequenceSQL($sequence), - ); - } - - /** - * Creates a constraint on a table. - * - * @deprecated Use {@see createIndex()}, {@see createForeignKey()} or {@see createUniqueConstraint()} instead. - * - * @param Table|string $table - * - * @return void - * - * @throws Exception - */ - public function createConstraint(Constraint $constraint, $table) - { - $this->_conn->executeStatement( - $this->_platform->getCreateConstraintSQL($constraint, $table), - ); - } - - /** - * Creates a new index on a table. - * - * @param Table|string $table The name of the table on which the index is to be created. - * - * @return void - * - * @throws Exception - */ - public function createIndex(Index $index, $table) - { - $this->_conn->executeStatement( - $this->_platform->getCreateIndexSQL($index, $table), - ); - } - - /** - * Creates a new foreign key. - * - * @param ForeignKeyConstraint $foreignKey The ForeignKey instance. - * @param Table|string $table The name of the table on which the foreign key is to be created. - * - * @return void - * - * @throws Exception - */ - public function createForeignKey(ForeignKeyConstraint $foreignKey, $table) - { - $this->_conn->executeStatement( - $this->_platform->getCreateForeignKeySQL($foreignKey, $table), - ); - } - - /** - * Creates a unique constraint on a table. - * - * @throws Exception - */ - public function createUniqueConstraint(UniqueConstraint $uniqueConstraint, string $tableName): void - { - $this->_conn->executeStatement( - $this->_platform->getCreateUniqueConstraintSQL($uniqueConstraint, $tableName), - ); - } - - /** - * Creates a new view. - * - * @return void - * - * @throws Exception - */ - public function createView(View $view) - { - $this->_conn->executeStatement( - $this->_platform->getCreateViewSQL( - $view->getQuotedName($this->_platform), - $view->getSql(), - ), - ); - } - - /* dropAndCreate*() Methods */ - - /** @throws Exception */ - public function dropSchemaObjects(Schema $schema): void - { - $this->_execSql($schema->toDropSql($this->_platform)); - } - - /** - * Drops and creates a constraint. - * - * @deprecated Use {@see dropIndex()} and {@see createIndex()}, - * {@see dropForeignKey()} and {@see createForeignKey()} - * or {@see dropUniqueConstraint()} and {@see createUniqueConstraint()} instead. - * - * @see dropConstraint() - * @see createConstraint() - * - * @param Table|string $table - * - * @return void - * - * @throws Exception - */ - public function dropAndCreateConstraint(Constraint $constraint, $table) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'AbstractSchemaManager::dropAndCreateConstraint() is deprecated.' - . ' Use AbstractSchemaManager::dropIndex() and AbstractSchemaManager::createIndex(),' - . ' AbstractSchemaManager::dropForeignKey() and AbstractSchemaManager::createForeignKey()' - . ' or AbstractSchemaManager::dropUniqueConstraint()' - . ' and AbstractSchemaManager::createUniqueConstraint() instead.', - ); - - $this->tryMethod('dropConstraint', $constraint, $table); - $this->createConstraint($constraint, $table); - } - - /** - * Drops and creates a new index on a table. - * - * @deprecated Use {@see dropIndex()} and {@see createIndex()} instead. - * - * @param Table|string $table The name of the table on which the index is to be created. - * - * @return void - * - * @throws Exception - */ - public function dropAndCreateIndex(Index $index, $table) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'AbstractSchemaManager::dropAndCreateIndex() is deprecated.' - . ' Use AbstractSchemaManager::dropIndex() and AbstractSchemaManager::createIndex() instead.', - ); - - $this->tryMethod('dropIndex', $index->getQuotedName($this->_platform), $table); - $this->createIndex($index, $table); - } - - /** - * Drops and creates a new foreign key. - * - * @deprecated Use {@see dropForeignKey()} and {@see createForeignKey()} instead. - * - * @param ForeignKeyConstraint $foreignKey An associative array that defines properties - * of the foreign key to be created. - * @param Table|string $table The name of the table on which the foreign key is to be created. - * - * @return void - * - * @throws Exception - */ - public function dropAndCreateForeignKey(ForeignKeyConstraint $foreignKey, $table) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'AbstractSchemaManager::dropAndCreateForeignKey() is deprecated.' - . ' Use AbstractSchemaManager::dropForeignKey() and AbstractSchemaManager::createForeignKey() instead.', - ); - - $this->tryMethod('dropForeignKey', $foreignKey, $table); - $this->createForeignKey($foreignKey, $table); - } - - /** - * Drops and create a new sequence. - * - * @deprecated Use {@see dropSequence()} and {@see createSequence()} instead. - * - * @return void - * - * @throws Exception - */ - public function dropAndCreateSequence(Sequence $sequence) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'AbstractSchemaManager::dropAndCreateSequence() is deprecated.' - . ' Use AbstractSchemaManager::dropSequence() and AbstractSchemaManager::createSequence() instead.', - ); - - $this->tryMethod('dropSequence', $sequence->getQuotedName($this->_platform)); - $this->createSequence($sequence); - } - - /** - * Drops and creates a new table. - * - * @deprecated Use {@see dropTable()} and {@see createTable()} instead. - * - * @return void - * - * @throws Exception - */ - public function dropAndCreateTable(Table $table) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'AbstractSchemaManager::dropAndCreateTable() is deprecated.' - . ' Use AbstractSchemaManager::dropTable() and AbstractSchemaManager::createTable() instead.', - ); - - $this->tryMethod('dropTable', $table->getQuotedName($this->_platform)); - $this->createTable($table); - } - - /** - * Drops and creates a new database. - * - * @deprecated Use {@see dropDatabase()} and {@see createDatabase()} instead. - * - * @param string $database The name of the database to create. - * - * @return void - * - * @throws Exception - */ - public function dropAndCreateDatabase($database) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'AbstractSchemaManager::dropAndCreateDatabase() is deprecated.' - . ' Use AbstractSchemaManager::dropDatabase() and AbstractSchemaManager::createDatabase() instead.', - ); - - $this->tryMethod('dropDatabase', $database); - $this->createDatabase($database); - } - - /** - * Drops and creates a new view. - * - * @deprecated Use {@see dropView()} and {@see createView()} instead. - * - * @return void - * - * @throws Exception - */ - public function dropAndCreateView(View $view) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'AbstractSchemaManager::dropAndCreateView() is deprecated.' - . ' Use AbstractSchemaManager::dropView() and AbstractSchemaManager::createView() instead.', - ); - - $this->tryMethod('dropView', $view->getQuotedName($this->_platform)); - $this->createView($view); - } - - /** - * Alters an existing schema. - * - * @throws Exception - */ - public function alterSchema(SchemaDiff $schemaDiff): void - { - $this->_execSql($this->_platform->getAlterSchemaSQL($schemaDiff)); - } - - /** - * Migrates an existing schema to a new schema. - * - * @throws Exception - */ - public function migrateSchema(Schema $toSchema): void - { - $schemaDiff = $this->createComparator() - ->compareSchemas($this->introspectSchema(), $toSchema); - - $this->alterSchema($schemaDiff); - } - - /* alterTable() Methods */ - - /** - * Alters an existing tables schema. - * - * @return void - * - * @throws Exception - */ - public function alterTable(TableDiff $tableDiff) - { - $this->_execSql($this->_platform->getAlterTableSQL($tableDiff)); - } - - /** - * Renames a given table to another name. - * - * @param string $name The current name of the table. - * @param string $newName The new name of the table. - * - * @return void - * - * @throws Exception - */ - public function renameTable($name, $newName) - { - $this->_execSql($this->_platform->getRenameTableSQL($name, $newName)); - } - - /** - * Methods for filtering return values of list*() methods to convert - * the native DBMS data definition to a portable Doctrine definition - */ - - /** - * @param mixed[] $databases - * - * @return string[] - */ - protected function _getPortableDatabasesList($databases) - { - $list = []; - foreach ($databases as $value) { - $list[] = $this->_getPortableDatabaseDefinition($value); - } - - return $list; - } - - /** - * Converts a list of namespace names from the native DBMS data definition to a portable Doctrine definition. - * - * @deprecated Use {@see listSchemaNames()} instead. - * - * @param array> $namespaces The list of namespace names - * in the native DBMS data definition. - * - * @return string[] - */ - protected function getPortableNamespacesList(array $namespaces) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'AbstractSchemaManager::getPortableNamespacesList() is deprecated,' - . ' use AbstractSchemaManager::listSchemaNames() instead.', - ); - - $namespacesList = []; - - foreach ($namespaces as $namespace) { - $namespacesList[] = $this->getPortableNamespaceDefinition($namespace); - } - - return $namespacesList; - } - - /** - * @param mixed $database - * - * @return mixed - */ - protected function _getPortableDatabaseDefinition($database) - { - return $database; - } - - /** - * Converts a namespace definition from the native DBMS data definition to a portable Doctrine definition. - * - * @deprecated Use {@see listSchemaNames()} instead. - * - * @param array $namespace The native DBMS namespace definition. - * - * @return mixed - */ - protected function getPortableNamespaceDefinition(array $namespace) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'AbstractSchemaManager::getPortableNamespaceDefinition() is deprecated,' - . ' use AbstractSchemaManager::listSchemaNames() instead.', - ); - - return $namespace; - } - - /** - * @param mixed[][] $sequences - * - * @return Sequence[] - * - * @throws Exception - */ - protected function _getPortableSequencesList($sequences) - { - $list = []; - - foreach ($sequences as $value) { - $list[] = $this->_getPortableSequenceDefinition($value); - } - - return $list; - } - - /** - * @param mixed[] $sequence - * - * @return Sequence - * - * @throws Exception - */ - protected function _getPortableSequenceDefinition($sequence) - { - throw Exception::notSupported('Sequences'); - } - - /** - * Independent of the database the keys of the column list result are lowercased. - * - * The name of the created column instance however is kept in its case. - * - * @param string $table The name of the table. - * @param string $database - * @param mixed[][] $tableColumns - * - * @return Column[] - * - * @throws Exception - */ - protected function _getPortableTableColumnList($table, $database, $tableColumns) - { - $eventManager = $this->_platform->getEventManager(); - - $list = []; - foreach ($tableColumns as $tableColumn) { - $column = null; - $defaultPrevented = false; - - if ($eventManager !== null && $eventManager->hasListeners(Events::onSchemaColumnDefinition)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated. Use a custom schema manager instead.', - Events::onSchemaColumnDefinition, - ); - - $eventArgs = new SchemaColumnDefinitionEventArgs($tableColumn, $table, $database, $this->_conn); - $eventManager->dispatchEvent(Events::onSchemaColumnDefinition, $eventArgs); - - $defaultPrevented = $eventArgs->isDefaultPrevented(); - $column = $eventArgs->getColumn(); - } - - if (! $defaultPrevented) { - $column = $this->_getPortableTableColumnDefinition($tableColumn); - } - - if ($column === null) { - continue; - } - - $name = strtolower($column->getQuotedName($this->_platform)); - $list[$name] = $column; - } - - return $list; - } - - /** - * Gets Table Column Definition. - * - * @param mixed[] $tableColumn - * - * @return Column - * - * @throws Exception - */ - abstract protected function _getPortableTableColumnDefinition($tableColumn); - - /** - * Aggregates and groups the index results according to the required data result. - * - * @param mixed[][] $tableIndexes - * @param string|null $tableName - * - * @return Index[] - * - * @throws Exception - */ - protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) - { - $result = []; - foreach ($tableIndexes as $tableIndex) { - $indexName = $keyName = $tableIndex['key_name']; - if ($tableIndex['primary']) { - $keyName = 'primary'; - } - - $keyName = strtolower($keyName); - - if (! isset($result[$keyName])) { - $options = [ - 'lengths' => [], - ]; - - if (isset($tableIndex['where'])) { - $options['where'] = $tableIndex['where']; - } - - $result[$keyName] = [ - 'name' => $indexName, - 'columns' => [], - 'unique' => ! $tableIndex['non_unique'], - 'primary' => $tableIndex['primary'], - 'flags' => $tableIndex['flags'] ?? [], - 'options' => $options, - ]; - } - - $result[$keyName]['columns'][] = $tableIndex['column_name']; - $result[$keyName]['options']['lengths'][] = $tableIndex['length'] ?? null; - } - - $eventManager = $this->_platform->getEventManager(); - - $indexes = []; - foreach ($result as $indexKey => $data) { - $index = null; - $defaultPrevented = false; - - if ($eventManager !== null && $eventManager->hasListeners(Events::onSchemaIndexDefinition)) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/5784', - 'Subscribing to %s events is deprecated. Use a custom schema manager instead.', - Events::onSchemaColumnDefinition, - ); - - $eventArgs = new SchemaIndexDefinitionEventArgs($data, $tableName, $this->_conn); - $eventManager->dispatchEvent(Events::onSchemaIndexDefinition, $eventArgs); - - $defaultPrevented = $eventArgs->isDefaultPrevented(); - $index = $eventArgs->getIndex(); - } - - if (! $defaultPrevented) { - $index = new Index( - $data['name'], - $data['columns'], - $data['unique'], - $data['primary'], - $data['flags'], - $data['options'], - ); - } - - if ($index === null) { - continue; - } - - $indexes[$indexKey] = $index; - } - - return $indexes; - } - - /** - * @param mixed[][] $tables - * - * @return string[] - */ - protected function _getPortableTablesList($tables) - { - $list = []; - foreach ($tables as $value) { - $list[] = $this->_getPortableTableDefinition($value); - } - - return $list; - } - - /** - * @param mixed $table - * - * @return string - */ - protected function _getPortableTableDefinition($table) - { - return $table; - } - - /** - * @param mixed[][] $views - * - * @return View[] - */ - protected function _getPortableViewsList($views) - { - $list = []; - foreach ($views as $value) { - $view = $this->_getPortableViewDefinition($value); - - if ($view === false) { - continue; - } - - $viewName = strtolower($view->getQuotedName($this->_platform)); - $list[$viewName] = $view; - } - - return $list; - } - - /** - * @param mixed[] $view - * - * @return View|false - */ - protected function _getPortableViewDefinition($view) - { - return false; - } - - /** - * @param mixed[][] $tableForeignKeys - * - * @return ForeignKeyConstraint[] - */ - protected function _getPortableTableForeignKeysList($tableForeignKeys) - { - $list = []; - - foreach ($tableForeignKeys as $value) { - $list[] = $this->_getPortableTableForeignKeyDefinition($value); - } - - return $list; - } - - /** - * @param mixed $tableForeignKey - * - * @return ForeignKeyConstraint - * - * @abstract - */ - protected function _getPortableTableForeignKeyDefinition($tableForeignKey) - { - return $tableForeignKey; - } - - /** - * @internal - * - * @param string[]|string $sql - * - * @return void - * - * @throws Exception - */ - protected function _execSql($sql) - { - foreach ((array) $sql as $query) { - $this->_conn->executeStatement($query); - } - } - - /** - * Creates a schema instance for the current database. - * - * @deprecated Use {@link introspectSchema()} instead. - * - * @return Schema - * - * @throws Exception - */ - public function createSchema() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5613', - '%s is deprecated. Use introspectSchema() instead.', - __METHOD__, - ); - - $schemaNames = []; - - if ($this->_platform->supportsSchemas()) { - $schemaNames = $this->listNamespaceNames(); - } - - $sequences = []; - - if ($this->_platform->supportsSequences()) { - $sequences = $this->listSequences(); - } - - $tables = $this->listTables(); - - return new Schema($tables, $sequences, $this->createSchemaConfig(), $schemaNames); - } - - /** - * Returns a {@see Schema} instance representing the current database schema. - * - * @throws Exception - */ - public function introspectSchema(): Schema - { - return $this->createSchema(); - } - - /** - * Creates the configuration for this schema. - * - * @return SchemaConfig - * - * @throws Exception - */ - public function createSchemaConfig() - { - $schemaConfig = new SchemaConfig(); - $schemaConfig->setMaxIdentifierLength($this->_platform->getMaxIdentifierLength()); - - $searchPaths = $this->getSchemaSearchPaths(); - if (isset($searchPaths[0])) { - $schemaConfig->setName($searchPaths[0]); - } - - $params = $this->_conn->getParams(); - if (! isset($params['defaultTableOptions'])) { - $params['defaultTableOptions'] = []; - } - - if (! isset($params['defaultTableOptions']['charset']) && isset($params['charset'])) { - $params['defaultTableOptions']['charset'] = $params['charset']; - } - - $schemaConfig->setDefaultTableOptions($params['defaultTableOptions']); - - return $schemaConfig; - } - - /** - * The search path for namespaces in the currently connected database. - * - * The first entry is usually the default namespace in the Schema. All - * further namespaces contain tables/sequences which can also be addressed - * with a short, not full-qualified name. - * - * For databases that don't support subschema/namespaces this method - * returns the name of the currently connected database. - * - * @deprecated - * - * @return string[] - * - * @throws Exception - */ - public function getSchemaSearchPaths() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4821', - 'AbstractSchemaManager::getSchemaSearchPaths() is deprecated.', - ); - - $database = $this->_conn->getDatabase(); - - if ($database !== null) { - return [$database]; - } - - return []; - } - - /** - * Given a table comment this method tries to extract a typehint for Doctrine Type, or returns - * the type given as default. - * - * @internal This method should be only used from within the AbstractSchemaManager class hierarchy. - * - * @param string|null $comment - * @param string $currentType - * - * @return string - */ - public function extractDoctrineTypeFromComment($comment, $currentType) - { - if ($this->_conn->getConfiguration()->getDisableTypeComments()) { - return $currentType; - } - - if ($comment !== null && preg_match('(\(DC2Type:(((?!\)).)+)\))', $comment, $match) === 1) { - return $match[1]; - } - - return $currentType; - } - - /** - * @internal This method should be only used from within the AbstractSchemaManager class hierarchy. - * - * @param string|null $comment - * @param string|null $type - * - * @return string|null - */ - public function removeDoctrineTypeFromComment($comment, $type) - { - if ($this->_conn->getConfiguration()->getDisableTypeComments()) { - return $comment; - } - - if ($comment === null) { - return null; - } - - return str_replace('(DC2Type:' . $type . ')', '', $comment); - } - - /** @throws Exception */ - private function getDatabase(string $methodName): string - { - $database = $this->_conn->getDatabase(); - - if ($database === null) { - throw DatabaseRequired::new($methodName); - } - - return $database; - } - - public function createComparator(): Comparator - { - return new Comparator($this->_platform); - } - - /** - * @return array>> - * - * @throws Exception - */ - private function fetchAllAssociativeGrouped(Result $result): array - { - $data = []; - - foreach ($result->fetchAllAssociative() as $row) { - $tableName = $this->_getPortableTableDefinition($row); - $data[$tableName][] = $row; - } - - return $data; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Column.php b/vendor/doctrine/dbal/src/Schema/Column.php deleted file mode 100644 index e158017..0000000 --- a/vendor/doctrine/dbal/src/Schema/Column.php +++ /dev/null @@ -1,466 +0,0 @@ -_setName($name); - $this->setType($type); - $this->setOptions($options); - } - - /** - * @param mixed[] $options - * - * @return Column - * - * @throws SchemaException - */ - public function setOptions(array $options) - { - foreach ($options as $name => $value) { - $method = 'set' . $name; - - if (! method_exists($this, $method)) { - throw UnknownColumnOption::new($name); - } - - $this->$method($value); - } - - return $this; - } - - /** @return Column */ - public function setType(Type $type) - { - $this->_type = $type; - - return $this; - } - - /** - * @param int|null $length - * - * @return Column - */ - public function setLength($length) - { - if ($length !== null) { - $this->_length = (int) $length; - } else { - $this->_length = null; - } - - return $this; - } - - /** - * @param int $precision - * - * @return Column - */ - public function setPrecision($precision) - { - if (! is_numeric($precision)) { - $precision = 10; // defaults to 10 when no valid precision is given. - } - - $this->_precision = (int) $precision; - - return $this; - } - - /** - * @param int $scale - * - * @return Column - */ - public function setScale($scale) - { - if (! is_numeric($scale)) { - $scale = 0; - } - - $this->_scale = (int) $scale; - - return $this; - } - - /** - * @param bool $unsigned - * - * @return Column - */ - public function setUnsigned($unsigned) - { - $this->_unsigned = (bool) $unsigned; - - return $this; - } - - /** - * @param bool $fixed - * - * @return Column - */ - public function setFixed($fixed) - { - $this->_fixed = (bool) $fixed; - - return $this; - } - - /** - * @param bool $notnull - * - * @return Column - */ - public function setNotnull($notnull) - { - $this->_notnull = (bool) $notnull; - - return $this; - } - - /** - * @param mixed $default - * - * @return Column - */ - public function setDefault($default) - { - $this->_default = $default; - - return $this; - } - - /** - * @param mixed[] $platformOptions - * - * @return Column - */ - public function setPlatformOptions(array $platformOptions) - { - $this->_platformOptions = $platformOptions; - - return $this; - } - - /** - * @param string $name - * @param mixed $value - * - * @return Column - */ - public function setPlatformOption($name, $value) - { - $this->_platformOptions[$name] = $value; - - return $this; - } - - /** - * @param string|null $value - * - * @return Column - */ - public function setColumnDefinition($value) - { - $this->_columnDefinition = $value; - - return $this; - } - - /** @return Type */ - public function getType() - { - return $this->_type; - } - - /** @return int|null */ - public function getLength() - { - return $this->_length; - } - - /** @return int */ - public function getPrecision() - { - return $this->_precision; - } - - /** @return int */ - public function getScale() - { - return $this->_scale; - } - - /** @return bool */ - public function getUnsigned() - { - return $this->_unsigned; - } - - /** @return bool */ - public function getFixed() - { - return $this->_fixed; - } - - /** @return bool */ - public function getNotnull() - { - return $this->_notnull; - } - - /** @return mixed */ - public function getDefault() - { - return $this->_default; - } - - /** @return mixed[] */ - public function getPlatformOptions() - { - return $this->_platformOptions; - } - - /** - * @param string $name - * - * @return bool - */ - public function hasPlatformOption($name) - { - return isset($this->_platformOptions[$name]); - } - - /** - * @param string $name - * - * @return mixed - */ - public function getPlatformOption($name) - { - return $this->_platformOptions[$name]; - } - - /** @return string|null */ - public function getColumnDefinition() - { - return $this->_columnDefinition; - } - - /** @return bool */ - public function getAutoincrement() - { - return $this->_autoincrement; - } - - /** - * @param bool $flag - * - * @return Column - */ - public function setAutoincrement($flag) - { - $this->_autoincrement = $flag; - - return $this; - } - - /** - * @param string|null $comment - * - * @return Column - */ - public function setComment($comment) - { - $this->_comment = $comment; - - return $this; - } - - /** @return string|null */ - public function getComment() - { - return $this->_comment; - } - - /** - * @deprecated Use {@link setPlatformOption()} instead - * - * @param string $name - * @param mixed $value - * - * @return Column - */ - public function setCustomSchemaOption($name, $value) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5476', - 'Column::setCustomSchemaOption() is deprecated. Use setPlatformOption() instead.', - ); - - $this->_customSchemaOptions[$name] = $value; - - return $this; - } - - /** - * @deprecated Use {@link hasPlatformOption()} instead - * - * @param string $name - * - * @return bool - */ - public function hasCustomSchemaOption($name) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5476', - 'Column::hasCustomSchemaOption() is deprecated. Use hasPlatformOption() instead.', - ); - - return isset($this->_customSchemaOptions[$name]); - } - - /** - * @deprecated Use {@link getPlatformOption()} instead - * - * @param string $name - * - * @return mixed - */ - public function getCustomSchemaOption($name) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5476', - 'Column::getCustomSchemaOption() is deprecated. Use getPlatformOption() instead.', - ); - - return $this->_customSchemaOptions[$name]; - } - - /** - * @deprecated Use {@link setPlatformOptions()} instead - * - * @param mixed[] $customSchemaOptions - * - * @return Column - */ - public function setCustomSchemaOptions(array $customSchemaOptions) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5476', - 'Column::setCustomSchemaOptions() is deprecated. Use setPlatformOptions() instead.', - ); - - $this->_customSchemaOptions = $customSchemaOptions; - - return $this; - } - - /** - * @deprecated Use {@link getPlatformOptions()} instead - * - * @return mixed[] - */ - public function getCustomSchemaOptions() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5476', - 'Column::getCustomSchemaOptions() is deprecated. Use getPlatformOptions() instead.', - ); - - return $this->_customSchemaOptions; - } - - /** @return mixed[] */ - public function toArray() - { - return array_merge([ - 'name' => $this->_name, - 'type' => $this->_type, - 'default' => $this->_default, - 'notnull' => $this->_notnull, - 'length' => $this->_length, - 'precision' => $this->_precision, - 'scale' => $this->_scale, - 'fixed' => $this->_fixed, - 'unsigned' => $this->_unsigned, - 'autoincrement' => $this->_autoincrement, - 'columnDefinition' => $this->_columnDefinition, - 'comment' => $this->_comment, - ], $this->_platformOptions, $this->_customSchemaOptions); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/ColumnDiff.php b/vendor/doctrine/dbal/src/Schema/ColumnDiff.php deleted file mode 100644 index bd1b0ee..0000000 --- a/vendor/doctrine/dbal/src/Schema/ColumnDiff.php +++ /dev/null @@ -1,169 +0,0 @@ -oldColumnName = $oldColumnName; - $this->column = $column; - $this->changedProperties = $changedProperties; - $this->fromColumn = $fromColumn; - } - - public function getOldColumn(): ?Column - { - return $this->fromColumn; - } - - public function getNewColumn(): Column - { - return $this->column; - } - - public function hasTypeChanged(): bool - { - return $this->hasChanged('type'); - } - - public function hasLengthChanged(): bool - { - return $this->hasChanged('length'); - } - - public function hasPrecisionChanged(): bool - { - return $this->hasChanged('precision'); - } - - public function hasScaleChanged(): bool - { - return $this->hasChanged('scale'); - } - - public function hasUnsignedChanged(): bool - { - return $this->hasChanged('unsigned'); - } - - public function hasFixedChanged(): bool - { - return $this->hasChanged('fixed'); - } - - public function hasNotNullChanged(): bool - { - return $this->hasChanged('notnull'); - } - - public function hasDefaultChanged(): bool - { - return $this->hasChanged('default'); - } - - public function hasAutoIncrementChanged(): bool - { - return $this->hasChanged('autoincrement'); - } - - public function hasCommentChanged(): bool - { - return $this->hasChanged('comment'); - } - - /** - * @deprecated Use {@see hasTypeChanged()}, {@see hasLengthChanged()}, {@see hasPrecisionChanged()}, - * {@see hasScaleChanged()}, {@see hasUnsignedChanged()}, {@see hasFixedChanged()}, {@see hasNotNullChanged()}, - * {@see hasDefaultChanged()}, {@see hasAutoIncrementChanged()} or {@see hasCommentChanged()} instead. - * - * @param string $propertyName - * - * @return bool - */ - public function hasChanged($propertyName) - { - return in_array($propertyName, $this->changedProperties, true); - } - - /** - * @deprecated Use {@see $fromColumn} instead. - * - * @return Identifier - */ - public function getOldColumnName() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5622', - '%s is deprecated. Use $fromColumn instead.', - __METHOD__, - ); - - if ($this->fromColumn !== null) { - $name = $this->fromColumn->getName(); - $quote = $this->fromColumn->isQuoted(); - } else { - $name = $this->oldColumnName; - $quote = false; - } - - return new Identifier($name, $quote); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Comparator.php b/vendor/doctrine/dbal/src/Schema/Comparator.php deleted file mode 100644 index 28e7f2f..0000000 --- a/vendor/doctrine/dbal/src/Schema/Comparator.php +++ /dev/null @@ -1,716 +0,0 @@ -platform = $platform; - } - - /** @param list $args */ - public function __call(string $method, array $args): SchemaDiff - { - if ($method !== 'compareSchemas') { - throw new BadMethodCallException(sprintf('Unknown method "%s"', $method)); - } - - return $this->doCompareSchemas(...$args); - } - - /** @param list $args */ - public static function __callStatic(string $method, array $args): SchemaDiff - { - if ($method !== 'compareSchemas') { - throw new BadMethodCallException(sprintf('Unknown method "%s"', $method)); - } - - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4707', - 'Calling %s::%s() statically is deprecated.', - self::class, - $method, - ); - - $comparator = new self(); - - return $comparator->doCompareSchemas(...$args); - } - - /** - * Returns a SchemaDiff object containing the differences between the schemas $fromSchema and $toSchema. - * - * This method should be called non-statically since it will be declared as non-static in the next major release. - * - * @return SchemaDiff - * - * @throws SchemaException - */ - private function doCompareSchemas( - Schema $fromSchema, - Schema $toSchema - ) { - $createdSchemas = []; - $droppedSchemas = []; - $createdTables = []; - $alteredTables = []; - $droppedTables = []; - $createdSequences = []; - $alteredSequences = []; - $droppedSequences = []; - - $orphanedForeignKeys = []; - - $foreignKeysToTable = []; - - foreach ($toSchema->getNamespaces() as $namespace) { - if ($fromSchema->hasNamespace($namespace)) { - continue; - } - - $createdSchemas[$namespace] = $namespace; - } - - foreach ($fromSchema->getNamespaces() as $namespace) { - if ($toSchema->hasNamespace($namespace)) { - continue; - } - - $droppedSchemas[$namespace] = $namespace; - } - - foreach ($toSchema->getTables() as $table) { - $tableName = $table->getShortestName($toSchema->getName()); - if (! $fromSchema->hasTable($tableName)) { - $createdTables[$tableName] = $toSchema->getTable($tableName); - } else { - $tableDifferences = $this->diffTable( - $fromSchema->getTable($tableName), - $toSchema->getTable($tableName), - ); - - if ($tableDifferences !== false) { - $alteredTables[$tableName] = $tableDifferences; - } - } - } - - /* Check if there are tables removed */ - foreach ($fromSchema->getTables() as $table) { - $tableName = $table->getShortestName($fromSchema->getName()); - - $table = $fromSchema->getTable($tableName); - if (! $toSchema->hasTable($tableName)) { - $droppedTables[$tableName] = $table; - } - - // also remember all foreign keys that point to a specific table - foreach ($table->getForeignKeys() as $foreignKey) { - $foreignTable = strtolower($foreignKey->getForeignTableName()); - if (! isset($foreignKeysToTable[$foreignTable])) { - $foreignKeysToTable[$foreignTable] = []; - } - - $foreignKeysToTable[$foreignTable][] = $foreignKey; - } - } - - foreach ($droppedTables as $tableName => $table) { - if (! isset($foreignKeysToTable[$tableName])) { - continue; - } - - foreach ($foreignKeysToTable[$tableName] as $foreignKey) { - if (isset($droppedTables[strtolower($foreignKey->getLocalTableName())])) { - continue; - } - - $orphanedForeignKeys[] = $foreignKey; - } - - // deleting duplicated foreign keys present on both on the orphanedForeignKey - // and the removedForeignKeys from changedTables - foreach ($foreignKeysToTable[$tableName] as $foreignKey) { - // strtolower the table name to make if compatible with getShortestName - $localTableName = strtolower($foreignKey->getLocalTableName()); - if (! isset($alteredTables[$localTableName])) { - continue; - } - - foreach ($alteredTables[$localTableName]->getDroppedForeignKeys() as $droppedForeignKey) { - assert($droppedForeignKey instanceof ForeignKeyConstraint); - - // We check if the key is from the removed table if not we skip. - if ($tableName !== strtolower($droppedForeignKey->getForeignTableName())) { - continue; - } - - $alteredTables[$localTableName]->unsetDroppedForeignKey($droppedForeignKey); - } - } - } - - foreach ($toSchema->getSequences() as $sequence) { - $sequenceName = $sequence->getShortestName($toSchema->getName()); - if (! $fromSchema->hasSequence($sequenceName)) { - if (! $this->isAutoIncrementSequenceInSchema($fromSchema, $sequence)) { - $createdSequences[] = $sequence; - } - } else { - if ($this->diffSequence($sequence, $fromSchema->getSequence($sequenceName))) { - $alteredSequences[] = $toSchema->getSequence($sequenceName); - } - } - } - - foreach ($fromSchema->getSequences() as $sequence) { - if ($this->isAutoIncrementSequenceInSchema($toSchema, $sequence)) { - continue; - } - - $sequenceName = $sequence->getShortestName($fromSchema->getName()); - - if ($toSchema->hasSequence($sequenceName)) { - continue; - } - - $droppedSequences[] = $sequence; - } - - $diff = new SchemaDiff( - $createdTables, - $alteredTables, - $droppedTables, - $fromSchema, - $createdSchemas, - $droppedSchemas, - $createdSequences, - $alteredSequences, - $droppedSequences, - ); - - $diff->orphanedForeignKeys = $orphanedForeignKeys; - - return $diff; - } - - /** - * @deprecated Use non-static call to {@see compareSchemas()} instead. - * - * @return SchemaDiff - * - * @throws SchemaException - */ - public function compare(Schema $fromSchema, Schema $toSchema) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4707', - 'Method compare() is deprecated. Use a non-static call to compareSchemas() instead.', - ); - - return $this->compareSchemas($fromSchema, $toSchema); - } - - /** - * @param Schema $schema - * @param Sequence $sequence - */ - private function isAutoIncrementSequenceInSchema($schema, $sequence): bool - { - foreach ($schema->getTables() as $table) { - if ($sequence->isAutoIncrementsFor($table)) { - return true; - } - } - - return false; - } - - /** @return bool */ - public function diffSequence(Sequence $sequence1, Sequence $sequence2) - { - if ($sequence1->getAllocationSize() !== $sequence2->getAllocationSize()) { - return true; - } - - return $sequence1->getInitialValue() !== $sequence2->getInitialValue(); - } - - /** - * Returns the difference between the tables $fromTable and $toTable. - * - * If there are no differences this method returns the boolean false. - * - * @deprecated Use {@see compareTables()} and, optionally, {@see TableDiff::isEmpty()} instead. - * - * @return TableDiff|false - * - * @throws Exception - */ - public function diffTable(Table $fromTable, Table $toTable) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5770', - '%s is deprecated. Use compareTables() instead.', - __METHOD__, - ); - - $diff = $this->compareTables($fromTable, $toTable); - - if ($diff->isEmpty()) { - return false; - } - - return $diff; - } - - /** - * Compares the tables and returns the difference between them. - * - * @throws Exception - */ - public function compareTables(Table $fromTable, Table $toTable): TableDiff - { - $addedColumns = []; - $modifiedColumns = []; - $droppedColumns = []; - $addedIndexes = []; - $modifiedIndexes = []; - $droppedIndexes = []; - $addedForeignKeys = []; - $modifiedForeignKeys = []; - $droppedForeignKeys = []; - - $fromTableColumns = $fromTable->getColumns(); - $toTableColumns = $toTable->getColumns(); - - /* See if all the columns in "from" table exist in "to" table */ - foreach ($toTableColumns as $columnName => $column) { - if ($fromTable->hasColumn($columnName)) { - continue; - } - - $addedColumns[$columnName] = $column; - } - - /* See if there are any removed columns in "to" table */ - foreach ($fromTableColumns as $columnName => $column) { - // See if column is removed in "to" table. - if (! $toTable->hasColumn($columnName)) { - $droppedColumns[$columnName] = $column; - - continue; - } - - $toColumn = $toTable->getColumn($columnName); - - // See if column has changed properties in "to" table. - $changedProperties = $this->diffColumn($column, $toColumn); - - if ($this->platform !== null) { - if ($this->columnsEqual($column, $toColumn)) { - continue; - } - } elseif (count($changedProperties) === 0) { - continue; - } - - $modifiedColumns[$column->getName()] = new ColumnDiff( - $column->getName(), - $toColumn, - $changedProperties, - $column, - ); - } - - $renamedColumns = $this->detectRenamedColumns($addedColumns, $droppedColumns); - - $fromTableIndexes = $fromTable->getIndexes(); - $toTableIndexes = $toTable->getIndexes(); - - /* See if all the indexes in "from" table exist in "to" table */ - foreach ($toTableIndexes as $indexName => $index) { - if (($index->isPrimary() && $fromTable->getPrimaryKey() !== null) || $fromTable->hasIndex($indexName)) { - continue; - } - - $addedIndexes[$indexName] = $index; - } - - /* See if there are any removed indexes in "to" table */ - foreach ($fromTableIndexes as $indexName => $index) { - // See if index is removed in "to" table. - if ( - ($index->isPrimary() && $toTable->getPrimaryKey() === null) || - ! $index->isPrimary() && ! $toTable->hasIndex($indexName) - ) { - $droppedIndexes[$indexName] = $index; - - continue; - } - - // See if index has changed in "to" table. - $toTableIndex = $index->isPrimary() ? $toTable->getPrimaryKey() : $toTable->getIndex($indexName); - assert($toTableIndex instanceof Index); - - if (! $this->diffIndex($index, $toTableIndex)) { - continue; - } - - $modifiedIndexes[$indexName] = $toTableIndex; - } - - $renamedIndexes = $this->detectRenamedIndexes($addedIndexes, $droppedIndexes); - - $fromForeignKeys = $fromTable->getForeignKeys(); - $toForeignKeys = $toTable->getForeignKeys(); - - foreach ($fromForeignKeys as $fromKey => $fromConstraint) { - foreach ($toForeignKeys as $toKey => $toConstraint) { - if ($this->diffForeignKey($fromConstraint, $toConstraint) === false) { - unset($fromForeignKeys[$fromKey], $toForeignKeys[$toKey]); - } else { - if (strtolower($fromConstraint->getName()) === strtolower($toConstraint->getName())) { - $modifiedForeignKeys[] = $toConstraint; - - unset($fromForeignKeys[$fromKey], $toForeignKeys[$toKey]); - } - } - } - } - - foreach ($fromForeignKeys as $fromConstraint) { - $droppedForeignKeys[] = $fromConstraint; - } - - foreach ($toForeignKeys as $toConstraint) { - $addedForeignKeys[] = $toConstraint; - } - - return new TableDiff( - $toTable->getName(), - $addedColumns, - $modifiedColumns, - $droppedColumns, - $addedIndexes, - $modifiedIndexes, - $droppedIndexes, - $fromTable, - $addedForeignKeys, - $modifiedForeignKeys, - $droppedForeignKeys, - $renamedColumns, - $renamedIndexes, - ); - } - - /** - * Try to find columns that only changed their name, rename operations maybe cheaper than add/drop - * however ambiguities between different possibilities should not lead to renaming at all. - * - * @param array $addedColumns - * @param array $removedColumns - * - * @return array - * - * @throws Exception - */ - private function detectRenamedColumns(array &$addedColumns, array &$removedColumns): array - { - $candidatesByName = []; - - foreach ($addedColumns as $addedColumnName => $addedColumn) { - foreach ($removedColumns as $removedColumn) { - if (! $this->columnsEqual($addedColumn, $removedColumn)) { - continue; - } - - $candidatesByName[$addedColumn->getName()][] = [$removedColumn, $addedColumn, $addedColumnName]; - } - } - - $renamedColumns = []; - - foreach ($candidatesByName as $candidates) { - if (count($candidates) !== 1) { - continue; - } - - [$removedColumn, $addedColumn] = $candidates[0]; - $removedColumnName = $removedColumn->getName(); - $addedColumnName = strtolower($addedColumn->getName()); - - if (isset($renamedColumns[$removedColumnName])) { - continue; - } - - $renamedColumns[$removedColumnName] = $addedColumn; - unset( - $addedColumns[$addedColumnName], - $removedColumns[strtolower($removedColumnName)], - ); - } - - return $renamedColumns; - } - - /** - * Try to find indexes that only changed their name, rename operations maybe cheaper than add/drop - * however ambiguities between different possibilities should not lead to renaming at all. - * - * @param array $addedIndexes - * @param array $removedIndexes - * - * @return array - */ - private function detectRenamedIndexes(array &$addedIndexes, array &$removedIndexes): array - { - $candidatesByName = []; - - // Gather possible rename candidates by comparing each added and removed index based on semantics. - foreach ($addedIndexes as $addedIndexName => $addedIndex) { - foreach ($removedIndexes as $removedIndex) { - if ($this->diffIndex($addedIndex, $removedIndex)) { - continue; - } - - $candidatesByName[$addedIndex->getName()][] = [$removedIndex, $addedIndex, $addedIndexName]; - } - } - - $renamedIndexes = []; - - foreach ($candidatesByName as $candidates) { - // If the current rename candidate contains exactly one semantically equal index, - // we can safely rename it. - // Otherwise, it is unclear if a rename action is really intended, - // therefore we let those ambiguous indexes be added/dropped. - if (count($candidates) !== 1) { - continue; - } - - [$removedIndex, $addedIndex] = $candidates[0]; - - $removedIndexName = strtolower($removedIndex->getName()); - $addedIndexName = strtolower($addedIndex->getName()); - - if (isset($renamedIndexes[$removedIndexName])) { - continue; - } - - $renamedIndexes[$removedIndexName] = $addedIndex; - unset( - $addedIndexes[$addedIndexName], - $removedIndexes[$removedIndexName], - ); - } - - return $renamedIndexes; - } - - /** - * @internal The method should be only used from within the {@see Comparator} class hierarchy. - * - * @return bool - */ - public function diffForeignKey(ForeignKeyConstraint $key1, ForeignKeyConstraint $key2) - { - if ( - array_map('strtolower', $key1->getUnquotedLocalColumns()) - !== array_map('strtolower', $key2->getUnquotedLocalColumns()) - ) { - return true; - } - - if ( - array_map('strtolower', $key1->getUnquotedForeignColumns()) - !== array_map('strtolower', $key2->getUnquotedForeignColumns()) - ) { - return true; - } - - if ($key1->getUnqualifiedForeignTableName() !== $key2->getUnqualifiedForeignTableName()) { - return true; - } - - if ($key1->onUpdate() !== $key2->onUpdate()) { - return true; - } - - return $key1->onDelete() !== $key2->onDelete(); - } - - /** - * Compares the definitions of the given columns - * - * @internal The method should be only used from within the {@see Comparator} class hierarchy. - * - * @throws Exception - */ - public function columnsEqual(Column $column1, Column $column2): bool - { - if ($this->platform === null) { - return $this->diffColumn($column1, $column2) === []; - } - - return $this->platform->columnsEqual($column1, $column2); - } - - /** - * Returns the difference between the columns - * - * If there are differences this method returns the changed properties as a - * string array, otherwise an empty array gets returned. - * - * @deprecated Use {@see columnsEqual()} instead. - * - * @return string[] - */ - public function diffColumn(Column $column1, Column $column2) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5650', - '%s is deprecated. Use diffTable() instead.', - __METHOD__, - ); - - $properties1 = $column1->toArray(); - $properties2 = $column2->toArray(); - - $changedProperties = []; - - if (get_class($properties1['type']) !== get_class($properties2['type'])) { - $changedProperties[] = 'type'; - } - - foreach (['notnull', 'unsigned', 'autoincrement'] as $property) { - if ($properties1[$property] === $properties2[$property]) { - continue; - } - - $changedProperties[] = $property; - } - - // Null values need to be checked additionally as they tell whether to create or drop a default value. - // null != 0, null != false, null != '' etc. This affects platform's table alteration SQL generation. - if ( - ($properties1['default'] === null) !== ($properties2['default'] === null) - || $properties1['default'] != $properties2['default'] - ) { - $changedProperties[] = 'default'; - } - - if ( - ($properties1['type'] instanceof Types\StringType && ! $properties1['type'] instanceof Types\GuidType) || - $properties1['type'] instanceof Types\BinaryType - ) { - // check if value of length is set at all, default value assumed otherwise. - $length1 = $properties1['length'] ?? 255; - $length2 = $properties2['length'] ?? 255; - if ($length1 !== $length2) { - $changedProperties[] = 'length'; - } - - if ($properties1['fixed'] !== $properties2['fixed']) { - $changedProperties[] = 'fixed'; - } - } elseif ($properties1['type'] instanceof Types\DecimalType) { - if (($properties1['precision'] ?? 10) !== ($properties2['precision'] ?? 10)) { - $changedProperties[] = 'precision'; - } - - if ($properties1['scale'] !== $properties2['scale']) { - $changedProperties[] = 'scale'; - } - } - - // A null value and an empty string are actually equal for a comment so they should not trigger a change. - if ( - $properties1['comment'] !== $properties2['comment'] && - ! ($properties1['comment'] === null && $properties2['comment'] === '') && - ! ($properties2['comment'] === null && $properties1['comment'] === '') - ) { - $changedProperties[] = 'comment'; - } - - $customOptions1 = $column1->getCustomSchemaOptions(); - $customOptions2 = $column2->getCustomSchemaOptions(); - - foreach (array_merge(array_keys($customOptions1), array_keys($customOptions2)) as $key) { - if (! array_key_exists($key, $properties1) || ! array_key_exists($key, $properties2)) { - $changedProperties[] = $key; - } elseif ($properties1[$key] !== $properties2[$key]) { - $changedProperties[] = $key; - } - } - - $platformOptions1 = $column1->getPlatformOptions(); - $platformOptions2 = $column2->getPlatformOptions(); - - foreach (array_keys(array_intersect_key($platformOptions1, $platformOptions2)) as $key) { - if ($properties1[$key] === $properties2[$key]) { - continue; - } - - $changedProperties[] = $key; - } - - return array_unique($changedProperties); - } - - /** - * Finds the difference between the indexes $index1 and $index2. - * - * Compares $index1 with $index2 and returns true if there are any - * differences or false in case there are no differences. - * - * @internal The method should be only used from within the {@see Comparator} class hierarchy. - * - * @return bool - */ - public function diffIndex(Index $index1, Index $index2) - { - return ! ($index1->isFulfilledBy($index2) && $index2->isFulfilledBy($index1)); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Constraint.php b/vendor/doctrine/dbal/src/Schema/Constraint.php deleted file mode 100644 index f47ee1f..0000000 --- a/vendor/doctrine/dbal/src/Schema/Constraint.php +++ /dev/null @@ -1,41 +0,0 @@ - - */ -class DB2SchemaManager extends AbstractSchemaManager -{ - /** - * {@inheritDoc} - */ - public function listTableNames() - { - return $this->doListTableNames(); - } - - /** - * {@inheritDoc} - */ - public function listTables() - { - return $this->doListTables(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see introspectTable()} instead. - */ - public function listTableDetails($name) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5595', - '%s is deprecated. Use introspectTable() instead.', - __METHOD__, - ); - - return $this->doListTableDetails($name); - } - - /** - * {@inheritDoc} - */ - public function listTableColumns($table, $database = null) - { - return $this->doListTableColumns($table, $database); - } - - /** - * {@inheritDoc} - */ - public function listTableIndexes($table) - { - return $this->doListTableIndexes($table); - } - - /** - * {@inheritDoc} - */ - public function listTableForeignKeys($table, $database = null) - { - return $this->doListTableForeignKeys($table, $database); - } - - /** - * {@inheritDoc} - * - * @throws Exception - */ - protected function _getPortableTableColumnDefinition($tableColumn) - { - $tableColumn = array_change_key_case($tableColumn, CASE_LOWER); - - $length = null; - $fixed = null; - $scale = false; - $precision = false; - - $default = null; - - if ($tableColumn['default'] !== null && $tableColumn['default'] !== 'NULL') { - $default = $tableColumn['default']; - - if (preg_match('/^\'(.*)\'$/s', $default, $matches) === 1) { - $default = str_replace("''", "'", $matches[1]); - } - } - - $type = $this->_platform->getDoctrineTypeMapping($tableColumn['typename']); - - if (isset($tableColumn['comment'])) { - $type = $this->extractDoctrineTypeFromComment($tableColumn['comment'], $type); - $tableColumn['comment'] = $this->removeDoctrineTypeFromComment($tableColumn['comment'], $type); - } - - switch (strtolower($tableColumn['typename'])) { - case 'varchar': - if ($tableColumn['codepage'] === 0) { - $type = Types::BINARY; - } - - $length = $tableColumn['length']; - $fixed = false; - break; - - case 'character': - if ($tableColumn['codepage'] === 0) { - $type = Types::BINARY; - } - - $length = $tableColumn['length']; - $fixed = true; - break; - - case 'clob': - $length = $tableColumn['length']; - break; - - case 'decimal': - case 'double': - case 'real': - $scale = $tableColumn['scale']; - $precision = $tableColumn['length']; - break; - } - - $options = [ - 'length' => $length, - 'fixed' => (bool) $fixed, - 'default' => $default, - 'autoincrement' => (bool) $tableColumn['autoincrement'], - 'notnull' => $tableColumn['nulls'] === 'N', - 'comment' => isset($tableColumn['comment']) && $tableColumn['comment'] !== '' - ? $tableColumn['comment'] - : null, - ]; - - if ($scale !== null && $precision !== null) { - $options['scale'] = $scale; - $options['precision'] = $precision; - } - - return new Column($tableColumn['colname'], Type::getType($type), $options); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableDefinition($table) - { - $table = array_change_key_case($table, CASE_LOWER); - - return $table['name']; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) - { - foreach ($tableIndexes as &$tableIndexRow) { - $tableIndexRow = array_change_key_case($tableIndexRow, CASE_LOWER); - $tableIndexRow['primary'] = (bool) $tableIndexRow['primary']; - } - - return parent::_getPortableTableIndexesList($tableIndexes, $tableName); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeyDefinition($tableForeignKey) - { - return new ForeignKeyConstraint( - $tableForeignKey['local_columns'], - $tableForeignKey['foreign_table'], - $tableForeignKey['foreign_columns'], - $tableForeignKey['name'], - $tableForeignKey['options'], - ); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeysList($tableForeignKeys) - { - $foreignKeys = []; - - foreach ($tableForeignKeys as $tableForeignKey) { - $tableForeignKey = array_change_key_case($tableForeignKey, CASE_LOWER); - - if (! isset($foreignKeys[$tableForeignKey['index_name']])) { - $foreignKeys[$tableForeignKey['index_name']] = [ - 'local_columns' => [$tableForeignKey['local_column']], - 'foreign_table' => $tableForeignKey['foreign_table'], - 'foreign_columns' => [$tableForeignKey['foreign_column']], - 'name' => $tableForeignKey['index_name'], - 'options' => [ - 'onUpdate' => $tableForeignKey['on_update'], - 'onDelete' => $tableForeignKey['on_delete'], - ], - ]; - } else { - $foreignKeys[$tableForeignKey['index_name']]['local_columns'][] = $tableForeignKey['local_column']; - $foreignKeys[$tableForeignKey['index_name']]['foreign_columns'][] = $tableForeignKey['foreign_column']; - } - } - - return parent::_getPortableTableForeignKeysList($foreignKeys); - } - - /** - * @param string $def - * - * @return string|null - */ - protected function _getPortableForeignKeyRuleDef($def) - { - if ($def === 'C') { - return 'CASCADE'; - } - - if ($def === 'N') { - return 'SET NULL'; - } - - return null; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableViewDefinition($view) - { - $view = array_change_key_case($view, CASE_LOWER); - - $sql = ''; - $pos = strpos($view['text'], ' AS '); - - if ($pos !== false) { - $sql = substr($view['text'], $pos + 4); - } - - return new View($view['name'], $sql); - } - - protected function normalizeName(string $name): string - { - $identifier = new Identifier($name); - - return $identifier->isQuoted() ? $identifier->getName() : strtoupper($name); - } - - protected function selectTableNames(string $databaseName): Result - { - $sql = <<<'SQL' -SELECT NAME -FROM SYSIBM.SYSTABLES -WHERE TYPE = 'T' - AND CREATOR = ? -SQL; - - return $this->_conn->executeQuery($sql, [$databaseName]); - } - - protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' C.TABNAME AS NAME,'; - } - - $sql .= <<<'SQL' - C.COLNAME, - C.TYPENAME, - C.CODEPAGE, - C.NULLS, - C.LENGTH, - C.SCALE, - C.REMARKS AS COMMENT, - CASE - WHEN C.GENERATED = 'D' THEN 1 - ELSE 0 - END AS AUTOINCREMENT, - C.DEFAULT -FROM SYSCAT.COLUMNS C - JOIN SYSCAT.TABLES AS T - ON T.TABSCHEMA = C.TABSCHEMA - AND T.TABNAME = C.TABNAME -SQL; - - $conditions = ['C.TABSCHEMA = ?', "T.TYPE = 'T'"]; - $params = [$databaseName]; - - if ($tableName !== null) { - $conditions[] = 'C.TABNAME = ?'; - $params[] = $tableName; - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY C.TABNAME, C.COLNO'; - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' IDX.TABNAME AS NAME,'; - } - - $sql .= <<<'SQL' - IDX.INDNAME AS KEY_NAME, - IDXCOL.COLNAME AS COLUMN_NAME, - CASE - WHEN IDX.UNIQUERULE = 'P' THEN 1 - ELSE 0 - END AS PRIMARY, - CASE - WHEN IDX.UNIQUERULE = 'D' THEN 1 - ELSE 0 - END AS NON_UNIQUE - FROM SYSCAT.INDEXES AS IDX - JOIN SYSCAT.TABLES AS T - ON IDX.TABSCHEMA = T.TABSCHEMA AND IDX.TABNAME = T.TABNAME - JOIN SYSCAT.INDEXCOLUSE AS IDXCOL - ON IDX.INDSCHEMA = IDXCOL.INDSCHEMA AND IDX.INDNAME = IDXCOL.INDNAME -SQL; - - $conditions = ['IDX.TABSCHEMA = ?', "T.TYPE = 'T'"]; - $params = [$databaseName]; - - if ($tableName !== null) { - $conditions[] = 'IDX.TABNAME = ?'; - $params[] = $tableName; - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY IDX.INDNAME, IDXCOL.COLSEQ'; - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' R.TABNAME AS NAME,'; - } - - $sql .= <<<'SQL' - FKCOL.COLNAME AS LOCAL_COLUMN, - R.REFTABNAME AS FOREIGN_TABLE, - PKCOL.COLNAME AS FOREIGN_COLUMN, - R.CONSTNAME AS INDEX_NAME, - CASE - WHEN R.UPDATERULE = 'R' THEN 'RESTRICT' - END AS ON_UPDATE, - CASE - WHEN R.DELETERULE = 'C' THEN 'CASCADE' - WHEN R.DELETERULE = 'N' THEN 'SET NULL' - WHEN R.DELETERULE = 'R' THEN 'RESTRICT' - END AS ON_DELETE - FROM SYSCAT.REFERENCES AS R - JOIN SYSCAT.TABLES AS T - ON T.TABSCHEMA = R.TABSCHEMA - AND T.TABNAME = R.TABNAME - JOIN SYSCAT.KEYCOLUSE AS FKCOL - ON FKCOL.CONSTNAME = R.CONSTNAME - AND FKCOL.TABSCHEMA = R.TABSCHEMA - AND FKCOL.TABNAME = R.TABNAME - JOIN SYSCAT.KEYCOLUSE AS PKCOL - ON PKCOL.CONSTNAME = R.REFKEYNAME - AND PKCOL.TABSCHEMA = R.REFTABSCHEMA - AND PKCOL.TABNAME = R.REFTABNAME - AND PKCOL.COLSEQ = FKCOL.COLSEQ -SQL; - - $conditions = ['R.TABSCHEMA = ?', "T.TYPE = 'T'"]; - $params = [$databaseName]; - - if ($tableName !== null) { - $conditions[] = 'R.TABNAME = ?'; - $params[] = $tableName; - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY R.CONSTNAME, FKCOL.COLSEQ'; - - return $this->_conn->executeQuery($sql, $params); - } - - /** - * {@inheritDoc} - */ - protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array - { - $sql = 'SELECT NAME, REMARKS'; - - $conditions = []; - $params = []; - - if ($tableName !== null) { - $conditions[] = 'NAME = ?'; - $params[] = $tableName; - } - - $sql .= ' FROM SYSIBM.SYSTABLES'; - - if ($conditions !== []) { - $sql .= ' WHERE ' . implode(' AND ', $conditions); - } - - /** @var array> $metadata */ - $metadata = $this->_conn->executeQuery($sql, $params) - ->fetchAllAssociativeIndexed(); - - $tableOptions = []; - foreach ($metadata as $table => $data) { - $data = array_change_key_case($data, CASE_LOWER); - - $tableOptions[$table] = ['comment' => $data['remarks']]; - } - - return $tableOptions; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/DefaultSchemaManagerFactory.php b/vendor/doctrine/dbal/src/Schema/DefaultSchemaManagerFactory.php deleted file mode 100644 index efba87f..0000000 --- a/vendor/doctrine/dbal/src/Schema/DefaultSchemaManagerFactory.php +++ /dev/null @@ -1,20 +0,0 @@ -getDatabasePlatform()->createSchemaManager($connection); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Exception/ColumnAlreadyExists.php b/vendor/doctrine/dbal/src/Schema/Exception/ColumnAlreadyExists.php deleted file mode 100644 index cc7acea..0000000 --- a/vendor/doctrine/dbal/src/Schema/Exception/ColumnAlreadyExists.php +++ /dev/null @@ -1,21 +0,0 @@ -getName(), - implode(', ', $foreignKey->getColumns()), - $foreignKey->getForeignTableName(), - implode(', ', $foreignKey->getForeignColumns()), - ), - ); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Exception/NamespaceAlreadyExists.php b/vendor/doctrine/dbal/src/Schema/Exception/NamespaceAlreadyExists.php deleted file mode 100644 index 008bd5f..0000000 --- a/vendor/doctrine/dbal/src/Schema/Exception/NamespaceAlreadyExists.php +++ /dev/null @@ -1,21 +0,0 @@ - Identifier) - * - * @var Identifier[] - */ - protected $_localColumnNames; - - /** - * Table or asset identifier instance of the referenced table name the foreign key constraint is associated with. - * - * @var Table|Identifier - */ - protected $_foreignTableName; - - /** - * Asset identifier instances of the referenced table column names the foreign key constraint is associated with. - * array($columnName => Identifier) - * - * @var Identifier[] - */ - protected $_foreignColumnNames; - - /** - * Options associated with the foreign key constraint. - * - * @var mixed[] - */ - protected $_options; - - /** - * Initializes the foreign key constraint. - * - * @param string[] $localColumnNames Names of the referencing table columns. - * @param Table|string $foreignTableName Referenced table. - * @param string[] $foreignColumnNames Names of the referenced table columns. - * @param string|null $name Name of the foreign key constraint. - * @param mixed[] $options Options associated with the foreign key constraint. - */ - public function __construct( - array $localColumnNames, - $foreignTableName, - array $foreignColumnNames, - $name = null, - array $options = [] - ) { - if ($name !== null) { - $this->_setName($name); - } - - $this->_localColumnNames = $this->createIdentifierMap($localColumnNames); - - if ($foreignTableName instanceof Table) { - $this->_foreignTableName = $foreignTableName; - } else { - $this->_foreignTableName = new Identifier($foreignTableName); - } - - $this->_foreignColumnNames = $this->createIdentifierMap($foreignColumnNames); - $this->_options = $options; - } - - /** - * @param string[] $names - * - * @return Identifier[] - */ - private function createIdentifierMap(array $names): array - { - $identifiers = []; - - foreach ($names as $name) { - $identifiers[$name] = new Identifier($name); - } - - return $identifiers; - } - - /** - * Returns the name of the referencing table - * the foreign key constraint is associated with. - * - * @deprecated Use the table that contains the foreign key as part of its {@see Table::$_fkConstraints} instead. - * - * @return string - */ - public function getLocalTableName() - { - return $this->_localTable->getName(); - } - - /** - * Sets the Table instance of the referencing table - * the foreign key constraint is associated with. - * - * @deprecated Use the table that contains the foreign key as part of its {@see Table::$_fkConstraints} instead. - * - * @param Table $table Instance of the referencing table. - * - * @return void - */ - public function setLocalTable(Table $table) - { - $this->_localTable = $table; - } - - /** - * @deprecated Use the table that contains the foreign key as part of its {@see Table::$_fkConstraints} instead. - * - * @return Table - */ - public function getLocalTable() - { - return $this->_localTable; - } - - /** - * Returns the names of the referencing table columns - * the foreign key constraint is associated with. - * - * @return string[] - */ - public function getLocalColumns() - { - return array_keys($this->_localColumnNames); - } - - /** - * Returns the quoted representation of the referencing table column names - * the foreign key constraint is associated with. - * - * But only if they were defined with one or the referencing table column name - * is a keyword reserved by the platform. - * Otherwise the plain unquoted value as inserted is returned. - * - * @param AbstractPlatform $platform The platform to use for quotation. - * - * @return string[] - */ - public function getQuotedLocalColumns(AbstractPlatform $platform) - { - $columns = []; - - foreach ($this->_localColumnNames as $column) { - $columns[] = $column->getQuotedName($platform); - } - - return $columns; - } - - /** - * Returns unquoted representation of local table column names for comparison with other FK - * - * @return string[] - */ - public function getUnquotedLocalColumns() - { - return array_map([$this, 'trimQuotes'], $this->getLocalColumns()); - } - - /** - * Returns unquoted representation of foreign table column names for comparison with other FK - * - * @return string[] - */ - public function getUnquotedForeignColumns() - { - return array_map([$this, 'trimQuotes'], $this->getForeignColumns()); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see getLocalColumns()} instead. - * - * @see getLocalColumns - */ - public function getColumns() - { - return $this->getLocalColumns(); - } - - /** - * Returns the quoted representation of the referencing table column names - * the foreign key constraint is associated with. - * - * But only if they were defined with one or the referencing table column name - * is a keyword reserved by the platform. - * Otherwise the plain unquoted value as inserted is returned. - * - * @deprecated Use {@see getQuotedLocalColumns()} instead. - * - * @see getQuotedLocalColumns - * - * @param AbstractPlatform $platform The platform to use for quotation. - * - * @return string[] - */ - public function getQuotedColumns(AbstractPlatform $platform) - { - return $this->getQuotedLocalColumns($platform); - } - - /** - * Returns the name of the referenced table - * the foreign key constraint is associated with. - * - * @return string - */ - public function getForeignTableName() - { - return $this->_foreignTableName->getName(); - } - - /** - * Returns the non-schema qualified foreign table name. - * - * @return string - */ - public function getUnqualifiedForeignTableName() - { - $name = $this->_foreignTableName->getName(); - $position = strrpos($name, '.'); - - if ($position !== false) { - $name = substr($name, $position + 1); - } - - return strtolower($name); - } - - /** - * Returns the quoted representation of the referenced table name - * the foreign key constraint is associated with. - * - * But only if it was defined with one or the referenced table name - * is a keyword reserved by the platform. - * Otherwise the plain unquoted value as inserted is returned. - * - * @param AbstractPlatform $platform The platform to use for quotation. - * - * @return string - */ - public function getQuotedForeignTableName(AbstractPlatform $platform) - { - return $this->_foreignTableName->getQuotedName($platform); - } - - /** - * Returns the names of the referenced table columns - * the foreign key constraint is associated with. - * - * @return string[] - */ - public function getForeignColumns() - { - return array_keys($this->_foreignColumnNames); - } - - /** - * Returns the quoted representation of the referenced table column names - * the foreign key constraint is associated with. - * - * But only if they were defined with one or the referenced table column name - * is a keyword reserved by the platform. - * Otherwise the plain unquoted value as inserted is returned. - * - * @param AbstractPlatform $platform The platform to use for quotation. - * - * @return string[] - */ - public function getQuotedForeignColumns(AbstractPlatform $platform) - { - $columns = []; - - foreach ($this->_foreignColumnNames as $column) { - $columns[] = $column->getQuotedName($platform); - } - - return $columns; - } - - /** - * Returns whether or not a given option - * is associated with the foreign key constraint. - * - * @param string $name Name of the option to check. - * - * @return bool - */ - public function hasOption($name) - { - return isset($this->_options[$name]); - } - - /** - * Returns an option associated with the foreign key constraint. - * - * @param string $name Name of the option the foreign key constraint is associated with. - * - * @return mixed - */ - public function getOption($name) - { - return $this->_options[$name]; - } - - /** - * Returns the options associated with the foreign key constraint. - * - * @return mixed[] - */ - public function getOptions() - { - return $this->_options; - } - - /** - * Returns the referential action for UPDATE operations - * on the referenced table the foreign key constraint is associated with. - * - * @return string|null - */ - public function onUpdate() - { - return $this->onEvent('onUpdate'); - } - - /** - * Returns the referential action for DELETE operations - * on the referenced table the foreign key constraint is associated with. - * - * @return string|null - */ - public function onDelete() - { - return $this->onEvent('onDelete'); - } - - /** - * Returns the referential action for a given database operation - * on the referenced table the foreign key constraint is associated with. - * - * @param string $event Name of the database operation/event to return the referential action for. - */ - private function onEvent($event): ?string - { - if (isset($this->_options[$event])) { - $onEvent = strtoupper($this->_options[$event]); - - if ($onEvent !== 'NO ACTION' && $onEvent !== 'RESTRICT') { - return $onEvent; - } - } - - return null; - } - - /** - * Checks whether this foreign key constraint intersects the given index columns. - * - * Returns `true` if at least one of this foreign key's local columns - * matches one of the given index's columns, `false` otherwise. - * - * @param Index $index The index to be checked against. - * - * @return bool - */ - public function intersectsIndexColumns(Index $index) - { - foreach ($index->getColumns() as $indexColumn) { - foreach ($this->_localColumnNames as $localColumn) { - if (strtolower($indexColumn) === strtolower($localColumn->getName())) { - return true; - } - } - } - - return false; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Identifier.php b/vendor/doctrine/dbal/src/Schema/Identifier.php deleted file mode 100644 index f34465e..0000000 --- a/vendor/doctrine/dbal/src/Schema/Identifier.php +++ /dev/null @@ -1,27 +0,0 @@ -_setName($identifier); - - if (! $quote || $this->_quoted) { - return; - } - - $this->_setName('"' . $this->getName() . '"'); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Index.php b/vendor/doctrine/dbal/src/Schema/Index.php deleted file mode 100644 index 84fac41..0000000 --- a/vendor/doctrine/dbal/src/Schema/Index.php +++ /dev/null @@ -1,365 +0,0 @@ - Identifier) - * - * @var Identifier[] - */ - protected $_columns = []; - - /** @var bool */ - protected $_isUnique = false; - - /** @var bool */ - protected $_isPrimary = false; - - /** - * Platform specific flags for indexes. - * array($flagName => true) - * - * @var true[] - */ - protected $_flags = []; - - /** - * Platform specific options - * - * @todo $_flags should eventually be refactored into options - * @var mixed[] - */ - private array $options = []; - - /** - * @param string $name - * @param string[] $columns - * @param bool $isUnique - * @param bool $isPrimary - * @param string[] $flags - * @param mixed[] $options - */ - public function __construct( - $name, - array $columns, - $isUnique = false, - $isPrimary = false, - array $flags = [], - array $options = [] - ) { - $isUnique = $isUnique || $isPrimary; - - $this->_setName($name); - $this->_isUnique = $isUnique; - $this->_isPrimary = $isPrimary; - $this->options = $options; - - foreach ($columns as $column) { - $this->_addColumn($column); - } - - foreach ($flags as $flag) { - $this->addFlag($flag); - } - } - - /** @throws InvalidArgumentException */ - protected function _addColumn(string $column): void - { - $this->_columns[$column] = new Identifier($column); - } - - /** - * {@inheritDoc} - */ - public function getColumns() - { - return array_keys($this->_columns); - } - - /** - * {@inheritDoc} - */ - public function getQuotedColumns(AbstractPlatform $platform) - { - $subParts = $platform->supportsColumnLengthIndexes() && $this->hasOption('lengths') - ? $this->getOption('lengths') : []; - - $columns = []; - - foreach ($this->_columns as $column) { - $length = array_shift($subParts); - - $quotedColumn = $column->getQuotedName($platform); - - if ($length !== null) { - $quotedColumn .= '(' . $length . ')'; - } - - $columns[] = $quotedColumn; - } - - return $columns; - } - - /** @return string[] */ - public function getUnquotedColumns() - { - return array_map([$this, 'trimQuotes'], $this->getColumns()); - } - - /** - * Is the index neither unique nor primary key? - * - * @return bool - */ - public function isSimpleIndex() - { - return ! $this->_isPrimary && ! $this->_isUnique; - } - - /** @return bool */ - public function isUnique() - { - return $this->_isUnique; - } - - /** @return bool */ - public function isPrimary() - { - return $this->_isPrimary; - } - - /** - * @param string $name - * @param int $pos - * - * @return bool - */ - public function hasColumnAtPosition($name, $pos = 0) - { - $name = $this->trimQuotes(strtolower($name)); - $indexColumns = array_map('strtolower', $this->getUnquotedColumns()); - - return array_search($name, $indexColumns, true) === $pos; - } - - /** - * Checks if this index exactly spans the given column names in the correct order. - * - * @param string[] $columnNames - * - * @return bool - */ - public function spansColumns(array $columnNames) - { - $columns = $this->getColumns(); - $numberOfColumns = count($columns); - $sameColumns = true; - - for ($i = 0; $i < $numberOfColumns; $i++) { - if ( - isset($columnNames[$i]) - && $this->trimQuotes(strtolower($columns[$i])) === $this->trimQuotes(strtolower($columnNames[$i])) - ) { - continue; - } - - $sameColumns = false; - } - - return $sameColumns; - } - - /** - * Keeping misspelled function name for backwards compatibility - * - * @deprecated Use {@see isFulfilledBy()} instead. - * - * @return bool - */ - public function isFullfilledBy(Index $other) - { - return $this->isFulfilledBy($other); - } - - /** - * Checks if the other index already fulfills all the indexing and constraint needs of the current one. - */ - public function isFulfilledBy(Index $other): bool - { - // allow the other index to be equally large only. It being larger is an option - // but it creates a problem with scenarios of the kind PRIMARY KEY(foo,bar) UNIQUE(foo) - if (count($other->getColumns()) !== count($this->getColumns())) { - return false; - } - - // Check if columns are the same, and even in the same order - $sameColumns = $this->spansColumns($other->getColumns()); - - if ($sameColumns) { - if (! $this->samePartialIndex($other)) { - return false; - } - - if (! $this->hasSameColumnLengths($other)) { - return false; - } - - if (! $this->isUnique() && ! $this->isPrimary()) { - // this is a special case: If the current key is neither primary or unique, any unique or - // primary key will always have the same effect for the index and there cannot be any constraint - // overlaps. This means a primary or unique index can always fulfill the requirements of just an - // index that has no constraints. - return true; - } - - if ($other->isPrimary() !== $this->isPrimary()) { - return false; - } - - return $other->isUnique() === $this->isUnique(); - } - - return false; - } - - /** - * Detects if the other index is a non-unique, non primary index that can be overwritten by this one. - * - * @return bool - */ - public function overrules(Index $other) - { - if ($other->isPrimary()) { - return false; - } - - if ($this->isSimpleIndex() && $other->isUnique()) { - return false; - } - - return $this->spansColumns($other->getColumns()) - && ($this->isPrimary() || $this->isUnique()) - && $this->samePartialIndex($other); - } - - /** - * Returns platform specific flags for indexes. - * - * @return string[] - */ - public function getFlags() - { - return array_keys($this->_flags); - } - - /** - * Adds Flag for an index that translates to platform specific handling. - * - * @param string $flag - * - * @return Index - * - * @example $index->addFlag('CLUSTERED') - */ - public function addFlag($flag) - { - $this->_flags[strtolower($flag)] = true; - - return $this; - } - - /** - * Does this index have a specific flag? - * - * @param string $flag - * - * @return bool - */ - public function hasFlag($flag) - { - return isset($this->_flags[strtolower($flag)]); - } - - /** - * Removes a flag. - * - * @param string $flag - * - * @return void - */ - public function removeFlag($flag) - { - unset($this->_flags[strtolower($flag)]); - } - - /** - * @param string $name - * - * @return bool - */ - public function hasOption($name) - { - return isset($this->options[strtolower($name)]); - } - - /** - * @param string $name - * - * @return mixed - */ - public function getOption($name) - { - return $this->options[strtolower($name)]; - } - - /** @return mixed[] */ - public function getOptions() - { - return $this->options; - } - - /** - * Return whether the two indexes have the same partial index - */ - private function samePartialIndex(Index $other): bool - { - if ( - $this->hasOption('where') - && $other->hasOption('where') - && $this->getOption('where') === $other->getOption('where') - ) { - return true; - } - - return ! $this->hasOption('where') && ! $other->hasOption('where'); - } - - /** - * Returns whether the index has the same column lengths as the other - */ - private function hasSameColumnLengths(self $other): bool - { - $filter = static function (?int $length): bool { - return $length !== null; - }; - - return array_filter($this->options['lengths'] ?? [], $filter) - === array_filter($other->options['lengths'] ?? [], $filter); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/LegacySchemaManagerFactory.php b/vendor/doctrine/dbal/src/Schema/LegacySchemaManagerFactory.php deleted file mode 100644 index 01c856b..0000000 --- a/vendor/doctrine/dbal/src/Schema/LegacySchemaManagerFactory.php +++ /dev/null @@ -1,19 +0,0 @@ -getDriver()->getSchemaManager( - $connection, - $connection->getDatabasePlatform(), - ); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php b/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php deleted file mode 100644 index 6e444d2..0000000 --- a/vendor/doctrine/dbal/src/Schema/MySQLSchemaManager.php +++ /dev/null @@ -1,605 +0,0 @@ - - */ -class MySQLSchemaManager extends AbstractSchemaManager -{ - /** @see https://mariadb.com/kb/en/library/string-literals/#escape-sequences */ - private const MARIADB_ESCAPE_SEQUENCES = [ - '\\0' => "\0", - "\\'" => "'", - '\\"' => '"', - '\\b' => "\b", - '\\n' => "\n", - '\\r' => "\r", - '\\t' => "\t", - '\\Z' => "\x1a", - '\\\\' => '\\', - '\\%' => '%', - '\\_' => '_', - - // Internally, MariaDB escapes single quotes using the standard syntax - "''" => "'", - ]; - - /** - * {@inheritDoc} - */ - public function listTableNames() - { - return $this->doListTableNames(); - } - - /** - * {@inheritDoc} - */ - public function listTables() - { - return $this->doListTables(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see introspectTable()} instead. - */ - public function listTableDetails($name) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5595', - '%s is deprecated. Use introspectTable() instead.', - __METHOD__, - ); - - return $this->doListTableDetails($name); - } - - /** - * {@inheritDoc} - */ - public function listTableColumns($table, $database = null) - { - return $this->doListTableColumns($table, $database); - } - - /** - * {@inheritDoc} - */ - public function listTableIndexes($table) - { - return $this->doListTableIndexes($table); - } - - /** - * {@inheritDoc} - */ - public function listTableForeignKeys($table, $database = null) - { - return $this->doListTableForeignKeys($table, $database); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableViewDefinition($view) - { - return new View($view['TABLE_NAME'], $view['VIEW_DEFINITION']); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableDefinition($table) - { - return array_shift($table); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) - { - foreach ($tableIndexes as $k => $v) { - $v = array_change_key_case($v, CASE_LOWER); - if ($v['key_name'] === 'PRIMARY') { - $v['primary'] = true; - } else { - $v['primary'] = false; - } - - if (strpos($v['index_type'], 'FULLTEXT') !== false) { - $v['flags'] = ['FULLTEXT']; - } elseif (strpos($v['index_type'], 'SPATIAL') !== false) { - $v['flags'] = ['SPATIAL']; - } - - // Ignore prohibited prefix `length` for spatial index - if (strpos($v['index_type'], 'SPATIAL') === false) { - $v['length'] = isset($v['sub_part']) ? (int) $v['sub_part'] : null; - } - - $tableIndexes[$k] = $v; - } - - return parent::_getPortableTableIndexesList($tableIndexes, $tableName); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableDatabaseDefinition($database) - { - return $database['Database']; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableColumnDefinition($tableColumn) - { - $tableColumn = array_change_key_case($tableColumn, CASE_LOWER); - - $dbType = strtolower($tableColumn['type']); - $dbType = strtok($dbType, '(), '); - assert(is_string($dbType)); - - $length = $tableColumn['length'] ?? strtok('(), '); - - $fixed = null; - - if (! isset($tableColumn['name'])) { - $tableColumn['name'] = ''; - } - - $scale = null; - $precision = null; - - $type = $origType = $this->_platform->getDoctrineTypeMapping($dbType); - - // In cases where not connected to a database DESCRIBE $table does not return 'Comment' - if (isset($tableColumn['comment'])) { - $type = $this->extractDoctrineTypeFromComment($tableColumn['comment'], $type); - $tableColumn['comment'] = $this->removeDoctrineTypeFromComment($tableColumn['comment'], $type); - } - - switch ($dbType) { - case 'char': - case 'binary': - $fixed = true; - break; - - case 'float': - case 'double': - case 'real': - case 'numeric': - case 'decimal': - if ( - preg_match( - '([A-Za-z]+\(([0-9]+),([0-9]+)\))', - $tableColumn['type'], - $match, - ) === 1 - ) { - $precision = $match[1]; - $scale = $match[2]; - $length = null; - } - - break; - - case 'tinytext': - $length = AbstractMySQLPlatform::LENGTH_LIMIT_TINYTEXT; - break; - - case 'text': - $length = AbstractMySQLPlatform::LENGTH_LIMIT_TEXT; - break; - - case 'mediumtext': - $length = AbstractMySQLPlatform::LENGTH_LIMIT_MEDIUMTEXT; - break; - - case 'tinyblob': - $length = AbstractMySQLPlatform::LENGTH_LIMIT_TINYBLOB; - break; - - case 'blob': - $length = AbstractMySQLPlatform::LENGTH_LIMIT_BLOB; - break; - - case 'mediumblob': - $length = AbstractMySQLPlatform::LENGTH_LIMIT_MEDIUMBLOB; - break; - - case 'tinyint': - case 'smallint': - case 'mediumint': - case 'int': - case 'integer': - case 'bigint': - case 'year': - $length = null; - break; - } - - if ($this->_platform instanceof MariaDb1027Platform) { - $columnDefault = $this->getMariaDb1027ColumnDefault($this->_platform, $tableColumn['default']); - } else { - $columnDefault = $tableColumn['default']; - } - - $options = [ - 'length' => $length !== null ? (int) $length : null, - 'unsigned' => strpos($tableColumn['type'], 'unsigned') !== false, - 'fixed' => (bool) $fixed, - 'default' => $columnDefault, - 'notnull' => $tableColumn['null'] !== 'YES', - 'scale' => null, - 'precision' => null, - 'autoincrement' => strpos($tableColumn['extra'], 'auto_increment') !== false, - 'comment' => isset($tableColumn['comment']) && $tableColumn['comment'] !== '' - ? $tableColumn['comment'] - : null, - ]; - - if ($scale !== null && $precision !== null) { - $options['scale'] = (int) $scale; - $options['precision'] = (int) $precision; - } - - $column = new Column($tableColumn['field'], Type::getType($type), $options); - - if (isset($tableColumn['characterset'])) { - $column->setPlatformOption('charset', $tableColumn['characterset']); - } - - if (isset($tableColumn['collation'])) { - $column->setPlatformOption('collation', $tableColumn['collation']); - } - - if (isset($tableColumn['declarationMismatch'])) { - $column->setPlatformOption('declarationMismatch', $tableColumn['declarationMismatch']); - } - - // Check underlying database type where doctrine type is inferred from DC2Type comment - // and set a flag if it is not as expected. - if ($type === 'json' && $origType !== $type && $this->expectedDbType($type, $options) !== $dbType) { - $column->setPlatformOption('declarationMismatch', true); - } - - return $column; - } - - /** - * Returns the database data type for a given doctrine type and column - * - * Note that for data types that depend on length where length is not part of the column definition - * and therefore the $tableColumn['length'] will not be set, for example TEXT (which could be LONGTEXT, - * MEDIUMTEXT) or BLOB (LONGBLOB or TINYBLOB), the expectedDbType cannot be inferred exactly, merely - * the default type. - * - * This method is intended to be used to determine underlying database type where doctrine type is - * inferred from a DC2Type comment. - * - * @param mixed[] $tableColumn - */ - private function expectedDbType(string $type, array $tableColumn): string - { - $_type = Type::getType($type); - $expectedDbType = strtolower($_type->getSQLDeclaration($tableColumn, $this->_platform)); - $expectedDbType = strtok($expectedDbType, '(), '); - - return $expectedDbType === false ? '' : $expectedDbType; - } - - /** - * Return Doctrine/Mysql-compatible column default values for MariaDB 10.2.7+ servers. - * - * - Since MariaDb 10.2.7 column defaults stored in information_schema are now quoted - * to distinguish them from expressions (see MDEV-10134). - * - CURRENT_TIMESTAMP, CURRENT_TIME, CURRENT_DATE are stored in information_schema - * as current_timestamp(), currdate(), currtime() - * - Quoted 'NULL' is not enforced by Maria, it is technically possible to have - * null in some circumstances (see https://jira.mariadb.org/browse/MDEV-14053) - * - \' is always stored as '' in information_schema (normalized) - * - * @link https://mariadb.com/kb/en/library/information-schema-columns-table/ - * @link https://jira.mariadb.org/browse/MDEV-13132 - * - * @param string|null $columnDefault default value as stored in information_schema for MariaDB >= 10.2.7 - */ - private function getMariaDb1027ColumnDefault(MariaDb1027Platform $platform, ?string $columnDefault): ?string - { - if ($columnDefault === 'NULL' || $columnDefault === null) { - return null; - } - - if (preg_match('/^\'(.*)\'$/', $columnDefault, $matches) === 1) { - return strtr($matches[1], self::MARIADB_ESCAPE_SEQUENCES); - } - - switch ($columnDefault) { - case 'current_timestamp()': - return $platform->getCurrentTimestampSQL(); - - case 'curdate()': - return $platform->getCurrentDateSQL(); - - case 'curtime()': - return $platform->getCurrentTimeSQL(); - } - - return $columnDefault; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeysList($tableForeignKeys) - { - $list = []; - foreach ($tableForeignKeys as $value) { - $value = array_change_key_case($value, CASE_LOWER); - if (! isset($list[$value['constraint_name']])) { - if (! isset($value['delete_rule']) || $value['delete_rule'] === 'RESTRICT') { - $value['delete_rule'] = null; - } - - if (! isset($value['update_rule']) || $value['update_rule'] === 'RESTRICT') { - $value['update_rule'] = null; - } - - $list[$value['constraint_name']] = [ - 'name' => $value['constraint_name'], - 'local' => [], - 'foreign' => [], - 'foreignTable' => $value['referenced_table_name'], - 'onDelete' => $value['delete_rule'], - 'onUpdate' => $value['update_rule'], - ]; - } - - $list[$value['constraint_name']]['local'][] = $value['column_name']; - $list[$value['constraint_name']]['foreign'][] = $value['referenced_column_name']; - } - - return parent::_getPortableTableForeignKeysList($list); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeyDefinition($tableForeignKey): ForeignKeyConstraint - { - return new ForeignKeyConstraint( - $tableForeignKey['local'], - $tableForeignKey['foreignTable'], - $tableForeignKey['foreign'], - $tableForeignKey['name'], - [ - 'onDelete' => $tableForeignKey['onDelete'], - 'onUpdate' => $tableForeignKey['onUpdate'], - ], - ); - } - - public function createComparator(): Comparator - { - return new MySQL\Comparator( - $this->_platform, - new CachingCollationMetadataProvider( - new ConnectionCollationMetadataProvider($this->_conn), - ), - ); - } - - protected function selectTableNames(string $databaseName): Result - { - $sql = <<<'SQL' -SELECT TABLE_NAME -FROM information_schema.TABLES -WHERE TABLE_SCHEMA = ? - AND TABLE_TYPE = 'BASE TABLE' -ORDER BY TABLE_NAME -SQL; - - return $this->_conn->executeQuery($sql, [$databaseName]); - } - - protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result - { - // @todo 4.0 - call getColumnTypeSQLSnippet() instead - [$columnTypeSQL, $joinCheckConstraintSQL] = $this->_platform->getColumnTypeSQLSnippets('c', $databaseName); - - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' c.TABLE_NAME,'; - } - - $sql .= <<_conn->executeQuery($sql, $params); - } - - protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' TABLE_NAME,'; - } - - $sql .= <<<'SQL' - NON_UNIQUE AS Non_Unique, - INDEX_NAME AS Key_name, - COLUMN_NAME AS Column_Name, - SUB_PART AS Sub_Part, - INDEX_TYPE AS Index_Type -FROM information_schema.STATISTICS -SQL; - - $conditions = ['TABLE_SCHEMA = ?']; - $params = [$databaseName]; - - if ($tableName !== null) { - $conditions[] = 'TABLE_NAME = ?'; - $params[] = $tableName; - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY SEQ_IN_INDEX'; - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT DISTINCT'; - - if ($tableName === null) { - $sql .= ' k.TABLE_NAME,'; - } - - $sql .= <<<'SQL' - k.CONSTRAINT_NAME, - k.COLUMN_NAME, - k.REFERENCED_TABLE_NAME, - k.REFERENCED_COLUMN_NAME, - k.ORDINAL_POSITION /*!50116, - c.UPDATE_RULE, - c.DELETE_RULE */ -FROM information_schema.key_column_usage k /*!50116 -INNER JOIN information_schema.referential_constraints c -ON c.CONSTRAINT_NAME = k.CONSTRAINT_NAME -AND c.TABLE_NAME = k.TABLE_NAME */ -SQL; - - $conditions = ['k.TABLE_SCHEMA = ?']; - $params = [$databaseName]; - - if ($tableName !== null) { - $conditions[] = 'k.TABLE_NAME = ?'; - $params[] = $tableName; - } - - $conditions[] = 'k.REFERENCED_COLUMN_NAME IS NOT NULL'; - - $sql .= ' WHERE ' . implode(' AND ', $conditions) - // The schema name is passed multiple times in the WHERE clause instead of using a JOIN condition - // in order to avoid performance issues on MySQL older than 8.0 and the corresponding MariaDB versions - // caused by https://bugs.mysql.com/bug.php?id=81347. - // Use a string literal for the database name since the internal PDO SQL parser - // cannot recognize parameter placeholders inside conditional comments - . ' /*!50116 AND c.CONSTRAINT_SCHEMA = ' . $this->_conn->quote($databaseName) . ' */' - . ' ORDER BY k.ORDINAL_POSITION'; - - return $this->_conn->executeQuery($sql, $params); - } - - /** - * {@inheritDoc} - */ - protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array - { - $sql = $this->_platform->fetchTableOptionsByTable($tableName !== null); - - $params = [$databaseName]; - if ($tableName !== null) { - $params[] = $tableName; - } - - /** @var array> $metadata */ - $metadata = $this->_conn->executeQuery($sql, $params) - ->fetchAllAssociativeIndexed(); - - $tableOptions = []; - foreach ($metadata as $table => $data) { - $data = array_change_key_case($data, CASE_LOWER); - - $tableOptions[$table] = [ - 'engine' => $data['engine'], - 'collation' => $data['table_collation'], - 'charset' => $data['character_set_name'], - 'autoincrement' => $data['auto_increment'], - 'comment' => $data['table_comment'], - 'create_options' => $this->parseCreateOptions($data['create_options']), - ]; - } - - return $tableOptions; - } - - /** @return string[]|true[] */ - private function parseCreateOptions(?string $string): array - { - $options = []; - - if ($string === null || $string === '') { - return $options; - } - - foreach (explode(' ', $string) as $pair) { - $parts = explode('=', $pair, 2); - - $options[$parts[0]] = $parts[1] ?? true; - } - - return $options; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php b/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php deleted file mode 100644 index 0737522..0000000 --- a/vendor/doctrine/dbal/src/Schema/OracleSchemaManager.php +++ /dev/null @@ -1,539 +0,0 @@ - - */ -class OracleSchemaManager extends AbstractSchemaManager -{ - /** - * {@inheritDoc} - */ - public function listTableNames() - { - return $this->doListTableNames(); - } - - /** - * {@inheritDoc} - */ - public function listTables() - { - return $this->doListTables(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see introspectTable()} instead. - */ - public function listTableDetails($name) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5595', - '%s is deprecated. Use introspectTable() instead.', - __METHOD__, - ); - - return $this->doListTableDetails($name); - } - - /** - * {@inheritDoc} - */ - public function listTableColumns($table, $database = null) - { - return $this->doListTableColumns($table, $database); - } - - /** - * {@inheritDoc} - */ - public function listTableIndexes($table) - { - return $this->doListTableIndexes($table); - } - - /** - * {@inheritDoc} - */ - public function listTableForeignKeys($table, $database = null) - { - return $this->doListTableForeignKeys($table, $database); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableViewDefinition($view) - { - $view = array_change_key_case($view, CASE_LOWER); - - return new View($this->getQuotedIdentifierName($view['view_name']), $view['text']); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableDefinition($table) - { - $table = array_change_key_case($table, CASE_LOWER); - - return $this->getQuotedIdentifierName($table['table_name']); - } - - /** - * {@inheritDoc} - * - * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html - */ - protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) - { - $indexBuffer = []; - foreach ($tableIndexes as $tableIndex) { - $tableIndex = array_change_key_case($tableIndex, CASE_LOWER); - - $keyName = strtolower($tableIndex['name']); - $buffer = []; - - if ($tableIndex['is_primary'] === 'P') { - $keyName = 'primary'; - $buffer['primary'] = true; - $buffer['non_unique'] = false; - } else { - $buffer['primary'] = false; - $buffer['non_unique'] = ! $tableIndex['is_unique']; - } - - $buffer['key_name'] = $keyName; - $buffer['column_name'] = $this->getQuotedIdentifierName($tableIndex['column_name']); - $indexBuffer[] = $buffer; - } - - return parent::_getPortableTableIndexesList($indexBuffer, $tableName); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableColumnDefinition($tableColumn) - { - $tableColumn = array_change_key_case($tableColumn, CASE_LOWER); - - $dbType = strtolower($tableColumn['data_type']); - if (strpos($dbType, 'timestamp(') === 0) { - if (strpos($dbType, 'with time zone') !== false) { - $dbType = 'timestamptz'; - } else { - $dbType = 'timestamp'; - } - } - - $unsigned = $fixed = $precision = $scale = $length = null; - - if (! isset($tableColumn['column_name'])) { - $tableColumn['column_name'] = ''; - } - - // Default values returned from database sometimes have trailing spaces. - if (is_string($tableColumn['data_default'])) { - $tableColumn['data_default'] = trim($tableColumn['data_default']); - } - - if ($tableColumn['data_default'] === '' || $tableColumn['data_default'] === 'NULL') { - $tableColumn['data_default'] = null; - } - - if ($tableColumn['data_default'] !== null) { - // Default values returned from database are represented as literal expressions - if (preg_match('/^\'(.*)\'$/s', $tableColumn['data_default'], $matches) === 1) { - $tableColumn['data_default'] = str_replace("''", "'", $matches[1]); - } - } - - if ($tableColumn['data_precision'] !== null) { - $precision = (int) $tableColumn['data_precision']; - } - - if ($tableColumn['data_scale'] !== null) { - $scale = (int) $tableColumn['data_scale']; - } - - $type = $this->_platform->getDoctrineTypeMapping($dbType); - $type = $this->extractDoctrineTypeFromComment($tableColumn['comments'], $type); - $tableColumn['comments'] = $this->removeDoctrineTypeFromComment($tableColumn['comments'], $type); - - switch ($dbType) { - case 'number': - if ($precision === 20 && $scale === 0) { - $type = 'bigint'; - } elseif ($precision === 5 && $scale === 0) { - $type = 'smallint'; - } elseif ($precision === 1 && $scale === 0) { - $type = 'boolean'; - } elseif ($scale > 0) { - $type = 'decimal'; - } - - break; - - case 'varchar': - case 'varchar2': - case 'nvarchar2': - $length = $tableColumn['char_length']; - $fixed = false; - break; - - case 'raw': - $length = $tableColumn['data_length']; - $fixed = true; - break; - - case 'char': - case 'nchar': - $length = $tableColumn['char_length']; - $fixed = true; - break; - } - - $options = [ - 'notnull' => $tableColumn['nullable'] === 'N', - 'fixed' => (bool) $fixed, - 'unsigned' => (bool) $unsigned, - 'default' => $tableColumn['data_default'], - 'length' => $length, - 'precision' => $precision, - 'scale' => $scale, - 'comment' => isset($tableColumn['comments']) && $tableColumn['comments'] !== '' - ? $tableColumn['comments'] - : null, - ]; - - return new Column($this->getQuotedIdentifierName($tableColumn['column_name']), Type::getType($type), $options); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeysList($tableForeignKeys) - { - $list = []; - foreach ($tableForeignKeys as $value) { - $value = array_change_key_case($value, CASE_LOWER); - if (! isset($list[$value['constraint_name']])) { - if ($value['delete_rule'] === 'NO ACTION') { - $value['delete_rule'] = null; - } - - $list[$value['constraint_name']] = [ - 'name' => $this->getQuotedIdentifierName($value['constraint_name']), - 'local' => [], - 'foreign' => [], - 'foreignTable' => $value['references_table'], - 'onDelete' => $value['delete_rule'], - ]; - } - - $localColumn = $this->getQuotedIdentifierName($value['local_column']); - $foreignColumn = $this->getQuotedIdentifierName($value['foreign_column']); - - $list[$value['constraint_name']]['local'][$value['position']] = $localColumn; - $list[$value['constraint_name']]['foreign'][$value['position']] = $foreignColumn; - } - - return parent::_getPortableTableForeignKeysList($list); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeyDefinition($tableForeignKey): ForeignKeyConstraint - { - return new ForeignKeyConstraint( - array_values($tableForeignKey['local']), - $this->getQuotedIdentifierName($tableForeignKey['foreignTable']), - array_values($tableForeignKey['foreign']), - $this->getQuotedIdentifierName($tableForeignKey['name']), - ['onDelete' => $tableForeignKey['onDelete']], - ); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableSequenceDefinition($sequence) - { - $sequence = array_change_key_case($sequence, CASE_LOWER); - - return new Sequence( - $this->getQuotedIdentifierName($sequence['sequence_name']), - (int) $sequence['increment_by'], - (int) $sequence['min_value'], - ); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableDatabaseDefinition($database) - { - $database = array_change_key_case($database, CASE_LOWER); - - return $database['username']; - } - - /** - * {@inheritDoc} - */ - public function createDatabase($database) - { - $statement = $this->_platform->getCreateDatabaseSQL($database); - - $params = $this->_conn->getParams(); - - if (isset($params['password'])) { - $statement .= ' IDENTIFIED BY ' . $params['password']; - } - - $this->_conn->executeStatement($statement); - - $statement = 'GRANT DBA TO ' . $database; - $this->_conn->executeStatement($statement); - } - - /** - * @internal The method should be only used from within the OracleSchemaManager class hierarchy. - * - * @param string $table - * - * @return bool - * - * @throws Exception - */ - public function dropAutoincrement($table) - { - $sql = $this->_platform->getDropAutoincrementSql($table); - foreach ($sql as $query) { - $this->_conn->executeStatement($query); - } - - return true; - } - - /** - * {@inheritDoc} - */ - public function dropTable($name) - { - $this->tryMethod('dropAutoincrement', $name); - - parent::dropTable($name); - } - - /** - * Returns the quoted representation of the given identifier name. - * - * Quotes non-uppercase identifiers explicitly to preserve case - * and thus make references to the particular identifier work. - * - * @param string $identifier The identifier to quote. - */ - private function getQuotedIdentifierName($identifier): string - { - if (preg_match('/[a-z]/', $identifier) === 1) { - return $this->_platform->quoteIdentifier($identifier); - } - - return $identifier; - } - - protected function selectTableNames(string $databaseName): Result - { - $sql = <<<'SQL' -SELECT TABLE_NAME -FROM ALL_TABLES -WHERE OWNER = :OWNER -ORDER BY TABLE_NAME -SQL; - - return $this->_conn->executeQuery($sql, ['OWNER' => $databaseName]); - } - - protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' C.TABLE_NAME,'; - } - - $sql .= <<<'SQL' - C.COLUMN_NAME, - C.DATA_TYPE, - C.DATA_DEFAULT, - C.DATA_PRECISION, - C.DATA_SCALE, - C.CHAR_LENGTH, - C.DATA_LENGTH, - C.NULLABLE, - D.COMMENTS - FROM ALL_TAB_COLUMNS C - INNER JOIN ALL_TABLES T - ON T.OWNER = C.OWNER - AND T.TABLE_NAME = C.TABLE_NAME - LEFT JOIN ALL_COL_COMMENTS D - ON D.OWNER = C.OWNER - AND D.TABLE_NAME = C.TABLE_NAME - AND D.COLUMN_NAME = C.COLUMN_NAME -SQL; - - $conditions = ['C.OWNER = :OWNER']; - $params = ['OWNER' => $databaseName]; - - if ($tableName !== null) { - $conditions[] = 'C.TABLE_NAME = :TABLE_NAME'; - $params['TABLE_NAME'] = $tableName; - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY C.COLUMN_ID'; - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' IND_COL.TABLE_NAME,'; - } - - $sql .= <<<'SQL' - IND_COL.INDEX_NAME AS NAME, - IND.INDEX_TYPE AS TYPE, - DECODE(IND.UNIQUENESS, 'NONUNIQUE', 0, 'UNIQUE', 1) AS IS_UNIQUE, - IND_COL.COLUMN_NAME, - IND_COL.COLUMN_POSITION AS COLUMN_POS, - CON.CONSTRAINT_TYPE AS IS_PRIMARY - FROM ALL_IND_COLUMNS IND_COL - LEFT JOIN ALL_INDEXES IND - ON IND.OWNER = IND_COL.INDEX_OWNER - AND IND.INDEX_NAME = IND_COL.INDEX_NAME - LEFT JOIN ALL_CONSTRAINTS CON - ON CON.OWNER = IND_COL.INDEX_OWNER - AND CON.INDEX_NAME = IND_COL.INDEX_NAME -SQL; - - $conditions = ['IND_COL.INDEX_OWNER = :OWNER']; - $params = ['OWNER' => $databaseName]; - - if ($tableName !== null) { - $conditions[] = 'IND_COL.TABLE_NAME = :TABLE_NAME'; - $params['TABLE_NAME'] = $tableName; - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY IND_COL.TABLE_NAME, IND_COL.INDEX_NAME' - . ', IND_COL.COLUMN_POSITION'; - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' COLS.TABLE_NAME,'; - } - - $sql .= <<<'SQL' - ALC.CONSTRAINT_NAME, - ALC.DELETE_RULE, - COLS.COLUMN_NAME LOCAL_COLUMN, - COLS.POSITION, - R_COLS.TABLE_NAME REFERENCES_TABLE, - R_COLS.COLUMN_NAME FOREIGN_COLUMN - FROM ALL_CONS_COLUMNS COLS - LEFT JOIN ALL_CONSTRAINTS ALC ON ALC.OWNER = COLS.OWNER AND ALC.CONSTRAINT_NAME = COLS.CONSTRAINT_NAME - LEFT JOIN ALL_CONS_COLUMNS R_COLS ON R_COLS.OWNER = ALC.R_OWNER AND - R_COLS.CONSTRAINT_NAME = ALC.R_CONSTRAINT_NAME AND - R_COLS.POSITION = COLS.POSITION -SQL; - - $conditions = ["ALC.CONSTRAINT_TYPE = 'R'", 'COLS.OWNER = :OWNER']; - $params = ['OWNER' => $databaseName]; - - if ($tableName !== null) { - $conditions[] = 'COLS.TABLE_NAME = :TABLE_NAME'; - $params['TABLE_NAME'] = $tableName; - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY COLS.TABLE_NAME, COLS.CONSTRAINT_NAME' - . ', COLS.POSITION'; - - return $this->_conn->executeQuery($sql, $params); - } - - /** - * {@inheritDoc} - */ - protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array - { - $sql = 'SELECT TABLE_NAME, COMMENTS'; - - $conditions = ['OWNER = :OWNER']; - $params = ['OWNER' => $databaseName]; - - if ($tableName !== null) { - $conditions[] = 'TABLE_NAME = :TABLE_NAME'; - $params['TABLE_NAME'] = $tableName; - } - - $sql .= ' FROM ALL_TAB_COMMENTS WHERE ' . implode(' AND ', $conditions); - - /** @var array> $metadata */ - $metadata = $this->_conn->executeQuery($sql, $params) - ->fetchAllAssociativeIndexed(); - - $tableOptions = []; - foreach ($metadata as $table => $data) { - $data = array_change_key_case($data, CASE_LOWER); - - $tableOptions[$table] = [ - 'comment' => $data['comments'], - ]; - } - - return $tableOptions; - } - - protected function normalizeName(string $name): string - { - $identifier = new Identifier($name); - - return $identifier->isQuoted() ? $identifier->getName() : strtoupper($name); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php b/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php deleted file mode 100644 index 3ad313e..0000000 --- a/vendor/doctrine/dbal/src/Schema/PostgreSQLSchemaManager.php +++ /dev/null @@ -1,771 +0,0 @@ - - */ -class PostgreSQLSchemaManager extends AbstractSchemaManager -{ - /** @var string[]|null */ - private ?array $existingSchemaPaths = null; - - /** - * {@inheritDoc} - */ - public function listTableNames() - { - return $this->doListTableNames(); - } - - /** - * {@inheritDoc} - */ - public function listTables() - { - return $this->doListTables(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see introspectTable()} instead. - */ - public function listTableDetails($name) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5595', - '%s is deprecated. Use introspectTable() instead.', - __METHOD__, - ); - - return $this->doListTableDetails($name); - } - - /** - * {@inheritDoc} - */ - public function listTableColumns($table, $database = null) - { - return $this->doListTableColumns($table, $database); - } - - /** - * {@inheritDoc} - */ - public function listTableIndexes($table) - { - return $this->doListTableIndexes($table); - } - - /** - * {@inheritDoc} - */ - public function listTableForeignKeys($table, $database = null) - { - return $this->doListTableForeignKeys($table, $database); - } - - /** - * Gets all the existing schema names. - * - * @deprecated Use {@see listSchemaNames()} instead. - * - * @return string[] - * - * @throws Exception - */ - public function getSchemaNames() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'PostgreSQLSchemaManager::getSchemaNames() is deprecated,' - . ' use PostgreSQLSchemaManager::listSchemaNames() instead.', - ); - - return $this->listNamespaceNames(); - } - - /** - * {@inheritDoc} - */ - public function listSchemaNames(): array - { - return $this->_conn->fetchFirstColumn( - <<<'SQL' -SELECT schema_name -FROM information_schema.schemata -WHERE schema_name NOT LIKE 'pg\_%' -AND schema_name != 'information_schema' -SQL, - ); - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getSchemaSearchPaths() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4821', - 'PostgreSQLSchemaManager::getSchemaSearchPaths() is deprecated.', - ); - - $params = $this->_conn->getParams(); - - $searchPaths = $this->_conn->fetchOne('SHOW search_path'); - assert($searchPaths !== false); - - $schema = explode(',', $searchPaths); - - if (isset($params['user'])) { - $schema = str_replace('"$user"', $params['user'], $schema); - } - - return array_map('trim', $schema); - } - - /** - * Gets names of all existing schemas in the current users search path. - * - * This is a PostgreSQL only function. - * - * @internal The method should be only used from within the PostgreSQLSchemaManager class hierarchy. - * - * @return string[] - * - * @throws Exception - */ - public function getExistingSchemaSearchPaths() - { - if ($this->existingSchemaPaths === null) { - $this->determineExistingSchemaSearchPaths(); - } - - assert($this->existingSchemaPaths !== null); - - return $this->existingSchemaPaths; - } - - /** - * Returns the name of the current schema. - * - * @return string|null - * - * @throws Exception - */ - protected function getCurrentSchema() - { - $schemas = $this->getExistingSchemaSearchPaths(); - - return array_shift($schemas); - } - - /** - * Sets or resets the order of the existing schemas in the current search path of the user. - * - * This is a PostgreSQL only function. - * - * @internal The method should be only used from within the PostgreSQLSchemaManager class hierarchy. - * - * @return void - * - * @throws Exception - */ - public function determineExistingSchemaSearchPaths() - { - $names = $this->listSchemaNames(); - $paths = $this->getSchemaSearchPaths(); - - $this->existingSchemaPaths = array_filter($paths, static function ($v) use ($names): bool { - return in_array($v, $names, true); - }); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeyDefinition($tableForeignKey) - { - $onUpdate = null; - $onDelete = null; - - if ( - preg_match( - '(ON UPDATE ([a-zA-Z0-9]+( (NULL|ACTION|DEFAULT))?))', - $tableForeignKey['condef'], - $match, - ) === 1 - ) { - $onUpdate = $match[1]; - } - - if ( - preg_match( - '(ON DELETE ([a-zA-Z0-9]+( (NULL|ACTION|DEFAULT))?))', - $tableForeignKey['condef'], - $match, - ) === 1 - ) { - $onDelete = $match[1]; - } - - $result = preg_match('/FOREIGN KEY \((.+)\) REFERENCES (.+)\((.+)\)/', $tableForeignKey['condef'], $values); - assert($result === 1); - - // PostgreSQL returns identifiers that are keywords with quotes, we need them later, don't get - // the idea to trim them here. - $localColumns = array_map('trim', explode(',', $values[1])); - $foreignColumns = array_map('trim', explode(',', $values[3])); - $foreignTable = $values[2]; - - return new ForeignKeyConstraint( - $localColumns, - $foreignTable, - $foreignColumns, - $tableForeignKey['conname'], - ['onUpdate' => $onUpdate, 'onDelete' => $onDelete], - ); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableViewDefinition($view) - { - return new View($view['schemaname'] . '.' . $view['viewname'], $view['definition']); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableDefinition($table) - { - $currentSchema = $this->getCurrentSchema(); - - if ($table['schema_name'] === $currentSchema) { - return $table['table_name']; - } - - return $table['schema_name'] . '.' . $table['table_name']; - } - - /** - * {@inheritDoc} - * - * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html - */ - protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) - { - $buffer = []; - foreach ($tableIndexes as $row) { - $colNumbers = array_map('intval', explode(' ', $row['indkey'])); - $columnNameSql = sprintf( - 'SELECT attnum, attname FROM pg_attribute WHERE attrelid=%d AND attnum IN (%s) ORDER BY attnum ASC', - $row['indrelid'], - implode(' ,', $colNumbers), - ); - - $indexColumns = $this->_conn->fetchAllAssociative($columnNameSql); - - // required for getting the order of the columns right. - foreach ($colNumbers as $colNum) { - foreach ($indexColumns as $colRow) { - if ($colNum !== $colRow['attnum']) { - continue; - } - - $buffer[] = [ - 'key_name' => $row['relname'], - 'column_name' => trim($colRow['attname']), - 'non_unique' => ! $row['indisunique'], - 'primary' => $row['indisprimary'], - 'where' => $row['where'], - ]; - } - } - } - - return parent::_getPortableTableIndexesList($buffer, $tableName); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableDatabaseDefinition($database) - { - return $database['datname']; - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see listSchemaNames()} instead. - */ - protected function getPortableNamespaceDefinition(array $namespace) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'PostgreSQLSchemaManager::getPortableNamespaceDefinition() is deprecated,' - . ' use PostgreSQLSchemaManager::listSchemaNames() instead.', - ); - - return $namespace['nspname']; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableSequenceDefinition($sequence) - { - if ($sequence['schemaname'] !== 'public') { - $sequenceName = $sequence['schemaname'] . '.' . $sequence['relname']; - } else { - $sequenceName = $sequence['relname']; - } - - return new Sequence($sequenceName, (int) $sequence['increment_by'], (int) $sequence['min_value']); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableColumnDefinition($tableColumn) - { - $tableColumn = array_change_key_case($tableColumn, CASE_LOWER); - - if (strtolower($tableColumn['type']) === 'varchar' || strtolower($tableColumn['type']) === 'bpchar') { - // get length from varchar definition - $length = preg_replace('~.*\(([0-9]*)\).*~', '$1', $tableColumn['complete_type']); - $tableColumn['length'] = $length; - } - - $matches = []; - - $autoincrement = false; - - if ( - $tableColumn['default'] !== null - && preg_match("/^nextval\('(.*)'(::.*)?\)$/", $tableColumn['default'], $matches) === 1 - ) { - $tableColumn['sequence'] = $matches[1]; - $tableColumn['default'] = null; - $autoincrement = true; - } - - if ($tableColumn['default'] !== null) { - if (preg_match("/^['(](.*)[')]::/", $tableColumn['default'], $matches) === 1) { - $tableColumn['default'] = $matches[1]; - } elseif (preg_match('/^NULL::/', $tableColumn['default']) === 1) { - $tableColumn['default'] = null; - } - } - - $length = $tableColumn['length'] ?? null; - if ($length === '-1' && isset($tableColumn['atttypmod'])) { - $length = $tableColumn['atttypmod'] - 4; - } - - if ((int) $length <= 0) { - $length = null; - } - - $fixed = null; - - if (! isset($tableColumn['name'])) { - $tableColumn['name'] = ''; - } - - $precision = null; - $scale = null; - $jsonb = null; - - $dbType = strtolower($tableColumn['type']); - if ( - $tableColumn['domain_type'] !== null - && $tableColumn['domain_type'] !== '' - && ! $this->_platform->hasDoctrineTypeMappingFor($tableColumn['type']) - ) { - $dbType = strtolower($tableColumn['domain_type']); - $tableColumn['complete_type'] = $tableColumn['domain_complete_type']; - } - - $type = $this->_platform->getDoctrineTypeMapping($dbType); - $type = $this->extractDoctrineTypeFromComment($tableColumn['comment'], $type); - $tableColumn['comment'] = $this->removeDoctrineTypeFromComment($tableColumn['comment'], $type); - - switch ($dbType) { - case 'smallint': - case 'int2': - $tableColumn['default'] = $this->fixVersion94NegativeNumericDefaultValue($tableColumn['default']); - $length = null; - break; - - case 'int': - case 'int4': - case 'integer': - $tableColumn['default'] = $this->fixVersion94NegativeNumericDefaultValue($tableColumn['default']); - $length = null; - break; - - case 'bigint': - case 'int8': - $tableColumn['default'] = $this->fixVersion94NegativeNumericDefaultValue($tableColumn['default']); - $length = null; - break; - - case 'bool': - case 'boolean': - if ($tableColumn['default'] === 'true') { - $tableColumn['default'] = true; - } - - if ($tableColumn['default'] === 'false') { - $tableColumn['default'] = false; - } - - $length = null; - break; - - case 'json': - case 'text': - case '_varchar': - case 'varchar': - $tableColumn['default'] = $this->parseDefaultExpression($tableColumn['default']); - $fixed = false; - break; - case 'interval': - $fixed = false; - break; - - case 'char': - case 'bpchar': - $fixed = true; - break; - - case 'float': - case 'float4': - case 'float8': - case 'double': - case 'double precision': - case 'real': - case 'decimal': - case 'money': - case 'numeric': - $tableColumn['default'] = $this->fixVersion94NegativeNumericDefaultValue($tableColumn['default']); - - if ( - preg_match( - '([A-Za-z]+\(([0-9]+),([0-9]+)\))', - $tableColumn['complete_type'], - $match, - ) === 1 - ) { - $precision = $match[1]; - $scale = $match[2]; - $length = null; - } - - break; - - case 'year': - $length = null; - break; - - // PostgreSQL 9.4+ only - case 'jsonb': - $jsonb = true; - break; - } - - if ( - $tableColumn['default'] !== null && preg_match( - "('([^']+)'::)", - $tableColumn['default'], - $match, - ) === 1 - ) { - $tableColumn['default'] = $match[1]; - } - - $options = [ - 'length' => $length, - 'notnull' => (bool) $tableColumn['isnotnull'], - 'default' => $tableColumn['default'], - 'precision' => $precision, - 'scale' => $scale, - 'fixed' => $fixed, - 'autoincrement' => $autoincrement, - 'comment' => isset($tableColumn['comment']) && $tableColumn['comment'] !== '' - ? $tableColumn['comment'] - : null, - ]; - - $column = new Column($tableColumn['field'], Type::getType($type), $options); - - if (! empty($tableColumn['collation'])) { - $column->setPlatformOption('collation', $tableColumn['collation']); - } - - if ($column->getType()->getName() === Types::JSON) { - if (! $column->getType() instanceof JsonType) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5049', - <<<'DEPRECATION' - %s not extending %s while being named %s is deprecated, - and will lead to jsonb never to being used in 4.0., - DEPRECATION, - get_class($column->getType()), - JsonType::class, - Types::JSON, - ); - } - - $column->setPlatformOption('jsonb', $jsonb); - } - - return $column; - } - - /** - * PostgreSQL 9.4 puts parentheses around negative numeric default values that need to be stripped eventually. - * - * @param mixed $defaultValue - * - * @return mixed - */ - private function fixVersion94NegativeNumericDefaultValue($defaultValue) - { - if ($defaultValue !== null && strpos($defaultValue, '(') === 0) { - return trim($defaultValue, '()'); - } - - return $defaultValue; - } - - /** - * Parses a default value expression as given by PostgreSQL - */ - private function parseDefaultExpression(?string $default): ?string - { - if ($default === null) { - return $default; - } - - return str_replace("''", "'", $default); - } - - protected function selectTableNames(string $databaseName): Result - { - $sql = <<<'SQL' -SELECT quote_ident(table_name) AS table_name, - table_schema AS schema_name -FROM information_schema.tables -WHERE table_catalog = ? - AND table_schema NOT LIKE 'pg\_%' - AND table_schema != 'information_schema' - AND table_name != 'geometry_columns' - AND table_name != 'spatial_ref_sys' - AND table_type = 'BASE TABLE' -SQL; - - return $this->_conn->executeQuery($sql, [$databaseName]); - } - - protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' c.relname AS table_name, n.nspname AS schema_name,'; - } - - $sql .= sprintf(<<<'SQL' - a.attnum, - quote_ident(a.attname) AS field, - t.typname AS type, - format_type(a.atttypid, a.atttypmod) AS complete_type, - (SELECT tc.collcollate FROM pg_catalog.pg_collation tc WHERE tc.oid = a.attcollation) AS collation, - (SELECT t1.typname FROM pg_catalog.pg_type t1 WHERE t1.oid = t.typbasetype) AS domain_type, - (SELECT format_type(t2.typbasetype, t2.typtypmod) FROM - pg_catalog.pg_type t2 WHERE t2.typtype = 'd' AND t2.oid = a.atttypid) AS domain_complete_type, - a.attnotnull AS isnotnull, - (SELECT 't' - FROM pg_index - WHERE c.oid = pg_index.indrelid - AND pg_index.indkey[0] = a.attnum - AND pg_index.indisprimary = 't' - ) AS pri, - (%s) AS default, - (SELECT pg_description.description - FROM pg_description WHERE pg_description.objoid = c.oid AND a.attnum = pg_description.objsubid - ) AS comment - FROM pg_attribute a - INNER JOIN pg_class c - ON c.oid = a.attrelid - INNER JOIN pg_type t - ON t.oid = a.atttypid - INNER JOIN pg_namespace n - ON n.oid = c.relnamespace - LEFT JOIN pg_depend d - ON d.objid = c.oid - AND d.deptype = 'e' - AND d.classid = (SELECT oid FROM pg_class WHERE relname = 'pg_class') -SQL, $this->_platform->getDefaultColumnValueSQLSnippet()); - - $conditions = array_merge([ - 'a.attnum > 0', - "c.relkind = 'r'", - 'd.refobjid IS NULL', - ], $this->buildQueryConditions($tableName)); - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY a.attnum'; - - return $this->_conn->executeQuery($sql); - } - - protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' tc.relname AS table_name, tn.nspname AS schema_name,'; - } - - $sql .= <<<'SQL' - quote_ident(ic.relname) AS relname, - i.indisunique, - i.indisprimary, - i.indkey, - i.indrelid, - pg_get_expr(indpred, indrelid) AS "where" - FROM pg_index i - JOIN pg_class AS tc ON tc.oid = i.indrelid - JOIN pg_namespace tn ON tn.oid = tc.relnamespace - JOIN pg_class AS ic ON ic.oid = i.indexrelid - WHERE ic.oid IN ( - SELECT indexrelid - FROM pg_index i, pg_class c, pg_namespace n -SQL; - - $conditions = array_merge([ - 'c.oid = i.indrelid', - 'c.relnamespace = n.oid', - ], $this->buildQueryConditions($tableName)); - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ')'; - - return $this->_conn->executeQuery($sql); - } - - protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' tc.relname AS table_name, tn.nspname AS schema_name,'; - } - - $sql .= <<<'SQL' - quote_ident(r.conname) as conname, - pg_get_constraintdef(r.oid, true) as condef - FROM pg_constraint r - JOIN pg_class AS tc ON tc.oid = r.conrelid - JOIN pg_namespace tn ON tn.oid = tc.relnamespace - WHERE r.conrelid IN - ( - SELECT c.oid - FROM pg_class c, pg_namespace n -SQL; - - $conditions = array_merge(['n.oid = c.relnamespace'], $this->buildQueryConditions($tableName)); - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ") AND r.contype = 'f'"; - - return $this->_conn->executeQuery($sql); - } - - /** - * {@inheritDoc} - */ - protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array - { - $sql = <<<'SQL' -SELECT c.relname, - CASE c.relpersistence WHEN 'u' THEN true ELSE false END as unlogged, - obj_description(c.oid, 'pg_class') AS comment -FROM pg_class c - INNER JOIN pg_namespace n - ON n.oid = c.relnamespace -SQL; - - $conditions = array_merge(["c.relkind = 'r'"], $this->buildQueryConditions($tableName)); - - $sql .= ' WHERE ' . implode(' AND ', $conditions); - - return $this->_conn->fetchAllAssociativeIndexed($sql); - } - - /** - * @param string|null $tableName - * - * @return list - */ - private function buildQueryConditions($tableName): array - { - $conditions = []; - - if ($tableName !== null) { - if (strpos($tableName, '.') !== false) { - [$schemaName, $tableName] = explode('.', $tableName); - $conditions[] = 'n.nspname = ' . $this->_platform->quoteStringLiteral($schemaName); - } else { - $conditions[] = 'n.nspname = ANY(current_schemas(false))'; - } - - $identifier = new Identifier($tableName); - $conditions[] = 'c.relname = ' . $this->_platform->quoteStringLiteral($identifier->getName()); - } - - $conditions[] = "n.nspname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')"; - - return $conditions; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php b/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php deleted file mode 100644 index acef511..0000000 --- a/vendor/doctrine/dbal/src/Schema/SQLServerSchemaManager.php +++ /dev/null @@ -1,611 +0,0 @@ - - */ -class SQLServerSchemaManager extends AbstractSchemaManager -{ - private ?string $databaseCollation = null; - - /** - * {@inheritDoc} - */ - public function listTableNames() - { - return $this->doListTableNames(); - } - - /** - * {@inheritDoc} - */ - public function listTables() - { - return $this->doListTables(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see introspectTable()} instead. - */ - public function listTableDetails($name) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5595', - '%s is deprecated. Use introspectTable() instead.', - __METHOD__, - ); - - return $this->doListTableDetails($name); - } - - /** - * {@inheritDoc} - */ - public function listTableColumns($table, $database = null) - { - return $this->doListTableColumns($table, $database); - } - - /** - * {@inheritDoc} - */ - public function listTableIndexes($table) - { - return $this->doListTableIndexes($table); - } - - /** - * {@inheritDoc} - */ - public function listTableForeignKeys($table, $database = null) - { - return $this->doListTableForeignKeys($table, $database); - } - - /** - * {@inheritDoc} - */ - public function listSchemaNames(): array - { - return $this->_conn->fetchFirstColumn( - <<<'SQL' -SELECT name -FROM sys.schemas -WHERE name NOT IN('guest', 'INFORMATION_SCHEMA', 'sys') -SQL, - ); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableSequenceDefinition($sequence) - { - return new Sequence($sequence['name'], (int) $sequence['increment'], (int) $sequence['start_value']); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableColumnDefinition($tableColumn) - { - $dbType = strtok($tableColumn['type'], '(), '); - assert(is_string($dbType)); - - $fixed = null; - $length = (int) $tableColumn['length']; - $default = $tableColumn['default']; - - if (! isset($tableColumn['name'])) { - $tableColumn['name'] = ''; - } - - if ($default !== null) { - $default = $this->parseDefaultExpression($default); - } - - switch ($dbType) { - case 'nchar': - case 'ntext': - // Unicode data requires 2 bytes per character - $length /= 2; - break; - - case 'nvarchar': - if ($length === -1) { - break; - } - - // Unicode data requires 2 bytes per character - $length /= 2; - break; - - case 'varchar': - // TEXT type is returned as VARCHAR(MAX) with a length of -1 - if ($length === -1) { - $dbType = 'text'; - } - - break; - - case 'varbinary': - if ($length === -1) { - $dbType = 'blob'; - } - - break; - } - - if ($dbType === 'char' || $dbType === 'nchar' || $dbType === 'binary') { - $fixed = true; - } - - $type = $this->_platform->getDoctrineTypeMapping($dbType); - $type = $this->extractDoctrineTypeFromComment($tableColumn['comment'], $type); - $tableColumn['comment'] = $this->removeDoctrineTypeFromComment($tableColumn['comment'], $type); - - $options = [ - 'unsigned' => false, - 'fixed' => (bool) $fixed, - 'default' => $default, - 'notnull' => (bool) $tableColumn['notnull'], - 'scale' => $tableColumn['scale'], - 'precision' => $tableColumn['precision'], - 'autoincrement' => (bool) $tableColumn['autoincrement'], - 'comment' => $tableColumn['comment'] !== '' ? $tableColumn['comment'] : null, - ]; - - if ($length !== 0 && ($type === 'text' || $type === 'string' || $type === 'binary')) { - $options['length'] = $length; - } - - $column = new Column($tableColumn['name'], Type::getType($type), $options); - - if (isset($tableColumn['collation']) && $tableColumn['collation'] !== 'NULL') { - $column->setPlatformOption('collation', $tableColumn['collation']); - } - - return $column; - } - - private function parseDefaultExpression(string $value): ?string - { - while (preg_match('/^\((.*)\)$/s', $value, $matches)) { - $value = $matches[1]; - } - - if ($value === 'NULL') { - return null; - } - - if (preg_match('/^\'(.*)\'$/s', $value, $matches) === 1) { - $value = str_replace("''", "'", $matches[1]); - } - - if ($value === 'getdate()') { - return $this->_platform->getCurrentTimestampSQL(); - } - - return $value; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeysList($tableForeignKeys) - { - $foreignKeys = []; - - foreach ($tableForeignKeys as $tableForeignKey) { - $name = $tableForeignKey['ForeignKey']; - - if (! isset($foreignKeys[$name])) { - $foreignKeys[$name] = [ - 'local_columns' => [$tableForeignKey['ColumnName']], - 'foreign_table' => $tableForeignKey['ReferenceTableName'], - 'foreign_columns' => [$tableForeignKey['ReferenceColumnName']], - 'name' => $name, - 'options' => [ - 'onUpdate' => str_replace('_', ' ', $tableForeignKey['update_referential_action_desc']), - 'onDelete' => str_replace('_', ' ', $tableForeignKey['delete_referential_action_desc']), - ], - ]; - } else { - $foreignKeys[$name]['local_columns'][] = $tableForeignKey['ColumnName']; - $foreignKeys[$name]['foreign_columns'][] = $tableForeignKey['ReferenceColumnName']; - } - } - - return parent::_getPortableTableForeignKeysList($foreignKeys); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) - { - foreach ($tableIndexes as &$tableIndex) { - $tableIndex['non_unique'] = (bool) $tableIndex['non_unique']; - $tableIndex['primary'] = (bool) $tableIndex['primary']; - $tableIndex['flags'] = $tableIndex['flags'] ? [$tableIndex['flags']] : null; - } - - return parent::_getPortableTableIndexesList($tableIndexes, $tableName); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeyDefinition($tableForeignKey) - { - return new ForeignKeyConstraint( - $tableForeignKey['local_columns'], - $tableForeignKey['foreign_table'], - $tableForeignKey['foreign_columns'], - $tableForeignKey['name'], - $tableForeignKey['options'], - ); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableDefinition($table) - { - if ($table['schema_name'] !== 'dbo') { - return $table['schema_name'] . '.' . $table['table_name']; - } - - return $table['table_name']; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableDatabaseDefinition($database) - { - return $database['name']; - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see listSchemaNames()} instead. - */ - protected function getPortableNamespaceDefinition(array $namespace) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4503', - 'SQLServerSchemaManager::getPortableNamespaceDefinition() is deprecated,' - . ' use SQLServerSchemaManager::listSchemaNames() instead.', - ); - - return $namespace['name']; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableViewDefinition($view) - { - // @todo - return new View($view['name'], $view['definition']); - } - - /** - * {@inheritDoc} - */ - public function alterTable(TableDiff $tableDiff) - { - $droppedColumns = $tableDiff->getDroppedColumns(); - - if (count($droppedColumns) > 0) { - $tableName = ($tableDiff->getOldTable() ?? $tableDiff->getName($this->_platform))->getName(); - - foreach ($droppedColumns as $col) { - foreach ($this->getColumnConstraints($tableName, $col->getName()) as $constraint) { - $this->_conn->executeStatement( - sprintf( - 'ALTER TABLE %s DROP CONSTRAINT %s', - $tableName, - $constraint, - ), - ); - } - } - } - - parent::alterTable($tableDiff); - } - - /** - * Returns the names of the constraints for a given column. - * - * @return iterable - * - * @throws Exception - */ - private function getColumnConstraints(string $table, string $column): iterable - { - return $this->_conn->iterateColumn( - <<<'SQL' -SELECT o.name -FROM sys.objects o - INNER JOIN sys.objects t - ON t.object_id = o.parent_object_id - AND t.type = 'U' - INNER JOIN sys.default_constraints dc - ON dc.object_id = o.object_id - INNER JOIN sys.columns c - ON c.column_id = dc.parent_column_id - AND c.object_id = t.object_id -WHERE t.name = ? - AND c.name = ? -SQL - , - [$table, $column], - ); - } - - /** @throws Exception */ - public function createComparator(): Comparator - { - return new SQLServer\Comparator($this->_platform, $this->getDatabaseCollation()); - } - - /** @throws Exception */ - private function getDatabaseCollation(): string - { - if ($this->databaseCollation === null) { - $databaseCollation = $this->_conn->fetchOne( - 'SELECT collation_name FROM sys.databases WHERE name = ' - . $this->_platform->getCurrentDatabaseExpression(), - ); - - // a database is always selected, even if omitted in the connection parameters - assert(is_string($databaseCollation)); - - $this->databaseCollation = $databaseCollation; - } - - return $this->databaseCollation; - } - - protected function selectTableNames(string $databaseName): Result - { - // The "sysdiagrams" table must be ignored as it's internal SQL Server table for Database Diagrams - $sql = <<<'SQL' -SELECT name AS table_name, - SCHEMA_NAME(schema_id) AS schema_name -FROM sys.objects -WHERE type = 'U' - AND name != 'sysdiagrams' -ORDER BY name -SQL; - - return $this->_conn->executeQuery($sql); - } - - protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' obj.name AS table_name, scm.name AS schema_name,'; - } - - $sql .= <<<'SQL' - col.name, - type.name AS type, - col.max_length AS length, - ~col.is_nullable AS notnull, - def.definition AS [default], - col.scale, - col.precision, - col.is_identity AS autoincrement, - col.collation_name AS collation, - -- CAST avoids driver error for sql_variant type - CAST(prop.value AS NVARCHAR(MAX)) AS comment - FROM sys.columns AS col - JOIN sys.types AS type - ON col.user_type_id = type.user_type_id - JOIN sys.objects AS obj - ON col.object_id = obj.object_id - JOIN sys.schemas AS scm - ON obj.schema_id = scm.schema_id - LEFT JOIN sys.default_constraints def - ON col.default_object_id = def.object_id - AND col.object_id = def.parent_object_id - LEFT JOIN sys.extended_properties AS prop - ON obj.object_id = prop.major_id - AND col.column_id = prop.minor_id - AND prop.name = 'MS_Description' -SQL; - - // The "sysdiagrams" table must be ignored as it's internal SQL Server table for Database Diagrams - $conditions = ["obj.type = 'U'", "obj.name != 'sysdiagrams'"]; - $params = []; - - if ($tableName !== null) { - $conditions[] = $this->getTableWhereClause($tableName, 'scm.name', 'obj.name'); - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions); - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' tbl.name AS table_name, scm.name AS schema_name,'; - } - - $sql .= <<<'SQL' - idx.name AS key_name, - col.name AS column_name, - ~idx.is_unique AS non_unique, - idx.is_primary_key AS [primary], - CASE idx.type - WHEN '1' THEN 'clustered' - WHEN '2' THEN 'nonclustered' - ELSE NULL - END AS flags - FROM sys.tables AS tbl - JOIN sys.schemas AS scm - ON tbl.schema_id = scm.schema_id - JOIN sys.indexes AS idx - ON tbl.object_id = idx.object_id - JOIN sys.index_columns AS idxcol - ON idx.object_id = idxcol.object_id - AND idx.index_id = idxcol.index_id - JOIN sys.columns AS col - ON idxcol.object_id = col.object_id - AND idxcol.column_id = col.column_id -SQL; - - $conditions = []; - $params = []; - - if ($tableName !== null) { - $conditions[] = $this->getTableWhereClause($tableName, 'scm.name', 'tbl.name'); - $sql .= ' WHERE ' . implode(' AND ', $conditions); - } - - $sql .= ' ORDER BY idx.index_id, idxcol.key_ordinal'; - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = 'SELECT'; - - if ($tableName === null) { - $sql .= ' OBJECT_NAME (f.parent_object_id) AS table_name, SCHEMA_NAME(f.schema_id) AS schema_name,'; - } - - $sql .= <<<'SQL' - f.name AS ForeignKey, - SCHEMA_NAME (f.SCHEMA_ID) AS SchemaName, - OBJECT_NAME (f.parent_object_id) AS TableName, - COL_NAME (fc.parent_object_id,fc.parent_column_id) AS ColumnName, - SCHEMA_NAME (o.SCHEMA_ID) ReferenceSchemaName, - OBJECT_NAME (f.referenced_object_id) AS ReferenceTableName, - COL_NAME(fc.referenced_object_id,fc.referenced_column_id) AS ReferenceColumnName, - f.delete_referential_action_desc, - f.update_referential_action_desc - FROM sys.foreign_keys AS f - INNER JOIN sys.foreign_key_columns AS fc - INNER JOIN sys.objects AS o ON o.OBJECT_ID = fc.referenced_object_id - ON f.OBJECT_ID = fc.constraint_object_id -SQL; - - $conditions = []; - $params = []; - - if ($tableName !== null) { - $conditions[] = $this->getTableWhereClause( - $tableName, - 'SCHEMA_NAME(f.schema_id)', - 'OBJECT_NAME(f.parent_object_id)', - ); - - $sql .= ' WHERE ' . implode(' AND ', $conditions); - } - - $sql .= ' ORDER BY fc.constraint_column_id'; - - return $this->_conn->executeQuery($sql, $params); - } - - /** - * {@inheritDoc} - */ - protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array - { - $sql = <<<'SQL' - SELECT - tbl.name, - p.value AS [table_comment] - FROM - sys.tables AS tbl - INNER JOIN sys.extended_properties AS p ON p.major_id=tbl.object_id AND p.minor_id=0 AND p.class=1 -SQL; - - $conditions = ["SCHEMA_NAME(tbl.schema_id) = N'dbo'", "p.name = N'MS_Description'"]; - $params = []; - - if ($tableName !== null) { - $conditions[] = "tbl.name = N'" . $tableName . "'"; - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions); - - /** @var array> $metadata */ - $metadata = $this->_conn->executeQuery($sql, $params) - ->fetchAllAssociativeIndexed(); - - $tableOptions = []; - foreach ($metadata as $table => $data) { - $data = array_change_key_case($data, CASE_LOWER); - - $tableOptions[$table] = [ - 'comment' => $data['table_comment'], - ]; - } - - return $tableOptions; - } - - /** - * Returns the where clause to filter schema and table name in a query. - * - * @param string $table The full qualified name of the table. - * @param string $schemaColumn The name of the column to compare the schema to in the where clause. - * @param string $tableColumn The name of the column to compare the table to in the where clause. - */ - private function getTableWhereClause($table, $schemaColumn, $tableColumn): string - { - if (strpos($table, '.') !== false) { - [$schema, $table] = explode('.', $table); - $schema = $this->_platform->quoteStringLiteral($schema); - $table = $this->_platform->quoteStringLiteral($table); - } else { - $schema = 'SCHEMA_NAME()'; - $table = $this->_platform->quoteStringLiteral($table); - } - - return sprintf('(%s = %s AND %s = %s)', $tableColumn, $table, $schemaColumn, $schema); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Schema.php b/vendor/doctrine/dbal/src/Schema/Schema.php deleted file mode 100644 index 703c83c..0000000 --- a/vendor/doctrine/dbal/src/Schema/Schema.php +++ /dev/null @@ -1,523 +0,0 @@ -_schemaConfig = $schemaConfig; - $this->_setName($schemaConfig->getName() ?? 'public'); - - foreach ($namespaces as $namespace) { - $this->createNamespace($namespace); - } - - foreach ($tables as $table) { - $this->_addTable($table); - } - - foreach ($sequences as $sequence) { - $this->_addSequence($sequence); - } - } - - /** - * @deprecated - * - * @return bool - */ - public function hasExplicitForeignKeyIndexes() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4822', - 'Schema::hasExplicitForeignKeyIndexes() is deprecated.', - ); - - return $this->_schemaConfig->hasExplicitForeignKeyIndexes(); - } - - /** - * @return void - * - * @throws SchemaException - */ - protected function _addTable(Table $table) - { - $namespaceName = $table->getNamespaceName(); - $tableName = $this->normalizeName($table); - - if (isset($this->_tables[$tableName])) { - throw SchemaException::tableAlreadyExists($tableName); - } - - if ( - $namespaceName !== null - && ! $table->isInDefaultNamespace($this->getName()) - && ! $this->hasNamespace($namespaceName) - ) { - $this->createNamespace($namespaceName); - } - - $this->_tables[$tableName] = $table; - $table->setSchemaConfig($this->_schemaConfig); - } - - /** - * @return void - * - * @throws SchemaException - */ - protected function _addSequence(Sequence $sequence) - { - $namespaceName = $sequence->getNamespaceName(); - $seqName = $this->normalizeName($sequence); - - if (isset($this->_sequences[$seqName])) { - throw SchemaException::sequenceAlreadyExists($seqName); - } - - if ( - $namespaceName !== null - && ! $sequence->isInDefaultNamespace($this->getName()) - && ! $this->hasNamespace($namespaceName) - ) { - $this->createNamespace($namespaceName); - } - - $this->_sequences[$seqName] = $sequence; - } - - /** - * Returns the namespaces of this schema. - * - * @return string[] A list of namespace names. - */ - public function getNamespaces() - { - return $this->namespaces; - } - - /** - * Gets all tables of this schema. - * - * @return Table[] - */ - public function getTables() - { - return $this->_tables; - } - - /** - * @param string $name - * - * @return Table - * - * @throws SchemaException - */ - public function getTable($name) - { - $name = $this->getFullQualifiedAssetName($name); - if (! isset($this->_tables[$name])) { - throw SchemaException::tableDoesNotExist($name); - } - - return $this->_tables[$name]; - } - - /** @param string $name */ - private function getFullQualifiedAssetName($name): string - { - $name = $this->getUnquotedAssetName($name); - - if (strpos($name, '.') === false) { - $name = $this->getName() . '.' . $name; - } - - return strtolower($name); - } - - private function normalizeName(AbstractAsset $asset): string - { - return $asset->getFullQualifiedName($this->getName()); - } - - /** - * Returns the unquoted representation of a given asset name. - * - * @param string $assetName Quoted or unquoted representation of an asset name. - */ - private function getUnquotedAssetName($assetName): string - { - if ($this->isIdentifierQuoted($assetName)) { - return $this->trimQuotes($assetName); - } - - return $assetName; - } - - /** - * Does this schema have a namespace with the given name? - * - * @param string $name - * - * @return bool - */ - public function hasNamespace($name) - { - $name = strtolower($this->getUnquotedAssetName($name)); - - return isset($this->namespaces[$name]); - } - - /** - * Does this schema have a table with the given name? - * - * @param string $name - * - * @return bool - */ - public function hasTable($name) - { - $name = $this->getFullQualifiedAssetName($name); - - return isset($this->_tables[$name]); - } - - /** - * Gets all table names, prefixed with a schema name, even the default one if present. - * - * @deprecated Use {@see getTables()} and {@see Table::getName()} instead. - * - * @return string[] - */ - public function getTableNames() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4800', - 'Schema::getTableNames() is deprecated.' - . ' Use Schema::getTables() and Table::getName() instead.', - __METHOD__, - ); - - return array_keys($this->_tables); - } - - /** - * @param string $name - * - * @return bool - */ - public function hasSequence($name) - { - $name = $this->getFullQualifiedAssetName($name); - - return isset($this->_sequences[$name]); - } - - /** - * @param string $name - * - * @return Sequence - * - * @throws SchemaException - */ - public function getSequence($name) - { - $name = $this->getFullQualifiedAssetName($name); - if (! $this->hasSequence($name)) { - throw SchemaException::sequenceDoesNotExist($name); - } - - return $this->_sequences[$name]; - } - - /** @return Sequence[] */ - public function getSequences() - { - return $this->_sequences; - } - - /** - * Creates a new namespace. - * - * @param string $name The name of the namespace to create. - * - * @return Schema This schema instance. - * - * @throws SchemaException - */ - public function createNamespace($name) - { - $unquotedName = strtolower($this->getUnquotedAssetName($name)); - - if (isset($this->namespaces[$unquotedName])) { - throw SchemaException::namespaceAlreadyExists($unquotedName); - } - - $this->namespaces[$unquotedName] = $name; - - return $this; - } - - /** - * Creates a new table. - * - * @param string $name - * - * @return Table - * - * @throws SchemaException - */ - public function createTable($name) - { - $table = new Table($name); - $this->_addTable($table); - - foreach ($this->_schemaConfig->getDefaultTableOptions() as $option => $value) { - $table->addOption($option, $value); - } - - return $table; - } - - /** - * Renames a table. - * - * @param string $oldName - * @param string $newName - * - * @return Schema - * - * @throws SchemaException - */ - public function renameTable($oldName, $newName) - { - $table = $this->getTable($oldName); - $table->_setName($newName); - - $this->dropTable($oldName); - $this->_addTable($table); - - return $this; - } - - /** - * Drops a table from the schema. - * - * @param string $name - * - * @return Schema - * - * @throws SchemaException - */ - public function dropTable($name) - { - $name = $this->getFullQualifiedAssetName($name); - $this->getTable($name); - unset($this->_tables[$name]); - - return $this; - } - - /** - * Creates a new sequence. - * - * @param string $name - * @param int $allocationSize - * @param int $initialValue - * - * @return Sequence - * - * @throws SchemaException - */ - public function createSequence($name, $allocationSize = 1, $initialValue = 1) - { - $seq = new Sequence($name, $allocationSize, $initialValue); - $this->_addSequence($seq); - - return $seq; - } - - /** - * @param string $name - * - * @return Schema - */ - public function dropSequence($name) - { - $name = $this->getFullQualifiedAssetName($name); - unset($this->_sequences[$name]); - - return $this; - } - - /** - * Returns an array of necessary SQL queries to create the schema on the given platform. - * - * @return list - * - * @throws Exception - */ - public function toSql(AbstractPlatform $platform) - { - $builder = new CreateSchemaObjectsSQLBuilder($platform); - - return $builder->buildSQL($this); - } - - /** - * Return an array of necessary SQL queries to drop the schema on the given platform. - * - * @return list - * - * @throws Exception - */ - public function toDropSql(AbstractPlatform $platform) - { - $builder = new DropSchemaObjectsSQLBuilder($platform); - - return $builder->buildSQL($this); - } - - /** - * @deprecated - * - * @return string[] - * - * @throws SchemaException - */ - public function getMigrateToSql(Schema $toSchema, AbstractPlatform $platform) - { - $schemaDiff = (new Comparator())->compareSchemas($this, $toSchema); - - return $schemaDiff->toSql($platform); - } - - /** - * @deprecated - * - * @return string[] - * - * @throws SchemaException - */ - public function getMigrateFromSql(Schema $fromSchema, AbstractPlatform $platform) - { - $schemaDiff = (new Comparator())->compareSchemas($fromSchema, $this); - - return $schemaDiff->toSql($platform); - } - - /** - * @deprecated - * - * @return void - */ - public function visit(Visitor $visitor) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5435', - 'Schema::visit() is deprecated.', - ); - - $visitor->acceptSchema($this); - - if ($visitor instanceof NamespaceVisitor) { - foreach ($this->namespaces as $namespace) { - $visitor->acceptNamespace($namespace); - } - } - - foreach ($this->_tables as $table) { - $table->visit($visitor); - } - - foreach ($this->_sequences as $sequence) { - $sequence->visit($visitor); - } - } - - /** - * Cloning a Schema triggers a deep clone of all related assets. - * - * @return void - */ - public function __clone() - { - foreach ($this->_tables as $k => $table) { - $this->_tables[$k] = clone $table; - } - - foreach ($this->_sequences as $k => $sequence) { - $this->_sequences[$k] = clone $sequence; - } - } -} diff --git a/vendor/doctrine/dbal/src/Schema/SchemaConfig.php b/vendor/doctrine/dbal/src/Schema/SchemaConfig.php deleted file mode 100644 index 5e39451..0000000 --- a/vendor/doctrine/dbal/src/Schema/SchemaConfig.php +++ /dev/null @@ -1,120 +0,0 @@ -hasExplicitForeignKeyIndexes; - } - - /** - * @deprecated - * - * @param bool $flag - * - * @return void - */ - public function setExplicitForeignKeyIndexes($flag) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4822', - 'SchemaConfig::setExplicitForeignKeyIndexes() is deprecated.', - ); - - $this->hasExplicitForeignKeyIndexes = (bool) $flag; - } - - /** - * @param int $length - * - * @return void - */ - public function setMaxIdentifierLength($length) - { - $this->maxIdentifierLength = (int) $length; - } - - /** @return int */ - public function getMaxIdentifierLength() - { - return $this->maxIdentifierLength; - } - - /** - * Gets the default namespace of schema objects. - * - * @return string|null - */ - public function getName() - { - return $this->name; - } - - /** - * Sets the default namespace name of schema objects. - * - * @param string $name The value to set. - * - * @return void - */ - public function setName($name) - { - $this->name = $name; - } - - /** - * Gets the default options that are passed to Table instances created with - * Schema#createTable(). - * - * @return mixed[] - */ - public function getDefaultTableOptions() - { - return $this->defaultTableOptions; - } - - /** - * @param mixed[] $defaultTableOptions - * - * @return void - */ - public function setDefaultTableOptions(array $defaultTableOptions) - { - $this->defaultTableOptions = $defaultTableOptions; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/SchemaDiff.php b/vendor/doctrine/dbal/src/Schema/SchemaDiff.php deleted file mode 100644 index a6a8665..0000000 --- a/vendor/doctrine/dbal/src/Schema/SchemaDiff.php +++ /dev/null @@ -1,294 +0,0 @@ - $createdSchemas - * @param array $droppedSchemas - * @param array $createdSequences - * @param array $alteredSequences - * @param array $droppedSequences - */ - public function __construct( - $newTables = [], - $changedTables = [], - $removedTables = [], - ?Schema $fromSchema = null, - $createdSchemas = [], - $droppedSchemas = [], - $createdSequences = [], - $alteredSequences = [], - $droppedSequences = [] - ) { - $this->newTables = $newTables; - - $this->changedTables = array_filter($changedTables, static function (TableDiff $diff): bool { - return ! $diff->isEmpty(); - }); - - $this->removedTables = $removedTables; - $this->fromSchema = $fromSchema; - $this->newNamespaces = $createdSchemas; - $this->removedNamespaces = $droppedSchemas; - $this->newSequences = $createdSequences; - $this->changedSequences = $alteredSequences; - $this->removedSequences = $droppedSequences; - } - - /** @return array */ - public function getCreatedSchemas(): array - { - return $this->newNamespaces; - } - - /** @return array */ - public function getDroppedSchemas(): array - { - return $this->removedNamespaces; - } - - /** @return array
*/ - public function getCreatedTables(): array - { - return $this->newTables; - } - - /** @return array */ - public function getAlteredTables(): array - { - return $this->changedTables; - } - - /** @return array
*/ - public function getDroppedTables(): array - { - return $this->removedTables; - } - - /** @return array */ - public function getCreatedSequences(): array - { - return $this->newSequences; - } - - /** @return array */ - public function getAlteredSequences(): array - { - return $this->changedSequences; - } - - /** @return array */ - public function getDroppedSequences(): array - { - return $this->removedSequences; - } - - /** - * Returns whether the diff is empty (contains no changes). - */ - public function isEmpty(): bool - { - return count($this->newNamespaces) === 0 - && count($this->removedNamespaces) === 0 - && count($this->newTables) === 0 - && count($this->changedTables) === 0 - && count($this->removedTables) === 0 - && count($this->newSequences) === 0 - && count($this->changedSequences) === 0 - && count($this->removedSequences) === 0; - } - - /** - * The to save sql mode ensures that the following things don't happen: - * - * 1. Tables are deleted - * 2. Sequences are deleted - * 3. Foreign Keys which reference tables that would otherwise be deleted. - * - * This way it is ensured that assets are deleted which might not be relevant to the metadata schema at all. - * - * @deprecated - * - * @return list - */ - public function toSaveSql(AbstractPlatform $platform) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5766', - '%s is deprecated.', - __METHOD__, - ); - - return $this->_toSql($platform, true); - } - - /** - * @deprecated Use {@link AbstractPlatform::getAlterSchemaSQL()} instead. - * - * @return list - */ - public function toSql(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5766', - '%s is deprecated. Use AbstractPlatform::getAlterSchemaSQL() instead.', - __METHOD__, - ); - - return $this->_toSql($platform, false); - } - - /** - * @param bool $saveMode - * - * @return list - */ - protected function _toSql(AbstractPlatform $platform, $saveMode = false) - { - $sql = []; - - if ($platform->supportsSchemas()) { - foreach ($this->getCreatedSchemas() as $schema) { - $sql[] = $platform->getCreateSchemaSQL($schema); - } - } - - if ($platform->supportsForeignKeyConstraints() && $saveMode === false) { - foreach ($this->orphanedForeignKeys as $orphanedForeignKey) { - $sql[] = $platform->getDropForeignKeySQL($orphanedForeignKey, $orphanedForeignKey->getLocalTable()); - } - } - - if ($platform->supportsSequences() === true) { - foreach ($this->getAlteredSequences() as $sequence) { - $sql[] = $platform->getAlterSequenceSQL($sequence); - } - - if ($saveMode === false) { - foreach ($this->getDroppedSequences() as $sequence) { - $sql[] = $platform->getDropSequenceSQL($sequence); - } - } - - foreach ($this->getCreatedSequences() as $sequence) { - $sql[] = $platform->getCreateSequenceSQL($sequence); - } - } - - $sql = array_merge($sql, $platform->getCreateTablesSQL($this->getCreatedTables())); - - if ($saveMode === false) { - $sql = array_merge($sql, $platform->getDropTablesSQL($this->getDroppedTables())); - } - - foreach ($this->getAlteredTables() as $tableDiff) { - $sql = array_merge($sql, $platform->getAlterTableSQL($tableDiff)); - } - - return $sql; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/SchemaException.php b/vendor/doctrine/dbal/src/Schema/SchemaException.php deleted file mode 100644 index 4ec091f..0000000 --- a/vendor/doctrine/dbal/src/Schema/SchemaException.php +++ /dev/null @@ -1,204 +0,0 @@ -_setName($name); - $this->setAllocationSize($allocationSize); - $this->setInitialValue($initialValue); - $this->cache = $cache; - } - - /** @return int */ - public function getAllocationSize() - { - return $this->allocationSize; - } - - /** @return int */ - public function getInitialValue() - { - return $this->initialValue; - } - - /** @return int|null */ - public function getCache() - { - return $this->cache; - } - - /** - * @param int $allocationSize - * - * @return Sequence - */ - public function setAllocationSize($allocationSize) - { - if ($allocationSize > 0) { - $this->allocationSize = $allocationSize; - } else { - $this->allocationSize = 1; - } - - return $this; - } - - /** - * @param int $initialValue - * - * @return Sequence - */ - public function setInitialValue($initialValue) - { - if ($initialValue > 0) { - $this->initialValue = $initialValue; - } else { - $this->initialValue = 1; - } - - return $this; - } - - /** - * @param int $cache - * - * @return Sequence - */ - public function setCache($cache) - { - $this->cache = $cache; - - return $this; - } - - /** - * Checks if this sequence is an autoincrement sequence for a given table. - * - * This is used inside the comparator to not report sequences as missing, - * when the "from" schema implicitly creates the sequences. - * - * @return bool - */ - public function isAutoIncrementsFor(Table $table) - { - $primaryKey = $table->getPrimaryKey(); - - if ($primaryKey === null) { - return false; - } - - $pkColumns = $primaryKey->getColumns(); - - if (count($pkColumns) !== 1) { - return false; - } - - $column = $table->getColumn($pkColumns[0]); - - if (! $column->getAutoincrement()) { - return false; - } - - $sequenceName = $this->getShortestName($table->getNamespaceName()); - $tableName = $table->getShortestName($table->getNamespaceName()); - $tableSequenceName = sprintf('%s_%s_seq', $tableName, $column->getShortestName($table->getNamespaceName())); - - return $tableSequenceName === $sequenceName; - } - - /** - * @deprecated - * - * @return void - */ - public function visit(Visitor $visitor) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5435', - 'Sequence::visit() is deprecated.', - ); - - $visitor->acceptSequence($this); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php b/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php deleted file mode 100644 index 0419e93..0000000 --- a/vendor/doctrine/dbal/src/Schema/SqliteSchemaManager.php +++ /dev/null @@ -1,790 +0,0 @@ - - */ -class SqliteSchemaManager extends AbstractSchemaManager -{ - /** - * {@inheritDoc} - */ - public function listTableNames() - { - return $this->doListTableNames(); - } - - /** - * {@inheritDoc} - */ - public function listTables() - { - return $this->doListTables(); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see introspectTable()} instead. - */ - public function listTableDetails($name) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5595', - '%s is deprecated. Use introspectTable() instead.', - __METHOD__, - ); - - return $this->doListTableDetails($name); - } - - /** - * {@inheritDoc} - */ - public function listTableColumns($table, $database = null) - { - return $this->doListTableColumns($table, $database); - } - - /** - * {@inheritDoc} - */ - public function listTableIndexes($table) - { - return $this->doListTableIndexes($table); - } - - /** - * {@inheritDoc} - */ - protected function fetchForeignKeyColumnsByTable(string $databaseName): array - { - $columnsByTable = parent::fetchForeignKeyColumnsByTable($databaseName); - - if (count($columnsByTable) > 0) { - foreach ($columnsByTable as $table => $columns) { - $columnsByTable[$table] = $this->addDetailsToTableForeignKeyColumns($table, $columns); - } - } - - return $columnsByTable; - } - - /** - * {@inheritDoc} - * - * @deprecated Delete the database file using the filesystem. - */ - public function dropDatabase($database) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4963', - 'SqliteSchemaManager::dropDatabase() is deprecated. Delete the database file using the filesystem.', - ); - - if (! file_exists($database)) { - return; - } - - unlink($database); - } - - /** - * {@inheritDoc} - * - * @deprecated The engine will create the database file automatically. - */ - public function createDatabase($database) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4963', - 'SqliteSchemaManager::createDatabase() is deprecated.' - . ' The engine will create the database file automatically.', - ); - - $params = $this->_conn->getParams(); - - $params['path'] = $database; - unset($params['memory']); - - $conn = DriverManager::getConnection($params); - $conn->connect(); - $conn->close(); - } - - /** - * {@inheritDoc} - */ - public function createForeignKey(ForeignKeyConstraint $foreignKey, $table) - { - if (! $table instanceof Table) { - $table = $this->listTableDetails($table); - } - - $this->alterTable(new TableDiff($table->getName(), [], [], [], [], [], [], $table, [$foreignKey])); - } - - /** - * {@inheritDoc} - * - * @deprecated Use {@see dropForeignKey()} and {@see createForeignKey()} instead. - */ - public function dropAndCreateForeignKey(ForeignKeyConstraint $foreignKey, $table) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4897', - 'SqliteSchemaManager::dropAndCreateForeignKey() is deprecated.' - . ' Use SqliteSchemaManager::dropForeignKey() and SqliteSchemaManager::createForeignKey() instead.', - ); - - if (! $table instanceof Table) { - $table = $this->listTableDetails($table); - } - - $this->alterTable(new TableDiff($table->getName(), [], [], [], [], [], [], $table, [], [$foreignKey])); - } - - /** - * {@inheritDoc} - */ - public function dropForeignKey($foreignKey, $table) - { - if (! $table instanceof Table) { - $table = $this->listTableDetails($table); - } - - $this->alterTable(new TableDiff($table->getName(), [], [], [], [], [], [], $table, [], [], [$foreignKey])); - } - - /** - * {@inheritDoc} - */ - public function listTableForeignKeys($table, $database = null) - { - $table = $this->normalizeName($table); - - $columns = $this->selectForeignKeyColumns($database ?? 'main', $table) - ->fetchAllAssociative(); - - if (count($columns) > 0) { - $columns = $this->addDetailsToTableForeignKeyColumns($table, $columns); - } - - return $this->_getPortableTableForeignKeysList($columns); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableDefinition($table) - { - return $table['table_name']; - } - - /** - * {@inheritDoc} - * - * @link http://ezcomponents.org/docs/api/trunk/DatabaseSchema/ezcDbSchemaPgsqlReader.html - */ - protected function _getPortableTableIndexesList($tableIndexes, $tableName = null) - { - $indexBuffer = []; - - // fetch primary - $indexArray = $this->_conn->fetchAllAssociative('SELECT * FROM PRAGMA_TABLE_INFO (?)', [$tableName]); - - usort( - $indexArray, - /** - * @param array $a - * @param array $b - */ - static function (array $a, array $b): int { - if ($a['pk'] === $b['pk']) { - return $a['cid'] - $b['cid']; - } - - return $a['pk'] - $b['pk']; - }, - ); - - foreach ($indexArray as $indexColumnRow) { - if ($indexColumnRow['pk'] === 0 || $indexColumnRow['pk'] === '0') { - continue; - } - - $indexBuffer[] = [ - 'key_name' => 'primary', - 'primary' => true, - 'non_unique' => false, - 'column_name' => $indexColumnRow['name'], - ]; - } - - // fetch regular indexes - foreach ($tableIndexes as $tableIndex) { - // Ignore indexes with reserved names, e.g. autoindexes - if (strpos($tableIndex['name'], 'sqlite_') === 0) { - continue; - } - - $keyName = $tableIndex['name']; - $idx = []; - $idx['key_name'] = $keyName; - $idx['primary'] = false; - $idx['non_unique'] = ! $tableIndex['unique']; - - $indexArray = $this->_conn->fetchAllAssociative('SELECT * FROM PRAGMA_INDEX_INFO (?)', [$keyName]); - - foreach ($indexArray as $indexColumnRow) { - $idx['column_name'] = $indexColumnRow['name']; - $indexBuffer[] = $idx; - } - } - - return parent::_getPortableTableIndexesList($indexBuffer, $tableName); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableColumnList($table, $database, $tableColumns) - { - $list = parent::_getPortableTableColumnList($table, $database, $tableColumns); - - // find column with autoincrement - $autoincrementColumn = null; - $autoincrementCount = 0; - - foreach ($tableColumns as $tableColumn) { - if ($tableColumn['pk'] === 0 || $tableColumn['pk'] === '0') { - continue; - } - - $autoincrementCount++; - if ($autoincrementColumn !== null || strtolower($tableColumn['type']) !== 'integer') { - continue; - } - - $autoincrementColumn = $tableColumn['name']; - } - - if ($autoincrementCount === 1 && $autoincrementColumn !== null) { - foreach ($list as $column) { - if ($autoincrementColumn !== $column->getName()) { - continue; - } - - $column->setAutoincrement(true); - } - } - - // inspect column collation and comments - $createSql = $this->getCreateTableSQL($table); - - foreach ($list as $columnName => $column) { - $type = $column->getType(); - - if ($type instanceof StringType || $type instanceof TextType) { - $column->setPlatformOption( - 'collation', - $this->parseColumnCollationFromSQL($columnName, $createSql) ?? 'BINARY', - ); - } - - $comment = $this->parseColumnCommentFromSQL($columnName, $createSql); - - if ($comment === null) { - continue; - } - - $type = $this->extractDoctrineTypeFromComment($comment, ''); - - if ($type !== '') { - $column->setType(Type::getType($type)); - - $comment = $this->removeDoctrineTypeFromComment($comment, $type); - } - - $column->setComment($comment); - } - - return $list; - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableColumnDefinition($tableColumn) - { - $parts = explode('(', $tableColumn['type']); - $tableColumn['type'] = trim($parts[0]); - if (isset($parts[1])) { - $length = trim($parts[1], ')'); - $tableColumn['length'] = $length; - } - - $dbType = strtolower($tableColumn['type']); - $length = $tableColumn['length'] ?? null; - $unsigned = false; - - if (strpos($dbType, ' unsigned') !== false) { - $dbType = str_replace(' unsigned', '', $dbType); - $unsigned = true; - } - - $fixed = false; - $type = $this->_platform->getDoctrineTypeMapping($dbType); - $default = $tableColumn['dflt_value']; - if ($default === 'NULL') { - $default = null; - } - - if ($default !== null) { - // SQLite returns the default value as a literal expression, so we need to parse it - if (preg_match('/^\'(.*)\'$/s', $default, $matches) === 1) { - $default = str_replace("''", "'", $matches[1]); - } - } - - $notnull = (bool) $tableColumn['notnull']; - - if (! isset($tableColumn['name'])) { - $tableColumn['name'] = ''; - } - - $precision = null; - $scale = null; - - switch ($dbType) { - case 'char': - $fixed = true; - break; - case 'float': - case 'double': - case 'real': - case 'decimal': - case 'numeric': - if (isset($tableColumn['length'])) { - if (strpos($tableColumn['length'], ',') === false) { - $tableColumn['length'] .= ',0'; - } - - [$precision, $scale] = array_map('trim', explode(',', $tableColumn['length'])); - } - - $length = null; - break; - } - - $options = [ - 'length' => $length, - 'unsigned' => $unsigned, - 'fixed' => $fixed, - 'notnull' => $notnull, - 'default' => $default, - 'precision' => $precision, - 'scale' => $scale, - ]; - - return new Column($tableColumn['name'], Type::getType($type), $options); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableViewDefinition($view) - { - return new View($view['name'], $view['sql']); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeysList($tableForeignKeys) - { - $list = []; - foreach ($tableForeignKeys as $value) { - $value = array_change_key_case($value, CASE_LOWER); - $id = $value['id']; - if (! isset($list[$id])) { - if (! isset($value['on_delete']) || $value['on_delete'] === 'RESTRICT') { - $value['on_delete'] = null; - } - - if (! isset($value['on_update']) || $value['on_update'] === 'RESTRICT') { - $value['on_update'] = null; - } - - $list[$id] = [ - 'name' => $value['constraint_name'], - 'local' => [], - 'foreign' => [], - 'foreignTable' => $value['table'], - 'onDelete' => $value['on_delete'], - 'onUpdate' => $value['on_update'], - 'deferrable' => $value['deferrable'], - 'deferred' => $value['deferred'], - ]; - } - - $list[$id]['local'][] = $value['from']; - - if ($value['to'] === null) { - // Inferring a shorthand form for the foreign key constraint, where the "to" field is empty. - // @see https://www.sqlite.org/foreignkeys.html#fk_indexes. - $foreignTableIndexes = $this->_getPortableTableIndexesList([], $value['table']); - - if (! isset($foreignTableIndexes['primary'])) { - continue; - } - - $list[$id]['foreign'] = [...$list[$id]['foreign'], ...$foreignTableIndexes['primary']->getColumns()]; - - continue; - } - - $list[$id]['foreign'][] = $value['to']; - } - - return parent::_getPortableTableForeignKeysList($list); - } - - /** - * {@inheritDoc} - */ - protected function _getPortableTableForeignKeyDefinition($tableForeignKey): ForeignKeyConstraint - { - return new ForeignKeyConstraint( - $tableForeignKey['local'], - $tableForeignKey['foreignTable'], - $tableForeignKey['foreign'], - $tableForeignKey['name'], - [ - 'onDelete' => $tableForeignKey['onDelete'], - 'onUpdate' => $tableForeignKey['onUpdate'], - 'deferrable' => $tableForeignKey['deferrable'], - 'deferred' => $tableForeignKey['deferred'], - ], - ); - } - - private function parseColumnCollationFromSQL(string $column, string $sql): ?string - { - $pattern = '{(?:\W' . preg_quote($column) . '\W|\W' - . preg_quote($this->_platform->quoteSingleIdentifier($column)) - . '\W)[^,(]+(?:\([^()]+\)[^,]*)?(?:(?:DEFAULT|CHECK)\s*(?:\(.*?\))?[^,]*)*COLLATE\s+["\']?([^\s,"\')]+)}is'; - - if (preg_match($pattern, $sql, $match) !== 1) { - return null; - } - - return $match[1]; - } - - private function parseTableCommentFromSQL(string $table, string $sql): ?string - { - $pattern = '/\s* # Allow whitespace characters at start of line -CREATE\sTABLE # Match "CREATE TABLE" -(?:\W"' . preg_quote($this->_platform->quoteSingleIdentifier($table), '/') . '"\W|\W' . preg_quote($table, '/') - . '\W) # Match table name (quoted and unquoted) -( # Start capture - (?:\s*--[^\n]*\n?)+ # Capture anything that starts with whitespaces followed by -- until the end of the line(s) -)/ix'; - - if (preg_match($pattern, $sql, $match) !== 1) { - return null; - } - - $comment = preg_replace('{^\s*--}m', '', rtrim($match[1], "\n")); - - return $comment === '' ? null : $comment; - } - - private function parseColumnCommentFromSQL(string $column, string $sql): ?string - { - $pattern = '{[\s(,](?:\W' . preg_quote($this->_platform->quoteSingleIdentifier($column)) - . '\W|\W' . preg_quote($column) . '\W)(?:\([^)]*?\)|[^,(])*?,?((?:(?!\n))(?:\s*--[^\n]*\n?)+)}i'; - - if (preg_match($pattern, $sql, $match) !== 1) { - return null; - } - - $comment = preg_replace('{^\s*--}m', '', rtrim($match[1], "\n")); - - return $comment === '' ? null : $comment; - } - - /** @throws Exception */ - private function getCreateTableSQL(string $table): string - { - $sql = $this->_conn->fetchOne( - <<<'SQL' -SELECT sql - FROM ( - SELECT * - FROM sqlite_master - UNION ALL - SELECT * - FROM sqlite_temp_master - ) -WHERE type = 'table' -AND name = ? -SQL - , - [$table], - ); - - if ($sql !== false) { - return $sql; - } - - return ''; - } - - /** - * @param list> $columns - * - * @return list> - * - * @throws Exception - */ - private function addDetailsToTableForeignKeyColumns(string $table, array $columns): array - { - $foreignKeyDetails = $this->getForeignKeyDetails($table); - $foreignKeyCount = count($foreignKeyDetails); - - foreach ($columns as $i => $column) { - // SQLite identifies foreign keys in reverse order of appearance in SQL - $columns[$i] = array_merge($column, $foreignKeyDetails[$foreignKeyCount - $column['id'] - 1]); - } - - return $columns; - } - - /** - * @param string $table - * - * @return list> - * - * @throws Exception - */ - private function getForeignKeyDetails($table) - { - $createSql = $this->getCreateTableSQL($table); - - if ( - preg_match_all( - '# - (?:CONSTRAINT\s+(\S+)\s+)? - (?:FOREIGN\s+KEY[^)]+\)\s*)? - REFERENCES\s+\S+\s*(?:\([^)]+\))? - (?: - [^,]*? - (NOT\s+DEFERRABLE|DEFERRABLE) - (?:\s+INITIALLY\s+(DEFERRED|IMMEDIATE))? - )?#isx', - $createSql, - $match, - ) === 0 - ) { - return []; - } - - $names = $match[1]; - $deferrable = $match[2]; - $deferred = $match[3]; - $details = []; - - for ($i = 0, $count = count($match[0]); $i < $count; $i++) { - $details[] = [ - 'constraint_name' => isset($names[$i]) && $names[$i] !== '' ? $names[$i] : null, - 'deferrable' => isset($deferrable[$i]) && strcasecmp($deferrable[$i], 'deferrable') === 0, - 'deferred' => isset($deferred[$i]) && strcasecmp($deferred[$i], 'deferred') === 0, - ]; - } - - return $details; - } - - public function createComparator(): Comparator - { - return new SQLite\Comparator($this->_platform); - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function getSchemaSearchPaths() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4821', - 'SqliteSchemaManager::getSchemaSearchPaths() is deprecated.', - ); - - // SQLite does not support schemas or databases - return []; - } - - protected function selectTableNames(string $databaseName): Result - { - $sql = <<<'SQL' -SELECT name AS table_name -FROM sqlite_master -WHERE type = 'table' - AND name != 'sqlite_sequence' - AND name != 'geometry_columns' - AND name != 'spatial_ref_sys' -UNION ALL -SELECT name -FROM sqlite_temp_master -WHERE type = 'table' -ORDER BY name -SQL; - - return $this->_conn->executeQuery($sql); - } - - protected function selectTableColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = <<<'SQL' - SELECT t.name AS table_name, - c.* - FROM sqlite_master t - JOIN pragma_table_info(t.name) c -SQL; - - $conditions = [ - "t.type = 'table'", - "t.name NOT IN ('geometry_columns', 'spatial_ref_sys', 'sqlite_sequence')", - ]; - $params = []; - - if ($tableName !== null) { - $conditions[] = 't.name = ?'; - $params[] = str_replace('.', '__', $tableName); - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, c.cid'; - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectIndexColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = <<<'SQL' - SELECT t.name AS table_name, - i.* - FROM sqlite_master t - JOIN pragma_index_list(t.name) i -SQL; - - $conditions = [ - "t.type = 'table'", - "t.name NOT IN ('geometry_columns', 'spatial_ref_sys', 'sqlite_sequence')", - ]; - $params = []; - - if ($tableName !== null) { - $conditions[] = 't.name = ?'; - $params[] = str_replace('.', '__', $tableName); - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, i.seq'; - - return $this->_conn->executeQuery($sql, $params); - } - - protected function selectForeignKeyColumns(string $databaseName, ?string $tableName = null): Result - { - $sql = <<<'SQL' - SELECT t.name AS table_name, - p.* - FROM sqlite_master t - JOIN pragma_foreign_key_list(t.name) p - ON p."seq" != '-1' -SQL; - - $conditions = [ - "t.type = 'table'", - "t.name NOT IN ('geometry_columns', 'spatial_ref_sys', 'sqlite_sequence')", - ]; - $params = []; - - if ($tableName !== null) { - $conditions[] = 't.name = ?'; - $params[] = str_replace('.', '__', $tableName); - } - - $sql .= ' WHERE ' . implode(' AND ', $conditions) . ' ORDER BY t.name, p.id DESC, p.seq'; - - return $this->_conn->executeQuery($sql, $params); - } - - /** - * {@inheritDoc} - */ - protected function fetchTableOptionsByTable(string $databaseName, ?string $tableName = null): array - { - if ($tableName === null) { - $tables = $this->listTableNames(); - } else { - $tables = [$tableName]; - } - - $tableOptions = []; - foreach ($tables as $table) { - $comment = $this->parseTableCommentFromSQL($table, $this->getCreateTableSQL($table)); - - if ($comment === null) { - continue; - } - - $tableOptions[$table]['comment'] = $comment; - } - - return $tableOptions; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Table.php b/vendor/doctrine/dbal/src/Schema/Table.php deleted file mode 100644 index ce4cc32..0000000 --- a/vendor/doctrine/dbal/src/Schema/Table.php +++ /dev/null @@ -1,1041 +0,0 @@ - [], - ]; - - /** @var SchemaConfig|null */ - protected $_schemaConfig; - - /** @var Index[] */ - private array $implicitIndexes = []; - - /** - * @param Column[] $columns - * @param Index[] $indexes - * @param UniqueConstraint[] $uniqueConstraints - * @param ForeignKeyConstraint[] $fkConstraints - * @param mixed[] $options - * - * @throws SchemaException - * @throws Exception - */ - public function __construct( - string $name, - array $columns = [], - array $indexes = [], - array $uniqueConstraints = [], - array $fkConstraints = [], - array $options = [] - ) { - if ($name === '') { - throw InvalidTableName::new($name); - } - - $this->_setName($name); - - foreach ($columns as $column) { - $this->_addColumn($column); - } - - foreach ($indexes as $idx) { - $this->_addIndex($idx); - } - - foreach ($uniqueConstraints as $uniqueConstraint) { - $this->_addUniqueConstraint($uniqueConstraint); - } - - foreach ($fkConstraints as $constraint) { - $this->_addForeignKeyConstraint($constraint); - } - - $this->_options = array_merge($this->_options, $options); - } - - /** @return void */ - public function setSchemaConfig(SchemaConfig $schemaConfig) - { - $this->_schemaConfig = $schemaConfig; - } - - /** @return int */ - protected function _getMaxIdentifierLength() - { - if ($this->_schemaConfig instanceof SchemaConfig) { - return $this->_schemaConfig->getMaxIdentifierLength(); - } - - return 63; - } - - /** - * Sets the Primary Key. - * - * @param string[] $columnNames - * @param string|false $indexName - * - * @return self - * - * @throws SchemaException - */ - public function setPrimaryKey(array $columnNames, $indexName = false) - { - if ($indexName === false) { - $indexName = 'primary'; - } - - $this->_addIndex($this->_createIndex($columnNames, $indexName, true, true)); - - foreach ($columnNames as $columnName) { - $column = $this->getColumn($columnName); - $column->setNotnull(true); - } - - return $this; - } - - /** - * @param string[] $columnNames - * @param string[] $flags - * @param mixed[] $options - * - * @return self - * - * @throws SchemaException - */ - public function addIndex(array $columnNames, ?string $indexName = null, array $flags = [], array $options = []) - { - $indexName ??= $this->_generateIdentifierName( - array_merge([$this->getName()], $columnNames), - 'idx', - $this->_getMaxIdentifierLength(), - ); - - return $this->_addIndex($this->_createIndex($columnNames, $indexName, false, false, $flags, $options)); - } - - /** - * @param string[] $columnNames - * @param string[] $flags - * @param mixed[] $options - * - * @return self - */ - public function addUniqueConstraint( - array $columnNames, - ?string $indexName = null, - array $flags = [], - array $options = [] - ): Table { - $indexName ??= $this->_generateIdentifierName( - array_merge([$this->getName()], $columnNames), - 'uniq', - $this->_getMaxIdentifierLength(), - ); - - return $this->_addUniqueConstraint($this->_createUniqueConstraint($columnNames, $indexName, $flags, $options)); - } - - /** - * Drops the primary key from this table. - * - * @return void - * - * @throws SchemaException - */ - public function dropPrimaryKey() - { - if ($this->_primaryKeyName === null) { - return; - } - - $this->dropIndex($this->_primaryKeyName); - $this->_primaryKeyName = null; - } - - /** - * Drops an index from this table. - * - * @param string $name The index name. - * - * @return void - * - * @throws SchemaException If the index does not exist. - */ - public function dropIndex($name) - { - $name = $this->normalizeIdentifier($name); - - if (! $this->hasIndex($name)) { - throw SchemaException::indexDoesNotExist($name, $this->_name); - } - - unset($this->_indexes[$name]); - } - - /** - * @param string[] $columnNames - * @param string|null $indexName - * @param mixed[] $options - * - * @return self - * - * @throws SchemaException - */ - public function addUniqueIndex(array $columnNames, $indexName = null, array $options = []) - { - $indexName ??= $this->_generateIdentifierName( - array_merge([$this->getName()], $columnNames), - 'uniq', - $this->_getMaxIdentifierLength(), - ); - - return $this->_addIndex($this->_createIndex($columnNames, $indexName, true, false, [], $options)); - } - - /** - * Renames an index. - * - * @param string $oldName The name of the index to rename from. - * @param string|null $newName The name of the index to rename to. - * If null is given, the index name will be auto-generated. - * - * @return self This table instance. - * - * @throws SchemaException If no index exists for the given current name - * or if an index with the given new name already exists on this table. - */ - public function renameIndex($oldName, $newName = null) - { - $oldName = $this->normalizeIdentifier($oldName); - $normalizedNewName = $this->normalizeIdentifier($newName); - - if ($oldName === $normalizedNewName) { - return $this; - } - - if (! $this->hasIndex($oldName)) { - throw SchemaException::indexDoesNotExist($oldName, $this->_name); - } - - if ($this->hasIndex($normalizedNewName)) { - throw SchemaException::indexAlreadyExists($normalizedNewName, $this->_name); - } - - $oldIndex = $this->_indexes[$oldName]; - - if ($oldIndex->isPrimary()) { - $this->dropPrimaryKey(); - - return $this->setPrimaryKey($oldIndex->getColumns(), $newName ?? false); - } - - unset($this->_indexes[$oldName]); - - if ($oldIndex->isUnique()) { - return $this->addUniqueIndex($oldIndex->getColumns(), $newName, $oldIndex->getOptions()); - } - - return $this->addIndex($oldIndex->getColumns(), $newName, $oldIndex->getFlags(), $oldIndex->getOptions()); - } - - /** - * Checks if an index begins in the order of the given columns. - * - * @param string[] $columnNames - * - * @return bool - */ - public function columnsAreIndexed(array $columnNames) - { - foreach ($this->getIndexes() as $index) { - if ($index->spansColumns($columnNames)) { - return true; - } - } - - return false; - } - - /** - * @param string[] $columnNames - * @param string $indexName - * @param bool $isUnique - * @param bool $isPrimary - * @param string[] $flags - * @param mixed[] $options - * - * @throws SchemaException - */ - private function _createIndex( - array $columnNames, - $indexName, - $isUnique, - $isPrimary, - array $flags = [], - array $options = [] - ): Index { - if (preg_match('(([^a-zA-Z0-9_]+))', $this->normalizeIdentifier($indexName)) === 1) { - throw SchemaException::indexNameInvalid($indexName); - } - - foreach ($columnNames as $columnName) { - if (! $this->hasColumn($columnName)) { - throw SchemaException::columnDoesNotExist($columnName, $this->_name); - } - } - - return new Index($indexName, $columnNames, $isUnique, $isPrimary, $flags, $options); - } - - /** - * @param string $name - * @param string $typeName - * @param mixed[] $options - * - * @return Column - * - * @throws SchemaException - */ - public function addColumn($name, $typeName, array $options = []) - { - $column = new Column($name, Type::getType($typeName), $options); - - $this->_addColumn($column); - - return $column; - } - - /** - * Change Column Details. - * - * @deprecated Use {@link modifyColumn()} instead. - * - * @param string $name - * @param mixed[] $options - * - * @return self - * - * @throws SchemaException - */ - public function changeColumn($name, array $options) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5747', - '%s is deprecated. Use modifyColumn() instead.', - __METHOD__, - ); - - return $this->modifyColumn($name, $options); - } - - /** - * @param string $name - * @param mixed[] $options - * - * @return self - * - * @throws SchemaException - */ - public function modifyColumn($name, array $options) - { - $column = $this->getColumn($name); - $column->setOptions($options); - - return $this; - } - - /** - * Drops a Column from the Table. - * - * @param string $name - * - * @return self - */ - public function dropColumn($name) - { - $name = $this->normalizeIdentifier($name); - - unset($this->_columns[$name]); - - return $this; - } - - /** - * Adds a foreign key constraint. - * - * Name is inferred from the local columns. - * - * @param Table|string $foreignTable Table schema instance or table name - * @param string[] $localColumnNames - * @param string[] $foreignColumnNames - * @param mixed[] $options - * @param string|null $name - * - * @return self - * - * @throws SchemaException - */ - public function addForeignKeyConstraint( - $foreignTable, - array $localColumnNames, - array $foreignColumnNames, - array $options = [], - $name = null - ) { - $name ??= $this->_generateIdentifierName( - array_merge([$this->getName()], $localColumnNames), - 'fk', - $this->_getMaxIdentifierLength(), - ); - - if ($foreignTable instanceof Table) { - foreach ($foreignColumnNames as $columnName) { - if (! $foreignTable->hasColumn($columnName)) { - throw SchemaException::columnDoesNotExist($columnName, $foreignTable->getName()); - } - } - } - - foreach ($localColumnNames as $columnName) { - if (! $this->hasColumn($columnName)) { - throw SchemaException::columnDoesNotExist($columnName, $this->_name); - } - } - - $constraint = new ForeignKeyConstraint( - $localColumnNames, - $foreignTable, - $foreignColumnNames, - $name, - $options, - ); - - return $this->_addForeignKeyConstraint($constraint); - } - - /** - * @param string $name - * @param mixed $value - * - * @return self - */ - public function addOption($name, $value) - { - $this->_options[$name] = $value; - - return $this; - } - - /** - * @return void - * - * @throws SchemaException - */ - protected function _addColumn(Column $column) - { - $columnName = $column->getName(); - $columnName = $this->normalizeIdentifier($columnName); - - if (isset($this->_columns[$columnName])) { - throw SchemaException::columnAlreadyExists($this->getName(), $columnName); - } - - $this->_columns[$columnName] = $column; - } - - /** - * Adds an index to the table. - * - * @return self - * - * @throws SchemaException - */ - protected function _addIndex(Index $indexCandidate) - { - $indexName = $indexCandidate->getName(); - $indexName = $this->normalizeIdentifier($indexName); - $replacedImplicitIndexes = []; - - foreach ($this->implicitIndexes as $name => $implicitIndex) { - if (! $implicitIndex->isFulfilledBy($indexCandidate) || ! isset($this->_indexes[$name])) { - continue; - } - - $replacedImplicitIndexes[] = $name; - } - - if ( - (isset($this->_indexes[$indexName]) && ! in_array($indexName, $replacedImplicitIndexes, true)) || - ($this->_primaryKeyName !== null && $indexCandidate->isPrimary()) - ) { - throw SchemaException::indexAlreadyExists($indexName, $this->_name); - } - - foreach ($replacedImplicitIndexes as $name) { - unset($this->_indexes[$name], $this->implicitIndexes[$name]); - } - - if ($indexCandidate->isPrimary()) { - $this->_primaryKeyName = $indexName; - } - - $this->_indexes[$indexName] = $indexCandidate; - - return $this; - } - - /** @return self */ - protected function _addUniqueConstraint(UniqueConstraint $constraint): Table - { - $mergedNames = array_merge([$this->getName()], $constraint->getColumns()); - $name = strlen($constraint->getName()) > 0 - ? $constraint->getName() - : $this->_generateIdentifierName($mergedNames, 'fk', $this->_getMaxIdentifierLength()); - - $name = $this->normalizeIdentifier($name); - - $this->uniqueConstraints[$name] = $constraint; - - // If there is already an index that fulfills this requirements drop the request. In the case of __construct - // calling this method during hydration from schema-details all the explicitly added indexes lead to duplicates. - // This creates computation overhead in this case, however no duplicate indexes are ever added (column based). - $indexName = $this->_generateIdentifierName($mergedNames, 'idx', $this->_getMaxIdentifierLength()); - - $indexCandidate = $this->_createIndex($constraint->getColumns(), $indexName, true, false); - - foreach ($this->_indexes as $existingIndex) { - if ($indexCandidate->isFulfilledBy($existingIndex)) { - return $this; - } - } - - $this->implicitIndexes[$this->normalizeIdentifier($indexName)] = $indexCandidate; - - return $this; - } - - /** @return self */ - protected function _addForeignKeyConstraint(ForeignKeyConstraint $constraint) - { - $constraint->setLocalTable($this); - - if (strlen($constraint->getName()) > 0) { - $name = $constraint->getName(); - } else { - $name = $this->_generateIdentifierName( - array_merge([$this->getName()], $constraint->getLocalColumns()), - 'fk', - $this->_getMaxIdentifierLength(), - ); - } - - $name = $this->normalizeIdentifier($name); - - $this->_fkConstraints[$name] = $constraint; - - /* Add an implicit index (defined by the DBAL) on the foreign key - columns. If there is already a user-defined index that fulfills these - requirements drop the request. In the case of __construct() calling - this method during hydration from schema-details, all the explicitly - added indexes lead to duplicates. This creates computation overhead in - this case, however no duplicate indexes are ever added (based on - columns). */ - $indexName = $this->_generateIdentifierName( - array_merge([$this->getName()], $constraint->getColumns()), - 'idx', - $this->_getMaxIdentifierLength(), - ); - - $indexCandidate = $this->_createIndex($constraint->getColumns(), $indexName, false, false); - - foreach ($this->_indexes as $existingIndex) { - if ($indexCandidate->isFulfilledBy($existingIndex)) { - return $this; - } - } - - $this->_addIndex($indexCandidate); - $this->implicitIndexes[$this->normalizeIdentifier($indexName)] = $indexCandidate; - - return $this; - } - - /** - * Returns whether this table has a foreign key constraint with the given name. - * - * @param string $name - * - * @return bool - */ - public function hasForeignKey($name) - { - $name = $this->normalizeIdentifier($name); - - return isset($this->_fkConstraints[$name]); - } - - /** - * Returns the foreign key constraint with the given name. - * - * @param string $name The constraint name. - * - * @return ForeignKeyConstraint - * - * @throws SchemaException If the foreign key does not exist. - */ - public function getForeignKey($name) - { - $name = $this->normalizeIdentifier($name); - - if (! $this->hasForeignKey($name)) { - throw SchemaException::foreignKeyDoesNotExist($name, $this->_name); - } - - return $this->_fkConstraints[$name]; - } - - /** - * Removes the foreign key constraint with the given name. - * - * @param string $name The constraint name. - * - * @return void - * - * @throws SchemaException - */ - public function removeForeignKey($name) - { - $name = $this->normalizeIdentifier($name); - - if (! $this->hasForeignKey($name)) { - throw SchemaException::foreignKeyDoesNotExist($name, $this->_name); - } - - unset($this->_fkConstraints[$name]); - } - - /** - * Returns whether this table has a unique constraint with the given name. - */ - public function hasUniqueConstraint(string $name): bool - { - $name = $this->normalizeIdentifier($name); - - return isset($this->uniqueConstraints[$name]); - } - - /** - * Returns the unique constraint with the given name. - * - * @throws SchemaException If the unique constraint does not exist. - */ - public function getUniqueConstraint(string $name): UniqueConstraint - { - $name = $this->normalizeIdentifier($name); - - if (! $this->hasUniqueConstraint($name)) { - throw SchemaException::uniqueConstraintDoesNotExist($name, $this->_name); - } - - return $this->uniqueConstraints[$name]; - } - - /** - * Removes the unique constraint with the given name. - * - * @throws SchemaException If the unique constraint does not exist. - */ - public function removeUniqueConstraint(string $name): void - { - $name = $this->normalizeIdentifier($name); - - if (! $this->hasUniqueConstraint($name)) { - throw SchemaException::uniqueConstraintDoesNotExist($name, $this->_name); - } - - unset($this->uniqueConstraints[$name]); - } - - /** - * Returns ordered list of columns (primary keys are first, then foreign keys, then the rest) - * - * @return Column[] - */ - public function getColumns() - { - $primaryKeyColumns = $this->getPrimaryKey() !== null ? $this->getPrimaryKeyColumns() : []; - $foreignKeyColumns = $this->getForeignKeyColumns(); - $remainderColumns = $this->filterColumns( - array_merge(array_keys($primaryKeyColumns), array_keys($foreignKeyColumns)), - true, - ); - - return array_merge($primaryKeyColumns, $foreignKeyColumns, $remainderColumns); - } - - /** - * Returns the foreign key columns - * - * @deprecated Use {@see getForeignKey()} and {@see ForeignKeyConstraint::getLocalColumns()} instead. - * - * @return Column[] - */ - public function getForeignKeyColumns() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5731', - '%s is deprecated. Use getForeignKey() and ForeignKeyConstraint::getLocalColumns() instead.', - __METHOD__, - ); - - $foreignKeyColumns = []; - - foreach ($this->getForeignKeys() as $foreignKey) { - $foreignKeyColumns = array_merge($foreignKeyColumns, $foreignKey->getLocalColumns()); - } - - return $this->filterColumns($foreignKeyColumns); - } - - /** - * Returns only columns that have specified names - * - * @param string[] $columnNames - * - * @return Column[] - */ - private function filterColumns(array $columnNames, bool $reverse = false): array - { - return array_filter($this->_columns, static function (string $columnName) use ($columnNames, $reverse): bool { - return in_array($columnName, $columnNames, true) !== $reverse; - }, ARRAY_FILTER_USE_KEY); - } - - /** - * Returns whether this table has a Column with the given name. - * - * @param string $name The column name. - * - * @return bool - */ - public function hasColumn($name) - { - $name = $this->normalizeIdentifier($name); - - return isset($this->_columns[$name]); - } - - /** - * Returns the Column with the given name. - * - * @param string $name The column name. - * - * @return Column - * - * @throws SchemaException If the column does not exist. - */ - public function getColumn($name) - { - $name = $this->normalizeIdentifier($name); - - if (! $this->hasColumn($name)) { - throw SchemaException::columnDoesNotExist($name, $this->_name); - } - - return $this->_columns[$name]; - } - - /** - * Returns the primary key. - * - * @return Index|null The primary key, or null if this Table has no primary key. - */ - public function getPrimaryKey() - { - if ($this->_primaryKeyName !== null) { - return $this->getIndex($this->_primaryKeyName); - } - - return null; - } - - /** - * Returns the primary key columns. - * - * @deprecated Use {@see getPrimaryKey()} and {@see Index::getColumns()} instead. - * - * @return Column[] - * - * @throws Exception - */ - public function getPrimaryKeyColumns() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5731', - '%s is deprecated. Use getPrimaryKey() and Index::getColumns() instead.', - __METHOD__, - ); - - $primaryKey = $this->getPrimaryKey(); - - if ($primaryKey === null) { - throw new Exception('Table ' . $this->getName() . ' has no primary key.'); - } - - return $this->filterColumns($primaryKey->getColumns()); - } - - /** - * Returns whether this table has a primary key. - * - * @deprecated Use {@see getPrimaryKey()} instead. - * - * @return bool - */ - public function hasPrimaryKey() - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5731', - '%s is deprecated. Use getPrimaryKey() instead.', - __METHOD__, - ); - - return $this->_primaryKeyName !== null && $this->hasIndex($this->_primaryKeyName); - } - - /** - * Returns whether this table has an Index with the given name. - * - * @param string $name The index name. - * - * @return bool - */ - public function hasIndex($name) - { - $name = $this->normalizeIdentifier($name); - - return isset($this->_indexes[$name]); - } - - /** - * Returns the Index with the given name. - * - * @param string $name The index name. - * - * @return Index - * - * @throws SchemaException If the index does not exist. - */ - public function getIndex($name) - { - $name = $this->normalizeIdentifier($name); - if (! $this->hasIndex($name)) { - throw SchemaException::indexDoesNotExist($name, $this->_name); - } - - return $this->_indexes[$name]; - } - - /** @return Index[] */ - public function getIndexes() - { - return $this->_indexes; - } - - /** - * Returns the unique constraints. - * - * @return UniqueConstraint[] - */ - public function getUniqueConstraints(): array - { - return $this->uniqueConstraints; - } - - /** - * Returns the foreign key constraints. - * - * @return ForeignKeyConstraint[] - */ - public function getForeignKeys() - { - return $this->_fkConstraints; - } - - /** - * @param string $name - * - * @return bool - */ - public function hasOption($name) - { - return isset($this->_options[$name]); - } - - /** - * @param string $name - * - * @return mixed - */ - public function getOption($name) - { - return $this->_options[$name]; - } - - /** @return mixed[] */ - public function getOptions() - { - return $this->_options; - } - - /** - * @deprecated - * - * @return void - * - * @throws SchemaException - */ - public function visit(Visitor $visitor) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5435', - 'Table::visit() is deprecated.', - ); - - $visitor->acceptTable($this); - - foreach ($this->getColumns() as $column) { - $visitor->acceptColumn($this, $column); - } - - foreach ($this->getIndexes() as $index) { - $visitor->acceptIndex($this, $index); - } - - foreach ($this->getForeignKeys() as $constraint) { - $visitor->acceptForeignKey($this, $constraint); - } - } - - /** - * Clone of a Table triggers a deep clone of all affected assets. - * - * @return void - */ - public function __clone() - { - foreach ($this->_columns as $k => $column) { - $this->_columns[$k] = clone $column; - } - - foreach ($this->_indexes as $k => $index) { - $this->_indexes[$k] = clone $index; - } - - foreach ($this->_fkConstraints as $k => $fk) { - $this->_fkConstraints[$k] = clone $fk; - $this->_fkConstraints[$k]->setLocalTable($this); - } - } - - /** - * @param string[] $columnNames - * @param string[] $flags - * @param mixed[] $options - * - * @throws SchemaException - */ - private function _createUniqueConstraint( - array $columnNames, - string $indexName, - array $flags = [], - array $options = [] - ): UniqueConstraint { - if (preg_match('(([^a-zA-Z0-9_]+))', $this->normalizeIdentifier($indexName)) === 1) { - throw SchemaException::indexNameInvalid($indexName); - } - - foreach ($columnNames as $columnName) { - if (! $this->hasColumn($columnName)) { - throw SchemaException::columnDoesNotExist($columnName, $this->_name); - } - } - - return new UniqueConstraint($indexName, $columnNames, $flags, $options); - } - - /** - * Normalizes a given identifier. - * - * Trims quotes and lowercases the given identifier. - * - * @return string The normalized identifier. - */ - private function normalizeIdentifier(?string $identifier): string - { - if ($identifier === null) { - return ''; - } - - return $this->trimQuotes(strtolower($identifier)); - } - - public function setComment(?string $comment): self - { - // For keeping backward compatibility with MySQL in previous releases, table comments are stored as options. - $this->addOption('comment', $comment); - - return $this; - } - - public function getComment(): ?string - { - return $this->_options['comment'] ?? null; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/TableDiff.php b/vendor/doctrine/dbal/src/Schema/TableDiff.php deleted file mode 100644 index 9aaf9e7..0000000 --- a/vendor/doctrine/dbal/src/Schema/TableDiff.php +++ /dev/null @@ -1,361 +0,0 @@ - $addedColumns - * @param array $modifiedColumns - * @param array $droppedColumns - * @param array $addedIndexes - * @param array $changedIndexes - * @param array $removedIndexes - * @param list $addedForeignKeys - * @param list $changedForeignKeys - * @param list $removedForeignKeys - * @param array $renamedColumns - * @param array $renamedIndexes - */ - public function __construct( - $tableName, - $addedColumns = [], - $modifiedColumns = [], - $droppedColumns = [], - $addedIndexes = [], - $changedIndexes = [], - $removedIndexes = [], - ?Table $fromTable = null, - $addedForeignKeys = [], - $changedForeignKeys = [], - $removedForeignKeys = [], - $renamedColumns = [], - $renamedIndexes = [] - ) { - $this->name = $tableName; - $this->addedColumns = $addedColumns; - $this->changedColumns = $modifiedColumns; - $this->renamedColumns = $renamedColumns; - $this->removedColumns = $droppedColumns; - $this->addedIndexes = $addedIndexes; - $this->changedIndexes = $changedIndexes; - $this->renamedIndexes = $renamedIndexes; - $this->removedIndexes = $removedIndexes; - $this->addedForeignKeys = $addedForeignKeys; - $this->changedForeignKeys = $changedForeignKeys; - $this->removedForeignKeys = $removedForeignKeys; - - if ($fromTable === null) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5678', - 'Not passing the $fromTable to %s is deprecated.', - __METHOD__, - ); - } - - $this->fromTable = $fromTable; - } - - /** - * @deprecated Use {@see getOldTable()} instead. - * - * @param AbstractPlatform $platform The platform to use for retrieving this table diff's name. - * - * @return Identifier - */ - public function getName(AbstractPlatform $platform) - { - return new Identifier( - $this->fromTable instanceof Table ? $this->fromTable->getQuotedName($platform) : $this->name, - ); - } - - /** - * @deprecated Rename tables via {@link AbstractSchemaManager::renameTable()} instead. - * - * @return Identifier|false - */ - public function getNewName() - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5663', - '%s is deprecated. Rename tables via AbstractSchemaManager::renameTable() instead.', - __METHOD__, - ); - - if ($this->newName === false) { - return false; - } - - return new Identifier($this->newName); - } - - public function getOldTable(): ?Table - { - return $this->fromTable; - } - - /** @return list */ - public function getAddedColumns(): array - { - return array_values($this->addedColumns); - } - - /** @return list */ - public function getModifiedColumns(): array - { - return array_values($this->changedColumns); - } - - /** @return list */ - public function getDroppedColumns(): array - { - return array_values($this->removedColumns); - } - - /** @return array */ - public function getRenamedColumns(): array - { - return $this->renamedColumns; - } - - /** @return list */ - public function getAddedIndexes(): array - { - return array_values($this->addedIndexes); - } - - /** - * @internal This method exists only for compatibility with the current implementation of schema managers - * that modify the diff while processing it. - */ - public function unsetAddedIndex(Index $index): void - { - $this->addedIndexes = array_filter( - $this->addedIndexes, - static function (Index $addedIndex) use ($index): bool { - return $addedIndex !== $index; - }, - ); - } - - /** @return array */ - public function getModifiedIndexes(): array - { - return array_values($this->changedIndexes); - } - - /** @return list */ - public function getDroppedIndexes(): array - { - return array_values($this->removedIndexes); - } - - /** - * @internal This method exists only for compatibility with the current implementation of schema managers - * that modify the diff while processing it. - */ - public function unsetDroppedIndex(Index $index): void - { - $this->removedIndexes = array_filter( - $this->removedIndexes, - static function (Index $removedIndex) use ($index): bool { - return $removedIndex !== $index; - }, - ); - } - - /** @return array */ - public function getRenamedIndexes(): array - { - return $this->renamedIndexes; - } - - /** @return list */ - public function getAddedForeignKeys(): array - { - return $this->addedForeignKeys; - } - - /** @return list */ - public function getModifiedForeignKeys(): array - { - return $this->changedForeignKeys; - } - - /** @return list */ - public function getDroppedForeignKeys(): array - { - return $this->removedForeignKeys; - } - - /** - * @internal This method exists only for compatibility with the current implementation of the schema comparator. - * - * @param ForeignKeyConstraint|string $foreignKey - */ - public function unsetDroppedForeignKey($foreignKey): void - { - $this->removedForeignKeys = array_filter( - $this->removedForeignKeys, - static function ($removedForeignKey) use ($foreignKey): bool { - return $removedForeignKey !== $foreignKey; - }, - ); - } - - /** - * Returns whether the diff is empty (contains no changes). - */ - public function isEmpty(): bool - { - return count($this->addedColumns) === 0 - && count($this->changedColumns) === 0 - && count($this->removedColumns) === 0 - && count($this->renamedColumns) === 0 - && count($this->addedIndexes) === 0 - && count($this->changedIndexes) === 0 - && count($this->removedIndexes) === 0 - && count($this->renamedIndexes) === 0 - && count($this->addedForeignKeys) === 0 - && count($this->changedForeignKeys) === 0 - && count($this->removedForeignKeys) === 0; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php b/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php deleted file mode 100644 index f353f30..0000000 --- a/vendor/doctrine/dbal/src/Schema/UniqueConstraint.php +++ /dev/null @@ -1,154 +0,0 @@ - Identifier) - * - * @var Identifier[] - */ - protected $columns = []; - - /** - * Platform specific flags. - * array($flagName => true) - * - * @var true[] - */ - protected $flags = []; - - /** - * Platform specific options. - * - * @var mixed[] - */ - private array $options; - - /** - * @param string[] $columns - * @param string[] $flags - * @param mixed[] $options - */ - public function __construct(string $name, array $columns, array $flags = [], array $options = []) - { - $this->_setName($name); - - $this->options = $options; - - foreach ($columns as $column) { - $this->addColumn($column); - } - - foreach ($flags as $flag) { - $this->addFlag($flag); - } - } - - /** - * {@inheritDoc} - */ - public function getColumns() - { - return array_keys($this->columns); - } - - /** - * {@inheritDoc} - */ - public function getQuotedColumns(AbstractPlatform $platform) - { - $columns = []; - - foreach ($this->columns as $column) { - $columns[] = $column->getQuotedName($platform); - } - - return $columns; - } - - /** @return string[] */ - public function getUnquotedColumns(): array - { - return array_map([$this, 'trimQuotes'], $this->getColumns()); - } - - /** - * Returns platform specific flags for unique constraint. - * - * @return string[] - */ - public function getFlags(): array - { - return array_keys($this->flags); - } - - /** - * Adds flag for a unique constraint that translates to platform specific handling. - * - * @return $this - * - * @example $uniqueConstraint->addFlag('CLUSTERED') - */ - public function addFlag(string $flag): UniqueConstraint - { - $this->flags[strtolower($flag)] = true; - - return $this; - } - - /** - * Does this unique constraint have a specific flag? - */ - public function hasFlag(string $flag): bool - { - return isset($this->flags[strtolower($flag)]); - } - - /** - * Removes a flag. - */ - public function removeFlag(string $flag): void - { - unset($this->flags[strtolower($flag)]); - } - - /** - * Does this unique constraint have a specific option? - */ - public function hasOption(string $name): bool - { - return isset($this->options[strtolower($name)]); - } - - /** @return mixed */ - public function getOption(string $name) - { - return $this->options[strtolower($name)]; - } - - /** @return mixed[] */ - public function getOptions(): array - { - return $this->options; - } - - /** - * Adds a new column to the unique constraint. - */ - protected function addColumn(string $column): void - { - $this->columns[$column] = new Identifier($column); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/View.php b/vendor/doctrine/dbal/src/Schema/View.php deleted file mode 100644 index b19f2ad..0000000 --- a/vendor/doctrine/dbal/src/Schema/View.php +++ /dev/null @@ -1,28 +0,0 @@ -_setName($name); - $this->sql = $sql; - } - - /** @return string */ - public function getSql() - { - return $this->sql; - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php b/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php deleted file mode 100644 index f8f3b58..0000000 --- a/vendor/doctrine/dbal/src/Schema/Visitor/AbstractVisitor.php +++ /dev/null @@ -1,49 +0,0 @@ -platform = $platform; - } - - /** - * {@inheritDoc} - */ - public function acceptNamespace($namespaceName) - { - if (! $this->platform->supportsSchemas()) { - return; - } - - $this->createNamespaceQueries[] = $this->platform->getCreateSchemaSQL($namespaceName); - } - - /** - * {@inheritDoc} - */ - public function acceptTable(Table $table) - { - $this->createTableQueries = array_merge($this->createTableQueries, $this->platform->getCreateTableSQL($table)); - } - - /** - * {@inheritDoc} - */ - public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) - { - if (! $this->platform->supportsForeignKeyConstraints()) { - return; - } - - $this->createFkConstraintQueries[] = $this->platform->getCreateForeignKeySQL($fkConstraint, $localTable); - } - - /** - * {@inheritDoc} - */ - public function acceptSequence(Sequence $sequence) - { - $this->createSequenceQueries[] = $this->platform->getCreateSequenceSQL($sequence); - } - - /** @return void */ - public function resetQueries() - { - $this->createNamespaceQueries = []; - $this->createTableQueries = []; - $this->createSequenceQueries = []; - $this->createFkConstraintQueries = []; - } - - /** - * Gets all queries collected so far. - * - * @return string[] - */ - public function getQueries() - { - return array_merge( - $this->createNamespaceQueries, - $this->createSequenceQueries, - $this->createTableQueries, - $this->createFkConstraintQueries, - ); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php b/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php deleted file mode 100644 index ddec6b4..0000000 --- a/vendor/doctrine/dbal/src/Schema/Visitor/DropSchemaSqlCollector.php +++ /dev/null @@ -1,107 +0,0 @@ -platform = $platform; - $this->initializeQueries(); - } - - /** - * {@inheritDoc} - */ - public function acceptTable(Table $table) - { - $this->tables->attach($table); - } - - /** - * {@inheritDoc} - */ - public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) - { - if (strlen($fkConstraint->getName()) === 0) { - throw SchemaException::namedForeignKeyRequired($localTable, $fkConstraint); - } - - $this->constraints->attach($fkConstraint, $localTable); - } - - /** - * {@inheritDoc} - */ - public function acceptSequence(Sequence $sequence) - { - $this->sequences->attach($sequence); - } - - /** @return void */ - public function clearQueries() - { - $this->initializeQueries(); - } - - /** @return string[] */ - public function getQueries() - { - $sql = []; - - foreach ($this->constraints as $fkConstraint) { - assert($fkConstraint instanceof ForeignKeyConstraint); - $localTable = $this->constraints[$fkConstraint]; - $sql[] = $this->platform->getDropForeignKeySQL( - $fkConstraint->getQuotedName($this->platform), - $localTable->getQuotedName($this->platform), - ); - } - - foreach ($this->sequences as $sequence) { - assert($sequence instanceof Sequence); - $sql[] = $this->platform->getDropSequenceSQL($sequence->getQuotedName($this->platform)); - } - - foreach ($this->tables as $table) { - assert($table instanceof Table); - $sql[] = $this->platform->getDropTableSQL($table->getQuotedName($this->platform)); - } - - return $sql; - } - - private function initializeQueries(): void - { - $this->constraints = new SplObjectStorage(); - $this->sequences = new SplObjectStorage(); - $this->tables = new SplObjectStorage(); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php b/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php deleted file mode 100644 index 5eff0d9..0000000 --- a/vendor/doctrine/dbal/src/Schema/Visitor/Graphviz.php +++ /dev/null @@ -1,164 +0,0 @@ -output .= $this->createNodeRelation( - $fkConstraint->getLocalTableName() . ':col' . current($fkConstraint->getLocalColumns()) . ':se', - $fkConstraint->getForeignTableName() . ':col' . current($fkConstraint->getForeignColumns()) . ':se', - [ - 'dir' => 'back', - 'arrowtail' => 'dot', - 'arrowhead' => 'normal', - ], - ); - } - - /** - * {@inheritDoc} - */ - public function acceptSchema(Schema $schema) - { - $this->output = 'digraph "' . $schema->getName() . '" {' . "\n"; - $this->output .= 'splines = true;' . "\n"; - $this->output .= 'overlap = false;' . "\n"; - $this->output .= 'outputorder=edgesfirst;' . "\n"; - $this->output .= 'mindist = 0.6;' . "\n"; - $this->output .= 'sep = .2;' . "\n"; - } - - /** - * {@inheritDoc} - */ - public function acceptTable(Table $table) - { - $this->output .= $this->createNode( - $table->getName(), - [ - 'label' => $this->createTableLabel($table), - 'shape' => 'plaintext', - ], - ); - } - - private function createTableLabel(Table $table): string - { - // Start the table - $label = '<
'; - - // The title - $label .= ''; - - // The attributes block - foreach ($table->getColumns() as $column) { - $columnLabel = $column->getName(); - - $label .= '' - . '' - . '' - . ''; - } - - // End the table - $label .= '
' - . '' . $table->getName() . '
' - . '' . $columnLabel . '' - . '' - . '' - . strtolower($column->getType()->getName()) - . '' - . ''; - - $primaryKey = $table->getPrimaryKey(); - - if ($primaryKey !== null && in_array($column->getName(), $primaryKey->getColumns(), true)) { - $label .= "\xe2\x9c\xb7"; - } - - $label .= '
>'; - - return $label; - } - - /** - * @param string $name - * @param string[] $options - */ - private function createNode($name, $options): string - { - $node = $name . ' ['; - foreach ($options as $key => $value) { - $node .= $key . '=' . $value . ' '; - } - - $node .= "]\n"; - - return $node; - } - - /** - * @param string $node1 - * @param string $node2 - * @param string[] $options - */ - private function createNodeRelation($node1, $node2, $options): string - { - $relation = $node1 . ' -> ' . $node2 . ' ['; - foreach ($options as $key => $value) { - $relation .= $key . '=' . $value . ' '; - } - - $relation .= "]\n"; - - return $relation; - } - - /** - * Get Graphviz Output - * - * @return string - */ - public function getOutput() - { - return $this->output . '}'; - } - - /** - * Writes dot language output to a file. This should usually be a *.dot file. - * - * You have to convert the output into a viewable format. For example use "neato" on linux systems - * and execute: - * - * neato -Tpng -o er.png er.dot - * - * @param string $filename - * - * @return void - */ - public function write($filename) - { - file_put_contents($filename, $this->getOutput()); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Visitor/NamespaceVisitor.php b/vendor/doctrine/dbal/src/Schema/Visitor/NamespaceVisitor.php deleted file mode 100644 index 4438243..0000000 --- a/vendor/doctrine/dbal/src/Schema/Visitor/NamespaceVisitor.php +++ /dev/null @@ -1,20 +0,0 @@ -schema = $schema; - } - - /** - * {@inheritDoc} - */ - public function acceptTable(Table $table) - { - if ($this->schema === null) { - return; - } - - if ($table->isInDefaultNamespace($this->schema->getName())) { - return; - } - - $this->schema->dropTable($table->getName()); - } - - /** - * {@inheritDoc} - */ - public function acceptSequence(Sequence $sequence) - { - if ($this->schema === null) { - return; - } - - if ($sequence->isInDefaultNamespace($this->schema->getName())) { - return; - } - - $this->schema->dropSequence($sequence->getName()); - } - - /** - * {@inheritDoc} - */ - public function acceptForeignKey(Table $localTable, ForeignKeyConstraint $fkConstraint) - { - if ($this->schema === null) { - return; - } - - // The table may already be deleted in a previous - // RemoveNamespacedAssets#acceptTable call. Removing Foreign keys that - // point to nowhere. - if (! $this->schema->hasTable($fkConstraint->getForeignTableName())) { - $localTable->removeForeignKey($fkConstraint->getName()); - - return; - } - - $foreignTable = $this->schema->getTable($fkConstraint->getForeignTableName()); - if ($foreignTable->isInDefaultNamespace($this->schema->getName())) { - return; - } - - $localTable->removeForeignKey($fkConstraint->getName()); - } -} diff --git a/vendor/doctrine/dbal/src/Schema/Visitor/Visitor.php b/vendor/doctrine/dbal/src/Schema/Visitor/Visitor.php deleted file mode 100644 index 8b34864..0000000 --- a/vendor/doctrine/dbal/src/Schema/Visitor/Visitor.php +++ /dev/null @@ -1,45 +0,0 @@ -Statement for the given SQL and Connection. - * - * @internal The statement can be only instantiated by {@see Connection}. - * - * @param Connection $conn The connection for handling statement errors. - * @param Driver\Statement $statement The underlying driver-level statement. - * @param string $sql The SQL of the statement. - * - * @throws Exception - */ - public function __construct(Connection $conn, Driver\Statement $statement, string $sql) - { - $this->conn = $conn; - $this->stmt = $statement; - $this->sql = $sql; - $this->platform = $conn->getDatabasePlatform(); - } - - /** - * Binds a parameter value to the statement. - * - * The value can optionally be bound with a DBAL mapping type. - * If bound with a DBAL mapping type, the binding type is derived from the mapping - * type and the value undergoes the conversion routines of the mapping type before - * being bound. - * - * @param string|int $param The name or position of the parameter. - * @param mixed $value The value of the parameter. - * @param mixed $type Either a PDO binding type or a DBAL mapping type name or instance. - * - * @return bool TRUE on success, FALSE on failure. - * - * @throws Exception - */ - public function bindValue($param, $value, $type = ParameterType::STRING) - { - $this->params[$param] = $value; - $this->types[$param] = $type; - - $bindingType = ParameterType::STRING; - - if ($type !== null) { - if (is_string($type)) { - $type = Type::getType($type); - } - - $bindingType = $type; - - if ($type instanceof Type) { - $value = $type->convertToDatabaseValue($value, $this->platform); - $bindingType = $type->getBindingType(); - } - } - - try { - return $this->stmt->bindValue($param, $value, $bindingType); - } catch (Driver\Exception $e) { - throw $this->conn->convertException($e); - } - } - - /** - * Binds a parameter to a value by reference. - * - * Binding a parameter by reference does not support DBAL mapping types. - * - * @deprecated Use {@see bindValue()} instead. - * - * @param string|int $param The name or position of the parameter. - * @param mixed $variable The reference to the variable to bind. - * @param int $type The binding type. - * @param int|null $length Must be specified when using an OUT bind - * so that PHP allocates enough memory to hold the returned value. - * - * @return bool TRUE on success, FALSE on failure. - * - * @throws Exception - */ - public function bindParam($param, &$variable, $type = ParameterType::STRING, $length = null) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5563', - '%s is deprecated. Use bindValue() instead.', - __METHOD__, - ); - - $this->params[$param] = $variable; - $this->types[$param] = $type; - - try { - if (func_num_args() > 3) { - return $this->stmt->bindParam($param, $variable, $type, $length); - } - - return $this->stmt->bindParam($param, $variable, $type); - } catch (Driver\Exception $e) { - throw $this->conn->convertException($e); - } - } - - /** - * Executes the statement with the currently bound parameters. - * - * @deprecated Statement::execute() is deprecated, use Statement::executeQuery() or executeStatement() instead - * - * @param mixed[]|null $params - * - * @throws Exception - */ - public function execute($params = null): Result - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/4580', - '%s() is deprecated, use Statement::executeQuery() or Statement::executeStatement() instead', - __METHOD__, - ); - - if ($params !== null) { - $this->params = $params; - } - - $logger = $this->conn->getConfiguration()->getSQLLogger(); - if ($logger !== null) { - $logger->startQuery($this->sql, $this->params, $this->types); - } - - try { - return new Result( - $this->stmt->execute($params), - $this->conn, - ); - } catch (Driver\Exception $ex) { - throw $this->conn->convertExceptionDuringQuery($ex, $this->sql, $this->params, $this->types); - } finally { - if ($logger !== null) { - $logger->stopQuery(); - } - } - } - - /** - * Executes the statement with the currently bound parameters and return result. - * - * @param mixed[] $params - * - * @throws Exception - */ - public function executeQuery(array $params = []): Result - { - if (func_num_args() > 0) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::executeQuery() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - } - - if ($params === []) { - $params = null; // Workaround as long execute() exists and used internally. - } - - return $this->execute($params); - } - - /** - * Executes the statement with the currently bound parameters and return affected rows. - * - * @param mixed[] $params - * - * @throws Exception - */ - public function executeStatement(array $params = []): int - { - if (func_num_args() > 0) { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5556', - 'Passing $params to Statement::executeStatement() is deprecated. Bind parameters using' - . ' Statement::bindParam() or Statement::bindValue() instead.', - ); - } - - if ($params === []) { - $params = null; // Workaround as long execute() exists and used internally. - } - - return $this->execute($params)->rowCount(); - } - - /** - * Gets the wrapped driver statement. - * - * @return Driver\Statement - */ - public function getWrappedStatement() - { - return $this->stmt; - } -} diff --git a/vendor/doctrine/dbal/src/Tools/Console/Command/CommandCompatibility.php b/vendor/doctrine/dbal/src/Tools/Console/Command/CommandCompatibility.php deleted file mode 100644 index 562b5ce..0000000 --- a/vendor/doctrine/dbal/src/Tools/Console/Command/CommandCompatibility.php +++ /dev/null @@ -1,35 +0,0 @@ -hasReturnType()) { - /** @internal */ - trait CommandCompatibility - { - protected function execute(InputInterface $input, OutputInterface $output): int - { - return $this->doExecute($input, $output); - } - } -} else { - /** @internal */ - trait CommandCompatibility - { - /** - * {@inheritDoc} - * - * @return int - */ - protected function execute(InputInterface $input, OutputInterface $output) - { - return $this->doExecute($input, $output); - } - } -} diff --git a/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php b/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php deleted file mode 100644 index 2204b2e..0000000 --- a/vendor/doctrine/dbal/src/Tools/Console/Command/ReservedWordsCommand.php +++ /dev/null @@ -1,219 +0,0 @@ - */ - private array $keywordLists; - - private ConnectionProvider $connectionProvider; - - public function __construct(ConnectionProvider $connectionProvider) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5431', - 'ReservedWordsCommand is deprecated. Use database documentation instead.', - ); - - parent::__construct(); - - $this->connectionProvider = $connectionProvider; - - $this->keywordLists = [ - 'db2' => new DB2Keywords(), - 'mariadb102' => new MariaDb102Keywords(), - 'mysql' => new MySQLKeywords(), - 'mysql57' => new MySQL57Keywords(), - 'mysql80' => new MySQL80Keywords(), - 'mysql84' => new MySQL84Keywords(), - 'oracle' => new OracleKeywords(), - 'pgsql' => new PostgreSQL94Keywords(), - 'pgsql100' => new PostgreSQL100Keywords(), - 'sqlite' => new SQLiteKeywords(), - 'sqlserver' => new SQLServer2012Keywords(), - ]; - } - - /** - * Add or replace a keyword list. - */ - public function setKeywordList(string $name, KeywordList $keywordList): void - { - $this->keywordLists[$name] = $keywordList; - } - - /** - * If you want to add or replace a keywords list use this command. - * - * @param string $name - * @param class-string $class - * - * @return void - */ - public function setKeywordListClass($name, $class) - { - Deprecation::trigger( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/issues/4510', - 'ReservedWordsCommand::setKeywordListClass() is deprecated,' - . ' use ReservedWordsCommand::setKeywordList() instead.', - ); - - $this->keywordLists[$name] = new $class(); - } - - /** @return void */ - protected function configure() - { - $this - ->setName('dbal:reserved-words') - ->setDescription('Checks if the current database contains identifiers that are reserved.') - ->setDefinition([ - new InputOption('connection', null, InputOption::VALUE_REQUIRED, 'The named database connection'), - new InputOption( - 'list', - 'l', - InputOption::VALUE_OPTIONAL | InputOption::VALUE_IS_ARRAY, - 'Keyword-List name.', - ), - ]) - ->setHelp(<<<'EOT' -Checks if the current database contains tables and columns -with names that are identifiers in this dialect or in other SQL dialects. - -By default all supported platform keywords are checked: - - %command.full_name% - -If you want to check against specific dialects you can -pass them to the command: - - %command.full_name% -l mysql -l pgsql - -The following keyword lists are currently shipped with Doctrine: - - * db2 - * mariadb102 - * mysql - * mysql57 - * mysql80 - * mysql84 - * oracle - * pgsql - * pgsql100 - * sqlite - * sqlserver -EOT); - } - - /** @throws Exception */ - private function doExecute(InputInterface $input, OutputInterface $output): int - { - $output->writeln( - 'The dbal:reserved-words command is deprecated.' - . ' Use the documentation on the used database platform(s) instead.', - ); - $output->writeln(''); - - $conn = $this->getConnection($input); - - $keywordLists = $input->getOption('list'); - - if (is_string($keywordLists)) { - $keywordLists = [$keywordLists]; - } elseif (! is_array($keywordLists)) { - $keywordLists = []; - } - - if (count($keywordLists) === 0) { - $keywordLists = array_keys($this->keywordLists); - } - - $keywords = []; - foreach ($keywordLists as $keywordList) { - if (! isset($this->keywordLists[$keywordList])) { - throw new InvalidArgumentException( - "There exists no keyword list with name '" . $keywordList . "'. " . - 'Known lists: ' . implode(', ', array_keys($this->keywordLists)), - ); - } - - $keywords[] = $this->keywordLists[$keywordList]; - } - - $output->write( - 'Checking keyword violations for ' . implode(', ', $keywordLists) . '...', - true, - ); - - $schema = $conn->getSchemaManager()->introspectSchema(); - $visitor = new ReservedKeywordsValidator($keywords); - $schema->visit($visitor); - - $violations = $visitor->getViolations(); - if (count($violations) !== 0) { - $output->write( - 'There are ' . count($violations) . ' reserved keyword violations' - . ' in your database schema:', - true, - ); - - foreach ($violations as $violation) { - $output->write(' - ' . $violation, true); - } - - return 1; - } - - $output->write('No reserved keywords violations have been found!', true); - - return 0; - } - - private function getConnection(InputInterface $input): Connection - { - $connectionName = $input->getOption('connection'); - assert(is_string($connectionName) || $connectionName === null); - - if ($connectionName !== null) { - return $this->connectionProvider->getConnection($connectionName); - } - - return $this->connectionProvider->getDefaultConnection(); - } -} diff --git a/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php b/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php deleted file mode 100644 index 4e5681e..0000000 --- a/vendor/doctrine/dbal/src/Tools/Console/Command/RunSqlCommand.php +++ /dev/null @@ -1,120 +0,0 @@ -connectionProvider = $connectionProvider; - } - - /** @return void */ - protected function configure() - { - $this - ->setName('dbal:run-sql') - ->setDescription('Executes arbitrary SQL directly from the command line.') - ->setDefinition([ - new InputOption('connection', null, InputOption::VALUE_REQUIRED, 'The named database connection'), - new InputArgument('sql', InputArgument::REQUIRED, 'The SQL statement to execute.'), - new InputOption('depth', null, InputOption::VALUE_REQUIRED, 'Dumping depth of result set (deprecated).'), - new InputOption('force-fetch', null, InputOption::VALUE_NONE, 'Forces fetching the result.'), - ]) - ->setHelp(<<<'EOT' -The %command.name% command executes the given SQL query and -outputs the results: - -php %command.full_name% "SELECT * FROM users" -EOT); - } - - /** @throws Exception */ - private function doExecute(InputInterface $input, OutputInterface $output): int - { - $conn = $this->getConnection($input); - $io = new SymfonyStyle($input, $output); - - $sql = $input->getArgument('sql'); - - if ($sql === null) { - throw new RuntimeException("Argument 'SQL' is required in order to execute this command correctly."); - } - - assert(is_string($sql)); - - if ($input->getOption('depth') !== null) { - $io->warning('Parameter "depth" is deprecated and has no effect anymore.'); - } - - $forceFetch = $input->getOption('force-fetch'); - assert(is_bool($forceFetch)); - - if (stripos($sql, 'select') === 0 || $forceFetch) { - $this->runQuery($io, $conn, $sql); - } else { - $this->runStatement($io, $conn, $sql); - } - - return 0; - } - - private function getConnection(InputInterface $input): Connection - { - $connectionName = $input->getOption('connection'); - assert(is_string($connectionName) || $connectionName === null); - - if ($connectionName !== null) { - return $this->connectionProvider->getConnection($connectionName); - } - - return $this->connectionProvider->getDefaultConnection(); - } - - /** @throws Exception */ - private function runQuery(SymfonyStyle $io, Connection $conn, string $sql): void - { - $resultSet = $conn->fetchAllAssociative($sql); - if ($resultSet === []) { - $io->success('The query yielded an empty result set.'); - - return; - } - - $io->table(array_keys($resultSet[0]), $resultSet); - } - - /** @throws Exception */ - private function runStatement(SymfonyStyle $io, Connection $conn, string $sql): void - { - $io->success(sprintf('%d rows affected.', $conn->executeStatement($sql))); - } -} diff --git a/vendor/doctrine/dbal/src/Tools/Console/ConnectionNotFound.php b/vendor/doctrine/dbal/src/Tools/Console/ConnectionNotFound.php deleted file mode 100644 index 81ca418..0000000 --- a/vendor/doctrine/dbal/src/Tools/Console/ConnectionNotFound.php +++ /dev/null @@ -1,9 +0,0 @@ -connection = $connection; - $this->defaultConnectionName = $defaultConnectionName; - } - - public function getDefaultConnection(): Connection - { - return $this->connection; - } - - public function getConnection(string $name): Connection - { - if ($name !== $this->defaultConnectionName) { - throw new ConnectionNotFound(sprintf('Connection with name "%s" does not exist.', $name)); - } - - return $this->connection; - } -} diff --git a/vendor/doctrine/dbal/src/Tools/Console/ConsoleRunner.php b/vendor/doctrine/dbal/src/Tools/Console/ConsoleRunner.php deleted file mode 100644 index e8fa3c6..0000000 --- a/vendor/doctrine/dbal/src/Tools/Console/ConsoleRunner.php +++ /dev/null @@ -1,81 +0,0 @@ -setCatchExceptions(true); - self::addCommands($cli, $connectionProvider); - $cli->addCommands($commands); - $cli->run(); - } - - /** @return void */ - public static function addCommands(Application $cli, ConnectionProvider $connectionProvider) - { - $cli->addCommands([ - new RunSqlCommand($connectionProvider), - new ReservedWordsCommand($connectionProvider), - ]); - } - - /** - * Prints the instructions to create a configuration file - * - * @deprecated This method will be removed without replacement. - * - * @return void - */ - public static function printCliConfigTemplate() - { - echo <<<'HELP' -You are missing a "cli-config.php" or "config/cli-config.php" file in your -project, which is required to get the Doctrine-DBAL Console working. You can use the -following sample as a template: - -> */ - private array $schemeMapping; - - /** @param array> $schemeMapping An array used to map DSN schemes to DBAL drivers */ - public function __construct(array $schemeMapping = []) - { - $this->schemeMapping = $schemeMapping; - } - - /** - * @psalm-return Params - * - * @throws MalformedDsnException - */ - public function parse( - #[SensitiveParameter] - string $dsn - ): array { - // (pdo-)?sqlite3?:///... => (pdo-)?sqlite3?://localhost/... or else the URL will be invalid - $url = preg_replace('#^((?:pdo-)?sqlite3?):///#', '$1://localhost/', $dsn); - assert($url !== null); - - $url = parse_url($url); - - if ($url === false) { - throw MalformedDsnException::new(); - } - - foreach ($url as $param => $value) { - if (! is_string($value)) { - continue; - } - - $url[$param] = rawurldecode($value); - } - - $params = []; - - if (isset($url['scheme'])) { - $params['driver'] = $this->parseDatabaseUrlScheme($url['scheme']); - } - - if (isset($url['host'])) { - $params['host'] = $url['host']; - } - - if (isset($url['port'])) { - $params['port'] = $url['port']; - } - - if (isset($url['user'])) { - $params['user'] = $url['user']; - } - - if (isset($url['pass'])) { - $params['password'] = $url['pass']; - } - - if (isset($params['driver']) && is_a($params['driver'], Driver::class, true)) { - $params['driverClass'] = $params['driver']; - unset($params['driver']); - } - - $params = $this->parseDatabaseUrlPath($url, $params); - $params = $this->parseDatabaseUrlQuery($url, $params); - - return $params; - } - - /** - * Parses the given connection URL and resolves the given connection parameters. - * - * Assumes that the connection URL scheme is already parsed and resolved into the given connection parameters - * via {@see parseDatabaseUrlScheme}. - * - * @see parseDatabaseUrlScheme - * - * @param mixed[] $url The URL parts to evaluate. - * @param mixed[] $params The connection parameters to resolve. - * - * @return mixed[] The resolved connection parameters. - */ - private function parseDatabaseUrlPath(array $url, array $params): array - { - if (! isset($url['path'])) { - return $params; - } - - $url['path'] = $this->normalizeDatabaseUrlPath($url['path']); - - // If we do not have a known DBAL driver, we do not know any connection URL path semantics to evaluate - // and therefore treat the path as a regular DBAL connection URL path. - if (! isset($params['driver'])) { - return $this->parseRegularDatabaseUrlPath($url, $params); - } - - if (strpos($params['driver'], 'sqlite') !== false) { - return $this->parseSqliteDatabaseUrlPath($url, $params); - } - - return $this->parseRegularDatabaseUrlPath($url, $params); - } - - /** - * Normalizes the given connection URL path. - * - * @return string The normalized connection URL path - */ - private function normalizeDatabaseUrlPath(string $urlPath): string - { - // Trim leading slash from URL path. - return substr($urlPath, 1); - } - - /** - * Parses the query part of the given connection URL and resolves the given connection parameters. - * - * @param mixed[] $url The connection URL parts to evaluate. - * @param mixed[] $params The connection parameters to resolve. - * - * @return mixed[] The resolved connection parameters. - */ - private function parseDatabaseUrlQuery(array $url, array $params): array - { - if (! isset($url['query'])) { - return $params; - } - - $query = []; - - parse_str($url['query'], $query); // simply ingest query as extra params, e.g. charset or sslmode - - return array_merge($params, $query); // parse_str wipes existing array elements - } - - /** - * Parses the given regular connection URL and resolves the given connection parameters. - * - * Assumes that the "path" URL part is already normalized via {@see normalizeDatabaseUrlPath}. - * - * @see normalizeDatabaseUrlPath - * - * @param mixed[] $url The regular connection URL parts to evaluate. - * @param mixed[] $params The connection parameters to resolve. - * - * @return mixed[] The resolved connection parameters. - */ - private function parseRegularDatabaseUrlPath(array $url, array $params): array - { - $params['dbname'] = $url['path']; - - return $params; - } - - /** - * Parses the given SQLite connection URL and resolves the given connection parameters. - * - * Assumes that the "path" URL part is already normalized via {@see normalizeDatabaseUrlPath}. - * - * @see normalizeDatabaseUrlPath - * - * @param mixed[] $url The SQLite connection URL parts to evaluate. - * @param mixed[] $params The connection parameters to resolve. - * - * @return mixed[] The resolved connection parameters. - */ - private function parseSqliteDatabaseUrlPath(array $url, array $params): array - { - if ($url['path'] === ':memory:') { - $params['memory'] = true; - - return $params; - } - - $params['path'] = $url['path']; // pdo_sqlite driver uses 'path' instead of 'dbname' key - - return $params; - } - - /** - * Parses the scheme part from given connection URL and resolves the given connection parameters. - * - * @return string The resolved driver. - */ - private function parseDatabaseUrlScheme(string $scheme): string - { - // URL schemes must not contain underscores, but dashes are ok - $driver = str_replace('-', '_', $scheme); - - // If the driver is an alias (e.g. "postgres"), map it to the actual name ("pdo-pgsql"). - // Otherwise, let checkParams decide later if the driver exists. - return $this->schemeMapping[$driver] ?? $driver; - } -} diff --git a/vendor/doctrine/dbal/src/TransactionIsolationLevel.php b/vendor/doctrine/dbal/src/TransactionIsolationLevel.php deleted file mode 100644 index 9020343..0000000 --- a/vendor/doctrine/dbal/src/TransactionIsolationLevel.php +++ /dev/null @@ -1,33 +0,0 @@ -getClobTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - // @todo 3.0 - $value === null check to save real NULL in database - return serialize($value); - } - - /** - * {@inheritDoc} - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return null; - } - - $value = is_resource($value) ? stream_get_contents($value) : $value; - - set_error_handler(function (int $code, string $message): bool { - if ($code === E_DEPRECATED || $code === E_USER_DEPRECATED) { - return false; - } - - throw ConversionException::conversionFailedUnserialization($this->getName(), $message); - }); - - try { - return unserialize($value); - } finally { - restore_error_handler(); - } - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::ARRAY; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/AsciiStringType.php b/vendor/doctrine/dbal/src/Types/AsciiStringType.php deleted file mode 100644 index 4ea92d9..0000000 --- a/vendor/doctrine/dbal/src/Types/AsciiStringType.php +++ /dev/null @@ -1,29 +0,0 @@ -getAsciiStringTypeDeclarationSQL($column); - } - - public function getBindingType(): int - { - return ParameterType::ASCII; - } - - public function getName(): string - { - return Types::ASCII_STRING; - } -} diff --git a/vendor/doctrine/dbal/src/Types/BigIntType.php b/vendor/doctrine/dbal/src/Types/BigIntType.php deleted file mode 100644 index 8d57a11..0000000 --- a/vendor/doctrine/dbal/src/Types/BigIntType.php +++ /dev/null @@ -1,50 +0,0 @@ -getBigIntTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getBindingType() - { - return ParameterType::STRING; - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : string) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - return $value === null ? null : (string) $value; - } -} diff --git a/vendor/doctrine/dbal/src/Types/BinaryType.php b/vendor/doctrine/dbal/src/Types/BinaryType.php deleted file mode 100644 index acbbd87..0000000 --- a/vendor/doctrine/dbal/src/Types/BinaryType.php +++ /dev/null @@ -1,67 +0,0 @@ -getBinaryTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return null; - } - - if (is_string($value)) { - $fp = fopen('php://temp', 'rb+'); - assert(is_resource($fp)); - fwrite($fp, $value); - fseek($fp, 0); - $value = $fp; - } - - if (! is_resource($value)) { - throw ConversionException::conversionFailed($value, Types::BINARY); - } - - return $value; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::BINARY; - } - - /** - * {@inheritDoc} - */ - public function getBindingType() - { - return ParameterType::BINARY; - } -} diff --git a/vendor/doctrine/dbal/src/Types/BlobType.php b/vendor/doctrine/dbal/src/Types/BlobType.php deleted file mode 100644 index cfaabec..0000000 --- a/vendor/doctrine/dbal/src/Types/BlobType.php +++ /dev/null @@ -1,67 +0,0 @@ -getBlobTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return null; - } - - if (is_string($value)) { - $fp = fopen('php://temp', 'rb+'); - assert(is_resource($fp)); - fwrite($fp, $value); - fseek($fp, 0); - $value = $fp; - } - - if (! is_resource($value)) { - throw ConversionException::conversionFailed($value, Types::BLOB); - } - - return $value; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::BLOB; - } - - /** - * {@inheritDoc} - */ - public function getBindingType() - { - return ParameterType::LARGE_OBJECT; - } -} diff --git a/vendor/doctrine/dbal/src/Types/BooleanType.php b/vendor/doctrine/dbal/src/Types/BooleanType.php deleted file mode 100644 index 7dc7f3a..0000000 --- a/vendor/doctrine/dbal/src/Types/BooleanType.php +++ /dev/null @@ -1,79 +0,0 @@ -getBooleanTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - return $platform->convertBooleansToDatabaseValue($value); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : bool) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - return $platform->convertFromBoolean($value); - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::BOOLEAN; - } - - /** - * {@inheritDoc} - */ - public function getBindingType() - { - return ParameterType::BOOLEAN; - } - - /** - * @deprecated - * - * @return bool - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - // We require a commented boolean type in order to distinguish between - // boolean and smallint as both (have to) map to the same native type. - return $platform instanceof DB2Platform; - } -} diff --git a/vendor/doctrine/dbal/src/Types/ConversionException.php b/vendor/doctrine/dbal/src/Types/ConversionException.php deleted file mode 100644 index 154b06d..0000000 --- a/vendor/doctrine/dbal/src/Types/ConversionException.php +++ /dev/null @@ -1,123 +0,0 @@ - 32 ? substr($value, 0, 20) . '...' : $value; - - return new self('Could not convert database value "' . $value . '" to Doctrine Type ' . $toType, 0, $previous); - } - - /** - * Thrown when a Database to Doctrine Type Conversion fails and we can make a statement - * about the expected format. - * - * @param mixed $value - * @param string $toType - * @param string $expectedFormat - * - * @return ConversionException - */ - public static function conversionFailedFormat($value, $toType, $expectedFormat, ?Throwable $previous = null) - { - $value = strlen($value) > 32 ? substr($value, 0, 20) . '...' : $value; - - return new self( - 'Could not convert database value "' . $value . '" to Doctrine Type ' . - $toType . '. Expected format: ' . $expectedFormat, - 0, - $previous, - ); - } - - /** - * Thrown when the PHP value passed to the converter was not of the expected type. - * - * @param mixed $value - * @param string $toType - * @param string[] $possibleTypes - * - * @return ConversionException - */ - public static function conversionFailedInvalidType( - $value, - $toType, - array $possibleTypes, - ?Throwable $previous = null - ) { - if (is_scalar($value) || $value === null) { - return new self(sprintf( - 'Could not convert PHP value %s to type %s. Expected one of the following types: %s', - var_export($value, true), - $toType, - implode(', ', $possibleTypes), - ), 0, $previous); - } - - return new self(sprintf( - 'Could not convert PHP value of type %s to type %s. Expected one of the following types: %s', - is_object($value) ? get_class($value) : gettype($value), - $toType, - implode(', ', $possibleTypes), - ), 0, $previous); - } - - /** - * @param mixed $value - * @param string $format - * @param string $error - * - * @return ConversionException - */ - public static function conversionFailedSerialization($value, $format, $error /*, ?Throwable $previous = null */) - { - $actualType = is_object($value) ? get_class($value) : gettype($value); - - return new self(sprintf( - "Could not convert PHP type '%s' to '%s', as an '%s' error was triggered by the serialization", - $actualType, - $format, - $error, - ), 0, func_num_args() >= 4 ? func_get_arg(3) : null); - } - - public static function conversionFailedUnserialization(string $format, string $error): self - { - return new self(sprintf( - "Could not convert database value to '%s' as an error was triggered by the unserialization: '%s'", - $format, - $error, - )); - } -} diff --git a/vendor/doctrine/dbal/src/Types/DateImmutableType.php b/vendor/doctrine/dbal/src/Types/DateImmutableType.php deleted file mode 100644 index da96b69..0000000 --- a/vendor/doctrine/dbal/src/Types/DateImmutableType.php +++ /dev/null @@ -1,92 +0,0 @@ -format($platform->getDateFormatString()); - } - - throw ConversionException::conversionFailedInvalidType( - $value, - $this->getName(), - ['null', DateTimeImmutable::class], - ); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeImmutable) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null || $value instanceof DateTimeImmutable) { - return $value; - } - - $dateTime = DateTimeImmutable::createFromFormat('!' . $platform->getDateFormatString(), $value); - - if ($dateTime === false) { - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getDateFormatString(), - ); - } - - return $dateTime; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/DateIntervalType.php b/vendor/doctrine/dbal/src/Types/DateIntervalType.php deleted file mode 100644 index 1630dc5..0000000 --- a/vendor/doctrine/dbal/src/Types/DateIntervalType.php +++ /dev/null @@ -1,110 +0,0 @@ -getStringTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : string) - * - * @template T - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return null; - } - - if ($value instanceof DateInterval) { - return $value->format(self::FORMAT); - } - - throw ConversionException::conversionFailedInvalidType($value, $this->getName(), ['null', DateInterval::class]); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateInterval) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null || $value instanceof DateInterval) { - return $value; - } - - $negative = false; - - if (isset($value[0]) && ($value[0] === '+' || $value[0] === '-')) { - $negative = $value[0] === '-'; - $value = substr($value, 1); - } - - try { - $interval = new DateInterval($value); - - if ($negative) { - $interval->invert = 1; - } - - return $interval; - } catch (Throwable $exception) { - throw ConversionException::conversionFailedFormat($value, $this->getName(), self::FORMAT, $exception); - } - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php b/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php deleted file mode 100644 index a8c7fec..0000000 --- a/vendor/doctrine/dbal/src/Types/DateTimeImmutableType.php +++ /dev/null @@ -1,98 +0,0 @@ -format($platform->getDateTimeFormatString()); - } - - throw ConversionException::conversionFailedInvalidType( - $value, - $this->getName(), - ['null', DateTimeImmutable::class], - ); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeImmutable) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null || $value instanceof DateTimeImmutable) { - return $value; - } - - $dateTime = DateTimeImmutable::createFromFormat($platform->getDateTimeFormatString(), $value); - - if ($dateTime !== false) { - return $dateTime; - } - - try { - return new DateTimeImmutable($value); - } catch (Exception $e) { - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getDateTimeFormatString(), - $e, - ); - } - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/DateTimeType.php b/vendor/doctrine/dbal/src/Types/DateTimeType.php deleted file mode 100644 index 3ff592a..0000000 --- a/vendor/doctrine/dbal/src/Types/DateTimeType.php +++ /dev/null @@ -1,115 +0,0 @@ -getDateTimeTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : string) - * - * @template T - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return $value; - } - - if ($value instanceof DateTimeImmutable) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6017', - 'Passing an instance of %s is deprecated, use %s::%s() instead.', - get_class($value), - DateTimeImmutableType::class, - __FUNCTION__, - ); - } - - if ($value instanceof DateTimeInterface) { - return $value->format($platform->getDateTimeFormatString()); - } - - throw ConversionException::conversionFailedInvalidType( - $value, - $this->getName(), - ['null', DateTime::class, DateTimeImmutable::class], - ); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeInterface) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value instanceof DateTimeImmutable) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6017', - 'Passing an instance of %s is deprecated, use %s::%s() instead.', - get_class($value), - DateTimeImmutableType::class, - __FUNCTION__, - ); - } - - if ($value === null || $value instanceof DateTimeInterface) { - return $value; - } - - $dateTime = DateTime::createFromFormat($platform->getDateTimeFormatString(), $value); - - if ($dateTime !== false) { - return $dateTime; - } - - try { - return new DateTime($value); - } catch (Exception $e) { - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getDateTimeFormatString(), - $e, - ); - } - } -} diff --git a/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php b/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php deleted file mode 100644 index e700f68..0000000 --- a/vendor/doctrine/dbal/src/Types/DateTimeTzImmutableType.php +++ /dev/null @@ -1,92 +0,0 @@ -format($platform->getDateTimeTzFormatString()); - } - - throw ConversionException::conversionFailedInvalidType( - $value, - $this->getName(), - ['null', DateTimeImmutable::class], - ); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeImmutable) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null || $value instanceof DateTimeImmutable) { - return $value; - } - - $dateTime = DateTimeImmutable::createFromFormat($platform->getDateTimeTzFormatString(), $value); - - if ($dateTime !== false) { - return $dateTime; - } - - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getDateTimeTzFormatString(), - ); - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/DateTimeTzType.php b/vendor/doctrine/dbal/src/Types/DateTimeTzType.php deleted file mode 100644 index b3b5db8..0000000 --- a/vendor/doctrine/dbal/src/Types/DateTimeTzType.php +++ /dev/null @@ -1,122 +0,0 @@ -getDateTimeTzTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : string) - * - * @template T - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return $value; - } - - if ($value instanceof DateTimeImmutable) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6017', - 'Passing an instance of %s is deprecated, use %s::%s() instead.', - get_class($value), - DateTimeTzImmutableType::class, - __FUNCTION__, - ); - } - - if ($value instanceof DateTimeInterface) { - return $value->format($platform->getDateTimeTzFormatString()); - } - - throw ConversionException::conversionFailedInvalidType( - $value, - $this->getName(), - ['null', DateTime::class], - ); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeInterface) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value instanceof DateTimeImmutable) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6017', - 'Passing an instance of %s is deprecated, use %s::%s() instead.', - get_class($value), - DateTimeTzImmutableType::class, - __FUNCTION__, - ); - } - - if ($value === null || $value instanceof DateTimeInterface) { - return $value; - } - - $dateTime = DateTime::createFromFormat($platform->getDateTimeTzFormatString(), $value); - if ($dateTime !== false) { - return $dateTime; - } - - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getDateTimeTzFormatString(), - ); - } -} diff --git a/vendor/doctrine/dbal/src/Types/DateType.php b/vendor/doctrine/dbal/src/Types/DateType.php deleted file mode 100644 index 842e8bd..0000000 --- a/vendor/doctrine/dbal/src/Types/DateType.php +++ /dev/null @@ -1,104 +0,0 @@ -getDateTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @psalm-param T $value - * - * @return (T is null ? null : string) - * - * @template T - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return $value; - } - - if ($value instanceof DateTimeInterface) { - if ($value instanceof DateTimeImmutable) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6017', - 'Passing an instance of %s is deprecated, use %s::%s() instead.', - get_class($value), - DateImmutableType::class, - __FUNCTION__, - ); - } - - return $value->format($platform->getDateFormatString()); - } - - throw ConversionException::conversionFailedInvalidType($value, $this->getName(), ['null', DateTime::class]); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeInterface) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value instanceof DateTimeImmutable) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6017', - 'Passing an instance of %s is deprecated, use %s::%s() instead.', - get_class($value), - DateImmutableType::class, - __FUNCTION__, - ); - } - - if ($value === null || $value instanceof DateTimeInterface) { - return $value; - } - - $dateTime = DateTime::createFromFormat('!' . $platform->getDateFormatString(), $value); - if ($dateTime !== false) { - return $dateTime; - } - - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getDateFormatString(), - ); - } -} diff --git a/vendor/doctrine/dbal/src/Types/DecimalType.php b/vendor/doctrine/dbal/src/Types/DecimalType.php deleted file mode 100644 index 308134b..0000000 --- a/vendor/doctrine/dbal/src/Types/DecimalType.php +++ /dev/null @@ -1,47 +0,0 @@ -getDecimalTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - // Some drivers starting from PHP 8.1 can represent decimals as float/int - // See also: https://github.com/doctrine/dbal/pull/4818 - if ((PHP_VERSION_ID >= 80100 || $platform instanceof SqlitePlatform) && (is_float($value) || is_int($value))) { - return (string) $value; - } - - return $value; - } -} diff --git a/vendor/doctrine/dbal/src/Types/FloatType.php b/vendor/doctrine/dbal/src/Types/FloatType.php deleted file mode 100644 index e01b774..0000000 --- a/vendor/doctrine/dbal/src/Types/FloatType.php +++ /dev/null @@ -1,38 +0,0 @@ -getFloatDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : float) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - return $value === null ? null : (float) $value; - } -} diff --git a/vendor/doctrine/dbal/src/Types/GuidType.php b/vendor/doctrine/dbal/src/Types/GuidType.php deleted file mode 100644 index 3c8b7f4..0000000 --- a/vendor/doctrine/dbal/src/Types/GuidType.php +++ /dev/null @@ -1,45 +0,0 @@ -getGuidTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::GUID; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return ! $platform->hasNativeGuidType(); - } -} diff --git a/vendor/doctrine/dbal/src/Types/IntegerType.php b/vendor/doctrine/dbal/src/Types/IntegerType.php deleted file mode 100644 index 7c2d711..0000000 --- a/vendor/doctrine/dbal/src/Types/IntegerType.php +++ /dev/null @@ -1,50 +0,0 @@ -getIntegerTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : int) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - return $value === null ? null : (int) $value; - } - - /** - * {@inheritDoc} - */ - public function getBindingType() - { - return ParameterType::INTEGER; - } -} diff --git a/vendor/doctrine/dbal/src/Types/JsonType.php b/vendor/doctrine/dbal/src/Types/JsonType.php deleted file mode 100644 index 27f872c..0000000 --- a/vendor/doctrine/dbal/src/Types/JsonType.php +++ /dev/null @@ -1,96 +0,0 @@ -getJsonTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : string) - * - * @template T - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return null; - } - - try { - return json_encode($value, JSON_THROW_ON_ERROR | JSON_PRESERVE_ZERO_FRACTION); - } catch (JsonException $e) { - throw ConversionException::conversionFailedSerialization($value, 'json', $e->getMessage(), $e); - } - } - - /** - * {@inheritDoc} - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null || $value === '') { - return null; - } - - if (is_resource($value)) { - $value = stream_get_contents($value); - } - - try { - return json_decode($value, true, 512, JSON_THROW_ON_ERROR); - } catch (JsonException $e) { - throw ConversionException::conversionFailed($value, $this->getName(), $e); - } - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::JSON; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return ! $platform->hasNativeJsonType(); - } -} diff --git a/vendor/doctrine/dbal/src/Types/ObjectType.php b/vendor/doctrine/dbal/src/Types/ObjectType.php deleted file mode 100644 index 497e9c4..0000000 --- a/vendor/doctrine/dbal/src/Types/ObjectType.php +++ /dev/null @@ -1,88 +0,0 @@ -getClobTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param mixed $value - * - * @return string - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - return serialize($value); - } - - /** - * {@inheritDoc} - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return null; - } - - $value = is_resource($value) ? stream_get_contents($value) : $value; - - set_error_handler(function (int $code, string $message): bool { - throw ConversionException::conversionFailedUnserialization($this->getName(), $message); - }); - - try { - return unserialize($value); - } finally { - restore_error_handler(); - } - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::OBJECT; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/PhpDateTimeMappingType.php b/vendor/doctrine/dbal/src/Types/PhpDateTimeMappingType.php deleted file mode 100644 index 4565850..0000000 --- a/vendor/doctrine/dbal/src/Types/PhpDateTimeMappingType.php +++ /dev/null @@ -1,12 +0,0 @@ -getClobTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param mixed $value - * - * @return string|null - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - if (! is_array($value) || count($value) === 0) { - return null; - } - - return implode(',', $value); - } - - /** - * {@inheritDoc} - * - * @param mixed $value - * - * @return list - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return []; - } - - $value = is_resource($value) ? stream_get_contents($value) : $value; - - return explode(',', $value); - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::SIMPLE_ARRAY; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/SmallIntType.php b/vendor/doctrine/dbal/src/Types/SmallIntType.php deleted file mode 100644 index 2c8567a..0000000 --- a/vendor/doctrine/dbal/src/Types/SmallIntType.php +++ /dev/null @@ -1,50 +0,0 @@ -getSmallIntTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : int) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - return $value === null ? null : (int) $value; - } - - /** - * {@inheritDoc} - */ - public function getBindingType() - { - return ParameterType::INTEGER; - } -} diff --git a/vendor/doctrine/dbal/src/Types/StringType.php b/vendor/doctrine/dbal/src/Types/StringType.php deleted file mode 100644 index 1992e8f..0000000 --- a/vendor/doctrine/dbal/src/Types/StringType.php +++ /dev/null @@ -1,27 +0,0 @@ -getStringTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::STRING; - } -} diff --git a/vendor/doctrine/dbal/src/Types/TextType.php b/vendor/doctrine/dbal/src/Types/TextType.php deleted file mode 100644 index d060bb2..0000000 --- a/vendor/doctrine/dbal/src/Types/TextType.php +++ /dev/null @@ -1,38 +0,0 @@ -getClobTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - return is_resource($value) ? stream_get_contents($value) : $value; - } - - /** - * {@inheritDoc} - */ - public function getName() - { - return Types::TEXT; - } -} diff --git a/vendor/doctrine/dbal/src/Types/TimeImmutableType.php b/vendor/doctrine/dbal/src/Types/TimeImmutableType.php deleted file mode 100644 index 9373f59..0000000 --- a/vendor/doctrine/dbal/src/Types/TimeImmutableType.php +++ /dev/null @@ -1,92 +0,0 @@ -format($platform->getTimeFormatString()); - } - - throw ConversionException::conversionFailedInvalidType( - $value, - $this->getName(), - ['null', DateTimeImmutable::class], - ); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeImmutable) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null || $value instanceof DateTimeImmutable) { - return $value; - } - - $dateTime = DateTimeImmutable::createFromFormat('!' . $platform->getTimeFormatString(), $value); - - if ($dateTime !== false) { - return $dateTime; - } - - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getTimeFormatString(), - ); - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/TimeType.php b/vendor/doctrine/dbal/src/Types/TimeType.php deleted file mode 100644 index 7356fc2..0000000 --- a/vendor/doctrine/dbal/src/Types/TimeType.php +++ /dev/null @@ -1,104 +0,0 @@ -getTimeTypeDeclarationSQL($column); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : string) - * - * @template T - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - if ($value === null) { - return $value; - } - - if ($value instanceof DateTimeImmutable) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6017', - 'Passing an instance of %s is deprecated, use %s::%s() instead.', - get_class($value), - TimeImmutableType::class, - __FUNCTION__, - ); - } - - if ($value instanceof DateTimeInterface) { - return $value->format($platform->getTimeFormatString()); - } - - throw ConversionException::conversionFailedInvalidType($value, $this->getName(), ['null', DateTime::class]); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeInterface) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value instanceof DateTimeImmutable) { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/6017', - 'Passing an instance of %s is deprecated, use %s::%s() instead.', - get_class($value), - TimeImmutableType::class, - __FUNCTION__, - ); - } - - if ($value === null || $value instanceof DateTimeInterface) { - return $value; - } - - $dateTime = DateTime::createFromFormat('!' . $platform->getTimeFormatString(), $value); - if ($dateTime !== false) { - return $dateTime; - } - - throw ConversionException::conversionFailedFormat( - $value, - $this->getName(), - $platform->getTimeFormatString(), - ); - } -} diff --git a/vendor/doctrine/dbal/src/Types/Type.php b/vendor/doctrine/dbal/src/Types/Type.php deleted file mode 100644 index 7613811..0000000 --- a/vendor/doctrine/dbal/src/Types/Type.php +++ /dev/null @@ -1,296 +0,0 @@ - ArrayType::class, - Types::ASCII_STRING => AsciiStringType::class, - Types::BIGINT => BigIntType::class, - Types::BINARY => BinaryType::class, - Types::BLOB => BlobType::class, - Types::BOOLEAN => BooleanType::class, - Types::DATE_MUTABLE => DateType::class, - Types::DATE_IMMUTABLE => DateImmutableType::class, - Types::DATEINTERVAL => DateIntervalType::class, - Types::DATETIME_MUTABLE => DateTimeType::class, - Types::DATETIME_IMMUTABLE => DateTimeImmutableType::class, - Types::DATETIMETZ_MUTABLE => DateTimeTzType::class, - Types::DATETIMETZ_IMMUTABLE => DateTimeTzImmutableType::class, - Types::DECIMAL => DecimalType::class, - Types::FLOAT => FloatType::class, - Types::GUID => GuidType::class, - Types::INTEGER => IntegerType::class, - Types::JSON => JsonType::class, - Types::OBJECT => ObjectType::class, - Types::SIMPLE_ARRAY => SimpleArrayType::class, - Types::SMALLINT => SmallIntType::class, - Types::STRING => StringType::class, - Types::TEXT => TextType::class, - Types::TIME_MUTABLE => TimeType::class, - Types::TIME_IMMUTABLE => TimeImmutableType::class, - ]; - - private static ?TypeRegistry $typeRegistry = null; - - /** @internal Do not instantiate directly - use {@see Type::addType()} method instead. */ - final public function __construct() - { - } - - /** - * Converts a value from its PHP representation to its database representation - * of this type. - * - * @param mixed $value The value to convert. - * @param AbstractPlatform $platform The currently used database platform. - * - * @return mixed The database representation of the value. - * - * @throws ConversionException - */ - public function convertToDatabaseValue($value, AbstractPlatform $platform) - { - return $value; - } - - /** - * Converts a value from its database representation to its PHP representation - * of this type. - * - * @param mixed $value The value to convert. - * @param AbstractPlatform $platform The currently used database platform. - * - * @return mixed The PHP representation of the value. - * - * @throws ConversionException - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - return $value; - } - - /** - * Gets the SQL declaration snippet for a column of this type. - * - * @param mixed[] $column The column definition - * @param AbstractPlatform $platform The currently used database platform. - * - * @return string - */ - abstract public function getSQLDeclaration(array $column, AbstractPlatform $platform); - - /** - * Gets the name of this type. - * - * @deprecated this method will be removed in Doctrine DBAL 4.0, - * use {@see TypeRegistry::lookupName()} instead. - * - * @return string - */ - abstract public function getName(); - - final public static function getTypeRegistry(): TypeRegistry - { - return self::$typeRegistry ??= self::createTypeRegistry(); - } - - private static function createTypeRegistry(): TypeRegistry - { - $instances = []; - - foreach (self::BUILTIN_TYPES_MAP as $name => $class) { - $instances[$name] = new $class(); - } - - return new TypeRegistry($instances); - } - - /** - * Factory method to create type instances. - * Type instances are implemented as flyweights. - * - * @param string $name The name of the type (as returned by getName()). - * - * @return Type - * - * @throws Exception - */ - public static function getType($name) - { - return self::getTypeRegistry()->get($name); - } - - /** - * Finds a name for the given type. - * - * @throws Exception - */ - public static function lookupName(self $type): string - { - return self::getTypeRegistry()->lookupName($type); - } - - /** - * Adds a custom type to the type map. - * - * @param string $name The name of the type. This should correspond to what getName() returns. - * @param class-string $className The class name of the custom type. - * - * @return void - * - * @throws Exception - */ - public static function addType($name, $className) - { - self::getTypeRegistry()->register($name, new $className()); - } - - /** - * Checks if exists support for a type. - * - * @param string $name The name of the type. - * - * @return bool TRUE if type is supported; FALSE otherwise. - */ - public static function hasType($name) - { - return self::getTypeRegistry()->has($name); - } - - /** - * Overrides an already defined type to use a different implementation. - * - * @param string $name - * @param class-string $className - * - * @return void - * - * @throws Exception - */ - public static function overrideType($name, $className) - { - self::getTypeRegistry()->override($name, new $className()); - } - - /** - * Gets the (preferred) binding type for values of this type that - * can be used when binding parameters to prepared statements. - * - * This method should return one of the {@see ParameterType} constants. - * - * @return int - */ - public function getBindingType() - { - return ParameterType::STRING; - } - - /** - * Gets the types array map which holds all registered types and the corresponding - * type class - * - * @return array - */ - public static function getTypesMap() - { - return array_map( - static function (Type $type): string { - return get_class($type); - }, - self::getTypeRegistry()->getMap(), - ); - } - - /** - * Does working with this column require SQL conversion functions? - * - * This is a metadata function that is required for example in the ORM. - * Usage of {@see convertToDatabaseValueSQL} and - * {@see convertToPHPValueSQL} works for any type and mostly - * does nothing. This method can additionally be used for optimization purposes. - * - * @deprecated Consumers should call {@see convertToDatabaseValueSQL} and {@see convertToPHPValueSQL} - * regardless of the type. - * - * @return bool - */ - public function canRequireSQLConversion() - { - return false; - } - - /** - * Modifies the SQL expression (identifier, parameter) to convert to a database value. - * - * @param string $sqlExpr - * - * @return string - */ - public function convertToDatabaseValueSQL($sqlExpr, AbstractPlatform $platform) - { - return $sqlExpr; - } - - /** - * Modifies the SQL expression (identifier, parameter) to convert to a PHP value. - * - * @param string $sqlExpr - * @param AbstractPlatform $platform - * - * @return string - */ - public function convertToPHPValueSQL($sqlExpr, $platform) - { - return $sqlExpr; - } - - /** - * Gets an array of database types that map to this Doctrine type. - * - * @return string[] - */ - public function getMappedDatabaseTypes(AbstractPlatform $platform) - { - return []; - } - - /** - * If this Doctrine Type maps to an already mapped database type, - * reverse schema engineering can't tell them apart. You need to mark - * one of those types as commented, which will have Doctrine use an SQL - * comment to typehint the actual Doctrine Type. - * - * @deprecated - * - * @return bool - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return false; - } -} diff --git a/vendor/doctrine/dbal/src/Types/TypeRegistry.php b/vendor/doctrine/dbal/src/Types/TypeRegistry.php deleted file mode 100644 index 9b64c6f..0000000 --- a/vendor/doctrine/dbal/src/Types/TypeRegistry.php +++ /dev/null @@ -1,127 +0,0 @@ - Map of type names and their corresponding flyweight objects. */ - private array $instances; - /** @var array */ - private array $instancesReverseIndex; - - /** @param array $instances */ - public function __construct(array $instances = []) - { - $this->instances = []; - $this->instancesReverseIndex = []; - foreach ($instances as $name => $type) { - $this->register($name, $type); - } - } - - /** - * Finds a type by the given name. - * - * @throws Exception - */ - public function get(string $name): Type - { - $type = $this->instances[$name] ?? null; - if ($type === null) { - throw Exception::unknownColumnType($name); - } - - return $type; - } - - /** - * Finds a name for the given type. - * - * @throws Exception - */ - public function lookupName(Type $type): string - { - $name = $this->findTypeName($type); - - if ($name === null) { - throw Exception::typeNotRegistered($type); - } - - return $name; - } - - /** - * Checks if there is a type of the given name. - */ - public function has(string $name): bool - { - return isset($this->instances[$name]); - } - - /** - * Registers a custom type to the type map. - * - * @throws Exception - */ - public function register(string $name, Type $type): void - { - if (isset($this->instances[$name])) { - throw Exception::typeExists($name); - } - - if ($this->findTypeName($type) !== null) { - throw Exception::typeAlreadyRegistered($type); - } - - $this->instances[$name] = $type; - $this->instancesReverseIndex[spl_object_id($type)] = $name; - } - - /** - * Overrides an already defined type to use a different implementation. - * - * @throws Exception - */ - public function override(string $name, Type $type): void - { - $origType = $this->instances[$name] ?? null; - if ($origType === null) { - throw Exception::typeNotFound($name); - } - - if (($this->findTypeName($type) ?? $name) !== $name) { - throw Exception::typeAlreadyRegistered($type); - } - - unset($this->instancesReverseIndex[spl_object_id($origType)]); - $this->instances[$name] = $type; - $this->instancesReverseIndex[spl_object_id($type)] = $name; - } - - /** - * Gets the map of all registered types and their corresponding type instances. - * - * @internal - * - * @return array - */ - public function getMap(): array - { - return $this->instances; - } - - private function findTypeName(Type $type): ?string - { - return $this->instancesReverseIndex[spl_object_id($type)] ?? null; - } -} diff --git a/vendor/doctrine/dbal/src/Types/Types.php b/vendor/doctrine/dbal/src/Types/Types.php deleted file mode 100644 index 54b0dfe..0000000 --- a/vendor/doctrine/dbal/src/Types/Types.php +++ /dev/null @@ -1,47 +0,0 @@ -format($platform->getDateTimeFormatString()); - } - - throw ConversionException::conversionFailedInvalidType( - $value, - $this->getName(), - ['null', DateTimeImmutable::class], - ); - } - - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeImmutable) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null || $value instanceof DateTimeImmutable) { - return $value; - } - - try { - $dateTime = new DateTimeImmutable($value); - } catch (Exception $e) { - throw ConversionException::conversionFailed($value, $this->getName(), $e); - } - - return $dateTime; - } - - /** - * {@inheritDoc} - * - * @deprecated - */ - public function requiresSQLCommentHint(AbstractPlatform $platform) - { - Deprecation::triggerIfCalledFromOutside( - 'doctrine/dbal', - 'https://github.com/doctrine/dbal/pull/5509', - '%s is deprecated.', - __METHOD__, - ); - - return true; - } -} diff --git a/vendor/doctrine/dbal/src/Types/VarDateTimeType.php b/vendor/doctrine/dbal/src/Types/VarDateTimeType.php deleted file mode 100644 index 35ad403..0000000 --- a/vendor/doctrine/dbal/src/Types/VarDateTimeType.php +++ /dev/null @@ -1,42 +0,0 @@ - 0 it is necessary to use this type. - */ -class VarDateTimeType extends DateTimeType -{ - /** - * {@inheritDoc} - * - * @param T $value - * - * @return (T is null ? null : DateTimeInterface) - * - * @template T - */ - public function convertToPHPValue($value, AbstractPlatform $platform) - { - if ($value === null || $value instanceof DateTime) { - return $value; - } - - try { - $dateTime = new DateTime($value); - } catch (Exception $e) { - throw ConversionException::conversionFailed($value, $this->getName(), $e); - } - - return $dateTime; - } -} diff --git a/vendor/doctrine/dbal/src/VersionAwarePlatformDriver.php b/vendor/doctrine/dbal/src/VersionAwarePlatformDriver.php deleted file mode 100644 index ffcfcd6..0000000 --- a/vendor/doctrine/dbal/src/VersionAwarePlatformDriver.php +++ /dev/null @@ -1,30 +0,0 @@ - $count) { - echo $identifier . " was triggered " . $count . " times\n"; -} -``` - -### Suppressing Specific Deprecations - -Disable triggering about specific deprecations: - -```php -\Doctrine\Deprecations\Deprecation::ignoreDeprecations("https://link/to/deprecations-description-identifier"); -``` - -Disable all deprecations from a package - -```php -\Doctrine\Deprecations\Deprecation::ignorePackage("doctrine/orm"); -``` - -### Other Operations - -When used within PHPUnit or other tools that could collect multiple instances of the same deprecations -the deduplication can be disabled: - -```php -\Doctrine\Deprecations\Deprecation::withoutDeduplication(); -``` - -Disable deprecation tracking again: - -```php -\Doctrine\Deprecations\Deprecation::disable(); -``` - -## Usage from a library/producer perspective: - -When you want to unconditionally trigger a deprecation even when called -from the library itself then the `trigger` method is the way to go: - -```php -\Doctrine\Deprecations\Deprecation::trigger( - "doctrine/orm", - "https://link/to/deprecations-description", - "message" -); -``` - -If variable arguments are provided at the end, they are used with `sprintf` on -the message. - -```php -\Doctrine\Deprecations\Deprecation::trigger( - "doctrine/orm", - "https://github.com/doctrine/orm/issue/1234", - "message %s %d", - "foo", - 1234 -); -``` - -When you want to trigger a deprecation only when it is called by a function -outside of the current package, but not trigger when the package itself is the cause, -then use: - -```php -\Doctrine\Deprecations\Deprecation::triggerIfCalledFromOutside( - "doctrine/orm", - "https://link/to/deprecations-description", - "message" -); -``` - -Based on the issue link each deprecation message is only triggered once per -request. - -A limited stacktrace is included in the deprecation message to find the -offending location. - -Note: A producer/library should never call `Deprecation::enableWith` methods -and leave the decision how to handle deprecations to application and -frameworks. - -## Usage in PHPUnit tests - -There is a `VerifyDeprecations` trait that you can use to make assertions on -the occurrence of deprecations within a test. - -```php -use Doctrine\Deprecations\PHPUnit\VerifyDeprecations; - -class MyTest extends TestCase -{ - use VerifyDeprecations; - - public function testSomethingDeprecation() - { - $this->expectDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234'); - - triggerTheCodeWithDeprecation(); - } - - public function testSomethingDeprecationFixed() - { - $this->expectNoDeprecationWithIdentifier('https://github.com/doctrine/orm/issue/1234'); - - triggerTheCodeWithoutDeprecation(); - } -} -``` - -## What is a deprecation identifier? - -An identifier for deprecations is just a link to any resource, most often a -Github Issue or Pull Request explaining the deprecation and potentially its -alternative. diff --git a/vendor/doctrine/deprecations/composer.json b/vendor/doctrine/deprecations/composer.json deleted file mode 100644 index f8319f9..0000000 --- a/vendor/doctrine/deprecations/composer.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "doctrine/deprecations", - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "license": "MIT", - "type": "library", - "homepage": "https://www.doctrine-project.org/", - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "autoload-dev": { - "psr-4": { - "DeprecationTests\\": "test_fixtures/src", - "Doctrine\\Foo\\": "test_fixtures/vendor/doctrine/foo" - } - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - } - } -} diff --git a/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php b/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php deleted file mode 100644 index bad5070..0000000 --- a/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/Deprecation.php +++ /dev/null @@ -1,313 +0,0 @@ -|null */ - private static $type; - - /** @var LoggerInterface|null */ - private static $logger; - - /** @var array */ - private static $ignoredPackages = []; - - /** @var array */ - private static $triggeredDeprecations = []; - - /** @var array */ - private static $ignoredLinks = []; - - /** @var bool */ - private static $deduplication = true; - - /** - * Trigger a deprecation for the given package and identfier. - * - * The link should point to a Github issue or Wiki entry detailing the - * deprecation. It is additionally used to de-duplicate the trigger of the - * same deprecation during a request. - * - * @param float|int|string $args - */ - public static function trigger(string $package, string $link, string $message, ...$args): void - { - $type = self::$type ?? self::getTypeFromEnv(); - - if ($type === self::TYPE_NONE) { - return; - } - - if (isset(self::$ignoredLinks[$link])) { - return; - } - - if (array_key_exists($link, self::$triggeredDeprecations)) { - self::$triggeredDeprecations[$link]++; - } else { - self::$triggeredDeprecations[$link] = 1; - } - - if (self::$deduplication === true && self::$triggeredDeprecations[$link] > 1) { - return; - } - - if (isset(self::$ignoredPackages[$package])) { - return; - } - - $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); - - $message = sprintf($message, ...$args); - - self::delegateTriggerToBackend($message, $backtrace, $link, $package); - } - - /** - * Trigger a deprecation for the given package and identifier when called from outside. - * - * "Outside" means we assume that $package is currently installed as a - * dependency and the caller is not a file in that package. When $package - * is installed as a root package then deprecations triggered from the - * tests folder are also considered "outside". - * - * This deprecation method assumes that you are using Composer to install - * the dependency and are using the default /vendor/ folder and not a - * Composer plugin to change the install location. The assumption is also - * that $package is the exact composer packge name. - * - * Compared to {@link trigger()} this method causes some overhead when - * deprecation tracking is enabled even during deduplication, because it - * needs to call {@link debug_backtrace()} - * - * @param float|int|string $args - */ - public static function triggerIfCalledFromOutside(string $package, string $link, string $message, ...$args): void - { - $type = self::$type ?? self::getTypeFromEnv(); - - if ($type === self::TYPE_NONE) { - return; - } - - $backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2); - - // first check that the caller is not from a tests folder, in which case we always let deprecations pass - if (isset($backtrace[1]['file'], $backtrace[0]['file']) && strpos($backtrace[1]['file'], DIRECTORY_SEPARATOR . 'tests' . DIRECTORY_SEPARATOR) === false) { - $path = DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $package) . DIRECTORY_SEPARATOR; - - if (strpos($backtrace[0]['file'], $path) === false) { - return; - } - - if (strpos($backtrace[1]['file'], $path) !== false) { - return; - } - } - - if (isset(self::$ignoredLinks[$link])) { - return; - } - - if (array_key_exists($link, self::$triggeredDeprecations)) { - self::$triggeredDeprecations[$link]++; - } else { - self::$triggeredDeprecations[$link] = 1; - } - - if (self::$deduplication === true && self::$triggeredDeprecations[$link] > 1) { - return; - } - - if (isset(self::$ignoredPackages[$package])) { - return; - } - - $message = sprintf($message, ...$args); - - self::delegateTriggerToBackend($message, $backtrace, $link, $package); - } - - /** - * @param list $backtrace - */ - private static function delegateTriggerToBackend(string $message, array $backtrace, string $link, string $package): void - { - $type = self::$type ?? self::getTypeFromEnv(); - - if (($type & self::TYPE_PSR_LOGGER) > 0) { - $context = [ - 'file' => $backtrace[0]['file'] ?? null, - 'line' => $backtrace[0]['line'] ?? null, - 'package' => $package, - 'link' => $link, - ]; - - assert(self::$logger !== null); - - self::$logger->notice($message, $context); - } - - if (! (($type & self::TYPE_TRIGGER_ERROR) > 0)) { - return; - } - - $message .= sprintf( - ' (%s:%d called by %s:%d, %s, package %s)', - self::basename($backtrace[0]['file'] ?? 'native code'), - $backtrace[0]['line'] ?? 0, - self::basename($backtrace[1]['file'] ?? 'native code'), - $backtrace[1]['line'] ?? 0, - $link, - $package - ); - - @trigger_error($message, E_USER_DEPRECATED); - } - - /** - * A non-local-aware version of PHPs basename function. - */ - private static function basename(string $filename): string - { - $pos = strrpos($filename, DIRECTORY_SEPARATOR); - - if ($pos === false) { - return $filename; - } - - return substr($filename, $pos + 1); - } - - public static function enableTrackingDeprecations(): void - { - self::$type = self::$type ?? 0; - self::$type |= self::TYPE_TRACK_DEPRECATIONS; - } - - public static function enableWithTriggerError(): void - { - self::$type = self::$type ?? 0; - self::$type |= self::TYPE_TRIGGER_ERROR; - } - - public static function enableWithPsrLogger(LoggerInterface $logger): void - { - self::$type = self::$type ?? 0; - self::$type |= self::TYPE_PSR_LOGGER; - self::$logger = $logger; - } - - public static function withoutDeduplication(): void - { - self::$deduplication = false; - } - - public static function disable(): void - { - self::$type = self::TYPE_NONE; - self::$logger = null; - self::$deduplication = true; - self::$ignoredLinks = []; - - foreach (self::$triggeredDeprecations as $link => $count) { - self::$triggeredDeprecations[$link] = 0; - } - } - - public static function ignorePackage(string $packageName): void - { - self::$ignoredPackages[$packageName] = true; - } - - public static function ignoreDeprecations(string ...$links): void - { - foreach ($links as $link) { - self::$ignoredLinks[$link] = true; - } - } - - public static function getUniqueTriggeredDeprecationsCount(): int - { - return array_reduce(self::$triggeredDeprecations, static function (int $carry, int $count) { - return $carry + $count; - }, 0); - } - - /** - * Returns each triggered deprecation link identifier and the amount of occurrences. - * - * @return array - */ - public static function getTriggeredDeprecations(): array - { - return self::$triggeredDeprecations; - } - - /** - * @return int-mask-of - */ - private static function getTypeFromEnv(): int - { - switch ($_SERVER['DOCTRINE_DEPRECATIONS'] ?? $_ENV['DOCTRINE_DEPRECATIONS'] ?? null) { - case 'trigger': - self::$type = self::TYPE_TRIGGER_ERROR; - break; - - case 'track': - self::$type = self::TYPE_TRACK_DEPRECATIONS; - break; - - default: - self::$type = self::TYPE_NONE; - break; - } - - return self::$type; - } -} diff --git a/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php b/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php deleted file mode 100644 index 4c3366a..0000000 --- a/vendor/doctrine/deprecations/lib/Doctrine/Deprecations/PHPUnit/VerifyDeprecations.php +++ /dev/null @@ -1,66 +0,0 @@ - */ - private $doctrineDeprecationsExpectations = []; - - /** @var array */ - private $doctrineNoDeprecationsExpectations = []; - - public function expectDeprecationWithIdentifier(string $identifier): void - { - $this->doctrineDeprecationsExpectations[$identifier] = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0; - } - - public function expectNoDeprecationWithIdentifier(string $identifier): void - { - $this->doctrineNoDeprecationsExpectations[$identifier] = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0; - } - - /** - * @before - */ - public function enableDeprecationTracking(): void - { - Deprecation::enableTrackingDeprecations(); - } - - /** - * @after - */ - public function verifyDeprecationsAreTriggered(): void - { - foreach ($this->doctrineDeprecationsExpectations as $identifier => $expectation) { - $actualCount = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0; - - $this->assertTrue( - $actualCount > $expectation, - sprintf( - "Expected deprecation with identifier '%s' was not triggered by code executed in test.", - $identifier - ) - ); - } - - foreach ($this->doctrineNoDeprecationsExpectations as $identifier => $expectation) { - $actualCount = Deprecation::getTriggeredDeprecations()[$identifier] ?? 0; - - $this->assertTrue( - $actualCount === $expectation, - sprintf( - "Expected deprecation with identifier '%s' was triggered by code executed in test, but expected not to.", - $identifier - ) - ); - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/README.md b/vendor/doctrine/doctrine-bundle/README.md deleted file mode 100644 index 16bac93..0000000 --- a/vendor/doctrine/doctrine-bundle/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Doctrine Bundle - -Doctrine DBAL & ORM Bundle for the Symfony Framework. - -[![Continuous Integration](https://github.com/doctrine/DoctrineBundle/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/doctrine/DoctrineBundle/actions/workflows/continuous-integration.yml) [![codecov](https://codecov.io/gh/doctrine/DoctrineBundle/branch/master/graph/badge.svg?token=qtm3EQ3WgV)](https://codecov.io/gh/doctrine/DoctrineBundle) - -## What is Doctrine? - -The Doctrine Project is the home of a selected set of PHP libraries primarily focused on providing persistence -services and related functionality. Its prize projects are a Object Relational Mapper and the Database Abstraction -Layer it is built on top of. You can read more about the projects below or view a list of all projects. - -Object relational mapper (ORM) for PHP that sits on top of a powerful database abstraction layer (DBAL). -One of its key features is the option to write database queries in a proprietary object oriented SQL dialect -called Doctrine Query Language (DQL), inspired by Hibernates HQL. This provides developers with a powerful -alternative to SQL that maintains flexibility without requiring unnecessary code duplication. - -DBAL is a powerful database abstraction layer with many features for database schema introspection, -schema management and PDO abstraction. - -## Documentation - -The documentation is rendered on [the symfony.com website](https://symfony.com/doc/current/reference/configuration/doctrine.html). -The source of the documentation is available in the docs folder. diff --git a/vendor/doctrine/doctrine-bundle/UPGRADE-2.10.md b/vendor/doctrine/doctrine-bundle/UPGRADE-2.10.md deleted file mode 100644 index e9e03c2..0000000 --- a/vendor/doctrine/doctrine-bundle/UPGRADE-2.10.md +++ /dev/null @@ -1,27 +0,0 @@ -UPGRADE FROM 2.9 to 2.10 -======================== - -Configuration -------------- - -### Preparing for a new `report_fields_where_declared` mapping driver mode - -Doctrine ORM 2.16+ makes a change to how the annotations and attribute mapping drivers report fields inherited from parent classes. For details, see https://github.com/doctrine/orm/pull/10455. It will trigger a deprecation notice unless the new mode is activated. In ORM 3.0, the new mode will be the only one. - -The new mode ~does not~ should not make a difference for regular, valid use cases, but may lead to `MappingException`s for users with certain configurations that were not meant to be supported by the ORM in the first place. To avoid surprising users (even when their configuration is invalid) during a 2.16 _minor_ version upgrade, the transition to this new mode was implemented as an opt-in. This way, you can try and deal with the change any time you see fit. - -In version 2.10+ of this bundle, a new configuration setting `report_fields_where_declared` was added at the entity manager configuration level. Set it to `true` to switch the mapping driver for the corresponding entity manager to the new mode. It is only relevant for mapping configurations using attributes or annotations. - -Unless you set it to `true`, Doctrine ORM will emit deprecation messages mentioning this new setting. - -### Preparing for the XSD validation for XML drivers - -Doctrine ORM 2.14+ adds support for validating the XSD of XML mapping files. In ORM 3.0, this validation will be mandatory. - -As the ecosystem is known to rely on custom elements in the XML mapping files that are forbidden when validating the XSD (for instance when using `gedmo/doctrine-extensions`), this validation is opt-in thanks to a `validate_xml_mapping` setting at the entity manager configuration level. - -Unless you set it to `true`, Doctrine ORM will emit deprecation messages mentioning the XSD validation. - -### Deprecations - -- `Doctrine\Bundle\DoctrineBundle\EventSubscriber\EventSubscriberInterface` has been deprecated. Use the `#[AsDoctrineListener]` attribute instead. diff --git a/vendor/doctrine/doctrine-bundle/UPGRADE-2.12.md b/vendor/doctrine/doctrine-bundle/UPGRADE-2.12.md deleted file mode 100644 index 77e17d2..0000000 --- a/vendor/doctrine/doctrine-bundle/UPGRADE-2.12.md +++ /dev/null @@ -1,13 +0,0 @@ -UPGRADE FROM 2.11 to 2.12 -======================== - -Configuration -------------- - -### Controller resolver auto mapping default configuration will be changed - -The default value of `doctrine.orm.controller_resolver.auto_mapping` will be changed from `true` to `false` in 3.0. - -Auto mapping uses any route parameter that matches with a field name of the Entity to resolve as criteria in a find by query. - -If you are relying on this functionality, you will need to configure it explicitly to silence the deprecation notice. diff --git a/vendor/doctrine/doctrine-bundle/UPGRADE-2.13.md b/vendor/doctrine/doctrine-bundle/UPGRADE-2.13.md deleted file mode 100644 index 2b0f957..0000000 --- a/vendor/doctrine/doctrine-bundle/UPGRADE-2.13.md +++ /dev/null @@ -1,13 +0,0 @@ -UPGRADE FROM 2.12 to 2.13 -======================== - -Configuration -------------- - -### Controller resolver auto mapping deprecated - -The controller resolver auto mapping functionality has been deprecated with Symfony 7.1, and is replaced with explicit mapped route parameters. Enabling the auto mapper by default using this bundle is now deprecated as well. - -Auto mapping uses any route parameter that matches with a field name of the Entity to resolve as criteria in a find by query. - -If you are relying on this functionality, you can update your code to use explicit mapped route parameters instead. diff --git a/vendor/doctrine/doctrine-bundle/UPGRADE-3.0.md b/vendor/doctrine/doctrine-bundle/UPGRADE-3.0.md deleted file mode 100644 index 365cd13..0000000 --- a/vendor/doctrine/doctrine-bundle/UPGRADE-3.0.md +++ /dev/null @@ -1,19 +0,0 @@ -UPGRADE FROM 2.x to 3.0 -======================= - -Configuration -------------- - -### Controller resolver auto mapping can no longer be configured - -The `doctrine.orm.controller_resolver.auto_mapping` option now only accepts `false` as value, to disallow the usage of the controller resolver auto mapping feature by default. The configuration option will be fully removed in 4.0. - -Auto mapping used any route parameter that matches with a field name of the Entity to resolve as criteria in a find by query. This method has been deprecated in Symfony 7.1 and is replaced with mapped route parameters. - -If you were relying on this functionality, you will need to update your code to use explicit mapped route parameters instead. - -Types ------ - - * The `commented` configuration option for types is no longer supported and - deprecated. diff --git a/vendor/doctrine/doctrine-bundle/composer.json b/vendor/doctrine/doctrine-bundle/composer.json deleted file mode 100644 index 7dfce1c..0000000 --- a/vendor/doctrine/doctrine-bundle/composer.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "name": "doctrine/doctrine-bundle", - "description": "Symfony DoctrineBundle", - "license": "MIT", - "type": "symfony-bundle", - "keywords": [ - "DBAL", - "ORM", - "Database", - "Persistence" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - }, - { - "name": "Doctrine Project", - "homepage": "https://www.doctrine-project.org/" - } - ], - "homepage": "https://www.doctrine-project.org", - "require": { - "php": "^7.4 || ^8.0", - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/dbal": "^3.7.0 || ^4.0", - "doctrine/persistence": "^2.2 || ^3", - "doctrine/sql-formatter": "^1.0.1", - "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "symfony/config": "^5.4 || ^6.0 || ^7.0", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/dependency-injection": "^5.4 || ^6.0 || ^7.0", - "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/doctrine-bridge": "^5.4.19 || ^6.0.7 || ^7.0", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/polyfill-php80": "^1.15", - "symfony/service-contracts": "^1.1.1 || ^2.0 || ^3" - }, - "require-dev": { - "doctrine/annotations": "^1 || ^2", - "doctrine/coding-standard": "^12", - "doctrine/deprecations": "^1.0", - "doctrine/orm": "^2.17 || ^3.0", - "friendsofphp/proxy-manager-lts": "^1.0", - "phpunit/phpunit": "^9.5.26", - "psalm/plugin-phpunit": "^0.18.4", - "psalm/plugin-symfony": "^5", - "psr/log": "^1.1.4 || ^2.0 || ^3.0", - "symfony/phpunit-bridge": "^6.1 || ^7.0", - "symfony/property-info": "^5.4 || ^6.0 || ^7.0", - "symfony/proxy-manager-bridge": "^5.4 || ^6.0 || ^7.0", - "symfony/security-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/stopwatch": "^5.4 || ^6.0 || ^7.0", - "symfony/string": "^5.4 || ^6.0 || ^7.0", - "symfony/twig-bridge": "^5.4 || ^6.0 || ^7.0", - "symfony/validator": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^5.4 || ^6.2 || ^7.0", - "symfony/web-profiler-bundle": "^5.4 || ^6.0 || ^7.0", - "symfony/yaml": "^5.4 || ^6.0 || ^7.0", - "twig/twig": "^1.34 || ^2.12 || ^3.0", - "vimeo/psalm": "^5.15" - }, - "conflict": { - "doctrine/annotations": ">=3.0", - "doctrine/orm": "<2.17 || >=4.0", - "twig/twig": "<1.34 || >=2.0 <2.4" - }, - "suggest": { - "ext-pdo": "*", - "doctrine/orm": "The Doctrine ORM integration is optional in the bundle.", - "symfony/web-profiler-bundle": "To use the data collector." - }, - "minimum-stability": "dev", - "autoload": { - "psr-4": { - "Doctrine\\Bundle\\DoctrineBundle\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Bundle\\DoctrineBundle\\Tests\\": "tests", - "Fixtures\\": "tests/DependencyInjection/Fixtures" - } - }, - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "dealerdirect/phpcodesniffer-composer-installer": true, - "symfony/flex": true - }, - "sort-packages": true - }, - "scripts": { - "auto-scripts": { - "cache:clear": "symfony-cmd", - "assets:install %PUBLIC_DIR%": "symfony-cmd" - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/config/dbal.xml b/vendor/doctrine/doctrine-bundle/config/dbal.xml deleted file mode 100644 index 61fcb5e..0000000 --- a/vendor/doctrine/doctrine-bundle/config/dbal.xml +++ /dev/null @@ -1,114 +0,0 @@ - - - - - - Doctrine\DBAL\Configuration - Doctrine\Bundle\DoctrineBundle\DataCollector\DoctrineDataCollector - Symfony\Bridge\Doctrine\ContainerAwareEventManager - Doctrine\Bundle\DoctrineBundle\ConnectionFactory - Doctrine\DBAL\Event\Listeners\MysqlSessionInit - Doctrine\DBAL\Event\Listeners\OracleSessionInit - Doctrine\Bundle\DoctrineBundle\Registry - - - - - - - - - - - true - - - - - %doctrine.dbal.connection_factory.types% - - - - - - - - - - - - - - - - - - - - %doctrine.connections% - %doctrine.entity_managers% - %doctrine.default_connection% - %doctrine.default_entity_manager% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/doctrine/doctrine-bundle/config/messenger.xml b/vendor/doctrine/doctrine-bundle/config/messenger.xml deleted file mode 100644 index 1ca9faa..0000000 --- a/vendor/doctrine/doctrine-bundle/config/messenger.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - null - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/doctrine/doctrine-bundle/config/middlewares.xml b/vendor/doctrine/doctrine-bundle/config/middlewares.xml deleted file mode 100644 index 00dad9c..0000000 --- a/vendor/doctrine/doctrine-bundle/config/middlewares.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/doctrine/doctrine-bundle/config/orm.xml b/vendor/doctrine/doctrine-bundle/config/orm.xml deleted file mode 100644 index b99cd85..0000000 --- a/vendor/doctrine/doctrine-bundle/config/orm.xml +++ /dev/null @@ -1,283 +0,0 @@ - - - - - - Doctrine\ORM\Configuration - Doctrine\ORM\EntityManager - Doctrine\Bundle\DoctrineBundle\ManagerConfigurator - - - Doctrine\Common\Cache\ArrayCache - Doctrine\Common\Cache\ApcCache - Doctrine\Common\Cache\MemcacheCache - localhost - 11211 - Memcache - Doctrine\Common\Cache\MemcachedCache - localhost - 11211 - Memcached - Doctrine\Common\Cache\RedisCache - localhost - 6379 - Redis - Doctrine\Common\Cache\XcacheCache - Doctrine\Common\Cache\WinCacheCache - Doctrine\Common\Cache\ZendDataCache - - - Doctrine\Persistence\Mapping\Driver\MappingDriverChain - Doctrine\ORM\Mapping\Driver\AnnotationDriver - Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver - Doctrine\ORM\Mapping\Driver\SimplifiedYamlDriver - Doctrine\ORM\Mapping\Driver\PHPDriver - Doctrine\ORM\Mapping\Driver\StaticPHPDriver - Doctrine\ORM\Mapping\Driver\AttributeDriver - - - Symfony\Bridge\Doctrine\CacheWarmer\ProxyCacheWarmer - - - Symfony\Bridge\Doctrine\Form\DoctrineOrmTypeGuesser - - - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntityValidator - Symfony\Bridge\Doctrine\Validator\DoctrineInitializer - - - Symfony\Bridge\Doctrine\Security\User\EntityUserProvider - - - Doctrine\ORM\Tools\ResolveTargetEntityListener - Doctrine\ORM\Tools\AttachEntityListenersListener - - - Doctrine\ORM\Mapping\DefaultNamingStrategy - Doctrine\ORM\Mapping\UnderscoreNamingStrategy - - - Doctrine\ORM\Mapping\DefaultQuoteStrategy - Doctrine\ORM\Mapping\AnsiQuoteStrategy - - - Doctrine\ORM\Mapping\DefaultTypedFieldMapper - - - Doctrine\Bundle\DoctrineBundle\Mapping\ContainerEntityListenerResolver - - - Doctrine\ORM\Cache\DefaultCacheFactory - Doctrine\ORM\Cache\Region\DefaultRegion - Doctrine\ORM\Cache\Region\FileLockRegion - Doctrine\ORM\Cache\Logging\CacheLoggerChain - Doctrine\ORM\Cache\Logging\StatisticsCacheLogger - Doctrine\ORM\Cache\CacheConfiguration - Doctrine\ORM\Cache\RegionsConfiguration - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CASE_LOWER - true - - - - - - - - - - - - - - - - - - - - - - - - - - - - controller.argument_value_resolver - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %kernel.bundles% - - - - - diff --git a/vendor/doctrine/doctrine-bundle/config/schema/doctrine-1.0.xsd b/vendor/doctrine/doctrine-bundle/config/schema/doctrine-1.0.xsd deleted file mode 100644 index 8e0a2be..0000000 --- a/vendor/doctrine/doctrine-bundle/config/schema/doctrine-1.0.xsd +++ /dev/null @@ -1,294 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/doctrine/doctrine-bundle/src/Attribute/AsDoctrineListener.php b/vendor/doctrine/doctrine-bundle/src/Attribute/AsDoctrineListener.php deleted file mode 100644 index ed3c7b7..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Attribute/AsDoctrineListener.php +++ /dev/null @@ -1,19 +0,0 @@ -entityManager = $entityManager; - $this->phpArrayFile = $phpArrayFile; - - parent::__construct($phpArrayFile); - } - - /** - * It must not be optional because it should be called before ProxyCacheWarmer which is not optional. - */ - public function isOptional(): bool - { - return false; - } - - protected function doWarmUp(string $cacheDir, ArrayAdapter $arrayAdapter, ?string $buildDir = null): bool - { - // cache already warmed up, no needs to do it again - if (is_file($this->phpArrayFile)) { - return false; - } - - $metadataFactory = $this->entityManager->getMetadataFactory(); - if ($metadataFactory instanceof AbstractClassMetadataFactory && $metadataFactory->getLoadedMetadata()) { - throw new LogicException('DoctrineMetadataCacheWarmer must load metadata first, check priority of your warmers.'); - } - - $metadataFactory->setCache($arrayAdapter); - $metadataFactory->getAllMetadata(); - - return true; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/CreateDatabaseDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/CreateDatabaseDoctrineCommand.php deleted file mode 100644 index 678a05c..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/CreateDatabaseDoctrineCommand.php +++ /dev/null @@ -1,100 +0,0 @@ -setName('doctrine:database:create') - ->setDescription('Creates the configured database') - ->addOption('connection', 'c', InputOption::VALUE_OPTIONAL, 'The connection to use for this command') - ->addOption('if-not-exists', null, InputOption::VALUE_NONE, 'Don\'t trigger an error, when the database already exists') - ->setHelp(<<<'EOT' -The %command.name% command creates the default connections database: - - php %command.full_name% - -You can also optionally specify the name of a connection to create the database for: - - php %command.full_name% --connection=default -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $connectionName = $input->getOption('connection'); - if (empty($connectionName)) { - $connectionName = $this->getDoctrine()->getDefaultConnectionName(); - } - - $connection = $this->getDoctrineConnection($connectionName); - - $ifNotExists = $input->getOption('if-not-exists'); - - $params = $connection->getParams(); - - if (isset($params['primary'])) { - $params = $params['primary']; - } - - $hasPath = isset($params['path']); - $name = $hasPath ? $params['path'] : ($params['dbname'] ?? false); - if (! $name) { - throw new InvalidArgumentException("Connection does not contain a 'path' or 'dbname' parameter and cannot be created."); - } - - // Need to get rid of _every_ occurrence of dbname from connection configuration as we have already extracted all relevant info from url - /** @psalm-suppress InvalidArrayOffset Need to be compatible with DBAL < 4, which still has `$params['url']` */ - unset($params['dbname'], $params['path'], $params['url']); - - if ($connection->getDatabasePlatform() instanceof PostgreSQLPlatform) { - /** @psalm-suppress InvalidArrayOffset It's still available in DBAL 3.x that we need to support */ - $params['dbname'] = $params['default_dbname'] ?? 'postgres'; - } - - $tmpConnection = DriverManager::getConnection($params, $connection->getConfiguration()); - $schemaManager = $tmpConnection->createSchemaManager(); - $shouldNotCreateDatabase = $ifNotExists && in_array($name, $schemaManager->listDatabases()); - - // Only quote if we don't have a path - if (! $hasPath) { - $name = $tmpConnection->getDatabasePlatform()->quoteSingleIdentifier($name); - } - - $error = false; - try { - if ($shouldNotCreateDatabase) { - $output->writeln(sprintf('Database %s for connection named %s already exists. Skipped.', $name, $connectionName)); - } else { - $schemaManager->createDatabase($name); - $output->writeln(sprintf('Created database %s for connection named %s', $name, $connectionName)); - } - } catch (Throwable $e) { - $output->writeln(sprintf('Could not create database %s for connection named %s', $name, $connectionName)); - $output->writeln(sprintf('%s', $e->getMessage())); - $error = true; - } - - $tmpConnection->close(); - - return $error ? 1 : 0; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/DoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/DoctrineCommand.php deleted file mode 100644 index 866d695..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/DoctrineCommand.php +++ /dev/null @@ -1,84 +0,0 @@ -doctrine = $doctrine; - } - - /** - * get a doctrine entity generator - * - * @return EntityGenerator - * - * @psalm-suppress UndefinedDocblockClass ORM < 3 specific - */ - protected function getEntityGenerator() - { - $entityGenerator = new EntityGenerator(); - $entityGenerator->setGenerateAnnotations(false); - $entityGenerator->setGenerateStubMethods(true); - $entityGenerator->setRegenerateEntityIfExists(false); - $entityGenerator->setUpdateEntityIfExists(true); - $entityGenerator->setNumSpaces(4); - $entityGenerator->setAnnotationPrefix('ORM\\'); - - return $entityGenerator; - } - - /** - * Get a doctrine entity manager by symfony name. - * - * @param string $name - * @param int|null $shardId - * - * @return EntityManager - */ - protected function getEntityManager($name, $shardId = null) - { - $manager = $this->getDoctrine()->getManager($name); - - if ($shardId !== null) { - throw new InvalidArgumentException('Shards are not supported anymore using doctrine/dbal >= 3'); - } - - return $manager; - } - - /** - * Get a doctrine dbal connection by symfony name. - * - * @param string $name - * - * @return Connection - */ - protected function getDoctrineConnection($name) - { - return $this->getDoctrine()->getConnection($name); - } - - /** @return ManagerRegistry */ - protected function getDoctrine() - { - return $this->doctrine; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/DropDatabaseDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/DropDatabaseDoctrineCommand.php deleted file mode 100644 index dc85b29..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/DropDatabaseDoctrineCommand.php +++ /dev/null @@ -1,131 +0,0 @@ -setName('doctrine:database:drop') - ->setDescription('Drops the configured database') - ->addOption('connection', 'c', InputOption::VALUE_OPTIONAL, 'The connection to use for this command') - ->addOption('if-exists', null, InputOption::VALUE_NONE, 'Don\'t trigger an error, when the database doesn\'t exist') - ->addOption('force', 'f', InputOption::VALUE_NONE, 'Set this parameter to execute this action') - ->setHelp(<<<'EOT' -The %command.name% command drops the default connections database: - - php %command.full_name% - -The --force parameter has to be used to actually drop the database. - -You can also optionally specify the name of a connection to drop the database for: - - php %command.full_name% --connection=default - -Be careful: All data in a given database will be lost when executing this command. -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $connectionName = $input->getOption('connection'); - if (empty($connectionName)) { - $connectionName = $this->getDoctrine()->getDefaultConnectionName(); - } - - $connection = $this->getDoctrineConnection($connectionName); - - $ifExists = $input->getOption('if-exists'); - - $params = $connection->getParams(); - - if (isset($params['primary'])) { - $params = $params['primary']; - } - - $name = $params['path'] ?? ($params['dbname'] ?? false); - if (! $name) { - throw new InvalidArgumentException("Connection does not contain a 'path' or 'dbname' parameter and cannot be dropped."); - } - - /** @psalm-suppress InvalidArrayOffset Need to be compatible with DBAL < 4, which still has `$params['url']` */ - unset($params['dbname'], $params['url']); - - if ($connection->getDatabasePlatform() instanceof PostgreSQLPlatform) { - /** @psalm-suppress InvalidArrayOffset It's still available in DBAL 3.x that we need to support */ - $params['dbname'] = $params['default_dbname'] ?? 'postgres'; - } - - if (! $input->getOption('force')) { - $output->writeln('ATTENTION: This operation should not be executed in a production environment.'); - $output->writeln(''); - $output->writeln(sprintf('Would drop the database %s for connection named %s.', $name, $connectionName)); - $output->writeln('Please run the operation with --force to execute'); - $output->writeln('All data will be lost!'); - - return self::RETURN_CODE_NO_FORCE; - } - - // Reopen connection without database name set - // as some vendors do not allow dropping the database connected to. - $connection->close(); - $connection = DriverManager::getConnection($params, $connection->getConfiguration()); - $schemaManager = $connection->createSchemaManager(); - $shouldDropDatabase = ! $ifExists || in_array($name, $schemaManager->listDatabases()); - - // Only quote if we don't have a path - if (! isset($params['path'])) { - $name = $connection->getDatabasePlatform()->quoteSingleIdentifier($name); - } - - try { - if ($shouldDropDatabase) { - if ($schemaManager instanceof SQLiteSchemaManager) { - // dropDatabase() is deprecated for Sqlite - $connection->close(); - if (file_exists($name)) { - unlink($name); - } - } else { - $schemaManager->dropDatabase($name); - } - - $output->writeln(sprintf('Dropped database %s for connection named %s', $name, $connectionName)); - } else { - $output->writeln(sprintf('Database %s for connection named %s doesn\'t exist. Skipped.', $name, $connectionName)); - } - - return 0; - } catch (Throwable $e) { - $output->writeln(sprintf('Could not drop database %s for connection named %s', $name, $connectionName)); - $output->writeln(sprintf('%s', $e->getMessage())); - - return self::RETURN_CODE_NOT_DROP; - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/ImportMappingDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/ImportMappingDoctrineCommand.php deleted file mode 100644 index 951eea6..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/ImportMappingDoctrineCommand.php +++ /dev/null @@ -1,163 +0,0 @@ -bundles = $bundles; - } - - protected function configure(): void - { - $this - ->setName('doctrine:mapping:import') - ->addArgument('name', InputArgument::REQUIRED, 'The bundle or namespace to import the mapping information to') - ->addArgument('mapping-type', InputArgument::OPTIONAL, 'The mapping type to export the imported mapping information to') - ->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command') - ->addOption('filter', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'A string pattern used to match entities that should be mapped.') - ->addOption('force', null, InputOption::VALUE_NONE, 'Force to overwrite existing mapping files.') - ->addOption('path', null, InputOption::VALUE_REQUIRED, 'The path where the files would be generated (not used when a bundle is passed).') - ->setDescription('Imports mapping information from an existing database') - ->setHelp(<<<'EOT' -The %command.name% command imports mapping information -from an existing database: - -Generate annotation mappings into the src/ directory using App as the namespace: -php %command.full_name% App\\Entity annotation --path=src/Entity - -Generate xml mappings into the config/doctrine/ directory using App as the namespace: -php %command.full_name% App\\Entity xml --path=config/doctrine - -Generate XML mappings into a bundle: -php %command.full_name% "MyCustomBundle" xml - -You can also optionally specify which entity manager to import from with the ---em option: - -php %command.full_name% "MyCustomBundle" xml --em=default - -If you don't want to map every entity that can be found in the database, use the ---filter option. It will try to match the targeted mapped entity with the -provided pattern string. - -php %command.full_name% "MyCustomBundle" xml --filter=MyMatchedEntity - -Use the --force option, if you want to override existing mapping files: - -php %command.full_name% "MyCustomBundle" xml --force -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $type = $input->getArgument('mapping-type') ?: 'xml'; - if ($type === 'yaml') { - $type = 'yml'; - } - - $namespaceOrBundle = $input->getArgument('name'); - if (isset($this->bundles[$namespaceOrBundle])) { - $bundle = $this->getApplication()->getKernel()->getBundle($namespaceOrBundle); - $namespace = $bundle->getNamespace() . '\Entity'; - - $destPath = $bundle->getPath(); - if ($type === 'annotation') { - $destPath .= '/Entity'; - } else { - $destPath .= '/Resources/config/doctrine'; - } - } else { - // assume a namespace has been passed - $namespace = $namespaceOrBundle; - $destPath = $input->getOption('path'); - if ($destPath === null) { - throw new InvalidArgumentException('The --path option is required when passing a namespace (e.g. --path=src). If you intended to pass a bundle name, check your spelling.'); - } - } - - $cme = new ClassMetadataExporter(); - $exporter = $cme->getExporter($type); - $exporter->setOverwriteExistingFiles($input->getOption('force')); - - if ($type === 'annotation') { - $entityGenerator = $this->getEntityGenerator(); - $exporter->setEntityGenerator($entityGenerator); - } - - $em = $this->getEntityManager($input->getOption('em')); - - $databaseDriver = new DatabaseDriver($em->getConnection()->getSchemaManager()); - $em->getConfiguration()->setMetadataDriverImpl($databaseDriver); - - $emName = $input->getOption('em'); - $emName = $emName ? $emName : 'default'; - - $cmf = new DisconnectedClassMetadataFactory(); - $cmf->setEntityManager($em); - $metadata = $cmf->getAllMetadata(); - $metadata = MetadataFilter::filter($metadata, $input->getOption('filter')); - if ($metadata) { - $output->writeln(sprintf('Importing mapping information from "%s" entity manager', $emName)); - foreach ($metadata as $class) { - $className = $class->name; - $class->name = $namespace . '\\' . $className; - if ($type === 'annotation') { - $path = $destPath . '/' . str_replace('\\', '.', $className) . '.php'; - } else { - $path = $destPath . '/' . str_replace('\\', '.', $className) . '.orm.' . $type; - } - - $output->writeln(sprintf(' > writing %s', $path)); - $code = $exporter->exportClassMetadata($class); - $dir = dirname($path); - if (! is_dir($dir)) { - mkdir($dir, 0775, true); - } - - file_put_contents($path, $code); - chmod($path, 0664); - } - - return 0; - } - - $output->writeln('Database does not have any mapping information.'); - $output->writeln(''); - - return 1; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearMetadataCacheDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearMetadataCacheDoctrineCommand.php deleted file mode 100644 index 125036c..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearMetadataCacheDoctrineCommand.php +++ /dev/null @@ -1,31 +0,0 @@ -setName('doctrine:cache:clear-metadata') - ->setDescription('Clears all metadata cache for an entity manager'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearQueryCacheDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearQueryCacheDoctrineCommand.php deleted file mode 100644 index 04c6f56..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearQueryCacheDoctrineCommand.php +++ /dev/null @@ -1,31 +0,0 @@ -setName('doctrine:cache:clear-query') - ->setDescription('Clears all query cache for an entity manager'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearResultCacheDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearResultCacheDoctrineCommand.php deleted file mode 100644 index c813602..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ClearResultCacheDoctrineCommand.php +++ /dev/null @@ -1,31 +0,0 @@ -setName('doctrine:cache:clear-result') - ->setDescription('Clears result cache for an entity manager'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/CollectionRegionDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/CollectionRegionDoctrineCommand.php deleted file mode 100644 index 6189838..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/CollectionRegionDoctrineCommand.php +++ /dev/null @@ -1,30 +0,0 @@ -setName('doctrine:cache:clear-collection-region'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ConvertMappingDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ConvertMappingDoctrineCommand.php deleted file mode 100644 index bd1df53..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ConvertMappingDoctrineCommand.php +++ /dev/null @@ -1,58 +0,0 @@ -setName('doctrine:mapping:convert'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } - - /** - * @param string $toType - * @param string $destPath - * - * @return AbstractExporter - */ - protected function getExporter($toType, $destPath) - { - $exporter = parent::getExporter($toType, $destPath); - assert($exporter instanceof AbstractExporter); - if ($exporter instanceof XmlExporter) { - $exporter->setExtension('.orm.xml'); - } elseif ($exporter instanceof YamlExporter) { - $exporter->setExtension('.orm.yml'); - } - - return $exporter; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/CreateSchemaDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/CreateSchemaDoctrineCommand.php deleted file mode 100644 index 273ab71..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/CreateSchemaDoctrineCommand.php +++ /dev/null @@ -1,32 +0,0 @@ -setName('doctrine:schema:create') - ->setDescription('Executes (or dumps) the SQL needed to generate the database schema'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/DoctrineCommandHelper.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/DoctrineCommandHelper.php deleted file mode 100644 index 49e0b59..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/DoctrineCommandHelper.php +++ /dev/null @@ -1,42 +0,0 @@ -getKernel()->getContainer()->get('doctrine')->getManager($emName); - assert($em instanceof EntityManagerInterface); - $helperSet = $application->getHelperSet(); - /** @psalm-suppress InvalidArgument ORM < 3 specific */ - $helperSet->set(new EntityManagerHelper($em), 'em'); - - trigger_deprecation( - 'doctrine/doctrine-bundle', - '2.7', - 'Providing an EntityManager using "%s" is deprecated. Use an instance of "%s" instead.', - EntityManagerHelper::class, - EntityManagerProvider::class, - ); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/DropSchemaDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/DropSchemaDoctrineCommand.php deleted file mode 100644 index 953bf7a..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/DropSchemaDoctrineCommand.php +++ /dev/null @@ -1,31 +0,0 @@ -setName('doctrine:schema:drop') - ->setDescription('Executes (or dumps) the SQL needed to drop the current database schema'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/EnsureProductionSettingsDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/EnsureProductionSettingsDoctrineCommand.php deleted file mode 100644 index 6603d4f..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/EnsureProductionSettingsDoctrineCommand.php +++ /dev/null @@ -1,32 +0,0 @@ -setName('doctrine:ensure-production-settings'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/EntityRegionCacheDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/EntityRegionCacheDoctrineCommand.php deleted file mode 100644 index ef94386..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/EntityRegionCacheDoctrineCommand.php +++ /dev/null @@ -1,30 +0,0 @@ -setName('doctrine:cache:clear-entity-region'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/InfoDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/InfoDoctrineCommand.php deleted file mode 100644 index b043fc6..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/InfoDoctrineCommand.php +++ /dev/null @@ -1,28 +0,0 @@ -setName('doctrine:mapping:info'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/OrmProxyCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/OrmProxyCommand.php deleted file mode 100644 index 1f3cdb2..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/OrmProxyCommand.php +++ /dev/null @@ -1,42 +0,0 @@ -entityManagerProvider = $entityManagerProvider; - - trigger_deprecation( - 'doctrine/doctrine-bundle', - '2.8', - 'Class "%s" is deprecated. Use "%s" instead.', - self::class, - parent::class, - ); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - if (! $this->entityManagerProvider) { - DoctrineCommandHelper::setApplicationEntityManager($this->getApplication(), $input->getOption('em')); - } - - return parent::execute($input, $output); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/QueryRegionCacheDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/QueryRegionCacheDoctrineCommand.php deleted file mode 100644 index 2e4a9b1..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/QueryRegionCacheDoctrineCommand.php +++ /dev/null @@ -1,30 +0,0 @@ -setName('doctrine:cache:clear-query-region'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/RunDqlDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/RunDqlDoctrineCommand.php deleted file mode 100644 index 8051912..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/RunDqlDoctrineCommand.php +++ /dev/null @@ -1,46 +0,0 @@ -setName('doctrine:query:dql') - ->setHelp(<<<'EOT' -The %command.name% command executes the given DQL query and -outputs the results: - -php %command.full_name% "SELECT u FROM UserBundle:User u" - -You can also optional specify some additional options like what type of -hydration to use when executing the query: - -php %command.full_name% "SELECT u FROM UserBundle:User u" --hydrate=array - -Additionally you can specify the first result and maximum amount of results to -show: - -php %command.full_name% "SELECT u FROM UserBundle:User u" --first-result=0 --max-result=30 -EOT); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/RunSqlDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/RunSqlDoctrineCommand.php deleted file mode 100644 index 7977a4c..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/RunSqlDoctrineCommand.php +++ /dev/null @@ -1,43 +0,0 @@ -setName('doctrine:query:sql') - ->setHelp(<<<'EOT' -The %command.name% command executes the given SQL query and -outputs the results: - -php %command.full_name% "SELECT * FROM users" -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - trigger_deprecation( - 'doctrine/doctrine-bundle', - '2.2', - 'The "%s" (doctrine:query:sql) is deprecated, use dbal:run-sql command instead.', - self::class, - ); - - return parent::execute($input, $output); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/UpdateSchemaDoctrineCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/UpdateSchemaDoctrineCommand.php deleted file mode 100644 index 682a26c..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/UpdateSchemaDoctrineCommand.php +++ /dev/null @@ -1,31 +0,0 @@ -setName('doctrine:schema:update'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ValidateSchemaCommand.php b/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ValidateSchemaCommand.php deleted file mode 100644 index 33d19e7..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Command/Proxy/ValidateSchemaCommand.php +++ /dev/null @@ -1,30 +0,0 @@ -setName('doctrine:schema:validate'); - - if ($this->getDefinition()->hasOption('em')) { - return; - } - - $this->addOption('em', null, InputOption::VALUE_OPTIONAL, 'The entity manager to use for this command'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/ConnectionFactory.php b/vendor/doctrine/doctrine-bundle/src/ConnectionFactory.php deleted file mode 100644 index 2b273bd..0000000 --- a/vendor/doctrine/doctrine-bundle/src/ConnectionFactory.php +++ /dev/null @@ -1,290 +0,0 @@ - 'ibm_db2', - 'mssql' => 'pdo_sqlsrv', - 'mysql' => 'pdo_mysql', - 'mysql2' => 'pdo_mysql', // Amazon RDS, for some weird reason - 'postgres' => 'pdo_pgsql', - 'postgresql' => 'pdo_pgsql', - 'pgsql' => 'pdo_pgsql', - 'sqlite' => 'pdo_sqlite', - 'sqlite3' => 'pdo_sqlite', - ]; - - /** @var mixed[][] */ - private array $typesConfig = []; - - private DsnParser $dsnParser; - - private bool $initialized = false; - - /** @param mixed[][] $typesConfig */ - public function __construct(array $typesConfig, ?DsnParser $dsnParser = null) - { - $this->typesConfig = $typesConfig; - $this->dsnParser = $dsnParser ?? new DsnParser(self::DEFAULT_SCHEME_MAP); - } - - /** - * Create a connection by name. - * - * @param mixed[] $params - * @param array $mappingTypes - * @psalm-param Params $params - * - * @return Connection - */ - public function createConnection(array $params, ?Configuration $config = null, ?EventManager $eventManager = null, array $mappingTypes = []) - { - if (! method_exists(Connection::class, 'getEventManager') && $eventManager !== null) { - throw new InvalidArgumentException('Passing an EventManager instance is not supported with DBAL > 3'); - } - - if (! $this->initialized) { - $this->initializeTypes(); - } - - $overriddenOptions = []; - /** @psalm-suppress InvalidArrayOffset We should adjust when https://github.com/vimeo/psalm/issues/8984 is fixed */ - if (isset($params['connection_override_options'])) { - trigger_deprecation('doctrine/doctrine-bundle', '2.4', 'The "connection_override_options" connection parameter is deprecated'); - $overriddenOptions = $params['connection_override_options']; - unset($params['connection_override_options']); - } - - $params = $this->parseDatabaseUrl($params); - - // URL support for PrimaryReplicaConnection - if (isset($params['primary'])) { - $params['primary'] = $this->parseDatabaseUrl($params['primary']); - } - - if (isset($params['replica'])) { - foreach ($params['replica'] as $key => $replicaParams) { - $params['replica'][$key] = $this->parseDatabaseUrl($replicaParams); - } - } - - /** @psalm-suppress InvalidArrayOffset We should adjust when https://github.com/vimeo/psalm/issues/8984 is fixed */ - if (! isset($params['pdo']) && (! isset($params['charset']) || $overriddenOptions || isset($params['dbname_suffix']))) { - $wrapperClass = null; - - if (isset($params['wrapperClass'])) { - if (! is_subclass_of($params['wrapperClass'], Connection::class)) { - if (class_exists(InvalidWrapperClass::class)) { - throw InvalidWrapperClass::new($params['wrapperClass']); - } - - throw DBALException::invalidWrapperClass($params['wrapperClass']); - } - - $wrapperClass = $params['wrapperClass']; - $params['wrapperClass'] = null; - } - - $connection = DriverManager::getConnection(...array_merge([$params, $config], $eventManager ? [$eventManager] : [])); - $params = $this->addDatabaseSuffix(array_merge($connection->getParams(), $overriddenOptions)); - $driver = $connection->getDriver(); - /** @psalm-suppress InvalidScalarArgument Bogus error, StaticServerVersionProvider implements Doctrine\DBAL\ServerVersionProvider */ - $platform = $driver->getDatabasePlatform( - ...(class_exists(StaticServerVersionProvider::class) - ? [new StaticServerVersionProvider($params['serverVersion'] ?? $params['primary']['serverVersion'] ?? '')] - : [] - ), - ); - - if (! isset($params['charset'])) { - if ($platform instanceof AbstractMySQLPlatform) { - $params['charset'] = 'utf8mb4'; - - if (isset($params['defaultTableOptions']['collate'])) { - Deprecation::trigger( - 'doctrine/doctrine-bundle', - 'https://github.com/doctrine/dbal/issues/5214', - 'The "collate" default table option is deprecated in favor of "collation" and will be removed in doctrine/doctrine-bundle 3.0. ', - ); - $params['defaultTableOptions']['collation'] = $params['defaultTableOptions']['collate']; - unset($params['defaultTableOptions']['collate']); - } - - if (! isset($params['defaultTableOptions']['collation'])) { - $params['defaultTableOptions']['collation'] = 'utf8mb4_unicode_ci'; - } - } else { - $params['charset'] = 'utf8'; - } - } - - if ($wrapperClass !== null) { - $params['wrapperClass'] = $wrapperClass; - } else { - $wrapperClass = Connection::class; - } - - $connection = new $wrapperClass($params, $driver, $config, $eventManager); - } else { - $connection = DriverManager::getConnection(...array_merge([$params, $config], $eventManager ? [$eventManager] : [])); - } - - if (! empty($mappingTypes)) { - $platform = $this->getDatabasePlatform($connection); - foreach ($mappingTypes as $dbType => $doctrineType) { - $platform->registerDoctrineTypeMapping($dbType, $doctrineType); - } - } - - return $connection; - } - - /** - * Try to get the database platform. - * - * This could fail if types should be registered to an predefined/unused connection - * and the platform version is unknown. - * - * @link https://github.com/doctrine/DoctrineBundle/issues/673 - * - * @throws DBALException - */ - private function getDatabasePlatform(Connection $connection): AbstractPlatform - { - try { - return $connection->getDatabasePlatform(); - } catch (DriverException $driverException) { - $class = class_exists(DBALException::class) ? DBALException::class : ConnectionException::class; - - throw new $class( - 'An exception occurred while establishing a connection to figure out your platform version.' . PHP_EOL . - "You can circumvent this by setting a 'server_version' configuration value" . PHP_EOL . PHP_EOL . - 'For further information have a look at:' . PHP_EOL . - 'https://github.com/doctrine/DoctrineBundle/issues/673', - 0, - $driverException, - ); - } - } - - /** - * initialize the types - */ - private function initializeTypes(): void - { - foreach ($this->typesConfig as $typeName => $typeConfig) { - if (Type::hasType($typeName)) { - Type::overrideType($typeName, $typeConfig['class']); - } else { - Type::addType($typeName, $typeConfig['class']); - } - } - - $this->initialized = true; - } - - /** - * @param array $params - * - * @return array - */ - private function addDatabaseSuffix(array $params): array - { - if (isset($params['dbname']) && isset($params['dbname_suffix'])) { - $params['dbname'] .= $params['dbname_suffix']; - } - - foreach ($params['replica'] ?? [] as $key => $replicaParams) { - if (! isset($replicaParams['dbname'], $replicaParams['dbname_suffix'])) { - continue; - } - - $params['replica'][$key]['dbname'] .= $replicaParams['dbname_suffix']; - } - - if (isset($params['primary']['dbname'], $params['primary']['dbname_suffix'])) { - $params['primary']['dbname'] .= $params['primary']['dbname_suffix']; - } - - return $params; - } - - /** - * Extracts parts from a database URL, if present, and returns an - * updated list of parameters. - * - * @param mixed[] $params The list of parameters. - * @psalm-param Params $params - * - * @return mixed[] A modified list of parameters with info from a database - * URL extracted into individual parameter parts. - * @psalm-return Params - * - * @throws DBALException - */ - private function parseDatabaseUrl(array $params): array - { - /** @psalm-suppress InvalidArrayOffset Need to be compatible with DBAL < 4, which still has `$params['url']` */ - if (! isset($params['url'])) { - return $params; - } - - try { - $parsedParams = $this->dsnParser->parse($params['url']); - } catch (MalformedDsnException $e) { - throw new MalformedDsnException('Malformed parameter "url".', 0, $e); - } - - if (isset($parsedParams['driver'])) { - // The requested driver from the URL scheme takes precedence - // over the default custom driver from the connection parameters (if any). - unset($params['driverClass']); - } - - $params = array_merge($params, $parsedParams); - - // If a schemeless connection URL is given, we require a default driver or default custom driver - // as connection parameter. - if (! isset($params['driverClass']) && ! isset($params['driver'])) { - if (class_exists(DriverRequired::class)) { - throw DriverRequired::new($params['url']); - } - - throw DBALException::driverRequired($params['url']); - } - - unset($params['url']); - - return $params; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Controller/ProfilerController.php b/vendor/doctrine/doctrine-bundle/src/Controller/ProfilerController.php deleted file mode 100644 index d85cda0..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Controller/ProfilerController.php +++ /dev/null @@ -1,132 +0,0 @@ -twig = $twig; - $this->registry = $registry; - $this->profiler = $profiler; - } - - /** - * Renders the profiler panel for the given token. - * - * @param string $token The profiler token - * @param string $connectionName - * @param int $query - * - * @return Response A Response instance - */ - public function explainAction($token, $connectionName, $query) - { - $this->profiler->disable(); - - $profile = $this->profiler->loadProfile($token); - $collector = $profile->getCollector('db'); - - assert($collector instanceof DoctrineDataCollector); - - $queries = $collector->getQueries(); - - if (! isset($queries[$connectionName][$query])) { - return new Response('This query does not exist.'); - } - - $query = $queries[$connectionName][$query]; - if (! $query['explainable']) { - return new Response('This query cannot be explained.'); - } - - $connection = $this->registry->getConnection($connectionName); - assert($connection instanceof Connection); - try { - $platform = $connection->getDatabasePlatform(); - if ($platform instanceof SQLitePlatform) { - $results = $this->explainSQLitePlatform($connection, $query); - } elseif ($platform instanceof SQLServerPlatform) { - throw new Exception('Explain for SQLServerPlatform is currently not supported. Contributions are welcome.'); - } elseif ($platform instanceof OraclePlatform) { - $results = $this->explainOraclePlatform($connection, $query); - } else { - $results = $this->explainOtherPlatform($connection, $query); - } - } catch (Throwable $e) { - return new Response('This query cannot be explained.'); - } - - return new Response($this->twig->render('@Doctrine/Collector/explain.html.twig', [ - 'data' => $results, - 'query' => $query, - ])); - } - - /** - * @param mixed[] $query - * - * @return mixed[] - */ - private function explainSQLitePlatform(Connection $connection, array $query): array - { - $params = $query['params']; - - if ($params instanceof Data) { - $params = $params->getValue(true); - } - - return $connection->executeQuery('EXPLAIN QUERY PLAN ' . $query['sql'], $params, $query['types']) - ->fetchAllAssociative(); - } - - /** - * @param mixed[] $query - * - * @return mixed[] - */ - private function explainOtherPlatform(Connection $connection, array $query): array - { - $params = $query['params']; - - if ($params instanceof Data) { - $params = $params->getValue(true); - } - - return $connection->executeQuery('EXPLAIN ' . $query['sql'], $params, $query['types']) - ->fetchAllAssociative(); - } - - /** - * @param mixed[] $query - * - * @return mixed[] - */ - private function explainOraclePlatform(Connection $connection, array $query): array - { - $connection->executeQuery('EXPLAIN PLAN FOR ' . $query['sql']); - - return $connection->executeQuery('SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY())') - ->fetchAllAssociative(); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DataCollector/DoctrineDataCollector.php b/vendor/doctrine/doctrine-bundle/src/DataCollector/DoctrineDataCollector.php deleted file mode 100644 index 2ecd7a4..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DataCollector/DoctrineDataCollector.php +++ /dev/null @@ -1,305 +0,0 @@ -, - * runnable: bool, - * types: ?array, - * } - * @psalm-type DataType = array{ - * caches: array{ - * enabled: bool, - * counts: array<"puts"|"hits"|"misses", int>, - * log_enabled: bool, - * regions: array<"puts"|"hits"|"misses", array>, - * }, - * connections: list, - * entities: array>, - * errors: array>>, - * managers: list, - * queries: array>, - * } - * @psalm-property DataType $data - */ -class DoctrineDataCollector extends BaseCollector -{ - private ManagerRegistry $registry; - private ?int $invalidEntityCount = null; - - /** - * @var mixed[][]|null - * @psalm-var ?array> - */ - private ?array $groupedQueries = null; - - private bool $shouldValidateSchema; - - public function __construct(ManagerRegistry $registry, bool $shouldValidateSchema = true, ?DebugDataHolder $debugDataHolder = null) - { - $this->registry = $registry; - $this->shouldValidateSchema = $shouldValidateSchema; - - parent::__construct($registry, $debugDataHolder); - } - - public function collect(Request $request, Response $response, ?Throwable $exception = null): void - { - parent::collect($request, $response, $exception); - - $errors = []; - $entities = []; - $caches = [ - 'enabled' => false, - 'log_enabled' => false, - 'counts' => [ - 'puts' => 0, - 'hits' => 0, - 'misses' => 0, - ], - 'regions' => [ - 'puts' => [], - 'hits' => [], - 'misses' => [], - ], - ]; - - foreach ($this->registry->getManagers() as $name => $em) { - assert($em instanceof EntityManagerInterface); - if ($this->shouldValidateSchema) { - $entities[$name] = []; - - $factory = $em->getMetadataFactory(); - $validator = new SchemaValidator($em); - - assert($factory instanceof AbstractClassMetadataFactory); - - foreach ($factory->getLoadedMetadata() as $class) { - assert($class instanceof ClassMetadata); - if (isset($entities[$name][$class->getName()])) { - continue; - } - - $classErrors = $validator->validateClass($class); - $r = $class->getReflectionClass(); - $entities[$name][$class->getName()] = [ - 'class' => $class->getName(), - 'file' => $r->getFileName(), - 'line' => $r->getStartLine(), - ]; - - if (empty($classErrors)) { - continue; - } - - $errors[$name][$class->getName()] = $classErrors; - } - } - - $emConfig = $em->getConfiguration(); - $slcEnabled = $emConfig->isSecondLevelCacheEnabled(); - - if (! $slcEnabled) { - continue; - } - - $caches['enabled'] = true; - - $cacheConfiguration = $emConfig->getSecondLevelCacheConfiguration(); - assert($cacheConfiguration instanceof CacheConfiguration); - $cacheLoggerChain = $cacheConfiguration->getCacheLogger(); - assert($cacheLoggerChain instanceof CacheLoggerChain || $cacheLoggerChain === null); - - if (! $cacheLoggerChain || ! $cacheLoggerChain->getLogger('statistics')) { - continue; - } - - $cacheLoggerStats = $cacheLoggerChain->getLogger('statistics'); - assert($cacheLoggerStats instanceof StatisticsCacheLogger); - $caches['log_enabled'] = true; - - $caches['counts']['puts'] += $cacheLoggerStats->getPutCount(); - $caches['counts']['hits'] += $cacheLoggerStats->getHitCount(); - $caches['counts']['misses'] += $cacheLoggerStats->getMissCount(); - - foreach ($cacheLoggerStats->getRegionsPut() as $key => $value) { - if (! isset($caches['regions']['puts'][$key])) { - $caches['regions']['puts'][$key] = 0; - } - - $caches['regions']['puts'][$key] += $value; - } - - foreach ($cacheLoggerStats->getRegionsHit() as $key => $value) { - if (! isset($caches['regions']['hits'][$key])) { - $caches['regions']['hits'][$key] = 0; - } - - $caches['regions']['hits'][$key] += $value; - } - - foreach ($cacheLoggerStats->getRegionsMiss() as $key => $value) { - if (! isset($caches['regions']['misses'][$key])) { - $caches['regions']['misses'][$key] = 0; - } - - $caches['regions']['misses'][$key] += $value; - } - } - - $this->data['entities'] = $entities; - $this->data['errors'] = $errors; - $this->data['caches'] = $caches; - $this->groupedQueries = null; - } - - /** @return array> */ - public function getEntities() - { - return $this->data['entities']; - } - - /** @return array>> */ - public function getMappingErrors() - { - return $this->data['errors']; - } - - /** @return int */ - public function getCacheHitsCount() - { - return $this->data['caches']['counts']['hits']; - } - - /** @return int */ - public function getCachePutsCount() - { - return $this->data['caches']['counts']['puts']; - } - - /** @return int */ - public function getCacheMissesCount() - { - return $this->data['caches']['counts']['misses']; - } - - /** @return bool */ - public function getCacheEnabled() - { - return $this->data['caches']['enabled']; - } - - /** - * @return array> - * @psalm-return array<"puts"|"hits"|"misses", array> - */ - public function getCacheRegions() - { - return $this->data['caches']['regions']; - } - - /** @return array */ - public function getCacheCounts() - { - return $this->data['caches']['counts']; - } - - /** @return int */ - public function getInvalidEntityCount() - { - return $this->invalidEntityCount ??= array_sum(array_map('count', $this->data['errors'])); - } - - /** - * @return string[][] - * @psalm-return array> - */ - public function getGroupedQueries() - { - if ($this->groupedQueries !== null) { - return $this->groupedQueries; - } - - $this->groupedQueries = []; - $totalExecutionMS = 0; - foreach ($this->data['queries'] as $connection => $queries) { - $connectionGroupedQueries = []; - foreach ($queries as $i => $query) { - $key = $query['sql']; - if (! isset($connectionGroupedQueries[$key])) { - $connectionGroupedQueries[$key] = $query; - $connectionGroupedQueries[$key]['executionMS'] = 0; - $connectionGroupedQueries[$key]['count'] = 0; - $connectionGroupedQueries[$key]['index'] = $i; // "Explain query" relies on query index in 'queries'. - } - - $connectionGroupedQueries[$key]['executionMS'] += $query['executionMS']; - $connectionGroupedQueries[$key]['count']++; - $totalExecutionMS += $query['executionMS']; - } - - usort($connectionGroupedQueries, static function ($a, $b) { - if ($a['executionMS'] === $b['executionMS']) { - return 0; - } - - return $a['executionMS'] < $b['executionMS'] ? 1 : -1; - }); - $this->groupedQueries[$connection] = $connectionGroupedQueries; - } - - foreach ($this->groupedQueries as $connection => $queries) { - foreach ($queries as $i => $query) { - $this->groupedQueries[$connection][$i]['executionPercent'] = - $this->executionTimePercentage($query['executionMS'], $totalExecutionMS); - } - } - - return $this->groupedQueries; - } - - private function executionTimePercentage(float $executionTimeMS, float $totalExecutionTimeMS): float - { - if (! $totalExecutionTimeMS) { - return 0; - } - - return $executionTimeMS / $totalExecutionTimeMS * 100; - } - - /** @return int */ - public function getGroupedQueryCount() - { - $count = 0; - foreach ($this->getGroupedQueries() as $connectionGroupedQueries) { - $count += count($connectionGroupedQueries); - } - - return $count; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Dbal/BlacklistSchemaAssetFilter.php b/vendor/doctrine/doctrine-bundle/src/Dbal/BlacklistSchemaAssetFilter.php deleted file mode 100644 index e63a2ec..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Dbal/BlacklistSchemaAssetFilter.php +++ /dev/null @@ -1,30 +0,0 @@ -blacklist = $blacklist; - } - - /** @param string|AbstractAsset $assetName */ - public function __invoke($assetName): bool - { - if ($assetName instanceof AbstractAsset) { - $assetName = $assetName->getName(); - } - - return ! in_array($assetName, $this->blacklist, true); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Dbal/ManagerRegistryAwareConnectionProvider.php b/vendor/doctrine/doctrine-bundle/src/Dbal/ManagerRegistryAwareConnectionProvider.php deleted file mode 100644 index 7143a66..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Dbal/ManagerRegistryAwareConnectionProvider.php +++ /dev/null @@ -1,27 +0,0 @@ -managerRegistry = $managerRegistry; - } - - public function getDefaultConnection(): Connection - { - return $this->managerRegistry->getConnection(); - } - - public function getConnection(string $name): Connection - { - return $this->managerRegistry->getConnection($name); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Dbal/RegexSchemaAssetFilter.php b/vendor/doctrine/doctrine-bundle/src/Dbal/RegexSchemaAssetFilter.php deleted file mode 100644 index c60cdea..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Dbal/RegexSchemaAssetFilter.php +++ /dev/null @@ -1,27 +0,0 @@ -filterExpression = $filterExpression; - } - - /** @param string|AbstractAsset $assetName */ - public function __invoke($assetName): bool - { - if ($assetName instanceof AbstractAsset) { - $assetName = $assetName->getName(); - } - - return (bool) preg_match($this->filterExpression, $assetName); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Dbal/SchemaAssetsFilterManager.php b/vendor/doctrine/doctrine-bundle/src/Dbal/SchemaAssetsFilterManager.php deleted file mode 100644 index 18cc740..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Dbal/SchemaAssetsFilterManager.php +++ /dev/null @@ -1,32 +0,0 @@ -schemaAssetFilters = $schemaAssetFilters; - } - - /** @param string|AbstractAsset $assetName */ - public function __invoke($assetName): bool - { - foreach ($this->schemaAssetFilters as $schemaAssetFilter) { - if ($schemaAssetFilter($assetName) === false) { - return false; - } - } - - return true; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/CacheCompatibilityPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/CacheCompatibilityPass.php deleted file mode 100644 index cefe51b..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/CacheCompatibilityPass.php +++ /dev/null @@ -1,125 +0,0 @@ -findTaggedServiceIds(self::CONFIGURATION_TAG)) as $id) { - foreach ($container->getDefinition($id)->getMethodCalls() as $methodCall) { - if ($methodCall[0] === 'setSecondLevelCacheConfiguration') { - $this->updateSecondLevelCache($container, $methodCall[1][0]); - continue; - } - - if (! in_array($methodCall[0], self::CACHE_METHODS_PSR6_SUPPORT, true)) { - continue; - } - - $aliasId = (string) $methodCall[1][0]; - $definitionId = (string) $container->getAlias($aliasId); - - $this->wrapIfNecessary($container, $aliasId, $definitionId); - } - } - } - - private function updateSecondLevelCache(ContainerBuilder $container, Definition $slcConfigDefinition): void - { - foreach ($slcConfigDefinition->getMethodCalls() as $methodCall) { - if ($methodCall[0] !== 'setCacheFactory') { - continue; - } - - $factoryDefinition = $methodCall[1][0]; - assert($factoryDefinition instanceof Definition); - $aliasId = (string) $factoryDefinition->getArgument(1); - $this->wrapIfNecessary($container, $aliasId, (string) $container->getAlias($aliasId)); - foreach ($factoryDefinition->getMethodCalls() as $factoryMethodCall) { - if ($factoryMethodCall[0] !== 'setRegion') { - continue; - } - - $regionDefinition = $container->getDefinition($factoryMethodCall[1][0]); - - // Get inner service for FileLock - if ($regionDefinition->getClass() === '%doctrine.orm.second_level_cache.filelock_region.class%') { - $regionDefinition = $container->getDefinition($regionDefinition->getArgument(0)); - } - - // We don't know how to adjust custom region classes - if ($regionDefinition->getClass() !== '%doctrine.orm.second_level_cache.default_region.class%') { - continue; - } - - $driverId = (string) $regionDefinition->getArgument(1); - if (! $container->hasAlias($driverId)) { - continue; - } - - $this->wrapIfNecessary($container, $driverId, (string) $container->getAlias($driverId)); - } - - break; - } - } - - private function createCompatibilityLayerDefinition(ContainerBuilder $container, string $definitionId): ?Definition - { - $definition = $container->getDefinition($definitionId); - - while (! $definition->getClass() && $definition instanceof ChildDefinition) { - $definition = $container->findDefinition($definition->getParent()); - } - - if (is_a($definition->getClass(), CacheItemPoolInterface::class, true)) { - return null; - } - - trigger_deprecation( - 'doctrine/doctrine-bundle', - '2.4', - 'Configuring doctrine/cache is deprecated. Please update the cache service "%s" to use a PSR-6 cache.', - $definitionId, - ); - - return (new Definition(CacheItemPoolInterface::class)) - ->setFactory([CacheAdapter::class, 'wrap']) - ->addArgument(new Reference($definitionId)); - } - - private function wrapIfNecessary(ContainerBuilder $container, string $aliasId, string $definitionId): void - { - $compatibilityLayer = $this->createCompatibilityLayerDefinition($container, $definitionId); - if ($compatibilityLayer === null) { - return; - } - - $compatibilityLayerId = $definitionId . '.compatibility_layer'; - $container->setAlias($aliasId, $compatibilityLayerId); - $container->setDefinition($compatibilityLayerId, $compatibilityLayer); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/CacheSchemaSubscriberPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/CacheSchemaSubscriberPass.php deleted file mode 100644 index a9b7f9e..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/CacheSchemaSubscriberPass.php +++ /dev/null @@ -1,55 +0,0 @@ -injectAdapters($container, 'doctrine.orm.listeners.doctrine_dbal_cache_adapter_schema_subscriber', DoctrineDbalAdapter::class); - - $this->injectAdapters($container, 'doctrine.orm.listeners.doctrine_dbal_cache_adapter_schema_listener', DoctrineDbalAdapter::class); - - // available in Symfony 5.1 and up to Symfony 5.4 (deprecated) - $this->injectAdapters($container, 'doctrine.orm.listeners.pdo_cache_adapter_doctrine_schema_subscriber', PdoAdapter::class); - } - - private function injectAdapters(ContainerBuilder $container, string $subscriberId, string $class) - { - if (! $container->hasDefinition($subscriberId)) { - return; - } - - $subscriber = $container->getDefinition($subscriberId); - - $cacheAdaptersReferences = []; - foreach ($container->getDefinitions() as $id => $definition) { - if ($definition->isAbstract() || $definition->isSynthetic()) { - continue; - } - - if ($definition->getClass() !== $class) { - continue; - } - - $cacheAdaptersReferences[] = new Reference($id); - } - - $subscriber->replaceArgument(0, $cacheAdaptersReferences); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/DbalSchemaFilterPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/DbalSchemaFilterPass.php deleted file mode 100644 index c1d3c7d..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/DbalSchemaFilterPass.php +++ /dev/null @@ -1,53 +0,0 @@ -findTaggedServiceIds('doctrine.dbal.schema_filter'); - - $connectionFilters = []; - foreach ($filters as $id => $tagAttributes) { - foreach ($tagAttributes as $attributes) { - $name = $attributes['connection'] ?? $container->getParameter('doctrine.default_connection'); - - if (! isset($connectionFilters[$name])) { - $connectionFilters[$name] = []; - } - - $connectionFilters[$name][] = new Reference($id); - } - } - - foreach ($connectionFilters as $name => $references) { - $configurationId = sprintf('doctrine.dbal.%s_connection.configuration', $name); - - if (! $container->hasDefinition($configurationId)) { - continue; - } - - $definition = new ChildDefinition('doctrine.dbal.schema_asset_filter_manager'); - $definition->setArgument(0, $references); - - $id = sprintf('doctrine.dbal.%s_schema_asset_filter_manager', $name); - $container->setDefinition($id, $definition); - $container->findDefinition($configurationId) - ->addMethodCall('setSchemaAssetsFilter', [new Reference($id)]); - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/DoctrineOrmMappingsPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/DoctrineOrmMappingsPass.php deleted file mode 100644 index 3a3a3ca..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/DoctrineOrmMappingsPass.php +++ /dev/null @@ -1,183 +0,0 @@ -findAndSortTaggedServices('doctrine.orm.entity_listener', $container); - - $lazyServiceReferencesByResolver = []; - - foreach ($resolvers as $reference) { - $id = $reference->__toString(); - foreach ($container->getDefinition($id)->getTag('doctrine.orm.entity_listener') as $attributes) { - $name = $attributes['entity_manager'] ?? $container->getParameter('doctrine.default_entity_manager'); - $entityManager = sprintf('doctrine.orm.%s_entity_manager', $name); - - if (! $container->hasDefinition($entityManager)) { - continue; - } - - $resolverId = sprintf('doctrine.orm.%s_entity_listener_resolver', $name); - - if (! $container->has($resolverId)) { - continue; - } - - $resolver = $container->findDefinition($resolverId); - $resolver->setPublic(true); - - if (isset($attributes['entity'])) { - $this->attachToListener($container, $name, $this->getConcreteDefinitionClass($container->findDefinition($id), $container, $id), $attributes); - } - - $resolverClass = $this->getResolverClass($resolver, $container, $resolverId); - $resolverSupportsLazyListeners = is_a($resolverClass, EntityListenerServiceResolver::class, true); - - $lazyByAttribute = isset($attributes['lazy']) && $attributes['lazy']; - if ($lazyByAttribute && ! $resolverSupportsLazyListeners) { - throw new InvalidArgumentException(sprintf( - 'Lazy-loaded entity listeners can only be resolved by a resolver implementing %s.', - EntityListenerServiceResolver::class, - )); - } - - if (! isset($attributes['lazy']) && $resolverSupportsLazyListeners || $lazyByAttribute) { - $listener = $container->findDefinition($id); - - $resolver->addMethodCall('registerService', [$this->getConcreteDefinitionClass($listener, $container, $id), $id]); - - // if the resolver uses the default class we will use a service locator for all listeners - if ($resolverClass === ContainerEntityListenerResolver::class) { - if (! isset($lazyServiceReferencesByResolver[$resolverId])) { - $lazyServiceReferencesByResolver[$resolverId] = []; - } - - $lazyServiceReferencesByResolver[$resolverId][$id] = new Reference($id); - } else { - $listener->setPublic(true); - } - } else { - $resolver->addMethodCall('register', [new Reference($id)]); - } - } - } - - foreach ($lazyServiceReferencesByResolver as $resolverId => $listenerReferences) { - $container->findDefinition($resolverId)->setArgument(0, ServiceLocatorTagPass::register($container, $listenerReferences)); - } - } - - /** @param array{entity: class-string, event?: ?string, method?: string} $attributes */ - private function attachToListener(ContainerBuilder $container, string $name, string $class, array $attributes): void - { - $listenerId = sprintf('doctrine.orm.%s_listeners.attach_entity_listeners', $name); - - if (! $container->has($listenerId)) { - return; - } - - $args = [ - $attributes['entity'], - $class, - $attributes['event'] ?? null, - ]; - - if (isset($attributes['method'])) { - $args[] = $attributes['method']; - } elseif (isset($attributes['event']) && ! method_exists($class, $attributes['event']) && method_exists($class, '__invoke')) { - $args[] = '__invoke'; - } - - $container->findDefinition($listenerId)->addMethodCall('addEntityListener', $args); - } - - private function getResolverClass(Definition $resolver, ContainerBuilder $container, string $id): string - { - $resolverClass = $this->getConcreteDefinitionClass($resolver, $container, $id); - - if (substr($resolverClass, 0, 1) === '%') { - // resolve container parameter first - $resolverClass = $container->getParameterBag()->resolveValue($resolverClass); - } - - return $resolverClass; - } - - private function getConcreteDefinitionClass(Definition $definition, ContainerBuilder $container, string $id): string - { - $class = $definition->getClass(); - if ($class) { - return $class; - } - - while ($definition instanceof ChildDefinition) { - $definition = $container->findDefinition($definition->getParent()); - - $class = $definition->getClass(); - if ($class) { - return $class; - } - } - - throw new InvalidArgumentException(sprintf('The service "%s" must define its class.', $id)); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/IdGeneratorPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/IdGeneratorPass.php deleted file mode 100644 index e2d52c3..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/IdGeneratorPass.php +++ /dev/null @@ -1,80 +0,0 @@ -findTaggedServiceIds(self::ID_GENERATOR_TAG)); - - // when ORM is not enabled - if (! $container->hasDefinition('doctrine.orm.configuration') || ! $generatorIds) { - return; - } - - $generatorRefs = array_map(static function ($id) { - return new Reference($id); - }, $generatorIds); - - $ref = ServiceLocatorTagPass::register($container, array_combine($generatorIds, $generatorRefs)); - $container->setAlias('doctrine.id_generator_locator', new Alias((string) $ref, false)); - - foreach ($container->findTaggedServiceIds(self::CONFIGURATION_TAG) as $id => $tags) { - $configurationDef = $container->getDefinition($id); - $methodCalls = $configurationDef->getMethodCalls(); - $metadataDriverImpl = null; - - foreach ($methodCalls as $i => [$method, $arguments]) { - if ($method === 'setMetadataDriverImpl') { - $metadataDriverImpl = (string) $arguments[0]; - } - - if ($method !== 'setClassMetadataFactoryName') { - continue; - } - - if ($arguments[0] !== ORMClassMetadataFactory::class && $arguments[0] !== ClassMetadataFactory::class) { - $class = $container->getReflectionClass($arguments[0]); - - if ($class && $class->isSubclassOf(ClassMetadataFactory::class)) { - break; - } - - continue 2; - } - - $methodCalls[$i] = ['setClassMetadataFactoryName', [ClassMetadataFactory::class]]; - } - - if ($metadataDriverImpl === null) { - continue; - } - - $configurationDef->setMethodCalls($methodCalls); - $container->register('.' . $metadataDriverImpl, MappingDriver::class) - ->setDecoratedService($metadataDriverImpl) - ->setArguments([ - new Reference(sprintf('.%s.inner', $metadataDriverImpl)), - new Reference('doctrine.id_generator_locator'), - ]); - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/MiddlewaresPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/MiddlewaresPass.php deleted file mode 100644 index 734c5b9..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/MiddlewaresPass.php +++ /dev/null @@ -1,88 +0,0 @@ -hasParameter('doctrine.connections')) { - return; - } - - $middlewareAbstractDefs = []; - $middlewareConnections = []; - $middlewarePriorities = []; - foreach ($container->findTaggedServiceIds('doctrine.middleware') as $id => $tags) { - $middlewareAbstractDefs[$id] = $container->getDefinition($id); - // When a def has doctrine.middleware tags with connection attributes equal to connection names - // registration of this middleware is limited to the connections with these names - foreach ($tags as $tag) { - if (! isset($tag['connection'])) { - if (isset($tag['priority']) && ! isset($middlewarePriorities[$id])) { - $middlewarePriorities[$id] = $tag['priority']; - } - - continue; - } - - $middlewareConnections[$id][$tag['connection']] = $tag['priority'] ?? null; - } - } - - foreach (array_keys($container->getParameter('doctrine.connections')) as $name) { - $middlewareRefs = []; - $i = 0; - foreach ($middlewareAbstractDefs as $id => $abstractDef) { - if (isset($middlewareConnections[$id]) && ! array_key_exists($name, $middlewareConnections[$id])) { - continue; - } - - $childDef = $container->setDefinition( - $childId = sprintf('%s.%s', $id, $name), - (new ChildDefinition($id)) - ->setTags($abstractDef->getTags())->clearTag('doctrine.middleware') - ->setAutoconfigured($abstractDef->isAutoconfigured()) - ->setAutowired($abstractDef->isAutowired()), - ); - $middlewareRefs[$id] = [new Reference($childId), ++$i]; - - if (! is_subclass_of($abstractDef->getClass(), ConnectionNameAwareInterface::class)) { - continue; - } - - $childDef->addMethodCall('setConnectionName', [$name]); - } - - $middlewareRefs = array_map( - static fn (string $id, array $ref) => [ - $middlewareConnections[$id][$name] ?? $middlewarePriorities[$id] ?? 0, - $ref[1], - $ref[0], - ], - array_keys($middlewareRefs), - array_values($middlewareRefs), - ); - uasort($middlewareRefs, static fn (array $a, array $b): int => $b[0] <=> $a[0] ?: $a[1] <=> $b[1]); - $middlewareRefs = array_map(static fn (array $value): Reference => $value[2], $middlewareRefs); - - $container - ->getDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $name)) - ->addMethodCall('setMiddlewares', [$middlewareRefs]); - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/RemoveLoggingMiddlewarePass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/RemoveLoggingMiddlewarePass.php deleted file mode 100644 index 331e0cb..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/RemoveLoggingMiddlewarePass.php +++ /dev/null @@ -1,19 +0,0 @@ -has('logger')) { - return; - } - - $container->removeDefinition('doctrine.dbal.logging_middleware'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/RemoveProfilerControllerPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/RemoveProfilerControllerPass.php deleted file mode 100644 index e070cec..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/RemoveProfilerControllerPass.php +++ /dev/null @@ -1,20 +0,0 @@ -has('twig') && $container->has('profiler')) { - return; - } - - $container->removeDefinition(ProfilerController::class); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/ServiceRepositoryCompilerPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/ServiceRepositoryCompilerPass.php deleted file mode 100644 index 5ecbdf5..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/ServiceRepositoryCompilerPass.php +++ /dev/null @@ -1,36 +0,0 @@ -hasDefinition('doctrine.orm.container_repository_factory')) { - return; - } - - $locatorDef = $container->getDefinition('doctrine.orm.container_repository_factory'); - - $repoServiceIds = array_keys($container->findTaggedServiceIds(self::REPOSITORY_SERVICE_TAG)); - - $repoReferences = array_map(static function ($id) { - return new Reference($id); - }, $repoServiceIds); - - $ref = ServiceLocatorTagPass::register($container, array_combine($repoServiceIds, $repoReferences)); - $locatorDef->replaceArgument(0, $ref); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/WellKnownSchemaFilterPass.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/WellKnownSchemaFilterPass.php deleted file mode 100644 index 7017b26..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Compiler/WellKnownSchemaFilterPass.php +++ /dev/null @@ -1,55 +0,0 @@ -getDefinitions() as $definition) { - if ($definition->isAbstract() || $definition->isSynthetic()) { - continue; - } - - if ($definition->getClass() !== PdoSessionHandler::class) { - continue; - } - - $table = $definition->getArguments()[1]['db_table'] ?? 'sessions'; - - if (! method_exists($definition->getClass(), 'configureSchema')) { - $blacklist[] = $table; - } - - break; - } - - if (! $blacklist) { - return; - } - - $definition = $container->getDefinition('doctrine.dbal.well_known_schema_asset_filter'); - $definition->replaceArgument(0, $blacklist); - - foreach (array_keys($container->getParameter('doctrine.connections')) as $name) { - $definition->addTag('doctrine.dbal.schema_filter', ['connection' => $name]); - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Configuration.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Configuration.php deleted file mode 100644 index 06cf3db..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/Configuration.php +++ /dev/null @@ -1,893 +0,0 @@ -debug = $debug; - } - - public function getConfigTreeBuilder(): TreeBuilder - { - $treeBuilder = new TreeBuilder('doctrine'); - $rootNode = $treeBuilder->getRootNode(); - - $this->addDbalSection($rootNode); - $this->addOrmSection($rootNode); - - return $treeBuilder; - } - - /** - * Add DBAL section to configuration tree - */ - private function addDbalSection(ArrayNodeDefinition $node): void - { - // Key that should not be rewritten to the connection config - $excludedKeys = ['default_connection' => true, 'driver_schemes' => true, 'driver_scheme' => true, 'types' => true, 'type' => true]; - - $node - ->children() - ->arrayNode('dbal') - ->beforeNormalization() - ->ifTrue(static function ($v) use ($excludedKeys) { - if (! is_array($v)) { - return false; - } - - if (array_key_exists('connections', $v) || array_key_exists('connection', $v)) { - return false; - } - - // Is there actually anything to use once excluded keys are considered? - return (bool) array_diff_key($v, $excludedKeys); - }) - ->then(static function ($v) use ($excludedKeys) { - $connection = []; - foreach ($v as $key => $value) { - if (isset($excludedKeys[$key])) { - continue; - } - - $connection[$key] = $v[$key]; - unset($v[$key]); - } - - $v['connections'] = [($v['default_connection'] ?? 'default') => $connection]; - - return $v; - }) - ->end() - ->children() - ->scalarNode('default_connection')->end() - ->end() - ->fixXmlConfig('type') - ->children() - ->arrayNode('types') - ->useAttributeAsKey('name') - ->prototype('array') - ->beforeNormalization() - ->ifString() - ->then(static function ($v) { - return ['class' => $v]; - }) - ->end() - ->children() - ->scalarNode('class')->isRequired()->end() - ->booleanNode('commented') - ->setDeprecated( - 'doctrine/doctrine-bundle', - '2.0', - 'The doctrine-bundle type commenting features were removed; the corresponding config parameter was deprecated in 2.0 and will be dropped in 3.0.', - ) - ->end() - ->end() - ->end() - ->end() - ->end() - ->fixXmlConfig('driver_scheme') - ->children() - ->arrayNode('driver_schemes') - ->useAttributeAsKey('scheme') - ->normalizeKeys(false) - ->scalarPrototype()->end() - ->info('Defines a driver for given URL schemes. Schemes being driver names cannot be redefined. However, other default schemes can be overwritten.') - ->validate() - ->always() - ->then(static function (array $value) { - $unsupportedSchemes = []; - - foreach ($value as $scheme => $driver) { - if (! in_array($scheme, ['pdo-mysql', 'pdo-sqlite', 'pdo-pgsql', 'pdo-oci', 'oci8', 'ibm-db2', 'pdo-sqlsrv', 'mysqli', 'pgsql', 'sqlsrv', 'sqlite3'], true)) { - continue; - } - - $unsupportedSchemes[] = $scheme; - } - - if ($unsupportedSchemes) { - throw new InvalidArgumentException(sprintf('Registering a scheme with the name of one of the official drivers is forbidden, as those are defined in DBAL itself. The following schemes are forbidden: %s', implode(', ', $unsupportedSchemes))); - } - - return $value; - }) - ->end() - ->end() - ->end() - ->fixXmlConfig('connection') - ->append($this->getDbalConnectionsNode()) - ->end(); - } - - /** - * Return the dbal connections node - */ - private function getDbalConnectionsNode(): ArrayNodeDefinition - { - $treeBuilder = new TreeBuilder('connections'); - $node = $treeBuilder->getRootNode(); - - $connectionNode = $node - ->requiresAtLeastOneElement() - ->useAttributeAsKey('name') - ->prototype('array'); - assert($connectionNode instanceof ArrayNodeDefinition); - - $this->configureDbalDriverNode($connectionNode); - - $collationKey = defined('Doctrine\DBAL\Connection::PARAM_ASCII_STR_ARRAY') - ? 'collate' - : 'collation'; - - $connectionNode - ->fixXmlConfig('option') - ->fixXmlConfig('mapping_type') - ->fixXmlConfig('slave') - ->fixXmlConfig('replica') - ->fixXmlConfig('default_table_option') - ->children() - ->scalarNode('driver')->defaultValue('pdo_mysql')->end() - ->scalarNode('platform_service') - ->setDeprecated( - 'doctrine/doctrine-bundle', - '2.9', - 'The "platform_service" configuration key is deprecated since doctrine-bundle 2.9. DBAL 4 will not support setting a custom platform via connection params anymore.', - ) - ->end() - ->booleanNode('auto_commit')->end() - ->scalarNode('schema_filter')->end() - ->booleanNode('logging')->defaultValue($this->debug)->end() - ->booleanNode('profiling')->defaultValue($this->debug)->end() - ->booleanNode('profiling_collect_backtrace') - ->defaultValue(false) - ->info('Enables collecting backtraces when profiling is enabled') - ->end() - ->booleanNode('profiling_collect_schema_errors') - ->defaultValue(true) - ->info('Enables collecting schema errors when profiling is enabled') - ->end() - ->booleanNode('disable_type_comments')->end() - ->scalarNode('server_version')->end() - ->integerNode('idle_connection_ttl')->defaultValue(600)->end() - ->scalarNode('driver_class')->end() - ->scalarNode('wrapper_class')->end() - ->booleanNode('keep_slave') - ->setDeprecated( - 'doctrine/doctrine-bundle', - '2.2', - 'The "keep_slave" configuration key is deprecated since doctrine-bundle 2.2. Use the "keep_replica" configuration key instead.', - ) - ->end() - ->booleanNode('keep_replica')->end() - ->arrayNode('options') - ->useAttributeAsKey('key') - ->prototype('variable')->end() - ->end() - ->arrayNode('mapping_types') - ->useAttributeAsKey('name') - ->prototype('scalar')->end() - ->end() - ->arrayNode('default_table_options') - ->info(sprintf( - "This option is used by the schema-tool and affects generated SQL. Possible keys include 'charset','%s', and 'engine'.", - $collationKey, - )) - ->useAttributeAsKey('name') - ->prototype('scalar')->end() - ->end() - ->scalarNode('schema_manager_factory') - ->cannotBeEmpty() - ->defaultValue($this->getDefaultSchemaManagerFactory()) - ->end() - ->scalarNode('result_cache')->end() - ->end(); - - // dbal < 2.11 - $slaveNode = $connectionNode - ->children() - ->arrayNode('slaves') - ->setDeprecated( - 'doctrine/doctrine-bundle', - '2.2', - 'The "slaves" configuration key will be renamed to "replicas" in doctrine-bundle 3.0. "slaves" is deprecated since doctrine-bundle 2.2.', - ) - ->useAttributeAsKey('name') - ->prototype('array'); - $this->configureDbalDriverNode($slaveNode); - - // dbal >= 2.11 - $replicaNode = $connectionNode - ->children() - ->arrayNode('replicas') - ->useAttributeAsKey('name') - ->prototype('array'); - $this->configureDbalDriverNode($replicaNode); - - return $node; - } - - /** - * Adds config keys related to params processed by the DBAL drivers - * - * These keys are available for replica configurations too. - */ - private function configureDbalDriverNode(ArrayNodeDefinition $node): void - { - $node - ->validate() - ->always(static function (array $values) { - if (! isset($values['url'])) { - return $values; - } - - $urlConflictingOptions = ['host' => true, 'port' => true, 'user' => true, 'password' => true, 'path' => true, 'dbname' => true, 'unix_socket' => true, 'memory' => true]; - $urlConflictingValues = array_keys(array_intersect_key($values, $urlConflictingOptions)); - - if ($urlConflictingValues) { - $tail = count($urlConflictingValues) > 1 ? sprintf('or "%s" options', array_pop($urlConflictingValues)) : 'option'; - trigger_deprecation( - 'doctrine/doctrine-bundle', - '2.4', - 'Setting the "doctrine.dbal.%s" %s while the "url" one is defined is deprecated', - implode('", "', $urlConflictingValues), - $tail, - ); - } - - return $values; - }) - ->end() - ->children() - ->scalarNode('url')->info('A URL with connection information; any parameter value parsed from this string will override explicitly set parameters')->end() - ->scalarNode('dbname')->end() - ->scalarNode('host')->info('Defaults to "localhost" at runtime.')->end() - ->scalarNode('port')->info('Defaults to null at runtime.')->end() - ->scalarNode('user')->info('Defaults to "root" at runtime.')->end() - ->scalarNode('password')->info('Defaults to null at runtime.')->end() - ->booleanNode('override_url')->setDeprecated( - 'doctrine/doctrine-bundle', - '2.4', - 'The "doctrine.dbal.override_url" configuration key is deprecated.', - )->end() - ->scalarNode('dbname_suffix')->end() - ->scalarNode('application_name')->end() - ->scalarNode('charset')->end() - ->scalarNode('path')->end() - ->booleanNode('memory')->end() - ->scalarNode('unix_socket')->info('The unix socket to use for MySQL')->end() - ->booleanNode('persistent')->info('True to use as persistent connection for the ibm_db2 driver')->end() - ->scalarNode('protocol')->info('The protocol to use for the ibm_db2 driver (default to TCPIP if omitted)')->end() - ->booleanNode('service') - ->info('True to use SERVICE_NAME as connection parameter instead of SID for Oracle') - ->end() - ->scalarNode('servicename') - ->info( - 'Overrules dbname parameter if given and used as SERVICE_NAME or SID connection parameter ' . - 'for Oracle depending on the service parameter.', - ) - ->end() - ->scalarNode('sessionMode') - ->info('The session mode to use for the oci8 driver') - ->end() - ->scalarNode('server') - ->info('The name of a running database server to connect to for SQL Anywhere.') - ->end() - ->scalarNode('default_dbname') - ->info( - 'Override the default database (postgres) to connect to for PostgreSQL connexion.', - ) - ->end() - ->scalarNode('sslmode') - ->info( - 'Determines whether or with what priority a SSL TCP/IP connection will be negotiated with ' . - 'the server for PostgreSQL.', - ) - ->end() - ->scalarNode('sslrootcert') - ->info( - 'The name of a file containing SSL certificate authority (CA) certificate(s). ' . - 'If the file exists, the server\'s certificate will be verified to be signed by one of these authorities.', - ) - ->end() - ->scalarNode('sslcert') - ->info( - 'The path to the SSL client certificate file for PostgreSQL.', - ) - ->end() - ->scalarNode('sslkey') - ->info( - 'The path to the SSL client key file for PostgreSQL.', - ) - ->end() - ->scalarNode('sslcrl') - ->info( - 'The file name of the SSL certificate revocation list for PostgreSQL.', - ) - ->end() - ->booleanNode('pooled')->info('True to use a pooled server with the oci8/pdo_oracle driver')->end() - ->booleanNode('MultipleActiveResultSets')->info('Configuring MultipleActiveResultSets for the pdo_sqlsrv driver')->end() - ->booleanNode('use_savepoints')->info('Use savepoints for nested transactions')->end() - ->scalarNode('instancename') - ->info( - 'Optional parameter, complete whether to add the INSTANCE_NAME parameter in the connection.' . - ' It is generally used to connect to an Oracle RAC server to select the name' . - ' of a particular instance.', - ) - ->end() - ->scalarNode('connectstring') - ->info( - 'Complete Easy Connect connection descriptor, see https://docs.oracle.com/database/121/NETAG/naming.htm.' . - 'When using this option, you will still need to provide the user and password parameters, but the other ' . - 'parameters will no longer be used. Note that when using this parameter, the getHost and getPort methods' . - ' from Doctrine\DBAL\Connection will no longer function as expected.', - ) - ->end() - ->end() - ->beforeNormalization() - ->ifTrue(static function ($v) { - return ! isset($v['sessionMode']) && isset($v['session_mode']); - }) - ->then(static function ($v) { - $v['sessionMode'] = $v['session_mode']; - unset($v['session_mode']); - - return $v; - }) - ->end() - ->beforeNormalization() - ->ifTrue(static function ($v) { - return ! isset($v['MultipleActiveResultSets']) && isset($v['multiple_active_result_sets']); - }) - ->then(static function ($v) { - $v['MultipleActiveResultSets'] = $v['multiple_active_result_sets']; - unset($v['multiple_active_result_sets']); - - return $v; - }) - ->end(); - } - - /** - * Add the ORM section to configuration tree - */ - private function addOrmSection(ArrayNodeDefinition $node): void - { - // Key that should not be rewritten to the entity-manager config - $excludedKeys = [ - 'default_entity_manager' => true, - 'auto_generate_proxy_classes' => true, - 'enable_lazy_ghost_objects' => true, - 'proxy_dir' => true, - 'proxy_namespace' => true, - 'resolve_target_entities' => true, - 'resolve_target_entity' => true, - 'controller_resolver' => true, - ]; - - $node - ->children() - ->arrayNode('orm') - ->beforeNormalization() - ->ifTrue(static function ($v) use ($excludedKeys) { - if (! empty($v) && ! class_exists(EntityManager::class)) { - throw new LogicException('The doctrine/orm package is required when the doctrine.orm config is set.'); - } - - if (! is_array($v)) { - return false; - } - - if (array_key_exists('entity_managers', $v) || array_key_exists('entity_manager', $v)) { - return false; - } - - // Is there actually anything to use once excluded keys are considered? - return (bool) array_diff_key($v, $excludedKeys); - }) - ->then(static function ($v) use ($excludedKeys) { - $entityManager = []; - foreach ($v as $key => $value) { - if (isset($excludedKeys[$key])) { - continue; - } - - $entityManager[$key] = $v[$key]; - unset($v[$key]); - } - - $v['entity_managers'] = [($v['default_entity_manager'] ?? 'default') => $entityManager]; - - return $v; - }) - ->end() - ->children() - ->scalarNode('default_entity_manager')->end() - ->scalarNode('auto_generate_proxy_classes')->defaultValue(false) - ->info('Auto generate mode possible values are: "NEVER", "ALWAYS", "FILE_NOT_EXISTS", "EVAL", "FILE_NOT_EXISTS_OR_CHANGED"') - ->validate() - ->ifTrue(function ($v) { - $generationModes = $this->getAutoGenerateModes(); - - if (is_int($v) && in_array($v, $generationModes['values']/*array(0, 1, 2, 3)*/)) { - return false; - } - - if (is_bool($v)) { - return false; - } - - if (is_string($v)) { - if (in_array(strtoupper($v), $generationModes['names']/*array('NEVER', 'ALWAYS', 'FILE_NOT_EXISTS', 'EVAL', 'FILE_NOT_EXISTS_OR_CHANGED')*/)) { - return false; - } - } - - return true; - }) - ->thenInvalid('Invalid auto generate mode value %s') - ->end() - ->validate() - ->ifString() - ->then(static function ($v) { - return constant('Doctrine\ORM\Proxy\ProxyFactory::AUTOGENERATE_' . strtoupper($v)); - }) - ->end() - ->end() - ->booleanNode('enable_lazy_ghost_objects') - ->defaultValue(! method_exists(ProxyFactory::class, 'resetUninitializedProxy')) - ->info('Enables the new implementation of proxies based on lazy ghosts instead of using the legacy implementation') - ->end() - ->scalarNode('proxy_dir')->defaultValue('%kernel.cache_dir%/doctrine/orm/Proxies')->end() - ->scalarNode('proxy_namespace')->defaultValue('Proxies')->end() - ->arrayNode('controller_resolver') - ->canBeDisabled() - ->children() - ->booleanNode('auto_mapping') - ->defaultNull() - ->info('Set to false to disable using route placeholders as lookup criteria when the primary key doesn\'t match the argument name') - ->end() - ->booleanNode('evict_cache') - ->info('Set to true to fetch the entity from the database instead of using the cache, if any') - ->defaultFalse() - ->end() - ->end() - ->end() - ->end() - ->fixXmlConfig('entity_manager') - ->append($this->getOrmEntityManagersNode()) - ->fixXmlConfig('resolve_target_entity', 'resolve_target_entities') - ->append($this->getOrmTargetEntityResolverNode()) - ->end() - ->end(); - } - - /** - * Return ORM target entity resolver node - */ - private function getOrmTargetEntityResolverNode(): NodeDefinition - { - $treeBuilder = new TreeBuilder('resolve_target_entities'); - $node = $treeBuilder->getRootNode(); - - $node - ->useAttributeAsKey('interface') - ->prototype('scalar') - ->cannotBeEmpty() - ->end(); - - return $node; - } - - /** - * Return ORM entity listener node - */ - private function getOrmEntityListenersNode(): NodeDefinition - { - $treeBuilder = new TreeBuilder('entity_listeners'); - $node = $treeBuilder->getRootNode(); - - $normalizer = static function ($mappings) { - $entities = []; - - foreach ($mappings as $entityClass => $mapping) { - $listeners = []; - - foreach ($mapping as $listenerClass => $listenerEvent) { - $events = []; - - foreach ($listenerEvent as $eventType => $eventMapping) { - if ($eventMapping === null) { - $eventMapping = [null]; - } - - foreach ($eventMapping as $method) { - $events[] = [ - 'type' => $eventType, - 'method' => $method, - ]; - } - } - - $listeners[] = [ - 'class' => $listenerClass, - 'event' => $events, - ]; - } - - $entities[] = [ - 'class' => $entityClass, - 'listener' => $listeners, - ]; - } - - return ['entities' => $entities]; - }; - - $node - ->beforeNormalization() - // Yaml normalization - ->ifTrue(static function ($v) { - return is_array(reset($v)) && is_string(key(reset($v))); - }) - ->then($normalizer) - ->end() - ->fixXmlConfig('entity', 'entities') - ->children() - ->arrayNode('entities') - ->useAttributeAsKey('class') - ->prototype('array') - ->fixXmlConfig('listener') - ->children() - ->arrayNode('listeners') - ->useAttributeAsKey('class') - ->prototype('array') - ->fixXmlConfig('event') - ->children() - ->arrayNode('events') - ->prototype('array') - ->children() - ->scalarNode('type')->end() - ->scalarNode('method')->defaultNull()->end() - ->end() - ->end() - ->end() - ->end() - ->end() - ->end() - ->end() - ->end() - ->end() - ->end(); - - return $node; - } - - /** - * Return ORM entity manager node - */ - private function getOrmEntityManagersNode(): ArrayNodeDefinition - { - $treeBuilder = new TreeBuilder('entity_managers'); - $node = $treeBuilder->getRootNode(); - - $node - ->requiresAtLeastOneElement() - ->useAttributeAsKey('name') - ->prototype('array') - ->addDefaultsIfNotSet() - ->append($this->getOrmCacheDriverNode('query_cache_driver')) - ->append($this->getOrmCacheDriverNode('metadata_cache_driver')) - ->append($this->getOrmCacheDriverNode('result_cache_driver')) - ->append($this->getOrmEntityListenersNode()) - ->fixXmlConfig('schema_ignore_class', 'schema_ignore_classes') - ->children() - ->scalarNode('connection')->end() - ->scalarNode('class_metadata_factory_name')->defaultValue(ClassMetadataFactory::class)->end() - ->scalarNode('default_repository_class')->defaultValue(EntityRepository::class)->end() - ->scalarNode('auto_mapping')->defaultFalse()->end() - ->scalarNode('naming_strategy')->defaultValue('doctrine.orm.naming_strategy.default')->end() - ->scalarNode('quote_strategy')->defaultValue('doctrine.orm.quote_strategy.default')->end() - ->scalarNode('typed_field_mapper')->defaultValue('doctrine.orm.typed_field_mapper.default')->end() - ->scalarNode('entity_listener_resolver')->defaultNull()->end() - ->scalarNode('repository_factory')->defaultValue('doctrine.orm.container_repository_factory')->end() - ->arrayNode('schema_ignore_classes') - ->prototype('scalar')->end() - ->end() - ->booleanNode('report_fields_where_declared') - ->defaultValue(! class_exists(AnnotationDriver::class)) - ->info('Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.16 and will be mandatory in ORM 3.0. See https://github.com/doctrine/orm/pull/10455.') - ->validate() - ->ifTrue(static fn (bool $v): bool => ! class_exists(AnnotationDriver::class) && ! $v) - ->thenInvalid('The setting "report_fields_where_declared" cannot be disabled for ORM 3.') - ->end() - ->end() - ->booleanNode('validate_xml_mapping')->defaultFalse()->info('Set to "true" to opt-in to the new mapping driver mode that was added in Doctrine ORM 2.14 and will be mandatory in ORM 3.0. See https://github.com/doctrine/orm/pull/6728.')->end() - ->end() - ->children() - ->arrayNode('second_level_cache') - ->children() - ->append($this->getOrmCacheDriverNode('region_cache_driver')) - ->scalarNode('region_lock_lifetime')->defaultValue(60)->end() - ->booleanNode('log_enabled')->defaultValue($this->debug)->end() - ->scalarNode('region_lifetime')->defaultValue(3600)->end() - ->booleanNode('enabled')->defaultValue(true)->end() - ->scalarNode('factory')->end() - ->end() - ->fixXmlConfig('region') - ->children() - ->arrayNode('regions') - ->useAttributeAsKey('name') - ->prototype('array') - ->children() - ->append($this->getOrmCacheDriverNode('cache_driver')) - ->scalarNode('lock_path')->defaultValue('%kernel.cache_dir%/doctrine/orm/slc/filelock')->end() - ->scalarNode('lock_lifetime')->defaultValue(60)->end() - ->scalarNode('type')->defaultValue('default')->end() - ->scalarNode('lifetime')->defaultValue(0)->end() - ->scalarNode('service')->end() - ->scalarNode('name')->end() - ->end() - ->end() - ->end() - ->end() - ->fixXmlConfig('logger') - ->children() - ->arrayNode('loggers') - ->useAttributeAsKey('name') - ->prototype('array') - ->children() - ->scalarNode('name')->end() - ->scalarNode('service')->end() - ->end() - ->end() - ->end() - ->end() - ->end() - ->end() - ->fixXmlConfig('hydrator') - ->children() - ->arrayNode('hydrators') - ->useAttributeAsKey('name') - ->prototype('scalar')->end() - ->end() - ->end() - ->fixXmlConfig('mapping') - ->children() - ->arrayNode('mappings') - ->useAttributeAsKey('name') - ->prototype('array') - ->beforeNormalization() - ->ifString() - ->then(static function ($v) { - return ['type' => $v]; - }) - ->end() - ->treatNullLike([]) - ->treatFalseLike(['mapping' => false]) - ->performNoDeepMerging() - ->children() - ->scalarNode('mapping')->defaultValue(true)->end() - ->scalarNode('type')->end() - ->scalarNode('dir')->end() - ->scalarNode('alias')->end() - ->scalarNode('prefix')->end() - ->booleanNode('is_bundle')->end() - ->end() - ->end() - ->end() - ->arrayNode('dql') - ->fixXmlConfig('string_function') - ->fixXmlConfig('numeric_function') - ->fixXmlConfig('datetime_function') - ->children() - ->arrayNode('string_functions') - ->useAttributeAsKey('name') - ->prototype('scalar')->end() - ->end() - ->arrayNode('numeric_functions') - ->useAttributeAsKey('name') - ->prototype('scalar')->end() - ->end() - ->arrayNode('datetime_functions') - ->useAttributeAsKey('name') - ->prototype('scalar')->end() - ->end() - ->end() - ->end() - ->end() - ->fixXmlConfig('filter') - ->children() - ->arrayNode('filters') - ->info('Register SQL Filters in the entity manager') - ->useAttributeAsKey('name') - ->prototype('array') - ->beforeNormalization() - ->ifString() - ->then(static function ($v) { - return ['class' => $v]; - }) - ->end() - ->beforeNormalization() - // The content of the XML node is returned as the "value" key so we need to rename it - ->ifTrue(static function ($v) { - return is_array($v) && isset($v['value']); - }) - ->then(static function ($v) { - $v['class'] = $v['value']; - unset($v['value']); - - return $v; - }) - ->end() - ->fixXmlConfig('parameter') - ->children() - ->scalarNode('class')->isRequired()->end() - ->booleanNode('enabled')->defaultFalse()->end() - ->arrayNode('parameters') - ->useAttributeAsKey('name') - ->prototype('variable')->end() - ->end() - ->end() - ->end() - ->end() - ->end() - ->fixXmlConfig('identity_generation_preference') - ->children() - ->arrayNode('identity_generation_preferences') - ->info('Configures the preferences for identity generation when using the AUTO strategy. Valid values are "SEQUENCE" or "IDENTITY".') - ->useAttributeAsKey('platform') - ->prototype('scalar') - ->beforeNormalization() - ->ifString() - ->then(static function ($v) { - return constant(ClassMetadata::class . '::GENERATOR_TYPE_' . strtoupper($v)); - }) - ->end() - ->end() - ->end() - ->end() - ->end(); - - return $node; - } - - /** - * Return an ORM cache driver node for a given entity manager - */ - private function getOrmCacheDriverNode(string $name): ArrayNodeDefinition - { - $treeBuilder = new TreeBuilder($name); - $node = $treeBuilder->getRootNode(); - - $node - ->beforeNormalization() - ->ifString() - ->then(static function ($v): array { - return ['type' => $v]; - }) - ->end() - ->children() - ->scalarNode('type')->defaultNull()->end() - ->scalarNode('id')->end() - ->scalarNode('pool')->end() - ->end(); - - if ($name !== 'metadata_cache_driver') { - $node->addDefaultsIfNotSet(); - } - - return $node; - } - - /** - * Find proxy auto generate modes for their names and int values - * - * @return array{names: list, values: list} - */ - private function getAutoGenerateModes(): array - { - $constPrefix = 'AUTOGENERATE_'; - $prefixLen = strlen($constPrefix); - $refClass = new ReflectionClass(ProxyFactory::class); - $constsArray = $refClass->getConstants(); - $namesArray = []; - $valuesArray = []; - - foreach ($constsArray as $key => $value) { - if (strpos($key, $constPrefix) !== 0) { - continue; - } - - $namesArray[] = substr($key, $prefixLen); - $valuesArray[] = (int) $value; - } - - return [ - 'names' => $namesArray, - 'values' => $valuesArray, - ]; - } - - private function getDefaultSchemaManagerFactory(): string - { - if (class_exists(LegacySchemaManagerFactory::class)) { - return 'doctrine.dbal.legacy_schema_manager_factory'; - } - - return 'doctrine.dbal.default_schema_manager_factory'; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/DoctrineExtension.php b/vendor/doctrine/doctrine-bundle/src/DependencyInjection/DoctrineExtension.php deleted file mode 100644 index 30cbfa6..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DependencyInjection/DoctrineExtension.php +++ /dev/null @@ -1,1241 +0,0 @@ -, - * driver_schemes: array, - * default_connection: string, - * types: array, - * } - */ -class DoctrineExtension extends AbstractDoctrineExtension -{ - private string $defaultConnection; - - /** - * {@inheritDoc} - * - * @return void - */ - public function load(array $configs, ContainerBuilder $container) - { - $configuration = $this->getConfiguration($configs, $container); - $config = $this->processConfigurationPrependingDefaults($configuration, $configs); - - if (! empty($config['dbal'])) { - $this->dbalLoad($config['dbal'], $container); - - $this->loadMessengerServices($container); - } - - if (empty($config['orm'])) { - return; - } - - if (empty($config['dbal'])) { - throw new LogicException('Configuring the ORM layer requires to configure the DBAL layer as well.'); - } - - $this->ormLoad($config['orm'], $container); - } - - /** - * Process user configuration and adds a default DBAL connection and/or a - * default EM if required, then process again the configuration to get - * default values for each. - * - * @param array> $configs - * - * @return array - */ - private function processConfigurationPrependingDefaults(ConfigurationInterface $configuration, array $configs): array - { - $config = $this->processConfiguration($configuration, $configs); - $configToAdd = []; - - // if no DB connection defined, prepend an empty one for the default - // connection name in order to make Symfony Config resolve the default - // values - if (isset($config['dbal']) && empty($config['dbal']['connections'])) { - $configToAdd['dbal'] = ['connections' => [($config['dbal']['default_connection'] ?? 'default') => []]]; - } - - // if no EM defined, prepend an empty one for the default EM name in - // order to make Symfony Config resolve the default values - if (isset($config['orm']) && empty($config['orm']['entity_managers'])) { - $configToAdd['orm'] = ['entity_managers' => [($config['orm']['default_entity_manager'] ?? 'default') => []]]; - } - - if (! $configToAdd) { - return $config; - } - - return $this->processConfiguration($configuration, array_merge([$configToAdd], $configs)); - } - - /** - * Loads the DBAL configuration. - * - * Usage example: - * - * - * - * @param DBALConfig $config An array of configuration settings - * @param ContainerBuilder $container A ContainerBuilder instance - */ - protected function dbalLoad(array $config, ContainerBuilder $container) - { - $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../../config')); - $loader->load('dbal.xml'); - - if (empty($config['default_connection'])) { - $keys = array_keys($config['connections']); - $config['default_connection'] = reset($keys); - } - - $this->defaultConnection = $config['default_connection']; - - $container->setAlias('database_connection', sprintf('doctrine.dbal.%s_connection', $this->defaultConnection)); - $container->getAlias('database_connection')->setPublic(true); - $container->setAlias('doctrine.dbal.event_manager', new Alias(sprintf('doctrine.dbal.%s_connection.event_manager', $this->defaultConnection), false)); - - $container->setParameter('doctrine.dbal.connection_factory.types', $config['types']); - - $container->getDefinition('doctrine.dbal.connection_factory.dsn_parser')->setArgument(0, array_merge(ConnectionFactory::DEFAULT_SCHEME_MAP, $config['driver_schemes'])); - - $connections = []; - - foreach (array_keys($config['connections']) as $name) { - $connections[$name] = sprintf('doctrine.dbal.%s_connection', $name); - } - - $container->setParameter('doctrine.connections', $connections); - $container->setParameter('doctrine.default_connection', $this->defaultConnection); - - $connWithLogging = []; - $connWithProfiling = []; - $connWithBacktrace = []; - $ttlByConnection = []; - - foreach ($config['connections'] as $name => $connection) { - if ($connection['logging']) { - $connWithLogging[] = $name; - } - - if ($connection['profiling']) { - $connWithProfiling[] = $name; - - if ($connection['profiling_collect_backtrace']) { - $connWithBacktrace[] = $name; - } - } - - if ($connection['idle_connection_ttl'] > 0) { - $ttlByConnection[$name] = $connection['idle_connection_ttl']; - } - - $this->loadDbalConnection($name, $connection, $container); - } - - $container->registerForAutoconfiguration(MiddlewareInterface::class)->addTag('doctrine.middleware'); - - $container->registerAttributeForAutoconfiguration(AsMiddleware::class, static function (ChildDefinition $definition, AsMiddleware $attribute) { - $priority = isset($attribute->priority) ? ['priority' => $attribute->priority] : []; - - if ($attribute->connections === []) { - $definition->addTag('doctrine.middleware', $priority); - - return; - } - - foreach ($attribute->connections as $connName) { - $definition->addTag('doctrine.middleware', array_merge($priority, ['connection' => $connName])); - } - }); - - $this->registerDbalMiddlewares($container, $connWithLogging, $connWithProfiling, $connWithBacktrace, array_keys($ttlByConnection)); - - $container->getDefinition('doctrine.dbal.idle_connection_middleware')->setArgument(1, $ttlByConnection); - - if (class_exists(Listener::class)) { - return; - } - - $container->removeDefinition('doctrine.dbal.idle_connection_listener'); - $container->removeDefinition('doctrine.dbal.idle_connection_middleware'); - } - - /** - * Loads a configured DBAL connection. - * - * @param string $name The name of the connection - * @param array $connection A dbal connection configuration. - * @param ContainerBuilder $container A ContainerBuilder instance - */ - protected function loadDbalConnection($name, array $connection, ContainerBuilder $container) - { - $configuration = $container->setDefinition(sprintf('doctrine.dbal.%s_connection.configuration', $name), new ChildDefinition('doctrine.dbal.connection.configuration')); - unset($connection['logging']); - - $dataCollectorDefinition = $container->getDefinition('data_collector.doctrine'); - $dataCollectorDefinition->replaceArgument(1, $connection['profiling_collect_schema_errors']); - - unset( - $connection['profiling'], - $connection['profiling_collect_backtrace'], - $connection['profiling_collect_schema_errors'], - ); - - if (isset($connection['auto_commit'])) { - $configuration->addMethodCall('setAutoCommit', [$connection['auto_commit']]); - } - - unset($connection['auto_commit']); - - if (isset($connection['disable_type_comments'])) { - $configuration->addMethodCall('setDisableTypeComments', [$connection['disable_type_comments']]); - } - - unset($connection['disable_type_comments']); - - if (isset($connection['schema_filter']) && $connection['schema_filter']) { - $definition = new Definition(RegexSchemaAssetFilter::class, [$connection['schema_filter']]); - $definition->addTag('doctrine.dbal.schema_filter', ['connection' => $name]); - $container->setDefinition(sprintf('doctrine.dbal.%s_regex_schema_filter', $name), $definition); - } - - unset($connection['schema_filter']); - - // event manager - $container->setDefinition(sprintf('doctrine.dbal.%s_connection.event_manager', $name), new ChildDefinition('doctrine.dbal.connection.event_manager')); - - // connection - $options = $this->getConnectionOptions($connection); - - $connectionId = sprintf('doctrine.dbal.%s_connection', $name); - - $def = $container - ->setDefinition($connectionId, new ChildDefinition('doctrine.dbal.connection')) - ->setPublic(true) - ->setArguments([ - $options, - new Reference(sprintf('doctrine.dbal.%s_connection.configuration', $name)), - // event manager is only supported on DBAL < 4 - method_exists(Connection::class, 'getEventManager') ? new Reference(sprintf('doctrine.dbal.%s_connection.event_manager', $name)) : null, - $connection['mapping_types'], - ]); - - $container - ->registerAliasForArgument($connectionId, Connection::class, sprintf('%sConnection', $name)) - ->setPublic(false); - - // Set class in case "wrapper_class" option was used to assist IDEs - if (isset($options['wrapperClass'])) { - $def->setClass($options['wrapperClass']); - } - - if (isset($connection['use_savepoints'])) { - // DBAL >= 4 always has savepoints enabled. So we only need to call "setNestTransactionsWithSavepoints" for DBAL < 4 - if (method_exists(Connection::class, 'getEventManager')) { - if ($connection['use_savepoints']) { - $def->addMethodCall('setNestTransactionsWithSavepoints', [$connection['use_savepoints']]); - } - } elseif (! $connection['use_savepoints']) { - throw new LogicException('The "use_savepoints" option can only be set to "true" and should ideally not be set when using DBAL >= 4'); - } - } - - $container->setDefinition( - ManagerRegistryAwareConnectionProvider::class, - new Definition(ManagerRegistryAwareConnectionProvider::class, [$container->getDefinition('doctrine')]), - ); - - $configuration->addMethodCall('setSchemaManagerFactory', [new Reference($connection['schema_manager_factory'])]); - - if (isset($connection['result_cache'])) { - $configuration->addMethodCall('setResultCache', [new Reference($connection['result_cache'])]); - } - - if (class_exists(LegacySchemaManagerFactory::class)) { - return; - } - - $container->removeDefinition('doctrine.dbal.legacy_schema_manager_factory'); - } - - /** - * @param array $connection - * - * @return mixed[] - */ - protected function getConnectionOptions(array $connection): array - { - $options = $connection; - - $connectionDefaults = [ - 'host' => 'localhost', - 'port' => null, - 'user' => 'root', - 'password' => null, - ]; - - if ($options['override_url'] ?? false) { - $options['connection_override_options'] = array_intersect_key($options, ['dbname' => null] + $connectionDefaults); - } - - unset($options['override_url']); - unset($options['schema_manager_factory']); - - $options += $connectionDefaults; - - foreach (['replicas', 'slaves'] as $connectionKey) { - foreach (array_keys($options[$connectionKey]) as $name) { - $options[$connectionKey][$name] += $connectionDefaults; - } - } - - if (isset($options['platform_service'])) { - $options['platform'] = new Reference($options['platform_service']); - unset($options['platform_service']); - } - - unset($options['mapping_types']); - - foreach ( - [ - 'options' => 'driverOptions', - 'driver_class' => 'driverClass', - 'wrapper_class' => 'wrapperClass', - 'keep_slave' => 'keepReplica', - 'keep_replica' => 'keepReplica', - 'replicas' => 'replica', - 'server_version' => 'serverVersion', - 'default_table_options' => 'defaultTableOptions', - ] as $old => $new - ) { - if (! isset($options[$old])) { - continue; - } - - $options[$new] = $options[$old]; - unset($options[$old]); - } - - foreach (['replica', 'slaves'] as $connectionKey) { - foreach ($options[$connectionKey] as $name => $value) { - $driverOptions = $value['driverOptions'] ?? []; - $parentDriverOptions = $options['driverOptions'] ?? []; - if ($driverOptions === [] && $parentDriverOptions === []) { - continue; - } - - $options[$connectionKey][$name]['driverOptions'] = $driverOptions + $parentDriverOptions; - } - } - - if (! empty($options['slaves']) || ! empty($options['replica'])) { - $nonRewrittenKeys = [ - 'driver' => true, - 'driverClass' => true, - 'wrapperClass' => true, - 'keepSlave' => true, - 'keepReplica' => true, - 'platform' => true, - 'slaves' => true, - 'primary' => true, - 'replica' => true, - 'serverVersion' => true, - 'defaultTableOptions' => true, - // included by safety but should have been unset already - 'logging' => true, - 'profiling' => true, - 'mapping_types' => true, - 'platform_service' => true, - ]; - foreach ($options as $key => $value) { - if (isset($nonRewrittenKeys[$key])) { - continue; - } - - $options['primary'][$key] = $value; - unset($options[$key]); - } - - if (empty($options['wrapperClass'])) { - // Change the wrapper class only if user did not configure custom one. - $options['wrapperClass'] = PrimaryReadReplicaConnection::class; - } - } else { - unset($options['slaves'], $options['replica']); - } - - return $options; - } - - /** - * Loads the Doctrine ORM configuration. - * - * Usage example: - * - * - * - * @param array $config An array of configuration settings - * @param ContainerBuilder $container A ContainerBuilder instance - */ - protected function ormLoad(array $config, ContainerBuilder $container) - { - if (! class_exists(UnitOfWork::class)) { - throw new LogicException('To configure the ORM layer, you must first install the doctrine/orm package.'); - } - - $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../../config')); - $loader->load('orm.xml'); - - if (class_exists(AbstractType::class)) { - $container->getDefinition('form.type.entity')->addTag('kernel.reset', ['method' => 'reset']); - } - - if (! class_exists(Annotation::class)) { - $container->removeAlias('doctrine.orm.metadata.annotation_reader'); - } - - // available in Symfony 6.3 - $container->removeDefinition('doctrine.orm.listeners.doctrine_dbal_cache_adapter_schema_' . (class_exists(DoctrineDbalCacheAdapterSchemaListener::class) ? 'subscriber' : 'listener')); - - // available in Symfony 6.3 - $container->removeDefinition('doctrine.orm.listeners.doctrine_token_provider_schema_' . (class_exists(RememberMeTokenProviderDoctrineSchemaListener::class) ? 'subscriber' : 'listener')); - - // available in Symfony 5.1 and up to Symfony 5.4 (deprecated) - if (! class_exists(PdoCacheAdapterDoctrineSchemaSubscriber::class)) { - $container->removeDefinition('doctrine.orm.listeners.pdo_cache_adapter_doctrine_schema_subscriber'); - } - - if (! class_exists(PdoSessionHandlerSchemaListener::class)) { - $container->removeDefinition('doctrine.orm.listeners.pdo_session_handler_schema_listener'); - } - - // available in Symfony 6.3 and higher - if (! class_exists(LockStoreSchemaListener::class)) { - $container->removeDefinition('doctrine.orm.listeners.lock_store_schema_listener'); - } - - if (! class_exists(UlidGenerator::class)) { - $container->removeDefinition('doctrine.ulid_generator'); - } - - if (! class_exists(UuidGenerator::class)) { - $container->removeDefinition('doctrine.uuid_generator'); - } - - // available in Symfony 6.2 and higher - if (! class_exists(EntityValueResolver::class)) { - $container->removeDefinition('doctrine.orm.entity_value_resolver'); - $container->removeDefinition('doctrine.orm.entity_value_resolver.expression_language'); - } else { - if (! class_exists(ExpressionLanguage::class)) { - $container->removeDefinition('doctrine.orm.entity_value_resolver.expression_language'); - } - - $controllerResolverDefaults = []; - - if (! $config['controller_resolver']['enabled']) { - $controllerResolverDefaults['disabled'] = true; - } - - if ($config['controller_resolver']['auto_mapping'] === null) { - trigger_deprecation('doctrine/doctrine-bundle', '2.12', 'The default value of "doctrine.orm.controller_resolver.auto_mapping" will be changed from `true` to `false`. Explicitly configure `true` to keep existing behaviour.'); - $config['controller_resolver']['auto_mapping'] = true; - } - - if ($config['controller_resolver']['auto_mapping'] === true) { - trigger_deprecation('doctrine/doctrine-bundle', '2.13', 'Enabling the controller resolver automapping feature has been deprecated. Symfony Mapped Route Parameters should be used as replacement.'); - } - - if (! $config['controller_resolver']['auto_mapping']) { - $controllerResolverDefaults['mapping'] = []; - } - - if ($config['controller_resolver']['evict_cache']) { - $controllerResolverDefaults['evict_cache'] = true; - } - - if ($controllerResolverDefaults) { - $container->getDefinition('doctrine.orm.entity_value_resolver')->setArgument(2, (new Definition(MapEntity::class))->setArguments([ - null, - null, - null, - $controllerResolverDefaults['mapping'] ?? null, - null, - null, - null, - $controllerResolverDefaults['evict_cache'] ?? null, - $controllerResolverDefaults['disabled'] ?? false, - ])); - } - } - - // not available in Doctrine ORM 3.0 and higher - if (! class_exists(ConvertMappingCommand::class)) { - $container->removeDefinition('doctrine.mapping_convert_command'); - } - - if (! class_exists(EnsureProductionSettingsCommand::class)) { - $container->removeDefinition('doctrine.ensure_production_settings_command'); - } - - if (! class_exists(ClassMetadataExporter::class)) { - $container->removeDefinition('doctrine.mapping_import_command'); - } - - $entityManagers = []; - foreach (array_keys($config['entity_managers']) as $name) { - /** @psalm-suppress InvalidArrayOffset */ - $entityManagers[$name] = sprintf('doctrine.orm.%s_entity_manager', $name); - } - - $container->setParameter('doctrine.entity_managers', $entityManagers); - - if (empty($config['default_entity_manager'])) { - $tmp = array_keys($entityManagers); - $config['default_entity_manager'] = reset($tmp); - } - - $container->setParameter('doctrine.default_entity_manager', $config['default_entity_manager']); - - if ($config['enable_lazy_ghost_objects'] ?? false) { - // available in Symfony 6.2 and higher - if (! trait_exists(LazyGhostTrait::class)) { - throw new LogicException( - 'Lazy ghost objects cannot be enabled because the "symfony/var-exporter" library' - . ' version 6.2 or higher is not installed. Please run "composer require symfony/var-exporter:^6.2".', - ); - } - - if (! class_exists(RuntimeReflectionProperty::class)) { - throw new LogicException( - 'Lazy ghost objects cannot be enabled because the "doctrine/persistence" library' - . ' version 3.1 or higher is not installed. Please run "composer update doctrine/persistence".', - ); - } - } elseif (! method_exists(ProxyFactory::class, 'resetUninitializedProxy')) { - throw new LogicException( - 'Lazy ghost objects cannot be disabled for ORM 3.', - ); - } elseif (PHP_VERSION_ID >= 80100) { - trigger_deprecation('doctrine/doctrine-bundle', '2.11', 'Not setting "doctrine.orm.enable_lazy_ghost_objects" to true is deprecated.'); - } - - $options = ['auto_generate_proxy_classes', 'enable_lazy_ghost_objects', 'proxy_dir', 'proxy_namespace']; - foreach ($options as $key) { - $container->setParameter('doctrine.orm.' . $key, $config[$key]); - } - - $container->setAlias('doctrine.orm.entity_manager', $defaultEntityManagerDefinitionId = sprintf('doctrine.orm.%s_entity_manager', $config['default_entity_manager'])); - $container->getAlias('doctrine.orm.entity_manager')->setPublic(true); - - $config['entity_managers'] = $this->fixManagersAutoMappings($config['entity_managers'], $container->getParameter('kernel.bundles')); - - foreach ($config['entity_managers'] as $name => $entityManager) { - $entityManager['name'] = $name; - $this->loadOrmEntityManager($entityManager, $container); - - if (interface_exists(PropertyInfoExtractorInterface::class)) { - $this->loadPropertyInfoExtractor($name, $container); - } - - if (! interface_exists(LoaderInterface::class)) { - continue; - } - - $this->loadValidatorLoader($name, $container); - } - - if ($config['resolve_target_entities']) { - $def = $container->findDefinition('doctrine.orm.listeners.resolve_target_entity'); - foreach ($config['resolve_target_entities'] as $name => $implementation) { - $def->addMethodCall('addResolveTargetEntity', [ - $name, - $implementation, - [], - ]); - } - - $def - ->addTag('doctrine.event_listener', ['event' => Events::loadClassMetadata]) - ->addTag('doctrine.event_listener', ['event' => Events::onClassMetadataNotFound]); - } - - $container->registerForAutoconfiguration(ServiceEntityRepositoryInterface::class) - ->addTag(ServiceRepositoryCompilerPass::REPOSITORY_SERVICE_TAG); - - $container->registerForAutoconfiguration(EventSubscriberInterface::class) - ->addTag('doctrine.event_subscriber'); - - $container->registerForAutoconfiguration(AbstractIdGenerator::class) - ->addTag(IdGeneratorPass::ID_GENERATOR_TAG); - - $container->registerAttributeForAutoconfiguration(AsEntityListener::class, static function (ChildDefinition $definition, AsEntityListener $attribute) { - $definition->addTag('doctrine.orm.entity_listener', [ - 'event' => $attribute->event, - 'method' => $attribute->method, - 'lazy' => $attribute->lazy, - 'entity_manager' => $attribute->entityManager, - 'entity' => $attribute->entity, - 'priority' => $attribute->priority, - ]); - }); - $container->registerAttributeForAutoconfiguration(AsDoctrineListener::class, static function (ChildDefinition $definition, AsDoctrineListener $attribute) { - $definition->addTag('doctrine.event_listener', [ - 'event' => $attribute->event, - 'priority' => $attribute->priority, - 'connection' => $attribute->connection, - ]); - }); - - /** @see DoctrineBundle::boot() */ - $container->getDefinition($defaultEntityManagerDefinitionId) - ->addTag('container.preload', [ - 'class' => Autoloader::class, - ]); - } - - /** - * Loads a configured ORM entity manager. - * - * @param array $entityManager A configured ORM entity manager. - * @param ContainerBuilder $container A ContainerBuilder instance - */ - protected function loadOrmEntityManager(array $entityManager, ContainerBuilder $container) - { - $ormConfigDef = $container->setDefinition(sprintf('doctrine.orm.%s_configuration', $entityManager['name']), new ChildDefinition('doctrine.orm.configuration')); - $ormConfigDef->addTag(IdGeneratorPass::CONFIGURATION_TAG); - - $this->loadOrmEntityManagerMappingInformation($entityManager, $ormConfigDef, $container); - $this->loadOrmCacheDrivers($entityManager, $container); - - if (isset($entityManager['entity_listener_resolver']) && $entityManager['entity_listener_resolver']) { - $container->setAlias(sprintf('doctrine.orm.%s_entity_listener_resolver', $entityManager['name']), $entityManager['entity_listener_resolver']); - } else { - $definition = new Definition('%doctrine.orm.entity_listener_resolver.class%'); - $definition->addArgument(new Reference('service_container')); - $container->setDefinition(sprintf('doctrine.orm.%s_entity_listener_resolver', $entityManager['name']), $definition); - } - - $methods = [ - 'setMetadataCache' => new Reference(sprintf('doctrine.orm.%s_metadata_cache', $entityManager['name'])), - 'setQueryCache' => new Reference(sprintf('doctrine.orm.%s_query_cache', $entityManager['name'])), - 'setResultCache' => new Reference(sprintf('doctrine.orm.%s_result_cache', $entityManager['name'])), - 'setMetadataDriverImpl' => new Reference('doctrine.orm.' . $entityManager['name'] . '_metadata_driver'), - 'setProxyDir' => '%doctrine.orm.proxy_dir%', - 'setProxyNamespace' => '%doctrine.orm.proxy_namespace%', - 'setAutoGenerateProxyClasses' => '%doctrine.orm.auto_generate_proxy_classes%', - 'setSchemaIgnoreClasses' => $entityManager['schema_ignore_classes'], - 'setClassMetadataFactoryName' => $entityManager['class_metadata_factory_name'], - 'setDefaultRepositoryClassName' => $entityManager['default_repository_class'], - 'setNamingStrategy' => new Reference($entityManager['naming_strategy']), - 'setQuoteStrategy' => new Reference($entityManager['quote_strategy']), - 'setTypedFieldMapper' => new Reference($entityManager['typed_field_mapper']), - 'setEntityListenerResolver' => new Reference(sprintf('doctrine.orm.%s_entity_listener_resolver', $entityManager['name'])), - 'setLazyGhostObjectEnabled' => '%doctrine.orm.enable_lazy_ghost_objects%', - 'setIdentityGenerationPreferences' => $entityManager['identity_generation_preferences'], - ]; - - if (! method_exists(OrmConfiguration::class, 'setLazyGhostObjectEnabled')) { - unset($methods['setLazyGhostObjectEnabled']); - } - - $listenerId = sprintf('doctrine.orm.%s_listeners.attach_entity_listeners', $entityManager['name']); - $listenerDef = $container->setDefinition($listenerId, new Definition('%doctrine.orm.listeners.attach_entity_listeners.class%')); - $listenerTagParams = ['event' => 'loadClassMetadata']; - if (isset($entityManager['connection'])) { - $listenerTagParams['connection'] = $entityManager['connection']; - } - - $listenerDef->addTag('doctrine.event_listener', $listenerTagParams); - - if (isset($entityManager['second_level_cache'])) { - $this->loadOrmSecondLevelCache($entityManager, $ormConfigDef, $container); - } - - if ($entityManager['repository_factory']) { - $methods['setRepositoryFactory'] = new Reference($entityManager['repository_factory']); - } - - foreach ($methods as $method => $arg) { - $ormConfigDef->addMethodCall($method, [$arg]); - } - - foreach ($entityManager['hydrators'] as $name => $class) { - $ormConfigDef->addMethodCall('addCustomHydrationMode', [$name, $class]); - } - - if (! empty($entityManager['dql'])) { - foreach ($entityManager['dql']['string_functions'] as $name => $function) { - $ormConfigDef->addMethodCall('addCustomStringFunction', [$name, $function]); - } - - foreach ($entityManager['dql']['numeric_functions'] as $name => $function) { - $ormConfigDef->addMethodCall('addCustomNumericFunction', [$name, $function]); - } - - foreach ($entityManager['dql']['datetime_functions'] as $name => $function) { - $ormConfigDef->addMethodCall('addCustomDatetimeFunction', [$name, $function]); - } - } - - $enabledFilters = []; - $filtersParameters = []; - foreach ($entityManager['filters'] as $name => $filter) { - $ormConfigDef->addMethodCall('addFilter', [$name, $filter['class']]); - if ($filter['enabled']) { - $enabledFilters[] = $name; - } - - if (! $filter['parameters']) { - continue; - } - - $filtersParameters[$name] = $filter['parameters']; - } - - $managerConfiguratorName = sprintf('doctrine.orm.%s_manager_configurator', $entityManager['name']); - $container - ->setDefinition($managerConfiguratorName, new ChildDefinition('doctrine.orm.manager_configurator.abstract')) - ->replaceArgument(0, $enabledFilters) - ->replaceArgument(1, $filtersParameters); - - if (! isset($entityManager['connection'])) { - $entityManager['connection'] = $this->defaultConnection; - } - - $entityManagerId = sprintf('doctrine.orm.%s_entity_manager', $entityManager['name']); - - $container - ->setDefinition($entityManagerId, new ChildDefinition('doctrine.orm.entity_manager.abstract')) - ->setPublic(true) - ->setArguments([ - new Reference(sprintf('doctrine.dbal.%s_connection', $entityManager['connection'])), - new Reference(sprintf('doctrine.orm.%s_configuration', $entityManager['name'])), - new Reference(sprintf('doctrine.dbal.%s_connection.event_manager', $entityManager['connection'])), - ]) - ->setConfigurator([new Reference($managerConfiguratorName), 'configure']); - - $container - ->registerAliasForArgument($entityManagerId, EntityManagerInterface::class, sprintf('%sEntityManager', $entityManager['name'])) - ->setPublic(false); - - $container->setAlias( - sprintf('doctrine.orm.%s_entity_manager.event_manager', $entityManager['name']), - new Alias(sprintf('doctrine.dbal.%s_connection.event_manager', $entityManager['connection']), false), - ); - - if (! isset($entityManager['entity_listeners'])) { - return; - } - - $entities = $entityManager['entity_listeners']['entities']; - - foreach ($entities as $entityListenerClass => $entity) { - foreach ($entity['listeners'] as $listenerClass => $listener) { - foreach ($listener['events'] as $listenerEvent) { - $listenerEventName = $listenerEvent['type']; - $listenerMethod = $listenerEvent['method']; - - $listenerDef->addMethodCall('addEntityListener', [ - $entityListenerClass, - $listenerClass, - $listenerEventName, - $listenerMethod, - ]); - } - } - } - } - - /** - * Loads an ORM entity managers bundle mapping information. - * - * There are two distinct configuration possibilities for mapping information: - * - * 1. Specify a bundle and optionally details where the entity and mapping information reside. - * 2. Specify an arbitrary mapping location. - * - * @param array $entityManager A configured ORM entity manager - * @param Definition $ormConfigDef A Definition instance - * @param ContainerBuilder $container A ContainerBuilder instance - * - * @example - * - * doctrine.orm: - * mappings: - * MyBundle1: ~ - * MyBundle2: yml - * MyBundle3: { type: annotation, dir: Entities/ } - * MyBundle4: { type: xml, dir: Resources/config/doctrine/mapping } - * MyBundle5: { type: attribute, dir: Entities/ } - * MyBundle6: - * type: yml - * dir: bundle-mappings/ - * alias: BundleAlias - * arbitrary_key: - * type: xml - * dir: %kernel.project_dir%/src/vendor/DoctrineExtensions/lib/DoctrineExtensions/Entities - * prefix: DoctrineExtensions\Entities\ - * alias: DExt - * - * In the case of bundles everything is really optional (which leads to autodetection for this bundle) but - * in the mappings key everything except alias is a required argument. - */ - protected function loadOrmEntityManagerMappingInformation(array $entityManager, Definition $ormConfigDef, ContainerBuilder $container) - { - // reset state of drivers and alias map. They are only used by this methods and children. - $this->drivers = []; - $this->aliasMap = []; - - $this->loadMappingInformation($entityManager, $container); - $this->registerMappingDrivers($entityManager, $container); - - $container->getDefinition($this->getObjectManagerElementName($entityManager['name'] . '_metadata_driver')); - /** @psalm-suppress NoValue $this->drivers is set by $this->loadMappingInformation() call */ - foreach (array_keys($this->drivers) as $driverType) { - $mappingService = $this->getObjectManagerElementName($entityManager['name'] . '_' . $driverType . '_metadata_driver'); - $mappingDriverDef = $container->getDefinition($mappingService); - $args = $mappingDriverDef->getArguments(); - if ($driverType === 'annotation') { - $args[2] = $entityManager['report_fields_where_declared']; - } elseif ($driverType === 'attribute') { - $args[1] = $entityManager['report_fields_where_declared']; - } elseif ($driverType === 'xml') { - $args[1] ??= SimplifiedXmlDriver::DEFAULT_FILE_EXTENSION; - $args[2] = $entityManager['validate_xml_mapping']; - } else { - continue; - } - - $mappingDriverDef->setArguments($args); - } - - $ormConfigDef->addMethodCall('setEntityNamespaces', [$this->aliasMap]); - } - - /** - * Loads an ORM second level cache bundle mapping information. - * - * @param array $entityManager A configured ORM entity manager - * @param Definition $ormConfigDef A Definition instance - * @param ContainerBuilder $container A ContainerBuilder instance - * - * @example - * entity_managers: - * default: - * second_level_cache: - * region_lifetime: 3600 - * region_lock_lifetime: 60 - * region_cache_driver: apc - * log_enabled: true - * regions: - * my_service_region: - * type: service - * service : "my_service_region" - * - * my_query_region: - * lifetime: 300 - * cache_driver: array - * type: filelock - * - * my_entity_region: - * lifetime: 600 - * cache_driver: - * type: apc - */ - protected function loadOrmSecondLevelCache(array $entityManager, Definition $ormConfigDef, ContainerBuilder $container) - { - $driverId = null; - $enabled = $entityManager['second_level_cache']['enabled']; - - if (isset($entityManager['second_level_cache']['region_cache_driver'])) { - $driverName = 'second_level_cache.region_cache_driver'; - $driverMap = $entityManager['second_level_cache']['region_cache_driver']; - $driverId = $this->loadCacheDriver($driverName, $entityManager['name'], $driverMap, $container); - } - - $configId = sprintf('doctrine.orm.%s_second_level_cache.cache_configuration', $entityManager['name']); - $regionsId = sprintf('doctrine.orm.%s_second_level_cache.regions_configuration', $entityManager['name']); - $driverId = $driverId ?: sprintf('doctrine.orm.%s_second_level_cache.region_cache_driver', $entityManager['name']); - $configDef = $container->setDefinition($configId, new Definition('%doctrine.orm.second_level_cache.cache_configuration.class%')); - $regionsDef = $container - ->setDefinition($regionsId, new Definition('%doctrine.orm.second_level_cache.regions_configuration.class%')) - ->setArguments([$entityManager['second_level_cache']['region_lifetime'], $entityManager['second_level_cache']['region_lock_lifetime']]); - - $slcFactoryId = sprintf('doctrine.orm.%s_second_level_cache.default_cache_factory', $entityManager['name']); - $factoryClass = $entityManager['second_level_cache']['factory'] ?? '%doctrine.orm.second_level_cache.default_cache_factory.class%'; - - $definition = new Definition($factoryClass, [new Reference($regionsId), new Reference($driverId)]); - - $slcFactoryDef = $container - ->setDefinition($slcFactoryId, $definition); - - if (isset($entityManager['second_level_cache']['regions'])) { - foreach ($entityManager['second_level_cache']['regions'] as $name => $region) { - $regionRef = null; - $regionType = $region['type']; - - if ($regionType === 'service') { - $regionId = sprintf('doctrine.orm.%s_second_level_cache.region.%s', $entityManager['name'], $name); - $regionRef = new Reference($region['service']); - - $container->setAlias($regionId, new Alias($region['service'], false)); - } - - if ($regionType === 'default' || $regionType === 'filelock') { - $regionId = sprintf('doctrine.orm.%s_second_level_cache.region.%s', $entityManager['name'], $name); - $driverName = sprintf('second_level_cache.region.%s_driver', $name); - $driverMap = $region['cache_driver']; - $driverId = $this->loadCacheDriver($driverName, $entityManager['name'], $driverMap, $container); - $regionRef = new Reference($regionId); - - $container - ->setDefinition($regionId, new Definition('%doctrine.orm.second_level_cache.default_region.class%')) - ->setArguments([$name, new Reference($driverId), $region['lifetime']]); - } - - if ($regionType === 'filelock') { - $regionId = sprintf('doctrine.orm.%s_second_level_cache.region.%s_filelock', $entityManager['name'], $name); - - $container - ->setDefinition($regionId, new Definition('%doctrine.orm.second_level_cache.filelock_region.class%')) - ->setArguments([$regionRef, $region['lock_path'], $region['lock_lifetime']]); - - $regionRef = new Reference($regionId); - $regionsDef->addMethodCall('getLockLifetime', [$name, $region['lock_lifetime']]); - } - - $regionsDef->addMethodCall('setLifetime', [$name, $region['lifetime']]); - $slcFactoryDef->addMethodCall('setRegion', [$regionRef]); - } - } - - if ($entityManager['second_level_cache']['log_enabled']) { - $loggerChainId = sprintf('doctrine.orm.%s_second_level_cache.logger_chain', $entityManager['name']); - $loggerStatsId = sprintf('doctrine.orm.%s_second_level_cache.logger_statistics', $entityManager['name']); - $loggerChaingDef = $container->setDefinition($loggerChainId, new Definition('%doctrine.orm.second_level_cache.logger_chain.class%')); - $loggerStatsDef = $container->setDefinition($loggerStatsId, new Definition('%doctrine.orm.second_level_cache.logger_statistics.class%')); - - $loggerChaingDef->addMethodCall('setLogger', ['statistics', $loggerStatsDef]); - $configDef->addMethodCall('setCacheLogger', [$loggerChaingDef]); - - foreach ($entityManager['second_level_cache']['loggers'] as $name => $logger) { - $loggerId = sprintf('doctrine.orm.%s_second_level_cache.logger.%s', $entityManager['name'], $name); - $loggerRef = new Reference($logger['service']); - - $container->setAlias($loggerId, new Alias($logger['service'], false)); - $loggerChaingDef->addMethodCall('setLogger', [$name, $loggerRef]); - } - } - - $configDef->addMethodCall('setCacheFactory', [$slcFactoryDef]); - $configDef->addMethodCall('setRegionsConfiguration', [$regionsDef]); - $ormConfigDef->addMethodCall('setSecondLevelCacheEnabled', [$enabled]); - $ormConfigDef->addMethodCall('setSecondLevelCacheConfiguration', [$configDef]); - } - - /** - * {@inheritDoc} - */ - protected function getObjectManagerElementName($name): string - { - return 'doctrine.orm.' . $name; - } - - protected function getMappingObjectDefaultName(): string - { - return 'Entity'; - } - - protected function getMappingResourceConfigDirectory(?string $bundleDir = null): string - { - if ($bundleDir !== null && is_dir($bundleDir . '/config/doctrine')) { - return 'config/doctrine'; - } - - return 'Resources/config/doctrine'; - } - - protected function getMappingResourceExtension(): string - { - return 'orm'; - } - - /** - * {@inheritDoc} - */ - protected function loadCacheDriver($cacheName, $objectManagerName, array $cacheDriver, ContainerBuilder $container): string - { - $aliasId = $this->getObjectManagerElementName(sprintf('%s_%s', $objectManagerName, $cacheName)); - - switch ($cacheDriver['type'] ?? 'pool') { - case 'service': - $serviceId = $cacheDriver['id']; - break; - - case 'pool': - $serviceId = $cacheDriver['pool'] ?? $this->createArrayAdapterCachePool($container, $objectManagerName, $cacheName); - break; - - default: - throw new InvalidArgumentException(sprintf( - 'Unknown cache of type "%s" configured for cache "%s" in entity manager "%s".', - $cacheDriver['type'], - $cacheName, - $objectManagerName, - )); - } - - $container->setAlias($aliasId, new Alias($serviceId, false)); - - return $aliasId; - } - - /** - * Loads a configured entity managers cache drivers. - * - * @param array $entityManager A configured ORM entity manager. - */ - protected function loadOrmCacheDrivers(array $entityManager, ContainerBuilder $container) - { - if (isset($entityManager['metadata_cache_driver'])) { - $this->loadCacheDriver('metadata_cache', $entityManager['name'], $entityManager['metadata_cache_driver'], $container); - } else { - $this->createMetadataCache($entityManager['name'], $container); - } - - $this->loadCacheDriver('result_cache', $entityManager['name'], $entityManager['result_cache_driver'], $container); - $this->loadCacheDriver('query_cache', $entityManager['name'], $entityManager['query_cache_driver'], $container); - } - - private function createMetadataCache(string $objectManagerName, ContainerBuilder $container): void - { - $aliasId = $this->getObjectManagerElementName(sprintf('%s_%s', $objectManagerName, 'metadata_cache')); - $cacheId = sprintf('cache.doctrine.orm.%s.%s', $objectManagerName, 'metadata'); - - $cache = new Definition(ArrayAdapter::class); - - if (! $container->getParameter('kernel.debug')) { - $phpArrayFile = '%kernel.cache_dir%' . sprintf('/doctrine/orm/%s_metadata.php', $objectManagerName); - $cacheWarmerServiceId = $this->getObjectManagerElementName(sprintf('%s_%s', $objectManagerName, 'metadata_cache_warmer')); - - $container->register($cacheWarmerServiceId, DoctrineMetadataCacheWarmer::class) - ->setArguments([new Reference(sprintf('doctrine.orm.%s_entity_manager', $objectManagerName)), $phpArrayFile]) - ->addTag('kernel.cache_warmer', ['priority' => 1000]); // priority should be higher than ProxyCacheWarmer - - $cache = new Definition(PhpArrayAdapter::class, [$phpArrayFile, $cache]); - } - - $container->setDefinition($cacheId, $cache); - $container->setAlias($aliasId, $cacheId); - } - - /** - * Loads a property info extractor for each defined entity manager. - */ - private function loadPropertyInfoExtractor(string $entityManagerName, ContainerBuilder $container): void - { - $propertyExtractorDefinition = $container->register(sprintf('doctrine.orm.%s_entity_manager.property_info_extractor', $entityManagerName), DoctrineExtractor::class); - $argumentId = sprintf('doctrine.orm.%s_entity_manager', $entityManagerName); - - $propertyExtractorDefinition->addArgument(new Reference($argumentId)); - - $propertyExtractorDefinition->addTag('property_info.list_extractor', ['priority' => -1001]); - $propertyExtractorDefinition->addTag('property_info.type_extractor', ['priority' => -999]); - $propertyExtractorDefinition->addTag('property_info.access_extractor', ['priority' => -999]); - } - - /** - * Loads a validator loader for each defined entity manager. - */ - private function loadValidatorLoader(string $entityManagerName, ContainerBuilder $container): void - { - $validatorLoaderDefinition = $container->register(sprintf('doctrine.orm.%s_entity_manager.validator_loader', $entityManagerName), DoctrineLoader::class); - $validatorLoaderDefinition->addArgument(new Reference(sprintf('doctrine.orm.%s_entity_manager', $entityManagerName))); - - $validatorLoaderDefinition->addTag('validator.auto_mapper', ['priority' => -100]); - } - - public function getXsdValidationBasePath(): string - { - return __DIR__ . '/../../config/schema'; - } - - public function getNamespace(): string - { - return 'http://symfony.com/schema/dic/doctrine'; - } - - /** - * {@inheritDoc} - */ - public function getConfiguration(array $config, ContainerBuilder $container): Configuration - { - return new Configuration((bool) $container->getParameter('kernel.debug')); - } - - protected function getMetadataDriverClass(string $driverType): string - { - return '%' . $this->getObjectManagerElementName('metadata.' . $driverType . '.class') . '%'; - } - - private function loadMessengerServices(ContainerBuilder $container): void - { - // If the Messenger component is installed, wire it: - - if (! interface_exists(MessageBusInterface::class)) { - return; - } - - $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../../config')); - $loader->load('messenger.xml'); - - // available in Symfony 6.3 - $container->removeDefinition('doctrine.orm.messenger.doctrine_schema_' . (class_exists(MessengerTransportDoctrineSchemaListener::class) ? 'subscriber' : 'listener')); - - /** - * The Doctrine transport component (symfony/doctrine-messenger) is optional. - * Remove service definition, if it is not available - */ - if (class_exists(DoctrineTransportFactory::class)) { - return; - } - - $container->removeDefinition('messenger.transport.doctrine.factory'); - $container->removeDefinition('doctrine.orm.messenger.doctrine_schema_subscriber'); - $container->removeDefinition('doctrine.orm.messenger.doctrine_schema_listener'); - } - - private function createArrayAdapterCachePool(ContainerBuilder $container, string $objectManagerName, string $cacheName): string - { - $id = sprintf('cache.doctrine.orm.%s.%s', $objectManagerName, str_replace('_cache', '', $cacheName)); - - $poolDefinition = $container->register($id, ArrayAdapter::class); - $poolDefinition->addTag('cache.pool'); - $container->setDefinition($id, $poolDefinition); - - return $id; - } - - /** - * @param string[] $connWithLogging - * @param string[] $connWithProfiling - * @param string[] $connWithBacktrace - * @param string[] $connWithTtl - */ - private function registerDbalMiddlewares( - ContainerBuilder $container, - array $connWithLogging, - array $connWithProfiling, - array $connWithBacktrace, - array $connWithTtl - ): void { - $loader = new XmlFileLoader($container, new FileLocator(__DIR__ . '/../../config')); - $loader->load('middlewares.xml'); - - $loggingMiddlewareAbstractDef = $container->getDefinition('doctrine.dbal.logging_middleware'); - foreach ($connWithLogging as $connName) { - $loggingMiddlewareAbstractDef->addTag('doctrine.middleware', ['connection' => $connName, 'priority' => 10]); - } - - $container->getDefinition('doctrine.debug_data_holder')->replaceArgument(0, $connWithBacktrace); - $debugMiddlewareAbstractDef = $container->getDefinition('doctrine.dbal.debug_middleware'); - foreach ($connWithProfiling as $connName) { - $debugMiddlewareAbstractDef - ->addTag('doctrine.middleware', ['connection' => $connName, 'priority' => 10]); - } - - $idleConnectionMiddlewareAbstractDef = $container->getDefinition('doctrine.dbal.idle_connection_middleware'); - foreach ($connWithTtl as $connName) { - $idleConnectionMiddlewareAbstractDef - ->addTag('doctrine.middleware', ['connection' => $connName, 'priority' => 10]); - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/DoctrineBundle.php b/vendor/doctrine/doctrine-bundle/src/DoctrineBundle.php deleted file mode 100644 index 9751cdb..0000000 --- a/vendor/doctrine/doctrine-bundle/src/DoctrineBundle.php +++ /dev/null @@ -1,177 +0,0 @@ -addCompilerPass(new class () implements CompilerPassInterface { - public function process(ContainerBuilder $container): void - { - if ($container->has('session.handler')) { - return; - } - - $container->removeDefinition('doctrine.orm.listeners.pdo_session_handler_schema_listener'); - } - }, PassConfig::TYPE_BEFORE_OPTIMIZATION); - - $container->addCompilerPass(new RegisterEventListenersAndSubscribersPass('doctrine.connections', 'doctrine.dbal.%s_connection.event_manager', 'doctrine'), PassConfig::TYPE_BEFORE_OPTIMIZATION); - - if ($container->hasExtension('security')) { - $security = $container->getExtension('security'); - - if ($security instanceof SecurityExtension) { - $security->addUserProviderFactory(new EntityFactory('entity', 'doctrine.orm.security.user.provider')); - } - } - - $container->addCompilerPass(new CacheCompatibilityPass()); - $container->addCompilerPass(new DoctrineValidationPass('orm')); - $container->addCompilerPass(new EntityListenerPass()); - $container->addCompilerPass(new ServiceRepositoryCompilerPass()); - $container->addCompilerPass(new IdGeneratorPass()); - $container->addCompilerPass(new WellKnownSchemaFilterPass()); - $container->addCompilerPass(new DbalSchemaFilterPass()); - $container->addCompilerPass(new CacheSchemaSubscriberPass(), PassConfig::TYPE_BEFORE_REMOVING, -10); - $container->addCompilerPass(new RemoveProfilerControllerPass()); - $container->addCompilerPass(new RemoveLoggingMiddlewarePass()); - $container->addCompilerPass(new MiddlewaresPass()); - - if (! class_exists(RegisterUidTypePass::class)) { - return; - } - - $container->addCompilerPass(new RegisterUidTypePass()); - } - - /** @return void */ - public function boot() - { - // Register an autoloader for proxies to avoid issues when unserializing them - // when the ORM is used. - if (! $this->container->hasParameter('doctrine.orm.proxy_namespace')) { - return; - } - - $namespace = (string) $this->container->getParameter('doctrine.orm.proxy_namespace'); - $dir = (string) $this->container->getParameter('doctrine.orm.proxy_dir'); - $proxyGenerator = null; - - if ($this->container->getParameter('doctrine.orm.auto_generate_proxy_classes')) { - // See https://github.com/symfony/symfony/pull/3419 for usage of references - /** @psalm-suppress UnsupportedPropertyReferenceUsage */ - $container = &$this->container; - - $proxyGenerator = static function ($proxyDir, $proxyNamespace, $class) use (&$container): void { - $originalClassName = (new DefaultProxyClassNameResolver())->resolveClassName($class); - $registry = $container->get('doctrine'); - assert($registry instanceof Registry); - - foreach ($registry->getManagers() as $em) { - assert($em instanceof EntityManagerInterface); - if (! $em->getConfiguration()->getAutoGenerateProxyClasses()) { - continue; - } - - $metadataFactory = $em->getMetadataFactory(); - - if ($metadataFactory->isTransient($originalClassName)) { - continue; - } - - $classMetadata = $metadataFactory->getMetadataFor($originalClassName); - - $em->getProxyFactory()->generateProxyClasses([$classMetadata]); - - clearstatcache(true, Autoloader::resolveFile($proxyDir, $proxyNamespace, $class)); - - break; - } - }; - } - - $this->autoloader = Autoloader::register($dir, $namespace, $proxyGenerator); - } - - /** @return void */ - public function shutdown() - { - if ($this->autoloader !== null) { - spl_autoload_unregister($this->autoloader); - $this->autoloader = null; - } - - // Clear all entity managers to clear references to entities for GC - if ($this->container->hasParameter('doctrine.entity_managers')) { - foreach ($this->container->getParameter('doctrine.entity_managers') as $id) { - if (! $this->container->initialized($id)) { - continue; - } - - $this->container->get($id)->clear(); - } - } - - // Close all connections to avoid reaching too many connections in the process when booting again later (tests) - if (! $this->container->hasParameter('doctrine.connections')) { - return; - } - - foreach ($this->container->getParameter('doctrine.connections') as $id) { - if (! $this->container->initialized($id)) { - continue; - } - - $this->container->get($id)->close(); - } - } - - /** @return void */ - public function registerCommands(Application $application) - { - } - - public function getPath(): string - { - return dirname(__DIR__); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/EventSubscriber/EventSubscriberInterface.php b/vendor/doctrine/doctrine-bundle/src/EventSubscriber/EventSubscriberInterface.php deleted file mode 100644 index 5cbae93..0000000 --- a/vendor/doctrine/doctrine-bundle/src/EventSubscriber/EventSubscriberInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -> */ - private array $filtersParameters = []; - - /** - * @param string[] $enabledFilters - * @param array> $filtersParameters - */ - public function __construct(array $enabledFilters, array $filtersParameters) - { - $this->enabledFilters = $enabledFilters; - $this->filtersParameters = $filtersParameters; - } - - /** - * Create a connection by name. - */ - public function configure(EntityManagerInterface $entityManager) - { - $this->enableFilters($entityManager); - } - - /** - * Enables filters for a given entity manager - */ - private function enableFilters(EntityManagerInterface $entityManager): void - { - if (empty($this->enabledFilters)) { - return; - } - - $filterCollection = $entityManager->getFilters(); - foreach ($this->enabledFilters as $filter) { - $this->setFilterParameters($filter, $filterCollection->enable($filter)); - } - } - - /** - * Sets default parameters for a given filter - */ - private function setFilterParameters(string $name, SQLFilter $filter): void - { - if (empty($this->filtersParameters[$name])) { - return; - } - - $parameters = $this->filtersParameters[$name]; - foreach ($parameters as $paramName => $paramValue) { - $filter->setParameter($paramName, $paramValue); - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataCollection.php b/vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataCollection.php deleted file mode 100644 index 7b3a9f5..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataCollection.php +++ /dev/null @@ -1,50 +0,0 @@ -metadata = $metadata; - } - - /** @return ClassMetadata[] */ - public function getMetadata() - { - return $this->metadata; - } - - /** @param string $path */ - public function setPath($path) - { - $this->path = $path; - } - - /** @return string|null */ - public function getPath() - { - return $this->path; - } - - /** @param string $namespace */ - public function setNamespace($namespace) - { - $this->namespace = $namespace; - } - - /** @return string|null */ - public function getNamespace() - { - return $this->namespace; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataFactory.php b/vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataFactory.php deleted file mode 100644 index a04a16a..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Mapping/ClassMetadataFactory.php +++ /dev/null @@ -1,33 +0,0 @@ -customGeneratorDefinition; - - if (! isset($customGeneratorDefinition['instance'])) { - return; - } - - assert($customGeneratorDefinition['instance'] instanceof AbstractIdGenerator); - - $class->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_CUSTOM); - $class->setIdGenerator($customGeneratorDefinition['instance']); - unset($customGeneratorDefinition['instance']); - $class->setCustomGeneratorDefinition($customGeneratorDefinition); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Mapping/ContainerEntityListenerResolver.php b/vendor/doctrine/doctrine-bundle/src/Mapping/ContainerEntityListenerResolver.php deleted file mode 100644 index 5bc96d7..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Mapping/ContainerEntityListenerResolver.php +++ /dev/null @@ -1,101 +0,0 @@ -container = $container; - } - - /** - * {@inheritDoc} - */ - public function clear($className = null): void - { - if ($className === null) { - $this->instances = []; - - return; - } - - $className = $this->normalizeClassName($className); - - unset($this->instances[$className]); - } - - /** - * {@inheritDoc} - */ - public function register($object): void - { - if (! is_object($object)) { - throw new InvalidArgumentException(sprintf('An object was expected, but got "%s".', gettype($object))); - } - - $className = $this->normalizeClassName(get_class($object)); - - $this->instances[$className] = $object; - } - - /** - * {@inheritDoc} - */ - public function registerService($className, $serviceId) - { - $this->serviceIds[$this->normalizeClassName($className)] = $serviceId; - } - - /** - * {@inheritDoc} - */ - public function resolve($className): object - { - $className = $this->normalizeClassName($className); - - if (! isset($this->instances[$className])) { - if (isset($this->serviceIds[$className])) { - $this->instances[$className] = $this->resolveService($this->serviceIds[$className]); - } else { - $this->instances[$className] = new $className(); - } - } - - return $this->instances[$className]; - } - - private function resolveService(string $serviceId): object - { - if (! $this->container->has($serviceId)) { - throw new RuntimeException(sprintf('There is no service named "%s"', $serviceId)); - } - - return $this->container->get($serviceId); - } - - private function normalizeClassName(string $className): string - { - return trim($className, '\\'); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Mapping/DisconnectedMetadataFactory.php b/vendor/doctrine/doctrine-bundle/src/Mapping/DisconnectedMetadataFactory.php deleted file mode 100644 index 86cbdfb..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Mapping/DisconnectedMetadataFactory.php +++ /dev/null @@ -1,174 +0,0 @@ -registry = $registry; - } - - /** - * Gets the metadata of all classes of a bundle. - * - * @param BundleInterface $bundle A BundleInterface instance - * - * @return ClassMetadataCollection A ClassMetadataCollection instance - * - * @throws RuntimeException When bundle does not contain mapped entities. - */ - public function getBundleMetadata(BundleInterface $bundle) - { - $namespace = $bundle->getNamespace(); - $metadata = $this->getMetadataForNamespace($namespace); - if (! $metadata->getMetadata()) { - throw new RuntimeException(sprintf('Bundle "%s" does not contain any mapped entities.', $bundle->getName())); - } - - $path = $this->getBasePathForClass($bundle->getName(), $bundle->getNamespace(), $bundle->getPath()); - - $metadata->setPath($path); - $metadata->setNamespace($bundle->getNamespace()); - - return $metadata; - } - - /** - * Gets the metadata of a class. - * - * @param string $class A class name - * @param string $path The path where the class is stored (if known) - * - * @return ClassMetadataCollection A ClassMetadataCollection instance - * - * @throws MappingException When class is not valid entity or mapped superclass. - */ - public function getClassMetadata($class, $path = null) - { - $metadata = $this->getMetadataForClass($class); - if (! $metadata->getMetadata()) { - throw MappingException::classIsNotAValidEntityOrMappedSuperClass($class); - } - - $this->findNamespaceAndPathForMetadata($metadata, $path); - - return $metadata; - } - - /** - * Gets the metadata of all classes of a namespace. - * - * @param string $namespace A namespace name - * @param string $path The path where the class is stored (if known) - * - * @return ClassMetadataCollection A ClassMetadataCollection instance - * - * @throws RuntimeException When namespace not contain mapped entities. - */ - public function getNamespaceMetadata($namespace, $path = null) - { - $metadata = $this->getMetadataForNamespace($namespace); - if (! $metadata->getMetadata()) { - throw new RuntimeException(sprintf('Namespace "%s" does not contain any mapped entities.', $namespace)); - } - - $this->findNamespaceAndPathForMetadata($metadata, $path); - - return $metadata; - } - - /** - * Find and configure path and namespace for the metadata collection. - * - * @param string|null $path - * - * @throws RuntimeException When unable to determine the path. - */ - public function findNamespaceAndPathForMetadata(ClassMetadataCollection $metadata, $path = null) - { - $r = new ReflectionClass($metadata->getMetadata()[0]->name); - $metadata->setPath($this->getBasePathForClass($r->getName(), $r->getNamespaceName(), dirname($r->getFilename()))); - $metadata->setNamespace($r->getNamespaceName()); - } - - /** - * Get a base path for a class - * - * @throws RuntimeException When base path not found. - */ - private function getBasePathForClass(string $name, string $namespace, string $path): string - { - $namespace = str_replace('\\', '/', $namespace); - $search = str_replace('\\', '/', $path); - $destination = str_replace('/' . $namespace, '', $search, $c); - - if ($c !== 1) { - throw new RuntimeException(sprintf('Can\'t find base path for "%s" (path: "%s", destination: "%s").', $name, $path, $destination)); - } - - return $destination; - } - - private function getMetadataForNamespace(string $namespace): ClassMetadataCollection - { - $metadata = []; - foreach ($this->getAllMetadata() as $m) { - if (strpos($m->name, $namespace) !== 0) { - continue; - } - - $metadata[] = $m; - } - - return new ClassMetadataCollection($metadata); - } - - private function getMetadataForClass(string $entity): ClassMetadataCollection - { - foreach ($this->registry->getManagers() as $em) { - $cmf = new DisconnectedClassMetadataFactory(); - $cmf->setEntityManager($em); - - if (! $cmf->isTransient($entity)) { - return new ClassMetadataCollection([$cmf->getMetadataFor($entity)]); - } - } - - return new ClassMetadataCollection([]); - } - - /** @return ClassMetadata[] */ - private function getAllMetadata(): array - { - $metadata = []; - foreach ($this->registry->getManagers() as $em) { - $cmf = new DisconnectedClassMetadataFactory(); - $cmf->setEntityManager($em); - foreach ($cmf->getAllMetadata() as $m) { - $metadata[] = $m; - } - } - - return $metadata; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Mapping/EntityListenerServiceResolver.php b/vendor/doctrine/doctrine-bundle/src/Mapping/EntityListenerServiceResolver.php deleted file mode 100644 index 03120ef..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Mapping/EntityListenerServiceResolver.php +++ /dev/null @@ -1,15 +0,0 @@ -driver = $driver; - $this->idGeneratorLocator = $idGeneratorLocator; - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames() - { - return $this->driver->getAllClassNames(); - } - - /** - * {@inheritDoc} - */ - public function isTransient($className): bool - { - return $this->driver->isTransient($className); - } - - /** - * {@inheritDoc} - */ - public function loadMetadataForClass($className, ClassMetadata $metadata): void - { - $this->driver->loadMetadataForClass($className, $metadata); - - if ( - ! $metadata instanceof OrmClassMetadata - || $metadata->generatorType !== OrmClassMetadata::GENERATOR_TYPE_CUSTOM - || ! isset($metadata->customGeneratorDefinition['class']) - || ! $this->idGeneratorLocator->has($metadata->customGeneratorDefinition['class']) - ) { - return; - } - - $idGenerator = $this->idGeneratorLocator->get($metadata->customGeneratorDefinition['class']); - $metadata->setCustomGeneratorDefinition(['instance' => $idGenerator] + $metadata->customGeneratorDefinition); - $metadata->setIdGeneratorType(OrmClassMetadata::GENERATOR_TYPE_NONE); - } - - /** - * Returns the inner driver - */ - public function getDriver(): MappingDriverInterface - { - return $this->driver; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Middleware/BacktraceDebugDataHolder.php b/vendor/doctrine/doctrine-bundle/src/Middleware/BacktraceDebugDataHolder.php deleted file mode 100644 index 8eae911..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Middleware/BacktraceDebugDataHolder.php +++ /dev/null @@ -1,92 +0,0 @@ -[]> */ - private array $backtraces = []; - - /** @param string[] $connWithBacktraces */ - public function __construct(array $connWithBacktraces) - { - $this->connWithBacktraces = $connWithBacktraces; - } - - public function reset(): void - { - parent::reset(); - - $this->backtraces = []; - } - - public function addQuery(string $connectionName, Query $query): void - { - parent::addQuery($connectionName, $query); - - if (! in_array($connectionName, $this->connWithBacktraces, true)) { - return; - } - - // array_slice to skip middleware calls in the trace - $this->backtraces[$connectionName][] = array_slice(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), 2); - } - - /** @return array[]> */ - public function getData(): array - { - $dataWithBacktraces = []; - - $data = parent::getData(); - foreach ($data as $connectionName => $dataForConn) { - $dataWithBacktraces[$connectionName] = $this->getDataForConnection($connectionName, $dataForConn); - } - - return $dataWithBacktraces; - } - - /** - * @param mixed[][] $dataForConn - * - * @return mixed[][] - */ - private function getDataForConnection(string $connectionName, array $dataForConn): array - { - $data = []; - - foreach ($dataForConn as $idx => $record) { - $data[] = $this->addBacktracesIfAvailable($connectionName, $record, $idx); - } - - return $data; - } - - /** - * @param mixed[] $record - * - * @return mixed[] - */ - private function addBacktracesIfAvailable(string $connectionName, array $record, int $idx): array - { - if (! isset($this->backtraces[$connectionName])) { - return $record; - } - - $record['backtrace'] = $this->backtraces[$connectionName][$idx]; - - return $record; - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Middleware/ConnectionNameAwareInterface.php b/vendor/doctrine/doctrine-bundle/src/Middleware/ConnectionNameAwareInterface.php deleted file mode 100644 index 5bb2e41..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Middleware/ConnectionNameAwareInterface.php +++ /dev/null @@ -1,8 +0,0 @@ -debugDataHolder = $debugDataHolder; - $this->stopwatch = $stopwatch; - } - - public function setConnectionName(string $name): void - { - $this->connectionName = $name; - } - - public function wrap(DriverInterface $driver): DriverInterface - { - /** @psalm-suppress InternalClass,InternalMethod */ - return new Driver($driver, $this->debugDataHolder, $this->stopwatch, $this->connectionName); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Middleware/IdleConnectionMiddleware.php b/vendor/doctrine/doctrine-bundle/src/Middleware/IdleConnectionMiddleware.php deleted file mode 100644 index d64d22f..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Middleware/IdleConnectionMiddleware.php +++ /dev/null @@ -1,36 +0,0 @@ - */ - private array $ttlByConnection; - private string $connectionName; - - /** - * @param ArrayObject $connectionExpiries - * @param array $ttlByConnection - */ - public function __construct(ArrayObject $connectionExpiries, array $ttlByConnection) - { - $this->connectionExpiries = $connectionExpiries; - $this->ttlByConnection = $ttlByConnection; - } - - public function setConnectionName(string $name): void - { - $this->connectionName = $name; - } - - public function wrap(Driver $driver): IdleConnectionDriver - { - return new IdleConnectionDriver($driver, $this->connectionExpiries, $this->ttlByConnection[$this->connectionName], $this->connectionName); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Orm/ManagerRegistryAwareEntityManagerProvider.php b/vendor/doctrine/doctrine-bundle/src/Orm/ManagerRegistryAwareEntityManagerProvider.php deleted file mode 100644 index 4ef72eb..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Orm/ManagerRegistryAwareEntityManagerProvider.php +++ /dev/null @@ -1,43 +0,0 @@ -managerRegistry = $managerRegistry; - } - - public function getDefaultManager(): EntityManagerInterface - { - return $this->getManager($this->managerRegistry->getDefaultManagerName()); - } - - public function getManager(string $name): EntityManagerInterface - { - $em = $this->managerRegistry->getManager($name); - - if ($em instanceof EntityManagerInterface) { - return $em; - } - - throw new RuntimeException( - sprintf( - 'Only managers of type "%s" are supported. Instance of "%s given.', - EntityManagerInterface::class, - get_class($em), - ), - ); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Registry.php b/vendor/doctrine/doctrine-bundle/src/Registry.php deleted file mode 100644 index aa84319..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Registry.php +++ /dev/null @@ -1,88 +0,0 @@ -container = $container; - - parent::__construct('ORM', $connections, $entityManagers, $defaultConnection, $defaultEntityManager, Proxy::class); - } - - /** - * Resolves a registered namespace alias to the full namespace. - * - * This method looks for the alias in all registered entity managers. - * - * @see Configuration::getEntityNamespace - * - * @param string $alias The alias - * - * @return string The full namespace - */ - public function getAliasNamespace($alias) - { - foreach (array_keys($this->getManagers()) as $name) { - $objectManager = $this->getManager($name); - - if (! $objectManager instanceof EntityManagerInterface) { - continue; - } - - try { - /** @psalm-suppress UndefinedMethod ORM < 3 specific */ - return $objectManager->getConfiguration()->getEntityNamespace($alias); - } catch (ORMException $e) { - } - } - - throw ORMException::unknownEntityNamespace($alias); - } - - public function reset(): void - { - foreach ($this->getManagerNames() as $managerName => $serviceId) { - $this->resetOrClearManager($managerName, $serviceId); - } - } - - private function resetOrClearManager(string $managerName, string $serviceId): void - { - if (! $this->container->initialized($serviceId)) { - return; - } - - $manager = $this->container->get($serviceId); - - assert($manager instanceof EntityManagerInterface); - - if ((! $manager instanceof LazyLoadingInterface && ! $manager instanceof LazyObjectInterface) || $manager->isOpen()) { - $manager->clear(); - - return; - } - - $this->resetManager($managerName); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Repository/ContainerRepositoryFactory.php b/vendor/doctrine/doctrine-bundle/src/Repository/ContainerRepositoryFactory.php deleted file mode 100644 index 9d007c8..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Repository/ContainerRepositoryFactory.php +++ /dev/null @@ -1,111 +0,0 @@ - */ - private array $managedRepositories = []; - - private ContainerInterface $container; - - /** @param ContainerInterface $container A service locator containing the repositories */ - public function __construct(ContainerInterface $container) - { - $this->container = $container; - } - - /** - * @param class-string $entityName - * - * @return ObjectRepository - * @psalm-return ($strictTypeCheck is true ? EntityRepository : ObjectRepository) - * - * @template T of object - */ - private function doGetRepository(EntityManagerInterface $entityManager, string $entityName, bool $strictTypeCheck): ObjectRepository - { - $metadata = $entityManager->getClassMetadata($entityName); - $repositoryServiceId = $metadata->customRepositoryClassName; - - $customRepositoryName = $metadata->customRepositoryClassName; - if ($customRepositoryName !== null) { - // fetch from the container - if ($this->container->has($customRepositoryName)) { - $repository = $this->container->get($customRepositoryName); - - if (! $repository instanceof EntityRepository && $strictTypeCheck) { - throw new RuntimeException(sprintf('The service "%s" must extend EntityRepository (e.g. by extending ServiceEntityRepository), "%s" given.', $repositoryServiceId, get_debug_type($repository))); - } - - if (! $repository instanceof ObjectRepository) { - throw new RuntimeException(sprintf('The service "%s" must implement ObjectRepository (or extend a base class, like ServiceEntityRepository), "%s" given.', $repositoryServiceId, get_debug_type($repository))); - } - - if (! $repository instanceof EntityRepository) { - trigger_deprecation('doctrine/doctrine-bundle', '2.11', 'The service "%s" of type "%s" should extend "%s", not doing so is deprecated.', $repositoryServiceId, get_debug_type($repository), EntityRepository::class); - } - - /** @psalm-var ObjectRepository */ - return $repository; - } - - // if not in the container but the class/id implements the interface, throw an error - if (is_a($customRepositoryName, ServiceEntityRepositoryInterface::class, true)) { - throw new RuntimeException(sprintf('The "%s" entity repository implements "%s", but its service could not be found. Make sure the service exists and is tagged with "%s".', $customRepositoryName, ServiceEntityRepositoryInterface::class, ServiceRepositoryCompilerPass::REPOSITORY_SERVICE_TAG)); - } - - if (! class_exists($customRepositoryName)) { - throw new RuntimeException(sprintf('The "%s" entity has a repositoryClass set to "%s", but this is not a valid class. Check your class naming. If this is meant to be a service id, make sure this service exists and is tagged with "%s".', $metadata->name, $customRepositoryName, ServiceRepositoryCompilerPass::REPOSITORY_SERVICE_TAG)); - } - - // allow the repository to be created below - } - - return $this->getOrCreateRepository($entityManager, $metadata); - } - - /** - * @param ClassMetadata $metadata - * - * @return ObjectRepository - * - * @template TEntity of object - */ - private function getOrCreateRepository( - EntityManagerInterface $entityManager, - ClassMetadata $metadata - ): ObjectRepository { - $repositoryHash = $metadata->getName() . spl_object_hash($entityManager); - if (isset($this->managedRepositories[$repositoryHash])) { - /** @psalm-var ObjectRepository */ - return $this->managedRepositories[$repositoryHash]; - } - - $repositoryClassName = $metadata->customRepositoryClassName ?: $entityManager->getConfiguration()->getDefaultRepositoryClassName(); - - /** @psalm-var ObjectRepository */ - return $this->managedRepositories[$repositoryHash] = new $repositoryClassName($entityManager, $metadata); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Repository/LazyServiceEntityRepository.php b/vendor/doctrine/doctrine-bundle/src/Repository/LazyServiceEntityRepository.php deleted file mode 100644 index c690599..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Repository/LazyServiceEntityRepository.php +++ /dev/null @@ -1,82 +0,0 @@ - - */ -class LazyServiceEntityRepository extends EntityRepository implements ServiceEntityRepositoryInterface -{ - private ManagerRegistry $registry; - private string $entityClass; - - /** - * @param string $entityClass The class name of the entity this repository manages - * @psalm-param class-string $entityClass - */ - public function __construct(ManagerRegistry $registry, string $entityClass) - { - $this->registry = $registry; - $this->entityClass = $entityClass; - - if ($this instanceof LazyObjectInterface) { - $this->initialize(); - - return; - } - - unset($this->_em); - unset($this->_class); - unset($this->_entityName); - } - - /** @return mixed */ - public function __get(string $name) - { - $this->initialize(); - - $scope = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['class'] ?? null; - - return (function () use ($name) { - return $this->$name; - })->bindTo($this, $scope)(); - } - - public function __isset(string $name): bool - { - $this->initialize(); - - $scope = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 2)[1]['class'] ?? null; - - return (function () use ($name) { - return isset($this->$name); - })->bindTo($this, $scope)(); - } - - private function initialize(): void - { - $manager = $this->registry->getManagerForClass($this->entityClass); - - if ($manager === null) { - throw new LogicException(sprintf( - 'Could not find the entity manager for class "%s". Check your Doctrine configuration to make sure it is configured to load this entity’s metadata.', - $this->entityClass, - )); - } - - parent::__construct($manager, $manager->getClassMetadata($this->entityClass)); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Repository/RepositoryFactoryCompatibility.php b/vendor/doctrine/doctrine-bundle/src/Repository/RepositoryFactoryCompatibility.php deleted file mode 100644 index f50ff76..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Repository/RepositoryFactoryCompatibility.php +++ /dev/null @@ -1,41 +0,0 @@ -hasReturnType()) { - // ORM >= 3 - /** @internal */ - trait RepositoryFactoryCompatibility - { - /** - * Gets the repository for an entity class. - * - * @param class-string $entityName - * - * @return EntityRepository - * - * @template T of object - */ - public function getRepository(EntityManagerInterface $entityManager, string $entityName): EntityRepository - { - return $this->doGetRepository($entityManager, $entityName, true); - } - } -} else { - // ORM 2 - /** @internal */ - trait RepositoryFactoryCompatibility - { - /** {@inheritDoc} */ - public function getRepository(EntityManagerInterface $entityManager, $entityName): ObjectRepository - { - return $this->doGetRepository($entityManager, $entityName, false); - } - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepository.php b/vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepository.php deleted file mode 100644 index d4c59e2..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepository.php +++ /dev/null @@ -1,53 +0,0 @@ - - */ - class ServiceEntityRepository extends LazyServiceEntityRepository - { - } -} else { - // ORM 3 - /** - * Optional EntityRepository base class with a simplified constructor (for autowiring). - * - * To use in your class, inject the "registry" service and call - * the parent constructor. For example: - * - * class YourEntityRepository extends ServiceEntityRepository - * { - * public function __construct(ManagerRegistry $registry) - * { - * parent::__construct($registry, YourEntity::class); - * } - * } - * - * @template T of object - * @template-extends ServiceEntityRepositoryProxy - */ - class ServiceEntityRepository extends ServiceEntityRepositoryProxy - { - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepositoryInterface.php b/vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepositoryInterface.php deleted file mode 100644 index fe9ce4d..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Repository/ServiceEntityRepositoryInterface.php +++ /dev/null @@ -1,10 +0,0 @@ - - */ -class ServiceEntityRepositoryProxy extends EntityRepository implements ServiceEntityRepositoryInterface -{ - private ?EntityRepository $repository = null; - - /** @param class-string $entityClass The class name of the entity this repository manages */ - public function __construct( - private readonly ManagerRegistry $registry, - private readonly string $entityClass, - ) { - if (! $this instanceof LazyObjectInterface) { - return; - } - - $this->repository = $this->resolveRepository(); - } - - public function createQueryBuilder(string $alias, ?string $indexBy = null): QueryBuilder - { - return ($this->repository ??= $this->resolveRepository()) - ->createQueryBuilder($alias, $indexBy); - } - - public function createResultSetMappingBuilder(string $alias): ResultSetMappingBuilder - { - return ($this->repository ??= $this->resolveRepository()) - ->createResultSetMappingBuilder($alias); - } - - public function find(mixed $id, LockMode|int|null $lockMode = null, int|null $lockVersion = null): object|null - { - /** @psalm-suppress InvalidReturnStatement This proxy is used only in combination with newer parent class */ - return ($this->repository ??= $this->resolveRepository()) - ->find($id, $lockMode, $lockVersion); - } - - /** - * {@inheritDoc} - * - * @psalm-suppress InvalidReturnStatement This proxy is used only in combination with newer parent class - * @psalm-suppress InvalidReturnType This proxy is used only in combination with newer parent class - */ - public function findBy(array $criteria, ?array $orderBy = null, ?int $limit = null, ?int $offset = null): array - { - return ($this->repository ??= $this->resolveRepository()) - ->findBy($criteria, $orderBy, $limit, $offset); - } - - /** {@inheritDoc} */ - public function findOneBy(array $criteria, ?array $orderBy = null): object|null - { - /** @psalm-suppress InvalidReturnStatement This proxy is used only in combination with newer parent class */ - return ($this->repository ??= $this->resolveRepository()) - ->findOneBy($criteria, $orderBy); - } - - /** {@inheritDoc} */ - public function count(array $criteria = []): int - { - return ($this->repository ??= $this->resolveRepository())->count($criteria); - } - - /** - * {@inheritDoc} - */ - public function __call(string $method, array $arguments): mixed - { - return ($this->repository ??= $this->resolveRepository())->$method(...$arguments); - } - - protected function getEntityName(): string - { - return ($this->repository ??= $this->resolveRepository())->getEntityName(); - } - - protected function getEntityManager(): EntityManagerInterface - { - return ($this->repository ??= $this->resolveRepository())->getEntityManager(); - } - - /** @psalm-suppress InvalidReturnType This proxy is used only in combination with newer parent class */ - protected function getClassMetadata(): ClassMetadata - { - /** @psalm-suppress InvalidReturnStatement This proxy is used only in combination with newer parent class */ - return ($this->repository ??= $this->resolveRepository())->getClassMetadata(); - } - - public function matching(Criteria $criteria): AbstractLazyCollection&Selectable - { - return ($this->repository ??= $this->resolveRepository())->matching($criteria); - } - - private function resolveRepository(): EntityRepository - { - $manager = $this->registry->getManagerForClass($this->entityClass); - - if ($manager === null) { - throw new LogicException(sprintf( - 'Could not find the entity manager for class "%s". Check your Doctrine configuration to make sure it is configured to load this entity’s metadata.', - $this->entityClass, - )); - } - - return new EntityRepository($manager, $manager->getClassMetadata($this->entityClass)); - } -} diff --git a/vendor/doctrine/doctrine-bundle/src/Twig/DoctrineExtension.php b/vendor/doctrine/doctrine-bundle/src/Twig/DoctrineExtension.php deleted file mode 100644 index 7c5f753..0000000 --- a/vendor/doctrine/doctrine-bundle/src/Twig/DoctrineExtension.php +++ /dev/null @@ -1,197 +0,0 @@ - ['html'], 'deprecated' => true]), - new TwigFilter('doctrine_prettify_sql', [$this, 'prettifySql'], ['is_safe' => ['html']]), - new TwigFilter('doctrine_format_sql', [$this, 'formatSql'], ['is_safe' => ['html']]), - new TwigFilter('doctrine_replace_query_parameters', [$this, 'replaceQueryParameters']), - ]; - } - - /** - * Escape parameters of a SQL query - * DON'T USE THIS FUNCTION OUTSIDE ITS INTENDED SCOPE - * - * @internal - * - * @param mixed $parameter - * - * @return string - */ - public static function escapeFunction($parameter) - { - $result = $parameter; - - switch (true) { - // Check if result is non-unicode string using PCRE_UTF8 modifier - case is_string($result) && ! preg_match('//u', $result): - $result = '0x' . strtoupper(bin2hex($result)); - break; - - case is_string($result): - $result = "'" . addslashes($result) . "'"; - break; - - case is_array($result): - foreach ($result as &$value) { - $value = static::escapeFunction($value); - } - - $result = implode(', ', $result) ?: 'NULL'; - break; - - case is_object($result) && method_exists($result, '__toString'): - $result = addslashes($result->__toString()); - break; - - case $result === null: - $result = 'NULL'; - break; - - case is_bool($result): - $result = $result ? '1' : '0'; - break; - } - - return $result; - } - - /** - * Return a query with the parameters replaced - * - * @param string $query - * @param mixed[]|Data $parameters - * - * @return string - */ - public function replaceQueryParameters($query, $parameters) - { - if ($parameters instanceof Data) { - $parameters = $parameters->getValue(true); - } - - $i = 0; - - if (! array_key_exists(0, $parameters) && array_key_exists(1, $parameters)) { - $i = 1; - } - - return preg_replace_callback( - '/\?|((?setUpSqlFormatter(true, true); - - if ($highlightOnly) { - return $this->sqlFormatter->highlight($sql); - } - - return sprintf( - '
%s
', - $this->sqlFormatter->format($sql), - ); - } - - public function prettifySql(string $sql): string - { - $this->setUpSqlFormatter(); - - return $this->sqlFormatter->highlight($sql); - } - - public function formatSql(string $sql, bool $highlight): string - { - $this->setUpSqlFormatter($highlight); - - return $this->sqlFormatter->format($sql); - } - - private function setUpSqlFormatter(bool $highlight = true, bool $legacy = false): void - { - $this->sqlFormatter = new SqlFormatter($highlight ? new HtmlHighlighter([ - HtmlHighlighter::HIGHLIGHT_PRE => 'class="highlight highlight-sql"', - HtmlHighlighter::HIGHLIGHT_QUOTE => 'class="string"', - HtmlHighlighter::HIGHLIGHT_BACKTICK_QUOTE => 'class="string"', - HtmlHighlighter::HIGHLIGHT_RESERVED => 'class="keyword"', - HtmlHighlighter::HIGHLIGHT_BOUNDARY => 'class="symbol"', - HtmlHighlighter::HIGHLIGHT_NUMBER => 'class="number"', - HtmlHighlighter::HIGHLIGHT_WORD => 'class="word"', - HtmlHighlighter::HIGHLIGHT_ERROR => 'class="error"', - HtmlHighlighter::HIGHLIGHT_COMMENT => 'class="comment"', - HtmlHighlighter::HIGHLIGHT_VARIABLE => 'class="variable"', - ], ! $legacy) : new NullHighlighter()); - } -} diff --git a/vendor/doctrine/doctrine-bundle/templates/Collector/database.svg b/vendor/doctrine/doctrine-bundle/templates/Collector/database.svg deleted file mode 100644 index 40a2b45..0000000 --- a/vendor/doctrine/doctrine-bundle/templates/Collector/database.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/vendor/doctrine/doctrine-bundle/templates/Collector/db.html.twig b/vendor/doctrine/doctrine-bundle/templates/Collector/db.html.twig deleted file mode 100644 index 90dbc18..0000000 --- a/vendor/doctrine/doctrine-bundle/templates/Collector/db.html.twig +++ /dev/null @@ -1,533 +0,0 @@ -{% extends request.isXmlHttpRequest ? '@WebProfiler/Profiler/ajax_layout.html.twig' : '@WebProfiler/Profiler/layout.html.twig' %} - -{% import _self as helper %} - -{% block toolbar %} - {% if collector.querycount > 0 or collector.invalidEntityCount > 0 %} - - {% set icon %} - {% set status = collector.invalidEntityCount > 0 ? 'red' : collector.querycount > 50 ? 'yellow' %} - - {% if profiler_markup_version >= 3 %} - {{ include('@Doctrine/Collector/database.svg') }} - {% else %} - {{ include('@Doctrine/Collector/icon.svg') }} - {% endif %} - - {% if collector.querycount == 0 and collector.invalidEntityCount > 0 %} - {{ collector.invalidEntityCount }} - errors - {% else %} - {{ collector.querycount }} - - in - {{ '%0.2f'|format(collector.time * 1000) }} - ms - - {% endif %} - {% endset %} - - {% set text %} -
- Database Queries - {{ collector.querycount }} -
-
- Different statements - {{ collector.groupedQueryCount }} -
-
- Query time - {{ '%0.2f'|format(collector.time * 1000) }} ms -
-
- Invalid entities - {{ collector.invalidEntityCount }} -
- {% if collector.cacheEnabled %} -
- Cache hits - {{ collector.cacheHitsCount }} -
-
- Cache misses - {{ collector.cacheMissesCount }} -
-
- Cache puts - {{ collector.cachePutsCount }} -
- {% else %} -
- Second Level Cache - disabled -
- {% endif %} - {% endset %} - - {{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { link: profiler_url, status: status|default('') }) }} - - {% endif %} -{% endblock %} - -{% block menu %} - - {{ include('@Doctrine/Collector/' ~ (profiler_markup_version < 3 ? 'icon' : 'database') ~ '.svg') }} - Doctrine - {% if collector.invalidEntityCount %} - - {{ collector.invalidEntityCount }} - - {% endif %} - -{% endblock %} - -{% block panel %} - {% if 'explain' == page %} - {{ render(controller('Doctrine\\Bundle\\DoctrineBundle\\Controller\\ProfilerController::explainAction', { - token: token, - panel: 'db', - connectionName: request.query.get('connection'), - query: request.query.get('query') - })) }} - {% else %} - {{ block('queries') }} - {% endif %} -{% endblock %} - -{% block queries %} - - -

Query Metrics

- -
-
-
- {{ collector.querycount }} - Database Queries -
- -
- {{ collector.groupedQueryCount }} - Different statements -
- -
- {{ '%0.2f'|format(collector.time * 1000) }} ms - Query time -
- -
- {{ collector.invalidEntityCount }} - Invalid entities -
-
- - {% if collector.cacheEnabled %} -
-
- {{ collector.cacheHitsCount }} - Cache hits -
-
- {{ collector.cacheMissesCount }} - Cache misses -
-
- {{ collector.cachePutsCount }} - Cache puts -
-
- {% endif %} -
- -
-
- {% set group_queries = request.query.getBoolean('group') %} -

- {% if group_queries %} - Grouped Statements - {% else %} - Queries - {% endif %} -

- -
- {% if not collector.queries %} -
-

No executed queries.

-
- {% else %} - {% if group_queries %} -

Show all queries

- {% else %} -

Group similar statements

- {% endif %} - - {% for connection, queries in collector.queries %} - {% if collector.connections|length > 1 %} -

{{ connection }} connection

- {% endif %} - - {% if queries is empty %} -
-

No database queries were performed.

-
- {% else %} - {% if group_queries %} - {% set queries = collector.groupedQueries[connection] %} - {% endif %} - - - - {% if group_queries %} - - - {% else %} - - - {% endif %} - - - - - {% for i, query in queries %} - {% set i = group_queries ? query.index : i %} - - {% if group_queries %} - - - {% else %} - - - {% endif %} - - - {% endfor %} - -
TimeCount#TimeInfo
- - {{ '%0.2f'|format(query.executionMS * 1000) }} ms
({{ '%0.2f'|format(query.executionPercent) }}%)
-
{{ query.count }}{{ loop.index }}{{ '%0.2f'|format(query.executionMS * 1000) }} ms - {{ query.sql|doctrine_prettify_sql }} - -
- Parameters: {{ profiler_dump(query.params, 2) }} -
- -
- View formatted query - - {% if query.runnable %} -    - View runnable query - {% endif %} - - {% if query.explainable %} -    - Explain query - {% endif %} - - {% if query.backtrace is defined %} -    - View query backtrace - {% endif %} -
- - - - {% if query.runnable %} - - {% endif %} - - {% if query.explainable %} -
- {% endif %} - - {% if query.backtrace is defined %} - - {% endif %} -
- {% endif %} - {% endfor %} - {% endif %} -
-
- -
-

Database Connections

-
- {% if not collector.connections %} -
-

There are no configured database connections.

-
- {% else %} - {{ helper.render_simple_table('Name', 'Service', collector.connections) }} - {% endif %} -
-
- -
-

Entity Managers

-
- - {% if not collector.managers %} -
-

There are no configured entity managers.

-
- {% else %} - {{ helper.render_simple_table('Name', 'Service', collector.managers) }} - {% endif %} -
-
- -
-

Second Level Cache

-
- - {% if not collector.cacheEnabled %} -
-

Second Level Cache is not enabled.

-
- {% else %} - {% if not collector.cacheCounts %} -
-

Second level cache information is not available.

-
- {% else %} -
-
- {{ collector.cacheCounts.hits }} - Hits -
- -
- {{ collector.cacheCounts.misses }} - Misses -
- -
- {{ collector.cacheCounts.puts }} - Puts -
-
- - {% if collector.cacheRegions.hits %} -

Number of cache hits

- {{ helper.render_simple_table('Region', 'Hits', collector.cacheRegions.hits) }} - {% endif %} - - {% if collector.cacheRegions.misses %} -

Number of cache misses

- {{ helper.render_simple_table('Region', 'Misses', collector.cacheRegions.misses) }} - {% endif %} - - {% if collector.cacheRegions.puts %} -

Number of cache puts

- {{ helper.render_simple_table('Region', 'Puts', collector.cacheRegions.puts) }} - {% endif %} - {% endif %} - {% endif %} -
-
- -
-

Entities Mapping

-
- - {% if not collector.entities %} -
-

No mapped entities.

-
- {% else %} - {% for manager, classes in collector.entities %} - {% if collector.managers|length > 1 %} -

{{ manager }} entity manager

- {% endif %} - - {% if classes is empty %} -
-

No loaded entities.

-
- {% else %} - - - - - - - - - {% for class in classes %} - {% set contains_errors = collector.mappingErrors[manager] is defined and collector.mappingErrors[manager][class.class] is defined %} - - - - - {% endfor %} - -
ClassMapping errors
- {{ class. class}} - - {% if contains_errors %} -
    - {% for error in collector.mappingErrors[manager][class.class] %} -
  • {{ error }}
  • - {% endfor %} -
- {% else %} - No errors. - {% endif %} -
- {% endif %} - {% endfor %} - {% endif %} -
-
-
- - -{% endblock %} - -{% macro render_simple_table(label1, label2, data) %} - - - - - - - - - {% for key, value in data %} - - - - - {% endfor %} - -
{{ label1 }}{{ label2 }}
{{ key }}{{ value }}
-{% endmacro %} diff --git a/vendor/doctrine/doctrine-bundle/templates/Collector/explain.html.twig b/vendor/doctrine/doctrine-bundle/templates/Collector/explain.html.twig deleted file mode 100644 index 3b2dd7f..0000000 --- a/vendor/doctrine/doctrine-bundle/templates/Collector/explain.html.twig +++ /dev/null @@ -1,28 +0,0 @@ -{% if data[0]|length > 1 %} - {# The platform returns a table for the explanation (e.g. MySQL), display all columns #} - - - - {% for label in data[0]|keys %} - - {% endfor %} - - - - {% for row in data %} - - {% for key, item in row %} - - {% endfor %} - - {% endfor %} - -
{{ label }}
{{ item|replace({',': ', '}) }}
-{% else %} - {# The Platform returns a single column for a textual explanation (e.g. PostgreSQL), display all lines #} -
-        {%- for row in data -%}
-            {{ row|first }}{{ "\n" }}
-        {%- endfor -%}
-    
-{% endif %} diff --git a/vendor/doctrine/doctrine-bundle/templates/Collector/icon.svg b/vendor/doctrine/doctrine-bundle/templates/Collector/icon.svg deleted file mode 100644 index 93998db..0000000 --- a/vendor/doctrine/doctrine-bundle/templates/Collector/icon.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - diff --git a/vendor/doctrine/doctrine-migrations-bundle/.symfony.bundle.yaml b/vendor/doctrine/doctrine-migrations-bundle/.symfony.bundle.yaml deleted file mode 100644 index 86ee4d1..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/.symfony.bundle.yaml +++ /dev/null @@ -1,4 +0,0 @@ -branches: ["2.2.x", "3.0.x", "3.1.x", "3.2.x", "3.3.x", "3.4.x"] -maintained_branches: ["2.2.x", "3.3.x", "3.4.x"] -doc_dir: {"2.2.x": "Resources/doc/", "3.3.x": "Resources/doc/", "3.4.x": "docs/"} -dev_branch: "3.4.x" diff --git a/vendor/doctrine/doctrine-migrations-bundle/Collector/MigrationsCollector.php b/vendor/doctrine/doctrine-migrations-bundle/Collector/MigrationsCollector.php deleted file mode 100644 index a7ad389..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/Collector/MigrationsCollector.php +++ /dev/null @@ -1,95 +0,0 @@ -dependencyFactory = $dependencyFactory; - $this->flattener = $migrationsFlattener; - } - - /** @return void */ - public function collect(Request $request, Response $response, ?Throwable $exception = null) - { - if (! empty($this->data)) { - return; - } - - $metadataStorage = $this->dependencyFactory->getMetadataStorage(); - $planCalculator = $this->dependencyFactory->getMigrationPlanCalculator(); - - try { - $executedMigrations = $metadataStorage->getExecutedMigrations(); - } catch (Exception $dbalException) { - $this->dependencyFactory->getLogger()->error( - 'error while trying to collect executed migrations', - ['exception' => $dbalException] - ); - - return; - } - - $availableMigrations = $planCalculator->getMigrations(); - - $this->data['available_migrations_count'] = count($availableMigrations); - $unavailableMigrations = $executedMigrations->unavailableSubset($availableMigrations); - $this->data['unavailable_migrations_count'] = count($unavailableMigrations); - - $newMigrations = $availableMigrations->newSubset($executedMigrations); - $this->data['new_migrations'] = $this->flattener->flattenAvailableMigrations($newMigrations); - $this->data['executed_migrations'] = $this->flattener->flattenExecutedMigrations($executedMigrations, $availableMigrations); - - $this->data['storage'] = get_class($metadataStorage); - $configuration = $this->dependencyFactory->getConfiguration(); - $storage = $configuration->getMetadataStorageConfiguration(); - if ($storage instanceof TableMetadataStorageConfiguration) { - $this->data['table'] = $storage->getTableName(); - $this->data['column'] = $storage->getVersionColumnName(); - } - - $connection = $this->dependencyFactory->getConnection(); - $this->data['driver'] = get_class($connection->getDriver()); - $this->data['name'] = $connection->getDatabase(); - - $this->data['namespaces'] = $configuration->getMigrationDirectories(); - } - - /** @return string */ - public function getName() - { - return 'doctrine_migrations'; - } - - /** @return array|Data */ - public function getData() - { - return $this->data; - } - - /** @return void */ - public function reset() - { - $this->data = []; - } -} diff --git a/vendor/doctrine/doctrine-migrations-bundle/Collector/MigrationsFlattener.php b/vendor/doctrine/doctrine-migrations-bundle/Collector/MigrationsFlattener.php deleted file mode 100644 index f97b580..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/Collector/MigrationsFlattener.php +++ /dev/null @@ -1,73 +0,0 @@ - (string) $migration->getVersion(), - 'is_new' => true, - 'is_unavailable' => false, - 'description' => $migration->getMigration()->getDescription(), - 'executed_at' => null, - 'execution_time' => null, - 'file' => (new ReflectionClass($migration->getMigration()))->getFileName(), - ]; - }, $migrationsList->getItems()); - } - - /** - * @return array{ - * version: string, - * is_new: false, - * is_unavailable: bool, - * description: string|null, - * executed_at: DateTimeImmutable|null, - * execution_time: float|null, - * file: string|false|null, - * }[] - */ - public function flattenExecutedMigrations(ExecutedMigrationsList $migrationsList, AvailableMigrationsList $availableMigrations): array - { - return array_map(static function (ExecutedMigration $migration) use ($availableMigrations) { - $availableMigration = $availableMigrations->hasMigration($migration->getVersion()) - ? $availableMigrations->getMigration($migration->getVersion())->getMigration() - : null; - - return [ - 'version' => (string) $migration->getVersion(), - 'is_new' => false, - 'is_unavailable' => ! $availableMigration, - 'description' => $availableMigration ? $availableMigration->getDescription() : null, - 'executed_at' => $migration->getExecutedAt(), - 'execution_time' => $migration->getExecutionTime(), - 'file' => $availableMigration ? (new ReflectionClass($availableMigration))->getFileName() : null, - ]; - }, $migrationsList->getItems()); - } -} diff --git a/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/CompilerPass/ConfigureDependencyFactoryPass.php b/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/CompilerPass/ConfigureDependencyFactoryPass.php deleted file mode 100644 index 5dcdc6b..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/CompilerPass/ConfigureDependencyFactoryPass.php +++ /dev/null @@ -1,115 +0,0 @@ -has('doctrine')) { - throw new RuntimeException('DoctrineMigrationsBundle requires DoctrineBundle to be enabled.'); - } - - $diDefinition = $container->getDefinition('doctrine.migrations.dependency_factory'); - - $preferredConnection = $container->getParameter('doctrine.migrations.preferred_connection'); - assert(is_string($preferredConnection) || $preferredConnection === null); - // explicitly use configured connection - if ($preferredConnection !== null) { - $this->validatePreferredConnection($container, $preferredConnection); - - $loaderDefinition = $container->getDefinition('doctrine.migrations.connection_registry_loader'); - $loaderDefinition->setArgument(1, $preferredConnection); - - $diDefinition->setFactory([DependencyFactory::class, 'fromConnection']); - $diDefinition->setArgument(1, new Reference('doctrine.migrations.connection_registry_loader')); - - return; - } - - $preferredEm = $container->getParameter('doctrine.migrations.preferred_em'); - assert(is_string($preferredEm) || $preferredEm === null); - // explicitly use configured entity manager - if ($preferredEm !== null) { - $this->validatePreferredEm($container, $preferredEm); - - $loaderDefinition = $container->getDefinition('doctrine.migrations.entity_manager_registry_loader'); - $loaderDefinition->setArgument(1, $preferredEm); - - $diDefinition->setFactory([DependencyFactory::class, 'fromEntityManager']); - $diDefinition->setArgument(1, new Reference('doctrine.migrations.entity_manager_registry_loader')); - - return; - } - - // try to use any/default entity manager - if ( - $container->hasParameter('doctrine.entity_managers') - && is_array($container->getParameter('doctrine.entity_managers')) - && count($container->getParameter('doctrine.entity_managers')) > 0 - ) { - $diDefinition->setFactory([DependencyFactory::class, 'fromEntityManager']); - $diDefinition->setArgument(1, new Reference('doctrine.migrations.entity_manager_registry_loader')); - - return; - } - - // fallback on any/default connection - $diDefinition->setFactory([DependencyFactory::class, 'fromConnection']); - $diDefinition->setArgument(1, new Reference('doctrine.migrations.connection_registry_loader')); - } - - private function validatePreferredConnection(ContainerBuilder $container, string $preferredConnection): void - { - /** @var array $allowedConnections */ - $allowedConnections = $container->getParameter('doctrine.connections'); - if (! isset($allowedConnections[$preferredConnection])) { - throw new InvalidArgumentException(sprintf( - 'The "%s" connection is not defined. Did you mean one of the following: %s', - $preferredConnection, - implode(', ', array_keys($allowedConnections)) - )); - } - } - - private function validatePreferredEm(ContainerBuilder $container, string $preferredEm): void - { - if ( - ! $container->hasParameter('doctrine.entity_managers') - || ! is_array($container->getParameter('doctrine.entity_managers')) - || count($container->getParameter('doctrine.entity_managers')) === 0 - ) { - throw new InvalidArgumentException(sprintf( - 'The "%s" entity manager is not defined. It seems that you do not have configured any entity manager in the DoctrineBundle.', - $preferredEm - )); - } - - /** @var array $allowedEms */ - $allowedEms = $container->getParameter('doctrine.entity_managers'); - if (! isset($allowedEms[$preferredEm])) { - throw new InvalidArgumentException(sprintf( - 'The "%s" entity manager is not defined. Did you mean one of the following: %s', - $preferredEm, - implode(', ', array_keys($allowedEms)) - )); - } - } -} diff --git a/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/Configuration.php b/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/Configuration.php deleted file mode 100644 index 2c69caa..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/Configuration.php +++ /dev/null @@ -1,180 +0,0 @@ -getRootNode(); - - $organizeMigrationModes = $this->getOrganizeMigrationsModes(); - - $rootNode - ->fixXmlConfig('migration', 'migrations') - ->fixXmlConfig('migrations_path', 'migrations_paths') - ->children() - ->arrayNode('migrations_paths') - ->info('A list of namespace/path pairs where to look for migrations.') - ->defaultValue([]) - ->useAttributeAsKey('namespace') - ->prototype('scalar')->end() - ->end() - - ->arrayNode('services') - ->info('A set of services to pass to the underlying doctrine/migrations library, allowing to change its behaviour.') - ->useAttributeAsKey('service') - ->defaultValue([]) - ->validate() - ->ifTrue(static function (array $v): bool { - return count(array_filter(array_keys($v), static function (string $doctrineService): bool { - return strpos($doctrineService, 'Doctrine\Migrations\\') !== 0; - })) !== 0; - }) - ->thenInvalid('Valid services for the DoctrineMigrationsBundle must be in the "Doctrine\Migrations" namespace.') - ->end() - ->prototype('scalar')->end() - ->end() - - ->arrayNode('factories') - ->info('A set of callables to pass to the underlying doctrine/migrations library as services, allowing to change its behaviour.') - ->useAttributeAsKey('factory') - ->defaultValue([]) - ->validate() - ->ifTrue(static function (array $v): bool { - return count(array_filter(array_keys($v), static function (string $doctrineService): bool { - return strpos($doctrineService, 'Doctrine\Migrations\\') !== 0; - })) !== 0; - }) - ->thenInvalid('Valid callables for the DoctrineMigrationsBundle must be in the "Doctrine\Migrations" namespace.') - ->end() - ->prototype('scalar')->end() - ->end() - - ->arrayNode('storage') - ->addDefaultsIfNotSet() - ->info('Storage to use for migration status metadata.') - ->children() - ->arrayNode('table_storage') - ->addDefaultsIfNotSet() - ->info('The default metadata storage, implemented as a table in the database.') - ->children() - ->scalarNode('table_name')->defaultValue(null)->cannotBeEmpty()->end() - ->scalarNode('version_column_name')->defaultValue(null)->end() - ->scalarNode('version_column_length')->defaultValue(null)->end() - ->scalarNode('executed_at_column_name')->defaultValue(null)->end() - ->scalarNode('execution_time_column_name')->defaultValue(null)->end() - ->end() - ->end() - ->end() - ->end() - - ->arrayNode('migrations') - ->info('A list of migrations to load in addition to the one discovered via "migrations_paths".') - ->prototype('scalar')->end() - ->defaultValue([]) - ->end() - ->scalarNode('connection') - ->info('Connection name to use for the migrations database.') - ->defaultValue(null) - ->end() - ->scalarNode('em') - ->info('Entity manager name to use for the migrations database (available when doctrine/orm is installed).') - ->defaultValue(null) - ->end() - ->scalarNode('all_or_nothing') - ->info('Run all migrations in a transaction.') - ->defaultValue(false) - ->end() - ->scalarNode('check_database_platform') - ->info('Adds an extra check in the generated migrations to allow execution only on the same platform as they were initially generated on.') - ->defaultValue(true) - ->end() - ->scalarNode('custom_template') - ->info('Custom template path for generated migration classes.') - ->defaultValue(null) - ->end() - ->scalarNode('organize_migrations') - ->defaultValue(false) - ->info('Organize migrations mode. Possible values are: "BY_YEAR", "BY_YEAR_AND_MONTH", false') - ->validate() - ->ifTrue(static function ($v) use ($organizeMigrationModes): bool { - if ($v === false) { - return false; - } - - return ! is_string($v) || ! in_array(strtoupper($v), $organizeMigrationModes, true); - }) - ->thenInvalid('Invalid organize migrations mode value %s') - ->end() - ->validate() - ->ifString() - ->then(static function ($v) { - return constant('Doctrine\Migrations\Configuration\Configuration::VERSIONS_ORGANIZATION_' . strtoupper($v)); - }) - ->end() - ->end() - ->booleanNode('enable_profiler') - ->info('Whether or not to enable the profiler collector to calculate and visualize migration status. This adds some queries overhead.') - ->defaultFalse() - ->end() - ->booleanNode('transactional') - ->info('Whether or not to wrap migrations in a single transaction.') - ->defaultTrue() - ->end() - ->end(); - - return $treeBuilder; - } - - /** - * Find organize migrations modes for their names - * - * @return string[] - */ - private function getOrganizeMigrationsModes(): array - { - $constPrefix = 'VERSIONS_ORGANIZATION_'; - $prefixLen = strlen($constPrefix); - $refClass = new ReflectionClass('Doctrine\Migrations\Configuration\Configuration'); - $constsArray = array_keys($refClass->getConstants()); - $namesArray = []; - - foreach ($constsArray as $constant) { - if (strpos($constant, $constPrefix) !== 0) { - continue; - } - - $namesArray[] = substr($constant, $prefixLen); - } - - return $namesArray; - } -} diff --git a/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/DoctrineMigrationsExtension.php b/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/DoctrineMigrationsExtension.php deleted file mode 100644 index 647d1a2..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/DependencyInjection/DoctrineMigrationsExtension.php +++ /dev/null @@ -1,201 +0,0 @@ -processConfiguration($configuration, $configs); - - $locator = new FileLocator(__DIR__ . '/../Resources/config/'); - $loader = new XmlFileLoader($container, $locator); - - $loader->load('services.xml'); - - $configurationDefinition = $container->getDefinition('doctrine.migrations.configuration'); - - foreach ($config['migrations_paths'] as $ns => $path) { - $path = $this->checkIfBundleRelativePath($path, $container); - $configurationDefinition->addMethodCall('addMigrationsDirectory', [$ns, $path]); - } - - foreach ($config['migrations'] as $migrationClass) { - $configurationDefinition->addMethodCall('addMigrationClass', [$migrationClass]); - } - - if ($config['organize_migrations'] !== false) { - $configurationDefinition->addMethodCall('setMigrationOrganization', [$config['organize_migrations']]); - } - - if ($config['custom_template'] !== null) { - $configurationDefinition->addMethodCall('setCustomTemplate', [$config['custom_template']]); - } - - $configurationDefinition->addMethodCall('setAllOrNothing', [$config['all_or_nothing']]); - $configurationDefinition->addMethodCall('setCheckDatabasePlatform', [$config['check_database_platform']]); - - if ($config['enable_profiler']) { - $this->registerCollector($container); - } - - $configurationDefinition->addMethodCall('setTransactional', [$config['transactional']]); - - $diDefinition = $container->getDefinition('doctrine.migrations.dependency_factory'); - - if (! isset($config['services'][MigrationFactory::class])) { - $config['services'][MigrationFactory::class] = 'doctrine.migrations.migrations_factory'; - } - - foreach ($config['services'] as $doctrineId => $symfonyId) { - $diDefinition->addMethodCall('setDefinition', [$doctrineId, new ServiceClosureArgument(new Reference($symfonyId))]); - } - - foreach ($config['factories'] as $doctrineId => $symfonyId) { - $diDefinition->addMethodCall('setDefinition', [$doctrineId, new Reference($symfonyId)]); - } - - if (! isset($config['services'][MetadataStorage::class])) { - $storageConfiguration = $config['storage']['table_storage']; - - $storageDefinition = new Definition(TableMetadataStorageConfiguration::class); - $container->setDefinition('doctrine.migrations.storage.table_storage', $storageDefinition); - $container->setAlias('doctrine.migrations.metadata_storage', 'doctrine.migrations.storage.table_storage'); - - if ($storageConfiguration['table_name'] !== null) { - $storageDefinition->addMethodCall('setTableName', [$storageConfiguration['table_name']]); - } - - if ($storageConfiguration['version_column_name'] !== null) { - $storageDefinition->addMethodCall('setVersionColumnName', [$storageConfiguration['version_column_name']]); - } - - if ($storageConfiguration['version_column_length'] !== null) { - $storageDefinition->addMethodCall('setVersionColumnLength', [$storageConfiguration['version_column_length']]); - } - - if ($storageConfiguration['executed_at_column_name'] !== null) { - $storageDefinition->addMethodCall('setExecutedAtColumnName', [$storageConfiguration['executed_at_column_name']]); - } - - if ($storageConfiguration['execution_time_column_name'] !== null) { - $storageDefinition->addMethodCall('setExecutionTimeColumnName', [$storageConfiguration['execution_time_column_name']]); - } - - $configurationDefinition->addMethodCall('setMetadataStorageConfiguration', [new Reference('doctrine.migrations.storage.table_storage')]); - } - - if ($config['em'] !== null && $config['connection'] !== null) { - throw new InvalidArgumentException( - 'You cannot specify both "connection" and "em" in the DoctrineMigrationsBundle configurations.' - ); - } - - $container->setParameter('doctrine.migrations.preferred_em', $config['em']); - $container->setParameter('doctrine.migrations.preferred_connection', $config['connection']); - - if (interface_exists(ContainerAwareInterface::class)) { - return; - } - - $container->removeDefinition('doctrine.migrations.container_aware_migrations_factory'); - } - - private function checkIfBundleRelativePath(string $path, ContainerBuilder $container): string - { - if (isset($path[0]) && $path[0] === '@') { - $pathParts = explode('/', $path); - $bundleName = substr($pathParts[0], 1); - - $bundlePath = $this->getBundlePath($bundleName, $container); - - return $bundlePath . substr($path, strlen('@' . $bundleName)); - } - - return $path; - } - - private function getBundlePath(string $bundleName, ContainerBuilder $container): string - { - $bundleMetadata = $container->getParameter('kernel.bundles_metadata'); - assert(is_array($bundleMetadata)); - - if (! isset($bundleMetadata[$bundleName])) { - throw new RuntimeException(sprintf( - 'The bundle "%s" has not been registered, available bundles: %s', - $bundleName, - implode(', ', array_keys($bundleMetadata)) - )); - } - - return $bundleMetadata[$bundleName]['path']; - } - - private function registerCollector(ContainerBuilder $container): void - { - $flattenerDefinition = new Definition(MigrationsFlattener::class); - $container->setDefinition('doctrine_migrations.migrations_flattener', $flattenerDefinition); - - $collectorDefinition = new Definition(MigrationsCollector::class, [ - new Reference('doctrine.migrations.dependency_factory'), - new Reference('doctrine_migrations.migrations_flattener'), - ]); - $collectorDefinition - ->addTag('data_collector', [ - 'template' => '@DoctrineMigrations/Collector/migrations.html.twig', - 'id' => 'doctrine_migrations', - 'priority' => '249', - ]); - $container->setDefinition('doctrine_migrations.migrations_collector', $collectorDefinition); - } - - /** - * Returns the base path for the XSD files. - * - * @return string The XSD base path - */ - public function getXsdValidationBasePath(): string - { - return __DIR__ . '/../Resources/config/schema'; - } - - public function getNamespace(): string - { - return 'http://symfony.com/schema/dic/doctrine/migrations/3.0'; - } -} diff --git a/vendor/doctrine/doctrine-migrations-bundle/DoctrineMigrationsBundle.php b/vendor/doctrine/doctrine-migrations-bundle/DoctrineMigrationsBundle.php deleted file mode 100644 index 403c7d1..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/DoctrineMigrationsBundle.php +++ /dev/null @@ -1,21 +0,0 @@ -addCompilerPass(new ConfigureDependencyFactoryPass()); - } -} diff --git a/vendor/doctrine/doctrine-migrations-bundle/MigrationsFactory/ContainerAwareMigrationFactory.php b/vendor/doctrine/doctrine-migrations-bundle/MigrationsFactory/ContainerAwareMigrationFactory.php deleted file mode 100644 index 9513111..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/MigrationsFactory/ContainerAwareMigrationFactory.php +++ /dev/null @@ -1,41 +0,0 @@ -= 7 */ -class ContainerAwareMigrationFactory implements MigrationFactory -{ - /** @var ContainerInterface */ - private $container; - - /** @var MigrationFactory */ - private $migrationFactory; - - public function __construct(MigrationFactory $migrationFactory, ContainerInterface $container) - { - $this->container = $container; - $this->migrationFactory = $migrationFactory; - } - - public function createVersion(string $migrationClassName): AbstractMigration - { - $migration = $this->migrationFactory->createVersion($migrationClassName); - - if ($migration instanceof ContainerAwareInterface) { - trigger_deprecation('doctrine/doctrine-migrations-bundle', '3.3', 'Migration "%s" implements "%s" to gain access to the application\'s service container. This method is deprecated and won\'t work with Symfony 7.', $migrationClassName, ContainerAwareInterface::class); - - $migration->setContainer($this->container); - } - - return $migration; - } -} diff --git a/vendor/doctrine/doctrine-migrations-bundle/README.markdown b/vendor/doctrine/doctrine-migrations-bundle/README.markdown deleted file mode 100644 index bd0817a..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/README.markdown +++ /dev/null @@ -1,9 +0,0 @@ -DoctrineMigrationsBundle -======================== - -This bundle integrates the [Doctrine Migrations library](http://www.doctrine-project.org/projects/migrations.html) -into Symfony applications. Database migrations help you version the changes in -your database schema and apply them in a predictable way on every server running -the application. - -[Read the documentation of this bundle](https://symfony.com/doc/current/bundles/DoctrineMigrationsBundle/index.html). diff --git a/vendor/doctrine/doctrine-migrations-bundle/Resources/config/schema/doctrine_migrations-3.0.xsd b/vendor/doctrine/doctrine-migrations-bundle/Resources/config/schema/doctrine_migrations-3.0.xsd deleted file mode 100644 index 0c5990c..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/Resources/config/schema/doctrine_migrations-3.0.xsd +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/doctrine/doctrine-migrations-bundle/Resources/config/services.xml b/vendor/doctrine/doctrine-migrations-bundle/Resources/config/services.xml deleted file mode 100644 index cb97871..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/Resources/config/services.xml +++ /dev/null @@ -1,151 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - doctrine:migrations:diff - - - - - - - - doctrine:migrations:sync-metadata-storage - - - - - - - - doctrine:migrations:versions - - - - - - - - doctrine:migrations:current - - - - - - - - doctrine:migrations:dump-schema - - - - - - - doctrine:migrations:execute - - - - - - - doctrine:migrations:generate - - - - - - - doctrine:migrations:latest - - - - - - - doctrine:migrations:migrate - - - - - - - doctrine:migrations:rollup - - - - - - - doctrine:migrations:status - - - - - - - doctrine:migrations:up-to-date - - - - - - - doctrine:migrations:version - - - - - - - diff --git a/vendor/doctrine/doctrine-migrations-bundle/Resources/doc/index.rst b/vendor/doctrine/doctrine-migrations-bundle/Resources/doc/index.rst deleted file mode 100644 index e2fb02b..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/Resources/doc/index.rst +++ /dev/null @@ -1,467 +0,0 @@ -DoctrineMigrationsBundle -======================== - -Database migrations are a way to safely update your database schema both locally -and on production. Instead of running the ``doctrine:schema:update`` command or -applying the database changes manually with SQL statements, migrations allow to -replicate the changes in your database schema in a safe manner. - -Migrations are available in Symfony applications via the `DoctrineMigrationsBundle`_, -which uses the external `Doctrine Database Migrations`_ library. Read the -`documentation`_ of that library if you need a general introduction about migrations. - -Installation ------------- - -Run this command in your terminal: - -.. code-block:: terminal - - $ composer require doctrine/doctrine-migrations-bundle "^3.0" - -If you don't use `Symfony Flex`_, you must enable the bundle manually in the application: - -.. code-block:: php - - // config/bundles.php - // in older Symfony apps, enable the bundle in app/AppKernel.php - return [ - // ... - Doctrine\Bundle\MigrationsBundle\DoctrineMigrationsBundle::class => ['all' => true], - ]; - -Configuration -------------- - -If you use Symfony Flex, the ``doctrine_migrations.yaml`` config file is created -automatically. Otherwise, create the following file and configure it for your -application: - -.. code-block:: yaml - - # config/packages/doctrine_migrations.yaml - - doctrine_migrations: - # List of namespace/path pairs to search for migrations, at least one required - migrations_paths: - 'App\Migrations': '%kernel.project_dir%/src/App' - 'AnotherApp\Migrations': '/path/to/other/migrations' - 'SomeBundle\Migrations': '@SomeBundle/Migrations' - - # List of additional migration classes to be loaded, optional - migrations: - - 'App\Migrations\Version123' - - 'App\Migrations\Version123' - - # Connection to use for the migrations - connection: default - - # Entity manager to use for migrations. This overrides the "connection" setting. - em: default - - storage: - # Default (SQL table) metadata storage configuration - table_storage: - table_name: 'doctrine_migration_versions' - version_column_name: 'version' - version_column_length: 192 - executed_at_column_name: 'executed_at' - - # Possible values: "BY_YEAR", "BY_YEAR_AND_MONTH", false - organize_migrations: false - - # Path to your custom migrations template - custom_template: ~ - - # Run all migrations in a transaction. - all_or_nothing: false - - # Adds an extra check in the generated migrations to ensure that is executed on the same database type. - check_database_platform: true - - # Whether or not to wrap migrations in a single transaction. - transactional: true - - # Whether or not to enable the profiler collector to calculate and visualize migration status. This adds some queries overhead. - # enable_profiler: false - - services: - # Custom migration sorting service id - 'Doctrine\Migrations\Version\Comparator': ~ - - # Custom migration classes factory - 'Doctrine\Migrations\Version\MigrationFactory': ~ - - factories: - # Custom migration sorting service id via callables (MyCallableFactory must be a callable) - 'Doctrine\Migrations\Version\Comparator': 'MyCallableFactory' - -- The ``services`` node allows you to provide custom services to the underlying ``DependencyFactory`` part of ``doctrine/migrations``. -- The node ``factories`` is similar to ``services``, with the difference that it accepts only callables. - -The provided callable must return the service to be passed to the ``DependencyFactory``. -The callable will receive as first argument the ``DependencyFactory`` itself, -allowing you to fetch other dependencies from the factory while instantiating your custom dependencies. - -Usage ------ - -All of the migrations functionality is contained in a few console commands: - -.. code-block:: terminal - - doctrine - doctrine:migrations:current [current] Outputs the current version. - doctrine:migrations:diff [diff] Generate a migration by comparing your current database to your mapping information. - doctrine:migrations:dump-schema [dump-schema] Dump the schema for your database to a migration. - doctrine:migrations:execute [execute] Execute a single migration version up or down manually. - doctrine:migrations:generate [generate] Generate a blank migration class. - doctrine:migrations:latest [latest] Outputs the latest version number - doctrine:migrations:migrate [migrate] Execute a migration to a specified version or the latest available version. - doctrine:migrations:rollup [rollup] Roll migrations up by deleting all tracked versions and inserting the one version that exists. - doctrine:migrations:status [status] View the status of a set of migrations. - doctrine:migrations:up-to-date [up-to-date] Tells you if your schema is up-to-date. - doctrine:migrations:version [version] Manually add and delete migration versions from the version table. - doctrine:migrations:sync-metadata-storage [sync-metadata-storage] Ensures that the metadata storage is at the latest version. - doctrine:migrations:list [list-migrations] Display a list of all available migrations and their status. - -Start by getting the status of migrations in your application by running -the ``status`` command: - -.. code-block:: terminal - - $ php bin/console doctrine:migrations:status - -This command will show you generic information about the migration status, such as how many migrations have been -already executed, which still need to run, and the database in use. - -Now, you can start working with migrations by generating a new blank migration -class. Later, you'll learn how Doctrine can generate migrations automatically -for you. - -.. code-block:: terminal - - $ php bin/console doctrine:migrations:generate - -Have a look at the newly generated migration class and you will see something -like the following: - -.. code-block:: php - - declare(strict_types=1); - - namespace DoctrineMigrations; - - use Doctrine\DBAL\Schema\Schema; - use Doctrine\Migrations\AbstractMigration; - - /** - * Auto-generated Migration: Please modify to your needs! - */ - final class Version20180605025653 extends AbstractMigration - { - public function getDescription() : string - { - return ''; - } - - public function up(Schema $schema) : void - { - // this up() migration is auto-generated, please modify it to your needs - - } - - public function down(Schema $schema) : void - { - // this down() migration is auto-generated, please modify it to your needs - - } - } - -If you run the ``status`` command again it will now show that you have one new -migration to execute: - -.. code-block:: terminal - - $ php bin/console doctrine:migrations:status - -Now you can add some migration code to the ``up()`` and ``down()`` methods and -finally migrate when you're ready: - -.. code-block:: terminal - - $ php bin/console doctrine:migrations:migrate 'DoctrineMigrations\Version20180605025653' - -For more information on how to write the migrations themselves (i.e. how to -fill in the ``up()`` and ``down()`` methods), see the official Doctrine Migrations -`documentation`_. - -Running Migrations during Deployment -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -Of course, the end goal of writing migrations is to be able to use them to -reliably update your database structure when you deploy your application. -By running the migrations locally (or on a beta server), you can ensure that -the migrations work as you expect. - -When you do finally deploy your application, you just need to remember to run -the ``doctrine:migrations:migrate`` command. Internally, Doctrine creates -a ``migration_versions`` table inside your database and tracks which migrations -have been executed there. So, no matter how many migrations you've created -and executed locally, when you run the command during deployment, Doctrine -will know exactly which migrations it hasn't run yet by looking at the ``migration_versions`` -table of your production database. Regardless of what server you're on, you -can always safely run this command to execute only the migrations that haven't -been run yet on *that* particular database. - -Skipping Migrations -~~~~~~~~~~~~~~~~~~~ - -You can skip single migrations by explicitly adding them to the ``migration_versions`` table: - -.. code-block:: terminal - - $ php bin/console doctrine:migrations:version 'App\Migrations\Version123' --add - -.. tip:: - - Pay attention to the single quotes (``'``) used in the command above, without them - or with the double quotes (``"``) the command will not work properly. - - -Doctrine will then assume that this migration has already been run and will ignore it. - -Migration Dependencies ----------------------- - -Migrations can have dependencies on external services (such as geolocation, mailer, data processing services...) that -can be used to have more powerful migrations. Those dependencies are not automatically injected into your migrations -but need to be injected using custom migrations factories. - -Here is an example on how to inject the service container into your migrations: - -.. configuration-block:: - - .. code-block:: yaml - - # config/packages/doctrine_migrations.yaml - doctrine_migrations: - services: - 'Doctrine\Migrations\Version\MigrationFactory': 'App\Migrations\Factory\MigrationFactoryDecorator' - - # config/services.yaml - services: - App\Migrations\Factory\MigrationFactoryDecorator: - decorates: 'doctrine.migrations.migrations_factory' - arguments: ['@.inner', '@service_container'] - - -.. code-block:: php - - declare(strict_types=1); - - namespace App\Migrations\Factory; - - use Doctrine\Migrations\AbstractMigration; - use Doctrine\Migrations\Version\MigrationFactory; - use Symfony\Component\DependencyInjection\ContainerAwareInterface; - use Symfony\Component\DependencyInjection\ContainerInterface; - - class MigrationFactoryDecorator implements MigrationFactory - { - private $migrationFactory; - private $container; - - public function __construct(MigrationFactory $migrationFactory, ContainerInterface $container) - { - $this->migrationFactory = $migrationFactory; - $this->container = $container; - } - - public function createVersion(string $migrationClassName): AbstractMigration - { - $instance = $this->migrationFactory->createVersion($migrationClassName); - - if ($instance instanceof ContainerAwareInterface) { - $instance->setContainer($this->container); - } - - return $instance; - } - } - - -.. tip:: - - If your migration class implements the interface ``Symfony\Component\DependencyInjection\ContainerAwareInterface`` - this bundle will automatically inject the default symfony container into your migration class - (this because the ``MigrationFactoryDecorator`` shown in this example is the default migration factory used by this bundle). - - -Generating Migrations Automatically ------------------------------------ - -In reality, you should rarely need to write migrations manually, as the migrations -library can generate migration classes automatically by comparing your Doctrine -mapping information (i.e. what your database *should* look like) with your -actual current database structure. - -For example, suppose you create a new ``User`` entity and add mapping information -for Doctrine's ORM: - -.. configuration-block:: - - .. code-block:: php-annotations - - // src/Entity/User.php - namespace App\Entity; - - use Doctrine\ORM\Mapping as ORM; - - /** - * @ORM\Entity - * @ORM\Table(name="hello_user") - */ - class User - { - /** - * @ORM\Id - * @ORM\Column(type="integer") - * @ORM\GeneratedValue(strategy="AUTO") - */ - private $id; - - /** - * @ORM\Column(type="string", length=255) - */ - private $name; - - .. code-block:: yaml - - # config/doctrine/User.orm.yaml - App\Entity\User: - type: entity - table: user - id: - id: - type: integer - generator: - strategy: AUTO - fields: - name: - type: string - length: 255 - - .. code-block:: xml - - - - - - - - - - - - - -With this information, Doctrine is now ready to help you persist your new -``User`` object to and from the ``user`` table. Of course, this table -doesn't exist yet! Generate a new migration for this table automatically by -running the following command: - -.. code-block:: terminal - - $ php bin/console doctrine:migrations:diff - -You should see a message that a new migration class was generated based on -the schema differences. If you open this file, you'll find that it has the -SQL code needed to create the ``user`` table. Next, run the migration -to add the table to your database: - -.. code-block:: terminal - - $ php bin/console doctrine:migrations:migrate - -The moral of the story is this: after each change you make to your Doctrine -mapping information, run the ``doctrine:migrations:diff`` command to automatically -generate your migration classes. - -If you do this from the very beginning of your project (i.e. so that even -the first tables were loaded via a migration class), you'll always be able -to create a fresh database and run your migrations in order to get your database -schema fully up to date. In fact, this is an easy and dependable workflow -for your project. - -If you don't want to use this workflow and instead create your schema via -``doctrine:schema:create``, you can tell Doctrine to skip all existing migrations: - -.. code-block:: terminal - - $ php bin/console doctrine:migrations:version --add --all - -Otherwise Doctrine will try to run all migrations, which probably will not work. - -Manual Tables -------------- - -It is a common use case, that in addition to your generated database structure -based on your doctrine entities you might need custom tables. By default such -tables will be removed by the ``doctrine:migrations:diff`` command. - -If you follow a specific scheme you can configure doctrine/dbal to ignore those -tables. Let's say all custom tables will be prefixed by ``t_``. In this case you -just have to add the following configuration option to your doctrine configuration: - -.. configuration-block:: - - .. code-block:: yaml - - doctrine: - dbal: - schema_filter: ~^(?!t_)~ - - .. code-block:: xml - - - - - .. code-block:: php - - $container->loadFromExtension('doctrine', array( - 'dbal' => array( - 'schema_filter' => '~^(?!t_)~', - // ... - ), - // ... - )); - -This ignores the tables, and any named objects such as sequences, on the DBAL level and they will be ignored by the diff command. - -Note that if you have multiple connections configured then the ``schema_filter`` configuration -will need to be placed per-connection. - -Troubleshooting out of sync metadata storage issue --------------------------------------------------- -``doctrine/migrations`` relies on a properly configured Database server version in the connection string to manage the table storing the -migrations, also known as the metadata storage. - -If you encounter the error ``The metadata storage is not up to date, please run the sync-metadata-storage command to fix this issue.`` -when running the command ``doctrine:migrations:migrate`` or the suggested command itself ``doctrine:migrations:sync-metadata-storage`` please -check the database connection string, and make sure that the proper server version is defined. If you are running a MariaDB database, -you should prefix the server version with ``mariadb-`` (ex: ``mariadb-10.2.12``). See the `configuring_database`_ section. - -Example connection string for MariaDB: - -.. code-block:: terminal - DATABASE_URL=mysql://root:@127.0.0.1:3306/testtest?serverVersion=mariadb-10.4.11 - -.. _documentation: https://www.doctrine-project.org/projects/doctrine-migrations/en/current/index.html -.. _configuring_database: https://symfony.com/doc/current/doctrine.html#configuring-the-database -.. _DoctrineMigrationsBundle: https://github.com/doctrine/DoctrineMigrationsBundle -.. _`Doctrine Database Migrations`: https://github.com/doctrine/migrations -.. _`Symfony Flex`: https://symfony.com/doc/current/setup/flex.html diff --git a/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/icon-v3.svg b/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/icon-v3.svg deleted file mode 100644 index 0897e4b..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/icon-v3.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/icon.svg b/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/icon.svg deleted file mode 100644 index c291807..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/icon.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/migrations.html.twig b/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/migrations.html.twig deleted file mode 100644 index a61934e..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/Resources/views/Collector/migrations.html.twig +++ /dev/null @@ -1,252 +0,0 @@ -{% extends '@WebProfiler/Profiler/layout.html.twig' %} - -{% block toolbar %} - {% if collector.data.unavailable_migrations_count is defined %} - {% set unavailable_migrations = collector.data.unavailable_migrations_count %} - {% set new_migrations = collector.data.new_migrations|length %} - {% if unavailable_migrations > 0 or new_migrations > 0 %} - {% set executed_migrations = collector.data.executed_migrations|length %} - {% set available_migrations = collector.data.available_migrations_count %} - {% set status_color = unavailable_migrations > 0 ? 'yellow' : '' %} - {% set status_color = new_migrations > 0 ? 'red' : status_color %} - - {% set icon %} - {% if profiler_markup_version < 3 %} - {{ include('@DoctrineMigrations/Collector/icon.svg') }} - {% else %} - {{ include('@DoctrineMigrations/Collector/icon-v3.svg') }} - {% endif %} - - {{ new_migrations + unavailable_migrations }} - {% endset %} - - {% set text %} -
-
- Current Migration - {{ executed_migrations > 0 ? collector.data.executed_migrations|last.version|split('\\')|last : 'n/a' }} -
-
- -
-
- - Database Migrations - -
-
- Executed - {{ executed_migrations }} -
-
- Unavailable - {{ unavailable_migrations }} -
-
- Available - {{ available_migrations }} -
-
- New - {{ new_migrations }} -
-
- {% endset %} - - {{ include('@WebProfiler/Profiler/toolbar_item.html.twig', { link: profiler_url, status: status_color }) }} - {% endif %} - {% endif %} -{% endblock %} - -{% block menu %} - {% if collector.data.unavailable_migrations_count is defined %} - {% set unavailable_migrations = collector.data.unavailable_migrations_count %} - {% set new_migrations = collector.data.new_migrations|length %} - {% set label = unavailable_migrations > 0 ? 'label-status-warning' : '' %} - {% set label = new_migrations > 0 ? 'label-status-error' : label %} - - - {% if profiler_markup_version < 3 %} - {{ include('@DoctrineMigrations/Collector/icon.svg') }} - {% else %} - {{ include('@DoctrineMigrations/Collector/icon-v3.svg') }} - {% endif %} - - - Migrations - {% if unavailable_migrations > 0 or new_migrations > 0 %} - - {{ new_migrations + unavailable_migrations }} - - {% endif %} - - {% endif %} -{% endblock %} - -{% block panel %} - {% set num_executed_migrations = collector.data.executed_migrations|length %} - {% set num_unavailable_migrations = collector.data.unavailable_migrations_count %} - {% set num_available_migrations = collector.data.available_migrations_count %} - {% set num_new_migrations = collector.data.new_migrations|length %} - -

Doctrine Migrations

-
-
- {{ num_executed_migrations }} - Executed -
- - {% if profiler_markup_version >= 3 %} -
- {% endif %} - -
- {{ num_unavailable_migrations }} - Unavailable -
-
- {{ num_available_migrations }} - Available -
-
- {{ num_new_migrations }} - New -
- - {% if profiler_markup_version >= 3 %} -
{# closes the
#} - {% endif %} -
- -
-
-

- Migrations - - {{ num_new_migrations > 0 ? num_new_migrations : num_unavailable_migrations > 0 ? num_unavailable_migrations : num_executed_migrations }} - -

- -
- {{ _self.render_migration_details(collector, profiler_markup_version) }} -
-
- -
-

Configuration

- -
- {{ _self.render_configuration_details(collector, profiler_markup_version) }} -
-
-
-{% endblock %} - -{% macro render_migration_details(collector) %} - - - - - - - - - - - {% for migration in collector.data.new_migrations %} - {{ _self.render_migration(migration) }} - {% endfor %} - - {% for migration in collector.data.executed_migrations|reverse %} - {{ _self.render_migration(migration) }} - {% endfor %} -
VersionDescriptionStatusExecuted atExecution time
-{% endmacro %} - -{% macro render_configuration_details(collector) %} - - - - - - - - - - - {% if collector.data.table is defined %} - - - - - {% endif %} - {% if collector.data.column is defined %} - - - - - {% endif %} -
Storage
Type{{ collector.data.storage }}
Table Name{{ collector.data.table }}
Column Name{{ collector.data.column }}
- - - - - - - - - - - - - - - -
Database
Driver{{ collector.data.driver }}
Name{{ collector.data.name }}
- - - - - - - - {% for namespace, directory in collector.data.namespaces %} - - - - - {% endfor %} -
Migration Namespaces
{{ namespace }}{{ directory }}
-{% endmacro %} - -{% macro render_migration(migration, profiler_markup_version) %} - - - {% if migration.file %} - {{ migration.version }} - {% else %} - {{ migration.version }} - {% endif %} - - {{ migration.description }} - - {% if migration.is_new %} - NOT EXECUTED - {% elseif migration.is_unavailable %} - UNAVAILABLE - {% else %} - EXECUTED - {% endif %} - - {{ migration.executed_at ? migration.executed_at|date('M j, Y H:i') : 'n/a' }} - - {% if migration.execution_time is null %} - n/a - {% elseif migration.execution_time < 1 %} - {{ (migration.execution_time * 1000)|number_format(0) }} ms - {% else %} - {{ migration.execution_time|number_format(2) }} seconds - {% endif %} - - -{% endmacro %} diff --git a/vendor/doctrine/doctrine-migrations-bundle/UPGRADE.md b/vendor/doctrine/doctrine-migrations-bundle/UPGRADE.md deleted file mode 100644 index 84ffed0..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/UPGRADE.md +++ /dev/null @@ -1,86 +0,0 @@ -# Upgrade - -## From 2.x to 3.0.0 - -- The configuration for the migration namespace and directory changed as follows: - -Before - -```yaml -doctrine_migrations: - dir_name: '%kernel.project_dir%/src/Migrations' - namespace: DoctrineMigrations -``` - -After - -```yaml -doctrine_migrations: - migrations_paths: - 'DoctrineMigrations': '%kernel.project_dir%/src/Migrations' -``` - -- The configuration for the metadata table definition changed as follows: - -Before - -```yaml -doctrine_migrations: - table_name: 'migration_versions' - column_name: 'version' - column_length: 14 - executed_at_column_name: 'executed_at' -``` - -After - -```yaml -doctrine_migrations: - storage: - table_storage: - table_name: 'migration_versions' - version_column_name: 'version' - version_column_length: 191 - executed_at_column_name: 'executed_at' -``` -If your project did not originally specify its own table definition configuration, you will need to configure the table name after the upgrade: - -```yaml -doctrine_migrations: - storage: - table_storage: - table_name: 'migration_versions' -``` -and then run the `doctrine:migrations:sync-metadata-storage` command. -- The migration name has been dropped: - -Before - -```yaml -doctrine_migrations: - name: 'Application Migrations' -``` - -After - -The parameter `name` has been dropped. - - -- The default for `table_name` changed from `migration_versions` to `doctrine_migration_versions`. If you did not -specify the `table_name` option, you now need to declare it explicitly to not lose migration data. - -```yaml -doctrine_migrations: - storage: - table_storage: - table_name: 'migration_versions' -``` - -### Underlying doctrine/migrations library - -Upgrading this bundle to `3.0` will also update the `doctrine/migrations` library to the version `3.0`. -Backward incompatible changes in `doctrine/migrations` 3.0 -are documented in the dedicated [UPGRADE](https://github.com/doctrine/migrations/blob/3.0.x/UPGRADE.md) document. - -- The container is not automatically injected anymore when a migration implements `ContainerAwareInterface`. Custom -migration factories should be used to inject additional dependencies into migrations. diff --git a/vendor/doctrine/doctrine-migrations-bundle/composer.json b/vendor/doctrine/doctrine-migrations-bundle/composer.json deleted file mode 100644 index 6e1908e..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/composer.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "name": "doctrine/doctrine-migrations-bundle", - "type": "symfony-bundle", - "description": "Symfony DoctrineMigrationsBundle", - "keywords": ["DBAL", "Migrations", "Schema"], - "homepage": "https://www.doctrine-project.org", - "license": "MIT", - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Doctrine Project", - "homepage": "https://www.doctrine-project.org" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "require": { - "php": "^7.2|^8.0", - "symfony/deprecation-contracts": "^2.1 || ^3", - "symfony/framework-bundle": "^5.4 || ^6.0 || ^7.0", - "doctrine/doctrine-bundle": "^2.4", - "doctrine/migrations": "^3.2" - }, - "require-dev": { - "composer/semver": "^3.0", - "phpunit/phpunit": "^8.5|^9.5", - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.4", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "phpstan/phpstan-symfony": "^1.3", - "doctrine/orm": "^2.6 || ^3", - "doctrine/persistence": "^2.0 || ^3 ", - "psalm/plugin-phpunit": "^0.18.4", - "psalm/plugin-symfony": "^3 || ^5", - "symfony/phpunit-bridge": "^6.3 || ^7", - "symfony/var-exporter": "^5.4 || ^6 || ^7", - "vimeo/psalm": "^4.30 || ^5.15" - }, - "autoload": { - "psr-4": { "Doctrine\\Bundle\\MigrationsBundle\\": "" }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "autoload-dev": { - "psr-4": { "Doctrine\\Bundle\\MigrationsBundle\\Tests\\": "Tests" } - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - } - } -} diff --git a/vendor/doctrine/doctrine-migrations-bundle/phpstan-baseline.neon b/vendor/doctrine/doctrine-migrations-bundle/phpstan-baseline.neon deleted file mode 100644 index 5f0690d..0000000 --- a/vendor/doctrine/doctrine-migrations-bundle/phpstan-baseline.neon +++ /dev/null @@ -1,26 +0,0 @@ -parameters: - ignoreErrors: - - - message: "#^Construct empty\\(\\) is not allowed\\. Use more strict comparison\\.$#" - count: 1 - path: Collector/MigrationsCollector.php - - - - message: "#^Only booleans are allowed in a negated boolean, Doctrine\\\\Migrations\\\\AbstractMigration\\|null given\\.$#" - count: 1 - path: Collector/MigrationsFlattener.php - - - - message: "#^Only booleans are allowed in a ternary operator condition, Doctrine\\\\Migrations\\\\AbstractMigration\\|null given\\.$#" - count: 2 - path: Collector/MigrationsFlattener.php - - - - message: "#^Call to method setContainer\\(\\) on an unknown class Symfony\\\\Component\\\\DependencyInjection\\\\ContainerAwareInterface\\.$#" - count: 1 - path: MigrationsFactory/ContainerAwareMigrationFactory.php - - - - message: "#^Class Symfony\\\\Component\\\\DependencyInjection\\\\ContainerAwareInterface not found\\.$#" - count: 2 - path: MigrationsFactory/ContainerAwareMigrationFactory.php diff --git a/vendor/doctrine/event-manager/README.md b/vendor/doctrine/event-manager/README.md deleted file mode 100644 index 5b36f54..0000000 --- a/vendor/doctrine/event-manager/README.md +++ /dev/null @@ -1,13 +0,0 @@ -# Doctrine Event Manager - -[![Build Status](https://github.com/doctrine/event-manager/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/event-manager/actions) -[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/doctrine/event-manager/badges/quality-score.png?b=1.2.x)](https://scrutinizer-ci.com/g/doctrine/event-manager/?branch=1.2.x) -[![Code Coverage](https://scrutinizer-ci.com/g/doctrine/event-manager/badges/coverage.png?b=1.2.x)](https://scrutinizer-ci.com/g/doctrine/event-manager/?branch=1.2.x) - -The Doctrine Event Manager is a library that provides a simple event system. - -## More resources: - -* [Website](https://www.doctrine-project.org/) -* [Documentation](https://www.doctrine-project.org/projects/doctrine-event-manager/en/latest/) -* [Downloads](https://github.com/doctrine/event-manager/releases) diff --git a/vendor/doctrine/event-manager/UPGRADE.md b/vendor/doctrine/event-manager/UPGRADE.md deleted file mode 100644 index 25154ef..0000000 --- a/vendor/doctrine/event-manager/UPGRADE.md +++ /dev/null @@ -1,15 +0,0 @@ -# Upgrade to 2.0 - -## Made the `$event` parameter of `EventManager::getListeners()` mandatory - -When calling `EventManager::getListeners()` you need to specify the event that -you want to fetch the listeners for. Call `getAllListeners()` instead if you -want to access the listeners of all events. - -# Upgrade to 1.2 - -## Deprecated calling `EventManager::getListeners()` without an event name - -When calling `EventManager::getListeners()` without an event name, all -listeners were returned, keyed by event name. A new method `getAllListeners()` -has been added to provide this functionality. It should be used instead. diff --git a/vendor/doctrine/event-manager/composer.json b/vendor/doctrine/event-manager/composer.json deleted file mode 100644 index 4ea788b..0000000 --- a/vendor/doctrine/event-manager/composer.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "name": "doctrine/event-manager", - "description": "The Doctrine Event Manager is a simple PHP event system that was built to be used with the various Doctrine projects.", - "license": "MIT", - "type": "library", - "keywords": [ - "events", - "event", - "event dispatcher", - "event manager", - "event system" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - }, - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com" - } - ], - "homepage": "https://www.doctrine-project.org/projects/event-manager.html", - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.8.8", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" - }, - "conflict": { - "doctrine/common": "<2.9" - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Tests\\Common\\": "tests" - } - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "sort-packages": true - } -} diff --git a/vendor/doctrine/event-manager/psalm-baseline.xml b/vendor/doctrine/event-manager/psalm-baseline.xml deleted file mode 100644 index bc48ad8..0000000 --- a/vendor/doctrine/event-manager/psalm-baseline.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - listeners[$event])]]> - - - diff --git a/vendor/doctrine/event-manager/src/EventArgs.php b/vendor/doctrine/event-manager/src/EventArgs.php deleted file mode 100644 index eea3d8a..0000000 --- a/vendor/doctrine/event-manager/src/EventArgs.php +++ /dev/null @@ -1,37 +0,0 @@ - => - * - * @var array - */ - private array $listeners = []; - - /** - * Dispatches an event to all registered listeners. - * - * @param string $eventName The name of the event to dispatch. The name of the event is - * the name of the method that is invoked on listeners. - * @param EventArgs|null $eventArgs The event arguments to pass to the event handlers/listeners. - * If not supplied, the single empty EventArgs instance is used. - */ - public function dispatchEvent(string $eventName, EventArgs|null $eventArgs = null): void - { - if (! isset($this->listeners[$eventName])) { - return; - } - - $eventArgs ??= EventArgs::getEmptyInstance(); - - foreach ($this->listeners[$eventName] as $listener) { - $listener->$eventName($eventArgs); - } - } - - /** - * Gets the listeners of a specific event. - * - * @param string $event The name of the event. - * - * @return object[] - */ - public function getListeners(string $event): array - { - return $this->listeners[$event] ?? []; - } - - /** - * Gets all listeners keyed by event name. - * - * @return array The event listeners for the specified event, or all event listeners. - */ - public function getAllListeners(): array - { - return $this->listeners; - } - - /** - * Checks whether an event has any registered listeners. - */ - public function hasListeners(string $event): bool - { - return ! empty($this->listeners[$event]); - } - - /** - * Adds an event listener that listens on the specified events. - * - * @param string|string[] $events The event(s) to listen on. - * @param object $listener The listener object. - */ - public function addEventListener(string|array $events, object $listener): void - { - // Picks the hash code related to that listener - $hash = spl_object_hash($listener); - - foreach ((array) $events as $event) { - // Overrides listener if a previous one was associated already - // Prevents duplicate listeners on same event (same instance only) - $this->listeners[$event][$hash] = $listener; - } - } - - /** - * Removes an event listener from the specified events. - * - * @param string|string[] $events - */ - public function removeEventListener(string|array $events, object $listener): void - { - // Picks the hash code related to that listener - $hash = spl_object_hash($listener); - - foreach ((array) $events as $event) { - unset($this->listeners[$event][$hash]); - } - } - - /** - * Adds an EventSubscriber. - * - * The subscriber is asked for all the events it is interested in and added - * as a listener for these events. - */ - public function addEventSubscriber(EventSubscriber $subscriber): void - { - $this->addEventListener($subscriber->getSubscribedEvents(), $subscriber); - } - - /** - * Removes an EventSubscriber. - * - * The subscriber is asked for all the events it is interested in and removed - * as a listener for these events. - */ - public function removeEventSubscriber(EventSubscriber $subscriber): void - { - $this->removeEventListener($subscriber->getSubscribedEvents(), $subscriber); - } -} diff --git a/vendor/doctrine/event-manager/src/EventSubscriber.php b/vendor/doctrine/event-manager/src/EventSubscriber.php deleted file mode 100644 index 89cef55..0000000 --- a/vendor/doctrine/event-manager/src/EventSubscriber.php +++ /dev/null @@ -1,21 +0,0 @@ -build(); - -By default it will create an English inflector. If you want to use another language, just pass the language -you want to create an inflector for to the ``createForLanguage()`` method: - -.. code-block:: php - - use Doctrine\Inflector\InflectorFactory; - use Doctrine\Inflector\Language; - - $inflector = InflectorFactory::createForLanguage(Language::SPANISH)->build(); - -The supported languages are as follows: - -- ``Language::ENGLISH`` -- ``Language::FRENCH`` -- ``Language::NORWEGIAN_BOKMAL`` -- ``Language::PORTUGUESE`` -- ``Language::SPANISH`` -- ``Language::TURKISH`` - -If you want to manually construct the inflector instead of using a factory, you can do so like this: - -.. code-block:: php - - use Doctrine\Inflector\CachedWordInflector; - use Doctrine\Inflector\RulesetInflector; - use Doctrine\Inflector\Rules\English; - - $inflector = new Inflector( - new CachedWordInflector(new RulesetInflector( - English\Rules::getSingularRuleset() - )), - new CachedWordInflector(new RulesetInflector( - English\Rules::getPluralRuleset() - )) - ); - -Adding Languages ----------------- - -If you are interested in adding support for your language, take a look at the other languages defined in the -``Doctrine\Inflector\Rules`` namespace and the tests located in ``Doctrine\Tests\Inflector\Rules``. You can copy -one of the languages and update the rules for your language. - -Once you have done this, send a pull request to the ``doctrine/inflector`` repository with the additions. - -Custom Setup -============ - -If you want to setup custom singular and plural rules, you can configure these in the factory: - -.. code-block:: php - - use Doctrine\Inflector\InflectorFactory; - use Doctrine\Inflector\Rules\Pattern; - use Doctrine\Inflector\Rules\Patterns; - use Doctrine\Inflector\Rules\Ruleset; - use Doctrine\Inflector\Rules\Substitution; - use Doctrine\Inflector\Rules\Substitutions; - use Doctrine\Inflector\Rules\Transformation; - use Doctrine\Inflector\Rules\Transformations; - use Doctrine\Inflector\Rules\Word; - - $inflector = InflectorFactory::create() - ->withSingularRules( - new Ruleset( - new Transformations( - new Transformation(new Pattern('/^(bil)er$/i'), '\1'), - new Transformation(new Pattern('/^(inflec|contribu)tors$/i'), '\1ta') - ), - new Patterns(new Pattern('singulars')), - new Substitutions(new Substitution(new Word('spins'), new Word('spinor'))) - ) - ) - ->withPluralRules( - new Ruleset( - new Transformations( - new Transformation(new Pattern('^(bil)er$'), '\1'), - new Transformation(new Pattern('^(inflec|contribu)tors$'), '\1ta') - ), - new Patterns(new Pattern('noflect'), new Pattern('abtuse')), - new Substitutions( - new Substitution(new Word('amaze'), new Word('amazable')), - new Substitution(new Word('phone'), new Word('phonezes')) - ) - ) - ) - ->build(); - -No operation inflector ----------------------- - -The ``Doctrine\Inflector\NoopWordInflector`` may be used to configure an inflector that doesn't perform any operation for -pluralization and/or singularization. If will simply return the input as output. - -This is an implementation of the `Null Object design pattern `_. - -.. code-block:: php - - use Doctrine\Inflector\Inflector; - use Doctrine\Inflector\NoopWordInflector; - - $inflector = new Inflector(new NoopWordInflector(), new NoopWordInflector()); - -Tableize -======== - -Converts ``ModelName`` to ``model_name``: - -.. code-block:: php - - echo $inflector->tableize('ModelName'); // model_name - -Classify -======== - -Converts ``model_name`` to ``ModelName``: - -.. code-block:: php - - echo $inflector->classify('model_name'); // ModelName - -Camelize -======== - -This method uses `Classify`_ and then converts the first character to lowercase: - -.. code-block:: php - - echo $inflector->camelize('model_name'); // modelName - -Capitalize -========== - -Takes a string and capitalizes all of the words, like PHP's built-in -``ucwords`` function. This extends that behavior, however, by allowing the -word delimiters to be configured, rather than only separating on -whitespace. - -Here is an example: - -.. code-block:: php - - $string = 'top-o-the-morning to all_of_you!'; - - echo $inflector->capitalize($string); // Top-O-The-Morning To All_of_you! - - echo $inflector->capitalize($string, '-_ '); // Top-O-The-Morning To All_Of_You! - -Pluralize -========= - -Returns a word in plural form. - -.. code-block:: php - - echo $inflector->pluralize('browser'); // browsers - -Singularize -=========== - -Returns a word in singular form. - -.. code-block:: php - - echo $inflector->singularize('browsers'); // browser - -Urlize -====== - -Generate a URL friendly string from a string of text: - -.. code-block:: php - - echo $inflector->urlize('My first blog post'); // my-first-blog-post - -Unaccent -======== - -You can unaccent a string of text using the ``unaccent()`` method: - -.. code-block:: php - - echo $inflector->unaccent('año'); // ano - -Legacy API -========== - -The API present in Inflector 1.x is still available, but will be deprecated in a future release and dropped for 3.0. -Support for languages other than English is available in the 2.0 API only. - -Acknowledgements -================ - -The language rules in this library have been adapted from several different sources, including but not limited to: - -- `Ruby On Rails Inflector `_ -- `ICanBoogie Inflector `_ -- `CakePHP Inflector `_ diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php deleted file mode 100644 index 2d52908..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/CachedWordInflector.php +++ /dev/null @@ -1,24 +0,0 @@ -wordInflector = $wordInflector; - } - - public function inflect(string $word): string - { - return $this->cache[$word] ?? $this->cache[$word] = $this->wordInflector->inflect($word); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php deleted file mode 100644 index 166061d..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/GenericLanguageInflectorFactory.php +++ /dev/null @@ -1,66 +0,0 @@ -singularRulesets[] = $this->getSingularRuleset(); - $this->pluralRulesets[] = $this->getPluralRuleset(); - } - - final public function build(): Inflector - { - return new Inflector( - new CachedWordInflector(new RulesetInflector( - ...$this->singularRulesets - )), - new CachedWordInflector(new RulesetInflector( - ...$this->pluralRulesets - )) - ); - } - - final public function withSingularRules(?Ruleset $singularRules, bool $reset = false): LanguageInflectorFactory - { - if ($reset) { - $this->singularRulesets = []; - } - - if ($singularRules instanceof Ruleset) { - array_unshift($this->singularRulesets, $singularRules); - } - - return $this; - } - - final public function withPluralRules(?Ruleset $pluralRules, bool $reset = false): LanguageInflectorFactory - { - if ($reset) { - $this->pluralRulesets = []; - } - - if ($pluralRules instanceof Ruleset) { - array_unshift($this->pluralRulesets, $pluralRules); - } - - return $this; - } - - abstract protected function getSingularRuleset(): Ruleset; - - abstract protected function getPluralRuleset(): Ruleset; -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php deleted file mode 100644 index 610a4cf..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Inflector.php +++ /dev/null @@ -1,507 +0,0 @@ - 'A', - 'Ã' => 'A', - 'Â' => 'A', - 'Ã' => 'A', - 'Ä' => 'Ae', - 'Æ' => 'Ae', - 'Ã…' => 'Aa', - 'æ' => 'a', - 'Ç' => 'C', - 'È' => 'E', - 'É' => 'E', - 'Ê' => 'E', - 'Ë' => 'E', - 'ÃŒ' => 'I', - 'Ã' => 'I', - 'ÃŽ' => 'I', - 'Ã' => 'I', - 'Ñ' => 'N', - 'Ã’' => 'O', - 'Ó' => 'O', - 'Ô' => 'O', - 'Õ' => 'O', - 'Ö' => 'Oe', - 'Ù' => 'U', - 'Ú' => 'U', - 'Û' => 'U', - 'Ãœ' => 'Ue', - 'Ã' => 'Y', - 'ß' => 'ss', - 'à' => 'a', - 'á' => 'a', - 'â' => 'a', - 'ã' => 'a', - 'ä' => 'ae', - 'Ã¥' => 'aa', - 'ç' => 'c', - 'è' => 'e', - 'é' => 'e', - 'ê' => 'e', - 'ë' => 'e', - 'ì' => 'i', - 'í' => 'i', - 'î' => 'i', - 'ï' => 'i', - 'ñ' => 'n', - 'ò' => 'o', - 'ó' => 'o', - 'ô' => 'o', - 'õ' => 'o', - 'ö' => 'oe', - 'ù' => 'u', - 'ú' => 'u', - 'û' => 'u', - 'ü' => 'ue', - 'ý' => 'y', - 'ÿ' => 'y', - 'Ä€' => 'A', - 'Ä' => 'a', - 'Ä‚' => 'A', - 'ă' => 'a', - 'Ä„' => 'A', - 'Ä…' => 'a', - 'Ć' => 'C', - 'ć' => 'c', - 'Ĉ' => 'C', - 'ĉ' => 'c', - 'ÄŠ' => 'C', - 'Ä‹' => 'c', - 'ÄŒ' => 'C', - 'Ä' => 'c', - 'ÄŽ' => 'D', - 'Ä' => 'd', - 'Ä' => 'D', - 'Ä‘' => 'd', - 'Ä’' => 'E', - 'Ä“' => 'e', - 'Ä”' => 'E', - 'Ä•' => 'e', - 'Ä–' => 'E', - 'Ä—' => 'e', - 'Ę' => 'E', - 'Ä™' => 'e', - 'Äš' => 'E', - 'Ä›' => 'e', - 'Äœ' => 'G', - 'Ä' => 'g', - 'Äž' => 'G', - 'ÄŸ' => 'g', - 'Ä ' => 'G', - 'Ä¡' => 'g', - 'Ä¢' => 'G', - 'Ä£' => 'g', - 'Ĥ' => 'H', - 'Ä¥' => 'h', - 'Ħ' => 'H', - 'ħ' => 'h', - 'Ĩ' => 'I', - 'Ä©' => 'i', - 'Ī' => 'I', - 'Ä«' => 'i', - 'Ĭ' => 'I', - 'Ä­' => 'i', - 'Ä®' => 'I', - 'į' => 'i', - 'Ä°' => 'I', - 'ı' => 'i', - 'IJ' => 'IJ', - 'ij' => 'ij', - 'Ä´' => 'J', - 'ĵ' => 'j', - 'Ķ' => 'K', - 'Ä·' => 'k', - 'ĸ' => 'k', - 'Ĺ' => 'L', - 'ĺ' => 'l', - 'Ä»' => 'L', - 'ļ' => 'l', - 'Ľ' => 'L', - 'ľ' => 'l', - 'Ä¿' => 'L', - 'Å€' => 'l', - 'Å' => 'L', - 'Å‚' => 'l', - 'Ń' => 'N', - 'Å„' => 'n', - 'Å…' => 'N', - 'ņ' => 'n', - 'Ň' => 'N', - 'ň' => 'n', - 'ʼn' => 'N', - 'ÅŠ' => 'n', - 'Å‹' => 'N', - 'ÅŒ' => 'O', - 'Å' => 'o', - 'ÅŽ' => 'O', - 'Å' => 'o', - 'Å' => 'O', - 'Å‘' => 'o', - 'Å’' => 'OE', - 'Å“' => 'oe', - 'Ø' => 'O', - 'ø' => 'o', - 'Å”' => 'R', - 'Å•' => 'r', - 'Å–' => 'R', - 'Å—' => 'r', - 'Ř' => 'R', - 'Å™' => 'r', - 'Åš' => 'S', - 'Å›' => 's', - 'Åœ' => 'S', - 'Å' => 's', - 'Åž' => 'S', - 'ÅŸ' => 's', - 'Å ' => 'S', - 'Å¡' => 's', - 'Å¢' => 'T', - 'Å£' => 't', - 'Ť' => 'T', - 'Å¥' => 't', - 'Ŧ' => 'T', - 'ŧ' => 't', - 'Ũ' => 'U', - 'Å©' => 'u', - 'Ū' => 'U', - 'Å«' => 'u', - 'Ŭ' => 'U', - 'Å­' => 'u', - 'Å®' => 'U', - 'ů' => 'u', - 'Å°' => 'U', - 'ű' => 'u', - 'Ų' => 'U', - 'ų' => 'u', - 'Å´' => 'W', - 'ŵ' => 'w', - 'Ŷ' => 'Y', - 'Å·' => 'y', - 'Ÿ' => 'Y', - 'Ź' => 'Z', - 'ź' => 'z', - 'Å»' => 'Z', - 'ż' => 'z', - 'Ž' => 'Z', - 'ž' => 'z', - 'Å¿' => 's', - '€' => 'E', - '£' => '', - ]; - - /** @var WordInflector */ - private $singularizer; - - /** @var WordInflector */ - private $pluralizer; - - public function __construct(WordInflector $singularizer, WordInflector $pluralizer) - { - $this->singularizer = $singularizer; - $this->pluralizer = $pluralizer; - } - - /** - * Converts a word into the format for a Doctrine table name. Converts 'ModelName' to 'model_name'. - */ - public function tableize(string $word): string - { - $tableized = preg_replace('~(?<=\\w)([A-Z])~u', '_$1', $word); - - if ($tableized === null) { - throw new RuntimeException(sprintf( - 'preg_replace returned null for value "%s"', - $word - )); - } - - return mb_strtolower($tableized); - } - - /** - * Converts a word into the format for a Doctrine class name. Converts 'table_name' to 'TableName'. - */ - public function classify(string $word): string - { - return str_replace([' ', '_', '-'], '', ucwords($word, ' _-')); - } - - /** - * Camelizes a word. This uses the classify() method and turns the first character to lowercase. - */ - public function camelize(string $word): string - { - return lcfirst($this->classify($word)); - } - - /** - * Uppercases words with configurable delimiters between words. - * - * Takes a string and capitalizes all of the words, like PHP's built-in - * ucwords function. This extends that behavior, however, by allowing the - * word delimiters to be configured, rather than only separating on - * whitespace. - * - * Here is an example: - * - * capitalize($string); - * // Top-O-The-Morning To All_of_you! - * - * echo $inflector->capitalize($string, '-_ '); - * // Top-O-The-Morning To All_Of_You! - * ?> - * - * - * @param string $string The string to operate on. - * @param string $delimiters A list of word separators. - * - * @return string The string with all delimiter-separated words capitalized. - */ - public function capitalize(string $string, string $delimiters = " \n\t\r\0\x0B-"): string - { - return ucwords($string, $delimiters); - } - - /** - * Checks if the given string seems like it has utf8 characters in it. - * - * @param string $string The string to check for utf8 characters in. - */ - public function seemsUtf8(string $string): bool - { - for ($i = 0; $i < strlen($string); $i++) { - if (ord($string[$i]) < 0x80) { - continue; // 0bbbbbbb - } - - if ((ord($string[$i]) & 0xE0) === 0xC0) { - $n = 1; // 110bbbbb - } elseif ((ord($string[$i]) & 0xF0) === 0xE0) { - $n = 2; // 1110bbbb - } elseif ((ord($string[$i]) & 0xF8) === 0xF0) { - $n = 3; // 11110bbb - } elseif ((ord($string[$i]) & 0xFC) === 0xF8) { - $n = 4; // 111110bb - } elseif ((ord($string[$i]) & 0xFE) === 0xFC) { - $n = 5; // 1111110b - } else { - return false; // Does not match any model - } - - for ($j = 0; $j < $n; $j++) { // n bytes matching 10bbbbbb follow ? - if (++$i === strlen($string) || ((ord($string[$i]) & 0xC0) !== 0x80)) { - return false; - } - } - } - - return true; - } - - /** - * Remove any illegal characters, accents, etc. - * - * @param string $string String to unaccent - * - * @return string Unaccented string - */ - public function unaccent(string $string): string - { - if (preg_match('/[\x80-\xff]/', $string) === false) { - return $string; - } - - if ($this->seemsUtf8($string)) { - $string = strtr($string, self::ACCENTED_CHARACTERS); - } else { - $characters = []; - - // Assume ISO-8859-1 if not UTF-8 - $characters['in'] = - chr(128) - . chr(131) - . chr(138) - . chr(142) - . chr(154) - . chr(158) - . chr(159) - . chr(162) - . chr(165) - . chr(181) - . chr(192) - . chr(193) - . chr(194) - . chr(195) - . chr(196) - . chr(197) - . chr(199) - . chr(200) - . chr(201) - . chr(202) - . chr(203) - . chr(204) - . chr(205) - . chr(206) - . chr(207) - . chr(209) - . chr(210) - . chr(211) - . chr(212) - . chr(213) - . chr(214) - . chr(216) - . chr(217) - . chr(218) - . chr(219) - . chr(220) - . chr(221) - . chr(224) - . chr(225) - . chr(226) - . chr(227) - . chr(228) - . chr(229) - . chr(231) - . chr(232) - . chr(233) - . chr(234) - . chr(235) - . chr(236) - . chr(237) - . chr(238) - . chr(239) - . chr(241) - . chr(242) - . chr(243) - . chr(244) - . chr(245) - . chr(246) - . chr(248) - . chr(249) - . chr(250) - . chr(251) - . chr(252) - . chr(253) - . chr(255); - - $characters['out'] = 'EfSZszYcYuAAAAAACEEEEIIIINOOOOOOUUUUYaaaaaaceeeeiiiinoooooouuuuyy'; - - $string = strtr($string, $characters['in'], $characters['out']); - - $doubleChars = []; - - $doubleChars['in'] = [ - chr(140), - chr(156), - chr(198), - chr(208), - chr(222), - chr(223), - chr(230), - chr(240), - chr(254), - ]; - - $doubleChars['out'] = ['OE', 'oe', 'AE', 'DH', 'TH', 'ss', 'ae', 'dh', 'th']; - - $string = str_replace($doubleChars['in'], $doubleChars['out'], $string); - } - - return $string; - } - - /** - * Convert any passed string to a url friendly string. - * Converts 'My first blog post' to 'my-first-blog-post' - * - * @param string $string String to urlize. - * - * @return string Urlized string. - */ - public function urlize(string $string): string - { - // Remove all non url friendly characters with the unaccent function - $unaccented = $this->unaccent($string); - - if (function_exists('mb_strtolower')) { - $lowered = mb_strtolower($unaccented); - } else { - $lowered = strtolower($unaccented); - } - - $replacements = [ - '/\W/' => ' ', - '/([A-Z]+)([A-Z][a-z])/' => '\1_\2', - '/([a-z\d])([A-Z])/' => '\1_\2', - '/[^A-Z^a-z^0-9^\/]+/' => '-', - ]; - - $urlized = $lowered; - - foreach ($replacements as $pattern => $replacement) { - $replaced = preg_replace($pattern, $replacement, $urlized); - - if ($replaced === null) { - throw new RuntimeException(sprintf( - 'preg_replace returned null for value "%s"', - $urlized - )); - } - - $urlized = $replaced; - } - - return trim($urlized, '-'); - } - - /** - * Returns a word in singular form. - * - * @param string $word The word in plural form. - * - * @return string The word in singular form. - */ - public function singularize(string $word): string - { - return $this->singularizer->inflect($word); - } - - /** - * Returns a word in plural form. - * - * @param string $word The word in singular form. - * - * @return string The word in plural form. - */ - public function pluralize(string $word): string - { - return $this->pluralizer->inflect($word); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php deleted file mode 100644 index a0740a7..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/InflectorFactory.php +++ /dev/null @@ -1,52 +0,0 @@ -getFlippedSubstitutions() - ); - } - - public static function getPluralRuleset(): Ruleset - { - return new Ruleset( - new Transformations(...Inflectible::getPlural()), - new Patterns(...Uninflected::getPlural()), - new Substitutions(...Inflectible::getIrregular()) - ); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php deleted file mode 100644 index 02257de..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/English/Uninflected.php +++ /dev/null @@ -1,189 +0,0 @@ -getFlippedSubstitutions() - ); - } - - public static function getPluralRuleset(): Ruleset - { - return new Ruleset( - new Transformations(...Inflectible::getPlural()), - new Patterns(...Uninflected::getPlural()), - new Substitutions(...Inflectible::getIrregular()) - ); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php deleted file mode 100644 index 9747f91..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/French/Uninflected.php +++ /dev/null @@ -1,28 +0,0 @@ -getFlippedSubstitutions() - ); - } - - public static function getPluralRuleset(): Ruleset - { - return new Ruleset( - new Transformations(...Inflectible::getPlural()), - new Patterns(...Uninflected::getPlural()), - new Substitutions(...Inflectible::getIrregular()) - ); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php deleted file mode 100644 index 5d8d3b3..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/NorwegianBokmal/Uninflected.php +++ /dev/null @@ -1,30 +0,0 @@ -pattern = $pattern; - - if (isset($this->pattern[0]) && $this->pattern[0] === '/') { - $this->regex = $this->pattern; - } else { - $this->regex = '/' . $this->pattern . '/i'; - } - } - - public function getPattern(): string - { - return $this->pattern; - } - - public function getRegex(): string - { - return $this->regex; - } - - public function matches(string $word): bool - { - return preg_match($this->getRegex(), $word) === 1; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php deleted file mode 100644 index e8d45cb..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Patterns.php +++ /dev/null @@ -1,34 +0,0 @@ -patterns = $patterns; - - $patterns = array_map(static function (Pattern $pattern): string { - return $pattern->getPattern(); - }, $this->patterns); - - $this->regex = '/^(?:' . implode('|', $patterns) . ')$/i'; - } - - public function matches(string $word): bool - { - return preg_match($this->regex, $word, $regs) === 1; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php deleted file mode 100644 index 0d41fe7..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Inflectible.php +++ /dev/null @@ -1,98 +0,0 @@ -getFlippedSubstitutions() - ); - } - - public static function getPluralRuleset(): Ruleset - { - return new Ruleset( - new Transformations(...Inflectible::getPlural()), - new Patterns(...Uninflected::getPlural()), - new Substitutions(...Inflectible::getIrregular()) - ); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php deleted file mode 100644 index b8e988f..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Portuguese/Uninflected.php +++ /dev/null @@ -1,32 +0,0 @@ -regular = $regular; - $this->uninflected = $uninflected; - $this->irregular = $irregular; - } - - public function getRegular(): Transformations - { - return $this->regular; - } - - public function getUninflected(): Patterns - { - return $this->uninflected; - } - - public function getIrregular(): Substitutions - { - return $this->irregular; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php deleted file mode 100644 index 9129460..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Inflectible.php +++ /dev/null @@ -1,47 +0,0 @@ -getFlippedSubstitutions() - ); - } - - public static function getPluralRuleset(): Ruleset - { - return new Ruleset( - new Transformations(...Inflectible::getPlural()), - new Patterns(...Uninflected::getPlural()), - new Substitutions(...Inflectible::getIrregular()) - ); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php deleted file mode 100644 index c26ebe9..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Spanish/Uninflected.php +++ /dev/null @@ -1,30 +0,0 @@ -from = $from; - $this->to = $to; - } - - public function getFrom(): Word - { - return $this->from; - } - - public function getTo(): Word - { - return $this->to; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php deleted file mode 100644 index 17ee296..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Substitutions.php +++ /dev/null @@ -1,57 +0,0 @@ -substitutions[$substitution->getFrom()->getWord()] = $substitution; - } - } - - public function getFlippedSubstitutions(): Substitutions - { - $substitutions = []; - - foreach ($this->substitutions as $substitution) { - $substitutions[] = new Substitution( - $substitution->getTo(), - $substitution->getFrom() - ); - } - - return new Substitutions(...$substitutions); - } - - public function inflect(string $word): string - { - $lowerWord = strtolower($word); - - if (isset($this->substitutions[$lowerWord])) { - $firstLetterUppercase = $lowerWord[0] !== $word[0]; - - $toWord = $this->substitutions[$lowerWord]->getTo()->getWord(); - - if ($firstLetterUppercase) { - return strtoupper($toWord[0]) . substr($toWord, 1); - } - - return $toWord; - } - - return $word; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php deleted file mode 100644 index 30dcd59..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformation.php +++ /dev/null @@ -1,39 +0,0 @@ -pattern = $pattern; - $this->replacement = $replacement; - } - - public function getPattern(): Pattern - { - return $this->pattern; - } - - public function getReplacement(): string - { - return $this->replacement; - } - - public function inflect(string $word): string - { - return (string) preg_replace($this->pattern->getRegex(), $this->replacement, $word); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php deleted file mode 100644 index b6a48fa..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Transformations.php +++ /dev/null @@ -1,29 +0,0 @@ -transformations = $transformations; - } - - public function inflect(string $word): string - { - foreach ($this->transformations as $transformation) { - if ($transformation->getPattern()->matches($word)) { - return $transformation->inflect($word); - } - } - - return $word; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php deleted file mode 100644 index a2bda0d..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Inflectible.php +++ /dev/null @@ -1,34 +0,0 @@ -getFlippedSubstitutions() - ); - } - - public static function getPluralRuleset(): Ruleset - { - return new Ruleset( - new Transformations(...Inflectible::getPlural()), - new Patterns(...Uninflected::getPlural()), - new Substitutions(...Inflectible::getIrregular()) - ); - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php deleted file mode 100644 index ec1c37d..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/Rules/Turkish/Uninflected.php +++ /dev/null @@ -1,30 +0,0 @@ -word = $word; - } - - public function getWord(): string - { - return $this->word; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php deleted file mode 100644 index 12b2ed5..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/RulesetInflector.php +++ /dev/null @@ -1,56 +0,0 @@ -rulesets = array_merge([$ruleset], $rulesets); - } - - public function inflect(string $word): string - { - if ($word === '') { - return ''; - } - - foreach ($this->rulesets as $ruleset) { - if ($ruleset->getUninflected()->matches($word)) { - return $word; - } - - $inflected = $ruleset->getIrregular()->inflect($word); - - if ($inflected !== $word) { - return $inflected; - } - - $inflected = $ruleset->getRegular()->inflect($word); - - if ($inflected !== $word) { - return $inflected; - } - } - - return $word; - } -} diff --git a/vendor/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php b/vendor/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php deleted file mode 100644 index b88b1d6..0000000 --- a/vendor/doctrine/inflector/lib/Doctrine/Inflector/WordInflector.php +++ /dev/null @@ -1,10 +0,0 @@ -instantiate(\My\ClassName\Here::class); -``` - -## Contributing - -Please read the [CONTRIBUTING.md](CONTRIBUTING.md) contents if you wish to help out! - -## Credits - -This library was migrated from [ocramius/instantiator](https://github.com/Ocramius/Instantiator), which -has been donated to the doctrine organization, and which is now deprecated in favour of this package. diff --git a/vendor/doctrine/instantiator/composer.json b/vendor/doctrine/instantiator/composer.json deleted file mode 100644 index 179145e..0000000 --- a/vendor/doctrine/instantiator/composer.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "name": "doctrine/instantiator", - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "type": "library", - "license": "MIT", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "instantiate", - "constructor" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "require": { - "php": "^8.1" - }, - "require-dev": { - "ext-phar": "*", - "ext-pdo": "*", - "doctrine/coding-standard": "^11", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "autoload-dev": { - "psr-0": { - "DoctrineTest\\InstantiatorPerformance\\": "tests", - "DoctrineTest\\InstantiatorTest\\": "tests", - "DoctrineTest\\InstantiatorTestAsset\\": "tests" - } - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - } - } -} diff --git a/vendor/doctrine/instantiator/docs/en/index.rst b/vendor/doctrine/instantiator/docs/en/index.rst deleted file mode 100644 index 0c85da0..0000000 --- a/vendor/doctrine/instantiator/docs/en/index.rst +++ /dev/null @@ -1,68 +0,0 @@ -Introduction -============ - -This library provides a way of avoiding usage of constructors when instantiating PHP classes. - -Installation -============ - -The suggested installation method is via `composer`_: - -.. code-block:: console - - $ composer require doctrine/instantiator - -Usage -===== - -The instantiator is able to create new instances of any class without -using the constructor or any API of the class itself: - -.. code-block:: php - - instantiate(User::class); - -Contributing -============ - -- Follow the `Doctrine Coding Standard`_ -- The project will follow strict `object calisthenics`_ -- Any contribution must provide tests for additional introduced - conditions -- Any un-confirmed issue needs a failing test case before being - accepted -- Pull requests must be sent from a new hotfix/feature branch, not from - ``master``. - -Testing -======= - -The PHPUnit version to be used is the one installed as a dev- dependency -via composer: - -.. code-block:: console - - $ ./vendor/bin/phpunit - -Accepted coverage for new contributions is 80%. Any contribution not -satisfying this requirement won’t be merged. - -Credits -======= - -This library was migrated from `ocramius/instantiator`_, which has been -donated to the doctrine organization, and which is now deprecated in -favour of this package. - -.. _composer: https://getcomposer.org/ -.. _CONTRIBUTING.md: CONTRIBUTING.md -.. _ocramius/instantiator: https://github.com/Ocramius/Instantiator -.. _Doctrine Coding Standard: https://github.com/doctrine/coding-standard -.. _object calisthenics: http://www.slideshare.net/guilhermeblanco/object-calisthenics-applied-to-php diff --git a/vendor/doctrine/instantiator/docs/en/sidebar.rst b/vendor/doctrine/instantiator/docs/en/sidebar.rst deleted file mode 100644 index 0c36479..0000000 --- a/vendor/doctrine/instantiator/docs/en/sidebar.rst +++ /dev/null @@ -1,4 +0,0 @@ -.. toctree:: - :depth: 3 - - index diff --git a/vendor/doctrine/instantiator/psalm.xml b/vendor/doctrine/instantiator/psalm.xml deleted file mode 100644 index e9b622b..0000000 --- a/vendor/doctrine/instantiator/psalm.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php deleted file mode 100644 index 1e59192..0000000 --- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/ExceptionInterface.php +++ /dev/null @@ -1,14 +0,0 @@ - $reflectionClass - * - * @template T of object - */ - public static function fromAbstractClass(ReflectionClass $reflectionClass): self - { - return new self(sprintf( - 'The provided class "%s" is abstract, and cannot be instantiated', - $reflectionClass->getName(), - )); - } - - public static function fromEnum(string $className): self - { - return new self(sprintf( - 'The provided class "%s" is an enum, and cannot be instantiated', - $className, - )); - } -} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php deleted file mode 100644 index 4f70ded..0000000 --- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Exception/UnexpectedValueException.php +++ /dev/null @@ -1,61 +0,0 @@ - $reflectionClass - * - * @template T of object - */ - public static function fromSerializationTriggeredException( - ReflectionClass $reflectionClass, - Exception $exception, - ): self { - return new self( - sprintf( - 'An exception was raised while trying to instantiate an instance of "%s" via un-serialization', - $reflectionClass->getName(), - ), - 0, - $exception, - ); - } - - /** - * @phpstan-param ReflectionClass $reflectionClass - * - * @template T of object - */ - public static function fromUncleanUnSerialization( - ReflectionClass $reflectionClass, - string $errorString, - int $errorCode, - string $errorFile, - int $errorLine, - ): self { - return new self( - sprintf( - 'Could not produce an instance of "%s" via un-serialization, since an error was triggered ' - . 'in file "%s" at line "%d"', - $reflectionClass->getName(), - $errorFile, - $errorLine, - ), - 0, - new Exception($errorString, $errorCode), - ); - } -} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php deleted file mode 100644 index f803f89..0000000 --- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/Instantiator.php +++ /dev/null @@ -1,255 +0,0 @@ - $className - * - * @phpstan-return T - * - * @throws ExceptionInterface - * - * @template T of object - */ - public function instantiate(string $className): object - { - if (isset(self::$cachedCloneables[$className])) { - /** @phpstan-var T */ - $cachedCloneable = self::$cachedCloneables[$className]; - - return clone $cachedCloneable; - } - - if (isset(self::$cachedInstantiators[$className])) { - $factory = self::$cachedInstantiators[$className]; - - return $factory(); - } - - return $this->buildAndCacheFromFactory($className); - } - - /** - * Builds the requested object and caches it in static properties for performance - * - * @phpstan-param class-string $className - * - * @phpstan-return T - * - * @template T of object - */ - private function buildAndCacheFromFactory(string $className): object - { - $factory = self::$cachedInstantiators[$className] = $this->buildFactory($className); - $instance = $factory(); - - if ($this->isSafeToClone(new ReflectionClass($instance))) { - self::$cachedCloneables[$className] = clone $instance; - } - - return $instance; - } - - /** - * Builds a callable capable of instantiating the given $className without - * invoking its constructor. - * - * @phpstan-param class-string $className - * - * @phpstan-return callable(): T - * - * @throws InvalidArgumentException - * @throws UnexpectedValueException - * @throws ReflectionException - * - * @template T of object - */ - private function buildFactory(string $className): callable - { - $reflectionClass = $this->getReflectionClass($className); - - if ($this->isInstantiableViaReflection($reflectionClass)) { - return [$reflectionClass, 'newInstanceWithoutConstructor']; - } - - $serializedString = sprintf( - '%s:%d:"%s":0:{}', - is_subclass_of($className, Serializable::class) ? self::SERIALIZATION_FORMAT_USE_UNSERIALIZER : self::SERIALIZATION_FORMAT_AVOID_UNSERIALIZER, - strlen($className), - $className, - ); - - $this->checkIfUnSerializationIsSupported($reflectionClass, $serializedString); - - return static fn () => unserialize($serializedString); - } - - /** - * @phpstan-param class-string $className - * - * @phpstan-return ReflectionClass - * - * @throws InvalidArgumentException - * @throws ReflectionException - * - * @template T of object - */ - private function getReflectionClass(string $className): ReflectionClass - { - if (! class_exists($className)) { - throw InvalidArgumentException::fromNonExistingClass($className); - } - - if (enum_exists($className, false)) { - throw InvalidArgumentException::fromEnum($className); - } - - $reflection = new ReflectionClass($className); - - if ($reflection->isAbstract()) { - throw InvalidArgumentException::fromAbstractClass($reflection); - } - - return $reflection; - } - - /** - * @phpstan-param ReflectionClass $reflectionClass - * - * @throws UnexpectedValueException - * - * @template T of object - */ - private function checkIfUnSerializationIsSupported(ReflectionClass $reflectionClass, string $serializedString): void - { - set_error_handler(static function (int $code, string $message, string $file, int $line) use ($reflectionClass, &$error): bool { - $error = UnexpectedValueException::fromUncleanUnSerialization( - $reflectionClass, - $message, - $code, - $file, - $line, - ); - - return true; - }); - - try { - $this->attemptInstantiationViaUnSerialization($reflectionClass, $serializedString); - } finally { - restore_error_handler(); - } - - if ($error) { - throw $error; - } - } - - /** - * @phpstan-param ReflectionClass $reflectionClass - * - * @throws UnexpectedValueException - * - * @template T of object - */ - private function attemptInstantiationViaUnSerialization(ReflectionClass $reflectionClass, string $serializedString): void - { - try { - unserialize($serializedString); - } catch (Exception $exception) { - throw UnexpectedValueException::fromSerializationTriggeredException($reflectionClass, $exception); - } - } - - /** - * @phpstan-param ReflectionClass $reflectionClass - * - * @template T of object - */ - private function isInstantiableViaReflection(ReflectionClass $reflectionClass): bool - { - return ! ($this->hasInternalAncestors($reflectionClass) && $reflectionClass->isFinal()); - } - - /** - * Verifies whether the given class is to be considered internal - * - * @phpstan-param ReflectionClass $reflectionClass - * - * @template T of object - */ - private function hasInternalAncestors(ReflectionClass $reflectionClass): bool - { - do { - if ($reflectionClass->isInternal()) { - return true; - } - - $reflectionClass = $reflectionClass->getParentClass(); - } while ($reflectionClass); - - return false; - } - - /** - * Checks if a class is cloneable - * - * Classes implementing `__clone` cannot be safely cloned, as that may cause side-effects. - * - * @phpstan-param ReflectionClass $reflectionClass - * - * @template T of object - */ - private function isSafeToClone(ReflectionClass $reflectionClass): bool - { - return $reflectionClass->isCloneable() - && ! $reflectionClass->hasMethod('__clone') - && ! $reflectionClass->isSubclassOf(ArrayIterator::class); - } -} diff --git a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php b/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php deleted file mode 100644 index c6ebe35..0000000 --- a/vendor/doctrine/instantiator/src/Doctrine/Instantiator/InstantiatorInterface.php +++ /dev/null @@ -1,24 +0,0 @@ - $className - * - * @phpstan-return T - * - * @throws ExceptionInterface - * - * @template T of object - */ - public function instantiate(string $className): object; -} diff --git a/vendor/doctrine/lexer/README.md b/vendor/doctrine/lexer/README.md deleted file mode 100644 index 784f2a2..0000000 --- a/vendor/doctrine/lexer/README.md +++ /dev/null @@ -1,9 +0,0 @@ -# Doctrine Lexer - -[![Build Status](https://github.com/doctrine/lexer/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/lexer/actions) - -Base library for a lexer that can be used in Top-Down, Recursive Descent Parsers. - -This lexer is used in Doctrine Annotations and in Doctrine ORM (DQL). - -https://www.doctrine-project.org/projects/lexer.html diff --git a/vendor/doctrine/lexer/UPGRADE.md b/vendor/doctrine/lexer/UPGRADE.md deleted file mode 100644 index 1933fcb..0000000 --- a/vendor/doctrine/lexer/UPGRADE.md +++ /dev/null @@ -1,22 +0,0 @@ -Note about upgrading: Doctrine uses static and runtime mechanisms to raise -awareness about deprecated code. - -- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or - Static Analysis tools (like Psalm, phpstan) -- Use of our low-overhead runtime deprecation API, details: - https://github.com/doctrine/deprecations/ - -# Upgrade to 3.0.0 - -`Doctrine\Common\Lexer\Token` no longer implements `ArrayAccess`. -Parameter type declarations have been added to -`Doctrine\Common\Lexer\AbstractLexer` and `Doctrine\Common\Lexer\Token`. -You should add both parameter type declarations and return type declarations to -your lexers, based on the `@return` phpdoc. - -# Upgrade to 2.0.0 - -`AbstractLexer::glimpse()` and `AbstractLexer::peek()` now return -instances of `Doctrine\Common\Lexer\Token`, which is an array-like class -Using it as an array is deprecated in favor of using properties of that class. -Using `count()` on it is deprecated with no replacement. diff --git a/vendor/doctrine/lexer/composer.json b/vendor/doctrine/lexer/composer.json deleted file mode 100644 index 995dafa..0000000 --- a/vendor/doctrine/lexer/composer.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "name": "doctrine/lexer", - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "license": "MIT", - "type": "library", - "keywords": [ - "php", - "parser", - "lexer", - "annotations", - "docblock" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.21" - }, - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Tests\\Common\\Lexer\\": "tests" - } - }, - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "sort-packages": true - } -} diff --git a/vendor/doctrine/lexer/src/AbstractLexer.php b/vendor/doctrine/lexer/src/AbstractLexer.php deleted file mode 100644 index 2436885..0000000 --- a/vendor/doctrine/lexer/src/AbstractLexer.php +++ /dev/null @@ -1,328 +0,0 @@ -> - */ - private array $tokens = []; - - /** - * Current lexer position in input string. - */ - private int $position = 0; - - /** - * Current peek of current lexer position. - */ - private int $peek = 0; - - /** - * The next token in the input. - * - * @var Token|null - */ - public Token|null $lookahead; - - /** - * The last matched/seen token. - * - * @var Token|null - */ - public Token|null $token; - - /** - * Composed regex for input parsing. - * - * @var non-empty-string|null - */ - private string|null $regex = null; - - /** - * Sets the input data to be tokenized. - * - * The Lexer is immediately reset and the new input tokenized. - * Any unprocessed tokens from any previous input are lost. - * - * @param string $input The input to be tokenized. - * - * @return void - */ - public function setInput(string $input) - { - $this->input = $input; - $this->tokens = []; - - $this->reset(); - $this->scan($input); - } - - /** - * Resets the lexer. - * - * @return void - */ - public function reset() - { - $this->lookahead = null; - $this->token = null; - $this->peek = 0; - $this->position = 0; - } - - /** - * Resets the peek pointer to 0. - * - * @return void - */ - public function resetPeek() - { - $this->peek = 0; - } - - /** - * Resets the lexer position on the input to the given position. - * - * @param int $position Position to place the lexical scanner. - * - * @return void - */ - public function resetPosition(int $position = 0) - { - $this->position = $position; - } - - /** - * Retrieve the original lexer's input until a given position. - * - * @return string - */ - public function getInputUntilPosition(int $position) - { - return substr($this->input, 0, $position); - } - - /** - * Checks whether a given token matches the current lookahead. - * - * @param T $type - * - * @return bool - * - * @psalm-assert-if-true !=null $this->lookahead - */ - public function isNextToken(int|string|UnitEnum $type) - { - return $this->lookahead !== null && $this->lookahead->isA($type); - } - - /** - * Checks whether any of the given tokens matches the current lookahead. - * - * @param list $types - * - * @return bool - * - * @psalm-assert-if-true !=null $this->lookahead - */ - public function isNextTokenAny(array $types) - { - return $this->lookahead !== null && $this->lookahead->isA(...$types); - } - - /** - * Moves to the next token in the input string. - * - * @return bool - * - * @psalm-assert-if-true !null $this->lookahead - */ - public function moveNext() - { - $this->peek = 0; - $this->token = $this->lookahead; - $this->lookahead = isset($this->tokens[$this->position]) - ? $this->tokens[$this->position++] : null; - - return $this->lookahead !== null; - } - - /** - * Tells the lexer to skip input tokens until it sees a token with the given value. - * - * @param T $type The token type to skip until. - * - * @return void - */ - public function skipUntil(int|string|UnitEnum $type) - { - while ($this->lookahead !== null && ! $this->lookahead->isA($type)) { - $this->moveNext(); - } - } - - /** - * Checks if given value is identical to the given token. - * - * @return bool - */ - public function isA(string $value, int|string|UnitEnum $token) - { - return $this->getType($value) === $token; - } - - /** - * Moves the lookahead token forward. - * - * @return Token|null The next token or NULL if there are no more tokens ahead. - */ - public function peek() - { - if (isset($this->tokens[$this->position + $this->peek])) { - return $this->tokens[$this->position + $this->peek++]; - } - - return null; - } - - /** - * Peeks at the next token, returns it and immediately resets the peek. - * - * @return Token|null The next token or NULL if there are no more tokens ahead. - */ - public function glimpse() - { - $peek = $this->peek(); - $this->peek = 0; - - return $peek; - } - - /** - * Scans the input string for tokens. - * - * @param string $input A query string. - * - * @return void - */ - protected function scan(string $input) - { - if (! isset($this->regex)) { - $this->regex = sprintf( - '/(%s)|%s/%s', - implode(')|(', $this->getCatchablePatterns()), - implode('|', $this->getNonCatchablePatterns()), - $this->getModifiers(), - ); - } - - $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_OFFSET_CAPTURE; - $matches = preg_split($this->regex, $input, -1, $flags); - - if ($matches === false) { - // Work around https://bugs.php.net/78122 - $matches = [[$input, 0]]; - } - - foreach ($matches as $match) { - // Must remain before 'value' assignment since it can change content - $firstMatch = $match[0]; - $type = $this->getType($firstMatch); - - $this->tokens[] = new Token( - $firstMatch, - $type, - $match[1], - ); - } - } - - /** - * Gets the literal for a given token. - * - * @param T $token - * - * @return int|string - */ - public function getLiteral(int|string|UnitEnum $token) - { - if ($token instanceof UnitEnum) { - return $token::class . '::' . $token->name; - } - - $className = static::class; - - $reflClass = new ReflectionClass($className); - $constants = $reflClass->getConstants(); - - foreach ($constants as $name => $value) { - if ($value === $token) { - return $className . '::' . $name; - } - } - - return $token; - } - - /** - * Regex modifiers - * - * @return string - */ - protected function getModifiers() - { - return 'iu'; - } - - /** - * Lexical catchable patterns. - * - * @return string[] - */ - abstract protected function getCatchablePatterns(); - - /** - * Lexical non-catchable patterns. - * - * @return string[] - */ - abstract protected function getNonCatchablePatterns(); - - /** - * Retrieve token type. Also processes the token value if necessary. - * - * @return T|null - * - * @param-out V $value - */ - abstract protected function getType(string &$value); -} diff --git a/vendor/doctrine/lexer/src/Token.php b/vendor/doctrine/lexer/src/Token.php deleted file mode 100644 index b6df694..0000000 --- a/vendor/doctrine/lexer/src/Token.php +++ /dev/null @@ -1,56 +0,0 @@ -value = $value; - $this->type = $type; - $this->position = $position; - } - - /** @param T ...$types */ - public function isA(...$types): bool - { - return in_array($this->type, $types, true); - } -} diff --git a/vendor/doctrine/migrations/README.md b/vendor/doctrine/migrations/README.md deleted file mode 100644 index 91a9f65..0000000 --- a/vendor/doctrine/migrations/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Doctrine Migrations - -[![Build Status](https://github.com/doctrine/migrations/workflows/Continuous%20Integration/badge.svg)](https://github.com/doctrine/migrations/actions) -[![Code Coverage](https://codecov.io/gh/doctrine/migrations/branch/3.1.x/graph/badge.svg)](https://codecov.io/gh/doctrine/migrations/branch/3.1.x) -[![Packagist Downloads](https://img.shields.io/packagist/dm/doctrine/migrations)](https://packagist.org/packages/doctrine/migrations) -[![Packagist Version](https://img.shields.io/packagist/v/doctrine/migrations)](https://packagist.org/packages/doctrine/migrations) -[![GitHub license](https://img.shields.io/github/license/doctrine/migrations)](LICENSE) - -## Documentation - -All available documentation can be found [here](https://www.doctrine-project.org/projects/migrations.html). diff --git a/vendor/doctrine/migrations/UPGRADE.md b/vendor/doctrine/migrations/UPGRADE.md deleted file mode 100644 index 728c607..0000000 --- a/vendor/doctrine/migrations/UPGRADE.md +++ /dev/null @@ -1,302 +0,0 @@ -# Upgrade to 3.6 - -## Console -- The `--all-or-nothing` option for `migrations:migrate` does not accept a value anymore, and passing it a - value will generate a deprecation. Specifying `--all-or-nothing` will wrap all the migrations to be - executed into a single transaction, regardless of the specified configuration. - - - -# Upgrade to 3.1 - -- The "version" is the FQCN of the migration class (existing entries in the migrations table will be automatically updated). -- `MigrationsEventArgs` and `MigrationsVersionEventArgs` expose different API, -please refer to the [Code BC breaks](#code-bc-breaks) section. - -## Console -- Console output changed. The commands use a different output style. If you were relying on specific output, - please update your scripts. - Console output is not covered by the BC promise, so please try not to rely on specific a output. - Different levels of verbosity are available now (`-v`, `-vv` and `-vvv` ). -- The `--show-versions` option from `migrations:status` command has been removed, - use `migrations:list` instead. -- The `--write-sql` option for `migrations:migrate` and `migrations:execute` does not imply dry-run anymore, -use the `--dry-run` parameter instead. -- The `--db` option has been renamed to `--conn`. - -## Migrations table - -- The migrations table now has a new column named `execution_time`. -- Running the `migrations:migrate` or `migrations:execute` command will automatically upgrade the migration -table structure; a dedicated `migrations:sync-metadata-storage` command is available to sync manually the migrations table. - -## Migration template - -- The `` placeholder has been replaced by the `` placeholder. - -## Configuration files - -*migrations.php Before* -```php - 'My Project Migrations', - 'migrations_namespace' => 'MyProject\Migrations', - 'table_name' => 'doctrine_migration_versions', - 'column_name' => 'version', - 'column_length' => 14, - 'executed_at_column_name' => 'executed_at', - 'migrations_directory' => '/data/doctrine/migrations-docs-example/lib/MyProject/Migrations', - 'all_or_nothing' => true, - 'check_database_platform' => true, -]; -``` -*migrations.php After* - -```php - [ - 'table_name' => 'doctrine_migration_versions', - 'version_column_name' => 'version', - 'version_column_length' => 191, - 'executed_at_column_name' => 'executed_at', - 'execution_time_column_name' => 'execution_time', - ], - - 'migrations_paths' => [ - 'MyProject\Migrations' => '/data/doctrine/migrations/lib/MyProject/Migrations', - 'MyProject\Component\Migrations' => './Component/MyProject/Migrations', - ], - - 'all_or_nothing' => true, - 'check_database_platform' => true, -]; -``` - -Files in XML, YAML or JSON also changed in a similar way. Please refer to the official documentation for more details. - -Note: the `name` property has been removed. - -Note: the option in `table_storage` needs to be updated only if you have changed the metadata table settings -by using v2 options such as `table_name`, `column_name`, `column_length` or `executed_at_column_name`. If you did not change -those settings, it is recommended to not provide the options and let doctrine figure out the best settings. - -## Code BC breaks - -Most of the code is protected by the `@internal` declaration and in a very rare cases you might have dealt with the -internals of this library. - -The most important BC breaks are in the `Doctrine\Migrations\Configuration\Configuration` class and in the helper -system that now has been replaced by the `Doctrine\Migrations\DependencyFactory` functionalities. - -Here is a list of the most important changes: - -- Namespace `Doctrine\Migrations\Configuration\Configuration` - - CHANGED: Class `Doctrine\Migrations\Configuration\Configuration` became final - - REMOVED: Constant `Doctrine\Migrations\Configuration\Configuration::VERSION_FORMAT` was removed, there is not more limitation on the version format - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#__construct()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setName()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getName()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getConnection()` was removed, - use `Doctrine\Migrations\DependencyFactory#getConnection()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setMigrationsTableName()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#setMetadataStorageConfiguration` with an instance of `Doctrine\Migrations\Metadata\Storage\MetadataStorageConfiguration` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrationsTableName()` was removed, - use `Doctrine\Migrations\Metadata\Storage\MetadataStorageConfiguration#getMetadataStorageConfiguration` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setMigrationsColumnName()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#setMetadataStorageConfiguration` with an instance of `Doctrine\Migrations\Metadata\Storage\MetadataStorageConfiguration` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrationsColumnName()` was removed, - use `Doctrine\Migrations\Metadata\Storage\MetadataStorageConfiguration#getMetadataStorageConfiguration` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getQuotedMigrationsColumnName()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setMigrationsColumnLength()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#setMetadataStorageConfiguration` with an instance of `Doctrine\Migrations\Metadata\Storage\MetadataStorageConfiguration` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrationsColumnLength()` was removed, - use `Doctrine\Migrations\Metadata\Storage\MetadataStorageConfiguration#getMetadataStorageConfiguration` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setMigrationsExecutedAtColumnName()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#setMetadataStorageConfiguration` with an instance of `Doctrine\Migrations\Metadata\Storage\MetadataStorageConfiguration` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrationsExecutedAtColumnName()` was removed, - use `Doctrine\Migrations\Metadata\Storage\MetadataStorageConfiguration#getMetadataStorageConfiguration` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getQuotedMigrationsExecutedAtColumnName()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setMigrationsDirectory()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#addMigrationsDirectory()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrationsDirectory()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#getMigrationDirectories()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setMigrationsNamespace()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#addMigrationsDirectory()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrationsNamespace()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#getMigrationDirectories()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setMigrationsFinder()` was removed, - use the dependency factory instead - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrationsFinder()` was removed, - use the dependency factory instead - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#hasVersionMigrated()` was removed, - use the dependency factory instead - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getVersionData()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#resolveVersionAlias()` was removed, - use `Doctrine\Migrations\Version\AliasResolver#resolveVersionAlias()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#isMigrationTableCreated()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#createMigrationTable()` was removed, - use `Doctrine\Migrations\Metadata\Storage\MetadataStorage#ensureInitialized()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getDateTime()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#generateVersionNumber()` was removed, - use `Doctrine\Migrations\Generator\ClassNameGenerator#generateClassName()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#connect()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#dispatchMigrationEvent()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#dispatchVersionEvent()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#dispatchEvent()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getNumberOfExecutedMigrations()` was removed, - use `Doctrine\Migrations\DependencyFactory#getMetadataStorage()->getExecutedMigrations()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getNumberOfAvailableMigrations()` was removed, - use `Doctrine\Migrations\DependencyFactory#getMigrationRepository()->getMigrations()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getLatestVersion()` was removed, - use `Doctrine\Migrations\Version\AliasResolver#resolveVersionAlias()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigratedVersions()` was removed, - use `Doctrine\Migrations\DependencyFactory#getMetadataStorage()->getExecutedMigrations()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getAvailableVersions()` was removed - use `Doctrine\Migrations\DependencyFactory#getMigrationRepository()->getMigrations()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getCurrentVersion()` was removed, - use `Doctrine\Migrations\Version\AliasResolver#resolveVersionAlias()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#registerMigrationsFromDirectory()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#addMigrationsDirectory()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#registerMigration()` was removed, - use `Doctrine\Migrations\Configuration\Configuration#addMigrationClass()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#registerMigrations()` was removed - use `Doctrine\Migrations\Configuration\Configuration#addMigrationClass()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrations()` was removed, - use `Doctrine\Migrations\DependencyFactory#getMigrationRepository()->getMigrations()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getVersion()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getMigrationsToExecute()` was removed, - use `Doctrine\Migrations\Version\MigrationPlanCalculator#getPlanUntilVersion()` to create a migration plan - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getPrevVersion()` was removed, - use `Doctrine\Migrations\Version\AliasResolver#resolveVersionAlias()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getNextVersion()` was removed, - use `Doctrine\Migrations\Version\AliasResolver#resolveVersionAlias()` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getRelativeVersion()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getDeltaVersion()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#setOutputWriter()` was removed, - set the `Psr\Log\LoggerInterface` service in `Doctrine\Migrations\DependencyFactory` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getOutputWriter()` was removed, - get the `Psr\Log\LoggerInterface` service from `Doctrine\Migrations\DependencyFactory` - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getQueryWriter()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#getDependencyFactory()` was removed - - REMOVED: Method `Doctrine\Migrations\Configuration\Configuration#validate()` was removed - - Namespace `Doctrine\Migrations\Configuration\Connection\Loader\Exception` - - REMOVED: Class `Doctrine\Migrations\Configuration\Connection\Loader\Exception\LoaderException` has been deleted - - REMOVED: Class `Doctrine\Migrations\Configuration\Connection\Loader\Exception\InvalidConfiguration` has been deleted - - Namespace `Doctrine\Migrations\Configuration\Exception` - - REMOVED: Class `Doctrine\Migrations\Configuration\Exception\ParameterIncompatibleWithFinder` has been deleted - - REMOVED: Class `Doctrine\Migrations\Configuration\Exception\InvalidConfigurationKey` has been deleted - - REMOVED: Class `Doctrine\Migrations\Configuration\Exception\MigrationsNamespaceRequired` has been deleted - - REMOVED: Class `Doctrine\Migrations\Configuration\Exception\XmlNotValid` has been deleted - - REMOVED: Class `Doctrine\Migrations\Configuration\Exception\YamlNotAvailable` has been deleted - - REMOVED: Class `Doctrine\Migrations\Configuration\Exception\FileAlreadyLoaded` has been deleted - - REMOVED: Class `Doctrine\Migrations\Configuration\Exception\JsonNotValid` has been deleted - - REMOVED: Class `Doctrine\Migrations\Configuration\Exception\YamlNotValid` has been deleted - - CHANGED: The number of required arguments for `Doctrine\Migrations\Configuration\Exception\FileNotFound::new()` increased from 0 to 1 - - Namespace `Doctrine\Migrations\Event\MigrationsEventArgs` - - CHANGED: Class `Doctrine\Migrations\Event\MigrationsEventArgs` became final - - REMOVED: Method `Doctrine\Migrations\Event\MigrationsEventArgs#getConfiguration()` was removed - - REMOVED: Method `Doctrine\Migrations\Event\MigrationsEventArgs#getDirection()` was removed, - use `Doctrine\Migrations\Event\MigrationsEventArgs#getPlan()` - - REMOVED: Method `Doctrine\Migrations\Event\MigrationsEventArgs#isDryRun()` was removed, - use `Doctrine\Migrations\Event\MigrationsEventArgs#getMigratorConfiguration()` - - CHANGED: `Doctrine\Migrations\Event\MigrationsEventArgs#__construct()` arguments have been updated - - Namespace `Doctrine\Migrations\Event\MigrationsVersionEventArgs` - - CHANGED: Class `Doctrine\Migrations\Event\MigrationsVersionEventArgs` became final - - REMOVED: Method `Doctrine\Migrations\Event\MigrationsVersionEventArgs#getVersion()` was removed - use `Doctrine\Migrations\Event\MigrationsEventArgs#getPlan()` - - Namespace `Doctrine\Migrations\Finder` - - REMOVED: These ancestors of `Doctrine\Migrations\Finder\RecursiveRegexFinder` have been removed: ["Doctrine\\Migrations\\Finder\\MigrationDeepFinder"] - - REMOVED: Class `Doctrine\Migrations\Finder\MigrationDeepFinder` has been deleted - - Namespace `Doctrine\Migrations\Tools\Console\Command` - - CHANGED: All non abstract classes in `Doctrine\Migrations\Tools\Console\Command\*` became final - - REMOVED: Class `Doctrine\Migrations\Tools\Console\Command\AbstractCommand` has been renamed into `Doctrine\Migrations\Tools\Console\Command\DoctrineCommand` and has been marked as internal - - CHANGED: Method `Doctrine\Migrations\Tools\Console\Command\*Command#__construct()` changed signature into `(?Doctrine\Migrations\DependencyFactory $di, ?string $name)` - - CHANGED: Method `initialize()` of Class `Doctrine\Migrations\Tools\Console\Command\AbstractCommand` visibility reduced from `public` to `protected` - - CHANGED: Method `execute()` of Class `Doctrine\Migrations\Tools\Console\Command\*Command` visibility reduced from `public` to `protected` - - REMOVED: Method `Doctrine\Migrations\Tools\Console\Command\DiffCommand#createMigrationDiffGenerator()` was removed - - Namespace `Doctrine\Migrations\Tools\Console\Exception` - - CHANGED: The number of required arguments for `Doctrine\Migrations\Tools\Console\Exception\SchemaDumpRequiresNoMigrations::new()` increased from 0 to 1 - - REMOVED: Class `Doctrine\Migrations\Tools\Console\Exception\ConnectionNotSpecified` has been deleted - - Namespace `Migrations\Tools\Console\Helper` - - REMOVED: All classes and namespaces are marked as internal or have been removed, - use `Doctrine\Migrations\DependencyFactory` instead - - Namespace `Doctrine\Migrations\AbstractMigration` - - CHANGED: The method `Doctrine\Migrations\AbstractMigration#__construct()` changed signature into `(Doctrine\DBAL\Connection $conn, PSR\Log\LoggerInterface $logger)` - - CHANGED: The method `Doctrine\Migrations\AbstractMigration#down()` is not abstract anymore, the default implementation will abort the migration process - - REMOVED: Property `Doctrine\Migrations\AbstractMigration#$version` was removed - - Namespace `Doctrine\Migrations\Provider` - - REMOVED: Class `Doctrine\Migrations\Provider\SchemaProviderInterface` has been deleted - - REMOVED: These ancestors of `Doctrine\Migrations\Provider\StubSchemaProvider` have been removed: ["Doctrine\\Migrations\\Provider\\SchemaProviderInterface"] - - Namespace `Doctrine\Migrations\Exception` - - REMOVED: Class `Doctrine\Migrations\Exception\MigrationNotConvertibleToSql` has been deleted - - REMOVED: Class `Doctrine\Migrations\Exception\MigrationsDirectoryRequired` has been deleted - - REMOVED: Class `Doctrine\Migrations\Version\Factory` became the interface `Doctrine\Migrations\Version\MigrationFactory` - - REMOVED: Class `Doctrine\Migrations\OutputWriter` has been deleted, - use `Psr\Log\Loggerinterface` - - - - -# Upgrade to 2.0 - -## BC Break: Moved `Doctrine\DBAL\Migrations` to `Doctrine\Migrations` - -Your migration classes that previously used to extend `Doctrine\DBAL\Migrations\AbstractMigration` now need to extend -`Doctrine\Migrations\AbstractMigration` instead. The `Doctrine\DBAL\Migrations\AbstractMigration` class will be -deprecated in the `1.8.0` release to prepare for the BC break. - -## BC Break: Removed `Doctrine\DBAL\Migrations\MigrationsVersion` - -The `Doctrine\DBAL\Migrations\MigrationsVersion` class is no longer available: please refrain from checking the Migrations version at runtime. - -## BC Break: Moved `Doctrine\Migrations\Migration` to `Doctrine\Migrations\Migrator` - -To make the name more clear and to differentiate from the `AbstractMigration` class, `Migration` was renamed to `Migrator`. - -## BC Break: Moved exception classes from `Doctrine\Migrations\%name%Exception` to `Doctrine\Migrations\Exception\%name%` -doctrine/migrations#636 -Follows concept introduced in ORM (doctrine/orm#6743 + doctrine/orm#7210) and naming follows pattern accepted in Doctrine CS. - -# Upgrade from 1.0-alpha1 to 1.0.0-alpha3 - -## AbstractMigration - -### Before: - -The method `getName()` was defined and it's implementation would change the order in which the migration would be processed. -It would cause discrepancies between the file order in a file browser and the order of execution of the migrations. - -### After: - -The `getName()` method as been removed | set final and new `getDescription()` method has been added. -The goal of this method is to be able to provide context for the migration. -This context is shown for the last migrated migration when the status command is called. - -## --write-sql option from the migrate command - -### Before: - -The `--write-sql` option would only output sql contained in the migration and would not update the table containing the migrated migrations. - -### After: - -That option now also output the sql queries necessary to update the table containing the state of the migrations. -If you want to go back to the previous behavior just make a request on the bug tracker as for now the need for it is not very clear. - -## MigrationsVersion::VERSION - -### Before: - -`MigrationsVersion::VERSION` used to be a property. -The returned value was fanciful. - -### After: - -It is now a a function so that a different value can be automatically send back if it's a modified version that's used. -The returned value is now the git tag. -The tag is in lowercase as the other doctrine projects. diff --git a/vendor/doctrine/migrations/bin/doctrine-migrations.php b/vendor/doctrine/migrations/bin/doctrine-migrations.php deleted file mode 100644 index 70c0a70..0000000 --- a/vendor/doctrine/migrations/bin/doctrine-migrations.php +++ /dev/null @@ -1,46 +0,0 @@ -=4" - }, - "suggest": { - "doctrine/sql-formatter": "Allows to generate formatted SQL with the diff command.", - "symfony/yaml": "Allows the use of yaml for migration configuration files." - }, - "autoload": { - "psr-4": { - "Doctrine\\Migrations\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Migrations\\Tests\\": "tests" - } - }, - "bin": [ - "bin/doctrine-migrations" - ], - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "sort-packages": true - } -} diff --git a/vendor/doctrine/migrations/src/AbstractMigration.php b/vendor/doctrine/migrations/src/AbstractMigration.php deleted file mode 100644 index e13045c..0000000 --- a/vendor/doctrine/migrations/src/AbstractMigration.php +++ /dev/null @@ -1,163 +0,0 @@ - */ - protected $sm; - - /** @var AbstractPlatform */ - protected $platform; - - /** @var Query[] */ - private array $plannedSql = []; - - private bool $frozen = false; - - public function __construct(Connection $connection, private readonly LoggerInterface $logger) - { - $this->connection = $connection; - $this->sm = $this->connection->createSchemaManager(); - $this->platform = $this->connection->getDatabasePlatform(); - } - - /** - * Indicates the transactional mode of this migration. - * - * If this function returns true (default) the migration will be executed - * in one transaction, otherwise non-transactional state will be used to - * execute each of the migration SQLs. - * - * Extending class should override this function to alter the return value. - */ - public function isTransactional(): bool - { - return true; - } - - public function getDescription(): string - { - return ''; - } - - public function warnIf(bool $condition, string $message = 'Unknown Reason'): void - { - if (! $condition) { - return; - } - - $this->logger->warning($message, ['migration' => $this]); - } - - /** @throws AbortMigration */ - public function abortIf(bool $condition, string $message = 'Unknown Reason'): void - { - if ($condition) { - throw new AbortMigration($message); - } - } - - /** @throws SkipMigration */ - public function skipIf(bool $condition, string $message = 'Unknown Reason'): void - { - if ($condition) { - throw new SkipMigration($message); - } - } - - /** @throws MigrationException|DBALException */ - public function preUp(Schema $schema): void - { - } - - /** @throws MigrationException|DBALException */ - public function postUp(Schema $schema): void - { - } - - /** @throws MigrationException|DBALException */ - public function preDown(Schema $schema): void - { - } - - /** @throws MigrationException|DBALException */ - public function postDown(Schema $schema): void - { - } - - /** @throws MigrationException|DBALException */ - abstract public function up(Schema $schema): void; - - /** @throws MigrationException|DBALException */ - public function down(Schema $schema): void - { - $this->abortIf(true, sprintf('No down() migration implemented for "%s"', static::class)); - } - - /** - * @param mixed[] $params - * @param mixed[] $types - */ - protected function addSql( - string $sql, - array $params = [], - array $types = [], - ): void { - if ($this->frozen) { - throw FrozenMigration::new(); - } - - $this->plannedSql[] = new Query($sql, $params, $types); - } - - /** @return Query[] */ - public function getSql(): array - { - return $this->plannedSql; - } - - public function freeze(): void - { - $this->frozen = true; - } - - protected function write(string $message): void - { - $this->logger->notice($message, ['migration' => $this]); - } - - /** @throws IrreversibleMigration */ - protected function throwIrreversibleMigrationException(string|null $message = null): void - { - if ($message === null) { - $message = 'This migration is irreversible and cannot be reverted.'; - } - - throw new IrreversibleMigration($message); - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Configuration.php b/vendor/doctrine/migrations/src/Configuration/Configuration.php deleted file mode 100644 index 9e1f1ce..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Configuration.php +++ /dev/null @@ -1,212 +0,0 @@ - */ - private array $migrationsDirectories = []; - - /** @var string[] */ - private array $migrationClasses = []; - - private bool $migrationsAreOrganizedByYear = false; - - private bool $migrationsAreOrganizedByYearAndMonth = false; - - private string|null $customTemplate = null; - - private bool $isDryRun = false; - - private bool $allOrNothing = false; - - private bool $transactional = true; - - private string|null $connectionName = null; - - private string|null $entityManagerName = null; - - private bool $checkDbPlatform = true; - - private MetadataStorageConfiguration|null $metadataStorageConfiguration = null; - - private bool $frozen = false; - - public function freeze(): void - { - $this->frozen = true; - } - - private function assertNotFrozen(): void - { - if ($this->frozen) { - throw FrozenConfiguration::new(); - } - } - - public function setMetadataStorageConfiguration(MetadataStorageConfiguration $metadataStorageConfiguration): void - { - $this->assertNotFrozen(); - $this->metadataStorageConfiguration = $metadataStorageConfiguration; - } - - /** @return string[] */ - public function getMigrationClasses(): array - { - return $this->migrationClasses; - } - - public function addMigrationClass(string $className): void - { - $this->assertNotFrozen(); - $this->migrationClasses[] = $className; - } - - public function getMetadataStorageConfiguration(): MetadataStorageConfiguration|null - { - return $this->metadataStorageConfiguration; - } - - public function addMigrationsDirectory(string $namespace, string $path): void - { - $this->assertNotFrozen(); - $this->migrationsDirectories[$namespace] = $path; - } - - /** @return array */ - public function getMigrationDirectories(): array - { - return $this->migrationsDirectories; - } - - public function getConnectionName(): string|null - { - return $this->connectionName; - } - - public function setConnectionName(string|null $connectionName): void - { - $this->assertNotFrozen(); - $this->connectionName = $connectionName; - } - - public function getEntityManagerName(): string|null - { - return $this->entityManagerName; - } - - public function setEntityManagerName(string|null $entityManagerName): void - { - $this->assertNotFrozen(); - $this->entityManagerName = $entityManagerName; - } - - public function setCustomTemplate(string|null $customTemplate): void - { - $this->assertNotFrozen(); - $this->customTemplate = $customTemplate; - } - - public function getCustomTemplate(): string|null - { - return $this->customTemplate; - } - - public function areMigrationsOrganizedByYear(): bool - { - return $this->migrationsAreOrganizedByYear; - } - - /** @throws MigrationException */ - public function setMigrationsAreOrganizedByYear( - bool $migrationsAreOrganizedByYear = true, - ): void { - $this->assertNotFrozen(); - $this->migrationsAreOrganizedByYear = $migrationsAreOrganizedByYear; - } - - /** @throws MigrationException */ - public function setMigrationsAreOrganizedByYearAndMonth( - bool $migrationsAreOrganizedByYearAndMonth = true, - ): void { - $this->assertNotFrozen(); - $this->migrationsAreOrganizedByYear = $migrationsAreOrganizedByYearAndMonth; - $this->migrationsAreOrganizedByYearAndMonth = $migrationsAreOrganizedByYearAndMonth; - } - - public function areMigrationsOrganizedByYearAndMonth(): bool - { - return $this->migrationsAreOrganizedByYearAndMonth; - } - - public function setIsDryRun(bool $isDryRun): void - { - $this->assertNotFrozen(); - $this->isDryRun = $isDryRun; - } - - public function isDryRun(): bool - { - return $this->isDryRun; - } - - public function setAllOrNothing(bool $allOrNothing): void - { - $this->assertNotFrozen(); - $this->allOrNothing = $allOrNothing; - } - - public function isAllOrNothing(): bool - { - return $this->allOrNothing; - } - - public function setTransactional(bool $transactional): void - { - $this->assertNotFrozen(); - $this->transactional = $transactional; - } - - public function isTransactional(): bool - { - return $this->transactional; - } - - public function setCheckDatabasePlatform(bool $checkDbPlatform): void - { - $this->checkDbPlatform = $checkDbPlatform; - } - - public function isDatabasePlatformChecked(): bool - { - return $this->checkDbPlatform; - } - - public function setMigrationOrganization(string $migrationOrganization): void - { - $this->assertNotFrozen(); - - match (strtolower($migrationOrganization)) { - self::VERSIONS_ORGANIZATION_NONE => $this->setMigrationsAreOrganizedByYearAndMonth(false), - self::VERSIONS_ORGANIZATION_BY_YEAR => $this->setMigrationsAreOrganizedByYear(), - self::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH => $this->setMigrationsAreOrganizedByYearAndMonth(), - default => throw UnknownConfigurationValue::new('organize_migrations', $migrationOrganization), - }; - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Connection/ConfigurationFile.php b/vendor/doctrine/migrations/src/Configuration/Connection/ConfigurationFile.php deleted file mode 100644 index a160216..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Connection/ConfigurationFile.php +++ /dev/null @@ -1,51 +0,0 @@ -filename)) { - throw FileNotFound::new($this->filename); - } - - $params = include $this->filename; - - if ($params instanceof Connection) { - return $params; - } - - if ($params instanceof ConnectionLoader) { - return $params->getConnection(); - } - - if (is_array($params)) { - return DriverManager::getConnection($params); - } - - throw InvalidConfiguration::invalidArrayConfiguration(); - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Connection/ConnectionLoader.php b/vendor/doctrine/migrations/src/Configuration/Connection/ConnectionLoader.php deleted file mode 100644 index bf9e3f2..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Connection/ConnectionLoader.php +++ /dev/null @@ -1,23 +0,0 @@ -registry = $registry; - $that->defaultConnectionName = $connectionName; - - return $that; - } - - private function __construct() - { - } - - public function getConnection(string|null $name = null): Connection - { - $connection = $this->registry->getConnection($name ?? $this->defaultConnectionName); - if (! $connection instanceof Connection) { - throw InvalidConfiguration::invalidConnectionType($connection); - } - - return $connection; - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Connection/Exception/ConnectionNotSpecified.php b/vendor/doctrine/migrations/src/Configuration/Connection/Exception/ConnectionNotSpecified.php deleted file mode 100644 index e3b9501..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Connection/Exception/ConnectionNotSpecified.php +++ /dev/null @@ -1,17 +0,0 @@ -connection; - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/EntityManager/ConfigurationFile.php b/vendor/doctrine/migrations/src/Configuration/EntityManager/ConfigurationFile.php deleted file mode 100644 index 9cf4025..0000000 --- a/vendor/doctrine/migrations/src/Configuration/EntityManager/ConfigurationFile.php +++ /dev/null @@ -1,51 +0,0 @@ -filename)) { - throw FileNotFound::new($this->filename); - } - - $params = include $this->filename; - - if ($params instanceof EntityManagerInterface) { - return $params; - } - - if ($params instanceof EntityManagerLoader) { - return $params->getEntityManager(); - } - - throw InvalidConfiguration::invalidArrayConfiguration(); - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/EntityManager/EntityManagerLoader.php b/vendor/doctrine/migrations/src/Configuration/EntityManager/EntityManagerLoader.php deleted file mode 100644 index 2982c9a..0000000 --- a/vendor/doctrine/migrations/src/Configuration/EntityManager/EntityManagerLoader.php +++ /dev/null @@ -1,18 +0,0 @@ -entityManager; - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/EntityManager/ManagerRegistryEntityManager.php b/vendor/doctrine/migrations/src/Configuration/EntityManager/ManagerRegistryEntityManager.php deleted file mode 100644 index 3807894..0000000 --- a/vendor/doctrine/migrations/src/Configuration/EntityManager/ManagerRegistryEntityManager.php +++ /dev/null @@ -1,41 +0,0 @@ -registry = $registry; - $that->defaultManagerName = $managerName; - - return $that; - } - - private function __construct() - { - } - - public function getEntityManager(string|null $name = null): EntityManagerInterface - { - $managerName = $name ?? $this->defaultManagerName; - - $em = $this->registry->getManager($managerName); - if (! $em instanceof EntityManagerInterface) { - throw InvalidConfiguration::invalidManagerType($em); - } - - return $em; - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Exception/ConfigurationException.php b/vendor/doctrine/migrations/src/Configuration/Exception/ConfigurationException.php deleted file mode 100644 index 8db929c..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Exception/ConfigurationException.php +++ /dev/null @@ -1,11 +0,0 @@ - $configurations */ - public function __construct(private readonly array $configurations) - { - } - - public function getConfiguration(): Configuration - { - $configMap = [ - 'migrations_paths' => static function ($paths, Configuration $configuration): void { - foreach ($paths as $namespace => $path) { - $configuration->addMigrationsDirectory($namespace, $path); - } - }, - 'migrations' => static function ($migrations, Configuration $configuration): void { - foreach ($migrations as $className) { - $configuration->addMigrationClass($className); - } - }, - - 'connection' => 'setConnectionName', - 'em' => 'setEntityManagerName', - - 'table_storage' => [ - 'table_name' => 'setTableName', - 'version_column_name' => 'setVersionColumnName', - 'version_column_length' => static function ($value, TableMetadataStorageConfiguration $configuration): void { - $configuration->setVersionColumnLength((int) $value); - }, - 'executed_at_column_name' => 'setExecutedAtColumnName', - 'execution_time_column_name' => 'setExecutionTimeColumnName', - ], - - 'organize_migrations' => 'setMigrationOrganization', - 'custom_template' => 'setCustomTemplate', - 'all_or_nothing' => static function ($value, Configuration $configuration): void { - $configuration->setAllOrNothing(is_bool($value) ? $value : BooleanStringFormatter::toBoolean($value, false)); - }, - 'transactional' => static function ($value, Configuration $configuration): void { - $configuration->setTransactional(is_bool($value) ? $value : BooleanStringFormatter::toBoolean($value, true)); - }, - 'check_database_platform' => static function ($value, Configuration $configuration): void { - $configuration->setCheckDatabasePlatform(is_bool($value) ? $value : BooleanStringFormatter::toBoolean($value, false)); - }, - ]; - - $object = new Configuration(); - self::applyConfigs($configMap, $object, $this->configurations); - - if ($object->getMetadataStorageConfiguration() === null) { - $object->setMetadataStorageConfiguration(new TableMetadataStorageConfiguration()); - } - - return $object; - } - - /** - * @param mixed[] $configMap - * @param array $data - */ - private static function applyConfigs(array $configMap, Configuration|TableMetadataStorageConfiguration $object, array $data): void - { - foreach ($data as $configurationKey => $configurationValue) { - if (! isset($configMap[$configurationKey])) { - throw InvalidConfigurationKey::new((string) $configurationKey); - } - - if (is_array($configMap[$configurationKey])) { - if ($configurationKey !== 'table_storage') { - throw InvalidConfigurationKey::new((string) $configurationKey); - } - - $storageConfig = new TableMetadataStorageConfiguration(); - assert($object instanceof Configuration); - $object->setMetadataStorageConfiguration($storageConfig); - self::applyConfigs($configMap[$configurationKey], $storageConfig, $configurationValue); - } else { - $callable = $configMap[$configurationKey] instanceof Closure - ? $configMap[$configurationKey] - : [$object, $configMap[$configurationKey]]; - assert(is_callable($callable)); - call_user_func( - $callable, - $configurationValue, - $object, - $data, - ); - } - } - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationFile.php b/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationFile.php deleted file mode 100644 index 3ed3ad8..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationFile.php +++ /dev/null @@ -1,35 +0,0 @@ -file = $file; - } - - /** - * @param array $directories - * - * @return array - */ - final protected function getDirectoriesRelativeToFile(array $directories, string $file): array - { - foreach ($directories as $ns => $dir) { - $path = realpath(dirname($file) . '/' . $dir); - - $directories[$ns] = $path !== false ? $path : $dir; - } - - return $directories; - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationFileWithFallback.php b/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationFileWithFallback.php deleted file mode 100644 index 62216c1..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationFileWithFallback.php +++ /dev/null @@ -1,61 +0,0 @@ -file !== null) { - return $this->loadConfiguration($this->file); - } - - /** - * If no config has been provided, look for default config file in the path. - */ - $defaultFiles = [ - 'migrations.xml', - 'migrations.yml', - 'migrations.yaml', - 'migrations.json', - 'migrations.php', - ]; - - foreach ($defaultFiles as $file) { - if ($this->configurationFileExists($file)) { - return $this->loadConfiguration($file); - } - } - - throw MissingConfigurationFile::new(); - } - - private function configurationFileExists(string $config): bool - { - return file_exists($config); - } - - /** @throws FileTypeNotSupported */ - private function loadConfiguration(string $file): Configuration - { - return (new FormattedFile($file))->getConfiguration(); - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationLoader.php b/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationLoader.php deleted file mode 100644 index cd84a43..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/ConfigurationLoader.php +++ /dev/null @@ -1,12 +0,0 @@ -configurations; - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/FormattedFile.php b/vendor/doctrine/migrations/src/Configuration/Migration/FormattedFile.php deleted file mode 100644 index 45851e8..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/FormattedFile.php +++ /dev/null @@ -1,45 +0,0 @@ -loaders = [ - 'json' => static fn ($file): ConfigurationLoader => new JsonFile($file), - 'php' => static fn ($file): ConfigurationLoader => new PhpFile($file), - 'xml' => static fn ($file): ConfigurationLoader => new XmlFile($file), - 'yaml' => static fn ($file): ConfigurationLoader => new YamlFile($file), - 'yml' => static fn ($file): ConfigurationLoader => new YamlFile($file), - ]; - } - - public function getConfiguration(): Configuration - { - if (count($this->loaders) === 0) { - $this->setDefaultLoaders(); - } - - $extension = pathinfo($this->file, PATHINFO_EXTENSION); - if (! isset($this->loaders[$extension])) { - throw InvalidConfigurationFormat::new($this->file); - } - - return $this->loaders[$extension]($this->file)->getConfiguration(); - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/JsonFile.php b/vendor/doctrine/migrations/src/Configuration/Migration/JsonFile.php deleted file mode 100644 index 13e1ca0..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/JsonFile.php +++ /dev/null @@ -1,46 +0,0 @@ -file)) { - throw FileNotFound::new($this->file); - } - - $contents = file_get_contents($this->file); - - assert($contents !== false); - - $config = json_decode($contents, true); - - if (json_last_error() !== JSON_ERROR_NONE) { - throw JsonNotValid::new(); - } - - if (isset($config['migrations_paths'])) { - $config['migrations_paths'] = $this->getDirectoriesRelativeToFile( - $config['migrations_paths'], - $this->file, - ); - } - - return (new ConfigurationArray($config))->getConfiguration(); - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/PhpFile.php b/vendor/doctrine/migrations/src/Configuration/Migration/PhpFile.php deleted file mode 100644 index d6f2888..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/PhpFile.php +++ /dev/null @@ -1,37 +0,0 @@ -file)) { - throw FileNotFound::new($this->file); - } - - $config = require $this->file; - if ($config instanceof Configuration) { - return $config; - } - - assert(is_array($config)); - if (isset($config['migrations_paths'])) { - $config['migrations_paths'] = $this->getDirectoriesRelativeToFile( - $config['migrations_paths'], - $this->file, - ); - } - - return (new ConfigurationArray($config))->getConfiguration(); - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/XML/configuration.xsd b/vendor/doctrine/migrations/src/Configuration/Migration/XML/configuration.xsd deleted file mode 100644 index c51d478..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/XML/configuration.xsd +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/XmlFile.php b/vendor/doctrine/migrations/src/Configuration/Migration/XmlFile.php deleted file mode 100644 index b2ee835..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/XmlFile.php +++ /dev/null @@ -1,129 +0,0 @@ -file)) { - throw FileNotFound::new($this->file); - } - - $this->validateXml($this->file); - - $rawXML = file_get_contents($this->file); - assert($rawXML !== false); - - $root = simplexml_load_string($rawXML, SimpleXMLElement::class, LIBXML_NOCDATA); - assert($root !== false); - - $config = $this->extractParameters($root, true); - - if (isset($config['all_or_nothing'])) { - $config['all_or_nothing'] = BooleanStringFormatter::toBoolean( - $config['all_or_nothing'], - false, - ); - } - - if (isset($config['transactional'])) { - $config['transactional'] = BooleanStringFormatter::toBoolean( - $config['transactional'], - true, - ); - } - - if (isset($config['migrations_paths'])) { - $config['migrations_paths'] = $this->getDirectoriesRelativeToFile( - $config['migrations_paths'], - $this->file, - ); - } - - return (new ConfigurationArray($config))->getConfiguration(); - } - - /** @return mixed[] */ - private function extractParameters(SimpleXMLElement $root, bool $loopOverNodes): array - { - $config = []; - - $itemsToCheck = $loopOverNodes ? $root->children() : $root->attributes(); - - if (! ($itemsToCheck instanceof SimpleXMLElement)) { - return $config; - } - - foreach ($itemsToCheck as $node) { - $nodeName = strtr($node->getName(), '-', '_'); - if ($nodeName === 'migrations_paths') { - $config['migrations_paths'] = []; - foreach ($node->path as $pathNode) { - $config['migrations_paths'][(string) $pathNode['namespace']] = (string) $pathNode; - } - } elseif ($nodeName === 'storage' && $node->{'table-storage'} instanceof SimpleXMLElement) { - $config['table_storage'] = $this->extractParameters($node->{'table-storage'}, false); - } elseif ($nodeName === 'migrations') { - $config['migrations'] = $this->extractMigrations($node); - } else { - $config[$nodeName] = (string) $node; - } - } - - return $config; - } - - /** @return list */ - private function extractMigrations(SimpleXMLElement $node): array - { - $migrations = []; - foreach ($node->migration as $pathNode) { - $migrations[] = (string) $pathNode; - } - - return $migrations; - } - - private function validateXml(string $file): void - { - try { - libxml_use_internal_errors(true); - - $xml = new DOMDocument(); - - if ($xml->load($file) === false) { - throw XmlNotValid::malformed(); - } - - $xsdPath = __DIR__ . DIRECTORY_SEPARATOR . 'XML' . DIRECTORY_SEPARATOR . 'configuration.xsd'; - - if ($xml->schemaValidate($xsdPath) === false) { - throw XmlNotValid::failedValidation(); - } - } finally { - libxml_clear_errors(); - libxml_use_internal_errors(false); - } - } -} diff --git a/vendor/doctrine/migrations/src/Configuration/Migration/YamlFile.php b/vendor/doctrine/migrations/src/Configuration/Migration/YamlFile.php deleted file mode 100644 index f502bbe..0000000 --- a/vendor/doctrine/migrations/src/Configuration/Migration/YamlFile.php +++ /dev/null @@ -1,55 +0,0 @@ -file)) { - throw FileNotFound::new($this->file); - } - - $content = file_get_contents($this->file); - - assert($content !== false); - - try { - $config = Yaml::parse($content); - } catch (ParseException) { - throw YamlNotValid::malformed(); - } - - if (! is_array($config)) { - throw YamlNotValid::invalid(); - } - - if (isset($config['migrations_paths'])) { - $config['migrations_paths'] = $this->getDirectoriesRelativeToFile( - $config['migrations_paths'], - $this->file, - ); - } - - return (new ConfigurationArray($config))->getConfiguration(); - } -} diff --git a/vendor/doctrine/migrations/src/DbalMigrator.php b/vendor/doctrine/migrations/src/DbalMigrator.php deleted file mode 100644 index ad8e09a..0000000 --- a/vendor/doctrine/migrations/src/DbalMigrator.php +++ /dev/null @@ -1,140 +0,0 @@ - */ - private function executeMigrations( - MigrationPlanList $migrationsPlan, - MigratorConfiguration $migratorConfiguration, - ): array { - $allOrNothing = $migratorConfiguration->isAllOrNothing(); - - if ($allOrNothing) { - $this->assertAllMigrationsAreTransactional($migrationsPlan); - $this->connection->beginTransaction(); - } - - try { - $this->dispatcher->dispatchMigrationEvent(Events::onMigrationsMigrating, $migrationsPlan, $migratorConfiguration); - - $sql = $this->executePlan($migrationsPlan, $migratorConfiguration); - - $this->dispatcher->dispatchMigrationEvent(Events::onMigrationsMigrated, $migrationsPlan, $migratorConfiguration); - } catch (Throwable $e) { - if ($allOrNothing) { - TransactionHelper::rollbackIfInTransaction($this->connection); - } - - throw $e; - } - - if ($allOrNothing) { - TransactionHelper::commitIfInTransaction($this->connection); - } - - return $sql; - } - - private function assertAllMigrationsAreTransactional(MigrationPlanList $migrationsPlan): void - { - foreach ($migrationsPlan->getItems() as $plan) { - if (! $plan->getMigration()->isTransactional()) { - throw MigrationConfigurationConflict::migrationIsNotTransactional($plan->getMigration()); - } - } - } - - /** @return array */ - private function executePlan(MigrationPlanList $migrationsPlan, MigratorConfiguration $migratorConfiguration): array - { - $sql = []; - - foreach ($migrationsPlan->getItems() as $plan) { - $versionExecutionResult = $this->executor->execute($plan, $migratorConfiguration); - - // capture the to Schema for the migration so we have the ability to use - // it as the from Schema for the next migration when we are running a dry run - // $toSchema may be null in the case of skipped migrations - if (! $versionExecutionResult->isSkipped()) { - $migratorConfiguration->setFromSchema($versionExecutionResult->getToSchema()); - } - - $sql[(string) $plan->getVersion()] = $versionExecutionResult->getSql(); - } - - return $sql; - } - - /** @param array $sql */ - private function endMigrations( - StopwatchEvent $stopwatchEvent, - MigrationPlanList $migrationsPlan, - array $sql, - ): void { - $stopwatchEvent->stop(); - - $this->logger->notice( - 'finished in {duration}ms, used {memory} memory, {migrations_count} migrations executed, {queries_count} sql queries', - [ - 'duration' => $stopwatchEvent->getDuration(), - 'memory' => BytesFormatter::formatBytes($stopwatchEvent->getMemory()), - 'migrations_count' => count($migrationsPlan), - 'queries_count' => count($sql, COUNT_RECURSIVE) - count($sql), - ], - ); - } - - /** - * {@inheritDoc} - */ - public function migrate(MigrationPlanList $migrationsPlan, MigratorConfiguration $migratorConfiguration): array - { - if (count($migrationsPlan) === 0) { - $this->logger->notice('No migrations to execute.'); - - return []; - } - - $stopwatchEvent = $this->stopwatch->start('migrate'); - - $sql = $this->executeMigrations($migrationsPlan, $migratorConfiguration); - - $this->endMigrations($stopwatchEvent, $migrationsPlan, $sql); - - return $sql; - } -} diff --git a/vendor/doctrine/migrations/src/DependencyFactory.php b/vendor/doctrine/migrations/src/DependencyFactory.php deleted file mode 100644 index fece1f5..0000000 --- a/vendor/doctrine/migrations/src/DependencyFactory.php +++ /dev/null @@ -1,465 +0,0 @@ - */ - private array $inResolution = []; - - private Configuration|null $configuration = null; - - /** @var object[]|callable[] */ - private array $dependencies = []; - - private Connection|null $connection = null; - private EntityManagerInterface|null $em = null; - private EventManager|null $eventManager = null; - private bool $frozen = false; - private ConfigurationLoader $configurationLoader; - private ConnectionLoader $connectionLoader; - private EntityManagerLoader|null $emLoader = null; - - /** @var callable[] */ - private array $factories = []; - - public static function fromConnection( - ConfigurationLoader $configurationLoader, - ConnectionLoader $connectionLoader, - LoggerInterface|null $logger = null, - ): self { - $dependencyFactory = new self($logger); - $dependencyFactory->configurationLoader = $configurationLoader; - $dependencyFactory->connectionLoader = $connectionLoader; - - return $dependencyFactory; - } - - public static function fromEntityManager( - ConfigurationLoader $configurationLoader, - EntityManagerLoader $emLoader, - LoggerInterface|null $logger = null, - ): self { - $dependencyFactory = new self($logger); - $dependencyFactory->configurationLoader = $configurationLoader; - $dependencyFactory->emLoader = $emLoader; - - return $dependencyFactory; - } - - private function __construct(LoggerInterface|null $logger) - { - if ($logger === null) { - return; - } - - $this->setDefinition(LoggerInterface::class, static fn (): LoggerInterface => $logger); - } - - public function isFrozen(): bool - { - return $this->frozen; - } - - public function freeze(): void - { - $this->frozen = true; - } - - private function assertNotFrozen(): void - { - if ($this->frozen) { - throw FrozenDependencies::new(); - } - } - - public function hasEntityManager(): bool - { - return $this->emLoader !== null; - } - - public function setConfigurationLoader(ConfigurationLoader $configurationLoader): void - { - $this->assertNotFrozen(); - $this->configurationLoader = $configurationLoader; - } - - public function getConfiguration(): Configuration - { - if ($this->configuration === null) { - $this->configuration = $this->configurationLoader->getConfiguration(); - $this->frozen = true; - } - - return $this->configuration; - } - - public function getConnection(): Connection - { - if ($this->connection === null) { - $this->connection = $this->hasEntityManager() - ? $this->getEntityManager()->getConnection() - : $this->connectionLoader->getConnection($this->getConfiguration()->getConnectionName()); - $this->frozen = true; - } - - return $this->connection; - } - - public function getEntityManager(): EntityManagerInterface - { - if ($this->em === null) { - if ($this->emLoader === null) { - throw MissingDependency::noEntityManager(); - } - - $this->em = $this->emLoader->getEntityManager($this->getConfiguration()->getEntityManagerName()); - $this->frozen = true; - } - - return $this->em; - } - - public function getVersionComparator(): Comparator - { - return $this->getDependency(Comparator::class, static fn (): AlphabeticalComparator => new AlphabeticalComparator()); - } - - public function getLogger(): LoggerInterface - { - return $this->getDependency(LoggerInterface::class, static fn (): LoggerInterface => new NullLogger()); - } - - public function getEventDispatcher(): EventDispatcher - { - return $this->getDependency(EventDispatcher::class, fn (): EventDispatcher => new EventDispatcher( - $this->getConnection(), - $this->getEventManager(), - )); - } - - public function getClassNameGenerator(): ClassNameGenerator - { - return $this->getDependency(ClassNameGenerator::class, static fn (): ClassNameGenerator => new ClassNameGenerator()); - } - - public function getSchemaDumper(): SchemaDumper - { - return $this->getDependency(SchemaDumper::class, function (): SchemaDumper { - $excludedTables = []; - - $metadataConfig = $this->getConfiguration()->getMetadataStorageConfiguration(); - if ($metadataConfig instanceof TableMetadataStorageConfiguration) { - $excludedTables[] = sprintf('/^%s$/', preg_quote($metadataConfig->getTableName(), '/')); - } - - return new SchemaDumper( - $this->getConnection()->getDatabasePlatform(), - $this->getConnection()->createSchemaManager(), - $this->getMigrationGenerator(), - $this->getMigrationSqlGenerator(), - $excludedTables, - ); - }); - } - - private function getEmptySchemaProvider(): SchemaProvider - { - return $this->getDependency(EmptySchemaProvider::class, fn (): SchemaProvider => new EmptySchemaProvider($this->getConnection()->createSchemaManager())); - } - - public function hasSchemaProvider(): bool - { - try { - $this->getSchemaProvider(); - } catch (MissingDependency) { - return false; - } - - return true; - } - - public function getSchemaProvider(): SchemaProvider - { - return $this->getDependency(SchemaProvider::class, function (): SchemaProvider { - if ($this->hasEntityManager()) { - return new OrmSchemaProvider($this->getEntityManager()); - } - - throw MissingDependency::noSchemaProvider(); - }); - } - - public function getDiffGenerator(): DiffGenerator - { - return $this->getDependency(DiffGenerator::class, fn (): DiffGenerator => new DiffGenerator( - $this->getConnection()->getConfiguration(), - $this->getConnection()->createSchemaManager(), - $this->getSchemaProvider(), - $this->getConnection()->getDatabasePlatform(), - $this->getMigrationGenerator(), - $this->getMigrationSqlGenerator(), - $this->getEmptySchemaProvider(), - )); - } - - public function getSchemaDiffProvider(): SchemaDiffProvider - { - return $this->getDependency(SchemaDiffProvider::class, fn (): LazySchemaDiffProvider => new LazySchemaDiffProvider( - new DBALSchemaDiffProvider( - $this->getConnection()->createSchemaManager(), - $this->getConnection()->getDatabasePlatform(), - ), - )); - } - - private function getFileBuilder(): FileBuilder - { - return $this->getDependency(FileBuilder::class, static fn (): FileBuilder => new ConcatenationFileBuilder()); - } - - private function getParameterFormatter(): ParameterFormatter - { - return $this->getDependency(ParameterFormatter::class, fn (): ParameterFormatter => new InlineParameterFormatter($this->getConnection())); - } - - public function getMigrationsFinder(): MigrationFinder - { - return $this->getDependency(MigrationFinder::class, function (): MigrationFinder { - $configs = $this->getConfiguration(); - $needsRecursiveFinder = $configs->areMigrationsOrganizedByYear() || $configs->areMigrationsOrganizedByYearAndMonth(); - - return $needsRecursiveFinder ? new RecursiveRegexFinder() : new GlobFinder(); - }); - } - - public function getMigrationRepository(): MigrationsRepository - { - return $this->getDependency(MigrationsRepository::class, fn (): MigrationsRepository => new FilesystemMigrationsRepository( - $this->getConfiguration()->getMigrationClasses(), - $this->getConfiguration()->getMigrationDirectories(), - $this->getMigrationsFinder(), - $this->getMigrationFactory(), - )); - } - - public function getMigrationFactory(): MigrationFactory - { - return $this->getDependency(MigrationFactory::class, fn (): MigrationFactory => new DbalMigrationFactory($this->getConnection(), $this->getLogger())); - } - - public function setService(string $id, object|callable $service): void - { - $this->assertNotFrozen(); - $this->dependencies[$id] = $service; - } - - public function getMetadataStorage(): MetadataStorage - { - return $this->getDependency(MetadataStorage::class, fn (): MetadataStorage => new TableMetadataStorage( - $this->getConnection(), - $this->getVersionComparator(), - $this->getConfiguration()->getMetadataStorageConfiguration(), - $this->getMigrationRepository(), - )); - } - - private function getVersionExecutor(): Executor - { - return $this->getDependency(Executor::class, fn (): Executor => new DbalExecutor( - $this->getMetadataStorage(), - $this->getEventDispatcher(), - $this->getConnection(), - $this->getSchemaDiffProvider(), - $this->getLogger(), - $this->getParameterFormatter(), - $this->getStopwatch(), - )); - } - - public function getQueryWriter(): QueryWriter - { - return $this->getDependency(QueryWriter::class, fn (): QueryWriter => new FileQueryWriter( - $this->getFileBuilder(), - $this->getLogger(), - )); - } - - public function getVersionAliasResolver(): AliasResolver - { - return $this->getDependency(AliasResolver::class, fn (): AliasResolver => new DefaultAliasResolver( - $this->getMigrationPlanCalculator(), - $this->getMetadataStorage(), - $this->getMigrationStatusCalculator(), - )); - } - - public function getMigrationStatusCalculator(): MigrationStatusCalculator - { - return $this->getDependency(MigrationStatusCalculator::class, fn (): MigrationStatusCalculator => new CurrentMigrationStatusCalculator( - $this->getMigrationPlanCalculator(), - $this->getMetadataStorage(), - )); - } - - public function getMigrationPlanCalculator(): MigrationPlanCalculator - { - return $this->getDependency(MigrationPlanCalculator::class, fn (): MigrationPlanCalculator => new SortedMigrationPlanCalculator( - $this->getMigrationRepository(), - $this->getMetadataStorage(), - $this->getVersionComparator(), - )); - } - - public function getMigrationGenerator(): Generator - { - return $this->getDependency(Generator::class, fn (): Generator => new Generator($this->getConfiguration())); - } - - public function getMigrationSqlGenerator(): SqlGenerator - { - return $this->getDependency(SqlGenerator::class, fn (): SqlGenerator => new SqlGenerator( - $this->getConfiguration(), - $this->getConnection()->getDatabasePlatform(), - )); - } - - public function getConsoleInputMigratorConfigurationFactory(): MigratorConfigurationFactory - { - return $this->getDependency(MigratorConfigurationFactory::class, fn (): MigratorConfigurationFactory => new ConsoleInputMigratorConfigurationFactory( - $this->getConfiguration(), - )); - } - - public function getMigrationStatusInfosHelper(): MigrationStatusInfosHelper - { - return $this->getDependency(MigrationStatusInfosHelper::class, fn (): MigrationStatusInfosHelper => new MigrationStatusInfosHelper( - $this->getConfiguration(), - $this->getConnection(), - $this->getVersionAliasResolver(), - $this->getMigrationPlanCalculator(), - $this->getMigrationStatusCalculator(), - $this->getMetadataStorage(), - )); - } - - public function getMigrator(): Migrator - { - return $this->getDependency(Migrator::class, fn (): Migrator => new DbalMigrator( - $this->getConnection(), - $this->getEventDispatcher(), - $this->getVersionExecutor(), - $this->getLogger(), - $this->getStopwatch(), - )); - } - - public function getStopwatch(): Stopwatch - { - return $this->getDependency(Stopwatch::class, static fn (): Stopwatch => new Stopwatch(true)); - } - - public function getRollup(): Rollup - { - return $this->getDependency(Rollup::class, fn (): Rollup => new Rollup( - $this->getMetadataStorage(), - $this->getMigrationRepository(), - )); - } - - private function getDependency(string $id, callable $callback): mixed - { - if (! isset($this->inResolution[$id]) && array_key_exists($id, $this->factories) && ! array_key_exists($id, $this->dependencies)) { - $this->inResolution[$id] = true; - $this->dependencies[$id] = call_user_func($this->factories[$id], $this); - unset($this->inResolution); - } - - if (! array_key_exists($id, $this->dependencies)) { - $this->dependencies[$id] = $callback(); - } - - return $this->dependencies[$id]; - } - - public function setDefinition(string $id, callable $service): void - { - $this->assertNotFrozen(); - $this->factories[$id] = $service; - } - - private function getEventManager(): EventManager - { - if ($this->eventManager !== null) { - return $this->eventManager; - } - - if ($this->hasEntityManager()) { - return $this->eventManager = $this->getEntityManager()->getEventManager(); - } - - if (method_exists(Connection::class, 'getEventManager')) { - // DBAL < 4 - return $this->eventManager = $this->getConnection()->getEventManager(); - } - - return $this->eventManager = new EventManager(); - } -} diff --git a/vendor/doctrine/migrations/src/Event/Listeners/AutoCommitListener.php b/vendor/doctrine/migrations/src/Event/Listeners/AutoCommitListener.php deleted file mode 100644 index a760acf..0000000 --- a/vendor/doctrine/migrations/src/Event/Listeners/AutoCommitListener.php +++ /dev/null @@ -1,37 +0,0 @@ -getConnection(); - $conf = $args->getMigratorConfiguration(); - - if ($conf->isDryRun() || $conn->isAutoCommit()) { - return; - } - - TransactionHelper::commitIfInTransaction($conn); - } - - /** {@inheritDoc} */ - public function getSubscribedEvents() - { - return [Events::onMigrationsMigrated]; - } -} diff --git a/vendor/doctrine/migrations/src/Event/MigrationsEventArgs.php b/vendor/doctrine/migrations/src/Event/MigrationsEventArgs.php deleted file mode 100644 index 9ef8dee..0000000 --- a/vendor/doctrine/migrations/src/Event/MigrationsEventArgs.php +++ /dev/null @@ -1,38 +0,0 @@ -connection; - } - - public function getPlan(): MigrationPlanList - { - return $this->plan; - } - - public function getMigratorConfiguration(): MigratorConfiguration - { - return $this->migratorConfiguration; - } -} diff --git a/vendor/doctrine/migrations/src/Event/MigrationsVersionEventArgs.php b/vendor/doctrine/migrations/src/Event/MigrationsVersionEventArgs.php deleted file mode 100644 index f309240..0000000 --- a/vendor/doctrine/migrations/src/Event/MigrationsVersionEventArgs.php +++ /dev/null @@ -1,38 +0,0 @@ -connection; - } - - public function getPlan(): MigrationPlan - { - return $this->plan; - } - - public function getMigratorConfiguration(): MigratorConfiguration - { - return $this->migratorConfiguration; - } -} diff --git a/vendor/doctrine/migrations/src/EventDispatcher.php b/vendor/doctrine/migrations/src/EventDispatcher.php deleted file mode 100644 index a71e0c7..0000000 --- a/vendor/doctrine/migrations/src/EventDispatcher.php +++ /dev/null @@ -1,73 +0,0 @@ -createMigrationEventArgs($migrationsPlan, $migratorConfiguration); - - $this->dispatchEvent($eventName, $event); - } - - public function dispatchVersionEvent( - string $eventName, - MigrationPlan $plan, - MigratorConfiguration $migratorConfiguration, - ): void { - $event = $this->createMigrationsVersionEventArgs( - $plan, - $migratorConfiguration, - ); - - $this->dispatchEvent($eventName, $event); - } - - private function dispatchEvent(string $eventName, EventArgs|null $args = null): void - { - $this->eventManager->dispatchEvent($eventName, $args); - } - - private function createMigrationEventArgs( - MigrationPlanList $migrationsPlan, - MigratorConfiguration $migratorConfiguration, - ): MigrationsEventArgs { - return new MigrationsEventArgs($this->connection, $migrationsPlan, $migratorConfiguration); - } - - private function createMigrationsVersionEventArgs( - MigrationPlan $plan, - MigratorConfiguration $migratorConfiguration, - ): MigrationsVersionEventArgs { - return new MigrationsVersionEventArgs( - $this->connection, - $plan, - $migratorConfiguration, - ); - } -} diff --git a/vendor/doctrine/migrations/src/Events.php b/vendor/doctrine/migrations/src/Events.php deleted file mode 100644 index 0d2feb9..0000000 --- a/vendor/doctrine/migrations/src/Events.php +++ /dev/null @@ -1,17 +0,0 @@ - $queriesByVersion */ - public function write( - string $path, - string $direction, - array $queriesByVersion, - DateTimeInterface|null $now = null, - ): bool { - $now ??= new DateTimeImmutable(); - - $string = $this->migrationFileBuilder - ->buildMigrationFile($queriesByVersion, $direction, $now); - - $path = $this->buildMigrationFilePath($path, $now); - - $this->logger->info('Writing migration file to "{path}"', ['path' => $path]); - - return file_put_contents($path, $string) !== false; - } - - private function buildMigrationFilePath(string $path, DateTimeInterface $now): string - { - if (is_dir($path)) { - $path = realpath($path); - $path .= '/doctrine_migration_' . $now->format('YmdHis') . '.sql'; - } - - return $path; - } -} diff --git a/vendor/doctrine/migrations/src/FilesystemMigrationsRepository.php b/vendor/doctrine/migrations/src/FilesystemMigrationsRepository.php deleted file mode 100644 index 1d148fe..0000000 --- a/vendor/doctrine/migrations/src/FilesystemMigrationsRepository.php +++ /dev/null @@ -1,139 +0,0 @@ - $migrationDirectories - */ - public function __construct( - array $classes, - private readonly array $migrationDirectories, - private readonly MigrationFinder $migrationFinder, - private readonly MigrationFactory $versionFactory, - ) { - $this->registerMigrations($classes); - } - - private function registerMigrationInstance(Version $version, AbstractMigration $migration): AvailableMigration - { - if (isset($this->migrations[(string) $version])) { - throw DuplicateMigrationVersion::new( - (string) $version, - (string) $version, - ); - } - - $this->migrations[(string) $version] = new AvailableMigration($version, $migration); - - return $this->migrations[(string) $version]; - } - - /** @throws MigrationException */ - public function registerMigration(string $migrationClassName): AvailableMigration - { - $this->ensureMigrationClassExists($migrationClassName); - - $version = new Version($migrationClassName); - $migration = $this->versionFactory->createVersion($migrationClassName); - - return $this->registerMigrationInstance($version, $migration); - } - - /** - * @param string[] $migrations - * - * @return AvailableMigration[] - */ - private function registerMigrations(array $migrations): array - { - $versions = []; - - foreach ($migrations as $class) { - $versions[] = $this->registerMigration($class); - } - - return $versions; - } - - public function hasMigration(string $version): bool - { - $this->loadMigrationsFromDirectories(); - - return isset($this->migrations[$version]); - } - - public function getMigration(Version $version): AvailableMigration - { - $this->loadMigrationsFromDirectories(); - - if (! isset($this->migrations[(string) $version])) { - throw MigrationClassNotFound::new((string) $version); - } - - return $this->migrations[(string) $version]; - } - - /** - * Returns a non-sorted set of migrations. - */ - public function getMigrations(): AvailableMigrationsSet - { - $this->loadMigrationsFromDirectories(); - - return new AvailableMigrationsSet($this->migrations); - } - - /** @throws MigrationException */ - private function ensureMigrationClassExists(string $class): void - { - if (! class_exists($class)) { - throw MigrationClassNotFound::new($class); - } - } - - private function loadMigrationsFromDirectories(): void - { - $migrationDirectories = $this->migrationDirectories; - - if ($this->migrationsLoaded) { - return; - } - - $this->migrationsLoaded = true; - - foreach ($migrationDirectories as $namespace => $path) { - $migrations = $this->migrationFinder->findMigrations( - $path, - $namespace, - ); - $this->registerMigrations($migrations); - } - } -} diff --git a/vendor/doctrine/migrations/src/Finder/Exception/FinderException.php b/vendor/doctrine/migrations/src/Finder/Exception/FinderException.php deleted file mode 100644 index 15da805..0000000 --- a/vendor/doctrine/migrations/src/Finder/Exception/FinderException.php +++ /dev/null @@ -1,9 +0,0 @@ -loadMigrationClasses($includedFiles, $namespace); - $versions = []; - foreach ($classes as $class) { - $versions[] = $class->getName(); - } - - return $versions; - } - - /** - * Look up all declared classes and find those classes contained - * in the given `$files` array. - * - * @param string[] $files The set of files that were `required` - * @param string|null $namespace If not null only classes in this namespace will be returned - * - * @return ReflectionClass[] the classes in `$files` - */ - protected function loadMigrationClasses(array $files, string|null $namespace = null): array - { - $classes = []; - foreach (get_declared_classes() as $class) { - $reflectionClass = new ReflectionClass($class); - - if (! in_array($reflectionClass->getFileName(), $files, true)) { - continue; - } - - if ($namespace !== null && ! $this->isReflectionClassInNamespace($reflectionClass, $namespace)) { - continue; - } - - $classes[] = $reflectionClass; - } - - return $classes; - } - - /** @param ReflectionClass $reflectionClass */ - private function isReflectionClassInNamespace(ReflectionClass $reflectionClass, string $namespace): bool - { - return strncmp($reflectionClass->getName(), $namespace . '\\', strlen($namespace) + 1) === 0; - } -} diff --git a/vendor/doctrine/migrations/src/Finder/GlobFinder.php b/vendor/doctrine/migrations/src/Finder/GlobFinder.php deleted file mode 100644 index ba9780d..0000000 --- a/vendor/doctrine/migrations/src/Finder/GlobFinder.php +++ /dev/null @@ -1,29 +0,0 @@ -getRealPath($directory); - - $files = glob(rtrim($dir, '/') . '/Version*.php'); - if ($files === false) { - $files = []; - } - - return $this->loadMigrations($files, $namespace); - } -} diff --git a/vendor/doctrine/migrations/src/Finder/MigrationFinder.php b/vendor/doctrine/migrations/src/Finder/MigrationFinder.php deleted file mode 100644 index 0d13b39..0000000 --- a/vendor/doctrine/migrations/src/Finder/MigrationFinder.php +++ /dev/null @@ -1,19 +0,0 @@ -pattern = $pattern ?? sprintf( - '#^.+\\%s[^\\%s]+\\.php$#i', - DIRECTORY_SEPARATOR, - DIRECTORY_SEPARATOR, - ); - } - - /** @return string[] */ - public function findMigrations(string $directory, string|null $namespace = null): array - { - $dir = $this->getRealPath($directory); - - return $this->loadMigrations( - $this->getMatches($this->createIterator($dir)), - $namespace, - ); - } - - private function createIterator(string $dir): RegexIterator - { - return new RegexIterator( - new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($dir, FilesystemIterator::SKIP_DOTS | FilesystemIterator::FOLLOW_SYMLINKS), - RecursiveIteratorIterator::LEAVES_ONLY, - ), - $this->getPattern(), - RegexIterator::GET_MATCH, - ); - } - - private function getPattern(): string - { - return $this->pattern; - } - - /** @return string[] */ - private function getMatches(RegexIterator $iteratorFilesMatch): array - { - $files = []; - foreach ($iteratorFilesMatch as $file) { - $files[] = $file[0]; - } - - return $files; - } -} diff --git a/vendor/doctrine/migrations/src/Generator/ClassNameGenerator.php b/vendor/doctrine/migrations/src/Generator/ClassNameGenerator.php deleted file mode 100644 index 22b6f0d..0000000 --- a/vendor/doctrine/migrations/src/Generator/ClassNameGenerator.php +++ /dev/null @@ -1,25 +0,0 @@ -generateVersionNumber(); - } - - private function generateVersionNumber(): string - { - $now = new DateTimeImmutable('now', new DateTimeZone('UTC')); - - return $now->format(self::VERSION_FORMAT); - } -} diff --git a/vendor/doctrine/migrations/src/Generator/ConcatenationFileBuilder.php b/vendor/doctrine/migrations/src/Generator/ConcatenationFileBuilder.php deleted file mode 100644 index 10ebc19..0000000 --- a/vendor/doctrine/migrations/src/Generator/ConcatenationFileBuilder.php +++ /dev/null @@ -1,39 +0,0 @@ - $queriesByVersion */ - public function buildMigrationFile( - array $queriesByVersion, - string $direction, - DateTimeInterface|null $now = null, - ): string { - $now ??= new DateTimeImmutable(); - $string = sprintf("-- Doctrine Migration File Generated on %s\n", $now->format('Y-m-d H:i:s')); - - foreach ($queriesByVersion as $version => $queries) { - $string .= "\n-- Version " . $version . "\n"; - - foreach ($queries as $query) { - $string .= $query->getStatement() . ";\n"; - } - } - - return $string; - } -} diff --git a/vendor/doctrine/migrations/src/Generator/DiffGenerator.php b/vendor/doctrine/migrations/src/Generator/DiffGenerator.php deleted file mode 100644 index 19b6f3d..0000000 --- a/vendor/doctrine/migrations/src/Generator/DiffGenerator.php +++ /dev/null @@ -1,140 +0,0 @@ - $schemaManager */ - public function __construct( - private readonly DBALConfiguration $dbalConfiguration, - private readonly AbstractSchemaManager $schemaManager, - private readonly SchemaProvider $schemaProvider, - private readonly AbstractPlatform $platform, - private readonly Generator $migrationGenerator, - private readonly SqlGenerator $migrationSqlGenerator, - private readonly SchemaProvider $emptySchemaProvider, - ) { - } - - /** @throws NoChangesDetected */ - public function generate( - string $fqcn, - string|null $filterExpression, - bool $formatted = false, - int $lineLength = 120, - bool $checkDbPlatform = true, - bool $fromEmptySchema = false, - ): string { - if ($filterExpression !== null) { - $this->dbalConfiguration->setSchemaAssetsFilter( - static function ($assetName) use ($filterExpression) { - if ($assetName instanceof AbstractAsset) { - $assetName = $assetName->getName(); - } - - return preg_match($filterExpression, $assetName); - }, - ); - } - - $fromSchema = $fromEmptySchema - ? $this->createEmptySchema() - : $this->createFromSchema(); - - $toSchema = $this->createToSchema(); - - $comparator = $this->schemaManager->createComparator(); - - $upSql = $this->platform->getAlterSchemaSQL($comparator->compareSchemas($fromSchema, $toSchema)); - - $up = $this->migrationSqlGenerator->generate( - $upSql, - $formatted, - $lineLength, - $checkDbPlatform, - ); - - $downSql = $this->platform->getAlterSchemaSQL($comparator->compareSchemas($toSchema, $fromSchema)); - - $down = $this->migrationSqlGenerator->generate( - $downSql, - $formatted, - $lineLength, - $checkDbPlatform, - ); - - if ($up === '' && $down === '') { - throw NoChangesDetected::new(); - } - - return $this->migrationGenerator->generateMigration( - $fqcn, - $up, - $down, - ); - } - - private function createEmptySchema(): Schema - { - return $this->emptySchemaProvider->createSchema(); - } - - private function createFromSchema(): Schema - { - return $this->schemaManager->introspectSchema(); - } - - private function createToSchema(): Schema - { - $toSchema = $this->schemaProvider->createSchema(); - - $schemaAssetsFilter = $this->dbalConfiguration->getSchemaAssetsFilter(); - - if ($schemaAssetsFilter !== null) { - foreach ($toSchema->getTables() as $table) { - $tableName = $table->getName(); - - if ($schemaAssetsFilter($this->resolveTableName($tableName))) { - continue; - } - - $toSchema->dropTable($tableName); - } - } - - return $toSchema; - } - - /** - * Resolve a table name from its fully qualified name. The `$name` argument - * comes from Doctrine\DBAL\Schema\Table#getName which can sometimes return - * a namespaced name with the form `{namespace}.{tableName}`. This extracts - * the table name from that. - */ - private function resolveTableName(string $name): string - { - $pos = strpos($name, '.'); - - return $pos === false ? $name : substr($name, $pos + 1); - } -} diff --git a/vendor/doctrine/migrations/src/Generator/Exception/GeneratorException.php b/vendor/doctrine/migrations/src/Generator/Exception/GeneratorException.php deleted file mode 100644 index 5e90fbc..0000000 --- a/vendor/doctrine/migrations/src/Generator/Exception/GeneratorException.php +++ /dev/null @@ -1,11 +0,0 @@ - $queriesByVersion */ - public function buildMigrationFile(array $queriesByVersion, string $direction, DateTimeInterface|null $now = null): string; -} diff --git a/vendor/doctrine/migrations/src/Generator/Generator.php b/vendor/doctrine/migrations/src/Generator/Generator.php deleted file mode 100644 index 7eb5edc..0000000 --- a/vendor/doctrine/migrations/src/Generator/Generator.php +++ /dev/null @@ -1,157 +0,0 @@ -; - -use Doctrine\DBAL\Schema\Schema; -use Doctrine\Migrations\AbstractMigration; - -/** - * Auto-generated Migration: Please modify to your needs! - */ -final class extends AbstractMigration -{ - public function getDescription(): string - { - return ''; - } - - public function up(Schema $schema): void - { - // this up() migration is auto-generated, please modify it to your needs - - } - - public function down(Schema $schema): void - { - // this down() migration is auto-generated, please modify it to your needs - - } -} - -TEMPLATE; - - private string|null $template = null; - - public function __construct(private readonly Configuration $configuration) - { - } - - public function generateMigration( - string $fqcn, - string|null $up = null, - string|null $down = null, - ): string { - $mch = []; - if (preg_match('~(.*)\\\\([^\\\\]+)~', $fqcn, $mch) !== 1) { - throw new InvalidArgumentException(sprintf('Invalid FQCN')); - } - - [$fqcn, $namespace, $className] = $mch; - - $dirs = $this->configuration->getMigrationDirectories(); - if (! isset($dirs[$namespace])) { - throw new InvalidArgumentException(sprintf('Path not defined for the namespace "%s"', $namespace)); - } - - $dir = $dirs[$namespace]; - - $replacements = [ - '' => $namespace, - '' => $className, - '' => $up !== null ? ' ' . implode("\n ", explode("\n", $up)) : null, - '' => $down !== null ? ' ' . implode("\n ", explode("\n", $down)) : null, - '' => $this->configuration->isTransactional() ? '' : <<<'METHOD' - - - public function isTransactional(): bool - { - return false; - } -METHOD - , - ]; - - $code = strtr($this->getTemplate(), $replacements); - $code = preg_replace('/^ +$/m', '', $code); - - $directoryHelper = new MigrationDirectoryHelper(); - $dir = $directoryHelper->getMigrationDirectory($this->configuration, $dir); - $path = $dir . '/' . $className . '.php'; - - file_put_contents($path, $code); - - return $path; - } - - private function getTemplate(): string - { - if ($this->template === null) { - $this->template = $this->loadCustomTemplate(); - - if ($this->template === null) { - $this->template = self::MIGRATION_TEMPLATE; - } - } - - return $this->template; - } - - /** @throws InvalidTemplateSpecified */ - private function loadCustomTemplate(): string|null - { - $customTemplate = $this->configuration->getCustomTemplate(); - - if ($customTemplate === null) { - return null; - } - - if (! is_file($customTemplate) || ! is_readable($customTemplate)) { - throw InvalidTemplateSpecified::notFoundOrNotReadable($customTemplate); - } - - $content = file_get_contents($customTemplate); - - if ($content === false) { - throw InvalidTemplateSpecified::notReadable($customTemplate); - } - - if (trim($content) === '') { - throw InvalidTemplateSpecified::empty($customTemplate); - } - - return $content; - } -} diff --git a/vendor/doctrine/migrations/src/Generator/SqlGenerator.php b/vendor/doctrine/migrations/src/Generator/SqlGenerator.php deleted file mode 100644 index 2a87cbe..0000000 --- a/vendor/doctrine/migrations/src/Generator/SqlGenerator.php +++ /dev/null @@ -1,96 +0,0 @@ -configuration->getMetadataStorageConfiguration(); - foreach ($sql as $query) { - if ( - $storageConfiguration instanceof TableMetadataStorageConfiguration - && stripos($query, $storageConfiguration->getTableName()) !== false - ) { - continue; - } - - if ($formatted) { - $maxLength = $lineLength - 18 - 8; // max - php code length - indentation - - if (strlen($query) > $maxLength) { - $query = $this->formatQuery($query); - } - } - - $code[] = sprintf('$this->addSql(%s);', var_export($query, true)); - } - - if (count($code) !== 0 && $checkDbPlatform && $this->configuration->isDatabasePlatformChecked()) { - $currentPlatform = '\\' . get_class($this->platform); - - array_unshift( - $code, - sprintf( - <<<'PHP' -$this->abortIf( - !$this->connection->getDatabasePlatform() instanceof %s, - "Migration can only be executed safely on '%s'." -); -PHP - , - $currentPlatform, - $currentPlatform, - ), - '', - ); - } - - return implode("\n", $code); - } - - private function formatQuery(string $query): string - { - $this->formatter ??= new SqlFormatter(new NullHighlighter()); - - return $this->formatter->format($query); - } -} diff --git a/vendor/doctrine/migrations/src/InlineParameterFormatter.php b/vendor/doctrine/migrations/src/InlineParameterFormatter.php deleted file mode 100644 index 741a5ca..0000000 --- a/vendor/doctrine/migrations/src/InlineParameterFormatter.php +++ /dev/null @@ -1,83 +0,0 @@ - $value) { - $type = $types[$key] ?? 'string'; - - $formattedParameter = '[' . $this->formatParameter($value, $type) . ']'; - - $formattedParameters[] = is_string($key) - ? sprintf(':%s => %s', $key, $formattedParameter) - : $formattedParameter; - } - - return sprintf('with parameters (%s)', implode(', ', $formattedParameters)); - } - - private function formatParameter(mixed $value, mixed $type): string|int|bool|float|null - { - if (is_string($type) && Type::hasType($type)) { - return Type::getType($type)->convertToDatabaseValue( - $value, - $this->connection->getDatabasePlatform(), - ); - } - - return $this->parameterToString($value); - } - - /** @param int[]|bool[]|string[]|float[]|array|int|string|float|bool $value */ - private function parameterToString(array|int|string|float|bool $value): string - { - if (is_array($value)) { - return implode(', ', array_map($this->parameterToString(...), $value)); - } - - if (is_int($value) || is_string($value) || is_float($value)) { - return (string) $value; - } - - if (is_bool($value)) { - return $value === true ? 'true' : 'false'; - } - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/AvailableMigration.php b/vendor/doctrine/migrations/src/Metadata/AvailableMigration.php deleted file mode 100644 index 6e1dffa..0000000 --- a/vendor/doctrine/migrations/src/Metadata/AvailableMigration.php +++ /dev/null @@ -1,31 +0,0 @@ -version; - } - - public function getMigration(): AbstractMigration - { - return $this->migration; - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/AvailableMigrationsList.php b/vendor/doctrine/migrations/src/Metadata/AvailableMigrationsList.php deleted file mode 100644 index 94e5625..0000000 --- a/vendor/doctrine/migrations/src/Metadata/AvailableMigrationsList.php +++ /dev/null @@ -1,86 +0,0 @@ -items = array_values($items); - } - - /** @return AvailableMigration[] */ - public function getItems(): array - { - return $this->items; - } - - public function getFirst(int $offset = 0): AvailableMigration - { - if (! isset($this->items[$offset])) { - throw NoMigrationsFoundWithCriteria::new('first' . ($offset > 0 ? '+' . $offset : '')); - } - - return $this->items[$offset]; - } - - public function getLast(int $offset = 0): AvailableMigration - { - $offset = count($this->items) - 1 - (-1 * $offset); - if (! isset($this->items[$offset])) { - throw NoMigrationsFoundWithCriteria::new('last' . ($offset > 0 ? '+' . $offset : '')); - } - - return $this->items[$offset]; - } - - public function count(): int - { - return count($this->items); - } - - public function hasMigration(Version $version): bool - { - foreach ($this->items as $migration) { - if ($migration->getVersion()->equals($version)) { - return true; - } - } - - return false; - } - - public function getMigration(Version $version): AvailableMigration - { - foreach ($this->items as $migration) { - if ($migration->getVersion()->equals($version)) { - return $migration; - } - } - - throw MigrationNotAvailable::forVersion($version); - } - - public function newSubset(ExecutedMigrationsList $executedMigrations): self - { - return new self(array_filter($this->getItems(), static fn (AvailableMigration $migration): bool => ! $executedMigrations->hasMigration($migration->getVersion()))); - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/AvailableMigrationsSet.php b/vendor/doctrine/migrations/src/Metadata/AvailableMigrationsSet.php deleted file mode 100644 index a166e1e..0000000 --- a/vendor/doctrine/migrations/src/Metadata/AvailableMigrationsSet.php +++ /dev/null @@ -1,60 +0,0 @@ -items = array_values($items); - } - - /** @return AvailableMigration[] */ - public function getItems(): array - { - return $this->items; - } - - public function count(): int - { - return count($this->items); - } - - public function hasMigration(Version $version): bool - { - foreach ($this->items as $migration) { - if ($migration->getVersion()->equals($version)) { - return true; - } - } - - return false; - } - - public function getMigration(Version $version): AvailableMigration - { - foreach ($this->items as $migration) { - if ($migration->getVersion()->equals($version)) { - return $migration; - } - } - - throw MigrationNotAvailable::forVersion($version); - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/ExecutedMigration.php b/vendor/doctrine/migrations/src/Metadata/ExecutedMigration.php deleted file mode 100644 index 418a1b4..0000000 --- a/vendor/doctrine/migrations/src/Metadata/ExecutedMigration.php +++ /dev/null @@ -1,37 +0,0 @@ -executionTime; - } - - public function getExecutedAt(): DateTimeImmutable|null - { - return $this->executedAt; - } - - public function getVersion(): Version - { - return $this->version; - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/ExecutedMigrationsList.php b/vendor/doctrine/migrations/src/Metadata/ExecutedMigrationsList.php deleted file mode 100644 index bfc32c6..0000000 --- a/vendor/doctrine/migrations/src/Metadata/ExecutedMigrationsList.php +++ /dev/null @@ -1,87 +0,0 @@ -items = array_values($items); - } - - /** @return ExecutedMigration[] */ - public function getItems(): array - { - return $this->items; - } - - public function getFirst(int $offset = 0): ExecutedMigration - { - if (! isset($this->items[$offset])) { - throw NoMigrationsFoundWithCriteria::new('first' . ($offset > 0 ? '+' . $offset : '')); - } - - return $this->items[$offset]; - } - - public function getLast(int $offset = 0): ExecutedMigration - { - $offset = count($this->items) - 1 - (-1 * $offset); - if (! isset($this->items[$offset])) { - throw NoMigrationsFoundWithCriteria::new('last' . ($offset > 0 ? '+' . $offset : '')); - } - - return $this->items[$offset]; - } - - public function count(): int - { - return count($this->items); - } - - public function hasMigration(Version $version): bool - { - foreach ($this->items as $migration) { - if ($migration->getVersion()->equals($version)) { - return true; - } - } - - return false; - } - - public function getMigration(Version $version): ExecutedMigration - { - foreach ($this->items as $migration) { - if ($migration->getVersion()->equals($version)) { - return $migration; - } - } - - throw MigrationNotExecuted::new((string) $version); - } - - public function unavailableSubset(AvailableMigrationsList $availableMigrations): self - { - return new self(array_filter($this->getItems(), static fn (ExecutedMigration $migration): bool => ! $availableMigrations->hasMigration($migration->getVersion()))); - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/MigrationPlan.php b/vendor/doctrine/migrations/src/Metadata/MigrationPlan.php deleted file mode 100644 index 75eb31e..0000000 --- a/vendor/doctrine/migrations/src/Metadata/MigrationPlan.php +++ /dev/null @@ -1,54 +0,0 @@ -version; - } - - public function getResult(): ExecutionResult|null - { - return $this->result; - } - - public function markAsExecuted(ExecutionResult $result): void - { - if ($this->result !== null) { - throw PlanAlreadyExecuted::new(); - } - - $this->result = $result; - } - - public function getMigration(): AbstractMigration - { - return $this->migration; - } - - public function getDirection(): string - { - return $this->direction; - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/MigrationPlanList.php b/vendor/doctrine/migrations/src/Metadata/MigrationPlanList.php deleted file mode 100644 index e515eb1..0000000 --- a/vendor/doctrine/migrations/src/Metadata/MigrationPlanList.php +++ /dev/null @@ -1,59 +0,0 @@ -items); - } - - /** @return MigrationPlan[] */ - public function getItems(): array - { - return $this->items; - } - - public function getDirection(): string - { - return $this->direction; - } - - public function getFirst(): MigrationPlan - { - if (count($this->items) === 0) { - throw NoMigrationsFoundWithCriteria::new('first'); - } - - return reset($this->items); - } - - public function getLast(): MigrationPlan - { - if (count($this->items) === 0) { - throw NoMigrationsFoundWithCriteria::new('last'); - } - - return end($this->items); - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/Storage/MetadataStorage.php b/vendor/doctrine/migrations/src/Metadata/Storage/MetadataStorage.php deleted file mode 100644 index 79b1821..0000000 --- a/vendor/doctrine/migrations/src/Metadata/Storage/MetadataStorage.php +++ /dev/null @@ -1,21 +0,0 @@ - getSql(ExecutionResult $result); */ -interface MetadataStorage -{ - public function ensureInitialized(): void; - - public function getExecutedMigrations(): ExecutedMigrationsList; - - public function complete(ExecutionResult $result): void; - - public function reset(): void; -} diff --git a/vendor/doctrine/migrations/src/Metadata/Storage/MetadataStorageConfiguration.php b/vendor/doctrine/migrations/src/Metadata/Storage/MetadataStorageConfiguration.php deleted file mode 100644 index ffbf5e0..0000000 --- a/vendor/doctrine/migrations/src/Metadata/Storage/MetadataStorageConfiguration.php +++ /dev/null @@ -1,9 +0,0 @@ - */ - private readonly AbstractSchemaManager $schemaManager; - - private readonly AbstractPlatform $platform; - private readonly TableMetadataStorageConfiguration $configuration; - - public function __construct( - private readonly Connection $connection, - private readonly MigrationsComparator $comparator, - MetadataStorageConfiguration|null $configuration = null, - private readonly MigrationsRepository|null $migrationRepository = null, - ) { - $this->schemaManager = $connection->createSchemaManager(); - $this->platform = $connection->getDatabasePlatform(); - - if ($configuration !== null && ! ($configuration instanceof TableMetadataStorageConfiguration)) { - throw new InvalidArgumentException(sprintf( - '%s accepts only %s as configuration', - self::class, - TableMetadataStorageConfiguration::class, - )); - } - - $this->configuration = $configuration ?? new TableMetadataStorageConfiguration(); - } - - public function getExecutedMigrations(): ExecutedMigrationsList - { - if (! $this->isInitialized()) { - return new ExecutedMigrationsList([]); - } - - $this->checkInitialization(); - $rows = $this->connection->fetchAllAssociative(sprintf('SELECT * FROM %s', $this->configuration->getTableName())); - - $migrations = []; - foreach ($rows as $row) { - $row = array_change_key_case($row, CASE_LOWER); - - $version = new Version($row[strtolower($this->configuration->getVersionColumnName())]); - - $executedAt = $row[strtolower($this->configuration->getExecutedAtColumnName())] ?? ''; - $executedAt = $executedAt !== '' - ? DateTimeImmutable::createFromFormat($this->platform->getDateTimeFormatString(), $executedAt) - : null; - - $executionTime = isset($row[strtolower($this->configuration->getExecutionTimeColumnName())]) - ? floatval($row[strtolower($this->configuration->getExecutionTimeColumnName())] / 1000) - : null; - - $migration = new ExecutedMigration( - $version, - $executedAt instanceof DateTimeImmutable ? $executedAt : null, - $executionTime, - ); - - $migrations[(string) $version] = $migration; - } - - uasort($migrations, fn (ExecutedMigration $a, ExecutedMigration $b): int => $this->comparator->compare($a->getVersion(), $b->getVersion())); - - return new ExecutedMigrationsList($migrations); - } - - public function reset(): void - { - $this->checkInitialization(); - - $this->connection->executeStatement( - sprintf( - 'DELETE FROM %s WHERE 1 = 1', - $this->platform->quoteIdentifier($this->configuration->getTableName()), - ), - ); - } - - public function complete(ExecutionResult $result): void - { - $this->checkInitialization(); - - if ($result->getDirection() === Direction::DOWN) { - $this->connection->delete($this->configuration->getTableName(), [ - $this->configuration->getVersionColumnName() => (string) $result->getVersion(), - ]); - } else { - $this->connection->insert($this->configuration->getTableName(), [ - $this->configuration->getVersionColumnName() => (string) $result->getVersion(), - $this->configuration->getExecutedAtColumnName() => $result->getExecutedAt(), - $this->configuration->getExecutionTimeColumnName() => $result->getTime() === null ? null : (int) round($result->getTime() * 1000), - ], [ - Types::STRING, - Types::DATETIME_IMMUTABLE, - Types::INTEGER, - ]); - } - } - - /** @return iterable */ - public function getSql(ExecutionResult $result): iterable - { - yield new Query('-- Version ' . (string) $result->getVersion() . ' update table metadata'); - - if ($result->getDirection() === Direction::DOWN) { - yield new Query(sprintf( - 'DELETE FROM %s WHERE %s = %s', - $this->configuration->getTableName(), - $this->configuration->getVersionColumnName(), - $this->connection->quote((string) $result->getVersion()), - )); - - return; - } - - yield new Query(sprintf( - 'INSERT INTO %s (%s, %s, %s) VALUES (%s, %s, 0)', - $this->configuration->getTableName(), - $this->configuration->getVersionColumnName(), - $this->configuration->getExecutedAtColumnName(), - $this->configuration->getExecutionTimeColumnName(), - $this->connection->quote((string) $result->getVersion()), - $this->connection->quote(($result->getExecutedAt() ?? new DateTimeImmutable())->format('Y-m-d H:i:s')), - )); - } - - public function ensureInitialized(): void - { - if (! $this->isInitialized()) { - $expectedSchemaChangelog = $this->getExpectedTable(); - $this->schemaManager->createTable($expectedSchemaChangelog); - $this->schemaUpToDate = true; - $this->isInitialized = true; - - return; - } - - $this->isInitialized = true; - $expectedSchemaChangelog = $this->getExpectedTable(); - $diff = $this->needsUpdate($expectedSchemaChangelog); - if ($diff === null) { - $this->schemaUpToDate = true; - - return; - } - - $this->schemaUpToDate = true; - $this->schemaManager->alterTable($diff); - $this->updateMigratedVersionsFromV1orV2toV3(); - } - - private function needsUpdate(Table $expectedTable): TableDiff|null - { - if ($this->schemaUpToDate) { - return null; - } - - $currentTable = $this->schemaManager->introspectTable($this->configuration->getTableName()); - $diff = $this->schemaManager->createComparator()->compareTables($currentTable, $expectedTable); - - return $diff->isEmpty() ? null : $diff; - } - - private function isInitialized(): bool - { - if ($this->isInitialized) { - return $this->isInitialized; - } - - if ($this->connection instanceof PrimaryReadReplicaConnection) { - $this->connection->ensureConnectedToPrimary(); - } - - return $this->schemaManager->tablesExist([$this->configuration->getTableName()]); - } - - private function checkInitialization(): void - { - if (! $this->isInitialized()) { - throw MetadataStorageError::notInitialized(); - } - - $expectedTable = $this->getExpectedTable(); - - if ($this->needsUpdate($expectedTable) !== null) { - throw MetadataStorageError::notUpToDate(); - } - } - - private function getExpectedTable(): Table - { - $schemaChangelog = new Table($this->configuration->getTableName()); - - $schemaChangelog->addColumn( - $this->configuration->getVersionColumnName(), - 'string', - ['notnull' => true, 'length' => $this->configuration->getVersionColumnLength()], - ); - $schemaChangelog->addColumn($this->configuration->getExecutedAtColumnName(), 'datetime', ['notnull' => false]); - $schemaChangelog->addColumn($this->configuration->getExecutionTimeColumnName(), 'integer', ['notnull' => false]); - - $schemaChangelog->setPrimaryKey([$this->configuration->getVersionColumnName()]); - - return $schemaChangelog; - } - - private function updateMigratedVersionsFromV1orV2toV3(): void - { - if ($this->migrationRepository === null) { - return; - } - - $availableMigrations = $this->migrationRepository->getMigrations()->getItems(); - $executedMigrations = $this->getExecutedMigrations()->getItems(); - - foreach ($availableMigrations as $availableMigration) { - foreach ($executedMigrations as $k => $executedMigration) { - if ($this->isAlreadyV3Format($availableMigration, $executedMigration)) { - continue; - } - - $this->connection->update( - $this->configuration->getTableName(), - [ - $this->configuration->getVersionColumnName() => (string) $availableMigration->getVersion(), - ], - [ - $this->configuration->getVersionColumnName() => (string) $executedMigration->getVersion(), - ], - ); - unset($executedMigrations[$k]); - } - } - } - - private function isAlreadyV3Format(AvailableMigration $availableMigration, ExecutedMigration $executedMigration): bool - { - return strpos( - (string) $availableMigration->getVersion(), - (string) $executedMigration->getVersion(), - ) !== strlen((string) $availableMigration->getVersion()) - - strlen((string) $executedMigration->getVersion()); - } -} diff --git a/vendor/doctrine/migrations/src/Metadata/Storage/TableMetadataStorageConfiguration.php b/vendor/doctrine/migrations/src/Metadata/Storage/TableMetadataStorageConfiguration.php deleted file mode 100644 index 44eb5cd..0000000 --- a/vendor/doctrine/migrations/src/Metadata/Storage/TableMetadataStorageConfiguration.php +++ /dev/null @@ -1,68 +0,0 @@ -tableName; - } - - public function setTableName(string $tableName): void - { - $this->tableName = $tableName; - } - - public function getVersionColumnName(): string - { - return $this->versionColumnName; - } - - public function setVersionColumnName(string $versionColumnName): void - { - $this->versionColumnName = $versionColumnName; - } - - public function getVersionColumnLength(): int - { - return $this->versionColumnLength; - } - - public function setVersionColumnLength(int $versionColumnLength): void - { - $this->versionColumnLength = $versionColumnLength; - } - - public function getExecutedAtColumnName(): string - { - return $this->executedAtColumnName; - } - - public function setExecutedAtColumnName(string $executedAtColumnName): void - { - $this->executedAtColumnName = $executedAtColumnName; - } - - public function getExecutionTimeColumnName(): string - { - return $this->executionTimeColumnName; - } - - public function setExecutionTimeColumnName(string $executionTimeColumnName): void - { - $this->executionTimeColumnName = $executionTimeColumnName; - } -} diff --git a/vendor/doctrine/migrations/src/MigrationsRepository.php b/vendor/doctrine/migrations/src/MigrationsRepository.php deleted file mode 100644 index 56663ae..0000000 --- a/vendor/doctrine/migrations/src/MigrationsRepository.php +++ /dev/null @@ -1,18 +0,0 @@ - A list of SQL statements executed, grouped by migration version */ - public function migrate(MigrationPlanList $migrationsPlan, MigratorConfiguration $migratorConfiguration): array; -} diff --git a/vendor/doctrine/migrations/src/MigratorConfiguration.php b/vendor/doctrine/migrations/src/MigratorConfiguration.php deleted file mode 100644 index 01e7ee1..0000000 --- a/vendor/doctrine/migrations/src/MigratorConfiguration.php +++ /dev/null @@ -1,88 +0,0 @@ -dryRun; - } - - public function setDryRun(bool $dryRun): self - { - $this->dryRun = $dryRun; - - return $this; - } - - public function getTimeAllQueries(): bool - { - return $this->timeAllQueries; - } - - public function setTimeAllQueries(bool $timeAllQueries): self - { - $this->timeAllQueries = $timeAllQueries; - - return $this; - } - - public function getNoMigrationException(): bool - { - return $this->noMigrationException; - } - - public function setNoMigrationException(bool $noMigrationException = false): self - { - $this->noMigrationException = $noMigrationException; - - return $this; - } - - public function isAllOrNothing(): bool - { - return $this->allOrNothing; - } - - public function setAllOrNothing(bool $allOrNothing): self - { - $this->allOrNothing = $allOrNothing; - - return $this; - } - - public function getFromSchema(): Schema|null - { - return $this->fromSchema; - } - - public function setFromSchema(Schema $fromSchema): self - { - $this->fromSchema = $fromSchema; - - return $this; - } -} diff --git a/vendor/doctrine/migrations/src/ParameterFormatter.php b/vendor/doctrine/migrations/src/ParameterFormatter.php deleted file mode 100644 index c6a152a..0000000 --- a/vendor/doctrine/migrations/src/ParameterFormatter.php +++ /dev/null @@ -1,22 +0,0 @@ - $schemaManager- */ - public function __construct( - private readonly AbstractSchemaManager $schemaManager, - private readonly AbstractPlatform $platform, - ) { - } - - public function createFromSchema(): Schema - { - return $this->schemaManager->introspectSchema(); - } - - public function createToSchema(Schema $fromSchema): Schema - { - return clone $fromSchema; - } - - /** @return string[] */ - public function getSqlDiffToMigrate(Schema $fromSchema, Schema $toSchema): array - { - return $this->platform->getAlterSchemaSQL( - $this->schemaManager->createComparator()->compareSchemas($fromSchema, $toSchema), - ); - } -} diff --git a/vendor/doctrine/migrations/src/Provider/EmptySchemaProvider.php b/vendor/doctrine/migrations/src/Provider/EmptySchemaProvider.php deleted file mode 100644 index 3439124..0000000 --- a/vendor/doctrine/migrations/src/Provider/EmptySchemaProvider.php +++ /dev/null @@ -1,28 +0,0 @@ - $schemaManager */ - public function __construct(private readonly AbstractSchemaManager $schemaManager) - { - } - - public function createSchema(): Schema - { - return new Schema([], [], $this->schemaManager->createSchemaConfig()); - } -} diff --git a/vendor/doctrine/migrations/src/Provider/Exception/NoMappingFound.php b/vendor/doctrine/migrations/src/Provider/Exception/NoMappingFound.php deleted file mode 100644 index fd5fc51..0000000 --- a/vendor/doctrine/migrations/src/Provider/Exception/NoMappingFound.php +++ /dev/null @@ -1,15 +0,0 @@ -originalSchemaManipulator; - - return LazySchema::createLazyProxy(static fn () => $originalSchemaManipulator->createFromSchema()); - } - - public function createToSchema(Schema $fromSchema): Schema - { - $originalSchemaManipulator = $this->originalSchemaManipulator; - - if ($fromSchema instanceof LazySchema && ! $fromSchema->isLazyObjectInitialized()) { - return LazySchema::createLazyProxy(static fn () => $originalSchemaManipulator->createToSchema($fromSchema)); - } - - return $this->originalSchemaManipulator->createToSchema($fromSchema); - } - - /** @return string[] */ - public function getSqlDiffToMigrate(Schema $fromSchema, Schema $toSchema): array - { - if ( - $toSchema instanceof LazySchema - && ! $toSchema->isLazyObjectInitialized() - ) { - return []; - } - - return $this->originalSchemaManipulator->getSqlDiffToMigrate($fromSchema, $toSchema); - } -} diff --git a/vendor/doctrine/migrations/src/Provider/OrmSchemaProvider.php b/vendor/doctrine/migrations/src/Provider/OrmSchemaProvider.php deleted file mode 100644 index 750589e..0000000 --- a/vendor/doctrine/migrations/src/Provider/OrmSchemaProvider.php +++ /dev/null @@ -1,41 +0,0 @@ -entityManager = $em; - } - - public function createSchema(): Schema - { - /** @var array> $metadata */ - $metadata = $this->entityManager->getMetadataFactory()->getAllMetadata(); - - usort($metadata, static fn (ClassMetadata $a, ClassMetadata $b): int => $a->getTableName() <=> $b->getTableName()); - - $tool = new SchemaTool($this->entityManager); - - return $tool->getSchemaFromMetadata($metadata); - } -} diff --git a/vendor/doctrine/migrations/src/Provider/SchemaDiffProvider.php b/vendor/doctrine/migrations/src/Provider/SchemaDiffProvider.php deleted file mode 100644 index 3343719..0000000 --- a/vendor/doctrine/migrations/src/Provider/SchemaDiffProvider.php +++ /dev/null @@ -1,23 +0,0 @@ -toSchema = $schema; - } - - public function createSchema(): Schema - { - return $this->toSchema; - } -} diff --git a/vendor/doctrine/migrations/src/Query/Exception/InvalidArguments.php b/vendor/doctrine/migrations/src/Query/Exception/InvalidArguments.php deleted file mode 100644 index df73ab6..0000000 --- a/vendor/doctrine/migrations/src/Query/Exception/InvalidArguments.php +++ /dev/null @@ -1,23 +0,0 @@ - count($parameters)) { - throw InvalidArguments::wrongTypesArgumentCount($statement, count($parameters), count($types)); - } - } - - public function __toString(): string - { - return $this->statement; - } - - public function getStatement(): string - { - return $this->statement; - } - - /** @return mixed[] */ - public function getParameters(): array - { - return $this->parameters; - } - - /** @return mixed[] */ - public function getTypes(): array - { - return $this->types; - } -} diff --git a/vendor/doctrine/migrations/src/QueryWriter.php b/vendor/doctrine/migrations/src/QueryWriter.php deleted file mode 100644 index 9868d7a..0000000 --- a/vendor/doctrine/migrations/src/QueryWriter.php +++ /dev/null @@ -1,22 +0,0 @@ - $queriesByVersion */ - public function write( - string $path, - string $direction, - array $queriesByVersion, - ): bool; -} diff --git a/vendor/doctrine/migrations/src/Rollup.php b/vendor/doctrine/migrations/src/Rollup.php deleted file mode 100644 index 662faaa..0000000 --- a/vendor/doctrine/migrations/src/Rollup.php +++ /dev/null @@ -1,48 +0,0 @@ -migrationRepository->getMigrations(); - - if (count($versions) === 0) { - throw RollupFailed::noMigrationsFound(); - } - - if (count($versions) > 1) { - throw RollupFailed::tooManyMigrations(); - } - - $this->metadataStorage->reset(); - - $result = new ExecutionResult($versions->getItems()[0]->getVersion()); - $this->metadataStorage->complete($result); - - return $result->getVersion(); - } -} diff --git a/vendor/doctrine/migrations/src/SchemaDumper.php b/vendor/doctrine/migrations/src/SchemaDumper.php deleted file mode 100644 index f1938c9..0000000 --- a/vendor/doctrine/migrations/src/SchemaDumper.php +++ /dev/null @@ -1,158 +0,0 @@ - $schemaManager - * @param string[] $excludedTablesRegexes - */ - public function __construct( - private readonly AbstractPlatform $platform, - private readonly AbstractSchemaManager $schemaManager, - private readonly Generator $migrationGenerator, - private readonly SqlGenerator $migrationSqlGenerator, - private readonly array $excludedTablesRegexes = [], - ) { - } - - /** - * @param string[] $excludedTablesRegexes - * - * @throws NoTablesFound - */ - public function dump( - string $fqcn, - array $excludedTablesRegexes = [], - bool $formatted = false, - int $lineLength = 120, - ): string { - $schema = $this->schemaManager->introspectSchema(); - - $up = []; - $down = []; - - foreach ($schema->getTables() as $table) { - if ($this->shouldSkipTable($table, $excludedTablesRegexes)) { - continue; - } - - $upSql = $this->platform->getCreateTableSQL($table); - - $upCode = $this->migrationSqlGenerator->generate( - $upSql, - $formatted, - $lineLength, - ); - - if ($upCode !== '') { - $up[] = $upCode; - } - - $downSql = [$this->platform->getDropTableSQL($table->getQuotedName($this->platform))]; - - $downCode = $this->migrationSqlGenerator->generate( - $downSql, - $formatted, - $lineLength, - ); - - if ($downCode === '') { - continue; - } - - $down[] = $downCode; - } - - if (count($up) === 0) { - throw NoTablesFound::new(); - } - - $up = implode("\n", $up); - $down = implode("\n", $down); - - return $this->migrationGenerator->generateMigration( - $fqcn, - $up, - $down, - ); - } - - /** @param string[] $excludedTablesRegexes */ - private function shouldSkipTable(Table $table, array $excludedTablesRegexes): bool - { - foreach (array_merge($excludedTablesRegexes, $this->excludedTablesRegexes) as $regex) { - if (self::pregMatch($regex, $table->getName()) !== 0) { - return true; - } - } - - return false; - } - - /** - * A local wrapper for "preg_match" which will throw a InvalidArgumentException if there - * is an internal error in the PCRE engine. - * Copied from https://github.com/symfony/symfony/blob/62216ea67762b18982ca3db73c391b0748a49d49/src/Symfony/Component/Yaml/Parser.php#L1072-L1090 - * - * @internal - * - * @param mixed[] $matches - * @param int-mask-of $flags - */ - private static function pregMatch(string $pattern, string $subject, array|null &$matches = null, int $flags = 0, int $offset = 0): int - { - $errorMessages = []; - set_error_handler(static function (int $severity, string $message) use (&$errorMessages): bool { - $errorMessages[] = $message; - - return true; - }); - - try { - $ret = preg_match($pattern, $subject, $matches, $flags, $offset); - } finally { - restore_error_handler(); - } - - if ($ret === false) { - throw new InvalidArgumentException(match (preg_last_error()) { - PREG_INTERNAL_ERROR => sprintf('Internal PCRE error, please check your Regex. Reported errors: %s.', implode(', ', $errorMessages)), - default => preg_last_error_msg(), - }); - } - - return $ret; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/BooleanStringFormatter.php b/vendor/doctrine/migrations/src/Tools/BooleanStringFormatter.php deleted file mode 100644 index 187e903..0000000 --- a/vendor/doctrine/migrations/src/Tools/BooleanStringFormatter.php +++ /dev/null @@ -1,27 +0,0 @@ - true, - 'false', '0' => false, - default => $default, - }; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/BytesFormatter.php b/vendor/doctrine/migrations/src/Tools/BytesFormatter.php deleted file mode 100644 index d63062e..0000000 --- a/vendor/doctrine/migrations/src/Tools/BytesFormatter.php +++ /dev/null @@ -1,27 +0,0 @@ -setAliases(['current']) - ->setDescription('Outputs the current version'); - - parent::configure(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $aliasResolver = $this->getDependencyFactory()->getVersionAliasResolver(); - - $version = $aliasResolver->resolveVersionAlias('current'); - if ((string) $version === '0') { - $description = '(No migration executed yet)'; - } else { - try { - $availableMigration = $this->getDependencyFactory()->getMigrationRepository()->getMigration($version); - $description = $availableMigration->getMigration()->getDescription(); - } catch (MigrationClassNotFound) { - $description = '(Migration info not available)'; - } - } - - $this->io->text(sprintf( - "%s%s\n", - (string) $version, - $description !== '' ? ' - ' . $description : '', - )); - - return 0; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/DiffCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/DiffCommand.php deleted file mode 100644 index 3bebfc5..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/DiffCommand.php +++ /dev/null @@ -1,196 +0,0 @@ -setAliases(['diff']) - ->setDescription('Generate a migration by comparing your current database to your mapping information.') - ->setHelp(<<<'EOT' -The %command.name% command generates a migration by comparing your current database to your mapping information: - - %command.full_name% - -EOT) - ->addOption( - 'namespace', - null, - InputOption::VALUE_REQUIRED, - 'The namespace to use for the migration (must be in the list of configured namespaces)', - ) - ->addOption( - 'filter-expression', - null, - InputOption::VALUE_REQUIRED, - 'Tables which are filtered by Regular Expression.', - ) - ->addOption( - 'formatted', - null, - InputOption::VALUE_NONE, - 'Format the generated SQL.', - ) - ->addOption( - 'line-length', - null, - InputOption::VALUE_REQUIRED, - 'Max line length of unformatted lines.', - '120', - ) - ->addOption( - 'check-database-platform', - null, - InputOption::VALUE_OPTIONAL, - 'Check Database Platform to the generated code.', - false, - ) - ->addOption( - 'allow-empty-diff', - null, - InputOption::VALUE_NONE, - 'Do not throw an exception when no changes are detected.', - ) - ->addOption( - 'from-empty-schema', - null, - InputOption::VALUE_NONE, - 'Generate a full migration as if the current database was empty.', - ); - } - - /** @throws InvalidOptionUsage */ - protected function execute( - InputInterface $input, - OutputInterface $output, - ): int { - $filterExpression = (string) $input->getOption('filter-expression'); - if ($filterExpression === '') { - $filterExpression = null; - } - - $formatted = filter_var($input->getOption('formatted'), FILTER_VALIDATE_BOOLEAN); - $lineLength = (int) $input->getOption('line-length'); - $allowEmptyDiff = $input->getOption('allow-empty-diff'); - $checkDbPlatform = filter_var($input->getOption('check-database-platform'), FILTER_VALIDATE_BOOLEAN); - $fromEmptySchema = $input->getOption('from-empty-schema'); - - if ($formatted) { - if (! class_exists(SqlFormatter::class)) { - throw InvalidOptionUsage::new( - 'The "--formatted" option can only be used if the sql formatter is installed. Please run "composer require doctrine/sql-formatter".', - ); - } - } - - $namespace = $this->getNamespace($input, $output); - - $statusCalculator = $this->getDependencyFactory()->getMigrationStatusCalculator(); - $executedUnavailableMigrations = $statusCalculator->getExecutedUnavailableMigrations(); - $newMigrations = $statusCalculator->getNewMigrations(); - - if (! $this->checkNewMigrationsOrExecutedUnavailable($newMigrations, $executedUnavailableMigrations, $input)) { - $this->io->error('Migration cancelled!'); - - return 3; - } - - $fqcn = $this->getDependencyFactory()->getClassNameGenerator()->generateClassName($namespace); - - $diffGenerator = $this->getDependencyFactory()->getDiffGenerator(); - - try { - $path = $diffGenerator->generate( - $fqcn, - $filterExpression, - $formatted, - $lineLength, - $checkDbPlatform, - $fromEmptySchema, - ); - } catch (NoChangesDetected $exception) { - if ($allowEmptyDiff) { - $this->io->error($exception->getMessage()); - - return 0; - } - - throw $exception; - } - - $this->io->text([ - sprintf('Generated new migration class to "%s"', $path), - '', - sprintf( - 'To run just this migration for testing purposes, you can use migrations:execute --up \'%s\'', - addslashes($fqcn), - ), - '', - sprintf( - 'To revert the migration you can use migrations:execute --down \'%s\'', - addslashes($fqcn), - ), - '', - ]); - - return 0; - } - - private function checkNewMigrationsOrExecutedUnavailable( - AvailableMigrationsList $newMigrations, - ExecutedMigrationsList $executedUnavailableMigrations, - InputInterface $input, - ): bool { - if (count($newMigrations) === 0 && count($executedUnavailableMigrations) === 0) { - return true; - } - - if (count($newMigrations) !== 0) { - $this->io->warning(sprintf( - 'You have %d available migrations to execute.', - count($newMigrations), - )); - } - - if (count($executedUnavailableMigrations) !== 0) { - $this->io->warning(sprintf( - 'You have %d previously executed migrations in the database that are not registered migrations.', - count($executedUnavailableMigrations), - )); - } - - return $this->canExecute('Are you sure you wish to continue?', $input); - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/DoctrineCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/DoctrineCommand.php deleted file mode 100644 index 661f30d..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/DoctrineCommand.php +++ /dev/null @@ -1,179 +0,0 @@ -addOption( - 'configuration', - null, - InputOption::VALUE_REQUIRED, - 'The path to a migrations configuration file. [default: any of migrations.{php,xml,json,yml,yaml}]', - ); - - $this->addOption( - 'em', - null, - InputOption::VALUE_REQUIRED, - 'The name of the entity manager to use.', - ); - - $this->addOption( - 'conn', - null, - InputOption::VALUE_REQUIRED, - 'The name of the connection to use.', - ); - - if ($this->dependencyFactory !== null) { - return; - } - - $this->addOption( - 'db-configuration', - null, - InputOption::VALUE_REQUIRED, - 'The path to a database connection configuration file.', - 'migrations-db.php', - ); - } - - protected function initialize(InputInterface $input, OutputInterface $output): void - { - $this->io = new SymfonyStyle($input, $output); - - $configurationParameter = $input->getOption('configuration'); - if ($this->dependencyFactory === null) { - $configurationLoader = new ConfigurationFileWithFallback( - is_string($configurationParameter) - ? $configurationParameter - : null, - ); - $connectionLoader = new ConfigurationFile($input->getOption('db-configuration')); - $this->dependencyFactory = DependencyFactory::fromConnection($configurationLoader, $connectionLoader); - } elseif (is_string($configurationParameter)) { - $configurationLoader = new ConfigurationFileWithFallback($configurationParameter); - $this->dependencyFactory->setConfigurationLoader($configurationLoader); - } - - $dependencyFactory = $this->dependencyFactory; - - $this->setNamedEmOrConnection($input); - - if ($dependencyFactory->isFrozen()) { - return; - } - - $logger = new ConsoleLogger($output); - $dependencyFactory->setService(LoggerInterface::class, $logger); - $dependencyFactory->freeze(); - } - - protected function getDependencyFactory(): DependencyFactory - { - if ($this->dependencyFactory === null) { - throw DependenciesNotSatisfied::new(); - } - - return $this->dependencyFactory; - } - - protected function canExecute(string $question, InputInterface $input): bool - { - return ! $input->isInteractive() || $this->io->confirm($question); - } - - private function setNamedEmOrConnection(InputInterface $input): void - { - assert($this->dependencyFactory !== null); - $emName = $input->getOption('em'); - $connName = $input->getOption('conn'); - if ($emName !== null && $connName !== null) { - throw new InvalidOptionUsage('You can specify only one of the --em and --conn options.'); - } - - if ($this->dependencyFactory->hasEntityManager() && $emName !== null) { - $this->dependencyFactory->getConfiguration()->setEntityManagerName($emName); - - return; - } - - if ($connName !== null) { - $this->dependencyFactory->getConfiguration()->setConnectionName($connName); - - return; - } - } - - final protected function getNamespace(InputInterface $input, OutputInterface $output): string - { - $configuration = $this->getDependencyFactory()->getConfiguration(); - - $namespace = $input->getOption('namespace'); - if ($namespace === '') { - $namespace = null; - } - - $dirs = $configuration->getMigrationDirectories(); - if ($namespace === null && count($dirs) === 1) { - $namespace = key($dirs); - } elseif ($namespace === null && count($dirs) > 1) { - $helper = $this->getHelper('question'); - $question = new ChoiceQuestion( - 'Please choose a namespace (defaults to the first one)', - array_keys($dirs), - 0, - ); - $namespace = $helper->ask($input, $output, $question); - $this->io->text(sprintf('You have selected the "%s" namespace', $namespace)); - } - - if (! isset($dirs[$namespace])) { - throw new Exception(sprintf('Path not defined for the namespace "%s"', $namespace)); - } - - assert(is_string($namespace)); - - return $namespace; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/DumpSchemaCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/DumpSchemaCommand.php deleted file mode 100644 index 724d0cf..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/DumpSchemaCommand.php +++ /dev/null @@ -1,133 +0,0 @@ -setAliases(['dump-schema']) - ->setDescription('Dump the schema for your database to a migration.') - ->setHelp(<<<'EOT' -The %command.name% command dumps the schema for your database to a migration: - - %command.full_name% - -After dumping your schema to a migration, you can rollup your migrations using the migrations:rollup command. -EOT) - ->addOption( - 'formatted', - null, - InputOption::VALUE_NONE, - 'Format the generated SQL.', - ) - ->addOption( - 'namespace', - null, - InputOption::VALUE_REQUIRED, - 'Namespace to use for the generated migrations (defaults to the first namespace definition).', - ) - ->addOption( - 'filter-tables', - null, - InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, - 'Filter the tables to dump via Regex.', - ) - ->addOption( - 'line-length', - null, - InputOption::VALUE_OPTIONAL, - 'Max line length of unformatted lines.', - '120', - ); - } - - /** @throws SchemaDumpRequiresNoMigrations */ - public function execute( - InputInterface $input, - OutputInterface $output, - ): int { - $formatted = $input->getOption('formatted'); - $lineLength = (int) $input->getOption('line-length'); - - $schemaDumper = $this->getDependencyFactory()->getSchemaDumper(); - - if ($formatted) { - if (! class_exists(SqlFormatter::class)) { - throw InvalidOptionUsage::new( - 'The "--formatted" option can only be used if the sql formatter is installed. Please run "composer require doctrine/sql-formatter".', - ); - } - } - - $namespace = $this->getNamespace($input, $output); - - $this->checkNoPreviousDumpExistsForNamespace($namespace); - - $fqcn = $this->getDependencyFactory()->getClassNameGenerator()->generateClassName($namespace); - - $path = $schemaDumper->dump( - $fqcn, - $input->getOption('filter-tables'), - $formatted, - $lineLength, - ); - - $this->io->text([ - sprintf('Dumped your schema to a new migration class at "%s"', $path), - '', - sprintf( - 'To run just this migration for testing purposes, you can use migrations:execute --up \'%s\'', - addslashes($fqcn), - ), - '', - sprintf( - 'To revert the migration you can use migrations:execute --down \'%s\'', - addslashes($fqcn), - ), - '', - 'To use this as a rollup migration you can use the migrations:rollup command.', - '', - ]); - - return 0; - } - - private function checkNoPreviousDumpExistsForNamespace(string $namespace): void - { - $migrations = $this->getDependencyFactory()->getMigrationRepository()->getMigrations(); - foreach ($migrations->getItems() as $migration) { - if (str_contains((string) $migration->getVersion(), $namespace)) { - throw SchemaDumpRequiresNoMigrations::new($namespace); - } - } - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/ExecuteCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/ExecuteCommand.php deleted file mode 100644 index 92d4101..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/ExecuteCommand.php +++ /dev/null @@ -1,178 +0,0 @@ -setAliases(['execute']) - ->setDescription( - 'Execute one or more migration versions up or down manually.', - ) - ->addArgument( - 'versions', - InputArgument::REQUIRED | InputArgument::IS_ARRAY, - 'The versions to execute.', - null, - ) - ->addOption( - 'write-sql', - null, - InputOption::VALUE_OPTIONAL, - 'The path to output the migration SQL file. Defaults to current working directory.', - false, - ) - ->addOption( - 'dry-run', - null, - InputOption::VALUE_NONE, - 'Execute the migration as a dry run.', - ) - ->addOption( - 'up', - null, - InputOption::VALUE_NONE, - 'Execute the migration up.', - ) - ->addOption( - 'down', - null, - InputOption::VALUE_NONE, - 'Execute the migration down.', - ) - ->addOption( - 'query-time', - null, - InputOption::VALUE_NONE, - 'Time all the queries individually.', - ) - ->setHelp(<<<'EOT' -The %command.name% command executes migration versions up or down manually: - - %command.full_name% FQCN - -You can show more information about the process by increasing the verbosity level. To see the -executed queries, set the level to debug with -vv: - - %command.full_name% FQCN -vv - -If no --up or --down option is specified it defaults to up: - - %command.full_name% FQCN --down - -You can also execute the migration as a --dry-run: - - %command.full_name% FQCN --dry-run - -You can output the prepared SQL statements to a file with --write-sql: - - %command.full_name% FQCN --write-sql - -Or you can also execute the migration without a warning message which you need to interact with: - - %command.full_name% FQCN --no-interaction - -All the previous commands accept multiple migration versions, allowing you run execute more than -one migration at once: - - %command.full_name% FQCN-1 FQCN-2 ...FQCN-n - -EOT); - - parent::configure(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $migratorConfigurationFactory = $this->getDependencyFactory()->getConsoleInputMigratorConfigurationFactory(); - $migratorConfiguration = $migratorConfigurationFactory->getMigratorConfiguration($input); - - $databaseName = (string) $this->getDependencyFactory()->getConnection()->getDatabase(); - $question = sprintf( - 'WARNING! You are about to execute a migration in database "%s" that could result in schema changes and data loss. Are you sure you wish to continue?', - $databaseName === '' ? '' : $databaseName, - ); - if (! $migratorConfiguration->isDryRun() && ! $this->canExecute($question, $input)) { - $this->io->error('Migration cancelled!'); - - return 1; - } - - $this->getDependencyFactory()->getMetadataStorage()->ensureInitialized(); - - $versions = $input->getArgument('versions'); - $direction = $input->getOption('down') !== false - ? Direction::DOWN - : Direction::UP; - - $path = $input->getOption('write-sql') ?? getcwd(); - - if (is_string($path) && ! $this->isPathWritable($path)) { - $this->io->error(sprintf('The path "%s" not writeable!', $path)); - - return 1; - } - - $planCalculator = $this->getDependencyFactory()->getMigrationPlanCalculator(); - $plan = $planCalculator->getPlanForVersions(array_map(static fn (string $version): Version => new Version($version), $versions), $direction); - - $this->getDependencyFactory()->getLogger()->notice( - 'Executing' . ($migratorConfiguration->isDryRun() ? ' (dry-run)' : '') . ' {versions} {direction}', - [ - 'direction' => $plan->getDirection(), - 'versions' => implode(', ', $versions), - ], - ); - - $migrator = $this->getDependencyFactory()->getMigrator(); - $sql = $migrator->migrate($plan, $migratorConfiguration); - - if (is_string($path)) { - $writer = $this->getDependencyFactory()->getQueryWriter(); - $writer->write($path, $direction, $sql); - } - - $this->io->success(sprintf( - 'Successfully migrated version(s): %s: [%s]', - implode(', ', $versions), - strtoupper($plan->getDirection()), - )); - $this->io->newLine(); - - return 0; - } - - private function isPathWritable(string $path): bool - { - return is_writable($path) || is_dir($path) || is_writable(dirname($path)); - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/GenerateCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/GenerateCommand.php deleted file mode 100644 index 043d648..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/GenerateCommand.php +++ /dev/null @@ -1,71 +0,0 @@ -setAliases(['generate']) - ->setDescription('Generate a blank migration class.') - ->addOption( - 'namespace', - null, - InputOption::VALUE_REQUIRED, - 'The namespace to use for the migration (must be in the list of configured namespaces)', - ) - ->setHelp(<<<'EOT' -The %command.name% command generates a blank migration class: - - %command.full_name% - -EOT); - - parent::configure(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $migrationGenerator = $this->getDependencyFactory()->getMigrationGenerator(); - - $namespace = $this->getNamespace($input, $output); - - $fqcn = $this->getDependencyFactory()->getClassNameGenerator()->generateClassName($namespace); - - $path = $migrationGenerator->generateMigration($fqcn); - - $this->io->text([ - sprintf('Generated new migration class to "%s"', $path), - '', - sprintf( - 'To run just this migration for testing purposes, you can use migrations:execute --up \'%s\'', - $fqcn, - ), - '', - sprintf( - 'To revert the migration you can use migrations:execute --down \'%s\'', - $fqcn, - ), - '', - ]); - - return 0; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/LatestCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/LatestCommand.php deleted file mode 100644 index 5ce6af0..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/LatestCommand.php +++ /dev/null @@ -1,53 +0,0 @@ -setAliases(['latest']) - ->setDescription('Outputs the latest version'); - - parent::configure(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $aliasResolver = $this->getDependencyFactory()->getVersionAliasResolver(); - - try { - $version = $aliasResolver->resolveVersionAlias('latest'); - $availableMigration = $this->getDependencyFactory()->getMigrationRepository()->getMigration($version); - $description = $availableMigration->getMigration()->getDescription(); - } catch (NoMigrationsToExecute) { - $version = '0'; - $description = ''; - } - - $this->io->text(sprintf( - "%s%s\n", - $version, - $description !== '' ? ' - ' . $description : '', - )); - - return 0; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/ListCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/ListCommand.php deleted file mode 100644 index 86aa661..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/ListCommand.php +++ /dev/null @@ -1,70 +0,0 @@ -setAliases(['list-migrations']) - ->setDescription('Display a list of all available migrations and their status.') - ->setHelp(<<<'EOT' -The %command.name% command outputs a list of all available migrations and their status: - - %command.full_name% -EOT); - - parent::configure(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $versions = $this->getSortedVersions( - $this->getDependencyFactory()->getMigrationPlanCalculator()->getMigrations(), // available migrations - $this->getDependencyFactory()->getMetadataStorage()->getExecutedMigrations(), // executed migrations - ); - - $this->getDependencyFactory()->getMigrationStatusInfosHelper()->listVersions($versions, $output); - - return 0; - } - - /** @return Version[] */ - private function getSortedVersions(AvailableMigrationsList $availableMigrations, ExecutedMigrationsList $executedMigrations): array - { - $availableVersions = array_map(static fn (AvailableMigration $availableMigration): Version => $availableMigration->getVersion(), $availableMigrations->getItems()); - - $executedVersions = array_map(static fn (ExecutedMigration $executedMigration): Version => $executedMigration->getVersion(), $executedMigrations->getItems()); - - $versions = array_unique(array_merge($availableVersions, $executedVersions)); - - $comparator = $this->getDependencyFactory()->getVersionComparator(); - uasort($versions, $comparator->compare(...)); - - return $versions; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/MigrateCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/MigrateCommand.php deleted file mode 100644 index 956a2fb..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/MigrateCommand.php +++ /dev/null @@ -1,308 +0,0 @@ -setAliases(['migrate']) - ->setDescription( - 'Execute a migration to a specified version or the latest available version.', - ) - ->addArgument( - 'version', - InputArgument::OPTIONAL, - 'The version FQCN or alias (first, prev, next, latest) to migrate to.', - 'latest', - ) - ->addOption( - 'write-sql', - null, - InputOption::VALUE_OPTIONAL, - 'The path to output the migration SQL file. Defaults to current working directory.', - false, - ) - ->addOption( - 'dry-run', - null, - InputOption::VALUE_NONE, - 'Execute the migration as a dry run.', - ) - ->addOption( - 'query-time', - null, - InputOption::VALUE_NONE, - 'Time all the queries individually.', - ) - ->addOption( - 'allow-no-migration', - null, - InputOption::VALUE_NONE, - 'Do not throw an exception if no migration is available.', - ) - ->addOption( - 'all-or-nothing', - null, - InputOption::VALUE_OPTIONAL, - 'Wrap the entire migration in a transaction.', - ConsoleInputMigratorConfigurationFactory::ABSENT_CONFIG_VALUE, - ) - ->addOption( - 'no-all-or-nothing', - null, - InputOption::VALUE_NONE, - 'Disable wrapping the entire migration in a transaction.', - ) - ->setHelp(<<<'EOT' -The %command.name% command executes a migration to a specified version or the latest available version: - - %command.full_name% - -You can show more information about the process by increasing the verbosity level. To see the -executed queries, set the level to debug with -vv: - - %command.full_name% -vv - -You can optionally manually specify the version you wish to migrate to: - - %command.full_name% FQCN - -You can specify the version you wish to migrate to using an alias: - - %command.full_name% prev - These alias are defined: first, latest, prev, current and next - -You can specify the version you wish to migrate to using a number against the current version: - - %command.full_name% current+3 - -You can also execute the migration as a --dry-run: - - %command.full_name% FQCN --dry-run - -You can output the prepared SQL statements to a file with --write-sql: - - %command.full_name% FQCN --write-sql - -Or you can also execute the migration without a warning message which you need to interact with --no-interaction: - - %command.full_name% --no-interaction - -You can also time all the different queries if you want to know which one is taking so long with --query-time: - - %command.full_name% --query-time - -You can skip throwing an exception if no migration is available with --allow-no-migration: - - %command.full_name% --allow-no-migration - -You can wrap the entire migration in a transaction with --all-or-nothing: - - %command.full_name% --all-or-nothing - -EOT); - - parent::configure(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $migratorConfigurationFactory = $this->getDependencyFactory()->getConsoleInputMigratorConfigurationFactory(); - $migratorConfiguration = $migratorConfigurationFactory->getMigratorConfiguration($input); - - $databaseName = (string) $this->getDependencyFactory()->getConnection()->getDatabase(); - $question = sprintf( - 'WARNING! You are about to execute a migration in database "%s" that could result in schema changes and data loss. Are you sure you wish to continue?', - $databaseName === '' ? '' : $databaseName, - ); - if (! $migratorConfiguration->isDryRun() && ! $this->canExecute($question, $input)) { - $this->io->error('Migration cancelled!'); - - return 3; - } - - $this->getDependencyFactory()->getMetadataStorage()->ensureInitialized(); - - $allowNoMigration = $input->getOption('allow-no-migration'); - $versionAlias = $input->getArgument('version'); - - $path = $input->getOption('write-sql') ?? getcwd(); - - if (is_string($path) && ! $this->isPathWritable($path)) { - $this->io->error(sprintf('The path "%s" not writeable!', $path)); - - return 1; - } - - $migrationRepository = $this->getDependencyFactory()->getMigrationRepository(); - if (count($migrationRepository->getMigrations()) === 0) { - $message = sprintf( - 'The version "%s" couldn\'t be reached, there are no registered migrations.', - $versionAlias, - ); - - if ($allowNoMigration) { - $this->io->warning($message); - - return 0; - } - - $this->io->error($message); - - return 1; - } - - try { - $version = $this->getDependencyFactory()->getVersionAliasResolver()->resolveVersionAlias($versionAlias); - } catch (UnknownMigrationVersion) { - $this->io->error(sprintf( - 'Unknown version: %s', - OutputFormatter::escape($versionAlias), - )); - - return 1; - } catch (NoMigrationsToExecute | NoMigrationsFoundWithCriteria) { - return $this->exitForAlias($versionAlias); - } - - $planCalculator = $this->getDependencyFactory()->getMigrationPlanCalculator(); - $statusCalculator = $this->getDependencyFactory()->getMigrationStatusCalculator(); - $executedUnavailableMigrations = $statusCalculator->getExecutedUnavailableMigrations(); - - if ($this->checkExecutedUnavailableMigrations($executedUnavailableMigrations, $input) === false) { - return 3; - } - - $plan = $planCalculator->getPlanUntilVersion($version); - - if (count($plan) === 0) { - return $this->exitForAlias($versionAlias); - } - - $this->getDependencyFactory()->getLogger()->notice( - 'Migrating' . ($migratorConfiguration->isDryRun() ? ' (dry-run)' : '') . ' {direction} to {to}', - [ - 'direction' => $plan->getDirection(), - 'to' => (string) $version, - ], - ); - - $migrator = $this->getDependencyFactory()->getMigrator(); - $sql = $migrator->migrate($plan, $migratorConfiguration); - - if (is_string($path)) { - $writer = $this->getDependencyFactory()->getQueryWriter(); - $writer->write($path, $plan->getDirection(), $sql); - } - - $this->io->success(sprintf( - 'Successfully migrated to version: %s', - $version, - )); - $this->io->newLine(); - - return 0; - } - - private function checkExecutedUnavailableMigrations( - ExecutedMigrationsList $executedUnavailableMigrations, - InputInterface $input, - ): bool { - if (count($executedUnavailableMigrations) !== 0) { - $this->io->warning(sprintf( - 'You have %s previously executed migrations in the database that are not registered migrations.', - count($executedUnavailableMigrations), - )); - - foreach ($executedUnavailableMigrations->getItems() as $executedUnavailableMigration) { - $this->io->text(sprintf( - '>> %s (%s)', - $executedUnavailableMigration->getExecutedAt()?->format('Y-m-d H:i:s'), - $executedUnavailableMigration->getVersion(), - )); - } - - $question = 'Are you sure you wish to continue?'; - - if (! $this->canExecute($question, $input)) { - $this->io->error('Migration cancelled!'); - - return false; - } - } - - return true; - } - - private function exitForAlias(string $versionAlias): int - { - $version = $this->getDependencyFactory()->getVersionAliasResolver()->resolveVersionAlias('current'); - - // Allow meaningful message when latest version already reached. - if (in_array($versionAlias, ['current', 'latest', 'first'], true)) { - $message = sprintf( - 'Already at the %s version ("%s")', - $versionAlias, - (string) $version, - ); - - $this->io->success($message); - } elseif (in_array($versionAlias, ['next', 'prev'], true) || str_starts_with($versionAlias, 'current')) { - $message = sprintf( - 'The version "%s" couldn\'t be reached, you are at version "%s"', - $versionAlias, - (string) $version, - ); - - $this->io->error($message); - } else { - $message = sprintf( - 'You are already at version "%s"', - (string) $version, - ); - - $this->io->success($message); - } - - return 0; - } - - private function isPathWritable(string $path): bool - { - return is_writable($path) || is_dir($path) || is_writable(dirname($path)); - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/RollupCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/RollupCommand.php deleted file mode 100644 index 1c97985..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/RollupCommand.php +++ /dev/null @@ -1,63 +0,0 @@ -setAliases(['rollup']) - ->setDescription('Rollup migrations by deleting all tracked versions and insert the one version that exists.') - ->setHelp(<<<'EOT' -The %command.name% command rolls up migrations by deleting all tracked versions and -inserts the one version that exists that was created with the migrations:dump-schema command. - - %command.full_name% - -To dump your schema to a migration version you can use the migrations:dump-schema command. -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $question = sprintf( - 'WARNING! You are about to execute a migration in database "%s" that could result in schema changes and data loss. Are you sure you wish to continue?', - $this->getDependencyFactory()->getConnection()->getDatabase() ?? '', - ); - - if (! $this->canExecute($question, $input)) { - $this->io->error('Migration cancelled!'); - - return 3; - } - - $this->getDependencyFactory()->getMetadataStorage()->ensureInitialized(); - $version = $this->getDependencyFactory()->getRollup()->rollup(); - - $this->io->success(sprintf( - 'Rolled up migrations to version %s', - (string) $version, - )); - - return 0; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/StatusCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/StatusCommand.php deleted file mode 100644 index ce710dc..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/StatusCommand.php +++ /dev/null @@ -1,42 +0,0 @@ -setAliases(['status']) - ->setDescription('View the status of a set of migrations.') - ->setHelp(<<<'EOT' -The %command.name% command outputs the status of a set of migrations: - - %command.full_name% -EOT); - - parent::configure(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $infosHelper = $this->getDependencyFactory()->getMigrationStatusInfosHelper(); - $infosHelper->showMigrationsInfo($output); - - return 0; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/SyncMetadataCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/SyncMetadataCommand.php deleted file mode 100644 index 3bb68ed..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/SyncMetadataCommand.php +++ /dev/null @@ -1,44 +0,0 @@ -setAliases(['sync-metadata-storage']) - ->setDescription('Ensures that the metadata storage is at the latest version.') - ->setHelp(<<<'EOT' -The way metadata is stored in the database can change between releases. -The %command.name% command updates metadata storage to the latest version, -ensuring it is ready to receive migrations generated by the current version of Doctrine Migrations. - - - %command.full_name% -EOT); - } - - public function execute( - InputInterface $input, - OutputInterface $output, - ): int { - $this->getDependencyFactory()->getMetadataStorage()->ensureInitialized(); - - $this->io->success('Metadata storage synchronized'); - - return 0; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/UpToDateCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/UpToDateCommand.php deleted file mode 100644 index dfcf078..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/UpToDateCommand.php +++ /dev/null @@ -1,111 +0,0 @@ -setAliases(['up-to-date']) - ->setDescription('Tells you if your schema is up-to-date.') - ->addOption('fail-on-unregistered', 'u', InputOption::VALUE_NONE, 'Whether to fail when there are unregistered extra migrations found') - ->addOption('list-migrations', 'l', InputOption::VALUE_NONE, 'Show a list of missing or not migrated versions.') - ->setHelp(<<<'EOT' -The %command.name% command tells you if your schema is up-to-date: - - %command.full_name% -EOT); - - parent::configure(); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $statusCalculator = $this->getDependencyFactory()->getMigrationStatusCalculator(); - - $executedUnavailableMigrations = $statusCalculator->getExecutedUnavailableMigrations(); - $newMigrations = $statusCalculator->getNewMigrations(); - $newMigrationsCount = count($newMigrations); - $executedUnavailableMigrationsCount = count($executedUnavailableMigrations); - - if ($newMigrationsCount === 0 && $executedUnavailableMigrationsCount === 0) { - $this->io->success('Up-to-date! No migrations to execute.'); - - return 0; - } - - $exitCode = 0; - if ($newMigrationsCount > 0) { - $this->io->error(sprintf( - 'Out-of-date! %u migration%s available to execute.', - $newMigrationsCount, - $newMigrationsCount > 1 ? 's are' : ' is', - )); - $exitCode = 1; - } - - if ($executedUnavailableMigrationsCount > 0) { - $this->io->error(sprintf( - 'You have %1$u previously executed migration%3$s in the database that %2$s registered migration%3$s.', - $executedUnavailableMigrationsCount, - $executedUnavailableMigrationsCount > 1 ? 'are not' : 'is not a', - $executedUnavailableMigrationsCount > 1 ? 's' : '', - )); - if ($input->getOption('fail-on-unregistered')) { - $exitCode = 2; - } - } - - if ($input->getOption('list-migrations')) { - $versions = $this->getSortedVersions($newMigrations, $executedUnavailableMigrations); - $this->getDependencyFactory()->getMigrationStatusInfosHelper()->listVersions($versions, $output); - - $this->io->newLine(); - } - - return $exitCode; - } - - /** @return Version[] */ - private function getSortedVersions(AvailableMigrationsList $newMigrations, ExecutedMigrationsList $executedUnavailableMigrations): array - { - $executedUnavailableVersion = array_map(static fn (ExecutedMigration $executedMigration): Version => $executedMigration->getVersion(), $executedUnavailableMigrations->getItems()); - - $newVersions = array_map(static fn (AvailableMigration $availableMigration): Version => $availableMigration->getVersion(), $newMigrations->getItems()); - - $versions = array_unique(array_merge($executedUnavailableVersion, $newVersions)); - - $comparator = $this->getDependencyFactory()->getVersionComparator(); - uasort($versions, $comparator->compare(...)); - - return $versions; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Command/VersionCommand.php b/vendor/doctrine/migrations/src/Tools/Console/Command/VersionCommand.php deleted file mode 100644 index 7e40536..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Command/VersionCommand.php +++ /dev/null @@ -1,260 +0,0 @@ -setAliases(['version']) - ->setDescription('Manually add and delete migration versions from the version table.') - ->addArgument( - 'version', - InputArgument::OPTIONAL, - 'The version to add or delete.', - null, - ) - ->addOption( - 'add', - null, - InputOption::VALUE_NONE, - 'Add the specified version.', - ) - ->addOption( - 'delete', - null, - InputOption::VALUE_NONE, - 'Delete the specified version.', - ) - ->addOption( - 'all', - null, - InputOption::VALUE_NONE, - 'Apply to all the versions.', - ) - ->addOption( - 'range-from', - null, - InputOption::VALUE_OPTIONAL, - 'Apply from specified version.', - ) - ->addOption( - 'range-to', - null, - InputOption::VALUE_OPTIONAL, - 'Apply to specified version.', - ) - ->setHelp(<<<'EOT' -The %command.name% command allows you to manually add, delete or synchronize migration versions from the version table: - - %command.full_name% MIGRATION-FQCN --add - -If you want to delete a version you can use the --delete option: - - %command.full_name% MIGRATION-FQCN --delete - -If you want to synchronize by adding or deleting all migration versions available in the version table you can use the --all option: - - %command.full_name% --add --all - %command.full_name% --delete --all - -If you want to synchronize by adding or deleting some range of migration versions available in the version table you can use the --range-from/--range-to option: - - %command.full_name% --add --range-from=MIGRATION-FQCN --range-to=MIGRATION-FQCN - %command.full_name% --delete --range-from=MIGRATION-FQCN --range-to=MIGRATION-FQCN - -You can also execute this command without a warning message which you need to interact with: - - %command.full_name% --no-interaction -EOT); - - parent::configure(); - } - - /** @throws InvalidOptionUsage */ - protected function execute(InputInterface $input, OutputInterface $output): int - { - if ($input->getOption('add') === false && $input->getOption('delete') === false) { - throw InvalidOptionUsage::new('You must specify whether you want to --add or --delete the specified version.'); - } - - $this->markMigrated = $input->getOption('add'); - - if ($input->isInteractive()) { - $question = 'WARNING! You are about to add, delete or synchronize migration versions from the version table that could result in data lost. Are you sure you wish to continue?'; - - $confirmation = $this->io->confirm($question); - - if ($confirmation) { - $this->markVersions($input); - } else { - $this->io->error('Migration cancelled!'); - } - } else { - $this->markVersions($input); - } - - return 0; - } - - /** @throws InvalidOptionUsage */ - private function markVersions(InputInterface $input): void - { - $affectedVersion = $input->getArgument('version'); - $allOption = $input->getOption('all'); - $rangeFromOption = $input->getOption('range-from'); - $rangeToOption = $input->getOption('range-to'); - - if ($allOption === true && ($rangeFromOption !== null || $rangeToOption !== null)) { - throw InvalidOptionUsage::new( - 'Options --all and --range-to/--range-from both used. You should use only one of them.', - ); - } - - if ($rangeFromOption !== null xor $rangeToOption !== null) { - throw InvalidOptionUsage::new( - 'Options --range-to and --range-from should be used together.', - ); - } - - $executedMigrations = $this->getDependencyFactory()->getMetadataStorage()->getExecutedMigrations(); - $availableVersions = $this->getDependencyFactory()->getMigrationPlanCalculator()->getMigrations(); - if ($allOption === true) { - if ($input->getOption('delete') === true) { - foreach ($executedMigrations->getItems() as $availableMigration) { - $this->mark($input, $availableMigration->getVersion(), false, $executedMigrations); - } - } - - foreach ($availableVersions->getItems() as $availableMigration) { - $this->mark($input, $availableMigration->getVersion(), true, $executedMigrations); - } - } elseif ($affectedVersion !== null) { - $this->mark($input, new Version($affectedVersion), false, $executedMigrations); - } elseif ($rangeFromOption !== null && $rangeToOption !== null) { - $migrate = false; - foreach ($availableVersions->getItems() as $availableMigration) { - if ((string) $availableMigration->getVersion() === $rangeFromOption) { - $migrate = true; - } - - if ($migrate) { - $this->mark($input, $availableMigration->getVersion(), true, $executedMigrations); - } - - if ((string) $availableMigration->getVersion() === $rangeToOption) { - break; - } - } - } else { - throw InvalidOptionUsage::new('You must specify the version or use the --all argument.'); - } - } - - /** - * @throws VersionAlreadyExists - * @throws VersionDoesNotExist - * @throws UnknownMigrationVersion - */ - private function mark(InputInterface $input, Version $version, bool $all, ExecutedMigrationsList $executedMigrations): void - { - try { - $availableMigration = $this->getDependencyFactory()->getMigrationRepository()->getMigration($version); - } catch (MigrationClassNotFound) { - $availableMigration = null; - } - - $storage = $this->getDependencyFactory()->getMetadataStorage(); - if ($availableMigration === null) { - if ($input->getOption('delete') === false) { - throw UnknownMigrationVersion::new((string) $version); - } - - $question = - 'WARNING! You are about to delete a migration version from the version table that has no corresponding migration file.' . - 'Do you want to delete this migration from the migrations table?'; - - $confirmation = $this->io->confirm($question); - - if ($confirmation) { - $migrationResult = new ExecutionResult($version, Direction::DOWN); - $storage->complete($migrationResult); - $this->io->text(sprintf( - "%s deleted from the version table.\n", - (string) $version, - )); - - return; - } - } - - $marked = false; - - if ($this->markMigrated && $executedMigrations->hasMigration($version)) { - if (! $all) { - throw VersionAlreadyExists::new($version); - } - - $marked = true; - } - - if (! $this->markMigrated && ! $executedMigrations->hasMigration($version)) { - if (! $all) { - throw VersionDoesNotExist::new($version); - } - - $marked = true; - } - - if ($marked === true) { - return; - } - - if ($this->markMigrated) { - $migrationResult = new ExecutionResult($version, Direction::UP); - $storage->complete($migrationResult); - - $this->io->text(sprintf( - "%s added to the version table.\n", - (string) $version, - )); - } else { - $migrationResult = new ExecutionResult($version, Direction::DOWN); - $storage->complete($migrationResult); - - $this->io->text(sprintf( - "%s deleted from the version table.\n", - (string) $version, - )); - } - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/ConsoleInputMigratorConfigurationFactory.php b/vendor/doctrine/migrations/src/Tools/Console/ConsoleInputMigratorConfigurationFactory.php deleted file mode 100644 index a9be446..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/ConsoleInputMigratorConfigurationFactory.php +++ /dev/null @@ -1,85 +0,0 @@ -hasOption('query-time') ? (bool) $input->getOption('query-time') : false; - $dryRun = $input->hasOption('dry-run') ? (bool) $input->getOption('dry-run') : false; - $allOrNothing = $this->determineAllOrNothingValueFrom($input) ?? $this->configuration->isAllOrNothing(); - - return (new MigratorConfiguration()) - ->setDryRun($dryRun) - ->setTimeAllQueries($timeAllQueries) - ->setAllOrNothing($allOrNothing); - } - - private function determineAllOrNothingValueFrom(InputInterface $input): bool|null - { - $enableAllOrNothingOption = self::ABSENT_CONFIG_VALUE; - $disableAllOrNothingOption = null; - - if ($input->hasOption('no-all-or-nothing')) { - $disableAllOrNothingOption = $input->getOption('no-all-or-nothing'); - } - - $wasOptionExplicitlyPassed = $input->hasOption('all-or-nothing'); - - if ($wasOptionExplicitlyPassed) { - /** - * Due to this option being able to receive optional values, its behavior is tricky: - * - when `--all-or-nothing` option is not provided, the default is set to self::ABSENT_CONFIG_VALUE - * - when `--all-or-nothing` option is provided without values, this will be `null` - * - when `--all-or-nothing` option is provided with a value, we get the provided value - */ - $enableAllOrNothingOption = $input->getOption('all-or-nothing'); - } - - $enableAllOrNothingDeprecation = match ($enableAllOrNothingOption) { - self::ABSENT_CONFIG_VALUE, null => false, - default => true, - }; - - if ($enableAllOrNothingOption !== self::ABSENT_CONFIG_VALUE && $disableAllOrNothingOption === true) { - throw InvalidAllOrNothingConfiguration::new(); - } - - if ($disableAllOrNothingOption === true) { - return false; - } - - if ($enableAllOrNothingDeprecation) { - Deprecation::trigger( - 'doctrine/migrations', - 'https://github.com/doctrine/migrations/issues/1304', - <<<'DEPRECATION' - Context: Passing values to option `--all-or-nothing` - Problem: Passing values is deprecated - Solution: If you need to disable the behavior, use --no-all-or-nothing, - otherwise, pass the option without a value - DEPRECATION, - ); - } - - return match ($enableAllOrNothingOption) { - self::ABSENT_CONFIG_VALUE => null, - null => true, - default => (bool) $enableAllOrNothingOption, - }; - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/ConsoleLogger.php b/vendor/doctrine/migrations/src/Tools/Console/ConsoleLogger.php deleted file mode 100644 index 800c20c..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/ConsoleLogger.php +++ /dev/null @@ -1,134 +0,0 @@ - */ - private array $verbosityLevelMap = [ - LogLevel::EMERGENCY => OutputInterface::VERBOSITY_NORMAL, - LogLevel::ALERT => OutputInterface::VERBOSITY_NORMAL, - LogLevel::CRITICAL => OutputInterface::VERBOSITY_NORMAL, - LogLevel::ERROR => OutputInterface::VERBOSITY_NORMAL, - LogLevel::WARNING => OutputInterface::VERBOSITY_NORMAL, - LogLevel::NOTICE => OutputInterface::VERBOSITY_NORMAL, - LogLevel::INFO => OutputInterface::VERBOSITY_VERBOSE, - LogLevel::DEBUG => OutputInterface::VERBOSITY_VERY_VERBOSE, - ]; - /** @var array */ - private array $formatLevelMap = [ - LogLevel::EMERGENCY => self::ERROR, - LogLevel::ALERT => self::ERROR, - LogLevel::CRITICAL => self::ERROR, - LogLevel::ERROR => self::ERROR, - LogLevel::WARNING => self::INFO, - LogLevel::NOTICE => self::INFO, - LogLevel::INFO => self::INFO, - LogLevel::DEBUG => self::INFO, - ]; - - /** - * @param array $verbosityLevelMap - * @param array $formatLevelMap - */ - public function __construct( - private readonly OutputInterface $output, - array $verbosityLevelMap = [], - array $formatLevelMap = [], - ) { - $this->verbosityLevelMap = $verbosityLevelMap + $this->verbosityLevelMap; - $this->formatLevelMap = $formatLevelMap + $this->formatLevelMap; - } - - /** - * {@inheritDoc} - * - * @param string|Stringable $message - * @param mixed[] $context - */ - public function log($level, $message, array $context = []): void - { - if (! isset($this->verbosityLevelMap[$level])) { - throw new InvalidArgumentException(sprintf('The log level "%s" does not exist.', $level)); - } - - $output = $this->output; - - // Write to the error output if necessary and available - if ($this->formatLevelMap[$level] === self::ERROR) { - if ($this->output instanceof ConsoleOutputInterface) { - $output = $output->getErrorOutput(); - } - } - - // the if condition check isn't necessary -- it's the same one that $output will do internally anyway. - // We only do it for efficiency here as the message formatting is relatively expensive. - if ($output->getVerbosity() < $this->verbosityLevelMap[$level]) { - return; - } - - $output->writeln(sprintf('<%1$s>[%2$s] %3$s', $this->formatLevelMap[$level], $level, $this->interpolate($message, $context)), $this->verbosityLevelMap[$level]); - } - - /** - * Interpolates context values into the message placeholders. - * - * @param mixed[] $context - */ - private function interpolate(string|Stringable $message, array $context): string - { - $message = (string) $message; - if (! str_contains($message, '{')) { - return $message; - } - - $replacements = []; - foreach ($context as $key => $val) { - if ($val === null || is_scalar($val) || $val instanceof Stringable) { - $replacements["{{$key}}"] = $val; - } elseif ($val instanceof DateTimeInterface) { - $replacements["{{$key}}"] = $val->format(DateTime::RFC3339); - } elseif (is_object($val)) { - $replacements["{{$key}}"] = '[object ' . $val::class . ']'; - } else { - $replacements["{{$key}}"] = '[' . gettype($val) . ']'; - } - - if (! isset($replacements["{{$key}}"])) { - continue; - } - - $replacements["{{$key}}"] = '' . $replacements["{{$key}}"] . ''; - } - - return strtr($message, $replacements); - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/ConsoleRunner.php b/vendor/doctrine/migrations/src/Tools/Console/ConsoleRunner.php deleted file mode 100644 index 51c784e..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/ConsoleRunner.php +++ /dev/null @@ -1,154 +0,0 @@ -run(); - } - - /** @param DoctrineCommand[] $commands */ - public static function createApplication(array $commands = [], DependencyFactory|null $dependencyFactory = null): Application - { - $version = InstalledVersions::getVersion('doctrine/migrations'); - assert($version !== null); - $cli = new Application('Doctrine Migrations', $version); - $cli->setCatchExceptions(true); - self::addCommands($cli, $dependencyFactory); - $cli->addCommands($commands); - - return $cli; - } - - public static function addCommands(Application $cli, DependencyFactory|null $dependencyFactory = null): void - { - $cli->addCommands([ - new CurrentCommand($dependencyFactory), - new DumpSchemaCommand($dependencyFactory), - new ExecuteCommand($dependencyFactory), - new GenerateCommand($dependencyFactory), - new LatestCommand($dependencyFactory), - new MigrateCommand($dependencyFactory), - new RollupCommand($dependencyFactory), - new StatusCommand($dependencyFactory), - new VersionCommand($dependencyFactory), - new UpToDateCommand($dependencyFactory), - new SyncMetadataCommand($dependencyFactory), - new ListCommand($dependencyFactory), - ]); - - if ($dependencyFactory === null || ! $dependencyFactory->hasSchemaProvider()) { - return; - } - - $cli->add(new DiffCommand($dependencyFactory)); - } - - private static function checkLegacyConfiguration(mixed $dependencyFactory, string $configurationFile): mixed - { - if (! ($dependencyFactory instanceof HelperSet)) { - return $dependencyFactory; - } - - $configurations = new ConfigurationFileWithFallback(); - if ($dependencyFactory->has('em') && $dependencyFactory->get('em') instanceof EntityManagerHelper) { - return DependencyFactory::fromEntityManager( - $configurations, - new ExistingEntityManager($dependencyFactory->get('em')->getEntityManager()), - ); - } - - throw new RuntimeException(sprintf( - 'Configuration HelperSet returned by "%s" does not have a valid "em" or the "db" helper.', - $configurationFile, - )); - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Exception/ConsoleException.php b/vendor/doctrine/migrations/src/Tools/Console/Exception/ConsoleException.php deleted file mode 100644 index 9ee7a93..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Exception/ConsoleException.php +++ /dev/null @@ -1,11 +0,0 @@ -areMigrationsOrganizedByYear()) { - $dir .= $this->appendDir(date('Y')); - } - - if ($configuration->areMigrationsOrganizedByYearAndMonth()) { - $dir .= $this->appendDir(date('m')); - } - - $this->createDirIfNotExists($dir); - - return $dir; - } - - private function appendDir(string $dir): string - { - return DIRECTORY_SEPARATOR . $dir; - } - - private function createDirIfNotExists(string $dir): void - { - if (file_exists($dir)) { - return; - } - - mkdir($dir, 0755, true); - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/Helper/MigrationStatusInfosHelper.php b/vendor/doctrine/migrations/src/Tools/Console/Helper/MigrationStatusInfosHelper.php deleted file mode 100644 index d07224d..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/Helper/MigrationStatusInfosHelper.php +++ /dev/null @@ -1,205 +0,0 @@ -setHeaders( - [ - [new TableCell('Migration Versions', ['colspan' => 4])], - ['Migration', 'Status', 'Migrated At', 'Execution Time', 'Description'], - ], - ); - $executedMigrations = $this->metadataStorage->getExecutedMigrations(); - $availableMigrations = $this->migrationPlanCalculator->getMigrations(); - - foreach ($versions as $version) { - $description = null; - $executedAt = null; - $executionTime = null; - - if ($executedMigrations->hasMigration($version)) { - $executedMigration = $executedMigrations->getMigration($version); - $executionTime = $executedMigration->getExecutionTime(); - $executedAt = $executedMigration->getExecutedAt() instanceof DateTimeInterface - ? $executedMigration->getExecutedAt()->format('Y-m-d H:i:s') - : null; - } - - if ($availableMigrations->hasMigration($version)) { - $description = $availableMigrations->getMigration($version)->getMigration()->getDescription(); - } - - if ($executedMigrations->hasMigration($version) && $availableMigrations->hasMigration($version)) { - $status = 'migrated'; - } elseif ($executedMigrations->hasMigration($version)) { - $status = 'migrated, not available'; - } else { - $status = 'not migrated'; - } - - $table->addRow([ - (string) $version, - $status, - (string) $executedAt, - $executionTime !== null ? $executionTime . 's' : '', - $description, - ]); - } - - $table->render(); - } - - public function showMigrationsInfo(OutputInterface $output): void - { - $executedMigrations = $this->metadataStorage->getExecutedMigrations(); - $availableMigrations = $this->migrationPlanCalculator->getMigrations(); - - $newMigrations = $this->statusCalculator->getNewMigrations(); - $executedUnavailableMigrations = $this->statusCalculator->getExecutedUnavailableMigrations(); - - $storage = $this->configuration->getMetadataStorageConfiguration(); - - $table = new Table($output); - $table->setHeaders( - [ - [new TableCell('Configuration', ['colspan' => 3])], - ], - ); - - $dataGroup = [ - 'Storage' => [ - 'Type' => $storage !== null ? $storage::class : null, - ], - 'Database' => [ - 'Driver' => get_class($this->connection->getDriver()), - 'Name' => $this->connection->getDatabase(), - ], - 'Versions' => [ - 'Previous' => $this->getFormattedVersionAlias('prev', $executedMigrations), - 'Current' => $this->getFormattedVersionAlias('current', $executedMigrations), - 'Next' => $this->getFormattedVersionAlias('next', $executedMigrations), - 'Latest' => $this->getFormattedVersionAlias('latest', $executedMigrations), - ], - - 'Migrations' => [ - 'Executed' => count($executedMigrations), - 'Executed Unavailable' => count($executedUnavailableMigrations) > 0 ? ('' . count($executedUnavailableMigrations) . '') : '0', - 'Available' => count($availableMigrations), - 'New' => count($newMigrations) > 0 ? ('' . count($newMigrations) . '') : '0', - ], - 'Migration Namespaces' => $this->configuration->getMigrationDirectories(), - - ]; - if ($storage instanceof TableMetadataStorageConfiguration) { - $dataGroup['Storage'] += [ - 'Table Name' => $storage->getTableName(), - 'Column Name' => $storage->getVersionColumnName(), - ]; - } - - $first = true; - foreach ($dataGroup as $group => $dataValues) { - $nsRows = []; - foreach ($dataValues as $k => $v) { - $nsRows[] = [ - $k, - $v, - ]; - } - - if (count($nsRows) <= 0) { - continue; - } - - if (! $first) { - $table->addRow([new TableSeparator(['colspan' => 3])]); - } - - $first = false; - array_unshift( - $nsRows[0], - new TableCell('' . $group . '', ['rowspan' => count($dataValues)]), - ); - $table->addRows($nsRows); - } - - $table->render(); - } - - private function getFormattedVersionAlias(string $alias, ExecutedMigrationsList $executedMigrations): string - { - try { - $version = $this->aliasResolver->resolveVersionAlias($alias); - } catch (Throwable) { - $version = null; - } - - // No version found - if ($version === null) { - if ($alias === 'next') { - return 'Already at latest version'; - } - - if ($alias === 'prev') { - return 'Already at first version'; - } - } - - // Before first version "virtual" version number - if ((string) $version === '0') { - return '0'; - } - - // Show normal version number - return sprintf( - '%s ', - (string) $version, - ); - } -} diff --git a/vendor/doctrine/migrations/src/Tools/Console/InvalidAllOrNothingConfiguration.php b/vendor/doctrine/migrations/src/Tools/Console/InvalidAllOrNothingConfiguration.php deleted file mode 100644 index 742b6e4..0000000 --- a/vendor/doctrine/migrations/src/Tools/Console/InvalidAllOrNothingConfiguration.php +++ /dev/null @@ -1,16 +0,0 @@ -commit(); - } - - public static function rollbackIfInTransaction(Connection $connection): void - { - if (! self::inTransaction($connection)) { - Deprecation::trigger( - 'doctrine/migrations', - 'https://github.com/doctrine/migrations/issues/1169', - <<<'DEPRECATION' -Context: trying to rollback a transaction -Problem: the transaction is already rolled back, relying on silencing is deprecated. -Solution: override `AbstractMigration::isTransactional()` so that it returns false. -Automate that by setting `transactional` to false in the configuration. -More details at https://www.doctrine-project.org/projects/doctrine-migrations/en/stable/explanation/implicit-commits.html -DEPRECATION, - ); - - return; - } - - $connection->rollBack(); - } - - private static function inTransaction(Connection $connection): bool - { - $innermostConnection = self::getInnerConnection($connection); - - /* Attempt to commit or rollback while no transaction is running - results in an exception since PHP 8 + pdo_mysql combination */ - return ! $innermostConnection instanceof PDO || $innermostConnection->inTransaction(); - } - - /** @return object|resource|null */ - private static function getInnerConnection(Connection $connection) - { - try { - return $connection->getNativeConnection(); - } catch (LogicException) { - } - - $innermostConnection = $connection; - while (method_exists($innermostConnection, 'getWrappedConnection')) { - $innermostConnection = $innermostConnection->getWrappedConnection(); - } - - return $innermostConnection; - } -} diff --git a/vendor/doctrine/migrations/src/Version/AliasResolver.php b/vendor/doctrine/migrations/src/Version/AliasResolver.php deleted file mode 100644 index 7905803..0000000 --- a/vendor/doctrine/migrations/src/Version/AliasResolver.php +++ /dev/null @@ -1,28 +0,0 @@ -metadataStorage->getExecutedMigrations(); - $availableMigration = $this->migrationPlanCalculator->getMigrations(); - - return $executedMigrations->unavailableSubset($availableMigration); - } - - public function getNewMigrations(): AvailableMigrationsList - { - $executedMigrations = $this->metadataStorage->getExecutedMigrations(); - $availableMigration = $this->migrationPlanCalculator->getMigrations(); - - return $availableMigration->newSubset($executedMigrations); - } -} diff --git a/vendor/doctrine/migrations/src/Version/DbalExecutor.php b/vendor/doctrine/migrations/src/Version/DbalExecutor.php deleted file mode 100644 index 57712e4..0000000 --- a/vendor/doctrine/migrations/src/Version/DbalExecutor.php +++ /dev/null @@ -1,324 +0,0 @@ -sql; - } - - public function addSql(Query $sqlQuery): void - { - $this->sql[] = $sqlQuery; - } - - public function execute( - MigrationPlan $plan, - MigratorConfiguration $configuration, - ): ExecutionResult { - $result = new ExecutionResult($plan->getVersion(), $plan->getDirection(), new DateTimeImmutable()); - - $this->startMigration($plan, $configuration); - - try { - $this->executeMigration( - $plan, - $result, - $configuration, - ); - - $result->setSql($this->sql); - } catch (SkipMigration $e) { - $result->setSkipped(true); - - $this->migrationEnd($e, $plan, $result, $configuration); - } catch (Throwable $e) { - $result->setError(true, $e); - - $this->migrationEnd($e, $plan, $result, $configuration); - - throw $e; - } - - return $result; - } - - private function startMigration( - MigrationPlan $plan, - MigratorConfiguration $configuration, - ): void { - $this->sql = []; - - $this->dispatcher->dispatchVersionEvent( - Events::onMigrationsVersionExecuting, - $plan, - $configuration, - ); - - if (! $plan->getMigration()->isTransactional()) { - return; - } - - // only start transaction if in transactional mode - $this->connection->beginTransaction(); - } - - private function executeMigration( - MigrationPlan $plan, - ExecutionResult $result, - MigratorConfiguration $configuration, - ): ExecutionResult { - $stopwatchEvent = $this->stopwatch->start('execute'); - - $migration = $plan->getMigration(); - $direction = $plan->getDirection(); - - $result->setState(State::PRE); - - $fromSchema = $this->getFromSchema($configuration); - - $migration->{'pre' . ucfirst($direction)}($fromSchema); - - $this->logger->info(...$this->getMigrationHeader($plan, $migration, $direction)); - - $result->setState(State::EXEC); - - $toSchema = $this->schemaProvider->createToSchema($fromSchema); - - $result->setToSchema($toSchema); - - $migration->$direction($toSchema); - - foreach ($migration->getSql() as $sqlQuery) { - $this->addSql($sqlQuery); - } - - foreach ($this->schemaProvider->getSqlDiffToMigrate($fromSchema, $toSchema) as $sql) { - $this->addSql(new Query($sql)); - } - - $migration->freeze(); - - if (count($this->sql) !== 0) { - if (! $configuration->isDryRun()) { - $this->executeResult($configuration); - } else { - foreach ($this->sql as $query) { - $this->outputSqlQuery($query, $configuration); - } - } - } else { - $this->logger->warning('Migration {version} was executed but did not result in any SQL statements.', [ - 'version' => (string) $plan->getVersion(), - ]); - } - - $result->setState(State::POST); - - $migration->{'post' . ucfirst($direction)}($toSchema); - - $stopwatchEvent->stop(); - $periods = $stopwatchEvent->getPeriods(); - $lastPeriod = $periods[count($periods) - 1]; - - $result->setTime((float) $lastPeriod->getDuration() / 1000); - $result->setMemory($lastPeriod->getMemory()); - - $params = [ - 'version' => (string) $plan->getVersion(), - 'time' => $lastPeriod->getDuration(), - 'memory' => BytesFormatter::formatBytes($lastPeriod->getMemory()), - 'direction' => $direction === Direction::UP ? 'migrated' : 'reverted', - ]; - - $this->logger->info('Migration {version} {direction} (took {time}ms, used {memory} memory)', $params); - - if (! $configuration->isDryRun()) { - $this->metadataStorage->complete($result); - } elseif (method_exists($this->metadataStorage, 'getSql')) { - foreach ($this->metadataStorage->getSql($result) as $sqlQuery) { - $this->addSql($sqlQuery); - } - } - - if ($migration->isTransactional()) { - TransactionHelper::commitIfInTransaction($this->connection); - } - - $plan->markAsExecuted($result); - $result->setState(State::NONE); - - $this->dispatcher->dispatchVersionEvent( - Events::onMigrationsVersionExecuted, - $plan, - $configuration, - ); - - return $result; - } - - /** @return mixed[] */ - private function getMigrationHeader(MigrationPlan $planItem, AbstractMigration $migration, string $direction): array - { - $versionInfo = (string) $planItem->getVersion(); - $description = $migration->getDescription(); - - if ($description !== '') { - $versionInfo .= ' (' . $description . ')'; - } - - $params = ['version_name' => $versionInfo]; - - if ($direction === Direction::UP) { - return ['++ migrating {version_name}', $params]; - } - - return ['++ reverting {version_name}', $params]; - } - - private function migrationEnd(Throwable $e, MigrationPlan $plan, ExecutionResult $result, MigratorConfiguration $configuration): void - { - $migration = $plan->getMigration(); - if ($migration->isTransactional()) { - //only rollback transaction if in transactional mode - TransactionHelper::rollbackIfInTransaction($this->connection); - } - - $plan->markAsExecuted($result); - $this->logResult($e, $result, $plan); - - $this->dispatcher->dispatchVersionEvent( - Events::onMigrationsVersionSkipped, - $plan, - $configuration, - ); - } - - private function logResult(Throwable $e, ExecutionResult $result, MigrationPlan $plan): void - { - if ($result->isSkipped()) { - $this->logger->notice( - 'Migration {version} skipped during {state}. Reason: "{reason}"', - [ - 'version' => (string) $plan->getVersion(), - 'reason' => $e->getMessage(), - 'state' => $this->getExecutionStateAsString($result->getState()), - ], - ); - } elseif ($result->hasError()) { - $this->logger->error( - 'Migration {version} failed during {state}. Error: "{error}"', - [ - 'version' => (string) $plan->getVersion(), - 'error' => $e->getMessage(), - 'state' => $this->getExecutionStateAsString($result->getState()), - ], - ); - } - } - - private function executeResult(MigratorConfiguration $configuration): void - { - foreach ($this->sql as $key => $query) { - $this->outputSqlQuery($query, $configuration); - - $stopwatchEvent = $this->stopwatch->start('query'); - // executeQuery() must be used here because $query might return a result set, for instance REPAIR does - $this->connection->executeQuery($query->getStatement(), $query->getParameters(), $query->getTypes()); - $stopwatchEvent->stop(); - - if (! $configuration->getTimeAllQueries()) { - continue; - } - - $this->logger->notice('Query took {duration}ms', [ - 'duration' => $stopwatchEvent->getDuration(), - ]); - } - } - - private function outputSqlQuery(Query $query, MigratorConfiguration $configuration): void - { - $params = $this->parameterFormatter->formatParameters( - $query->getParameters(), - $query->getTypes(), - ); - - $this->logger->log( - $configuration->getTimeAllQueries() ? LogLevel::NOTICE : LogLevel::DEBUG, - '{query} {params}', - [ - 'query' => $query->getStatement(), - 'params' => $params, - ], - ); - } - - private function getFromSchema(MigratorConfiguration $configuration): Schema - { - // if we're in a dry run, use the from Schema instead of reading the schema from the database - if ($configuration->isDryRun() && $configuration->getFromSchema() !== null) { - return $configuration->getFromSchema(); - } - - return $this->schemaProvider->createFromSchema(); - } - - private function getExecutionStateAsString(int $state): string - { - return match ($state) { - State::PRE => 'Pre-Checks', - State::POST => 'Post-Checks', - State::EXEC => 'Execution', - default => 'No State', - }; - } -} diff --git a/vendor/doctrine/migrations/src/Version/DbalMigrationFactory.php b/vendor/doctrine/migrations/src/Version/DbalMigrationFactory.php deleted file mode 100644 index b1d1851..0000000 --- a/vendor/doctrine/migrations/src/Version/DbalMigrationFactory.php +++ /dev/null @@ -1,31 +0,0 @@ -connection, - $this->logger, - ); - } -} diff --git a/vendor/doctrine/migrations/src/Version/DefaultAliasResolver.php b/vendor/doctrine/migrations/src/Version/DefaultAliasResolver.php deleted file mode 100644 index 427227e..0000000 --- a/vendor/doctrine/migrations/src/Version/DefaultAliasResolver.php +++ /dev/null @@ -1,115 +0,0 @@ -migrationPlanCalculator->getMigrations(); - $executedMigrations = $this->metadataStorage->getExecutedMigrations(); - - switch ($alias) { - case self::ALIAS_FIRST: - case '0': - return new Version('0'); - - case self::ALIAS_CURRENT: - try { - return $executedMigrations->getLast()->getVersion(); - } catch (NoMigrationsFoundWithCriteria) { - return new Version('0'); - } - - // no break because of return - case self::ALIAS_PREV: - try { - return $executedMigrations->getLast(-1)->getVersion(); - } catch (NoMigrationsFoundWithCriteria) { - return new Version('0'); - } - - // no break because of return - case self::ALIAS_NEXT: - $newMigrations = $this->migrationStatusCalculator->getNewMigrations(); - - try { - return $newMigrations->getFirst()->getVersion(); - } catch (NoMigrationsFoundWithCriteria $e) { - throw NoMigrationsToExecute::new($e); - } - - // no break because of return - case self::ALIAS_LATEST: - try { - return $availableMigrations->getLast()->getVersion(); - } catch (NoMigrationsFoundWithCriteria) { - return $this->resolveVersionAlias(self::ALIAS_CURRENT); - } - - // no break because of return - default: - if ($availableMigrations->hasMigration(new Version($alias))) { - return $availableMigrations->getMigration(new Version($alias))->getVersion(); - } - - if (substr($alias, 0, 7) === self::ALIAS_CURRENT) { - $val = (int) substr($alias, 7); - $targetMigration = null; - if ($val > 0) { - $newMigrations = $this->migrationStatusCalculator->getNewMigrations(); - - return $newMigrations->getFirst($val - 1)->getVersion(); - } - - return $executedMigrations->getLast($val)->getVersion(); - } - } - - throw UnknownMigrationVersion::new($alias); - } -} diff --git a/vendor/doctrine/migrations/src/Version/Direction.php b/vendor/doctrine/migrations/src/Version/Direction.php deleted file mode 100644 index 6fd2dbd..0000000 --- a/vendor/doctrine/migrations/src/Version/Direction.php +++ /dev/null @@ -1,23 +0,0 @@ -direction; - } - - public function getExecutedAt(): DateTimeImmutable|null - { - return $this->executedAt; - } - - public function setExecutedAt(DateTimeImmutable $executedAt): void - { - $this->executedAt = $executedAt; - } - - public function getVersion(): Version - { - return $this->version; - } - - public function hasSql(): bool - { - return count($this->sql) !== 0; - } - - /** @return Query[] */ - public function getSql(): array - { - return $this->sql; - } - - /** @param Query[] $sql */ - public function setSql(array $sql): void - { - $this->sql = $sql; - } - - public function getTime(): float|null - { - return $this->time; - } - - public function setTime(float $time): void - { - $this->time = $time; - } - - public function getMemory(): float|null - { - return $this->memory; - } - - public function setMemory(float $memory): void - { - $this->memory = $memory; - } - - public function setSkipped(bool $skipped): void - { - $this->skipped = $skipped; - } - - public function isSkipped(): bool - { - return $this->skipped; - } - - public function setError(bool $error, Throwable|null $exception = null): void - { - $this->error = $error; - $this->exception = $exception; - } - - public function hasError(): bool - { - return $this->error; - } - - public function getException(): Throwable|null - { - return $this->exception; - } - - public function setToSchema(Schema $toSchema): void - { - $this->toSchema = $toSchema; - } - - public function getToSchema(): Schema - { - if ($this->toSchema === null) { - throw new RuntimeException('Cannot call getToSchema() when toSchema is null.'); - } - - return $this->toSchema; - } - - public function getState(): int - { - return $this->state; - } - - public function setState(int $state): void - { - $this->state = $state; - } -} diff --git a/vendor/doctrine/migrations/src/Version/Executor.php b/vendor/doctrine/migrations/src/Version/Executor.php deleted file mode 100644 index 646eef1..0000000 --- a/vendor/doctrine/migrations/src/Version/Executor.php +++ /dev/null @@ -1,21 +0,0 @@ -arrangeMigrationsForDirection($direction, $this->getMigrations()); - $availableMigrations = array_filter( - $migrationsToCheck, - // in_array third parameter is intentionally false to force object to string casting - static fn (AvailableMigration $availableMigration): bool => in_array($availableMigration->getVersion(), $versions, false), - ); - - $planItems = array_map(static fn (AvailableMigration $availableMigration): MigrationPlan => new MigrationPlan($availableMigration->getVersion(), $availableMigration->getMigration(), $direction), $availableMigrations); - - if (count($planItems) !== count($versions)) { - $plannedVersions = array_map(static fn (MigrationPlan $migrationPlan): Version => $migrationPlan->getVersion(), $planItems); - $diff = array_diff($versions, $plannedVersions); - - throw MigrationClassNotFound::new((string) reset($diff)); - } - - return new MigrationPlanList($planItems, $direction); - } - - public function getPlanUntilVersion(Version $to): MigrationPlanList - { - if ((string) $to !== '0' && ! $this->migrationRepository->hasMigration((string) $to)) { - throw MigrationClassNotFound::new((string) $to); - } - - $availableMigrations = $this->getMigrations(); // migrations are sorted at this point - $executedMigrations = $this->metadataStorage->getExecutedMigrations(); - - $direction = $this->findDirection($to, $executedMigrations, $availableMigrations); - - $migrationsToCheck = $this->arrangeMigrationsForDirection($direction, $availableMigrations); - - $toExecute = $this->findMigrationsToExecute($to, $migrationsToCheck, $direction, $executedMigrations); - - return new MigrationPlanList(array_map(static fn (AvailableMigration $migration): MigrationPlan => new MigrationPlan($migration->getVersion(), $migration->getMigration(), $direction), $toExecute), $direction); - } - - public function getMigrations(): AvailableMigrationsList - { - $availableMigrations = $this->migrationRepository->getMigrations()->getItems(); - uasort($availableMigrations, fn (AvailableMigration $a, AvailableMigration $b): int => $this->sorter->compare($a->getVersion(), $b->getVersion())); - - return new AvailableMigrationsList($availableMigrations); - } - - private function findDirection(Version $to, ExecutedMigrationsList $executedMigrations, AvailableMigrationsList $availableMigrations): string - { - if ((string) $to === '0') { - return Direction::DOWN; - } - - foreach ($availableMigrations->getItems() as $availableMigration) { - if ($availableMigration->getVersion()->equals($to)) { - break; - } - - if (! $executedMigrations->hasMigration($availableMigration->getVersion())) { - return Direction::UP; - } - } - - if ($executedMigrations->hasMigration($to) && ! $executedMigrations->getLast()->getVersion()->equals($to)) { - return Direction::DOWN; - } - - return Direction::UP; - } - - /** @return AvailableMigration[] */ - private function arrangeMigrationsForDirection(string $direction, Metadata\AvailableMigrationsList $availableMigrations): array - { - return $direction === Direction::UP ? $availableMigrations->getItems() : array_reverse($availableMigrations->getItems()); - } - - /** - * @param AvailableMigration[] $migrationsToCheck - * - * @return AvailableMigration[] - */ - private function findMigrationsToExecute(Version $to, array $migrationsToCheck, string $direction, ExecutedMigrationsList $executedMigrations): array - { - $toExecute = []; - foreach ($migrationsToCheck as $availableMigration) { - if ($direction === Direction::DOWN && $availableMigration->getVersion()->equals($to)) { - break; - } - - if ($direction === Direction::UP && ! $executedMigrations->hasMigration($availableMigration->getVersion())) { - $toExecute[] = $availableMigration; - } elseif ($direction === Direction::DOWN && $executedMigrations->hasMigration($availableMigration->getVersion())) { - $toExecute[] = $availableMigration; - } - - if ($direction === Direction::UP && $availableMigration->getVersion()->equals($to)) { - break; - } - } - - return $toExecute; - } -} diff --git a/vendor/doctrine/migrations/src/Version/State.php b/vendor/doctrine/migrations/src/Version/State.php deleted file mode 100644 index 4adfa0d..0000000 --- a/vendor/doctrine/migrations/src/Version/State.php +++ /dev/null @@ -1,35 +0,0 @@ -version; - } - - public function equals(mixed $object): bool - { - return $object instanceof self && $object->version === $this->version; - } -} diff --git a/vendor/doctrine/orm/README.md b/vendor/doctrine/orm/README.md deleted file mode 100644 index 1df322c..0000000 --- a/vendor/doctrine/orm/README.md +++ /dev/null @@ -1,40 +0,0 @@ -| [4.0.x][4.0] | [3.3.x][3.3] | [3.2.x][3.2] | [2.20.x][2.20] | [2.19.x][2.19] | -|:------------------------------------------------------:|:------------------------------------------------------:|:------------------------------------------------------:|:--------------------------------------------------------:|:--------------------------------------------------------:| -| [![Build status][4.0 image]][4.0] | [![Build status][3.3 image]][3.3] | [![Build status][3.2 image]][3.2] | [![Build status][2.20 image]][2.20] | [![Build status][2.19 image]][2.19] | -| [![Coverage Status][4.0 coverage image]][4.0 coverage] | [![Coverage Status][3.3 coverage image]][3.3 coverage] | [![Coverage Status][3.2 coverage image]][3.2 coverage] | [![Coverage Status][2.20 coverage image]][2.20 coverage] | [![Coverage Status][2.19 coverage image]][2.19 coverage] | - -[

🇺🇦 UKRAINE NEEDS YOUR HELP NOW!

](https://www.doctrine-project.org/stop-war.html) - -Doctrine ORM is an object-relational mapper for PHP 8.1+ that provides transparent persistence -for PHP objects. It sits on top of a powerful database abstraction layer (DBAL). One of its key features -is the option to write database queries in a proprietary object oriented SQL dialect called Doctrine Query Language (DQL), -inspired by Hibernate's HQL. This provides developers with a powerful alternative to SQL that maintains flexibility -without requiring unnecessary code duplication. - - -## More resources: - -* [Website](http://www.doctrine-project.org) -* [Documentation](https://www.doctrine-project.org/projects/doctrine-orm/en/stable/index.html) - - - [4.0 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=4.0.x - [4.0]: https://github.com/doctrine/orm/tree/4.0.x - [4.0 coverage image]: https://codecov.io/gh/doctrine/orm/branch/4.0.x/graph/badge.svg - [4.0 coverage]: https://codecov.io/gh/doctrine/orm/branch/4.0.x - [3.3 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=3.3.x - [3.3]: https://github.com/doctrine/orm/tree/3.3.x - [3.3 coverage image]: https://codecov.io/gh/doctrine/orm/branch/3.3.x/graph/badge.svg - [3.3 coverage]: https://codecov.io/gh/doctrine/orm/branch/3.3.x - [3.2 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=3.2.x - [3.2]: https://github.com/doctrine/orm/tree/3.2.x - [3.2 coverage image]: https://codecov.io/gh/doctrine/orm/branch/3.2.x/graph/badge.svg - [3.2 coverage]: https://codecov.io/gh/doctrine/orm/branch/3.2.x - [2.20 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=2.20.x - [2.20]: https://github.com/doctrine/orm/tree/2.20.x - [2.20 coverage image]: https://codecov.io/gh/doctrine/orm/branch/2.20.x/graph/badge.svg - [2.20 coverage]: https://codecov.io/gh/doctrine/orm/branch/2.20.x - [2.19 image]: https://github.com/doctrine/orm/actions/workflows/continuous-integration.yml/badge.svg?branch=2.19.x - [2.19]: https://github.com/doctrine/orm/tree/2.19.x - [2.19 coverage image]: https://codecov.io/gh/doctrine/orm/branch/2.19.x/graph/badge.svg - [2.19 coverage]: https://codecov.io/gh/doctrine/orm/branch/2.19.x diff --git a/vendor/doctrine/orm/SECURITY.md b/vendor/doctrine/orm/SECURITY.md deleted file mode 100644 index b0e7293..0000000 --- a/vendor/doctrine/orm/SECURITY.md +++ /dev/null @@ -1,17 +0,0 @@ -Security -======== - -The Doctrine library is operating very close to your database and as such needs -to handle and make assumptions about SQL injection vulnerabilities. - -It is vital that you understand how Doctrine approaches security, because -we cannot protect you from SQL injection. - -Please read the documentation chapter on Security in Doctrine DBAL and ORM to -understand the assumptions we make. - -- [DBAL Security Page](https://www.doctrine-project.org/projects/doctrine-dbal/en/stable/reference/security.html) -- [ORM Security Page](https://www.doctrine-project.org/projects/doctrine-orm/en/stable/reference/security.html) - -If you find a Security bug in Doctrine, please follow our -[Security reporting guidelines](https://www.doctrine-project.org/policies/security.html#reporting). diff --git a/vendor/doctrine/orm/UPGRADE.md b/vendor/doctrine/orm/UPGRADE.md deleted file mode 100644 index 1869e9f..0000000 --- a/vendor/doctrine/orm/UPGRADE.md +++ /dev/null @@ -1,2303 +0,0 @@ -# Upgrade to 3.2 - -## Deprecate the `NotSupported` exception - -The class `Doctrine\ORM\Exception\NotSupported` is deprecated without replacement. - -## Deprecate remaining `Serializable` implementation - -Relying on `SequenceGenerator` implementing the `Serializable` is deprecated -because that interface won't be implemented in ORM 4 anymore. - -The following methods are deprecated: - -* `SequenceGenerator::serialize()` -* `SequenceGenerator::unserialize()` - -## `orm:schema-tool:update` option `--complete` is deprecated - -That option behaves as a no-op, and is deprecated. It will be removed in 4.0. - -## Deprecate properties `$indexes` and `$uniqueConstraints` of `Doctrine\ORM\Mapping\Table` - -The properties `$indexes` and `$uniqueConstraints` have been deprecated since they had no effect at all. -The preferred way of defining indices and unique constraints is by -using the `\Doctrine\ORM\Mapping\UniqueConstraint` and `\Doctrine\ORM\Mapping\Index` attributes. - -# Upgrade to 3.1 - -## Deprecate `Doctrine\ORM\Mapping\ReflectionEnumProperty` - -This class is deprecated and will be removed in 4.0. -Instead, use `Doctrine\Persistence\Reflection\EnumReflectionProperty` from -`doctrine/persistence`. - -## Deprecate passing null to `ClassMetadata::fullyQualifiedClassName()` - -Passing `null` to `Doctrine\ORM\ClassMetadata::fullyQualifiedClassName()` is -deprecated and will no longer be possible in 4.0. - -## Deprecate array access - -Using array access on instances of the following classes is deprecated: - -- `Doctrine\ORM\Mapping\DiscriminatorColumnMapping` -- `Doctrine\ORM\Mapping\EmbedClassMapping` -- `Doctrine\ORM\Mapping\FieldMapping` -- `Doctrine\ORM\Mapping\JoinColumnMapping` -- `Doctrine\ORM\Mapping\JoinTableMapping` - -# Upgrade to 3.0 - -## BC BREAK: Calling `ClassMetadata::getAssociationMappedByTargetField()` with the owning side of an association now throws an exception - -Previously, calling -`Doctrine\ORM\Mapping\ClassMetadata::getAssociationMappedByTargetField()` with -the owning side of an association returned `null`, which was undocumented, and -wrong according to the phpdoc of the parent method. - -If you do not know whether you are on the owning or inverse side of an association, -you can use `Doctrine\ORM\Mapping\ClassMetadata::isAssociationInverseSide()` -to find out. - -## BC BREAK: `Doctrine\ORM\Proxy\Autoloader` no longer extends `Doctrine\Common\Proxy\Autoloader` - -Make sure to use the former when writing a type declaration or an `instanceof` check. - -## Minor BC BREAK: Changed order of arguments passed to `OneToOne`, `ManyToOne` and `Index` mapping PHP attributes - -To keep PHP mapping attributes consistent, order of arguments passed to above attributes has been changed -so `$targetEntity` is a first argument now. This change affects only non-named arguments usage. - -## BC BREAK: AUTO keyword for identity generation defaults to IDENTITY for PostgreSQL when using `doctrine/dbal` 4 - -When using the `AUTO` strategy to let Doctrine determine the identity generation mechanism for -an entity, and when using `doctrine/dbal` 4, PostgreSQL now uses `IDENTITY` -instead of `SEQUENCE` or `SERIAL`. -* If you want to upgrade your existing tables to identity columns, you will need to follow [migration to identity columns on PostgreSQL](https://www.doctrine-project.org/projects/doctrine-dbal/en/4.0/how-to/postgresql-identity-migration.html) -* If you want to keep using SQL sequences, you need to configure the ORM this way: -```php -use Doctrine\DBAL\Platforms\PostgreSQLPlatform; -use Doctrine\ORM\Configuration; -use Doctrine\ORM\Mapping\ClassMetadata; - -assert($configuration instanceof Configuration); -$configuration->setIdentityGenerationPreferences([ - PostgreSQLPlatform::CLASS => ClassMetadata::GENERATOR_TYPE_SEQUENCE, -]); -``` - -## BC BREAK: Throw exceptions when using illegal attributes on Embeddable - -There are only a few attributes allowed on an embeddable such as `#[Column]` or -`#[Embedded]`. Previously all others that target entity classes where ignored, -now they throw an exception. - -## BC BREAK: Partial objects are removed - -- The `PARTIAL` keyword in DQL no longer exists. -- `Doctrine\ORM\Query\AST\PartialObjectExpression`is removed. -- `Doctrine\ORM\Query\SqlWalker::HINT_PARTIAL` and - `Doctrine\ORM\Query::HINT_FORCE_PARTIAL_LOAD` are removed. -- `Doctrine\ORM\EntityManager*::getPartialReference()` is removed. - -## BC BREAK: `Doctrine\ORM\Persister\Entity\EntityPersister::executeInserts()` return type changed to `void` - -Implementors should adapt to the new signature, and should call -`UnitOfWork::assignPostInsertId()` for each entry in the previously returned -array. - -## BC BREAK: `Doctrine\ORM\Proxy\ProxyFactory` no longer extends abstract factory from `doctrine/common` - -It is no longer possible to call methods, constants or properties inherited -from that class on a `ProxyFactory` instance. - -`Doctrine\ORM\Proxy\ProxyFactory::createProxyDefinition()` and -`Doctrine\ORM\Proxy\ProxyFactory::resetUninitializedProxy()` are removed as well. - -## BC BREAK: lazy ghosts are enabled unconditionally - -`Doctrine\ORM\Configuration::setLazyGhostObjectEnabled()` and -`Doctrine\ORM\Configuration::isLazyGhostObjectEnabled()` are now no-ops and -will be deprecated in 3.1.0 - -## BC BREAK: collisions in identity map are unconditionally rejected - -`Doctrine\ORM\Configuration::setRejectIdCollisionInIdentityMap()` and -`Doctrine\ORM\Configuration::isRejectIdCollisionInIdentityMapEnabled()` are now -no-ops and will be deprecated in 3.1.0. - -## BC BREAK: Lifecycle callback mapping on embedded classes is now explicitly forbidden - -Lifecycle callback mapping on embedded classes produced no effect, and is now -explicitly forbidden to point out mistakes. - -## BC BREAK: The `NOTIFY` change tracking policy is removed - -You should use `DEFERRED_EXPLICIT` instead. - -## BC BREAK: `Mapping\Driver\XmlDriver::__construct()` third argument is now enabled by default - -The third argument to -`Doctrine\ORM\Mapping\Driver\XmlDriver::__construct()` was introduced to -let users opt-in to XML validation, that is now always enabled by default. - -As a consequence, the same goes for -`Doctrine\ORM\Mapping\Driver\SimplifiedXmlDriver`, and for -`Doctrine\ORM\ORMSetup::createXMLMetadataConfiguration()`. - -## BC BREAK: `Mapping\Driver\AttributeDriver::__construct()` second argument is now a no-op - -The second argument to -`Doctrine\ORM\Mapping\Driver\AttributeDriver::__construct()` was introduced to -let users opt-in to a new behavior, that is now always enforced, regardless of -the value of that argument. - -## BC BREAK: `Query::setDQL()` and `Query::setFirstResult()` no longer accept `null` - -The `$dqlQuery` argument of `Doctrine\ORM\Query::setDQL()` must always be a -string. - -The `$firstResult` argument of `Doctrine\ORM\Query::setFirstResult()` must -always be an integer. - -## BC BREAK: `orm:schema-tool:update` option `--complete` is now a no-op - -`orm:schema-tool:update` now behaves as if `--complete` was provided, -regardless of whether it is provided or not. - -## BC BREAK: Removed `Doctrine\ORM\Proxy\Proxy` interface. - -Use `Doctrine\Persistence\Proxy` instead to check whether proxies are initialized. - -## BC BREAK: Overriding fields or associations declared in other than mapped superclasses - -As stated in the documentation, fields and associations may only be overridden when being inherited -from mapped superclasses. Overriding them for parent entity classes now throws a `MappingException`. - -## BC BREAK: Undeclared entity inheritance now throws a `MappingException` - -As soon as an entity class inherits from another entity class, inheritance has to -be declared by adding the appropriate configuration for the root entity. - -## Removed `getEntityManager()` in `Doctrine\ORM\Event\OnClearEventArgs` and `Doctrine\ORM\Event\*FlushEventArgs` - -Use `getObjectManager()` instead. - -## BC BREAK: Removed `Doctrine\ORM\Mapping\ClassMetadataInfo` class - -Use `Doctrine\ORM\Mapping\ClassMetadata` instead. - -## BC BREAK: Removed `Doctrine\ORM\Event\LifecycleEventArgs` class. - -Use one of the dedicated event classes instead: - -* `Doctrine\ORM\Event\PrePersistEventArgs` -* `Doctrine\ORM\Event\PreUpdateEventArgs` -* `Doctrine\ORM\Event\PreRemoveEventArgs` -* `Doctrine\ORM\Event\PostPersistEventArgs` -* `Doctrine\ORM\Event\PostUpdateEventArgs` -* `Doctrine\ORM\Event\PostRemoveEventArgs` -* `Doctrine\ORM\Event\PostLoadEventArgs` - -## BC BREAK: Removed `AttributeDriver::$entityAnnotationClasses` and `AttributeDriver::getReader()` - -* If you need to change the behavior of `AttributeDriver::isTransient()`, - override that method instead. -* The attribute reader is internal to the driver and should not be accessed from outside. - -## BC BREAK: Removed `Doctrine\ORM\Query\AST\InExpression` - -The AST parser will create a `InListExpression` or a `InSubselectExpression` when -encountering an `IN ()` DQL expression instead of a generic `InExpression`. - -As a consequence, `SqlWalker::walkInExpression()` has been replaced by -`SqlWalker::walkInListExpression()` and `SqlWalker::walkInSubselectExpression()`. - -## BC BREAK: Changed `EntityManagerInterface#refresh($entity)`, `EntityManagerDecorator#refresh($entity)` and `UnitOfWork#refresh($entity)` signatures - -The new signatures of these methods add an optional `LockMode|int|null $lockMode` -param with default `null` value (no lock). - -## BC Break: Removed AnnotationDriver - -The annotation driver and anything related to annotation has been removed. -Please migrate to another mapping driver. - -The `Doctrine\ORM\Mapping\Annotation` maker interface has been removed in favor of the new -`Doctrine\ORM\Mapping\MappingAttribute` interface. - -## BC BREAK: Removed `EntityManager::create()` - -The constructor of `EntityManager` is now public and must be used instead of the `create()` method. -However, the constructor expects a `Connection` while `create()` accepted an array with connection parameters. -You can pass that array to DBAL's `Doctrine\DBAL\DriverManager::getConnection()` method to bootstrap the -connection. - -## BC BREAK: Removed `QueryBuilder` methods and constants. - -The following `QueryBuilder` constants and methods have been removed: - -1. `SELECT`, -2. `DELETE`, -3. `UPDATE`, -4. `STATE_DIRTY`, -5. `STATE_CLEAN`, -6. `getState()`, -7. `getType()`. - -## BC BREAK: Omitting only the alias argument for `QueryBuilder::update` and `QueryBuilder::delete` is not supported anymore - -When building an UPDATE or DELETE query and when passing a class/type to the function, the alias argument must not be omitted. - -### Before - -```php -$qb = $em->createQueryBuilder() - ->delete('User u') - ->where('u.id = :user_id') - ->setParameter('user_id', 1); -``` - -### After - -```php -$qb = $em->createQueryBuilder() - ->delete('User', 'u') - ->where('u.id = :user_id') - ->setParameter('user_id', 1); -``` - -## BC BREAK: Split output walkers and tree walkers - -`SqlWalker` and its child classes don't implement the `TreeWalker` interface -anymore. - -The following methods have been removed from the `TreeWalker` interface and -from the `TreeWalkerAdapter` and `TreeWalkerChain` classes: - -* `setQueryComponent()` -* `walkSelectClause()` -* `walkFromClause()` -* `walkFunction()` -* `walkOrderByClause()` -* `walkOrderByItem()` -* `walkHavingClause()` -* `walkJoin()` -* `walkSelectExpression()` -* `walkQuantifiedExpression()` -* `walkSubselect()` -* `walkSubselectFromClause()` -* `walkSimpleSelectClause()` -* `walkSimpleSelectExpression()` -* `walkAggregateExpression()` -* `walkGroupByClause()` -* `walkGroupByItem()` -* `walkDeleteClause()` -* `walkUpdateClause()` -* `walkUpdateItem()` -* `walkWhereClause()` -* `walkConditionalExpression()` -* `walkConditionalTerm()` -* `walkConditionalFactor()` -* `walkConditionalPrimary()` -* `walkExistsExpression()` -* `walkCollectionMemberExpression()` -* `walkEmptyCollectionComparisonExpression()` -* `walkNullComparisonExpression()` -* `walkInExpression()` -* `walkInstanceOfExpression()` -* `walkLiteral()` -* `walkBetweenExpression()` -* `walkLikeExpression()` -* `walkStateFieldPathExpression()` -* `walkComparisonExpression()` -* `walkInputParameter()` -* `walkArithmeticExpression()` -* `walkArithmeticTerm()` -* `walkStringPrimary()` -* `walkArithmeticFactor()` -* `walkSimpleArithmeticExpression()` -* `walkPathExpression()` -* `walkResultVariable()` -* `getExecutor()` - -The following changes have been made to the abstract `TreeWalkerAdapter` class: - -* The method `setQueryComponent()` is now protected. -* The method `_getQueryComponents()` has been removed in favor of - `getQueryComponents()`. - -## BC BREAK: Removed identity columns emulation through sequences - -If the platform you are using does not support identity columns, you should -switch to the `SEQUENCE` strategy. - -## BC BREAK: Made setters parameters mandatory - -The following methods require an argument when being called. Pass `null` -instead of omitting the argument. - -* `Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs::setFoundMetadata()` -* `Doctrine\ORM\AbstractQuery::setHydrationCacheProfile()` -* `Doctrine\ORM\AbstractQuery::setResultCache()` -* `Doctrine\ORM\AbstractQuery::setResultCacheProfile()` - -## BC BREAK: New argument to `NamingStrategy::joinColumnName()` - -### Before - -```php - `Exception\MissingMappingDriverImplementation::create()` - * `unrecognizedField()` => `Persisters\Exception\UnrecognizedField::byName()` - * `unexpectedAssociationValue()` => `Exception\UnexpectedAssociationValue::create()` - * `invalidOrientation()` => `Persisters\Exception\InvalidOrientation::fromClassNameAndField()` - * `entityManagerClosed()` => `Exception\EntityManagerClosed::create()` - * `invalidHydrationMode()` => `Exception\InvalidHydrationMode::fromMode()` - * `mismatchedEventManager()` => `Exception\MismatchedEventManager::create()` - * `findByRequiresParameter()` => `Repository\Exception\InvalidMagicMethodCall::onMissingParameter()` - * `invalidMagicCall()` => `Repository\Exception\InvalidMagicMethodCall::becauseFieldNotFoundIn()` - * `invalidFindByInverseAssociation()` => `Repository\Exception\InvalidFindByCall::fromInverseSideUsage()` - * `invalidResultCacheDriver()` => `Cache\Exception\InvalidResultCacheDriver::create()` - * `notSupported()` => `Exception\NotSupported::create()` - * `queryCacheNotConfigured()` => `QueryCacheNotConfigured::create()` - * `metadataCacheNotConfigured()` => `Cache\Exception\MetadataCacheNotConfigured::create()` - * `queryCacheUsesNonPersistentCache()` => `Cache\Exception\QueryCacheUsesNonPersistentCache::fromDriver()` - * `metadataCacheUsesNonPersistentCache()` => `Cache\Exception\MetadataCacheUsesNonPersistentCache::fromDriver()` - * `proxyClassesAlwaysRegenerating()` => `Exception\ProxyClassesAlwaysRegenerating::create()` - * `invalidEntityRepository()` => `Exception\InvalidEntityRepository::fromClassName()` - * `missingIdentifierField()` => `Exception\MissingIdentifierField::fromFieldAndClass()` - * `unrecognizedIdentifierFields()` => `Exception\UnrecognizedIdentifierFields::fromClassAndFieldNames()` - * `cantUseInOperatorOnCompositeKeys()` => `Persisters\Exception\CantUseInOperatorOnCompositeKeys::create()` - -## BC Break: `CacheException` is no longer a class, but an interface - -All methods in `Doctrine\ORM\Cache\CacheException` have been extracted to dedicated exceptions. - - * `updateReadOnlyCollection()` => `Cache\Exception\CannotUpdateReadOnlyCollection::fromEntityAndField()` - * `updateReadOnlyEntity()` => `Cache\Exception\CannotUpdateReadOnlyEntity::fromEntity()` - * `nonCacheableEntity()` => `Cache\Exception\NonCacheableEntity::fromEntity()` - * `nonCacheableEntityAssociation()` => `Cache\Exception\NonCacheableEntityAssociation::fromEntityAndField()` - - -## BC Break: Missing type declaration added for identifier generators - -Although undocumented, it was possible to configure a custom repository -class that implements `ObjectRepository` but does not extend the -`EntityRepository` base class. Repository classes have to extend -`EntityRepository` now. - -## BC BREAK: Removed support for entity namespace alias - -- `EntityManager::getRepository()` no longer accepts the entity namespace alias - notation. -- `Configuration::addEntityNamespace()` and - `Configuration::getEntityNamespace()` have been removed. - -## BC BREAK: Remove helper methods from `AbstractCollectionPersister` - -The following protected methods of -`Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister` -have been removed. - -* `evictCollectionCache()` -* `evictElementCache()` - -## BC BREAK: `Doctrine\ORM\Query\TreeWalkerChainIterator` - -This class has been removed without replacement. - -## BC BREAK: Remove quoting methods from `ClassMetadata` - -The following methods have been removed from the class metadata because -quoting is handled by implementations of `Doctrine\ORM\Mapping\QuoteStrategy`: - -* `getQuotedIdentifierColumnNames()` -* `getQuotedColumnName()` -* `getQuotedTableName()` -* `getQuotedJoinTableName()` - -## BC BREAK: Remove ability to merge detached entities - -Merge semantics was a poor fit for the PHP "share-nothing" architecture. -In addition to that, merging caused multiple issues with data integrity -in the managed entity graph, which was constantly spawning more edge-case -bugs/scenarios. - -The method `UnitOfWork::merge()` has been removed. The method -`EntityManager::merge()` will throw an exception on each call. - -## BC BREAK: Removed ability to partially flush/commit entity manager and unit of work - -The following methods don't accept a single entity or an array of entities anymore: - -* `Doctrine\ORM\EntityManager::flush()` -* `Doctrine\ORM\Decorator\EntityManagerDecorator::flush()` -* `Doctrine\ORM\UnitOfWork::commit()` - -The semantics of `flush()` and `commit()` will remain the same, but the change -tracking will be performed on all entities managed by the unit of work, and not -just on the provided entities, as the parameter is now completely ignored. - -## BC BREAK: Removed ability to partially clear entity manager and unit of work - -* Passing an argument other than `null` to `EntityManager::clear()` will raise - an exception. -* The unit of work cannot be cleared partially anymore. Passing an argument to - `UnitOfWork::clear()` does not have any effect anymore; the unit of work is - cleared completely. -* The method `EntityRepository::clear()` has been removed. -* The methods `getEntityClass()` and `clearsAllEntities()` have been removed - from `OnClearEventArgs`. - -## BC BREAK: Remove support for Doctrine Cache - -The Doctrine Cache library is not supported anymore. The following methods -have been removed from `Doctrine\ORM\Configuration`: - -* `getQueryCacheImpl()` -* `setQueryCacheImpl()` -* `getHydrationCacheImpl()` -* `setHydrationCacheImpl()` -* `getMetadataCacheImpl()` -* `setMetadataCacheImpl()` - -The methods have been replaced by PSR-6 compatible counterparts -(just strip the `Impl` suffix from the old name to get the new one). - -## BC BREAK: Remove `Doctrine\ORM\Configuration::newDefaultAnnotationDriver` - -This functionality has been moved to the new `ORMSetup` class. Call -`Doctrine\ORM\ORMSetup::createDefaultAnnotationDriver()` to create -a new annotation driver. - -## BC BREAK: Remove `Doctrine\ORM\Tools\Setup` - -In our effort to migrate from Doctrine Cache to PSR-6, the `Setup` class which -accepted a Doctrine Cache instance in each method has been removed. - -The replacement is `Doctrine\ORM\ORMSetup` which accepts a PSR-6 -cache instead. - -## BC BREAK: Removed named queries - -All APIs related to named queries have been removed. - -## BC BREAK: Remove old cache accessors and mutators from query classes - -The following methods have been removed from `AbstractQuery`: - -* `setResultCacheDriver()` -* `getResultCacheDriver()` -* `useResultCache()` -* `getResultCacheLifetime()` -* `getResultCacheId()` - -The following methods have been removed from `Query`: - -* `setQueryCacheDriver()` -* `getQueryCacheDriver()` - -## BC BREAK: Remove `Doctrine\ORM\Cache\MultiGetRegion` - -The interface has been merged into `Doctrine\ORM\Cache\Region`. - -## BC BREAK: Rename `AbstractIdGenerator::generate()` to `generateId()` - -* Implementations of `AbstractIdGenerator` have to implement the method - `generateId()`. -* The method `generate()` has been removed from `AbstractIdGenerator`. - -## BC BREAK: Remove cache settings inspection - -Doctrine does not provide its own cache implementation anymore and relies on -the PSR-6 standard instead. As a consequence, we cannot determine anymore -whether a given cache adapter is suitable for a production environment. -Because of that, functionality that aims to do so has been removed: - -* `Configuration::ensureProductionSettings()` -* the `orm:ensure-production-settings` console command - -## BC BREAK: PSR-6-based second level cache - -The second level cache has been reworked to consume a PSR-6 cache. Using a -Doctrine Cache instance is not supported anymore. - -* `DefaultCacheFactory`: The constructor expects a PSR-6 cache item pool as - second argument now. -* `DefaultMultiGetRegion`: This class has been removed. -* `DefaultRegion`: - * The constructor expects a PSR-6 cache item pool as second argument now. - * The protected `$cache` property is removed. - * The properties `$name` and `$lifetime` as well as the constant - `REGION_KEY_SEPARATOR` and the method `getCacheEntryKey()` are - `private` now. - * The method `getCache()` has been removed. - - -## BC Break: Remove `Doctrine\ORM\Mapping\Driver\PHPDriver` - -Use `StaticPHPDriver` instead when you want to programmatically configure -entity metadata. - -## BC BREAK: Remove `Doctrine\ORM\EntityManagerInterface#transactional()` - -This method has been replaced by `Doctrine\ORM\EntityManagerInterface#wrapInTransaction()`. - -## BC BREAK: Removed support for schema emulation. - -The ORM no longer attempts to emulate schemas on SQLite. - -## BC BREAK: Remove `Setup::registerAutoloadDirectory()` - -Use Composer's autoloader instead. - -## BC BREAK: Remove YAML mapping drivers. - -If your code relies on `YamlDriver` or `SimpleYamlDriver`, you **MUST** migrate to -attribute, annotation or XML drivers instead. - -You can use the `orm:convert-mapping` command to convert your metadata mapping to XML -_before_ upgrading to 3.0: - -```sh -php doctrine orm:convert-mapping xml /path/to/mapping-path-converted-to-xml -``` - -## BC BREAK: Remove code generators and related console commands - -These console commands have been removed: - -* `orm:convert-d1-schema` -* `orm:convert-mapping` -* `orm:generate:entities` -* `orm:generate-repositories` - -These classes have been deprecated: - -* `Doctrine\ORM\Tools\ConvertDoctrine1Schema` -* `Doctrine\ORM\Tools\EntityGenerator` -* `Doctrine\ORM\Tools\EntityRepositoryGenerator` - -The entire `Doctrine\ORM\Tools\Export` namespace has been removed as well. - -## BC BREAK: Removed `Doctrine\ORM\Version` - -Use Composer's runtime API if you _really_ need to check the version of the ORM package at runtime. - -## BC BREAK: EntityRepository::count() signature change - -The argument `$criteria` of `Doctrine\ORM\EntityRepository::count()` is now -optional. Overrides in child classes should be made compatible. - -## BC BREAK: changes in exception hierarchy - -- `Doctrine\ORM\ORMException` has been removed -- `Doctrine\ORM\Exception\ORMException` is now an interface - -## Variadic methods now use native variadics -The following methods were using `func_get_args()` to simulate a variadic argument: -- `Doctrine\ORM\Query\Expr#andX()` -- `Doctrine\ORM\Query\Expr#orX()` -- `Doctrine\ORM\QueryBuilder#select()` -- `Doctrine\ORM\QueryBuilder#addSelect()` -- `Doctrine\ORM\QueryBuilder#where()` -- `Doctrine\ORM\QueryBuilder#andWhere()` -- `Doctrine\ORM\QueryBuilder#orWhere()` -- `Doctrine\ORM\QueryBuilder#groupBy()` -- `Doctrine\ORM\QueryBuilder#andGroupBy()` -- `Doctrine\ORM\QueryBuilder#having()` -- `Doctrine\ORM\QueryBuilder#andHaving()` -- `Doctrine\ORM\QueryBuilder#orHaving()` -A variadic argument is now actually used in their signatures signature (`...$x`). -Signatures of overridden methods should be changed accordingly - -## Minor BC BREAK: removed `Doctrine\ORM\EntityManagerInterface#copy()` - -Method `Doctrine\ORM\EntityManagerInterface#copy()` never got its implementation and is removed in 3.0. - -## BC BREAK: Removed classes related to UUID and TABLE generator strategies - -The following classes have been removed: -- `Doctrine\ORM\Id\TableGenerator` -- `Doctrine\ORM\Id\UuidGenerator` - -Using the `UUID` strategy for generating identifiers is not supported anymore. - -## BC BREAK: Removed `Query::iterate()` - -The deprecated method `Query::iterate()` has been removed along with the -following classes and methods: - -- `AbstractHydrator::iterate()` -- `AbstractHydrator::hydrateRow()` -- `IterableResult` - -Use `toIterable()` instead. - -# Upgrade to 2.19 - -## Deprecate calling `ClassMetadata::getAssociationMappedByTargetField()` with the owning side of an association - -Calling -`Doctrine\ORM\Mapping\ClassMetadata::getAssociationMappedByTargetField()` with -the owning side of an association returns `null`, which is undocumented, and -wrong according to the phpdoc of the parent method. - -If you do not know whether you are on the owning or inverse side of an association, -you can use `Doctrine\ORM\Mapping\ClassMetadata::isAssociationInverseSide()` -to find out. - -## Deprecate `Doctrine\ORM\Query\Lexer::T_*` constants - -Use `Doctrine\ORM\Query\TokenType::T_*` instead. - -# Upgrade to 2.17 - -## Deprecate annotations classes for named queries - -The following classes have been deprecated: - -* `Doctrine\ORM\Mapping\NamedNativeQueries` -* `Doctrine\ORM\Mapping\NamedNativeQuery` -* `Doctrine\ORM\Mapping\NamedQueries` -* `Doctrine\ORM\Mapping\NamedQuery` - -## Deprecate `Doctrine\ORM\Query\Exec\AbstractSqlExecutor::_sqlStatements` - -Use `Doctrine\ORM\Query\Exec\AbstractSqlExecutor::sqlStatements` instead. - -## Undeprecate `Doctrine\ORM\Proxy\Autoloader` - -It will be a full-fledged class, no longer extending -`Doctrine\Common\Proxy\Autoloader` in 3.0.x. - -## Deprecated: reliance on the non-optimal defaults that come with the `AUTO` identifier generation strategy - -When the `AUTO` identifier generation strategy was introduced, the best -strategy at the time was selected for each database platform. -A lot of time has passed since then, and with ORM 3.0.0 and DBAL 4.0.0, support -for better strategies will be added. - -Because of that, it is now deprecated to rely on the historical defaults when -they differ from what we will be recommended in the future. - -Instead, you should pick a strategy for each database platform you use, and it -will be used when using `AUTO`. As of now, only PostgreSQL is affected by this. - -It is recommended that PostgreSQL users configure their existing and new -applications to use `SEQUENCE` until `doctrine/dbal` 4.0.0 is released: - -```php -use Doctrine\DBAL\Platforms\PostgreSQLPlatform; -use Doctrine\ORM\Configuration; - -assert($configuration instanceof Configuration); -$configuration->setIdentityGenerationPreferences([ - PostgreSQLPlatform::CLASS => ClassMetadata::GENERATOR_TYPE_SEQUENCE, -]); -``` - -When DBAL 4 is released, `AUTO` will result in `IDENTITY`, and the above -configuration should be removed to migrate to it. - -## Deprecate `EntityManagerInterface::getPartialReference()` - -This method does not have a replacement and will be removed in 3.0. - -## Deprecate not-enabling lazy-ghosts - -Not enabling lazy ghost objects is deprecated. In ORM 3.0, they will be always enabled. -Ensure `Doctrine\ORM\Configuration::setLazyGhostObjectEnabled(true)` is called to enable them. - -# Upgrade to 2.16 - -## Deprecated accepting duplicate IDs in the identity map - -For any given entity class and ID value, there should be only one object instance -representing the entity. - -In https://github.com/doctrine/orm/pull/10785, a check was added that will guard this -in the identity map. The most probable cause for violations of this rule are collisions -of application-provided IDs. - -In ORM 2.16.0, the check was added by throwing an exception. In ORM 2.16.1, this will be -changed to a deprecation notice. ORM 3.0 will make it an exception again. Use -`\Doctrine\ORM\Configuration::setRejectIdCollisionInIdentityMap()` if you want to opt-in -to the new mode. - -## Potential changes to the order in which `INSERT`s are executed - -In https://github.com/doctrine/orm/pull/10547, the commit order computation was improved -to fix a series of bugs where a correct (working) commit order was previously not found. -Also, the new computation may get away with fewer queries being executed: By inserting -referred-to entities first and using their ID values for foreign key fields in subsequent -`INSERT` statements, additional `UPDATE` statements that were previously necessary can be -avoided. - -When using database-provided, auto-incrementing IDs, this may lead to IDs being assigned -to entities in a different order than it was previously the case. - -## Deprecated returning post insert IDs from `EntityPersister::executeInserts()` - -Persisters implementing `\Doctrine\ORM\Persisters\Entity\EntityPersister` should no longer -return an array of post insert IDs from their `::executeInserts()` method. Make the -persister call `Doctrine\ORM\UnitOfWork::assignPostInsertId()` instead. - -## Changing the way how reflection-based mapping drivers report fields, deprecated the "old" mode - -In ORM 3.0, a change will be made regarding how the `AttributeDriver` reports field mappings. -This change is necessary to be able to detect (and reject) some invalid mapping configurations. - -To avoid surprises during 2.x upgrades, the new mode is opt-in. It can be activated on the -`AttributeDriver` and `AnnotationDriver` by setting the `$reportFieldsWhereDeclared` -constructor parameter to `true`. It will cause `MappingException`s to be thrown when invalid -configurations are detected. - -Not enabling the new mode will cause a deprecation notice to be raised. In ORM 3.0, -only the new mode will be available. - -# Upgrade to 2.15 - -## Deprecated configuring `JoinColumn` on the inverse side of one-to-one associations - -For one-to-one associations, the side using the `mappedBy` attribute is the inverse side. -The owning side is the entity with the table containing the foreign key. Using `JoinColumn` -configuration on the _inverse_ side now triggers a deprecation notice and will be an error -in 3.0. - -## Deprecated overriding fields or associations not declared in mapped superclasses - -As stated in the documentation, fields and associations may only be overridden when being inherited -from mapped superclasses. Overriding them for parent entity classes now triggers a deprecation notice -and will be an error in 3.0. - -## Deprecated undeclared entity inheritance - -As soon as an entity class inherits from another entity class, inheritance has to -be declared by adding the appropriate configuration for the root entity. - -## Deprecated stubs for "concrete table inheritance" - -This third way of mapping class inheritance was never implemented. Code stubs are -now deprecated and will be removed in 3.0. - -* `\Doctrine\ORM\Mapping\ClassMetadataInfo::INHERITANCE_TYPE_TABLE_PER_CLASS` constant -* `\Doctrine\ORM\Mapping\ClassMetadataInfo::isInheritanceTypeTablePerClass()` method -* Using `TABLE_PER_CLASS` as the value for the `InheritanceType` attribute or annotation - or in XML configuration files. - -# Upgrade to 2.14 - -## Deprecated `Doctrine\ORM\Persisters\Exception\UnrecognizedField::byName($field)` method. - -Use `Doctrine\ORM\Persisters\Exception\UnrecognizedField::byFullyQualifiedName($className, $field)` instead. - -## Deprecated constants of `Doctrine\ORM\Internal\CommitOrderCalculator` - -The following public constants have been deprecated: - -* `CommitOrderCalculator::NOT_VISITED` -* `CommitOrderCalculator::IN_PROGRESS` -* `CommitOrderCalculator::VISITED` - -These constants were used for internal purposes. Relying on them is discouraged. - -## Deprecated `Doctrine\ORM\Query\AST\InExpression` - -The AST parser will create a `InListExpression` or a `InSubselectExpression` when -encountering an `IN ()` DQL expression instead of a generic `InExpression`. - -As a consequence, `SqlWalker::walkInExpression()` has been deprecated in favor of -`SqlWalker::walkInListExpression()` and `SqlWalker::walkInSubselectExpression()`. - -## Deprecated constructing a `CacheKey` without `$hash` - -The `Doctrine\ORM\Cache\CacheKey` class has an explicit constructor now with -an optional parameter `$hash`. That parameter will become mandatory in 3.0. - -## Deprecated `AttributeDriver::$entityAnnotationClasses` - -If you need to change the behavior of `AttributeDriver::isTransient()`, -override that method instead. - -## Deprecated incomplete schema updates - -Using `orm:schema-tool:update` without passing the `--complete` flag is -deprecated. Use schema asset filtering if you need to preserve assets not -managed by DBAL. - -Likewise, calling `SchemaTool::updateSchema()` or -`SchemaTool::getUpdateSchemaSql()` with a second argument is deprecated. - -## Deprecated annotation mapping driver. - -Please switch to one of the other mapping drivers. Native attributes which PHP -supports since version 8.0 are probably your best option. - -As a consequence, the following methods are deprecated: -- `ORMSetup::createAnnotationMetadataConfiguration` -- `ORMSetup::createDefaultAnnotationDriver` - -The marker interface `Doctrine\ORM\Mapping\Annotation` is deprecated as well. -All annotation/attribute classes implement -`Doctrine\ORM\Mapping\MappingAttribute` now. - -## Deprecated `Doctrine\ORM\Proxy\Proxy` interface. - -Use `Doctrine\Persistence\Proxy` instead to check whether proxies are initialized. - -## Deprecated `Doctrine\ORM\Event\LifecycleEventArgs` class. - -It will be removed in 3.0. Use one of the dedicated event classes instead: - -* `Doctrine\ORM\Event\PrePersistEventArgs` -* `Doctrine\ORM\Event\PreUpdateEventArgs` -* `Doctrine\ORM\Event\PreRemoveEventArgs` -* `Doctrine\ORM\Event\PostPersistEventArgs` -* `Doctrine\ORM\Event\PostUpdateEventArgs` -* `Doctrine\ORM\Event\PostRemoveEventArgs` -* `Doctrine\ORM\Event\PostLoadEventArgs` - -# Upgrade to 2.13 - -## Deprecated `EntityManager::create()` - -The constructor of `EntityManager` is now public and should be used instead of the `create()` method. -However, the constructor expects a `Connection` while `create()` accepted an array with connection parameters. -You can pass that array to DBAL's `Doctrine\DBAL\DriverManager::getConnection()` method to bootstrap the -connection. - -## Deprecated `QueryBuilder` methods and constants. - -1. The `QueryBuilder::getState()` method has been deprecated as the builder state is an internal concern. -2. Relying on the type of the query being built by using `QueryBuilder::getType()` has been deprecated. - If necessary, track the type of the query being built outside of the builder. - -The following `QueryBuilder` constants related to the above methods have been deprecated: - -1. `SELECT`, -2. `DELETE`, -3. `UPDATE`, -4. `STATE_DIRTY`, -5. `STATE_CLEAN`. - -## Deprecated omitting only the alias argument for `QueryBuilder::update` and `QueryBuilder::delete` - -When building an UPDATE or DELETE query and when passing a class/type to the function, the alias argument must not be omitted. - -### Before - -```php -$qb = $em->createQueryBuilder() - ->delete('User u') - ->where('u.id = :user_id') - ->setParameter('user_id', 1); -``` - -### After - -```php -$qb = $em->createQueryBuilder() - ->delete('User', 'u') - ->where('u.id = :user_id') - ->setParameter('user_id', 1); -``` - -## Deprecated using the `IDENTITY` identifier strategy on platform that do not support identity columns - -If identity columns are emulated with sequences on the platform you are using, -you should switch to the `SEQUENCE` strategy. - -## Deprecated passing `null` to `Doctrine\ORM\Query::setFirstResult()` - -`$query->setFirstResult(null);` is equivalent to `$query->setFirstResult(0)`. - -## Deprecated calling setters without arguments - -The following methods will require an argument in 3.0. Pass `null` instead of -omitting the argument. - -* `Doctrine\ORM\Event\OnClassMetadataNotFoundEventArgs::setFoundMetadata()` -* `Doctrine\ORM\AbstractQuery::setHydrationCacheProfile()` -* `Doctrine\ORM\AbstractQuery::setResultCache()` -* `Doctrine\ORM\AbstractQuery::setResultCacheProfile()` - -## Deprecated passing invalid fetch modes to `AbstractQuery::setFetchMode()` - -Calling `AbstractQuery::setFetchMode()` with anything else than -`Doctrine\ORM\Mapping::FETCH_EAGER` results in -`Doctrine\ORM\Mapping::FETCH_LAZY` being used. Relying on that behavior is -deprecated and will result in an exception in 3.0. - -## Deprecated `getEntityManager()` in `Doctrine\ORM\Event\OnClearEventArgs` and `Doctrine\ORM\Event\*FlushEventArgs` - -This method has been deprecated in: - -* `Doctrine\ORM\Event\OnClearEventArgs` -* `Doctrine\ORM\Event\OnFlushEventArgs` -* `Doctrine\ORM\Event\PostFlushEventArgs` -* `Doctrine\ORM\Event\PreFlushEventArgs` - -It will be removed in 3.0. Use `getObjectManager()` instead. - -## Prepare split of output walkers and tree walkers - -In 3.0, `SqlWalker` and its child classes won't implement the `TreeWalker` -interface anymore. Relying on that inheritance is deprecated. - -The following methods of the `TreeWalker` interface have been deprecated: - -* `setQueryComponent()` -* `walkSelectClause()` -* `walkFromClause()` -* `walkFunction()` -* `walkOrderByClause()` -* `walkOrderByItem()` -* `walkHavingClause()` -* `walkJoin()` -* `walkSelectExpression()` -* `walkQuantifiedExpression()` -* `walkSubselect()` -* `walkSubselectFromClause()` -* `walkSimpleSelectClause()` -* `walkSimpleSelectExpression()` -* `walkAggregateExpression()` -* `walkGroupByClause()` -* `walkGroupByItem()` -* `walkDeleteClause()` -* `walkUpdateClause()` -* `walkUpdateItem()` -* `walkWhereClause()` -* `walkConditionalExpression()` -* `walkConditionalTerm()` -* `walkConditionalFactor()` -* `walkConditionalPrimary()` -* `walkExistsExpression()` -* `walkCollectionMemberExpression()` -* `walkEmptyCollectionComparisonExpression()` -* `walkNullComparisonExpression()` -* `walkInExpression()` -* `walkInstanceOfExpression()` -* `walkLiteral()` -* `walkBetweenExpression()` -* `walkLikeExpression()` -* `walkStateFieldPathExpression()` -* `walkComparisonExpression()` -* `walkInputParameter()` -* `walkArithmeticExpression()` -* `walkArithmeticTerm()` -* `walkStringPrimary()` -* `walkArithmeticFactor()` -* `walkSimpleArithmeticExpression()` -* `walkPathExpression()` -* `walkResultVariable()` -* `getExecutor()` - -The following changes have been made to the abstract `TreeWalkerAdapter` class: - -* All implementations of now-deprecated `TreeWalker` methods have been - deprecated as well. -* The method `setQueryComponent()` will become protected in 3.0. Calling it - publicly is deprecated. -* The method `_getQueryComponents()` is deprecated, call `getQueryComponents()` - instead. - -On the `TreeWalkerChain` class, all implementations of now-deprecated -`TreeWalker` methods have been deprecated as well. However, `SqlWalker` is -unaffected by those deprecations and will continue to implement all of those -methods. - -## Deprecated passing `null` to `Doctrine\ORM\Query::setDQL()` - -Doing `$query->setDQL(null);` achieves nothing. - -## Deprecated omitting second argument to `NamingStrategy::joinColumnName` - -When implementing `NamingStrategy`, it is deprecated to implement -`joinColumnName()` with only one argument. - -### Before - -```php -getConfiguration(); --$config->addEntityNamespace('CMS', 'My\App\Cms'); -+use My\App\Cms\CmsUser; - --$entityManager->getRepository('CMS:CmsUser'); -+$entityManager->getRepository(CmsUser::class); -``` - -## Deprecate `AttributeDriver::getReader()` and `AnnotationDriver::getReader()` - -That method was inherited from the abstract `AnnotationDriver` class of -`doctrine/persistence`, and does not seem to serve any purpose. - -## Un-deprecate `Doctrine\ORM\Proxy\Proxy` - -Because no forward-compatible new proxy solution had been implemented yet, the -current proxy mechanism is not considered deprecated anymore for the time -being. This applies to the following interfaces/classes: - -* `Doctrine\ORM\Proxy\Proxy` -* `Doctrine\ORM\Proxy\ProxyFactory` - -These methods have been un-deprecated: - -* `Doctrine\ORM\Configuration::getAutoGenerateProxyClasses()` -* `Doctrine\ORM\Configuration::getProxyDir()` -* `Doctrine\ORM\Configuration::getProxyNamespace()` - -Note that the `Doctrine\ORM\Proxy\Autoloader` remains deprecated and will be removed in 3.0. - -## Deprecate helper methods from `AbstractCollectionPersister` - -The following protected methods of -`Doctrine\ORM\Cache\Persister\Collection\AbstractCollectionPersister` -are not in use anymore and will be removed. - -* `evictCollectionCache()` -* `evictElementCache()` - -## Deprecate `Doctrine\ORM\Query\TreeWalkerChainIterator` - -This class won't have a replacement. - -## Deprecate `OnClearEventArgs::getEntityClass()` and `OnClearEventArgs::clearsAllEntities()` - -These methods will be removed in 3.0 along with the ability to partially clear -the entity manager. - -## Deprecate `Doctrine\ORM\Configuration::newDefaultAnnotationDriver` - -This functionality has been moved to the new `ORMSetup` class. Call -`Doctrine\ORM\ORMSetup::createDefaultAnnotationDriver()` to create -a new annotation driver. - -## Deprecate `Doctrine\ORM\Tools\Setup` - -In our effort to migrate from Doctrine Cache to PSR-6, the `Setup` class which -accepted a Doctrine Cache instance in each method has been deprecated. - -The replacement is `Doctrine\ORM\ORMSetup` which accepts a PSR-6 -cache instead. - -## Deprecate `Doctrine\ORM\Cache\MultiGetRegion` - -The interface will be merged with `Doctrine\ORM\Cache\Region` in 3.0. - -# Upgrade to 2.11 - -## Rename `AbstractIdGenerator::generate()` to `generateId()` - -Implementations of `AbstractIdGenerator` have to override the method -`generateId()` without calling the parent implementation. Not doing so is -deprecated. Calling `generate()` on any `AbstractIdGenerator` implementation -is deprecated. - -## PSR-6-based second level cache - -The second level cache has been reworked to consume a PSR-6 cache. Using a -Doctrine Cache instance is deprecated. - -* `DefaultCacheFactory`: The constructor expects a PSR-6 cache item pool as - second argument now. -* `DefaultMultiGetRegion`: This class is deprecated in favor of `DefaultRegion`. -* `DefaultRegion`: - * The constructor expects a PSR-6 cache item pool as second argument now. - * The protected `$cache` property is deprecated. - * The properties `$name` and `$lifetime` as well as the constant - `REGION_KEY_SEPARATOR` and the method `getCacheEntryKey()` are flagged as - `@internal` now. They all will become `private` in 3.0. - * The method `getCache()` is deprecated without replacement. - -## Deprecated: `Doctrine\ORM\Mapping\Driver\PHPDriver` - -Use `StaticPHPDriver` instead when you want to programmatically configure -entity metadata. - -You can convert mappings with the `orm:convert-mapping` command or more simply -in this case, `include` the metadata file from the `loadMetadata` static method -used by the `StaticPHPDriver`. - -## Deprecated: `Setup::registerAutoloadDirectory()` - -Use Composer's autoloader instead. - -## Deprecated: `AbstractHydrator::hydrateRow()` - -Following the deprecation of the method `AbstractHydrator::iterate()`, the -method `hydrateRow()` has been deprecated as well. - -## Deprecate cache settings inspection - -Doctrine does not provide its own cache implementation anymore and relies on -the PSR-6 standard instead. As a consequence, we cannot determine anymore -whether a given cache adapter is suitable for a production environment. -Because of that, functionality that aims to do so has been deprecated: - -* `Configuration::ensureProductionSettings()` -* the `orm:ensure-production-settings` console command - -# Upgrade to 2.10 - -## BC Break: `UnitOfWork` now relies on SPL object IDs, not hashes - -When calling the following methods, you are now supposed to use the result of -`spl_object_id()`, and not `spl_object_hash()`: -- `UnitOfWork::clearEntityChangeSet()` -- `UnitOfWork::setOriginalEntityProperty()` - -## BC Break: Removed `TABLE` id generator strategy - -The implementation was unfinished for 14 years. -It is now deprecated to rely on: -- `Doctrine\ORM\Id\TableGenerator`; -- `Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_TABLE`; -- `Doctrine\ORM\Mapping\ClassMetadata::$tableGeneratorDefinition`; -- or `Doctrine\ORM\Mapping\ClassMetadata::isIdGeneratorTable()`. - -## New method `Doctrine\ORM\EntityManagerInterface#wrapInTransaction($func)` - -Works the same as `Doctrine\ORM\EntityManagerInterface#transactional()` but returns any value returned from `$func` closure rather than just _non-empty value returned from the closure or true_. - -Because of BC policy, the method does not exist on the interface yet. This is the example of safe usage: - -```php -function foo(EntityManagerInterface $entityManager, callable $func) { - if (method_exists($entityManager, 'wrapInTransaction')) { - return $entityManager->wrapInTransaction($func); - } - - return $entityManager->transactional($func); -} -``` - -`Doctrine\ORM\EntityManagerInterface#transactional()` has been deprecated. - -## Minor BC BREAK: some exception methods have been removed - -The following methods were not in use and are very unlikely to be used by -downstream packages or applications, and were consequently removed: - -- `ORMException::entityMissingForeignAssignedId` -- `ORMException::entityMissingAssignedIdForField` -- `ORMException::invalidFlushMode` - -## Deprecated: database-side UUID generation - -[DB-generated UUIDs are deprecated as of `doctrine/dbal` 2.8][DBAL deprecation]. -As a consequence, using the `UUID` strategy for generating identifiers is deprecated as well. -Furthermore, relying on the following classes and methods is deprecated: - -- `Doctrine\ORM\Id\UuidGenerator` -- `Doctrine\ORM\Mapping\ClassMetadataInfo::isIdentifierUuid()` - -[DBAL deprecation]: https://github.com/doctrine/dbal/pull/3212 - -## Minor BC BREAK: Custom hydrators and `toIterable()` - -The type declaration of the `$stmt` parameter of `AbstractHydrator::toIterable()` has been removed. This change might -break custom hydrator implementations that override this very method. - -Overriding this method is not recommended, which is why the method is documented as `@final` now. - -```diff -- public function toIterable(ResultStatement $stmt, ResultSetMapping $resultSetMapping, array $hints = []): iterable -+ public function toIterable($stmt, ResultSetMapping $resultSetMapping, array $hints = []): iterable -``` - -## Deprecated: Entity Namespace Aliases - -Entity namespace aliases are deprecated, use the magic ::class constant to abbreviate full class names -in EntityManager, EntityRepository and DQL. - -```diff -- $entityManager->find('MyBundle:User', $id); -+ $entityManager->find(User::class, $id); -``` - -# Upgrade to 2.9 - -## Minor BC BREAK: Setup tool needs cache implementation - -With the deprecation of doctrine/cache, the setup tool might no longer work as expected without a different cache -implementation. To work around this: -* Install symfony/cache: `composer require symfony/cache`. This will keep previous behaviour without any changes -* Instantiate caches yourself: to use a different cache implementation, pass a cache instance when calling any - configuration factory in the setup tool: - ```diff - - $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir); - + $cache = \Doctrine\Common\Cache\Psr6\DoctrineProvider::wrap($anyPsr6Implementation); - + $config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, $proxyDir, $cache); - ``` -* As a quick workaround, you can lock the doctrine/cache dependency to work around this: `composer require doctrine/cache ^1.11`. - Note that this is only recommended as a bandaid fix, as future versions of ORM will no longer work with doctrine/cache - 1.11. - -## Deprecated: doctrine/cache for metadata caching - -The `Doctrine\ORM\Configuration#setMetadataCacheImpl()` method is deprecated and should no longer be used. Please use -`Doctrine\ORM\Configuration#setMetadataCache()` with any PSR-6 cache adapter instead. - -## Removed: flushing metadata cache - -To support PSR-6 caches, the `--flush` option for the `orm:clear-cache:metadata` command is ignored. Metadata cache is -now always cleared regardless of the cache adapter being used. - -# Upgrade to 2.8 - -## Minor BC BREAK: Failed commit now throw OptimisticLockException - -Method `Doctrine\ORM\UnitOfWork#commit()` can throw an OptimisticLockException when a commit silently fails and returns false -since `Doctrine\DBAL\Connection#commit()` signature changed from returning void to boolean - -## Deprecated: `Doctrine\ORM\AbstractQuery#iterate()` - -The method `Doctrine\ORM\AbstractQuery#iterate()` is deprecated in favor of `Doctrine\ORM\AbstractQuery#toIterable()`. -Note that `toIterable()` yields results of the query, unlike `iterate()` which yielded each result wrapped into an array. - -# Upgrade to 2.7 - -## Added `Doctrine\ORM\AbstractQuery#enableResultCache()` and `Doctrine\ORM\AbstractQuery#disableResultCache()` methods - -Method `Doctrine\ORM\AbstractQuery#useResultCache()` which could be used for both enabling and disabling the cache -(depending on passed flag) was split into two. - -## Minor BC BREAK: paginator output walkers aren't be called anymore on sub-queries for queries without max results - -To optimize DB interaction, `Doctrine\ORM\Tools\Pagination\Paginator` no longer fetches identifiers to be able to -perform the pagination with join collections when max results isn't set in the query. - -## Minor BC BREAK: tables filtered with `schema_filter` are no longer created - -When generating schema diffs, if a source table is filtered out by a `schema_filter` expression, then a `CREATE TABLE` was -always generated, even if the table already existed. This has been changed in this release and the table will no longer -be created. - -## Deprecated number unaware `Doctrine\ORM\Mapping\UnderscoreNamingStrategy` - -In the last patch of the `v2.6.x` series, we fixed a bug that was not converting names properly when they had numbers -(e.g.: `base64Encoded` was wrongly converted to `base64encoded` instead of `base64_encoded`). - -In order to not break BC we've introduced a way to enable the fixed behavior using a boolean constructor argument. This -argument will be removed in 3.0 and the default behavior will be the fixed one. - -## Deprecated: `Doctrine\ORM\AbstractQuery#useResultCache()` - -Method `Doctrine\ORM\AbstractQuery#useResultCache()` is deprecated because it is split into `enableResultCache()` -and `disableResultCache()`. It will be removed in 3.0. - -## Deprecated code generators and related console commands - -These console commands have been deprecated: - - * `orm:convert-mapping` - * `orm:generate:entities` - * `orm:generate-repositories` - -These classes have been deprecated: - - * `Doctrine\ORM\Tools\EntityGenerator` - * `Doctrine\ORM\Tools\EntityRepositoryGenerator` - -Whole Doctrine\ORM\Tools\Export namespace with all its members have been deprecated as well. - -## Deprecated `Doctrine\ORM\Proxy\Proxy` marker interface - -Proxy objects in Doctrine ORM 3.0 will no longer implement `Doctrine\ORM\Proxy\Proxy` nor -`Doctrine\Persistence\Proxy`: instead, they implement -`ProxyManager\Proxy\GhostObjectInterface`. - -These related classes have been deprecated: - - * `Doctrine\ORM\Proxy\ProxyFactory` - * `Doctrine\ORM\Proxy\Autoloader` - we suggest using the composer autoloader instead - -These methods have been deprecated: - - * `Doctrine\ORM\Configuration#getAutoGenerateProxyClasses()` - * `Doctrine\ORM\Configuration#getProxyDir()` - * `Doctrine\ORM\Configuration#getProxyNamespace()` - -## Deprecated `Doctrine\ORM\Version` - -The `Doctrine\ORM\Version` class is now deprecated and will be removed in Doctrine ORM 3.0: -please refrain from checking the ORM version at runtime or use Composer's [runtime API](https://getcomposer.org/doc/07-runtime.md#knowing-whether-package-x-is-installed-in-version-y). - -## Deprecated `EntityManager#merge()` method - -Merge semantics was a poor fit for the PHP "share-nothing" architecture. -In addition to that, merging caused multiple issues with data integrity -in the managed entity graph, which was constantly spawning more edge-case bugs/scenarios. - -The following API methods were therefore deprecated: - -* `EntityManager#merge()` -* `UnitOfWork#merge()` - -An alternative to `EntityManager#merge()` will not be provided by ORM 3.0, since the merging -semantics should be part of the business domain rather than the persistence domain of an -application. If your application relies heavily on CRUD-alike interactions and/or `PATCH` -restful operations, you should look at alternatives such as [JMSSerializer](https://github.com/schmittjoh/serializer). - -## Extending `EntityManager` is deprecated - -Final keyword will be added to the `EntityManager::class` in Doctrine ORM 3.0 in order to ensure that EntityManager - is not used as valid extension point. Valid extension point should be EntityManagerInterface. - -## Deprecated `EntityManager#clear($entityName)` - -If your code relies on clearing a single entity type via `EntityManager#clear($entityName)`, -the signature has been changed to `EntityManager#clear()`. - -The main reason is that partial clears caused multiple issues with data integrity -in the managed entity graph, which was constantly spawning more edge-case bugs/scenarios. - -## Deprecated `EntityManager#flush($entity)` and `EntityManager#flush($entities)` - -If your code relies on single entity flushing optimisations via -`EntityManager#flush($entity)`, the signature has been changed to -`EntityManager#flush()`. - -Said API was affected by multiple data integrity bugs due to the fact -that change tracking was being restricted upon a subset of the managed -entities. The ORM cannot support committing subsets of the managed -entities while also guaranteeing data integrity, therefore this -utility was removed. - -The `flush()` semantics will remain the same, but the change tracking will be performed -on all entities managed by the unit of work, and not just on the provided -`$entity` or `$entities`, as the parameter is now completely ignored. - -The same applies to `UnitOfWork#commit($entity)`, which will simply be -`UnitOfWork#commit()`. - -If you would still like to perform batching operations over small `UnitOfWork` -instances, it is suggested to follow these paths instead: - - * eagerly use `EntityManager#clear()` in conjunction with a specific second level - cache configuration (see http://docs.doctrine-project.org/projects/doctrine-orm/en/stable/reference/second-level-cache.html) - * use an explicit change tracking policy (see http://docs.doctrine-project.org/projects/doctrine-orm/en/stable/reference/change-tracking-policies.html) - -## Deprecated `YAML` mapping drivers. - -If your code relies on `YamlDriver` or `SimpleYamlDriver`, you **MUST** change to -annotation or XML drivers instead. - -## Deprecated: `Doctrine\ORM\EntityManagerInterface#copy()` - -Method `Doctrine\ORM\EntityManagerInterface#copy()` never got its implementation and is deprecated. -It will be removed in 3.0. - -# Upgrade to 2.6 - -## Added `Doctrine\ORM\EntityRepository::count()` method - -`Doctrine\ORM\EntityRepository::count()` has been added. This new method has different -signature than `Countable::count()` (required parameter) and therefore are not compatible. -If your repository implemented the `Countable` interface, you will have to use -`$repository->count([])` instead and not implement `Countable` interface anymore. - -## Minor BC BREAK: `Doctrine\ORM\Tools\Console\ConsoleRunner` is now final - -Since it's just an utilitarian class and should not be inherited. - -## Minor BC BREAK: removed `Doctrine\ORM\Query\QueryException::associationPathInverseSideNotSupported()` - -Method `Doctrine\ORM\Query\QueryException::associationPathInverseSideNotSupported()` -now has a required parameter `$pathExpr`. - -## Minor BC BREAK: removed `Doctrine\ORM\Query\Parser#isInternalFunction()` - -Method `Doctrine\ORM\Query\Parser#isInternalFunction()` was removed because -the distinction between internal function and user defined DQL was removed. -[#6500](https://github.com/doctrine/orm/pull/6500) - -## Minor BC BREAK: removed `Doctrine\ORM\ORMException#overwriteInternalDQLFunctionNotAllowed()` - -Method `Doctrine\ORM\Query\Parser#overwriteInternalDQLFunctionNotAllowed()` was -removed because of the choice to allow users to overwrite internal functions, ie -`AVG`, `SUM`, `COUNT`, `MIN` and `MAX`. [#6500](https://github.com/doctrine/orm/pull/6500) - -## PHP 7.1 is now required - -Doctrine 2.6 now requires PHP 7.1 or newer. - -As a consequence, automatic cache setup in Doctrine\ORM\Tools\Setup::create*Configuration() was changed: -- APCu extension (ext-apcu) will now be used instead of abandoned APC (ext-apc). -- Memcached extension (ext-memcached) will be used instead of obsolete Memcache (ext-memcache). -- XCache support was dropped as it doesn't work with PHP 7. - -# Upgrade to 2.5 - -## Minor BC BREAK: removed `Doctrine\ORM\Query\SqlWalker#walkCaseExpression()` - -Method `Doctrine\ORM\Query\SqlWalker#walkCaseExpression()` was unused and part -of the internal API of the ORM, so it was removed. [#5600](https://github.com/doctrine/orm/pull/5600). - -## Minor BC BREAK: removed $className parameter on `AbstractEntityInheritancePersister#getSelectJoinColumnSQL()` - -As `$className` parameter was not used in the method, it was safely removed. - -## Minor BC BREAK: query cache key time is now a float - -As of 2.5.5, the `QueryCacheEntry#time` property will contain a float value -instead of an integer in order to have more precision and also to be consistent -with the `TimestampCacheEntry#time`. - -## Minor BC BREAK: discriminator map must now include all non-transient classes - -It is now required that you declare the root of an inheritance in the -discriminator map. - -When declaring an inheritance map, it was previously possible to skip the root -of the inheritance in the discriminator map. This was actually a validation -mistake by Doctrine2 and led to problems when trying to persist instances of -that class. - -If you don't plan to persist instances some classes in your inheritance, then -either: - - - make those classes `abstract` - - map those classes as `MappedSuperclass` - -## Minor BC BREAK: ``EntityManagerInterface`` instead of ``EntityManager`` in type-hints - -As of 2.5, classes requiring the ``EntityManager`` in any method signature will now require -an ``EntityManagerInterface`` instead. -If you are extending any of the following classes, then you need to check following -signatures: - -- ``Doctrine\ORM\Tools\DebugUnitOfWorkListener#dumpIdentityMap(EntityManagerInterface $em)`` -- ``Doctrine\ORM\Mapping\ClassMetadataFactory#setEntityManager(EntityManagerInterface $em)`` - -## Minor BC BREAK: Custom Hydrators API change - -As of 2.5, `AbstractHydrator` does not enforce the usage of cache as part of -API, and now provides you a clean API for column information through the method -`hydrateColumnInfo($column)`. -Cache variable being passed around by reference is no longer needed since -Hydrators are per query instantiated since Doctrine 2.4. - -## Minor BC BREAK: Entity based ``EntityManager#clear()`` calls follow cascade detach - -Whenever ``EntityManager#clear()`` method gets called with a given entity class -name, until 2.4, it was only detaching the specific requested entity. -As of 2.5, ``EntityManager`` will follow configured cascades, providing a better -memory management since associations will be garbage collected, optimizing -resources consumption on long running jobs. - -## BC BREAK: NamingStrategy interface changes - -1. A new method ``embeddedFieldToColumnName($propertyName, $embeddedColumnName)`` - -This method generates the column name for fields of embedded objects. If you implement your custom NamingStrategy, you -now also need to implement this new method. - -2. A change to method ``joinColumnName()`` to include the $className - -## Updates on entities scheduled for deletion are no longer processed - -In Doctrine 2.4, if you modified properties of an entity scheduled for deletion, UnitOfWork would -produce an UPDATE statement to be executed right before the DELETE statement. The entity in question -was therefore present in ``UnitOfWork#entityUpdates``, which means that ``preUpdate`` and ``postUpdate`` -listeners were (quite pointlessly) called. In ``preFlush`` listeners, it used to be possible to undo -the scheduled deletion for updated entities (by calling ``persist()`` if the entity was found in both -``entityUpdates`` and ``entityDeletions``). This does not work any longer, because the entire changeset -calculation logic is optimized away. - -## Minor BC BREAK: Default lock mode changed from LockMode::NONE to null in method signatures - -A misconception concerning default lock mode values in method signatures lead to unexpected behaviour -in SQL statements on SQL Server. With a default lock mode of ``LockMode::NONE`` throughout the -method signatures in ORM, the table lock hint ``WITH (NOLOCK)`` was appended to all locking related -queries by default. This could result in unpredictable results because an explicit ``WITH (NOLOCK)`` -table hint tells SQL Server to run a specific query in transaction isolation level READ UNCOMMITTED -instead of the default READ COMMITTED transaction isolation level. -Therefore there now is a distinction between ``LockMode::NONE`` and ``null`` to be able to tell -Doctrine whether to add table lock hints to queries by intention or not. To achieve this, the following -method signatures have been changed to declare ``$lockMode = null`` instead of ``$lockMode = LockMode::NONE``: - -- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#getSelectSQL()`` -- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#load()`` -- ``Doctrine\ORM\Cache\Persister\AbstractEntityPersister#refresh()`` -- ``Doctrine\ORM\Decorator\EntityManagerDecorator#find()`` -- ``Doctrine\ORM\EntityManager#find()`` -- ``Doctrine\ORM\EntityRepository#find()`` -- ``Doctrine\ORM\Persisters\BasicEntityPersister#getSelectSQL()`` -- ``Doctrine\ORM\Persisters\BasicEntityPersister#load()`` -- ``Doctrine\ORM\Persisters\BasicEntityPersister#refresh()`` -- ``Doctrine\ORM\Persisters\EntityPersister#getSelectSQL()`` -- ``Doctrine\ORM\Persisters\EntityPersister#load()`` -- ``Doctrine\ORM\Persisters\EntityPersister#refresh()`` -- ``Doctrine\ORM\Persisters\JoinedSubclassPersister#getSelectSQL()`` - -You should update signatures for these methods if you have subclassed one of the above classes. -Please also check the calling code of these methods in your application and update if necessary. - -**Note:** -This in fact is really a minor BC BREAK and should not have any affect on database vendors -other than SQL Server because it is the only one that supports and therefore cares about -``LockMode::NONE``. It's really just a FIX for SQL Server environments using ORM. - -## Minor BC BREAK: `__clone` method not called anymore when entities are instantiated via metadata API - -As of PHP 5.6, instantiation of new entities is deferred to the -[`doctrine/instantiator`](https://github.com/doctrine/instantiator) library, which will avoid calling `__clone` -or any public API on instantiated objects. - -## BC BREAK: `Doctrine\ORM\Repository\DefaultRepositoryFactory` is now `final` - -Please implement the `Doctrine\ORM\Repository\RepositoryFactory` interface instead of extending -the `Doctrine\ORM\Repository\DefaultRepositoryFactory`. - -## BC BREAK: New object expression DQL queries now respects user provided aliasing and not return consumed fields - -When executing DQL queries with new object expressions, instead of returning DTOs numerically indexes, it will now respect user provided aliases. Consider the following query: - - SELECT new UserDTO(u.id,u.name) as user,new AddressDTO(a.street,a.postalCode) as address, a.id as addressId FROM User u INNER JOIN u.addresses a WITH a.isPrimary = true - -Previously, your result would be similar to this: - - array( - 0=>array( - 0=>{UserDTO object}, - 1=>{AddressDTO object}, - 2=>{u.id scalar}, - 3=>{u.name scalar}, - 4=>{a.street scalar}, - 5=>{a.postalCode scalar}, - 'addressId'=>{a.id scalar}, - ), - ... - ) - -From now on, the resultset will look like this: - - array( - 0=>array( - 'user'=>{UserDTO object}, - 'address'=>{AddressDTO object}, - 'addressId'=>{a.id scalar} - ), - ... - ) - -## Minor BC BREAK: added second parameter $indexBy in EntityRepository#createQueryBuilder method signature - -Added way to access the underlying QueryBuilder#from() method's 'indexBy' parameter when using EntityRepository#createQueryBuilder() - -# Upgrade to 2.4 - -## BC BREAK: Compatibility Bugfix in PersistentCollection#matching() - -In Doctrine 2.3 it was possible to use the new ``matching($criteria)`` -functionality by adding constraints for assocations based on ID: - - Criteria::expr()->eq('association', $assocation->getId()); - -This functionality does not work on InMemory collections however, because -in memory criteria compares object values based on reference. -As of 2.4 the above code will throw an exception. You need to change -offending code to pass the ``$assocation`` reference directly: - - Criteria::expr()->eq('association', $assocation); - -## Composer is now the default autoloader - -The test suite now runs with composer autoloading. Support for PEAR, and tarball autoloading is deprecated. -Support for GIT submodules is removed. - -## OnFlush and PostFlush event always called - -Before 2.4 the postFlush and onFlush events were only called when there were -actually entities that changed. Now these events are called no matter if there -are entities in the UoW or changes are found. - -## Parenthesis are now considered in arithmetic expression - -Before 2.4 parenthesis are not considered in arithmetic primary expression. -That's conceptually wrong, since it might result in wrong values. For example: - -The DQL: - - SELECT 100 / ( 2 * 2 ) FROM MyEntity - -Before 2.4 it generates the SQL: - - SELECT 100 / 2 * 2 FROM my_entity - -Now parenthesis are considered, the previous DQL will generate: - - SELECT 100 / (2 * 2) FROM my_entity - -# Upgrade to 2.3 - -## Auto Discriminator Map breaks userland implementations with Listener - -The new feature to detect discriminator maps automatically when none -are provided breaks userland implementations doing this with a -listener in ``loadClassMetadata`` event. - -## EntityManager#find() not calls EntityRepository#find() anymore - -Previous to 2.3, calling ``EntityManager#find()`` would be delegated to -``EntityRepository#find()``. This has lead to some unexpected behavior in the -core of Doctrine when people have overwritten the find method in their -repositories. That is why this behavior has been reversed in 2.3, and -``EntityRepository#find()`` calls ``EntityManager#find()`` instead. - -## EntityGenerator add*() method generation - -When generating an add*() method for a collection the EntityGenerator will now not -use the Type-Hint to get the singular for the collection name, but use the field-name -and strip a trailing "s" character if there is one. - -## Merge copies non persisted properties too - -When merging an entity in UoW not only mapped properties are copied, but also others. - -## Query, QueryBuilder and NativeQuery parameters *BC break* - -From now on, parameters in queries is an ArrayCollection instead of a simple array. -This affects heavily the usage of setParameters(), because it will not append anymore -parameters to query, but will actually override the already defined ones. -Whenever you are retrieving a parameter (ie. $query->getParameter(1)), you will -receive an instance of Query\Parameter, which contains the methods "getName", -"getValue" and "getType". Parameters are also only converted to when necessary, and -not when they are set. - -Also, related functions were affected: - -* execute($parameters, $hydrationMode) the argument $parameters can be either an key=>value array or an ArrayCollection instance -* iterate($parameters, $hydrationMode) the argument $parameters can be either an key=>value array or an ArrayCollection instance -* setParameters($parameters) the argument $parameters can be either an key=>value array or an ArrayCollection instance -* getParameters() now returns ArrayCollection instead of array -* getParameter($key) now returns Parameter instance instead of parameter value - -## Query TreeWalker method renamed - -Internal changes were made to DQL and SQL generation. If you have implemented your own TreeWalker, -you probably need to update it. The method walkJoinVariableDeclaration is now named walkJoin. - -## New methods in TreeWalker interface *BC break* - -Two methods getQueryComponents() and setQueryComponent() were added to the TreeWalker interface and all its implementations -including TreeWalkerAdapter, TreeWalkerChain and SqlWalker. If you have your own implementation not inheriting from one of the -above you must implement these new methods. - -## Metadata Drivers - -Metadata drivers have been rewritten to reuse code from `Doctrine\Persistence`. Anyone who is using the -`Doctrine\ORM\Mapping\Driver\Driver` interface should instead refer to -`Doctrine\Persistence\Mapping\Driver\MappingDriver`. Same applies to -`Doctrine\ORM\Mapping\Driver\AbstractFileDriver`: you should now refer to -`Doctrine\Persistence\Mapping\Driver\FileDriver`. - -Also, following mapping drivers have been deprecated, please use their replacements in Doctrine\Common as listed: - - * `Doctrine\ORM\Mapping\Driver\DriverChain` => `Doctrine\Persistence\Mapping\Driver\MappingDriverChain` - * `Doctrine\ORM\Mapping\Driver\PHPDriver` => `Doctrine\Persistence\Mapping\Driver\PHPDriver` - * `Doctrine\ORM\Mapping\Driver\StaticPHPDriver` => `Doctrine\Persistence\Mapping\Driver\StaticPHPDriver` - -# Upgrade to 2.2 - -## ResultCache implementation rewritten - -The result cache is completely rewritten and now works on the database result level, not inside the ORM AbstractQuery -anymore. This means that for result cached queries the hydration will now always be performed again, regardless of -the hydration mode. Affected areas are: - -1. Fixes the problem that entities coming from the result cache were not registered in the UnitOfWork - leading to problems during EntityManager#flush. Calls to EntityManager#merge are not necessary anymore. -2. Affects the array hydrator which now includes the overhead of hydration compared to caching the final result. - -The API is backwards compatible however most of the getter methods on the `AbstractQuery` object are now -deprecated in favor of calling AbstractQuery#getQueryCacheProfile(). This method returns a `Doctrine\DBAL\Cache\QueryCacheProfile` -instance with access to result cache driver, lifetime and cache key. - - -## EntityManager#getPartialReference() creates read-only entity - -Entities returned from EntityManager#getPartialReference() are now marked as read-only if they -haven't been in the identity map before. This means objects of this kind never lead to changes -in the UnitOfWork. - - -## Fields omitted in a partial DQL query or a native query are never updated - -Fields of an entity that are not returned from a partial DQL Query or native SQL query -will never be updated through an UPDATE statement. - - -## Removed support for onUpdate in @JoinColumn - -The onUpdate foreign key handling makes absolutely no sense in an ORM. Additionally Oracle doesn't even support it. Support for it is removed. - - -## Changes in Annotation Handling - -There have been some changes to the annotation handling in Common 2.2 again, that affect how people with old configurations -from 2.0 have to configure the annotation driver if they don't use `Configuration::newDefaultAnnotationDriver()`: - - // Register the ORM Annotations in the AnnotationRegistry - AnnotationRegistry::registerFile('path/to/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php'); - - $reader = new \Doctrine\Common\Annotations\SimpleAnnotationReader(); - $reader->addNamespace('Doctrine\ORM\Mapping'); - $reader = new \Doctrine\Common\Annotations\CachedReader($reader, new ArrayCache()); - - $driver = new AnnotationDriver($reader, (array)$paths); - - $config->setMetadataDriverImpl($driver); - - -## Scalar mappings can now be omitted from DQL result - -You are now allowed to mark scalar SELECT expressions as HIDDEN an they are not hydrated anymore. -Example: - -SELECT u, SUM(a.id) AS HIDDEN numArticles FROM User u LEFT JOIN u.Articles a ORDER BY numArticles DESC HAVING numArticles > 10 - -Your result will be a collection of Users, and not an array with key 0 as User object instance and "numArticles" as the number of articles per user - - -## Map entities as scalars in DQL result - -When hydrating to array or even a mixed result in object hydrator, previously you had the 0 index holding you entity instance. -You are now allowed to alias this, providing more flexibility for you code. -Example: - -SELECT u AS user FROM User u - -Will now return a collection of arrays with index "user" pointing to the User object instance. - - -## Performance optimizations - -Thousands of lines were completely reviewed and optimized for best performance. -Removed redundancy and improved code readability made now internal Doctrine code easier to understand. -Also, Doctrine 2.2 now is around 10-15% faster than 2.1. - -## EntityManager#find(null) - -Previously EntityManager#find(null) returned null. It now throws an exception. - -# Upgrade to 2.1 - -## Interface for EntityRepository - -The EntityRepository now has an interface Doctrine\Persistence\ObjectRepository. This means that your classes that override EntityRepository and extend find(), findOneBy() or findBy() must be adjusted to follow this interface. - -## AnnotationReader changes - -The annotation reader was heavily refactored between 2.0 and 2.1-RC1. In theory the operation of the new reader should be backwards compatible, but it has to be setup differently to work that way: - - // new call to the AnnotationRegistry - \Doctrine\Common\Annotations\AnnotationRegistry::registerFile('/doctrine-src/src/Mapping/Driver/DoctrineAnnotations.php'); - - $reader = new \Doctrine\Common\Annotations\AnnotationReader(); - $reader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); - // new code necessary starting here - $reader->setIgnoreNotImportedAnnotations(true); - $reader->setEnableParsePhpImports(false); - $reader = new \Doctrine\Common\Annotations\CachedReader( - new \Doctrine\Common\Annotations\IndexedReader($reader), new ArrayCache() - ); - -This is already done inside the ``$config->newDefaultAnnotationDriver``, so everything should automatically work if you are using this method. You can verify if everything still works by executing a console command such as schema-validate that loads all metadata into memory. - -# Update from 2.0-BETA3 to 2.0-BETA4 - -## XML Driver element demoted to attribute - -We changed how the XML Driver allows to define the change-tracking-policy. The working case is now: - - - -# Update from 2.0-BETA2 to 2.0-BETA3 - -## Serialization of Uninitialized Proxies - -As of Beta3 you can now serialize uninitialized proxies, an exception will only be thrown when -trying to access methods on the unserialized proxy as long as it has not been re-attached to the -EntityManager using `EntityManager#merge()`. See this example: - - $proxy = $em->getReference('User', 1); - - $serializedProxy = serialize($proxy); - $detachedProxy = unserialized($serializedProxy); - - echo $em->contains($detachedProxy); // FALSE - - try { - $detachedProxy->getId(); // uninitialized detached proxy - } catch(Exception $e) { - - } - $attachedProxy = $em->merge($detachedProxy); - echo $attackedProxy->getId(); // works! - -## Changed SQL implementation of Postgres and Oracle DateTime types - -The DBAL Type "datetime" included the Timezone Offset in both Postgres and Oracle. As of this version they are now -generated without Timezone (TIMESTAMP WITHOUT TIME ZONE instead of TIMESTAMP WITH TIME ZONE). -See [this comment to Ticket DBAL-22](http://www.doctrine-project.org/jira/browse/DBAL-22?focusedCommentId=13396&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_13396) -for more details as well as migration issues for PostgreSQL and Oracle. - -Both Postgres and Oracle will throw Exceptions during hydration of Objects with "DateTime" fields unless migration steps are taken! - -## Removed multi-dot/deep-path expressions in DQL - -The support for implicit joins in DQL through the multi-dot/Deep Path Expressions -was dropped. For example: - - SELECT u FROM User u WHERE u.group.name = ?1 - -See the "u.group.id" here is using multi dots (deep expression) to walk -through the graph of objects and properties. Internally the DQL parser -would rewrite these queries to: - - SELECT u FROM User u JOIN u.group g WHERE g.name = ?1 - -This explicit notation will be the only supported notation as of now. The internal -handling of multi-dots in the DQL Parser was very complex, error prone in edge cases -and required special treatment for several features we added. Additionally -it had edge cases that could not be solved without making the DQL Parser -even much more complex. For this reason we will drop the support for the -deep path expressions to increase maintainability and overall performance -of the DQL parsing process. This will benefit any DQL query being parsed, -even those not using deep path expressions. - -Note that the generated SQL of both notations is exactly the same! You -don't loose anything through this. - -## Default Allocation Size for Sequences - -The default allocation size for sequences has been changed from 10 to 1. This step was made -to not cause confusion with users and also because it is partly some kind of premature optimization. - -# Update from 2.0-BETA1 to 2.0-BETA2 - -There are no backwards incompatible changes in this release. - -# Upgrade from 2.0-ALPHA4 to 2.0-BETA1 - -## EntityRepository deprecates access to protected variables - -Instead of accessing protected variables for the EntityManager in -a custom EntityRepository it is now required to use the getter methods -for all the three instance variables: - -* `$this->_em` now accessible through `$this->getEntityManager()` -* `$this->_class` now accessible through `$this->getClassMetadata()` -* `$this->_entityName` now accessible through `$this->getEntityName()` - -Important: For Beta 2 the protected visibility of these three properties will be -changed to private! - -## Console migrated to Symfony Console - -The Doctrine CLI has been replaced by Symfony Console Configuration - -Instead of having to specify: - - [php] - $cliConfig = new CliConfiguration(); - $cliConfig->setAttribute('em', $entityManager); - -You now have to configure the script like: - - [php] - $helperSet = new \Symfony\Components\Console\Helper\HelperSet(array( - 'db' => new \Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper($em->getConnection()), - 'em' => new \Doctrine\ORM\Tools\Console\Helper\EntityManagerHelper($em) - )); - -## Console: No need for Mapping Paths anymore - -In previous versions you had to specify the --from and --from-path options -to show where your mapping paths are from the console. However this information -is already known from the Mapping Driver configuration, so the requirement -for this options were dropped. - -Instead for each console command all the entities are loaded and to -restrict the operation to one or more sub-groups you can use the --filter flag. - -## AnnotationDriver is not a default mapping driver anymore - -In conjunction with the recent changes to Console we realized that the -annotations driver being a default metadata driver lead to lots of glue -code in the console components to detect where entities lie and how to load -them for batch updates like SchemaTool and other commands. However the -annotations driver being a default driver does not really help that much -anyways. - -Therefore we decided to break backwards compatibility in this issue and drop -the support for Annotations as Default Driver and require our users to -specify the driver explicitly (which allows us to ask for the path to all -entities). - -If you are using the annotations metadata driver as default driver, you -have to add the following lines to your bootstrap code: - - $driverImpl = $config->newDefaultAnnotationDriver(array(__DIR__."/Entities")); - $config->setMetadataDriverImpl($driverImpl); - -You have to specify the path to your entities as either string of a single -path or array of multiple paths -to your entities. This information will be used by all console commands to -access all entities. - -Xml and Yaml Drivers work as before! - - -## New inversedBy attribute - -It is now *mandatory* that the owning side of a bidirectional association specifies the -'inversedBy' attribute that points to the name of the field on the inverse side that completes -the association. Example: - - [php] - // BEFORE (ALPHA4 AND EARLIER) - class User - { - //... - /** @OneToOne(targetEntity="Address", mappedBy="user") */ - private $address; - //... - } - class Address - { - //... - /** @OneToOne(targetEntity="User") */ - private $user; - //... - } - - // SINCE BETA1 - // User class DOES NOT CHANGE - class Address - { - //... - /** @OneToOne(targetEntity="User", inversedBy="address") */ - private $user; - //... - } - -Thus, the inversedBy attribute is the counterpart to the mappedBy attribute. This change -was necessary to enable some simplifications and further performance improvements. We -apologize for the inconvenience. - -## Default Property for Field Mappings - -The "default" option for database column defaults has been removed. If desired, database column defaults can -be implemented by using the columnDefinition attribute of the @Column annotation (or the appropriate XML and YAML equivalents). -Prefer PHP default values, if possible. - -## Selecting Partial Objects - -Querying for partial objects now has a new syntax. The old syntax to query for partial objects -now has a different meaning. This is best illustrated by an example. If you previously -had a DQL query like this: - - [sql] - SELECT u.id, u.name FROM User u - -Since BETA1, simple state field path expressions in the select clause are used to select -object fields as plain scalar values (something that was not possible before). -To achieve the same result as previously (that is, a partial object with only id and name populated) -you need to use the following, explicit syntax: - - [sql] - SELECT PARTIAL u.{id,name} FROM User u - -## XML Mapping Driver - -The 'inheritance-type' attribute changed to take last bit of ClassMetadata constant names, i.e. -NONE, SINGLE_TABLE, INHERITANCE_TYPE_JOINED - -## YAML Mapping Driver - -The way to specify lifecycle callbacks in YAML Mapping driver was changed to allow for multiple callbacks -per event. The Old syntax ways: - - [yaml] - lifecycleCallbacks: - doStuffOnPrePersist: prePersist - doStuffOnPostPersist: postPersist - -The new syntax is: - - [yaml] - lifecycleCallbacks: - prePersist: [ doStuffOnPrePersist, doOtherStuffOnPrePersistToo ] - postPersist: [ doStuffOnPostPersist ] - -## PreUpdate Event Listeners - -Event Listeners listening to the 'preUpdate' event can only affect the primitive values of entity changesets -by using the API on the `PreUpdateEventArgs` instance passed to the preUpdate listener method. Any changes -to the state of the entitys properties won't affect the database UPDATE statement anymore. This gives drastic -performance benefits for the preUpdate event. - -## Collection API - -The Collection interface in the Common package has been updated with some missing methods -that were present only on the default implementation, ArrayCollection. Custom collection -implementations need to be updated to adhere to the updated interface. - -# Upgrade from 2.0-ALPHA3 to 2.0-ALPHA4 - -## CLI Controller changes - -CLI main object changed its name and namespace. Renamed from Doctrine\ORM\Tools\Cli to Doctrine\Common\Cli\CliController. -Doctrine\Common\Cli\CliController now only deals with namespaces. Ready to go, Core, Dbal and Orm are available and you can subscribe new tasks by retrieving the namespace and including new task. Example: - - [php] - $cli->getNamespace('Core')->addTask('my-example', '\MyProject\Tools\Cli\Tasks\MyExampleTask'); - - -## CLI Tasks documentation - -Tasks have implemented a new way to build documentation. Although it is still possible to define the help manually by extending the basicHelp and extendedHelp, they are now optional. -With new required method AbstractTask::buildDocumentation, its implementation defines the TaskDocumentation instance (accessible through AbstractTask::getDocumentation()), basicHelp and extendedHelp are now not necessary to be implemented. - -## Changes in Method Signatures - - * A bunch of Methods on both Doctrine\DBAL\Platforms\AbstractPlatform and Doctrine\DBAL\Schema\AbstractSchemaManager - have changed quite significantly by adopting the new Schema instance objects. - -## Renamed Methods - - * Doctrine\ORM\AbstractQuery::setExpireResultCache() -> expireResultCache() - * Doctrine\ORM\Query::setExpireQueryCache() -> expireQueryCache() - -## SchemaTool Changes - - * "doctrine schema-tool --drop" now always drops the complete database instead of - only those tables defined by the current database model. The previous method had - problems when foreign keys of orphaned tables pointed to tables that were scheduled - for deletion. - * Use "doctrine schema-tool --update" to get a save incremental update for your - database schema without deleting any unused tables, sequences or foreign keys. - * Use "doctrine schema-tool --complete-update" to do a full incremental update of - your schema. -# Upgrade from 2.0-ALPHA2 to 2.0-ALPHA3 - -This section details the changes made to Doctrine 2.0-ALPHA3 to make it easier for you -to upgrade your projects to use this version. - -## CLI Changes - -The $args variable used in the cli-config.php for configuring the Doctrine CLI has been renamed to $globalArguments. - -## Proxy class changes - -You are now required to make supply some minimalist configuration with regards to proxy objects. That involves 2 new configuration options. First, the directory where generated proxy classes should be placed needs to be specified. Secondly, you need to configure the namespace used for proxy classes. The following snippet shows an example: - - [php] - // step 1: configure directory for proxy classes - // $config instanceof Doctrine\ORM\Configuration - $config->setProxyDir('/path/to/myproject/lib/MyProject/Generated/Proxies'); - $config->setProxyNamespace('MyProject\Generated\Proxies'); - -Note that proxy classes behave exactly like any other classes when it comes to class loading. Therefore you need to make sure the proxy classes can be loaded by some class loader. If you place the generated proxy classes in a namespace and directory under your projects class files, like in the example above, it would be sufficient to register the MyProject namespace on a class loader. Since the proxy classes are contained in that namespace and adhere to the standards for class loading, no additional work is required. -Generating the proxy classes into a namespace within your class library is the recommended setup. - -Entities with initialized proxy objects can now be serialized and unserialized properly from within the same application. - -For more details refer to the Configuration section of the manual. - -## Removed allowPartialObjects configuration option - -The allowPartialObjects configuration option together with the `Configuration#getAllowPartialObjects` and `Configuration#setAllowPartialObjects` methods have been removed. -The new behavior is as if the option were set to FALSE all the time, basically disallowing partial objects globally. However, you can still use the `Query::HINT_FORCE_PARTIAL_LOAD` query hint to force a query to return partial objects for optimization purposes. - -## Renamed Methods - -* Doctrine\ORM\Configuration#getCacheDir() to getProxyDir() -* Doctrine\ORM\Configuration#setCacheDir($dir) to setProxyDir($dir) diff --git a/vendor/doctrine/orm/composer.json b/vendor/doctrine/orm/composer.json deleted file mode 100644 index 2a75126..0000000 --- a/vendor/doctrine/orm/composer.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "name": "doctrine/orm", - "type": "library", - "description": "Object-Relational-Mapper for PHP", - "keywords": ["orm", "database"], - "homepage": "https://www.doctrine-project.org/projects/orm.html", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"}, - {"name": "Jonathan Wage", "email": "jonwage@gmail.com"}, - {"name": "Marco Pivetta", "email": "ocramius@gmail.com"} - ], - "config": { - "allow-plugins": { - "composer/package-versions-deprecated": true, - "dealerdirect/phpcodesniffer-composer-installer": true - }, - "sort-packages": true - }, - "require": { - "php": "^8.1", - "composer-runtime-api": "^2", - "ext-ctype": "*", - "doctrine/collections": "^2.2", - "doctrine/dbal": "^3.8.2 || ^4", - "doctrine/deprecations": "^0.5.3 || ^1", - "doctrine/event-manager": "^1.2 || ^2", - "doctrine/inflector": "^1.4 || ^2.0", - "doctrine/instantiator": "^1.3 || ^2", - "doctrine/lexer": "^3", - "doctrine/persistence": "^3.3.1", - "psr/cache": "^1 || ^2 || ^3", - "symfony/console": "^5.4 || ^6.0 || ^7.0", - "symfony/var-exporter": "^6.3.9 || ^7.0" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0", - "phpbench/phpbench": "^1.0", - "phpstan/phpstan": "1.11.1", - "phpunit/phpunit": "^10.4.0", - "psr/log": "^1 || ^2 || ^3", - "squizlabs/php_codesniffer": "3.7.2", - "symfony/cache": "^5.4 || ^6.2 || ^7.0", - "vimeo/psalm": "5.24.0" - }, - "suggest": { - "ext-dom": "Provides support for XSD validation for XML mapping files", - "symfony/cache": "Provides cache support for Setup Tool with doctrine/cache 2.0" - }, - "autoload": { - "psr-4": { "Doctrine\\ORM\\": "src" } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Tests\\": "tests/Tests", - "Doctrine\\StaticAnalysis\\": "tests/StaticAnalysis", - "Doctrine\\Performance\\": "tests/Performance" - } - }, - "archive": { - "exclude": ["!vendor", "tests", "*phpunit.xml", "build.xml", "build.properties", "composer.phar", "vendor/satooshi", "lib/vendor", "*.swp"] - } -} diff --git a/vendor/doctrine/orm/doctrine-mapping.xsd b/vendor/doctrine/orm/doctrine-mapping.xsd deleted file mode 100644 index 58175a2..0000000 --- a/vendor/doctrine/orm/doctrine-mapping.xsd +++ /dev/null @@ -1,589 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/doctrine/orm/phpstan-dbal3.neon b/vendor/doctrine/orm/phpstan-dbal3.neon deleted file mode 100644 index b9ef942..0000000 --- a/vendor/doctrine/orm/phpstan-dbal3.neon +++ /dev/null @@ -1,29 +0,0 @@ -includes: - - phpstan-baseline.neon - - phpstan-params.neon - -parameters: - ignoreErrors: - # Symfony cache supports passing a key prefix to the clear method. - - '/^Method Psr\\Cache\\CacheItemPoolInterface\:\:clear\(\) invoked with 1 parameter, 0 required\.$/' - - # We can be certain that those values are not matched. - - - message: '~^Match expression does not handle remaining values:~' - path: src/Persisters/Entity/BasicEntityPersister.php - - # DBAL 4 compatibility - - - message: '~^Method Doctrine\\ORM\\Query\\AST\\Functions\\TrimFunction::getTrimMode\(\) never returns .* so it can be removed from the return type\.$~' - path: src/Query/AST/Functions/TrimFunction.php - - - message: '~^Method Doctrine\\ORM\\Persisters\\Entity\\BasicEntityPersister\:\:getArrayBindingType\(\) never returns .* so it can be removed from the return type\.$~' - path: src/Persisters/Entity/BasicEntityPersister.php - - - '~^Class Doctrine\\DBAL\\Platforms\\SQLitePlatform not found\.$~' - - # To be removed in 4.0 - - - message: '#Negated boolean expression is always false\.#' - paths: - - src/Mapping/Driver/AttributeDriver.php diff --git a/vendor/doctrine/orm/src/AbstractQuery.php b/vendor/doctrine/orm/src/AbstractQuery.php deleted file mode 100644 index 0ff92c3..0000000 --- a/vendor/doctrine/orm/src/AbstractQuery.php +++ /dev/null @@ -1,1116 +0,0 @@ - - */ - protected ArrayCollection $parameters; - - /** - * The user-specified ResultSetMapping to use. - */ - protected ResultSetMapping|null $resultSetMapping = null; - - /** - * The map of query hints. - * - * @psalm-var array - */ - protected array $hints = []; - - /** - * The hydration mode. - * - * @psalm-var string|AbstractQuery::HYDRATE_* - */ - protected string|int $hydrationMode = self::HYDRATE_OBJECT; - - protected QueryCacheProfile|null $queryCacheProfile = null; - - /** - * Whether or not expire the result cache. - */ - protected bool $expireResultCache = false; - - protected QueryCacheProfile|null $hydrationCacheProfile = null; - - /** - * Whether to use second level cache, if available. - */ - protected bool $cacheable = false; - - protected bool $hasCache = false; - - /** - * Second level cache region name. - */ - protected string|null $cacheRegion = null; - - /** - * Second level query cache mode. - * - * @psalm-var Cache::MODE_*|null - */ - protected int|null $cacheMode = null; - - protected CacheLogger|null $cacheLogger = null; - - protected int $lifetime = 0; - - /** - * Initializes a new instance of a class derived from AbstractQuery. - */ - public function __construct( - /** - * The entity manager used by this query object. - */ - protected EntityManagerInterface $em, - ) { - $this->parameters = new ArrayCollection(); - $this->hints = $em->getConfiguration()->getDefaultQueryHints(); - $this->hasCache = $this->em->getConfiguration()->isSecondLevelCacheEnabled(); - - if ($this->hasCache) { - $this->cacheLogger = $em->getConfiguration() - ->getSecondLevelCacheConfiguration() - ->getCacheLogger(); - } - } - - /** - * Enable/disable second level query (result) caching for this query. - * - * @return $this - */ - public function setCacheable(bool $cacheable): static - { - $this->cacheable = $cacheable; - - return $this; - } - - /** @return bool TRUE if the query results are enabled for second level cache, FALSE otherwise. */ - public function isCacheable(): bool - { - return $this->cacheable; - } - - /** @return $this */ - public function setCacheRegion(string $cacheRegion): static - { - $this->cacheRegion = $cacheRegion; - - return $this; - } - - /** - * Obtain the name of the second level query cache region in which query results will be stored - * - * @return string|null The cache region name; NULL indicates the default region. - */ - public function getCacheRegion(): string|null - { - return $this->cacheRegion; - } - - /** @return bool TRUE if the query cache and second level cache are enabled, FALSE otherwise. */ - protected function isCacheEnabled(): bool - { - return $this->cacheable && $this->hasCache; - } - - public function getLifetime(): int - { - return $this->lifetime; - } - - /** - * Sets the life-time for this query into second level cache. - * - * @return $this - */ - public function setLifetime(int $lifetime): static - { - $this->lifetime = $lifetime; - - return $this; - } - - /** @psalm-return Cache::MODE_*|null */ - public function getCacheMode(): int|null - { - return $this->cacheMode; - } - - /** - * @psalm-param Cache::MODE_* $cacheMode - * - * @return $this - */ - public function setCacheMode(int $cacheMode): static - { - $this->cacheMode = $cacheMode; - - return $this; - } - - /** - * Gets the SQL query that corresponds to this query object. - * The returned SQL syntax depends on the connection driver that is used - * by this query object at the time of this method call. - * - * @return list|string SQL query - */ - abstract public function getSQL(): string|array; - - /** - * Retrieves the associated EntityManager of this Query instance. - */ - public function getEntityManager(): EntityManagerInterface - { - return $this->em; - } - - /** - * Frees the resources used by the query object. - * - * Resets Parameters, Parameter Types and Query Hints. - */ - public function free(): void - { - $this->parameters = new ArrayCollection(); - - $this->hints = $this->em->getConfiguration()->getDefaultQueryHints(); - } - - /** - * Get all defined parameters. - * - * @psalm-return ArrayCollection - */ - public function getParameters(): ArrayCollection - { - return $this->parameters; - } - - /** - * Gets a query parameter. - * - * @param int|string $key The key (index or name) of the bound parameter. - * - * @return Parameter|null The value of the bound parameter, or NULL if not available. - */ - public function getParameter(int|string $key): Parameter|null - { - $key = Parameter::normalizeName($key); - - $filteredParameters = $this->parameters->filter( - static fn (Parameter $parameter): bool => $parameter->getName() === $key - ); - - return ! $filteredParameters->isEmpty() ? $filteredParameters->first() : null; - } - - /** - * Sets a collection of query parameters. - * - * @param ArrayCollection|mixed[] $parameters - * @psalm-param ArrayCollection|mixed[] $parameters - * - * @return $this - */ - public function setParameters(ArrayCollection|array $parameters): static - { - if (is_array($parameters)) { - /** @psalm-var ArrayCollection $parameterCollection */ - $parameterCollection = new ArrayCollection(); - - foreach ($parameters as $key => $value) { - $parameterCollection->add(new Parameter($key, $value)); - } - - $parameters = $parameterCollection; - } - - $this->parameters = $parameters; - - return $this; - } - - /** - * Sets a query parameter. - * - * @param string|int $key The parameter position or name. - * @param mixed $value The parameter value. - * @param ParameterType|ArrayParameterType|string|int|null $type The parameter type. If specified, the given value - * will be run through the type conversion of this - * type. This is usually not needed for strings and - * numeric types. - * - * @return $this - */ - public function setParameter(string|int $key, mixed $value, ParameterType|ArrayParameterType|string|int|null $type = null): static - { - $existingParameter = $this->getParameter($key); - - if ($existingParameter !== null) { - $existingParameter->setValue($value, $type); - - return $this; - } - - $this->parameters->add(new Parameter($key, $value, $type)); - - return $this; - } - - /** - * Processes an individual parameter value. - * - * @throws ORMInvalidArgumentException - */ - public function processParameterValue(mixed $value): mixed - { - if (is_scalar($value)) { - return $value; - } - - if ($value instanceof Collection) { - $value = iterator_to_array($value); - } - - if (is_array($value)) { - $value = $this->processArrayParameterValue($value); - - return $value; - } - - if ($value instanceof ClassMetadata) { - return $value->name; - } - - if ($value instanceof BackedEnum) { - return $value->value; - } - - if (! is_object($value)) { - return $value; - } - - try { - $class = DefaultProxyClassNameResolver::getClass($value); - $value = $this->em->getUnitOfWork()->getSingleIdentifierValue($value); - - if ($value === null) { - throw ORMInvalidArgumentException::invalidIdentifierBindingEntity($class); - } - } catch (MappingException | ORMMappingException) { - /* Silence any mapping exceptions. These can occur if the object in - question is not a mapped entity, in which case we just don't do - any preparation on the value. - Depending on MappingDriver, either MappingException or - ORMMappingException is thrown. */ - - $value = $this->potentiallyProcessIterable($value); - } - - return $value; - } - - /** - * If no mapping is detected, trying to resolve the value as a Traversable - */ - private function potentiallyProcessIterable(mixed $value): mixed - { - if ($value instanceof Traversable) { - $value = iterator_to_array($value); - $value = $this->processArrayParameterValue($value); - } - - return $value; - } - - /** - * Process a parameter value which was previously identified as an array - * - * @param mixed[] $value - * - * @return mixed[] - */ - private function processArrayParameterValue(array $value): array - { - foreach ($value as $key => $paramValue) { - $paramValue = $this->processParameterValue($paramValue); - $value[$key] = is_array($paramValue) ? reset($paramValue) : $paramValue; - } - - return $value; - } - - /** - * Sets the ResultSetMapping that should be used for hydration. - * - * @return $this - */ - public function setResultSetMapping(ResultSetMapping $rsm): static - { - $this->translateNamespaces($rsm); - $this->resultSetMapping = $rsm; - - return $this; - } - - /** - * Gets the ResultSetMapping used for hydration. - */ - protected function getResultSetMapping(): ResultSetMapping|null - { - return $this->resultSetMapping; - } - - /** - * Allows to translate entity namespaces to full qualified names. - */ - private function translateNamespaces(ResultSetMapping $rsm): void - { - $translate = fn ($alias): string => $this->em->getClassMetadata($alias)->getName(); - - $rsm->aliasMap = array_map($translate, $rsm->aliasMap); - $rsm->declaringClasses = array_map($translate, $rsm->declaringClasses); - } - - /** - * Set a cache profile for hydration caching. - * - * If no result cache driver is set in the QueryCacheProfile, the default - * result cache driver is used from the configuration. - * - * Important: Hydration caching does NOT register entities in the - * UnitOfWork when retrieved from the cache. Never use result cached - * entities for requests that also flush the EntityManager. If you want - * some form of caching with UnitOfWork registration you should use - * {@see AbstractQuery::setResultCacheProfile()}. - * - * @return $this - * - * @example - * $lifetime = 100; - * $resultKey = "abc"; - * $query->setHydrationCacheProfile(new QueryCacheProfile()); - * $query->setHydrationCacheProfile(new QueryCacheProfile($lifetime, $resultKey)); - */ - public function setHydrationCacheProfile(QueryCacheProfile|null $profile): static - { - if ($profile === null) { - $this->hydrationCacheProfile = null; - - return $this; - } - - if (! $profile->getResultCache()) { - $defaultHydrationCacheImpl = $this->em->getConfiguration()->getHydrationCache(); - if ($defaultHydrationCacheImpl) { - $profile = $profile->setResultCache($defaultHydrationCacheImpl); - } - } - - $this->hydrationCacheProfile = $profile; - - return $this; - } - - public function getHydrationCacheProfile(): QueryCacheProfile|null - { - return $this->hydrationCacheProfile; - } - - /** - * Set a cache profile for the result cache. - * - * If no result cache driver is set in the QueryCacheProfile, the default - * result cache driver is used from the configuration. - * - * @return $this - */ - public function setResultCacheProfile(QueryCacheProfile|null $profile): static - { - if ($profile === null) { - $this->queryCacheProfile = null; - - return $this; - } - - if (! $profile->getResultCache()) { - $defaultResultCache = $this->em->getConfiguration()->getResultCache(); - if ($defaultResultCache) { - $profile = $profile->setResultCache($defaultResultCache); - } - } - - $this->queryCacheProfile = $profile; - - return $this; - } - - /** - * Defines a cache driver to be used for caching result sets and implicitly enables caching. - */ - public function setResultCache(CacheItemPoolInterface|null $resultCache): static - { - if ($resultCache === null) { - if ($this->queryCacheProfile) { - $this->queryCacheProfile = new QueryCacheProfile($this->queryCacheProfile->getLifetime(), $this->queryCacheProfile->getCacheKey()); - } - - return $this; - } - - $this->queryCacheProfile = $this->queryCacheProfile - ? $this->queryCacheProfile->setResultCache($resultCache) - : new QueryCacheProfile(0, null, $resultCache); - - return $this; - } - - /** - * Enables caching of the results of this query, for given or default amount of seconds - * and optionally specifies which ID to use for the cache entry. - * - * @param int|null $lifetime How long the cache entry is valid, in seconds. - * @param string|null $resultCacheId ID to use for the cache entry. - * - * @return $this - */ - public function enableResultCache(int|null $lifetime = null, string|null $resultCacheId = null): static - { - $this->setResultCacheLifetime($lifetime); - $this->setResultCacheId($resultCacheId); - - return $this; - } - - /** - * Disables caching of the results of this query. - * - * @return $this - */ - public function disableResultCache(): static - { - $this->queryCacheProfile = null; - - return $this; - } - - /** - * Defines how long the result cache will be active before expire. - * - * @param int|null $lifetime How long the cache entry is valid, in seconds. - * - * @return $this - */ - public function setResultCacheLifetime(int|null $lifetime): static - { - $lifetime = (int) $lifetime; - - if ($this->queryCacheProfile) { - $this->queryCacheProfile = $this->queryCacheProfile->setLifetime($lifetime); - - return $this; - } - - $this->queryCacheProfile = new QueryCacheProfile($lifetime); - - $cache = $this->em->getConfiguration()->getResultCache(); - if (! $cache) { - return $this; - } - - $this->queryCacheProfile = $this->queryCacheProfile->setResultCache($cache); - - return $this; - } - - /** - * Defines if the result cache is active or not. - * - * @param bool $expire Whether or not to force resultset cache expiration. - * - * @return $this - */ - public function expireResultCache(bool $expire = true): static - { - $this->expireResultCache = $expire; - - return $this; - } - - /** - * Retrieves if the resultset cache is active or not. - */ - public function getExpireResultCache(): bool - { - return $this->expireResultCache; - } - - public function getQueryCacheProfile(): QueryCacheProfile|null - { - return $this->queryCacheProfile; - } - - /** - * Change the default fetch mode of an association for this query. - * - * @param class-string $class - * @psalm-param Mapping\ClassMetadata::FETCH_EAGER|Mapping\ClassMetadata::FETCH_LAZY $fetchMode - */ - public function setFetchMode(string $class, string $assocName, int $fetchMode): static - { - $this->hints['fetchMode'][$class][$assocName] = $fetchMode; - - return $this; - } - - /** - * Defines the processing mode to be used during hydration / result set transformation. - * - * @param string|int $hydrationMode Doctrine processing mode to be used during hydration process. - * One of the Query::HYDRATE_* constants. - * @psalm-param string|AbstractQuery::HYDRATE_* $hydrationMode - * - * @return $this - */ - public function setHydrationMode(string|int $hydrationMode): static - { - $this->hydrationMode = $hydrationMode; - - return $this; - } - - /** - * Gets the hydration mode currently used by the query. - * - * @psalm-return string|AbstractQuery::HYDRATE_* - */ - public function getHydrationMode(): string|int - { - return $this->hydrationMode; - } - - /** - * Gets the list of results for the query. - * - * Alias for execute(null, $hydrationMode = HYDRATE_OBJECT). - * - * @psalm-param string|AbstractQuery::HYDRATE_* $hydrationMode - */ - public function getResult(string|int $hydrationMode = self::HYDRATE_OBJECT): mixed - { - return $this->execute(null, $hydrationMode); - } - - /** - * Gets the array of results for the query. - * - * Alias for execute(null, HYDRATE_ARRAY). - * - * @return mixed[] - */ - public function getArrayResult(): array - { - return $this->execute(null, self::HYDRATE_ARRAY); - } - - /** - * Gets one-dimensional array of results for the query. - * - * Alias for execute(null, HYDRATE_SCALAR_COLUMN). - * - * @return mixed[] - */ - public function getSingleColumnResult(): array - { - return $this->execute(null, self::HYDRATE_SCALAR_COLUMN); - } - - /** - * Gets the scalar results for the query. - * - * Alias for execute(null, HYDRATE_SCALAR). - * - * @return mixed[] - */ - public function getScalarResult(): array - { - return $this->execute(null, self::HYDRATE_SCALAR); - } - - /** - * Get exactly one result or null. - * - * @psalm-param string|AbstractQuery::HYDRATE_*|null $hydrationMode - * - * @throws NonUniqueResultException - */ - public function getOneOrNullResult(string|int|null $hydrationMode = null): mixed - { - try { - $result = $this->execute(null, $hydrationMode); - } catch (NoResultException) { - return null; - } - - if ($this->hydrationMode !== self::HYDRATE_SINGLE_SCALAR && ! $result) { - return null; - } - - if (! is_array($result)) { - return $result; - } - - if (count($result) > 1) { - throw new NonUniqueResultException(); - } - - return array_shift($result); - } - - /** - * Gets the single result of the query. - * - * Enforces the presence as well as the uniqueness of the result. - * - * If the result is not unique, a NonUniqueResultException is thrown. - * If there is no result, a NoResultException is thrown. - * - * @psalm-param string|AbstractQuery::HYDRATE_*|null $hydrationMode - * - * @throws NonUniqueResultException If the query result is not unique. - * @throws NoResultException If the query returned no result. - */ - public function getSingleResult(string|int|null $hydrationMode = null): mixed - { - $result = $this->execute(null, $hydrationMode); - - if ($this->hydrationMode !== self::HYDRATE_SINGLE_SCALAR && ! $result) { - throw new NoResultException(); - } - - if (! is_array($result)) { - return $result; - } - - if (count($result) > 1) { - throw new NonUniqueResultException(); - } - - return array_shift($result); - } - - /** - * Gets the single scalar result of the query. - * - * Alias for getSingleResult(HYDRATE_SINGLE_SCALAR). - * - * @return bool|float|int|string|null The scalar result. - * - * @throws NoResultException If the query returned no result. - * @throws NonUniqueResultException If the query result is not unique. - */ - public function getSingleScalarResult(): mixed - { - return $this->getSingleResult(self::HYDRATE_SINGLE_SCALAR); - } - - /** - * Sets a query hint. If the hint name is not recognized, it is silently ignored. - * - * @return $this - */ - public function setHint(string $name, mixed $value): static - { - $this->hints[$name] = $value; - - return $this; - } - - /** - * Gets the value of a query hint. If the hint name is not recognized, FALSE is returned. - * - * @return mixed The value of the hint or FALSE, if the hint name is not recognized. - */ - public function getHint(string $name): mixed - { - return $this->hints[$name] ?? false; - } - - public function hasHint(string $name): bool - { - return isset($this->hints[$name]); - } - - /** - * Return the key value map of query hints that are currently set. - * - * @return array - */ - public function getHints(): array - { - return $this->hints; - } - - /** - * Executes the query and returns an iterable that can be used to incrementally - * iterate over the result. - * - * @psalm-param ArrayCollection|mixed[] $parameters - * @psalm-param string|AbstractQuery::HYDRATE_*|null $hydrationMode - * - * @return iterable - */ - public function toIterable( - ArrayCollection|array $parameters = [], - string|int|null $hydrationMode = null, - ): iterable { - if ($hydrationMode !== null) { - $this->setHydrationMode($hydrationMode); - } - - if (count($parameters) !== 0) { - $this->setParameters($parameters); - } - - $rsm = $this->getResultSetMapping(); - if ($rsm === null) { - throw new LogicException('Uninitialized result set mapping.'); - } - - if ($rsm->isMixed && count($rsm->scalarMappings) > 0) { - throw QueryException::iterateWithMixedResultNotAllowed(); - } - - $stmt = $this->_doExecute(); - - return $this->em->newHydrator($this->hydrationMode)->toIterable($stmt, $rsm, $this->hints); - } - - /** - * Executes the query. - * - * @psalm-param ArrayCollection|mixed[]|null $parameters - * @psalm-param string|AbstractQuery::HYDRATE_*|null $hydrationMode - */ - public function execute( - ArrayCollection|array|null $parameters = null, - string|int|null $hydrationMode = null, - ): mixed { - if ($this->cacheable && $this->isCacheEnabled()) { - return $this->executeUsingQueryCache($parameters, $hydrationMode); - } - - return $this->executeIgnoreQueryCache($parameters, $hydrationMode); - } - - /** - * Execute query ignoring second level cache. - * - * @psalm-param ArrayCollection|mixed[]|null $parameters - * @psalm-param string|AbstractQuery::HYDRATE_*|null $hydrationMode - */ - private function executeIgnoreQueryCache( - ArrayCollection|array|null $parameters = null, - string|int|null $hydrationMode = null, - ): mixed { - if ($hydrationMode !== null) { - $this->setHydrationMode($hydrationMode); - } - - if (! empty($parameters)) { - $this->setParameters($parameters); - } - - $setCacheEntry = static function ($data): void { - }; - - if ($this->hydrationCacheProfile !== null) { - [$cacheKey, $realCacheKey] = $this->getHydrationCacheId(); - - $cache = $this->getHydrationCache(); - $cacheItem = $cache->getItem($cacheKey); - $result = $cacheItem->isHit() ? $cacheItem->get() : []; - - if (isset($result[$realCacheKey])) { - return $result[$realCacheKey]; - } - - if (! $result) { - $result = []; - } - - $setCacheEntry = static function ($data) use ($cache, $result, $cacheItem, $realCacheKey): void { - $cache->save($cacheItem->set($result + [$realCacheKey => $data])); - }; - } - - $stmt = $this->_doExecute(); - - if (is_numeric($stmt)) { - $setCacheEntry($stmt); - - return $stmt; - } - - $rsm = $this->getResultSetMapping(); - if ($rsm === null) { - throw new LogicException('Uninitialized result set mapping.'); - } - - $data = $this->em->newHydrator($this->hydrationMode)->hydrateAll($stmt, $rsm, $this->hints); - - $setCacheEntry($data); - - return $data; - } - - private function getHydrationCache(): CacheItemPoolInterface - { - assert($this->hydrationCacheProfile !== null); - - $cache = $this->hydrationCacheProfile->getResultCache(); - assert($cache !== null); - - return $cache; - } - - /** - * Load from second level cache or executes the query and put into cache. - * - * @psalm-param ArrayCollection|mixed[]|null $parameters - * @psalm-param string|AbstractQuery::HYDRATE_*|null $hydrationMode - */ - private function executeUsingQueryCache( - ArrayCollection|array|null $parameters = null, - string|int|null $hydrationMode = null, - ): mixed { - $rsm = $this->getResultSetMapping(); - if ($rsm === null) { - throw new LogicException('Uninitialized result set mapping.'); - } - - $queryCache = $this->em->getCache()->getQueryCache($this->cacheRegion); - $queryKey = new QueryCacheKey( - $this->getHash(), - $this->lifetime, - $this->cacheMode ?: Cache::MODE_NORMAL, - $this->getTimestampKey(), - ); - - $result = $queryCache->get($queryKey, $rsm, $this->hints); - - if ($result !== null) { - if ($this->cacheLogger) { - $this->cacheLogger->queryCacheHit($queryCache->getRegion()->getName(), $queryKey); - } - - return $result; - } - - $result = $this->executeIgnoreQueryCache($parameters, $hydrationMode); - $cached = $queryCache->put($queryKey, $rsm, $result, $this->hints); - - if ($this->cacheLogger) { - $this->cacheLogger->queryCacheMiss($queryCache->getRegion()->getName(), $queryKey); - - if ($cached) { - $this->cacheLogger->queryCachePut($queryCache->getRegion()->getName(), $queryKey); - } - } - - return $result; - } - - private function getTimestampKey(): TimestampCacheKey|null - { - assert($this->resultSetMapping !== null); - $entityName = reset($this->resultSetMapping->aliasMap); - - if (empty($entityName)) { - return null; - } - - $metadata = $this->em->getClassMetadata($entityName); - - return new TimestampCacheKey($metadata->rootEntityName); - } - - /** - * Get the result cache id to use to store the result set cache entry. - * Will return the configured id if it exists otherwise a hash will be - * automatically generated for you. - * - * @return string[] ($key, $hash) - * @psalm-return array{string, string} ($key, $hash) - */ - protected function getHydrationCacheId(): array - { - $parameters = []; - $types = []; - - foreach ($this->getParameters() as $parameter) { - $parameters[$parameter->getName()] = $this->processParameterValue($parameter->getValue()); - $types[$parameter->getName()] = $parameter->getType(); - } - - $sql = $this->getSQL(); - assert(is_string($sql)); - $queryCacheProfile = $this->getHydrationCacheProfile(); - $hints = $this->getHints(); - $hints['hydrationMode'] = $this->getHydrationMode(); - - ksort($hints); - assert($queryCacheProfile !== null); - - return $queryCacheProfile->generateCacheKeys($sql, $parameters, $types, $hints); - } - - /** - * Set the result cache id to use to store the result set cache entry. - * If this is not explicitly set by the developer then a hash is automatically - * generated for you. - */ - public function setResultCacheId(string|null $id): static - { - if (! $this->queryCacheProfile) { - return $this->setResultCacheProfile(new QueryCacheProfile(0, $id)); - } - - $this->queryCacheProfile = $this->queryCacheProfile->setCacheKey($id); - - return $this; - } - - /** - * Executes the query and returns a the resulting Statement object. - * - * @return Result|int The executed database statement that holds - * the results, or an integer indicating how - * many rows were affected. - */ - abstract protected function _doExecute(): Result|int; - - /** - * Cleanup Query resource when clone is called. - */ - public function __clone() - { - $this->parameters = new ArrayCollection(); - - $this->hints = []; - $this->hints = $this->em->getConfiguration()->getDefaultQueryHints(); - } - - /** - * Generates a string of currently query to use for the cache second level cache. - */ - protected function getHash(): string - { - $query = $this->getSQL(); - assert(is_string($query)); - $hints = $this->getHints(); - $params = array_map(function (Parameter $parameter) { - $value = $parameter->getValue(); - - // Small optimization - // Does not invoke processParameterValue for scalar value - if (is_scalar($value)) { - return $value; - } - - return $this->processParameterValue($value); - }, $this->parameters->getValues()); - - ksort($hints); - - return sha1($query . '-' . serialize($params) . '-' . serialize($hints)); - } -} diff --git a/vendor/doctrine/orm/src/Cache.php b/vendor/doctrine/orm/src/Cache.php deleted file mode 100644 index 8020b27..0000000 --- a/vendor/doctrine/orm/src/Cache.php +++ /dev/null @@ -1,106 +0,0 @@ - $identifier The entity identifier. - * @param class-string $class The entity class name - */ - public function __construct( - public readonly string $class, - public readonly array $identifier, - ) { - } - - /** - * Creates a new AssociationCacheEntry - * - * This method allow Doctrine\Common\Cache\PhpFileCache compatibility - * - * @param array $values array containing property values - */ - public static function __set_state(array $values): self - { - return new self($values['class'], $values['identifier']); - } -} diff --git a/vendor/doctrine/orm/src/Cache/CacheConfiguration.php b/vendor/doctrine/orm/src/Cache/CacheConfiguration.php deleted file mode 100644 index 0f8dea7..0000000 --- a/vendor/doctrine/orm/src/Cache/CacheConfiguration.php +++ /dev/null @@ -1,60 +0,0 @@ -cacheFactory; - } - - public function setCacheFactory(CacheFactory $factory): void - { - $this->cacheFactory = $factory; - } - - public function getCacheLogger(): CacheLogger|null - { - return $this->cacheLogger; - } - - public function setCacheLogger(CacheLogger $logger): void - { - $this->cacheLogger = $logger; - } - - public function getRegionsConfiguration(): RegionsConfiguration - { - return $this->regionsConfig ??= new RegionsConfiguration(); - } - - public function setRegionsConfiguration(RegionsConfiguration $regionsConfig): void - { - $this->regionsConfig = $regionsConfig; - } - - public function getQueryValidator(): QueryCacheValidator - { - return $this->queryValidator ??= new TimestampQueryCacheValidator( - $this->cacheFactory->getTimestampRegion(), - ); - } - - public function setQueryValidator(QueryCacheValidator $validator): void - { - $this->queryValidator = $validator; - } -} diff --git a/vendor/doctrine/orm/src/Cache/CacheEntry.php b/vendor/doctrine/orm/src/Cache/CacheEntry.php deleted file mode 100644 index 6e12de1..0000000 --- a/vendor/doctrine/orm/src/Cache/CacheEntry.php +++ /dev/null @@ -1,16 +0,0 @@ -IMPORTANT NOTE: - * - * Fields of classes that implement CacheEntry are public for performance reason. - */ -interface CacheEntry -{ -} diff --git a/vendor/doctrine/orm/src/Cache/CacheException.php b/vendor/doctrine/orm/src/Cache/CacheException.php deleted file mode 100644 index b422095..0000000 --- a/vendor/doctrine/orm/src/Cache/CacheException.php +++ /dev/null @@ -1,26 +0,0 @@ - $cache The cache configuration. - */ - public function getRegion(array $cache): Region; - - /** - * Build timestamp cache region - */ - public function getTimestampRegion(): TimestampRegion; - - /** - * Build \Doctrine\ORM\Cache - */ - public function createCache(EntityManagerInterface $entityManager): Cache; -} diff --git a/vendor/doctrine/orm/src/Cache/CacheKey.php b/vendor/doctrine/orm/src/Cache/CacheKey.php deleted file mode 100644 index 970702c..0000000 --- a/vendor/doctrine/orm/src/Cache/CacheKey.php +++ /dev/null @@ -1,16 +0,0 @@ - $values array containing property values - */ - public static function __set_state(array $values): CollectionCacheEntry - { - return new self($values['identifiers']); - } -} diff --git a/vendor/doctrine/orm/src/Cache/CollectionCacheKey.php b/vendor/doctrine/orm/src/Cache/CollectionCacheKey.php deleted file mode 100644 index 51b408f..0000000 --- a/vendor/doctrine/orm/src/Cache/CollectionCacheKey.php +++ /dev/null @@ -1,39 +0,0 @@ - - */ - public readonly array $ownerIdentifier; - - /** - * @param array $ownerIdentifier The identifier of the owning entity. - * @param class-string $entityClass The owner entity class - */ - public function __construct( - public readonly string $entityClass, - public readonly string $association, - array $ownerIdentifier, - ) { - ksort($ownerIdentifier); - - $this->ownerIdentifier = $ownerIdentifier; - - parent::__construct(str_replace('\\', '.', strtolower($entityClass)) . '_' . implode(' ', $ownerIdentifier) . '__' . $association); - } -} diff --git a/vendor/doctrine/orm/src/Cache/CollectionHydrator.php b/vendor/doctrine/orm/src/Cache/CollectionHydrator.php deleted file mode 100644 index 16a6572..0000000 --- a/vendor/doctrine/orm/src/Cache/CollectionHydrator.php +++ /dev/null @@ -1,21 +0,0 @@ - - */ - private array $queryCaches = []; - - private QueryCache|null $defaultQueryCache = null; - - public function __construct( - private readonly EntityManagerInterface $em, - ) { - $this->uow = $em->getUnitOfWork(); - $this->cacheFactory = $em->getConfiguration() - ->getSecondLevelCacheConfiguration() - ->getCacheFactory(); - } - - public function getEntityCacheRegion(string $className): Region|null - { - $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); - - if (! ($persister instanceof CachedPersister)) { - return null; - } - - return $persister->getCacheRegion(); - } - - public function getCollectionCacheRegion(string $className, string $association): Region|null - { - $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->getAssociationMapping($association)); - - if (! ($persister instanceof CachedPersister)) { - return null; - } - - return $persister->getCacheRegion(); - } - - public function containsEntity(string $className, mixed $identifier): bool - { - $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); - - if (! ($persister instanceof CachedPersister)) { - return false; - } - - return $persister->getCacheRegion()->contains($this->buildEntityCacheKey($metadata, $identifier)); - } - - public function evictEntity(string $className, mixed $identifier): void - { - $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); - - if (! ($persister instanceof CachedPersister)) { - return; - } - - $persister->getCacheRegion()->evict($this->buildEntityCacheKey($metadata, $identifier)); - } - - public function evictEntityRegion(string $className): void - { - $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); - - if (! ($persister instanceof CachedPersister)) { - return; - } - - $persister->getCacheRegion()->evictAll(); - } - - public function evictEntityRegions(): void - { - $metadatas = $this->em->getMetadataFactory()->getAllMetadata(); - - foreach ($metadatas as $metadata) { - $persister = $this->uow->getEntityPersister($metadata->rootEntityName); - - if (! ($persister instanceof CachedPersister)) { - continue; - } - - $persister->getCacheRegion()->evictAll(); - } - } - - public function containsCollection(string $className, string $association, mixed $ownerIdentifier): bool - { - $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->getAssociationMapping($association)); - - if (! ($persister instanceof CachedPersister)) { - return false; - } - - return $persister->getCacheRegion()->contains($this->buildCollectionCacheKey($metadata, $association, $ownerIdentifier)); - } - - public function evictCollection(string $className, string $association, mixed $ownerIdentifier): void - { - $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->getAssociationMapping($association)); - - if (! ($persister instanceof CachedPersister)) { - return; - } - - $persister->getCacheRegion()->evict($this->buildCollectionCacheKey($metadata, $association, $ownerIdentifier)); - } - - public function evictCollectionRegion(string $className, string $association): void - { - $metadata = $this->em->getClassMetadata($className); - $persister = $this->uow->getCollectionPersister($metadata->getAssociationMapping($association)); - - if (! ($persister instanceof CachedPersister)) { - return; - } - - $persister->getCacheRegion()->evictAll(); - } - - public function evictCollectionRegions(): void - { - $metadatas = $this->em->getMetadataFactory()->getAllMetadata(); - - foreach ($metadatas as $metadata) { - foreach ($metadata->associationMappings as $association) { - if (! $association->isToMany()) { - continue; - } - - $persister = $this->uow->getCollectionPersister($association); - - if (! ($persister instanceof CachedPersister)) { - continue; - } - - $persister->getCacheRegion()->evictAll(); - } - } - } - - public function containsQuery(string $regionName): bool - { - return isset($this->queryCaches[$regionName]); - } - - public function evictQueryRegion(string|null $regionName = null): void - { - if ($regionName === null && $this->defaultQueryCache !== null) { - $this->defaultQueryCache->clear(); - - return; - } - - if (isset($this->queryCaches[$regionName])) { - $this->queryCaches[$regionName]->clear(); - } - } - - public function evictQueryRegions(): void - { - $this->getQueryCache()->clear(); - - foreach ($this->queryCaches as $queryCache) { - $queryCache->clear(); - } - } - - public function getQueryCache(string|null $regionName = null): QueryCache - { - if ($regionName === null) { - return $this->defaultQueryCache ??= $this->cacheFactory->buildQueryCache($this->em); - } - - return $this->queryCaches[$regionName] ??= $this->cacheFactory->buildQueryCache($this->em, $regionName); - } - - private function buildEntityCacheKey(ClassMetadata $metadata, mixed $identifier): EntityCacheKey - { - if (! is_array($identifier)) { - $identifier = $this->toIdentifierArray($metadata, $identifier); - } - - return new EntityCacheKey($metadata->rootEntityName, $identifier); - } - - private function buildCollectionCacheKey( - ClassMetadata $metadata, - string $association, - mixed $ownerIdentifier, - ): CollectionCacheKey { - if (! is_array($ownerIdentifier)) { - $ownerIdentifier = $this->toIdentifierArray($metadata, $ownerIdentifier); - } - - return new CollectionCacheKey($metadata->rootEntityName, $association, $ownerIdentifier); - } - - /** @return array */ - private function toIdentifierArray(ClassMetadata $metadata, mixed $identifier): array - { - if (is_object($identifier)) { - $class = DefaultProxyClassNameResolver::getClass($identifier); - if ($this->em->getMetadataFactory()->hasMetadataFor($class)) { - $identifier = $this->uow->getSingleIdentifierValue($identifier) - ?? throw ORMInvalidArgumentException::invalidIdentifierBindingEntity($class); - } - } - - return [$metadata->identifier[0] => $identifier]; - } -} diff --git a/vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php b/vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php deleted file mode 100644 index 84ea490..0000000 --- a/vendor/doctrine/orm/src/Cache/DefaultCacheFactory.php +++ /dev/null @@ -1,189 +0,0 @@ -fileLockRegionDirectory = $fileLockRegionDirectory; - } - - public function getFileLockRegionDirectory(): string|null - { - return $this->fileLockRegionDirectory; - } - - public function setRegion(Region $region): void - { - $this->regions[$region->getName()] = $region; - } - - public function setTimestampRegion(TimestampRegion $region): void - { - $this->timestampRegion = $region; - } - - public function buildCachedEntityPersister(EntityManagerInterface $em, EntityPersister $persister, ClassMetadata $metadata): CachedEntityPersister - { - assert($metadata->cache !== null); - $region = $this->getRegion($metadata->cache); - $usage = $metadata->cache['usage']; - - if ($usage === ClassMetadata::CACHE_USAGE_READ_ONLY) { - return new ReadOnlyCachedEntityPersister($persister, $region, $em, $metadata); - } - - if ($usage === ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE) { - return new NonStrictReadWriteCachedEntityPersister($persister, $region, $em, $metadata); - } - - if ($usage === ClassMetadata::CACHE_USAGE_READ_WRITE) { - if (! $region instanceof ConcurrentRegion) { - throw new InvalidArgumentException(sprintf('Unable to use access strategy type of [%s] without a ConcurrentRegion', $usage)); - } - - return new ReadWriteCachedEntityPersister($persister, $region, $em, $metadata); - } - - throw new InvalidArgumentException(sprintf('Unrecognized access strategy type [%s]', $usage)); - } - - public function buildCachedCollectionPersister( - EntityManagerInterface $em, - CollectionPersister $persister, - AssociationMapping $mapping, - ): CachedCollectionPersister { - assert(isset($mapping->cache)); - $usage = $mapping->cache['usage']; - $region = $this->getRegion($mapping->cache); - - if ($usage === ClassMetadata::CACHE_USAGE_READ_ONLY) { - return new ReadOnlyCachedCollectionPersister($persister, $region, $em, $mapping); - } - - if ($usage === ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE) { - return new NonStrictReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); - } - - if ($usage === ClassMetadata::CACHE_USAGE_READ_WRITE) { - if (! $region instanceof ConcurrentRegion) { - throw new InvalidArgumentException(sprintf('Unable to use access strategy type of [%s] without a ConcurrentRegion', $usage)); - } - - return new ReadWriteCachedCollectionPersister($persister, $region, $em, $mapping); - } - - throw new InvalidArgumentException(sprintf('Unrecognized access strategy type [%s]', $usage)); - } - - public function buildQueryCache(EntityManagerInterface $em, string|null $regionName = null): QueryCache - { - return new DefaultQueryCache( - $em, - $this->getRegion( - [ - 'region' => $regionName ?: Cache::DEFAULT_QUERY_REGION_NAME, - 'usage' => ClassMetadata::CACHE_USAGE_NONSTRICT_READ_WRITE, - ], - ), - ); - } - - public function buildCollectionHydrator(EntityManagerInterface $em, AssociationMapping $mapping): CollectionHydrator - { - return new DefaultCollectionHydrator($em); - } - - public function buildEntityHydrator(EntityManagerInterface $em, ClassMetadata $metadata): EntityHydrator - { - return new DefaultEntityHydrator($em); - } - - /** - * {@inheritDoc} - */ - public function getRegion(array $cache): Region - { - if (isset($this->regions[$cache['region']])) { - return $this->regions[$cache['region']]; - } - - $name = $cache['region']; - $lifetime = $this->regionsConfig->getLifetime($cache['region']); - $region = new DefaultRegion($name, $this->cacheItemPool, $lifetime); - - if ($cache['usage'] === ClassMetadata::CACHE_USAGE_READ_WRITE) { - if ( - $this->fileLockRegionDirectory === '' || - $this->fileLockRegionDirectory === null - ) { - throw new LogicException( - 'If you want to use a "READ_WRITE" cache an implementation of "Doctrine\ORM\Cache\ConcurrentRegion" is required, ' . - 'The default implementation provided by doctrine is "Doctrine\ORM\Cache\Region\FileLockRegion" if you want to use it please provide a valid directory, DefaultCacheFactory#setFileLockRegionDirectory(). ', - ); - } - - $directory = $this->fileLockRegionDirectory . DIRECTORY_SEPARATOR . $cache['region']; - $region = new FileLockRegion($region, $directory, (string) $this->regionsConfig->getLockLifetime($cache['region'])); - } - - return $this->regions[$cache['region']] = $region; - } - - public function getTimestampRegion(): TimestampRegion - { - if ($this->timestampRegion === null) { - $name = Cache::DEFAULT_TIMESTAMP_REGION_NAME; - $lifetime = $this->regionsConfig->getLifetime($name); - - $this->timestampRegion = new UpdateTimestampCache($name, $this->cacheItemPool, $lifetime); - } - - return $this->timestampRegion; - } - - public function createCache(EntityManagerInterface $entityManager): Cache - { - return new DefaultCache($entityManager); - } -} diff --git a/vendor/doctrine/orm/src/Cache/DefaultCollectionHydrator.php b/vendor/doctrine/orm/src/Cache/DefaultCollectionHydrator.php deleted file mode 100644 index 249d48f..0000000 --- a/vendor/doctrine/orm/src/Cache/DefaultCollectionHydrator.php +++ /dev/null @@ -1,75 +0,0 @@ - */ - private static array $hints = [Query::HINT_CACHE_ENABLED => true]; - - public function __construct( - private readonly EntityManagerInterface $em, - ) { - $this->uow = $em->getUnitOfWork(); - } - - public function buildCacheEntry(ClassMetadata $metadata, CollectionCacheKey $key, array|Collection $collection): CollectionCacheEntry - { - $data = []; - - foreach ($collection as $index => $entity) { - $data[$index] = new EntityCacheKey($metadata->rootEntityName, $this->uow->getEntityIdentifier($entity)); - } - - return new CollectionCacheEntry($data); - } - - public function loadCacheEntry(ClassMetadata $metadata, CollectionCacheKey $key, CollectionCacheEntry $entry, PersistentCollection $collection): array|null - { - $assoc = $metadata->associationMappings[$key->association]; - $targetPersister = $this->uow->getEntityPersister($assoc->targetEntity); - assert($targetPersister instanceof CachedPersister); - $targetRegion = $targetPersister->getCacheRegion(); - $list = []; - - /** @var EntityCacheEntry[]|null $entityEntries */ - $entityEntries = $targetRegion->getMultiple($entry); - - if ($entityEntries === null) { - return null; - } - - foreach ($entityEntries as $index => $entityEntry) { - $entity = $this->uow->createEntity( - $entityEntry->class, - $entityEntry->resolveAssociationEntries($this->em), - self::$hints, - ); - - $collection->hydrateSet($index, $entity); - - $list[$index] = $entity; - } - - $this->uow->hydrationComplete(); - - return $list; - } -} diff --git a/vendor/doctrine/orm/src/Cache/DefaultEntityHydrator.php b/vendor/doctrine/orm/src/Cache/DefaultEntityHydrator.php deleted file mode 100644 index 6bd1524..0000000 --- a/vendor/doctrine/orm/src/Cache/DefaultEntityHydrator.php +++ /dev/null @@ -1,176 +0,0 @@ - */ - private static array $hints = [Query::HINT_CACHE_ENABLED => true]; - - public function __construct( - private readonly EntityManagerInterface $em, - ) { - $this->uow = $em->getUnitOfWork(); - $this->identifierFlattener = new IdentifierFlattener($em->getUnitOfWork(), $em->getMetadataFactory()); - } - - public function buildCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, object $entity): EntityCacheEntry - { - $data = $this->uow->getOriginalEntityData($entity); - $data = [...$data, ...$metadata->getIdentifierValues($entity)]; // why update has no identifier values ? - - if ($metadata->requiresFetchAfterChange) { - if ($metadata->isVersioned) { - assert($metadata->versionField !== null); - $data[$metadata->versionField] = $metadata->getFieldValue($entity, $metadata->versionField); - } - - foreach ($metadata->fieldMappings as $name => $fieldMapping) { - if (isset($fieldMapping->generated)) { - $data[$name] = $metadata->getFieldValue($entity, $name); - } - } - } - - foreach ($metadata->associationMappings as $name => $assoc) { - if (! isset($data[$name])) { - continue; - } - - if (! $assoc->isToOne()) { - unset($data[$name]); - - continue; - } - - if (! isset($assoc->cache)) { - $targetClassMetadata = $this->em->getClassMetadata($assoc->targetEntity); - $owningAssociation = $this->em->getMetadataFactory()->getOwningSide($assoc); - $associationIds = $this->identifierFlattener->flattenIdentifier( - $targetClassMetadata, - $targetClassMetadata->getIdentifierValues($data[$name]), - ); - - unset($data[$name]); - - foreach ($associationIds as $fieldName => $fieldValue) { - if (isset($targetClassMetadata->fieldMappings[$fieldName])) { - assert($owningAssociation->isToOneOwningSide()); - $fieldMapping = $targetClassMetadata->fieldMappings[$fieldName]; - - $data[$owningAssociation->targetToSourceKeyColumns[$fieldMapping->columnName]] = $fieldValue; - - continue; - } - - $targetAssoc = $targetClassMetadata->associationMappings[$fieldName]; - - assert($assoc->isToOneOwningSide()); - foreach ($assoc->targetToSourceKeyColumns as $referencedColumn => $localColumn) { - if (isset($targetAssoc->sourceToTargetKeyColumns[$referencedColumn])) { - $data[$localColumn] = $fieldValue; - } - } - } - - continue; - } - - if (! isset($assoc->id)) { - $targetClass = DefaultProxyClassNameResolver::getClass($data[$name]); - $targetId = $this->uow->getEntityIdentifier($data[$name]); - $data[$name] = new AssociationCacheEntry($targetClass, $targetId); - - continue; - } - - // handle association identifier - $targetId = is_object($data[$name]) && $this->uow->isInIdentityMap($data[$name]) - ? $this->uow->getEntityIdentifier($data[$name]) - : $data[$name]; - - // @TODO - fix it ! - // handle UnitOfWork#createEntity hash generation - if (! is_array($targetId)) { - assert($assoc->isToOneOwningSide()); - $data[reset($assoc->joinColumnFieldNames)] = $targetId; - - $targetEntity = $this->em->getClassMetadata($assoc->targetEntity); - $targetId = [$targetEntity->identifier[0] => $targetId]; - } - - $data[$name] = new AssociationCacheEntry($assoc->targetEntity, $targetId); - } - - return new EntityCacheEntry($metadata->name, $data); - } - - public function loadCacheEntry(ClassMetadata $metadata, EntityCacheKey $key, EntityCacheEntry $entry, object|null $entity = null): object|null - { - $data = $entry->data; - $hints = self::$hints; - - if ($entity !== null) { - $hints[Query::HINT_REFRESH] = true; - $hints[Query::HINT_REFRESH_ENTITY] = $entity; - } - - foreach ($metadata->associationMappings as $name => $assoc) { - if (! isset($assoc->cache) || ! isset($data[$name])) { - continue; - } - - $assocClass = $data[$name]->class; - $assocId = $data[$name]->identifier; - $isEagerLoad = ($assoc->fetch === ClassMetadata::FETCH_EAGER || ($assoc->isOneToOne() && ! $assoc->isOwningSide())); - - if (! $isEagerLoad) { - $data[$name] = $this->em->getReference($assocClass, $assocId); - - continue; - } - - $assocMetadata = $this->em->getClassMetadata($assoc->targetEntity); - $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocId); - $assocPersister = $this->uow->getEntityPersister($assoc->targetEntity); - $assocRegion = $assocPersister->getCacheRegion(); - $assocEntry = $assocRegion->get($assocKey); - - if ($assocEntry === null) { - return null; - } - - $data[$name] = $this->uow->createEntity($assocEntry->class, $assocEntry->resolveAssociationEntries($this->em), $hints); - } - - if ($entity !== null) { - $this->uow->registerManaged($entity, $key->identifier, $data); - } - - $result = $this->uow->createEntity($entry->class, $data, $hints); - - $this->uow->hydrationComplete(); - - return $result; - } -} diff --git a/vendor/doctrine/orm/src/Cache/DefaultQueryCache.php b/vendor/doctrine/orm/src/Cache/DefaultQueryCache.php deleted file mode 100644 index f3bb8ac..0000000 --- a/vendor/doctrine/orm/src/Cache/DefaultQueryCache.php +++ /dev/null @@ -1,414 +0,0 @@ - */ - private static array $hints = [Query::HINT_CACHE_ENABLED => true]; - - public function __construct( - private readonly EntityManagerInterface $em, - private readonly Region $region, - ) { - $cacheConfig = $em->getConfiguration()->getSecondLevelCacheConfiguration(); - - $this->uow = $em->getUnitOfWork(); - $this->cacheLogger = $cacheConfig->getCacheLogger(); - $this->validator = $cacheConfig->getQueryValidator(); - } - - /** - * {@inheritDoc} - */ - public function get(QueryCacheKey $key, ResultSetMapping $rsm, array $hints = []): array|null - { - if (! ($key->cacheMode & Cache::MODE_GET)) { - return null; - } - - $cacheEntry = $this->region->get($key); - - if (! $cacheEntry instanceof QueryCacheEntry) { - return null; - } - - if (! $this->validator->isValid($key, $cacheEntry)) { - $this->region->evict($key); - - return null; - } - - $result = []; - $entityName = reset($rsm->aliasMap); - $hasRelation = ! empty($rsm->relationMap); - $persister = $this->uow->getEntityPersister($entityName); - assert($persister instanceof CachedEntityPersister); - - $region = $persister->getCacheRegion(); - $regionName = $region->getName(); - - $cm = $this->em->getClassMetadata($entityName); - - $generateKeys = static fn (array $entry): EntityCacheKey => new EntityCacheKey($cm->rootEntityName, $entry['identifier']); - - $cacheKeys = new CollectionCacheEntry(array_map($generateKeys, $cacheEntry->result)); - $entries = $region->getMultiple($cacheKeys) ?? []; - - // @TODO - move to cache hydration component - foreach ($cacheEntry->result as $index => $entry) { - $entityEntry = $entries[$index] ?? null; - - if (! $entityEntry instanceof EntityCacheEntry) { - $this->cacheLogger?->entityCacheMiss($regionName, $cacheKeys->identifiers[$index]); - - return null; - } - - $this->cacheLogger?->entityCacheHit($regionName, $cacheKeys->identifiers[$index]); - - if (! $hasRelation) { - $result[$index] = $this->uow->createEntity($entityEntry->class, $entityEntry->resolveAssociationEntries($this->em), self::$hints); - - continue; - } - - $data = $entityEntry->data; - - foreach ($entry['associations'] as $name => $assoc) { - $assocPersister = $this->uow->getEntityPersister($assoc['targetEntity']); - assert($assocPersister instanceof CachedEntityPersister); - - $assocRegion = $assocPersister->getCacheRegion(); - $assocMetadata = $this->em->getClassMetadata($assoc['targetEntity']); - - if ($assoc['type'] & ClassMetadata::TO_ONE) { - $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assoc['identifier']); - $assocEntry = $assocRegion->get($assocKey); - - if ($assocEntry === null) { - $this->cacheLogger?->entityCacheMiss($assocRegion->getName(), $assocKey); - - $this->uow->hydrationComplete(); - - return null; - } - - $data[$name] = $this->uow->createEntity($assocEntry->class, $assocEntry->resolveAssociationEntries($this->em), self::$hints); - - $this->cacheLogger?->entityCacheHit($assocRegion->getName(), $assocKey); - - continue; - } - - if (! isset($assoc['list']) || empty($assoc['list'])) { - continue; - } - - $generateKeys = static fn (array $id): EntityCacheKey => new EntityCacheKey($assocMetadata->rootEntityName, $id); - - $collection = new PersistentCollection($this->em, $assocMetadata, new ArrayCollection()); - $assocKeys = new CollectionCacheEntry(array_map($generateKeys, $assoc['list'])); - $assocEntries = $assocRegion->getMultiple($assocKeys); - - foreach ($assoc['list'] as $assocIndex => $assocId) { - $assocEntry = is_array($assocEntries) ? ($assocEntries[$assocIndex] ?? null) : null; - - if ($assocEntry === null) { - $this->cacheLogger?->entityCacheMiss($assocRegion->getName(), $assocKeys->identifiers[$assocIndex]); - - $this->uow->hydrationComplete(); - - return null; - } - - $element = $this->uow->createEntity($assocEntry->class, $assocEntry->resolveAssociationEntries($this->em), self::$hints); - - $collection->hydrateSet($assocIndex, $element); - - $this->cacheLogger?->entityCacheHit($assocRegion->getName(), $assocKeys->identifiers[$assocIndex]); - } - - $data[$name] = $collection; - - $collection->setInitialized(true); - } - - foreach ($data as $fieldName => $unCachedAssociationData) { - // In some scenarios, such as EAGER+ASSOCIATION+ID+CACHE, the - // cache key information in `$cacheEntry` will not contain details - // for fields that are associations. - // - // This means that `$data` keys for some associations that may - // actually not be cached will not be converted to actual association - // data, yet they contain L2 cache AssociationCacheEntry objects. - // - // We need to unwrap those associations into proxy references, - // since we don't have actual data for them except for identifiers. - if ($unCachedAssociationData instanceof AssociationCacheEntry) { - $data[$fieldName] = $this->em->getReference( - $unCachedAssociationData->class, - $unCachedAssociationData->identifier, - ); - } - } - - $result[$index] = $this->uow->createEntity($entityEntry->class, $data, self::$hints); - } - - $this->uow->hydrationComplete(); - - return $result; - } - - /** - * {@inheritDoc} - */ - public function put(QueryCacheKey $key, ResultSetMapping $rsm, mixed $result, array $hints = []): bool - { - if ($rsm->scalarMappings) { - throw FeatureNotImplemented::scalarResults(); - } - - if (count($rsm->entityMappings) > 1) { - throw FeatureNotImplemented::multipleRootEntities(); - } - - if (! $rsm->isSelect) { - throw FeatureNotImplemented::nonSelectStatements(); - } - - if (! ($key->cacheMode & Cache::MODE_PUT)) { - return false; - } - - $data = []; - $entityName = reset($rsm->aliasMap); - $rootAlias = key($rsm->aliasMap); - $persister = $this->uow->getEntityPersister($entityName); - - if (! $persister instanceof CachedEntityPersister) { - throw NonCacheableEntity::fromEntity($entityName); - } - - $region = $persister->getCacheRegion(); - - $cm = $this->em->getClassMetadata($entityName); - assert($cm instanceof ClassMetadata); - - foreach ($result as $index => $entity) { - $identifier = $this->uow->getEntityIdentifier($entity); - $entityKey = new EntityCacheKey($cm->rootEntityName, $identifier); - - if (($key->cacheMode & Cache::MODE_REFRESH) || ! $region->contains($entityKey)) { - // Cancel put result if entity put fail - if (! $persister->storeEntityCache($entity, $entityKey)) { - return false; - } - } - - $data[$index]['identifier'] = $identifier; - $data[$index]['associations'] = []; - - // @TODO - move to cache hydration components - foreach ($rsm->relationMap as $alias => $name) { - $parentAlias = $rsm->parentAliasMap[$alias]; - $parentClass = $rsm->aliasMap[$parentAlias]; - $metadata = $this->em->getClassMetadata($parentClass); - $assoc = $metadata->associationMappings[$name]; - $assocValue = $this->getAssociationValue($rsm, $alias, $entity); - - if ($assocValue === null) { - continue; - } - - // root entity association - if ($rootAlias === $parentAlias) { - // Cancel put result if association put fail - $assocInfo = $this->storeAssociationCache($key, $assoc, $assocValue); - if ($assocInfo === null) { - return false; - } - - $data[$index]['associations'][$name] = $assocInfo; - - continue; - } - - // store single nested association - if (! is_array($assocValue)) { - // Cancel put result if association put fail - if ($this->storeAssociationCache($key, $assoc, $assocValue) === null) { - return false; - } - - continue; - } - - // store array of nested association - foreach ($assocValue as $aVal) { - // Cancel put result if association put fail - if ($this->storeAssociationCache($key, $assoc, $aVal) === null) { - return false; - } - } - } - } - - return $this->region->put($key, new QueryCacheEntry($data)); - } - - /** - * @return mixed[]|null - * @psalm-return array{targetEntity: class-string, type: mixed, list?: array[], identifier?: array}|null - */ - private function storeAssociationCache(QueryCacheKey $key, AssociationMapping $assoc, mixed $assocValue): array|null - { - $assocPersister = $this->uow->getEntityPersister($assoc->targetEntity); - $assocMetadata = $assocPersister->getClassMetadata(); - $assocRegion = $assocPersister->getCacheRegion(); - - // Handle *-to-one associations - if ($assoc->isToOne()) { - $assocIdentifier = $this->uow->getEntityIdentifier($assocValue); - $entityKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocIdentifier); - - if (! $this->uow->isUninitializedObject($assocValue) && ($key->cacheMode & Cache::MODE_REFRESH) || ! $assocRegion->contains($entityKey)) { - // Entity put fail - if (! $assocPersister->storeEntityCache($assocValue, $entityKey)) { - return null; - } - } - - return [ - 'targetEntity' => $assocMetadata->rootEntityName, - 'identifier' => $assocIdentifier, - 'type' => $assoc->type(), - ]; - } - - // Handle *-to-many associations - $list = []; - - foreach ($assocValue as $assocItemIndex => $assocItem) { - $assocIdentifier = $this->uow->getEntityIdentifier($assocItem); - $entityKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocIdentifier); - - if (($key->cacheMode & Cache::MODE_REFRESH) || ! $assocRegion->contains($entityKey)) { - // Entity put fail - if (! $assocPersister->storeEntityCache($assocItem, $entityKey)) { - return null; - } - } - - $list[$assocItemIndex] = $assocIdentifier; - } - - return [ - 'targetEntity' => $assocMetadata->rootEntityName, - 'type' => $assoc->type(), - 'list' => $list, - ]; - } - - /** @psalm-return list|object|null */ - private function getAssociationValue( - ResultSetMapping $rsm, - string $assocAlias, - object $entity, - ): array|object|null { - $path = []; - $alias = $assocAlias; - - while (isset($rsm->parentAliasMap[$alias])) { - $parent = $rsm->parentAliasMap[$alias]; - $field = $rsm->relationMap[$alias]; - $class = $rsm->aliasMap[$parent]; - - array_unshift($path, [ - 'field' => $field, - 'class' => $class, - ]); - - $alias = $parent; - } - - return $this->getAssociationPathValue($entity, $path); - } - - /** - * @psalm-param array $path - * - * @psalm-return list|object|null - */ - private function getAssociationPathValue(mixed $value, array $path): array|object|null - { - $mapping = array_shift($path); - $metadata = $this->em->getClassMetadata($mapping['class']); - $assoc = $metadata->associationMappings[$mapping['field']]; - $value = $metadata->getFieldValue($value, $mapping['field']); - - if ($value === null) { - return null; - } - - if ($path === []) { - return $value; - } - - // Handle *-to-one associations - if ($assoc->isToOne()) { - return $this->getAssociationPathValue($value, $path); - } - - $values = []; - - foreach ($value as $item) { - $values[] = $this->getAssociationPathValue($item, $path); - } - - return $values; - } - - public function clear(): bool - { - return $this->region->evictAll(); - } - - public function getRegion(): Region - { - return $this->region; - } -} diff --git a/vendor/doctrine/orm/src/Cache/EntityCacheEntry.php b/vendor/doctrine/orm/src/Cache/EntityCacheEntry.php deleted file mode 100644 index 69bc813..0000000 --- a/vendor/doctrine/orm/src/Cache/EntityCacheEntry.php +++ /dev/null @@ -1,50 +0,0 @@ - $data The entity map data - * @psalm-param class-string $class The entity class name - */ - public function __construct( - public readonly string $class, - public readonly array $data, - ) { - } - - /** - * Creates a new EntityCacheEntry - * - * This method allows Doctrine\Common\Cache\PhpFileCache compatibility - * - * @param array $values array containing property values - */ - public static function __set_state(array $values): self - { - return new self($values['class'], $values['data']); - } - - /** - * Retrieves the entity data resolving cache entries - * - * @return array - */ - public function resolveAssociationEntries(EntityManagerInterface $em): array - { - return array_map(static function ($value) use ($em) { - if (! ($value instanceof AssociationCacheEntry)) { - return $value; - } - - return $em->getReference($value->class, $value->identifier); - }, $this->data); - } -} diff --git a/vendor/doctrine/orm/src/Cache/EntityCacheKey.php b/vendor/doctrine/orm/src/Cache/EntityCacheKey.php deleted file mode 100644 index 095ddaa..0000000 --- a/vendor/doctrine/orm/src/Cache/EntityCacheKey.php +++ /dev/null @@ -1,38 +0,0 @@ - - */ - public readonly array $identifier; - - /** - * @param class-string $entityClass The entity class name. In a inheritance hierarchy it should always be the root entity class. - * @param array $identifier The entity identifier - */ - public function __construct( - public readonly string $entityClass, - array $identifier, - ) { - ksort($identifier); - - $this->identifier = $identifier; - - parent::__construct(str_replace('\\', '.', strtolower($entityClass) . '_' . implode(' ', $identifier))); - } -} diff --git a/vendor/doctrine/orm/src/Cache/EntityHydrator.php b/vendor/doctrine/orm/src/Cache/EntityHydrator.php deleted file mode 100644 index 13cd21f..0000000 --- a/vendor/doctrine/orm/src/Cache/EntityHydrator.php +++ /dev/null @@ -1,28 +0,0 @@ -time = $time ?? time(); - } - - public static function createLockRead(): Lock - { - return new self(uniqid((string) time(), true)); - } -} diff --git a/vendor/doctrine/orm/src/Cache/LockException.php b/vendor/doctrine/orm/src/Cache/LockException.php deleted file mode 100644 index bb2d4ec..0000000 --- a/vendor/doctrine/orm/src/Cache/LockException.php +++ /dev/null @@ -1,14 +0,0 @@ - */ - private array $loggers = []; - - public function setLogger(string $name, CacheLogger $logger): void - { - $this->loggers[$name] = $logger; - } - - public function getLogger(string $name): CacheLogger|null - { - return $this->loggers[$name] ?? null; - } - - /** @return array */ - public function getLoggers(): array - { - return $this->loggers; - } - - public function collectionCacheHit(string $regionName, CollectionCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->collectionCacheHit($regionName, $key); - } - } - - public function collectionCacheMiss(string $regionName, CollectionCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->collectionCacheMiss($regionName, $key); - } - } - - public function collectionCachePut(string $regionName, CollectionCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->collectionCachePut($regionName, $key); - } - } - - public function entityCacheHit(string $regionName, EntityCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->entityCacheHit($regionName, $key); - } - } - - public function entityCacheMiss(string $regionName, EntityCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->entityCacheMiss($regionName, $key); - } - } - - public function entityCachePut(string $regionName, EntityCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->entityCachePut($regionName, $key); - } - } - - public function queryCacheHit(string $regionName, QueryCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->queryCacheHit($regionName, $key); - } - } - - public function queryCacheMiss(string $regionName, QueryCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->queryCacheMiss($regionName, $key); - } - } - - public function queryCachePut(string $regionName, QueryCacheKey $key): void - { - foreach ($this->loggers as $logger) { - $logger->queryCachePut($regionName, $key); - } - } -} diff --git a/vendor/doctrine/orm/src/Cache/Logging/StatisticsCacheLogger.php b/vendor/doctrine/orm/src/Cache/Logging/StatisticsCacheLogger.php deleted file mode 100644 index 092104e..0000000 --- a/vendor/doctrine/orm/src/Cache/Logging/StatisticsCacheLogger.php +++ /dev/null @@ -1,174 +0,0 @@ - */ - private array $cacheMissCountMap = []; - - /** @var array */ - private array $cacheHitCountMap = []; - - /** @var array */ - private array $cachePutCountMap = []; - - public function collectionCacheMiss(string $regionName, CollectionCacheKey $key): void - { - $this->cacheMissCountMap[$regionName] - = ($this->cacheMissCountMap[$regionName] ?? 0) + 1; - } - - public function collectionCacheHit(string $regionName, CollectionCacheKey $key): void - { - $this->cacheHitCountMap[$regionName] - = ($this->cacheHitCountMap[$regionName] ?? 0) + 1; - } - - public function collectionCachePut(string $regionName, CollectionCacheKey $key): void - { - $this->cachePutCountMap[$regionName] - = ($this->cachePutCountMap[$regionName] ?? 0) + 1; - } - - public function entityCacheMiss(string $regionName, EntityCacheKey $key): void - { - $this->cacheMissCountMap[$regionName] - = ($this->cacheMissCountMap[$regionName] ?? 0) + 1; - } - - public function entityCacheHit(string $regionName, EntityCacheKey $key): void - { - $this->cacheHitCountMap[$regionName] - = ($this->cacheHitCountMap[$regionName] ?? 0) + 1; - } - - public function entityCachePut(string $regionName, EntityCacheKey $key): void - { - $this->cachePutCountMap[$regionName] - = ($this->cachePutCountMap[$regionName] ?? 0) + 1; - } - - public function queryCacheHit(string $regionName, QueryCacheKey $key): void - { - $this->cacheHitCountMap[$regionName] - = ($this->cacheHitCountMap[$regionName] ?? 0) + 1; - } - - public function queryCacheMiss(string $regionName, QueryCacheKey $key): void - { - $this->cacheMissCountMap[$regionName] - = ($this->cacheMissCountMap[$regionName] ?? 0) + 1; - } - - public function queryCachePut(string $regionName, QueryCacheKey $key): void - { - $this->cachePutCountMap[$regionName] - = ($this->cachePutCountMap[$regionName] ?? 0) + 1; - } - - /** - * Get the number of entries successfully retrieved from cache. - * - * @param string $regionName The name of the cache region. - */ - public function getRegionHitCount(string $regionName): int - { - return $this->cacheHitCountMap[$regionName] ?? 0; - } - - /** - * Get the number of cached entries *not* found in cache. - * - * @param string $regionName The name of the cache region. - */ - public function getRegionMissCount(string $regionName): int - { - return $this->cacheMissCountMap[$regionName] ?? 0; - } - - /** - * Get the number of cacheable entries put in cache. - * - * @param string $regionName The name of the cache region. - */ - public function getRegionPutCount(string $regionName): int - { - return $this->cachePutCountMap[$regionName] ?? 0; - } - - /** @return array */ - public function getRegionsMiss(): array - { - return $this->cacheMissCountMap; - } - - /** @return array */ - public function getRegionsHit(): array - { - return $this->cacheHitCountMap; - } - - /** @return array */ - public function getRegionsPut(): array - { - return $this->cachePutCountMap; - } - - /** - * Clear region statistics - * - * @param string $regionName The name of the cache region. - */ - public function clearRegionStats(string $regionName): void - { - $this->cachePutCountMap[$regionName] = 0; - $this->cacheHitCountMap[$regionName] = 0; - $this->cacheMissCountMap[$regionName] = 0; - } - - /** - * Clear all statistics - */ - public function clearStats(): void - { - $this->cachePutCountMap = []; - $this->cacheHitCountMap = []; - $this->cacheMissCountMap = []; - } - - /** - * Get the total number of put in cache. - */ - public function getPutCount(): int - { - return array_sum($this->cachePutCountMap); - } - - /** - * Get the total number of entries successfully retrieved from cache. - */ - public function getHitCount(): int - { - return array_sum($this->cacheHitCountMap); - } - - /** - * Get the total number of cached entries *not* found in cache. - */ - public function getMissCount(): int - { - return array_sum($this->cacheMissCountMap); - } -} diff --git a/vendor/doctrine/orm/src/Cache/Persister/CachedPersister.php b/vendor/doctrine/orm/src/Cache/Persister/CachedPersister.php deleted file mode 100644 index 223692c..0000000 --- a/vendor/doctrine/orm/src/Cache/Persister/CachedPersister.php +++ /dev/null @@ -1,25 +0,0 @@ -getConfiguration(); - $cacheConfig = $configuration->getSecondLevelCacheConfiguration(); - $cacheFactory = $cacheConfig->getCacheFactory(); - - $this->regionName = $region->getName(); - $this->uow = $em->getUnitOfWork(); - $this->metadataFactory = $em->getMetadataFactory(); - $this->cacheLogger = $cacheConfig->getCacheLogger(); - $this->hydrator = $cacheFactory->buildCollectionHydrator($em, $association); - $this->sourceEntity = $em->getClassMetadata($association->sourceEntity); - $this->targetEntity = $em->getClassMetadata($association->targetEntity); - } - - public function getCacheRegion(): Region - { - return $this->region; - } - - public function getSourceEntityMetadata(): ClassMetadata - { - return $this->sourceEntity; - } - - public function getTargetEntityMetadata(): ClassMetadata - { - return $this->targetEntity; - } - - public function loadCollectionCache(PersistentCollection $collection, CollectionCacheKey $key): array|null - { - $cache = $this->region->get($key); - - if ($cache === null) { - return null; - } - - return $this->hydrator->loadCacheEntry($this->sourceEntity, $key, $cache, $collection); - } - - public function storeCollectionCache(CollectionCacheKey $key, Collection|array $elements): void - { - $associationMapping = $this->sourceEntity->associationMappings[$key->association]; - $targetPersister = $this->uow->getEntityPersister($this->targetEntity->rootEntityName); - assert($targetPersister instanceof CachedEntityPersister); - $targetRegion = $targetPersister->getCacheRegion(); - $targetHydrator = $targetPersister->getEntityHydrator(); - - // Only preserve ordering if association configured it - if (! $associationMapping->isIndexed()) { - // Elements may be an array or a Collection - $elements = array_values($elements instanceof Collection ? $elements->getValues() : $elements); - } - - $entry = $this->hydrator->buildCacheEntry($this->targetEntity, $key, $elements); - - foreach ($entry->identifiers as $index => $entityKey) { - if ($targetRegion->contains($entityKey)) { - continue; - } - - $class = $this->targetEntity; - $className = DefaultProxyClassNameResolver::getClass($elements[$index]); - - if ($className !== $this->targetEntity->name) { - $class = $this->metadataFactory->getMetadataFor($className); - } - - $entity = $elements[$index]; - $entityEntry = $targetHydrator->buildCacheEntry($class, $entityKey, $entity); - - $targetRegion->put($entityKey, $entityEntry); - } - - if ($this->region->put($key, $entry)) { - $this->cacheLogger?->collectionCachePut($this->regionName, $key); - } - } - - public function contains(PersistentCollection $collection, object $element): bool - { - return $this->persister->contains($collection, $element); - } - - public function containsKey(PersistentCollection $collection, mixed $key): bool - { - return $this->persister->containsKey($collection, $key); - } - - public function count(PersistentCollection $collection): int - { - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->fieldName, $ownerId); - $entry = $this->region->get($key); - - if ($entry !== null) { - return count($entry->identifiers); - } - - return $this->persister->count($collection); - } - - public function get(PersistentCollection $collection, mixed $index): mixed - { - return $this->persister->get($collection, $index); - } - - /** - * {@inheritDoc} - */ - public function slice(PersistentCollection $collection, int $offset, int|null $length = null): array - { - return $this->persister->slice($collection, $offset, $length); - } - - /** - * {@inheritDoc} - */ - public function loadCriteria(PersistentCollection $collection, Criteria $criteria): array - { - return $this->persister->loadCriteria($collection, $criteria); - } -} diff --git a/vendor/doctrine/orm/src/Cache/Persister/Collection/CachedCollectionPersister.php b/vendor/doctrine/orm/src/Cache/Persister/Collection/CachedCollectionPersister.php deleted file mode 100644 index 6b10c80..0000000 --- a/vendor/doctrine/orm/src/Cache/Persister/Collection/CachedCollectionPersister.php +++ /dev/null @@ -1,36 +0,0 @@ -queuedCache['update'])) { - foreach ($this->queuedCache['update'] as $item) { - $this->storeCollectionCache($item['key'], $item['list']); - } - } - - if (isset($this->queuedCache['delete'])) { - foreach ($this->queuedCache['delete'] as $key) { - $this->region->evict($key); - } - } - - $this->queuedCache = []; - } - - public function afterTransactionRolledBack(): void - { - $this->queuedCache = []; - } - - public function delete(PersistentCollection $collection): void - { - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->fieldName, $ownerId); - - $this->persister->delete($collection); - - $this->queuedCache['delete'][spl_object_id($collection)] = $key; - } - - public function update(PersistentCollection $collection): void - { - $isInitialized = $collection->isInitialized(); - $isDirty = $collection->isDirty(); - - if (! $isInitialized && ! $isDirty) { - return; - } - - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->fieldName, $ownerId); - - // Invalidate non initialized collections OR ordered collection - if ($isDirty && ! $isInitialized || $this->association->isOrdered()) { - $this->persister->update($collection); - - $this->queuedCache['delete'][spl_object_id($collection)] = $key; - - return; - } - - $this->persister->update($collection); - - $this->queuedCache['update'][spl_object_id($collection)] = [ - 'key' => $key, - 'list' => $collection, - ]; - } -} diff --git a/vendor/doctrine/orm/src/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php b/vendor/doctrine/orm/src/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php deleted file mode 100644 index 96e0a4b..0000000 --- a/vendor/doctrine/orm/src/Cache/Persister/Collection/ReadOnlyCachedCollectionPersister.php +++ /dev/null @@ -1,24 +0,0 @@ -isDirty() && $collection->getSnapshot()) { - throw CannotUpdateReadOnlyCollection::fromEntityAndField( - DefaultProxyClassNameResolver::getClass($collection->getOwner()), - $this->association->fieldName, - ); - } - - parent::update($collection); - } -} diff --git a/vendor/doctrine/orm/src/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php b/vendor/doctrine/orm/src/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php deleted file mode 100644 index 347a065..0000000 --- a/vendor/doctrine/orm/src/Cache/Persister/Collection/ReadWriteCachedCollectionPersister.php +++ /dev/null @@ -1,103 +0,0 @@ -queuedCache['update'])) { - foreach ($this->queuedCache['update'] as $item) { - $this->region->evict($item['key']); - } - } - - if (isset($this->queuedCache['delete'])) { - foreach ($this->queuedCache['delete'] as $item) { - $this->region->evict($item['key']); - } - } - - $this->queuedCache = []; - } - - public function afterTransactionRolledBack(): void - { - if (isset($this->queuedCache['update'])) { - foreach ($this->queuedCache['update'] as $item) { - $this->region->evict($item['key']); - } - } - - if (isset($this->queuedCache['delete'])) { - foreach ($this->queuedCache['delete'] as $item) { - $this->region->evict($item['key']); - } - } - - $this->queuedCache = []; - } - - public function delete(PersistentCollection $collection): void - { - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->fieldName, $ownerId); - $lock = $this->region->lock($key); - - $this->persister->delete($collection); - - if ($lock === null) { - return; - } - - $this->queuedCache['delete'][spl_object_id($collection)] = [ - 'key' => $key, - 'lock' => $lock, - ]; - } - - public function update(PersistentCollection $collection): void - { - $isInitialized = $collection->isInitialized(); - $isDirty = $collection->isDirty(); - - if (! $isInitialized && ! $isDirty) { - return; - } - - $this->persister->update($collection); - - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = new CollectionCacheKey($this->sourceEntity->rootEntityName, $this->association->fieldName, $ownerId); - $lock = $this->region->lock($key); - - if ($lock === null) { - return; - } - - $this->queuedCache['update'][spl_object_id($collection)] = [ - 'key' => $key, - 'lock' => $lock, - ]; - } -} diff --git a/vendor/doctrine/orm/src/Cache/Persister/Entity/AbstractEntityPersister.php b/vendor/doctrine/orm/src/Cache/Persister/Entity/AbstractEntityPersister.php deleted file mode 100644 index 9f371d8..0000000 --- a/vendor/doctrine/orm/src/Cache/Persister/Entity/AbstractEntityPersister.php +++ /dev/null @@ -1,557 +0,0 @@ -|null - */ - protected array|null $joinedAssociations = null; - - public function __construct( - protected EntityPersister $persister, - protected Region $region, - EntityManagerInterface $em, - protected ClassMetadata $class, - ) { - $configuration = $em->getConfiguration(); - $cacheConfig = $configuration->getSecondLevelCacheConfiguration(); - $cacheFactory = $cacheConfig->getCacheFactory(); - - $this->cache = $em->getCache(); - $this->regionName = $region->getName(); - $this->uow = $em->getUnitOfWork(); - $this->metadataFactory = $em->getMetadataFactory(); - $this->cacheLogger = $cacheConfig->getCacheLogger(); - $this->timestampRegion = $cacheFactory->getTimestampRegion(); - $this->hydrator = $cacheFactory->buildEntityHydrator($em, $class); - $this->timestampKey = new TimestampCacheKey($this->class->rootEntityName); - } - - public function addInsert(object $entity): void - { - $this->persister->addInsert($entity); - } - - /** - * {@inheritDoc} - */ - public function getInserts(): array - { - return $this->persister->getInserts(); - } - - public function getSelectSQL( - array|Criteria $criteria, - AssociationMapping|null $assoc = null, - LockMode|int|null $lockMode = null, - int|null $limit = null, - int|null $offset = null, - array|null $orderBy = null, - ): string { - return $this->persister->getSelectSQL($criteria, $assoc, $lockMode, $limit, $offset, $orderBy); - } - - public function getCountSQL(array|Criteria $criteria = []): string - { - return $this->persister->getCountSQL($criteria); - } - - public function getInsertSQL(): string - { - return $this->persister->getInsertSQL(); - } - - public function getResultSetMapping(): ResultSetMapping - { - return $this->persister->getResultSetMapping(); - } - - public function getSelectConditionStatementSQL( - string $field, - mixed $value, - AssociationMapping|null $assoc = null, - string|null $comparison = null, - ): string { - return $this->persister->getSelectConditionStatementSQL($field, $value, $assoc, $comparison); - } - - public function exists(object $entity, Criteria|null $extraConditions = null): bool - { - if ($extraConditions === null) { - $key = new EntityCacheKey($this->class->rootEntityName, $this->class->getIdentifierValues($entity)); - - if ($this->region->contains($key)) { - return true; - } - } - - return $this->persister->exists($entity, $extraConditions); - } - - public function getCacheRegion(): Region - { - return $this->region; - } - - public function getEntityHydrator(): EntityHydrator - { - return $this->hydrator; - } - - public function storeEntityCache(object $entity, EntityCacheKey $key): bool - { - $class = $this->class; - $className = DefaultProxyClassNameResolver::getClass($entity); - - if ($className !== $this->class->name) { - $class = $this->metadataFactory->getMetadataFor($className); - } - - $entry = $this->hydrator->buildCacheEntry($class, $key, $entity); - $cached = $this->region->put($key, $entry); - - if ($cached) { - $this->cacheLogger?->entityCachePut($this->regionName, $key); - } - - return $cached; - } - - private function storeJoinedAssociations(object $entity): void - { - if ($this->joinedAssociations === null) { - $associations = []; - - foreach ($this->class->associationMappings as $name => $assoc) { - if ( - isset($assoc->cache) && - ($assoc->isToOne()) && - ($assoc->fetch === ClassMetadata::FETCH_EAGER || ! $assoc->isOwningSide()) - ) { - $associations[] = $name; - } - } - - $this->joinedAssociations = $associations; - } - - foreach ($this->joinedAssociations as $name) { - $assoc = $this->class->associationMappings[$name]; - $assocEntity = $this->class->getFieldValue($entity, $name); - - if ($assocEntity === null) { - continue; - } - - $assocId = $this->uow->getEntityIdentifier($assocEntity); - $assocMetadata = $this->metadataFactory->getMetadataFor($assoc->targetEntity); - $assocKey = new EntityCacheKey($assocMetadata->rootEntityName, $assocId); - $assocPersister = $this->uow->getEntityPersister($assoc->targetEntity); - - $assocPersister->storeEntityCache($assocEntity, $assocKey); - } - } - - /** - * Generates a string of currently query - * - * @param string[]|Criteria $criteria - * @param array|null $orderBy - */ - protected function getHash( - string $query, - array|Criteria $criteria, - array|null $orderBy = null, - int|null $limit = null, - int|null $offset = null, - ): string { - [$params] = $criteria instanceof Criteria - ? $this->persister->expandCriteriaParameters($criteria) - : $this->persister->expandParameters($criteria); - - return sha1($query . serialize($params) . serialize($orderBy) . $limit . $offset); - } - - /** - * {@inheritDoc} - */ - public function expandParameters(array $criteria): array - { - return $this->persister->expandParameters($criteria); - } - - /** - * {@inheritDoc} - */ - public function expandCriteriaParameters(Criteria $criteria): array - { - return $this->persister->expandCriteriaParameters($criteria); - } - - public function getClassMetadata(): ClassMetadata - { - return $this->persister->getClassMetadata(); - } - - /** - * {@inheritDoc} - */ - public function getManyToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - int|null $offset = null, - int|null $limit = null, - ): array { - return $this->persister->getManyToManyCollection($assoc, $sourceEntity, $offset, $limit); - } - - /** - * {@inheritDoc} - */ - public function getOneToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - int|null $offset = null, - int|null $limit = null, - ): array { - return $this->persister->getOneToManyCollection($assoc, $sourceEntity, $offset, $limit); - } - - public function getOwningTable(string $fieldName): string - { - return $this->persister->getOwningTable($fieldName); - } - - public function executeInserts(): void - { - // The commit order/foreign key relationships may make it necessary that multiple calls to executeInsert() - // are performed, so collect all the new entities. - $newInserts = $this->persister->getInserts(); - - if ($newInserts) { - $this->queuedCache['insert'] = array_merge($this->queuedCache['insert'] ?? [], $newInserts); - } - - $this->persister->executeInserts(); - } - - /** - * {@inheritDoc} - */ - public function load( - array $criteria, - object|null $entity = null, - AssociationMapping|null $assoc = null, - array $hints = [], - LockMode|int|null $lockMode = null, - int|null $limit = null, - array|null $orderBy = null, - ): object|null { - if ($entity !== null || $assoc !== null || $hints !== [] || $lockMode !== null) { - return $this->persister->load($criteria, $entity, $assoc, $hints, $lockMode, $limit, $orderBy); - } - - //handle only EntityRepository#findOneBy - $query = $this->persister->getSelectSQL($criteria, null, null, $limit, null, $orderBy); - $hash = $this->getHash($query, $criteria); - $rsm = $this->getResultSetMapping(); - $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); - $queryCache = $this->cache->getQueryCache($this->regionName); - $result = $queryCache->get($queryKey, $rsm); - - if ($result !== null) { - $this->cacheLogger?->queryCacheHit($this->regionName, $queryKey); - - return $result[0]; - } - - $result = $this->persister->load($criteria, $entity, $assoc, $hints, $lockMode, $limit, $orderBy); - - if ($result === null) { - return null; - } - - $cached = $queryCache->put($queryKey, $rsm, [$result]); - - $this->cacheLogger?->queryCacheMiss($this->regionName, $queryKey); - - if ($cached) { - $this->cacheLogger?->queryCachePut($this->regionName, $queryKey); - } - - return $result; - } - - /** - * {@inheritDoc} - */ - public function loadAll( - array $criteria = [], - array|null $orderBy = null, - int|null $limit = null, - int|null $offset = null, - ): array { - $query = $this->persister->getSelectSQL($criteria, null, null, $limit, $offset, $orderBy); - $hash = $this->getHash($query, $criteria); - $rsm = $this->getResultSetMapping(); - $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); - $queryCache = $this->cache->getQueryCache($this->regionName); - $result = $queryCache->get($queryKey, $rsm); - - if ($result !== null) { - $this->cacheLogger?->queryCacheHit($this->regionName, $queryKey); - - return $result; - } - - $result = $this->persister->loadAll($criteria, $orderBy, $limit, $offset); - $cached = $queryCache->put($queryKey, $rsm, $result); - - if ($result) { - $this->cacheLogger?->queryCacheMiss($this->regionName, $queryKey); - } - - if ($cached) { - $this->cacheLogger?->queryCachePut($this->regionName, $queryKey); - } - - return $result; - } - - /** - * {@inheritDoc} - */ - public function loadById(array $identifier, object|null $entity = null): object|null - { - $cacheKey = new EntityCacheKey($this->class->rootEntityName, $identifier); - $cacheEntry = $this->region->get($cacheKey); - $class = $this->class; - - if ($cacheEntry !== null) { - if ($cacheEntry->class !== $this->class->name) { - $class = $this->metadataFactory->getMetadataFor($cacheEntry->class); - } - - $cachedEntity = $this->hydrator->loadCacheEntry($class, $cacheKey, $cacheEntry, $entity); - - if ($cachedEntity !== null) { - $this->cacheLogger?->entityCacheHit($this->regionName, $cacheKey); - - return $cachedEntity; - } - } - - $entity = $this->persister->loadById($identifier, $entity); - - if ($entity === null) { - return null; - } - - $class = $this->class; - $className = DefaultProxyClassNameResolver::getClass($entity); - - if ($className !== $this->class->name) { - $class = $this->metadataFactory->getMetadataFor($className); - } - - $cacheEntry = $this->hydrator->buildCacheEntry($class, $cacheKey, $entity); - $cached = $this->region->put($cacheKey, $cacheEntry); - - if ($cached && ($this->joinedAssociations === null || $this->joinedAssociations)) { - $this->storeJoinedAssociations($entity); - } - - if ($cached) { - $this->cacheLogger?->entityCachePut($this->regionName, $cacheKey); - } - - $this->cacheLogger?->entityCacheMiss($this->regionName, $cacheKey); - - return $entity; - } - - public function count(array|Criteria $criteria = []): int - { - return $this->persister->count($criteria); - } - - /** - * {@inheritDoc} - */ - public function loadCriteria(Criteria $criteria): array - { - $orderBy = $criteria->orderings(); - $limit = $criteria->getMaxResults(); - $offset = $criteria->getFirstResult(); - $query = $this->persister->getSelectSQL($criteria); - $hash = $this->getHash($query, $criteria, $orderBy, $limit, $offset); - $rsm = $this->getResultSetMapping(); - $queryKey = new QueryCacheKey($hash, 0, Cache::MODE_NORMAL, $this->timestampKey); - $queryCache = $this->cache->getQueryCache($this->regionName); - $cacheResult = $queryCache->get($queryKey, $rsm); - - if ($cacheResult !== null) { - $this->cacheLogger?->queryCacheHit($this->regionName, $queryKey); - - return $cacheResult; - } - - $result = $this->persister->loadCriteria($criteria); - $cached = $queryCache->put($queryKey, $rsm, $result); - - if ($result) { - $this->cacheLogger?->queryCacheMiss($this->regionName, $queryKey); - } - - if ($cached) { - $this->cacheLogger?->queryCachePut($this->regionName, $queryKey); - } - - return $result; - } - - /** - * {@inheritDoc} - */ - public function loadManyToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - PersistentCollection $collection, - ): array { - $persister = $this->uow->getCollectionPersister($assoc); - $hasCache = ($persister instanceof CachedPersister); - - if (! $hasCache) { - return $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $collection); - } - - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = $this->buildCollectionCacheKey($assoc, $ownerId); - $list = $persister->loadCollectionCache($collection, $key); - - if ($list !== null) { - $this->cacheLogger?->collectionCacheHit($persister->getCacheRegion()->getName(), $key); - - return $list; - } - - $list = $this->persister->loadManyToManyCollection($assoc, $sourceEntity, $collection); - - $persister->storeCollectionCache($key, $list); - - $this->cacheLogger?->collectionCacheMiss($persister->getCacheRegion()->getName(), $key); - - return $list; - } - - public function loadOneToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - PersistentCollection $collection, - ): mixed { - $persister = $this->uow->getCollectionPersister($assoc); - $hasCache = ($persister instanceof CachedPersister); - - if (! $hasCache) { - return $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $collection); - } - - $ownerId = $this->uow->getEntityIdentifier($collection->getOwner()); - $key = $this->buildCollectionCacheKey($assoc, $ownerId); - $list = $persister->loadCollectionCache($collection, $key); - - if ($list !== null) { - $this->cacheLogger?->collectionCacheHit($persister->getCacheRegion()->getName(), $key); - - return $list; - } - - $list = $this->persister->loadOneToManyCollection($assoc, $sourceEntity, $collection); - - $persister->storeCollectionCache($key, $list); - - $this->cacheLogger?->collectionCacheMiss($persister->getCacheRegion()->getName(), $key); - - return $list; - } - - /** - * {@inheritDoc} - */ - public function loadOneToOneEntity(AssociationMapping $assoc, object $sourceEntity, array $identifier = []): object|null - { - return $this->persister->loadOneToOneEntity($assoc, $sourceEntity, $identifier); - } - - /** - * {@inheritDoc} - */ - public function lock(array $criteria, LockMode|int $lockMode): void - { - $this->persister->lock($criteria, $lockMode); - } - - /** - * {@inheritDoc} - */ - public function refresh(array $id, object $entity, LockMode|int|null $lockMode = null): void - { - $this->persister->refresh($id, $entity, $lockMode); - } - - /** @param array $ownerId */ - protected function buildCollectionCacheKey(AssociationMapping $association, array $ownerId): CollectionCacheKey - { - $metadata = $this->metadataFactory->getMetadataFor($association->sourceEntity); - assert($metadata instanceof ClassMetadata); - - return new CollectionCacheKey($metadata->rootEntityName, $association->fieldName, $ownerId); - } -} diff --git a/vendor/doctrine/orm/src/Cache/Persister/Entity/CachedEntityPersister.php b/vendor/doctrine/orm/src/Cache/Persister/Entity/CachedEntityPersister.php deleted file mode 100644 index 5fba56f..0000000 --- a/vendor/doctrine/orm/src/Cache/Persister/Entity/CachedEntityPersister.php +++ /dev/null @@ -1,20 +0,0 @@ -queuedCache['insert'])) { - foreach ($this->queuedCache['insert'] as $entity) { - $isChanged = $this->updateCache($entity, $isChanged); - } - } - - if (isset($this->queuedCache['update'])) { - foreach ($this->queuedCache['update'] as $entity) { - $isChanged = $this->updateCache($entity, $isChanged); - } - } - - if (isset($this->queuedCache['delete'])) { - foreach ($this->queuedCache['delete'] as $key) { - $this->region->evict($key); - - $isChanged = true; - } - } - - if ($isChanged) { - $this->timestampRegion->update($this->timestampKey); - } - - $this->queuedCache = []; - } - - public function afterTransactionRolledBack(): void - { - $this->queuedCache = []; - } - - public function delete(object $entity): bool - { - $key = new EntityCacheKey($this->class->rootEntityName, $this->uow->getEntityIdentifier($entity)); - $deleted = $this->persister->delete($entity); - - if ($deleted) { - $this->region->evict($key); - } - - $this->queuedCache['delete'][] = $key; - - return $deleted; - } - - public function update(object $entity): void - { - $this->persister->update($entity); - - $this->queuedCache['update'][] = $entity; - } - - private function updateCache(object $entity, bool $isChanged): bool - { - $class = $this->metadataFactory->getMetadataFor($entity::class); - $key = new EntityCacheKey($class->rootEntityName, $this->uow->getEntityIdentifier($entity)); - $entry = $this->hydrator->buildCacheEntry($class, $key, $entity); - $cached = $this->region->put($key, $entry); - $isChanged = $isChanged || $cached; - - if ($cached) { - $this->cacheLogger?->entityCachePut($this->regionName, $key); - } - - return $isChanged; - } -} diff --git a/vendor/doctrine/orm/src/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php b/vendor/doctrine/orm/src/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php deleted file mode 100644 index 4cd1784..0000000 --- a/vendor/doctrine/orm/src/Cache/Persister/Entity/ReadOnlyCachedEntityPersister.php +++ /dev/null @@ -1,19 +0,0 @@ -queuedCache['update'])) { - foreach ($this->queuedCache['update'] as $item) { - $this->region->evict($item['key']); - - $isChanged = true; - } - } - - if (isset($this->queuedCache['delete'])) { - foreach ($this->queuedCache['delete'] as $item) { - $this->region->evict($item['key']); - - $isChanged = true; - } - } - - if ($isChanged) { - $this->timestampRegion->update($this->timestampKey); - } - - $this->queuedCache = []; - } - - public function afterTransactionRolledBack(): void - { - if (isset($this->queuedCache['update'])) { - foreach ($this->queuedCache['update'] as $item) { - $this->region->evict($item['key']); - } - } - - if (isset($this->queuedCache['delete'])) { - foreach ($this->queuedCache['delete'] as $item) { - $this->region->evict($item['key']); - } - } - - $this->queuedCache = []; - } - - public function delete(object $entity): bool - { - $key = new EntityCacheKey($this->class->rootEntityName, $this->uow->getEntityIdentifier($entity)); - $lock = $this->region->lock($key); - $deleted = $this->persister->delete($entity); - - if ($deleted) { - $this->region->evict($key); - } - - if ($lock === null) { - return $deleted; - } - - $this->queuedCache['delete'][] = [ - 'lock' => $lock, - 'key' => $key, - ]; - - return $deleted; - } - - public function update(object $entity): void - { - $key = new EntityCacheKey($this->class->rootEntityName, $this->uow->getEntityIdentifier($entity)); - $lock = $this->region->lock($key); - - $this->persister->update($entity); - - if ($lock === null) { - return; - } - - $this->queuedCache['update'][] = [ - 'lock' => $lock, - 'key' => $key, - ]; - } -} diff --git a/vendor/doctrine/orm/src/Cache/QueryCache.php b/vendor/doctrine/orm/src/Cache/QueryCache.php deleted file mode 100644 index e697680..0000000 --- a/vendor/doctrine/orm/src/Cache/QueryCache.php +++ /dev/null @@ -1,28 +0,0 @@ - $result List of entity identifiers */ - public function __construct( - public readonly array $result, - float|null $time = null, - ) { - $this->time = $time ?: microtime(true); - } - - /** @param array $values */ - public static function __set_state(array $values): self - { - return new self($values['result'], $values['time']); - } -} diff --git a/vendor/doctrine/orm/src/Cache/QueryCacheKey.php b/vendor/doctrine/orm/src/Cache/QueryCacheKey.php deleted file mode 100644 index 2372e5a..0000000 --- a/vendor/doctrine/orm/src/Cache/QueryCacheKey.php +++ /dev/null @@ -1,23 +0,0 @@ -name; - } - - public function contains(CacheKey $key): bool - { - return $this->cacheItemPool->hasItem($this->getCacheEntryKey($key)); - } - - public function get(CacheKey $key): CacheEntry|null - { - $item = $this->cacheItemPool->getItem($this->getCacheEntryKey($key)); - $entry = $item->isHit() ? $item->get() : null; - - if (! $entry instanceof CacheEntry) { - return null; - } - - return $entry; - } - - public function getMultiple(CollectionCacheEntry $collection): array|null - { - $keys = array_map( - $this->getCacheEntryKey(...), - $collection->identifiers, - ); - /** @var iterable $items */ - $items = $this->cacheItemPool->getItems($keys); - if ($items instanceof Traversable) { - $items = iterator_to_array($items); - } - - $result = []; - foreach ($keys as $arrayKey => $cacheKey) { - if (! isset($items[$cacheKey]) || ! $items[$cacheKey]->isHit()) { - return null; - } - - $entry = $items[$cacheKey]->get(); - if (! $entry instanceof CacheEntry) { - return null; - } - - $result[$arrayKey] = $entry; - } - - return $result; - } - - public function put(CacheKey $key, CacheEntry $entry, Lock|null $lock = null): bool - { - $item = $this->cacheItemPool - ->getItem($this->getCacheEntryKey($key)) - ->set($entry); - - if ($this->lifetime > 0) { - $item->expiresAfter($this->lifetime); - } - - return $this->cacheItemPool->save($item); - } - - public function evict(CacheKey $key): bool - { - return $this->cacheItemPool->deleteItem($this->getCacheEntryKey($key)); - } - - public function evictAll(): bool - { - return $this->cacheItemPool->clear(self::REGION_PREFIX . $this->name); - } - - private function getCacheEntryKey(CacheKey $key): string - { - return self::REGION_PREFIX . $this->name . self::REGION_KEY_SEPARATOR . strtr($key->hash, '{}()/\@:', '________'); - } -} diff --git a/vendor/doctrine/orm/src/Cache/Region/FileLockRegion.php b/vendor/doctrine/orm/src/Cache/Region/FileLockRegion.php deleted file mode 100644 index bedd6a6..0000000 --- a/vendor/doctrine/orm/src/Cache/Region/FileLockRegion.php +++ /dev/null @@ -1,194 +0,0 @@ -getLockFileName($key); - - if (! is_file($filename)) { - return false; - } - - $time = $this->getLockTime($filename); - $content = $this->getLockContent($filename); - - if ($content === false || $time === false) { - @unlink($filename); - - return false; - } - - if ($lock && $content === $lock->value) { - return false; - } - - // outdated lock - if ($time + $this->lockLifetime <= time()) { - @unlink($filename); - - return false; - } - - return true; - } - - private function getLockFileName(CacheKey $key): string - { - return $this->directory . DIRECTORY_SEPARATOR . $key->hash . '.' . self::LOCK_EXTENSION; - } - - private function getLockContent(string $filename): string|false - { - return @file_get_contents($filename); - } - - private function getLockTime(string $filename): int|false - { - return @fileatime($filename); - } - - public function getName(): string - { - return $this->region->getName(); - } - - public function contains(CacheKey $key): bool - { - if ($this->isLocked($key)) { - return false; - } - - return $this->region->contains($key); - } - - public function get(CacheKey $key): CacheEntry|null - { - if ($this->isLocked($key)) { - return null; - } - - return $this->region->get($key); - } - - public function getMultiple(CollectionCacheEntry $collection): array|null - { - if (array_filter(array_map($this->isLocked(...), $collection->identifiers))) { - return null; - } - - return $this->region->getMultiple($collection); - } - - public function put(CacheKey $key, CacheEntry $entry, Lock|null $lock = null): bool - { - if ($this->isLocked($key, $lock)) { - return false; - } - - return $this->region->put($key, $entry); - } - - public function evict(CacheKey $key): bool - { - if ($this->isLocked($key)) { - @unlink($this->getLockFileName($key)); - } - - return $this->region->evict($key); - } - - public function evictAll(): bool - { - // The check below is necessary because on some platforms glob returns false - // when nothing matched (even though no errors occurred) - $filenames = glob(sprintf('%s/*.%s', $this->directory, self::LOCK_EXTENSION)) ?: []; - - foreach ($filenames as $filename) { - @unlink($filename); - } - - return $this->region->evictAll(); - } - - public function lock(CacheKey $key): Lock|null - { - if ($this->isLocked($key)) { - return null; - } - - $lock = Lock::createLockRead(); - $filename = $this->getLockFileName($key); - - if (@file_put_contents($filename, $lock->value, LOCK_EX) === false) { - return null; - } - - chmod($filename, 0664); - - return $lock; - } - - public function unlock(CacheKey $key, Lock $lock): bool - { - if ($this->isLocked($key, $lock)) { - return false; - } - - return @unlink($this->getLockFileName($key)); - } -} diff --git a/vendor/doctrine/orm/src/Cache/Region/UpdateTimestampCache.php b/vendor/doctrine/orm/src/Cache/Region/UpdateTimestampCache.php deleted file mode 100644 index aa75a90..0000000 --- a/vendor/doctrine/orm/src/Cache/Region/UpdateTimestampCache.php +++ /dev/null @@ -1,20 +0,0 @@ -put($key, new TimestampCacheEntry()); - } -} diff --git a/vendor/doctrine/orm/src/Cache/RegionsConfiguration.php b/vendor/doctrine/orm/src/Cache/RegionsConfiguration.php deleted file mode 100644 index a852831..0000000 --- a/vendor/doctrine/orm/src/Cache/RegionsConfiguration.php +++ /dev/null @@ -1,63 +0,0 @@ - */ - private array $lifetimes = []; - - /** @var array */ - private array $lockLifetimes = []; - - public function __construct( - private int $defaultLifetime = 3600, - private int $defaultLockLifetime = 60, - ) { - } - - public function getDefaultLifetime(): int - { - return $this->defaultLifetime; - } - - public function setDefaultLifetime(int $defaultLifetime): void - { - $this->defaultLifetime = $defaultLifetime; - } - - public function getDefaultLockLifetime(): int - { - return $this->defaultLockLifetime; - } - - public function setDefaultLockLifetime(int $defaultLockLifetime): void - { - $this->defaultLockLifetime = $defaultLockLifetime; - } - - public function getLifetime(string $regionName): int - { - return $this->lifetimes[$regionName] ?? $this->defaultLifetime; - } - - public function setLifetime(string $name, int $lifetime): void - { - $this->lifetimes[$name] = $lifetime; - } - - public function getLockLifetime(string $regionName): int - { - return $this->lockLifetimes[$regionName] ?? $this->defaultLockLifetime; - } - - public function setLockLifetime(string $name, int $lifetime): void - { - $this->lockLifetimes[$name] = $lifetime; - } -} diff --git a/vendor/doctrine/orm/src/Cache/TimestampCacheEntry.php b/vendor/doctrine/orm/src/Cache/TimestampCacheEntry.php deleted file mode 100644 index 60c9175..0000000 --- a/vendor/doctrine/orm/src/Cache/TimestampCacheEntry.php +++ /dev/null @@ -1,29 +0,0 @@ -time = $time ?? microtime(true); - } - - /** - * Creates a new TimestampCacheEntry - * - * This method allow Doctrine\Common\Cache\PhpFileCache compatibility - * - * @param array $values array containing property values - */ - public static function __set_state(array $values): TimestampCacheEntry - { - return new self($values['time']); - } -} diff --git a/vendor/doctrine/orm/src/Cache/TimestampCacheKey.php b/vendor/doctrine/orm/src/Cache/TimestampCacheKey.php deleted file mode 100644 index 5aef4c5..0000000 --- a/vendor/doctrine/orm/src/Cache/TimestampCacheKey.php +++ /dev/null @@ -1,17 +0,0 @@ -regionUpdated($key, $entry)) { - return false; - } - - if ($key->lifetime === 0) { - return true; - } - - return $entry->time + $key->lifetime > microtime(true); - } - - private function regionUpdated(QueryCacheKey $key, QueryCacheEntry $entry): bool - { - if ($key->timestampKey === null) { - return false; - } - - $timestamp = $this->timestampRegion->get($key->timestampKey); - - return $timestamp && $timestamp->time > $entry->time; - } -} diff --git a/vendor/doctrine/orm/src/Cache/TimestampRegion.php b/vendor/doctrine/orm/src/Cache/TimestampRegion.php deleted file mode 100644 index b74fa8d..0000000 --- a/vendor/doctrine/orm/src/Cache/TimestampRegion.php +++ /dev/null @@ -1,18 +0,0 @@ -, ClassMetadata::GENERATOR_TYPE_*> */ - private $identityGenerationPreferences = []; - - /** @psalm-param array, ClassMetadata::GENERATOR_TYPE_*> $value */ - public function setIdentityGenerationPreferences(array $value): void - { - $this->identityGenerationPreferences = $value; - } - - /** @psalm-return array, ClassMetadata::GENERATOR_TYPE_*> $value */ - public function getIdentityGenerationPreferences(): array - { - return $this->identityGenerationPreferences; - } - - /** - * Sets the directory where Doctrine generates any necessary proxy class files. - */ - public function setProxyDir(string $dir): void - { - $this->attributes['proxyDir'] = $dir; - } - - /** - * Gets the directory where Doctrine generates any necessary proxy class files. - */ - public function getProxyDir(): string|null - { - return $this->attributes['proxyDir'] ?? null; - } - - /** - * Gets the strategy for automatically generating proxy classes. - * - * @return ProxyFactory::AUTOGENERATE_* - */ - public function getAutoGenerateProxyClasses(): int - { - return $this->attributes['autoGenerateProxyClasses'] ?? ProxyFactory::AUTOGENERATE_ALWAYS; - } - - /** - * Sets the strategy for automatically generating proxy classes. - * - * @param bool|ProxyFactory::AUTOGENERATE_* $autoGenerate True is converted to AUTOGENERATE_ALWAYS, false to AUTOGENERATE_NEVER. - */ - public function setAutoGenerateProxyClasses(bool|int $autoGenerate): void - { - $this->attributes['autoGenerateProxyClasses'] = (int) $autoGenerate; - } - - /** - * Gets the namespace where proxy classes reside. - */ - public function getProxyNamespace(): string|null - { - return $this->attributes['proxyNamespace'] ?? null; - } - - /** - * Sets the namespace where proxy classes reside. - */ - public function setProxyNamespace(string $ns): void - { - $this->attributes['proxyNamespace'] = $ns; - } - - /** - * Sets the cache driver implementation that is used for metadata caching. - * - * @todo Force parameter to be a Closure to ensure lazy evaluation - * (as soon as a metadata cache is in effect, the driver never needs to initialize). - */ - public function setMetadataDriverImpl(MappingDriver $driverImpl): void - { - $this->attributes['metadataDriverImpl'] = $driverImpl; - } - - /** - * Sets the entity alias map. - * - * @psalm-param array $entityNamespaces - */ - public function setEntityNamespaces(array $entityNamespaces): void - { - $this->attributes['entityNamespaces'] = $entityNamespaces; - } - - /** - * Retrieves the list of registered entity namespace aliases. - * - * @psalm-return array - */ - public function getEntityNamespaces(): array - { - return $this->attributes['entityNamespaces']; - } - - /** - * Gets the cache driver implementation that is used for the mapping metadata. - */ - public function getMetadataDriverImpl(): MappingDriver|null - { - return $this->attributes['metadataDriverImpl'] ?? null; - } - - /** - * Gets the cache driver implementation that is used for the query cache (SQL cache). - */ - public function getQueryCache(): CacheItemPoolInterface|null - { - return $this->attributes['queryCache'] ?? null; - } - - /** - * Sets the cache driver implementation that is used for the query cache (SQL cache). - */ - public function setQueryCache(CacheItemPoolInterface $cache): void - { - $this->attributes['queryCache'] = $cache; - } - - public function getHydrationCache(): CacheItemPoolInterface|null - { - return $this->attributes['hydrationCache'] ?? null; - } - - public function setHydrationCache(CacheItemPoolInterface $cache): void - { - $this->attributes['hydrationCache'] = $cache; - } - - public function getMetadataCache(): CacheItemPoolInterface|null - { - return $this->attributes['metadataCache'] ?? null; - } - - public function setMetadataCache(CacheItemPoolInterface $cache): void - { - $this->attributes['metadataCache'] = $cache; - } - - /** - * Registers a custom DQL function that produces a string value. - * Such a function can then be used in any DQL statement in any place where string - * functions are allowed. - * - * DQL function names are case-insensitive. - * - * @param class-string|callable $className Class name or a callable that returns the function. - * @psalm-param class-string|callable(string):FunctionNode $className - */ - public function addCustomStringFunction(string $name, string|callable $className): void - { - $this->attributes['customStringFunctions'][strtolower($name)] = $className; - } - - /** - * Gets the implementation class name of a registered custom string DQL function. - * - * @psalm-return class-string|callable(string):FunctionNode|null - */ - public function getCustomStringFunction(string $name): string|callable|null - { - $name = strtolower($name); - - return $this->attributes['customStringFunctions'][$name] ?? null; - } - - /** - * Sets a map of custom DQL string functions. - * - * Keys must be function names and values the FQCN of the implementing class. - * The function names will be case-insensitive in DQL. - * - * Any previously added string functions are discarded. - * - * @psalm-param array|callable(string):FunctionNode> $functions The map of custom - * DQL string functions. - */ - public function setCustomStringFunctions(array $functions): void - { - foreach ($functions as $name => $className) { - $this->addCustomStringFunction($name, $className); - } - } - - /** - * Registers a custom DQL function that produces a numeric value. - * Such a function can then be used in any DQL statement in any place where numeric - * functions are allowed. - * - * DQL function names are case-insensitive. - * - * @param class-string|callable $className Class name or a callable that returns the function. - * @psalm-param class-string|callable(string):FunctionNode $className - */ - public function addCustomNumericFunction(string $name, string|callable $className): void - { - $this->attributes['customNumericFunctions'][strtolower($name)] = $className; - } - - /** - * Gets the implementation class name of a registered custom numeric DQL function. - * - * @psalm-return ?class-string|callable(string):FunctionNode - */ - public function getCustomNumericFunction(string $name): string|callable|null - { - $name = strtolower($name); - - return $this->attributes['customNumericFunctions'][$name] ?? null; - } - - /** - * Sets a map of custom DQL numeric functions. - * - * Keys must be function names and values the FQCN of the implementing class. - * The function names will be case-insensitive in DQL. - * - * Any previously added numeric functions are discarded. - * - * @psalm-param array $functions The map of custom - * DQL numeric functions. - */ - public function setCustomNumericFunctions(array $functions): void - { - foreach ($functions as $name => $className) { - $this->addCustomNumericFunction($name, $className); - } - } - - /** - * Registers a custom DQL function that produces a date/time value. - * Such a function can then be used in any DQL statement in any place where date/time - * functions are allowed. - * - * DQL function names are case-insensitive. - * - * @param string|callable $className Class name or a callable that returns the function. - * @psalm-param class-string|callable(string):FunctionNode $className - */ - public function addCustomDatetimeFunction(string $name, string|callable $className): void - { - $this->attributes['customDatetimeFunctions'][strtolower($name)] = $className; - } - - /** - * Gets the implementation class name of a registered custom date/time DQL function. - * - * @psalm-return class-string|callable|null - */ - public function getCustomDatetimeFunction(string $name): string|callable|null - { - $name = strtolower($name); - - return $this->attributes['customDatetimeFunctions'][$name] ?? null; - } - - /** - * Sets a map of custom DQL date/time functions. - * - * Keys must be function names and values the FQCN of the implementing class. - * The function names will be case-insensitive in DQL. - * - * Any previously added date/time functions are discarded. - * - * @param array $functions The map of custom DQL date/time functions. - * @psalm-param array|callable(string):FunctionNode> $functions - */ - public function setCustomDatetimeFunctions(array $functions): void - { - foreach ($functions as $name => $className) { - $this->addCustomDatetimeFunction($name, $className); - } - } - - /** - * Sets a TypedFieldMapper for php typed fields to DBAL types auto-completion. - */ - public function setTypedFieldMapper(TypedFieldMapper|null $typedFieldMapper): void - { - $this->attributes['typedFieldMapper'] = $typedFieldMapper; - } - - /** - * Gets a TypedFieldMapper for php typed fields to DBAL types auto-completion. - */ - public function getTypedFieldMapper(): TypedFieldMapper|null - { - return $this->attributes['typedFieldMapper'] ?? null; - } - - /** - * Sets the custom hydrator modes in one pass. - * - * @param array> $modes An array of ($modeName => $hydrator). - */ - public function setCustomHydrationModes(array $modes): void - { - $this->attributes['customHydrationModes'] = []; - - foreach ($modes as $modeName => $hydrator) { - $this->addCustomHydrationMode($modeName, $hydrator); - } - } - - /** - * Gets the hydrator class for the given hydration mode name. - * - * @psalm-return class-string|null - */ - public function getCustomHydrationMode(string $modeName): string|null - { - return $this->attributes['customHydrationModes'][$modeName] ?? null; - } - - /** - * Adds a custom hydration mode. - * - * @psalm-param class-string $hydrator - */ - public function addCustomHydrationMode(string $modeName, string $hydrator): void - { - $this->attributes['customHydrationModes'][$modeName] = $hydrator; - } - - /** - * Sets a class metadata factory. - * - * @psalm-param class-string $cmfName - */ - public function setClassMetadataFactoryName(string $cmfName): void - { - $this->attributes['classMetadataFactoryName'] = $cmfName; - } - - /** @psalm-return class-string */ - public function getClassMetadataFactoryName(): string - { - if (! isset($this->attributes['classMetadataFactoryName'])) { - $this->attributes['classMetadataFactoryName'] = ClassMetadataFactory::class; - } - - return $this->attributes['classMetadataFactoryName']; - } - - /** - * Adds a filter to the list of possible filters. - * - * @param string $className The class name of the filter. - * @psalm-param class-string $className - */ - public function addFilter(string $name, string $className): void - { - $this->attributes['filters'][$name] = $className; - } - - /** - * Gets the class name for a given filter name. - * - * @return string|null The class name of the filter, or null if it is not - * defined. - * @psalm-return class-string|null - */ - public function getFilterClassName(string $name): string|null - { - return $this->attributes['filters'][$name] ?? null; - } - - /** - * Sets default repository class. - * - * @psalm-param class-string $className - * - * @throws InvalidEntityRepository If $classname is not an ObjectRepository. - */ - public function setDefaultRepositoryClassName(string $className): void - { - if (! class_exists($className) || ! is_a($className, EntityRepository::class, true)) { - throw InvalidEntityRepository::fromClassName($className); - } - - $this->attributes['defaultRepositoryClassName'] = $className; - } - - /** - * Get default repository class. - * - * @psalm-return class-string - */ - public function getDefaultRepositoryClassName(): string - { - return $this->attributes['defaultRepositoryClassName'] ?? EntityRepository::class; - } - - /** - * Sets naming strategy. - */ - public function setNamingStrategy(NamingStrategy $namingStrategy): void - { - $this->attributes['namingStrategy'] = $namingStrategy; - } - - /** - * Gets naming strategy.. - */ - public function getNamingStrategy(): NamingStrategy - { - if (! isset($this->attributes['namingStrategy'])) { - $this->attributes['namingStrategy'] = new DefaultNamingStrategy(); - } - - return $this->attributes['namingStrategy']; - } - - /** - * Sets quote strategy. - */ - public function setQuoteStrategy(QuoteStrategy $quoteStrategy): void - { - $this->attributes['quoteStrategy'] = $quoteStrategy; - } - - /** - * Gets quote strategy. - */ - public function getQuoteStrategy(): QuoteStrategy - { - if (! isset($this->attributes['quoteStrategy'])) { - $this->attributes['quoteStrategy'] = new DefaultQuoteStrategy(); - } - - return $this->attributes['quoteStrategy']; - } - - /** - * Set the entity listener resolver. - */ - public function setEntityListenerResolver(EntityListenerResolver $resolver): void - { - $this->attributes['entityListenerResolver'] = $resolver; - } - - /** - * Get the entity listener resolver. - */ - public function getEntityListenerResolver(): EntityListenerResolver - { - if (! isset($this->attributes['entityListenerResolver'])) { - $this->attributes['entityListenerResolver'] = new DefaultEntityListenerResolver(); - } - - return $this->attributes['entityListenerResolver']; - } - - /** - * Set the entity repository factory. - */ - public function setRepositoryFactory(RepositoryFactory $repositoryFactory): void - { - $this->attributes['repositoryFactory'] = $repositoryFactory; - } - - /** - * Get the entity repository factory. - */ - public function getRepositoryFactory(): RepositoryFactory - { - return $this->attributes['repositoryFactory'] ?? new DefaultRepositoryFactory(); - } - - public function isSecondLevelCacheEnabled(): bool - { - return $this->attributes['isSecondLevelCacheEnabled'] ?? false; - } - - public function setSecondLevelCacheEnabled(bool $flag = true): void - { - $this->attributes['isSecondLevelCacheEnabled'] = $flag; - } - - public function setSecondLevelCacheConfiguration(CacheConfiguration $cacheConfig): void - { - $this->attributes['secondLevelCacheConfiguration'] = $cacheConfig; - } - - public function getSecondLevelCacheConfiguration(): CacheConfiguration|null - { - if (! isset($this->attributes['secondLevelCacheConfiguration']) && $this->isSecondLevelCacheEnabled()) { - $this->attributes['secondLevelCacheConfiguration'] = new CacheConfiguration(); - } - - return $this->attributes['secondLevelCacheConfiguration'] ?? null; - } - - /** - * Returns query hints, which will be applied to every query in application - * - * @psalm-return array - */ - public function getDefaultQueryHints(): array - { - return $this->attributes['defaultQueryHints'] ?? []; - } - - /** - * Sets array of query hints, which will be applied to every query in application - * - * @psalm-param array $defaultQueryHints - */ - public function setDefaultQueryHints(array $defaultQueryHints): void - { - $this->attributes['defaultQueryHints'] = $defaultQueryHints; - } - - /** - * Gets the value of a default query hint. If the hint name is not recognized, FALSE is returned. - * - * @return mixed The value of the hint or FALSE, if the hint name is not recognized. - */ - public function getDefaultQueryHint(string $name): mixed - { - return $this->attributes['defaultQueryHints'][$name] ?? false; - } - - /** - * Sets a default query hint. If the hint name is not recognized, it is silently ignored. - */ - public function setDefaultQueryHint(string $name, mixed $value): void - { - $this->attributes['defaultQueryHints'][$name] = $value; - } - - /** - * Gets a list of entity class names to be ignored by the SchemaTool - * - * @return list - */ - public function getSchemaIgnoreClasses(): array - { - return $this->attributes['schemaIgnoreClasses'] ?? []; - } - - /** - * Sets a list of entity class names to be ignored by the SchemaTool - * - * @param list $schemaIgnoreClasses List of entity class names - */ - public function setSchemaIgnoreClasses(array $schemaIgnoreClasses): void - { - $this->attributes['schemaIgnoreClasses'] = $schemaIgnoreClasses; - } - - /** - * To be deprecated in 3.1.0 - * - * @return true - */ - public function isLazyGhostObjectEnabled(): bool - { - return true; - } - - /** To be deprecated in 3.1.0 */ - public function setLazyGhostObjectEnabled(bool $flag): void - { - if (! $flag) { - throw new LogicException(<<<'EXCEPTION' - The lazy ghost object feature cannot be disabled anymore. - Please remove the call to setLazyGhostObjectEnabled(false). - EXCEPTION); - } - } - - /** To be deprecated in 3.1.0 */ - public function setRejectIdCollisionInIdentityMap(bool $flag): void - { - if (! $flag) { - throw new LogicException(<<<'EXCEPTION' - Rejecting ID collisions in the identity map cannot be disabled anymore. - Please remove the call to setRejectIdCollisionInIdentityMap(false). - EXCEPTION); - } - } - - /** - * To be deprecated in 3.1.0 - * - * @return true - */ - public function isRejectIdCollisionInIdentityMapEnabled(): bool - { - return true; - } - - public function setEagerFetchBatchSize(int $batchSize = 100): void - { - $this->attributes['fetchModeSubselectBatchSize'] = $batchSize; - } - - public function getEagerFetchBatchSize(): int - { - return $this->attributes['fetchModeSubselectBatchSize'] ?? 100; - } -} diff --git a/vendor/doctrine/orm/src/Decorator/EntityManagerDecorator.php b/vendor/doctrine/orm/src/Decorator/EntityManagerDecorator.php deleted file mode 100644 index 6f1b041..0000000 --- a/vendor/doctrine/orm/src/Decorator/EntityManagerDecorator.php +++ /dev/null @@ -1,174 +0,0 @@ - - */ -abstract class EntityManagerDecorator extends ObjectManagerDecorator implements EntityManagerInterface -{ - public function __construct(EntityManagerInterface $wrapped) - { - $this->wrapped = $wrapped; - } - - public function getRepository(string $className): EntityRepository - { - return $this->wrapped->getRepository($className); - } - - public function getMetadataFactory(): ClassMetadataFactory - { - return $this->wrapped->getMetadataFactory(); - } - - public function getClassMetadata(string $className): ClassMetadata - { - return $this->wrapped->getClassMetadata($className); - } - - public function getConnection(): Connection - { - return $this->wrapped->getConnection(); - } - - public function getExpressionBuilder(): Expr - { - return $this->wrapped->getExpressionBuilder(); - } - - public function beginTransaction(): void - { - $this->wrapped->beginTransaction(); - } - - public function wrapInTransaction(callable $func): mixed - { - return $this->wrapped->wrapInTransaction($func); - } - - public function commit(): void - { - $this->wrapped->commit(); - } - - public function rollback(): void - { - $this->wrapped->rollback(); - } - - public function createQuery(string $dql = ''): Query - { - return $this->wrapped->createQuery($dql); - } - - public function createNativeQuery(string $sql, ResultSetMapping $rsm): NativeQuery - { - return $this->wrapped->createNativeQuery($sql, $rsm); - } - - public function createQueryBuilder(): QueryBuilder - { - return $this->wrapped->createQueryBuilder(); - } - - public function getReference(string $entityName, mixed $id): object|null - { - return $this->wrapped->getReference($entityName, $id); - } - - public function close(): void - { - $this->wrapped->close(); - } - - public function lock(object $entity, LockMode|int $lockMode, DateTimeInterface|int|null $lockVersion = null): void - { - $this->wrapped->lock($entity, $lockMode, $lockVersion); - } - - public function find(string $className, mixed $id, LockMode|int|null $lockMode = null, int|null $lockVersion = null): object|null - { - return $this->wrapped->find($className, $id, $lockMode, $lockVersion); - } - - public function refresh(object $object, LockMode|int|null $lockMode = null): void - { - $this->wrapped->refresh($object, $lockMode); - } - - public function getEventManager(): EventManager - { - return $this->wrapped->getEventManager(); - } - - public function getConfiguration(): Configuration - { - return $this->wrapped->getConfiguration(); - } - - public function isOpen(): bool - { - return $this->wrapped->isOpen(); - } - - public function getUnitOfWork(): UnitOfWork - { - return $this->wrapped->getUnitOfWork(); - } - - public function newHydrator(string|int $hydrationMode): AbstractHydrator - { - return $this->wrapped->newHydrator($hydrationMode); - } - - public function getProxyFactory(): ProxyFactory - { - return $this->wrapped->getProxyFactory(); - } - - public function getFilters(): FilterCollection - { - return $this->wrapped->getFilters(); - } - - public function isFiltersStateClean(): bool - { - return $this->wrapped->isFiltersStateClean(); - } - - public function hasFilters(): bool - { - return $this->wrapped->hasFilters(); - } - - public function getCache(): Cache|null - { - return $this->wrapped->getCache(); - } -} diff --git a/vendor/doctrine/orm/src/EntityManager.php b/vendor/doctrine/orm/src/EntityManager.php deleted file mode 100644 index 8045ac2..0000000 --- a/vendor/doctrine/orm/src/EntityManager.php +++ /dev/null @@ -1,626 +0,0 @@ - 'pdo_sqlite', 'memory' => true], $config); - * $entityManager = new EntityManager($connection, $config); - * - * For more information see - * {@link http://docs.doctrine-project.org/projects/doctrine-orm/en/stable/reference/configuration.html} - * - * You should never attempt to inherit from the EntityManager: Inheritance - * is not a valid extension point for the EntityManager. Instead you - * should take a look at the {@see \Doctrine\ORM\Decorator\EntityManagerDecorator} - * and wrap your entity manager in a decorator. - * - * @final - */ -class EntityManager implements EntityManagerInterface -{ - /** - * The metadata factory, used to retrieve the ORM metadata of entity classes. - */ - private ClassMetadataFactory $metadataFactory; - - /** - * The UnitOfWork used to coordinate object-level transactions. - */ - private UnitOfWork $unitOfWork; - - /** - * The event manager that is the central point of the event system. - */ - private EventManager $eventManager; - - /** - * The proxy factory used to create dynamic proxies. - */ - private ProxyFactory $proxyFactory; - - /** - * The repository factory used to create dynamic repositories. - */ - private RepositoryFactory $repositoryFactory; - - /** - * The expression builder instance used to generate query expressions. - */ - private Expr|null $expressionBuilder = null; - - /** - * Whether the EntityManager is closed or not. - */ - private bool $closed = false; - - /** - * Collection of query filters. - */ - private FilterCollection|null $filterCollection = null; - - /** - * The second level cache regions API. - */ - private Cache|null $cache = null; - - /** - * Creates a new EntityManager that operates on the given database connection - * and uses the given Configuration and EventManager implementations. - * - * @param Connection $conn The database connection used by the EntityManager. - */ - public function __construct( - private Connection $conn, - private Configuration $config, - EventManager|null $eventManager = null, - ) { - if (! $config->getMetadataDriverImpl()) { - throw MissingMappingDriverImplementation::create(); - } - - $this->eventManager = $eventManager - ?? (method_exists($conn, 'getEventManager') - ? $conn->getEventManager() - : new EventManager() - ); - - $metadataFactoryClassName = $config->getClassMetadataFactoryName(); - - $this->metadataFactory = new $metadataFactoryClassName(); - $this->metadataFactory->setEntityManager($this); - - $this->configureMetadataCache(); - - $this->repositoryFactory = $config->getRepositoryFactory(); - $this->unitOfWork = new UnitOfWork($this); - $this->proxyFactory = new ProxyFactory( - $this, - $config->getProxyDir(), - $config->getProxyNamespace(), - $config->getAutoGenerateProxyClasses(), - ); - - if ($config->isSecondLevelCacheEnabled()) { - $cacheConfig = $config->getSecondLevelCacheConfiguration(); - $cacheFactory = $cacheConfig->getCacheFactory(); - $this->cache = $cacheFactory->createCache($this); - } - } - - public function getConnection(): Connection - { - return $this->conn; - } - - public function getMetadataFactory(): ClassMetadataFactory - { - return $this->metadataFactory; - } - - public function getExpressionBuilder(): Expr - { - return $this->expressionBuilder ??= new Expr(); - } - - public function beginTransaction(): void - { - $this->conn->beginTransaction(); - } - - public function getCache(): Cache|null - { - return $this->cache; - } - - public function wrapInTransaction(callable $func): mixed - { - $this->conn->beginTransaction(); - - try { - $return = $func($this); - - $this->flush(); - $this->conn->commit(); - - return $return; - } catch (Throwable $e) { - $this->close(); - $this->conn->rollBack(); - - throw $e; - } - } - - public function commit(): void - { - $this->conn->commit(); - } - - public function rollback(): void - { - $this->conn->rollBack(); - } - - /** - * Returns the ORM metadata descriptor for a class. - * - * Internal note: Performance-sensitive method. - * - * {@inheritDoc} - */ - public function getClassMetadata(string $className): Mapping\ClassMetadata - { - return $this->metadataFactory->getMetadataFor($className); - } - - public function createQuery(string $dql = ''): Query - { - $query = new Query($this); - - if (! empty($dql)) { - $query->setDQL($dql); - } - - return $query; - } - - public function createNativeQuery(string $sql, ResultSetMapping $rsm): NativeQuery - { - $query = new NativeQuery($this); - - $query->setSQL($sql); - $query->setResultSetMapping($rsm); - - return $query; - } - - public function createQueryBuilder(): QueryBuilder - { - return new QueryBuilder($this); - } - - /** - * Flushes all changes to objects that have been queued up to now to the database. - * This effectively synchronizes the in-memory state of managed objects with the - * database. - * - * If an entity is explicitly passed to this method only this entity and - * the cascade-persist semantics + scheduled inserts/removals are synchronized. - * - * @throws OptimisticLockException If a version check on an entity that - * makes use of optimistic locking fails. - * @throws ORMException - */ - public function flush(): void - { - $this->errorIfClosed(); - $this->unitOfWork->commit(); - } - - /** - * {@inheritDoc} - */ - public function find($className, mixed $id, LockMode|int|null $lockMode = null, int|null $lockVersion = null): object|null - { - $class = $this->metadataFactory->getMetadataFor(ltrim($className, '\\')); - - if ($lockMode !== null) { - $this->checkLockRequirements($lockMode, $class); - } - - if (! is_array($id)) { - if ($class->isIdentifierComposite) { - throw ORMInvalidArgumentException::invalidCompositeIdentifier(); - } - - $id = [$class->identifier[0] => $id]; - } - - foreach ($id as $i => $value) { - if (is_object($value)) { - $className = DefaultProxyClassNameResolver::getClass($value); - if ($this->metadataFactory->hasMetadataFor($className)) { - $id[$i] = $this->unitOfWork->getSingleIdentifierValue($value); - - if ($id[$i] === null) { - throw ORMInvalidArgumentException::invalidIdentifierBindingEntity($className); - } - } - } - } - - $sortedId = []; - - foreach ($class->identifier as $identifier) { - if (! isset($id[$identifier])) { - throw MissingIdentifierField::fromFieldAndClass($identifier, $class->name); - } - - if ($id[$identifier] instanceof BackedEnum) { - $sortedId[$identifier] = $id[$identifier]->value; - } else { - $sortedId[$identifier] = $id[$identifier]; - } - - unset($id[$identifier]); - } - - if ($id) { - throw UnrecognizedIdentifierFields::fromClassAndFieldNames($class->name, array_keys($id)); - } - - $unitOfWork = $this->getUnitOfWork(); - - $entity = $unitOfWork->tryGetById($sortedId, $class->rootEntityName); - - // Check identity map first - if ($entity !== false) { - if (! ($entity instanceof $class->name)) { - return null; - } - - switch (true) { - case $lockMode === LockMode::OPTIMISTIC: - $this->lock($entity, $lockMode, $lockVersion); - break; - - case $lockMode === LockMode::NONE: - case $lockMode === LockMode::PESSIMISTIC_READ: - case $lockMode === LockMode::PESSIMISTIC_WRITE: - $persister = $unitOfWork->getEntityPersister($class->name); - $persister->refresh($sortedId, $entity, $lockMode); - break; - } - - return $entity; // Hit! - } - - $persister = $unitOfWork->getEntityPersister($class->name); - - switch (true) { - case $lockMode === LockMode::OPTIMISTIC: - $entity = $persister->load($sortedId); - - if ($entity !== null) { - $unitOfWork->lock($entity, $lockMode, $lockVersion); - } - - return $entity; - - case $lockMode === LockMode::PESSIMISTIC_READ: - case $lockMode === LockMode::PESSIMISTIC_WRITE: - return $persister->load($sortedId, null, null, [], $lockMode); - - default: - return $persister->loadById($sortedId); - } - } - - public function getReference(string $entityName, mixed $id): object|null - { - $class = $this->metadataFactory->getMetadataFor(ltrim($entityName, '\\')); - - if (! is_array($id)) { - $id = [$class->identifier[0] => $id]; - } - - $sortedId = []; - - foreach ($class->identifier as $identifier) { - if (! isset($id[$identifier])) { - throw MissingIdentifierField::fromFieldAndClass($identifier, $class->name); - } - - $sortedId[$identifier] = $id[$identifier]; - unset($id[$identifier]); - } - - if ($id) { - throw UnrecognizedIdentifierFields::fromClassAndFieldNames($class->name, array_keys($id)); - } - - $entity = $this->unitOfWork->tryGetById($sortedId, $class->rootEntityName); - - // Check identity map first, if its already in there just return it. - if ($entity !== false) { - return $entity instanceof $class->name ? $entity : null; - } - - if ($class->subClasses) { - return $this->find($entityName, $sortedId); - } - - $entity = $this->proxyFactory->getProxy($class->name, $sortedId); - - $this->unitOfWork->registerManaged($entity, $sortedId, []); - - return $entity; - } - - /** - * Clears the EntityManager. All entities that are currently managed - * by this EntityManager become detached. - */ - public function clear(): void - { - $this->unitOfWork->clear(); - } - - public function close(): void - { - $this->clear(); - - $this->closed = true; - } - - /** - * Tells the EntityManager to make an instance managed and persistent. - * - * The entity will be entered into the database at or before transaction - * commit or as a result of the flush operation. - * - * NOTE: The persist operation always considers entities that are not yet known to - * this EntityManager as NEW. Do not pass detached entities to the persist operation. - * - * @throws ORMInvalidArgumentException - * @throws ORMException - */ - public function persist(object $object): void - { - $this->errorIfClosed(); - - $this->unitOfWork->persist($object); - } - - /** - * Removes an entity instance. - * - * A removed entity will be removed from the database at or before transaction commit - * or as a result of the flush operation. - * - * @throws ORMInvalidArgumentException - * @throws ORMException - */ - public function remove(object $object): void - { - $this->errorIfClosed(); - - $this->unitOfWork->remove($object); - } - - public function refresh(object $object, LockMode|int|null $lockMode = null): void - { - $this->errorIfClosed(); - - $this->unitOfWork->refresh($object, $lockMode); - } - - /** - * Detaches an entity from the EntityManager, causing a managed entity to - * become detached. Unflushed changes made to the entity if any - * (including removal of the entity), will not be synchronized to the database. - * Entities which previously referenced the detached entity will continue to - * reference it. - * - * @throws ORMInvalidArgumentException - */ - public function detach(object $object): void - { - $this->unitOfWork->detach($object); - } - - public function lock(object $entity, LockMode|int $lockMode, DateTimeInterface|int|null $lockVersion = null): void - { - $this->unitOfWork->lock($entity, $lockMode, $lockVersion); - } - - /** - * Gets the repository for an entity class. - * - * @psalm-param class-string $className - * - * @psalm-return EntityRepository - * - * @template T of object - */ - public function getRepository(string $className): EntityRepository - { - return $this->repositoryFactory->getRepository($this, $className); - } - - /** - * Determines whether an entity instance is managed in this EntityManager. - * - * @return bool TRUE if this EntityManager currently manages the given entity, FALSE otherwise. - */ - public function contains(object $object): bool - { - return $this->unitOfWork->isScheduledForInsert($object) - || $this->unitOfWork->isInIdentityMap($object) - && ! $this->unitOfWork->isScheduledForDelete($object); - } - - public function getEventManager(): EventManager - { - return $this->eventManager; - } - - public function getConfiguration(): Configuration - { - return $this->config; - } - - /** - * Throws an exception if the EntityManager is closed or currently not active. - * - * @throws EntityManagerClosed If the EntityManager is closed. - */ - private function errorIfClosed(): void - { - if ($this->closed) { - throw EntityManagerClosed::create(); - } - } - - public function isOpen(): bool - { - return ! $this->closed; - } - - public function getUnitOfWork(): UnitOfWork - { - return $this->unitOfWork; - } - - public function newHydrator(string|int $hydrationMode): AbstractHydrator - { - return match ($hydrationMode) { - Query::HYDRATE_OBJECT => new Internal\Hydration\ObjectHydrator($this), - Query::HYDRATE_ARRAY => new Internal\Hydration\ArrayHydrator($this), - Query::HYDRATE_SCALAR => new Internal\Hydration\ScalarHydrator($this), - Query::HYDRATE_SINGLE_SCALAR => new Internal\Hydration\SingleScalarHydrator($this), - Query::HYDRATE_SIMPLEOBJECT => new Internal\Hydration\SimpleObjectHydrator($this), - Query::HYDRATE_SCALAR_COLUMN => new Internal\Hydration\ScalarColumnHydrator($this), - default => $this->createCustomHydrator((string) $hydrationMode), - }; - } - - public function getProxyFactory(): ProxyFactory - { - return $this->proxyFactory; - } - - public function initializeObject(object $obj): void - { - $this->unitOfWork->initializeObject($obj); - } - - /** - * {@inheritDoc} - */ - public function isUninitializedObject($obj): bool - { - return $this->unitOfWork->isUninitializedObject($obj); - } - - public function getFilters(): FilterCollection - { - return $this->filterCollection ??= new FilterCollection($this); - } - - public function isFiltersStateClean(): bool - { - return $this->filterCollection === null || $this->filterCollection->isClean(); - } - - public function hasFilters(): bool - { - return $this->filterCollection !== null; - } - - /** - * @psalm-param LockMode::* $lockMode - * - * @throws OptimisticLockException - * @throws TransactionRequiredException - */ - private function checkLockRequirements(LockMode|int $lockMode, ClassMetadata $class): void - { - switch ($lockMode) { - case LockMode::OPTIMISTIC: - if (! $class->isVersioned) { - throw OptimisticLockException::notVersioned($class->name); - } - - break; - case LockMode::PESSIMISTIC_READ: - case LockMode::PESSIMISTIC_WRITE: - if (! $this->getConnection()->isTransactionActive()) { - throw TransactionRequiredException::transactionRequired(); - } - } - } - - private function configureMetadataCache(): void - { - $metadataCache = $this->config->getMetadataCache(); - if (! $metadataCache) { - return; - } - - $this->metadataFactory->setCache($metadataCache); - } - - private function createCustomHydrator(string $hydrationMode): AbstractHydrator - { - $class = $this->config->getCustomHydrationMode($hydrationMode); - - if ($class !== null) { - return new $class($this); - } - - throw InvalidHydrationMode::fromMode($hydrationMode); - } -} diff --git a/vendor/doctrine/orm/src/EntityManagerInterface.php b/vendor/doctrine/orm/src/EntityManagerInterface.php deleted file mode 100644 index cf3102b..0000000 --- a/vendor/doctrine/orm/src/EntityManagerInterface.php +++ /dev/null @@ -1,242 +0,0 @@ - $className - * - * @psalm-return EntityRepository - * - * @template T of object - */ - public function getRepository(string $className): EntityRepository; - - /** - * Returns the cache API for managing the second level cache regions or NULL if the cache is not enabled. - */ - public function getCache(): Cache|null; - - /** - * Gets the database connection object used by the EntityManager. - */ - public function getConnection(): Connection; - - public function getMetadataFactory(): ClassMetadataFactory; - - /** - * Gets an ExpressionBuilder used for object-oriented construction of query expressions. - * - * Example: - * - * - * $qb = $em->createQueryBuilder(); - * $expr = $em->getExpressionBuilder(); - * $qb->select('u')->from('User', 'u') - * ->where($expr->orX($expr->eq('u.id', 1), $expr->eq('u.id', 2))); - * - */ - public function getExpressionBuilder(): Expr; - - /** - * Starts a transaction on the underlying database connection. - */ - public function beginTransaction(): void; - - /** - * Executes a function in a transaction. - * - * The function gets passed this EntityManager instance as an (optional) parameter. - * - * {@link flush} is invoked prior to transaction commit. - * - * If an exception occurs during execution of the function or flushing or transaction commit, - * the transaction is rolled back, the EntityManager closed and the exception re-thrown. - * - * @psalm-param callable(self): T $func The function to execute transactionally. - * - * @return mixed The value returned from the closure. - * @psalm-return T - * - * @template T - */ - public function wrapInTransaction(callable $func): mixed; - - /** - * Commits a transaction on the underlying database connection. - */ - public function commit(): void; - - /** - * Performs a rollback on the underlying database connection. - */ - public function rollback(): void; - - /** - * Creates a new Query object. - * - * @param string $dql The DQL string. - */ - public function createQuery(string $dql = ''): Query; - - /** - * Creates a native SQL query. - */ - public function createNativeQuery(string $sql, ResultSetMapping $rsm): NativeQuery; - - /** - * Create a QueryBuilder instance - */ - public function createQueryBuilder(): QueryBuilder; - - /** - * Finds an Entity by its identifier. - * - * @param string $className The class name of the entity to find. - * @param mixed $id The identity of the entity to find. - * @param LockMode|int|null $lockMode One of the \Doctrine\DBAL\LockMode::* constants - * or NULL if no specific lock mode should be used - * during the search. - * @param int|null $lockVersion The version of the entity to find when using - * optimistic locking. - * @psalm-param class-string $className - * @psalm-param LockMode::*|null $lockMode - * - * @return object|null The entity instance or NULL if the entity can not be found. - * @psalm-return T|null - * - * @throws OptimisticLockException - * @throws ORMInvalidArgumentException - * @throws TransactionRequiredException - * @throws ORMException - * - * @template T of object - */ - public function find(string $className, mixed $id, LockMode|int|null $lockMode = null, int|null $lockVersion = null): object|null; - - /** - * Refreshes the persistent state of an object from the database, - * overriding any local changes that have not yet been persisted. - * - * @param LockMode|int|null $lockMode One of the \Doctrine\DBAL\LockMode::* constants - * or NULL if no specific lock mode should be used - * during the search. - * @psalm-param LockMode::*|null $lockMode - * - * @throws ORMInvalidArgumentException - * @throws ORMException - * @throws TransactionRequiredException - */ - public function refresh(object $object, LockMode|int|null $lockMode = null): void; - - /** - * Gets a reference to the entity identified by the given type and identifier - * without actually loading it, if the entity is not yet loaded. - * - * @param string $entityName The name of the entity type. - * @param mixed $id The entity identifier. - * @psalm-param class-string $entityName - * - * @psalm-return T|null - * - * @throws ORMException - * - * @template T of object - */ - public function getReference(string $entityName, mixed $id): object|null; - - /** - * Closes the EntityManager. All entities that are currently managed - * by this EntityManager become detached. The EntityManager may no longer - * be used after it is closed. - */ - public function close(): void; - - /** - * Acquire a lock on the given entity. - * - * @psalm-param LockMode::* $lockMode - * - * @throws OptimisticLockException - * @throws PessimisticLockException - */ - public function lock(object $entity, LockMode|int $lockMode, DateTimeInterface|int|null $lockVersion = null): void; - - /** - * Gets the EventManager used by the EntityManager. - */ - public function getEventManager(): EventManager; - - /** - * Gets the Configuration used by the EntityManager. - */ - public function getConfiguration(): Configuration; - - /** - * Check if the Entity manager is open or closed. - */ - public function isOpen(): bool; - - /** - * Gets the UnitOfWork used by the EntityManager to coordinate operations. - */ - public function getUnitOfWork(): UnitOfWork; - - /** - * Create a new instance for the given hydration mode. - * - * @psalm-param string|AbstractQuery::HYDRATE_* $hydrationMode - * - * @throws ORMException - */ - public function newHydrator(string|int $hydrationMode): AbstractHydrator; - - /** - * Gets the proxy factory used by the EntityManager to create entity proxies. - */ - public function getProxyFactory(): ProxyFactory; - - /** - * Gets the enabled filters. - */ - public function getFilters(): FilterCollection; - - /** - * Checks whether the state of the filter collection is clean. - */ - public function isFiltersStateClean(): bool; - - /** - * Checks whether the Entity Manager has filters. - */ - public function hasFilters(): bool; - - /** - * {@inheritDoc} - * - * @psalm-param string|class-string $className - * - * @psalm-return ($className is class-string ? Mapping\ClassMetadata : Mapping\ClassMetadata) - * - * @psalm-template T of object - */ - public function getClassMetadata(string $className): Mapping\ClassMetadata; -} diff --git a/vendor/doctrine/orm/src/EntityNotFoundException.php b/vendor/doctrine/orm/src/EntityNotFoundException.php deleted file mode 100644 index 142dc8a..0000000 --- a/vendor/doctrine/orm/src/EntityNotFoundException.php +++ /dev/null @@ -1,46 +0,0 @@ - $value) { - $ids[] = $key . '(' . $value . ')'; - } - - return new self( - 'Entity of type \'' . $className . '\'' . ($ids ? ' for IDs ' . implode(', ', $ids) : '') . ' was not found', - ); - } - - /** - * Instance for which no identifier can be found - */ - public static function noIdentifierFound(string $className): self - { - return new self(sprintf( - 'Unable to find "%s" entity identifier associated with the UnitOfWork', - $className, - )); - } -} diff --git a/vendor/doctrine/orm/src/EntityRepository.php b/vendor/doctrine/orm/src/EntityRepository.php deleted file mode 100644 index a53c528..0000000 --- a/vendor/doctrine/orm/src/EntityRepository.php +++ /dev/null @@ -1,236 +0,0 @@ - - * @template-implements ObjectRepository - */ -class EntityRepository implements ObjectRepository, Selectable -{ - /** @psalm-var class-string */ - private readonly string $entityName; - private static Inflector|null $inflector = null; - - /** @psalm-param ClassMetadata $class */ - public function __construct( - private readonly EntityManagerInterface $em, - private readonly ClassMetadata $class, - ) { - $this->entityName = $class->name; - } - - /** - * Creates a new QueryBuilder instance that is prepopulated for this entity name. - */ - public function createQueryBuilder(string $alias, string|null $indexBy = null): QueryBuilder - { - return $this->em->createQueryBuilder() - ->select($alias) - ->from($this->entityName, $alias, $indexBy); - } - - /** - * Creates a new result set mapping builder for this entity. - * - * The column naming strategy is "INCREMENT". - */ - public function createResultSetMappingBuilder(string $alias): ResultSetMappingBuilder - { - $rsm = new ResultSetMappingBuilder($this->em, ResultSetMappingBuilder::COLUMN_RENAMING_INCREMENT); - $rsm->addRootEntityFromClassMetadata($this->entityName, $alias); - - return $rsm; - } - - /** - * Finds an entity by its primary key / identifier. - * - * @param LockMode|int|null $lockMode One of the \Doctrine\DBAL\LockMode::* constants - * or NULL if no specific lock mode should be used - * during the search. - * @psalm-param LockMode::*|null $lockMode - * - * @return object|null The entity instance or NULL if the entity can not be found. - * @psalm-return ?T - */ - public function find(mixed $id, LockMode|int|null $lockMode = null, int|null $lockVersion = null): object|null - { - return $this->em->find($this->entityName, $id, $lockMode, $lockVersion); - } - - /** - * Finds all entities in the repository. - * - * @psalm-return list The entities. - */ - public function findAll(): array - { - return $this->findBy([]); - } - - /** - * Finds entities by a set of criteria. - * - * {@inheritDoc} - * - * @psalm-return list - */ - public function findBy(array $criteria, array|null $orderBy = null, int|null $limit = null, int|null $offset = null): array - { - $persister = $this->em->getUnitOfWork()->getEntityPersister($this->entityName); - - return $persister->loadAll($criteria, $orderBy, $limit, $offset); - } - - /** - * Finds a single entity by a set of criteria. - * - * @psalm-param array $criteria - * @psalm-param array|null $orderBy - * - * @psalm-return T|null - */ - public function findOneBy(array $criteria, array|null $orderBy = null): object|null - { - $persister = $this->em->getUnitOfWork()->getEntityPersister($this->entityName); - - return $persister->load($criteria, null, null, [], null, 1, $orderBy); - } - - /** - * Counts entities by a set of criteria. - * - * @psalm-param array $criteria - * - * @return int The cardinality of the objects that match the given criteria. - * - * @todo Add this method to `ObjectRepository` interface in the next major release - */ - public function count(array $criteria = []): int - { - return $this->em->getUnitOfWork()->getEntityPersister($this->entityName)->count($criteria); - } - - /** - * Adds support for magic method calls. - * - * @param mixed[] $arguments - * @psalm-param list $arguments - * - * @throws BadMethodCallException If the method called is invalid. - */ - public function __call(string $method, array $arguments): mixed - { - if (str_starts_with($method, 'findBy')) { - return $this->resolveMagicCall('findBy', substr($method, 6), $arguments); - } - - if (str_starts_with($method, 'findOneBy')) { - return $this->resolveMagicCall('findOneBy', substr($method, 9), $arguments); - } - - if (str_starts_with($method, 'countBy')) { - return $this->resolveMagicCall('count', substr($method, 7), $arguments); - } - - throw new BadMethodCallException(sprintf( - 'Undefined method "%s". The method name must start with ' . - 'either findBy, findOneBy or countBy!', - $method, - )); - } - - /** @psalm-return class-string */ - protected function getEntityName(): string - { - return $this->entityName; - } - - public function getClassName(): string - { - return $this->getEntityName(); - } - - protected function getEntityManager(): EntityManagerInterface - { - return $this->em; - } - - /** @psalm-return ClassMetadata */ - protected function getClassMetadata(): ClassMetadata - { - return $this->class; - } - - /** - * Select all elements from a selectable that match the expression and - * return a new collection containing these elements. - * - * @psalm-return AbstractLazyCollection&Selectable - */ - public function matching(Criteria $criteria): AbstractLazyCollection&Selectable - { - $persister = $this->em->getUnitOfWork()->getEntityPersister($this->entityName); - - return new LazyCriteriaCollection($persister, $criteria); - } - - /** - * Resolves a magic method call to the proper existent method at `EntityRepository`. - * - * @param string $method The method to call - * @param string $by The property name used as condition - * @psalm-param list $arguments The arguments to pass at method call - * - * @throws InvalidMagicMethodCall If the method called is invalid or the - * requested field/association does not exist. - */ - private function resolveMagicCall(string $method, string $by, array $arguments): mixed - { - if (! $arguments) { - throw InvalidMagicMethodCall::onMissingParameter($method . $by); - } - - self::$inflector ??= InflectorFactory::create()->build(); - - $fieldName = lcfirst(self::$inflector->classify($by)); - - if (! ($this->class->hasField($fieldName) || $this->class->hasAssociation($fieldName))) { - throw InvalidMagicMethodCall::becauseFieldNotFoundIn( - $this->entityName, - $fieldName, - $method . $by, - ); - } - - return $this->$method([$fieldName => $arguments[0]], ...array_slice($arguments, 1)); - } -} diff --git a/vendor/doctrine/orm/src/Event/ListenersInvoker.php b/vendor/doctrine/orm/src/Event/ListenersInvoker.php deleted file mode 100644 index c0c327e..0000000 --- a/vendor/doctrine/orm/src/Event/ListenersInvoker.php +++ /dev/null @@ -1,98 +0,0 @@ -eventManager = $em->getEventManager(); - $this->resolver = $em->getConfiguration()->getEntityListenerResolver(); - } - - /** - * Get the subscribed event systems - * - * @param ClassMetadata $metadata The entity metadata. - * @param string $eventName The entity lifecycle event. - * - * @psalm-return int-mask-of Bitmask of subscribed event systems. - */ - public function getSubscribedSystems(ClassMetadata $metadata, string $eventName): int - { - $invoke = self::INVOKE_NONE; - - if (isset($metadata->lifecycleCallbacks[$eventName])) { - $invoke |= self::INVOKE_CALLBACKS; - } - - if (isset($metadata->entityListeners[$eventName])) { - $invoke |= self::INVOKE_LISTENERS; - } - - if ($this->eventManager->hasListeners($eventName)) { - $invoke |= self::INVOKE_MANAGER; - } - - return $invoke; - } - - /** - * Dispatches the lifecycle event of the given entity. - * - * @param ClassMetadata $metadata The entity metadata. - * @param string $eventName The entity lifecycle event. - * @param object $entity The Entity on which the event occurred. - * @param EventArgs $event The Event args. - * @psalm-param int-mask-of $invoke Bitmask to invoke listeners. - */ - public function invoke( - ClassMetadata $metadata, - string $eventName, - object $entity, - EventArgs $event, - int $invoke, - ): void { - if ($invoke & self::INVOKE_CALLBACKS) { - foreach ($metadata->lifecycleCallbacks[$eventName] as $callback) { - $entity->$callback($event); - } - } - - if ($invoke & self::INVOKE_LISTENERS) { - foreach ($metadata->entityListeners[$eventName] as $listener) { - $class = $listener['class']; - $method = $listener['method']; - $instance = $this->resolver->resolve($class); - - $instance->$method($entity, $event); - } - } - - if ($invoke & self::INVOKE_MANAGER) { - $this->eventManager->dispatchEvent($eventName, $event); - } - } -} diff --git a/vendor/doctrine/orm/src/Event/LoadClassMetadataEventArgs.php b/vendor/doctrine/orm/src/Event/LoadClassMetadataEventArgs.php deleted file mode 100644 index b450616..0000000 --- a/vendor/doctrine/orm/src/Event/LoadClassMetadataEventArgs.php +++ /dev/null @@ -1,25 +0,0 @@ -, EntityManagerInterface> - */ -class LoadClassMetadataEventArgs extends BaseLoadClassMetadataEventArgs -{ - /** - * Retrieve associated EntityManager. - */ - public function getEntityManager(): EntityManagerInterface - { - return $this->getObjectManager(); - } -} diff --git a/vendor/doctrine/orm/src/Event/OnClassMetadataNotFoundEventArgs.php b/vendor/doctrine/orm/src/Event/OnClassMetadataNotFoundEventArgs.php deleted file mode 100644 index 762c083..0000000 --- a/vendor/doctrine/orm/src/Event/OnClassMetadataNotFoundEventArgs.php +++ /dev/null @@ -1,49 +0,0 @@ - - */ -class OnClassMetadataNotFoundEventArgs extends ManagerEventArgs -{ - private ClassMetadata|null $foundMetadata = null; - - /** @param EntityManagerInterface $objectManager */ - public function __construct( - private readonly string $className, - ObjectManager $objectManager, - ) { - parent::__construct($objectManager); - } - - public function setFoundMetadata(ClassMetadata|null $classMetadata): void - { - $this->foundMetadata = $classMetadata; - } - - public function getFoundMetadata(): ClassMetadata|null - { - return $this->foundMetadata; - } - - /** - * Retrieve class name for which a failed metadata fetch attempt was executed - */ - public function getClassName(): string - { - return $this->className; - } -} diff --git a/vendor/doctrine/orm/src/Event/OnClearEventArgs.php b/vendor/doctrine/orm/src/Event/OnClearEventArgs.php deleted file mode 100644 index 29a42f2..0000000 --- a/vendor/doctrine/orm/src/Event/OnClearEventArgs.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ -class OnClearEventArgs extends BaseOnClearEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/OnFlushEventArgs.php b/vendor/doctrine/orm/src/Event/OnFlushEventArgs.php deleted file mode 100644 index b0594ca..0000000 --- a/vendor/doctrine/orm/src/Event/OnFlushEventArgs.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ -class OnFlushEventArgs extends ManagerEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PostFlushEventArgs.php b/vendor/doctrine/orm/src/Event/PostFlushEventArgs.php deleted file mode 100644 index ca41ba8..0000000 --- a/vendor/doctrine/orm/src/Event/PostFlushEventArgs.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ -class PostFlushEventArgs extends ManagerEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PostLoadEventArgs.php b/vendor/doctrine/orm/src/Event/PostLoadEventArgs.php deleted file mode 100644 index 8344e68..0000000 --- a/vendor/doctrine/orm/src/Event/PostLoadEventArgs.php +++ /dev/null @@ -1,13 +0,0 @@ - */ -final class PostLoadEventArgs extends LifecycleEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PostPersistEventArgs.php b/vendor/doctrine/orm/src/Event/PostPersistEventArgs.php deleted file mode 100644 index 926ac1c..0000000 --- a/vendor/doctrine/orm/src/Event/PostPersistEventArgs.php +++ /dev/null @@ -1,13 +0,0 @@ - */ -final class PostPersistEventArgs extends LifecycleEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PostRemoveEventArgs.php b/vendor/doctrine/orm/src/Event/PostRemoveEventArgs.php deleted file mode 100644 index 8bf857e..0000000 --- a/vendor/doctrine/orm/src/Event/PostRemoveEventArgs.php +++ /dev/null @@ -1,13 +0,0 @@ - */ -final class PostRemoveEventArgs extends LifecycleEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PostUpdateEventArgs.php b/vendor/doctrine/orm/src/Event/PostUpdateEventArgs.php deleted file mode 100644 index c9ff004..0000000 --- a/vendor/doctrine/orm/src/Event/PostUpdateEventArgs.php +++ /dev/null @@ -1,13 +0,0 @@ - */ -final class PostUpdateEventArgs extends LifecycleEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PreFlushEventArgs.php b/vendor/doctrine/orm/src/Event/PreFlushEventArgs.php deleted file mode 100644 index 671535c..0000000 --- a/vendor/doctrine/orm/src/Event/PreFlushEventArgs.php +++ /dev/null @@ -1,19 +0,0 @@ - - */ -class PreFlushEventArgs extends ManagerEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PrePersistEventArgs.php b/vendor/doctrine/orm/src/Event/PrePersistEventArgs.php deleted file mode 100644 index e70c3cf..0000000 --- a/vendor/doctrine/orm/src/Event/PrePersistEventArgs.php +++ /dev/null @@ -1,13 +0,0 @@ - */ -final class PrePersistEventArgs extends LifecycleEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PreRemoveEventArgs.php b/vendor/doctrine/orm/src/Event/PreRemoveEventArgs.php deleted file mode 100644 index 3af0d02..0000000 --- a/vendor/doctrine/orm/src/Event/PreRemoveEventArgs.php +++ /dev/null @@ -1,13 +0,0 @@ - */ -final class PreRemoveEventArgs extends LifecycleEventArgs -{ -} diff --git a/vendor/doctrine/orm/src/Event/PreUpdateEventArgs.php b/vendor/doctrine/orm/src/Event/PreUpdateEventArgs.php deleted file mode 100644 index 090487b..0000000 --- a/vendor/doctrine/orm/src/Event/PreUpdateEventArgs.php +++ /dev/null @@ -1,100 +0,0 @@ - - */ -class PreUpdateEventArgs extends LifecycleEventArgs -{ - /** @var array */ - private array $entityChangeSet; - - /** - * @param mixed[][] $changeSet - * @psalm-param array $changeSet - */ - public function __construct(object $entity, EntityManagerInterface $em, array &$changeSet) - { - parent::__construct($entity, $em); - - $this->entityChangeSet = &$changeSet; - } - - /** - * Retrieves entity changeset. - * - * @return mixed[][] - * @psalm-return array - */ - public function getEntityChangeSet(): array - { - return $this->entityChangeSet; - } - - /** - * Checks if field has a changeset. - */ - public function hasChangedField(string $field): bool - { - return isset($this->entityChangeSet[$field]); - } - - /** - * Gets the old value of the changeset of the changed field. - */ - public function getOldValue(string $field): mixed - { - $this->assertValidField($field); - - return $this->entityChangeSet[$field][0]; - } - - /** - * Gets the new value of the changeset of the changed field. - */ - public function getNewValue(string $field): mixed - { - $this->assertValidField($field); - - return $this->entityChangeSet[$field][1]; - } - - /** - * Sets the new value of this field. - */ - public function setNewValue(string $field, mixed $value): void - { - $this->assertValidField($field); - - $this->entityChangeSet[$field][1] = $value; - } - - /** - * Asserts the field exists in changeset. - * - * @throws InvalidArgumentException - */ - private function assertValidField(string $field): void - { - if (! isset($this->entityChangeSet[$field])) { - throw new InvalidArgumentException(sprintf( - 'Field "%s" is not a valid field of the entity "%s" in PreUpdateEventArgs.', - $field, - get_debug_type($this->getObject()), - )); - } - } -} diff --git a/vendor/doctrine/orm/src/Events.php b/vendor/doctrine/orm/src/Events.php deleted file mode 100644 index 517917c..0000000 --- a/vendor/doctrine/orm/src/Events.php +++ /dev/null @@ -1,125 +0,0 @@ -getClassMetadata($entity::class); - $idFields = $class->getIdentifierFieldNames(); - $identifier = []; - - foreach ($idFields as $idField) { - $value = $class->getFieldValue($entity, $idField); - - if (! isset($value)) { - throw EntityMissingAssignedId::forField($entity, $idField); - } - - if (isset($class->associationMappings[$idField])) { - // NOTE: Single Columns as associated identifiers only allowed - this constraint it is enforced. - $value = $em->getUnitOfWork()->getSingleIdentifierValue($value); - } - - $identifier[$idField] = $value; - } - - return $identifier; - } -} diff --git a/vendor/doctrine/orm/src/Id/BigIntegerIdentityGenerator.php b/vendor/doctrine/orm/src/Id/BigIntegerIdentityGenerator.php deleted file mode 100644 index 762a7cb..0000000 --- a/vendor/doctrine/orm/src/Id/BigIntegerIdentityGenerator.php +++ /dev/null @@ -1,25 +0,0 @@ -getConnection()->lastInsertId(); - } - - public function isPostInsertGenerator(): bool - { - return true; - } -} diff --git a/vendor/doctrine/orm/src/Id/IdentityGenerator.php b/vendor/doctrine/orm/src/Id/IdentityGenerator.php deleted file mode 100644 index 4610f66..0000000 --- a/vendor/doctrine/orm/src/Id/IdentityGenerator.php +++ /dev/null @@ -1,25 +0,0 @@ -getConnection()->lastInsertId(); - } - - public function isPostInsertGenerator(): bool - { - return true; - } -} diff --git a/vendor/doctrine/orm/src/Id/SequenceGenerator.php b/vendor/doctrine/orm/src/Id/SequenceGenerator.php deleted file mode 100644 index 659bb58..0000000 --- a/vendor/doctrine/orm/src/Id/SequenceGenerator.php +++ /dev/null @@ -1,112 +0,0 @@ -maxValue === null || $this->nextValue === $this->maxValue) { - // Allocate new values - $connection = $em->getConnection(); - $sql = $connection->getDatabasePlatform()->getSequenceNextValSQL($this->sequenceName); - - if ($connection instanceof PrimaryReadReplicaConnection) { - $connection->ensureConnectedToPrimary(); - } - - $this->nextValue = (int) $connection->fetchOne($sql); - $this->maxValue = $this->nextValue + $this->allocationSize; - } - - return $this->nextValue++; - } - - /** - * Gets the maximum value of the currently allocated bag of values. - */ - public function getCurrentMaxValue(): int|null - { - return $this->maxValue; - } - - /** - * Gets the next value that will be returned by generate(). - */ - public function getNextValue(): int - { - return $this->nextValue; - } - - /** @deprecated without replacement. */ - final public function serialize(): string - { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11468', - '%s() is deprecated, use __serialize() instead. %s won\'t implement the Serializable interface anymore in ORM 4.', - __METHOD__, - self::class, - ); - - return serialize($this->__serialize()); - } - - /** @return array */ - public function __serialize(): array - { - return [ - 'allocationSize' => $this->allocationSize, - 'sequenceName' => $this->sequenceName, - ]; - } - - /** @deprecated without replacement. */ - final public function unserialize(string $serialized): void - { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11468', - '%s() is deprecated, use __unserialize() instead. %s won\'t implement the Serializable interface anymore in ORM 4.', - __METHOD__, - self::class, - ); - - $this->__unserialize(unserialize($serialized)); - } - - /** @param array $data */ - public function __unserialize(array $data): void - { - $this->sequenceName = $data['sequenceName']; - $this->allocationSize = $data['allocationSize']; - } -} diff --git a/vendor/doctrine/orm/src/Internal/Hydration/AbstractHydrator.php b/vendor/doctrine/orm/src/Internal/Hydration/AbstractHydrator.php deleted file mode 100644 index d8bffe4..0000000 --- a/vendor/doctrine/orm/src/Internal/Hydration/AbstractHydrator.php +++ /dev/null @@ -1,556 +0,0 @@ -> - */ - protected array $metadataCache = []; - - /** - * The cache used during row-by-row hydration. - * - * @var array - */ - protected array $cache = []; - - /** - * The statement that provides the data to hydrate. - */ - protected Result|null $stmt = null; - - /** - * The query hints. - * - * @var array - */ - protected array $hints = []; - - /** - * Initializes a new instance of a class derived from AbstractHydrator. - */ - public function __construct(protected EntityManagerInterface $em) - { - $this->platform = $em->getConnection()->getDatabasePlatform(); - $this->uow = $em->getUnitOfWork(); - } - - /** - * Initiates a row-by-row hydration. - * - * @psalm-param array $hints - * - * @return Generator - * - * @final - */ - final public function toIterable(Result $stmt, ResultSetMapping $resultSetMapping, array $hints = []): Generator - { - $this->stmt = $stmt; - $this->rsm = $resultSetMapping; - $this->hints = $hints; - - $evm = $this->em->getEventManager(); - - $evm->addEventListener([Events::onClear], $this); - - $this->prepare(); - - try { - while (true) { - $row = $this->statement()->fetchAssociative(); - - if ($row === false) { - break; - } - - $result = []; - - $this->hydrateRowData($row, $result); - - $this->cleanupAfterRowIteration(); - if (count($result) === 1) { - if (count($resultSetMapping->indexByMap) === 0) { - yield end($result); - } else { - yield from $result; - } - } else { - yield $result; - } - } - } finally { - $this->cleanup(); - } - } - - final protected function statement(): Result - { - if ($this->stmt === null) { - throw new LogicException('Uninitialized _stmt property'); - } - - return $this->stmt; - } - - final protected function resultSetMapping(): ResultSetMapping - { - if ($this->rsm === null) { - throw new LogicException('Uninitialized _rsm property'); - } - - return $this->rsm; - } - - /** - * Hydrates all rows returned by the passed statement instance at once. - * - * @psalm-param array $hints - */ - public function hydrateAll(Result $stmt, ResultSetMapping $resultSetMapping, array $hints = []): mixed - { - $this->stmt = $stmt; - $this->rsm = $resultSetMapping; - $this->hints = $hints; - - $this->em->getEventManager()->addEventListener([Events::onClear], $this); - $this->prepare(); - - try { - $result = $this->hydrateAllData(); - } finally { - $this->cleanup(); - } - - return $result; - } - - /** - * When executed in a hydrate() loop we have to clear internal state to - * decrease memory consumption. - */ - public function onClear(mixed $eventArgs): void - { - } - - /** - * Executes one-time preparation tasks, once each time hydration is started - * through {@link hydrateAll} or {@link toIterable()}. - */ - protected function prepare(): void - { - } - - /** - * Executes one-time cleanup tasks at the end of a hydration that was initiated - * through {@link hydrateAll} or {@link toIterable()}. - */ - protected function cleanup(): void - { - $this->statement()->free(); - - $this->stmt = null; - $this->rsm = null; - $this->cache = []; - $this->metadataCache = []; - - $this - ->em - ->getEventManager() - ->removeEventListener([Events::onClear], $this); - } - - protected function cleanupAfterRowIteration(): void - { - } - - /** - * Hydrates a single row from the current statement instance. - * - * Template method. - * - * @param mixed[] $row The row data. - * @param mixed[] $result The result to fill. - * - * @throws HydrationException - */ - protected function hydrateRowData(array $row, array &$result): void - { - throw new HydrationException('hydrateRowData() not implemented by this hydrator.'); - } - - /** - * Hydrates all rows from the current statement instance at once. - */ - abstract protected function hydrateAllData(): mixed; - - /** - * Processes a row of the result set. - * - * Used for identity-based hydration (HYDRATE_OBJECT and HYDRATE_ARRAY). - * Puts the elements of a result row into a new array, grouped by the dql alias - * they belong to. The column names in the result set are mapped to their - * field names during this procedure as well as any necessary conversions on - * the values applied. Scalar values are kept in a specific key 'scalars'. - * - * @param mixed[] $data SQL Result Row. - * @psalm-param array $id Dql-Alias => ID-Hash. - * @psalm-param array $nonemptyComponents Does this DQL-Alias has at least one non NULL value? - * - * @return array> An array with all the fields - * (name => value) of the data - * row, grouped by their - * component alias. - * @psalm-return array{ - * data: array, - * newObjects?: array, - * scalars?: array - * } - */ - protected function gatherRowData(array $data, array &$id, array &$nonemptyComponents): array - { - $rowData = ['data' => []]; - - foreach ($data as $key => $value) { - $cacheKeyInfo = $this->hydrateColumnInfo($key); - if ($cacheKeyInfo === null) { - continue; - } - - $fieldName = $cacheKeyInfo['fieldName']; - - switch (true) { - case isset($cacheKeyInfo['isNewObjectParameter']): - $argIndex = $cacheKeyInfo['argIndex']; - $objIndex = $cacheKeyInfo['objIndex']; - $type = $cacheKeyInfo['type']; - $value = $type->convertToPHPValue($value, $this->platform); - - if ($value !== null && isset($cacheKeyInfo['enumType'])) { - $value = $this->buildEnum($value, $cacheKeyInfo['enumType']); - } - - $rowData['newObjects'][$objIndex]['class'] = $cacheKeyInfo['class']; - $rowData['newObjects'][$objIndex]['args'][$argIndex] = $value; - break; - - case isset($cacheKeyInfo['isScalar']): - $type = $cacheKeyInfo['type']; - $value = $type->convertToPHPValue($value, $this->platform); - - if ($value !== null && isset($cacheKeyInfo['enumType'])) { - $value = $this->buildEnum($value, $cacheKeyInfo['enumType']); - } - - $rowData['scalars'][$fieldName] = $value; - - break; - - //case (isset($cacheKeyInfo['isMetaColumn'])): - default: - $dqlAlias = $cacheKeyInfo['dqlAlias']; - $type = $cacheKeyInfo['type']; - - // If there are field name collisions in the child class, then we need - // to only hydrate if we are looking at the correct discriminator value - if ( - isset($cacheKeyInfo['discriminatorColumn'], $data[$cacheKeyInfo['discriminatorColumn']]) - && ! in_array((string) $data[$cacheKeyInfo['discriminatorColumn']], $cacheKeyInfo['discriminatorValues'], true) - ) { - break; - } - - // in an inheritance hierarchy the same field could be defined several times. - // We overwrite this value so long we don't have a non-null value, that value we keep. - // Per definition it cannot be that a field is defined several times and has several values. - if (isset($rowData['data'][$dqlAlias][$fieldName])) { - break; - } - - $rowData['data'][$dqlAlias][$fieldName] = $type - ? $type->convertToPHPValue($value, $this->platform) - : $value; - - if ($rowData['data'][$dqlAlias][$fieldName] !== null && isset($cacheKeyInfo['enumType'])) { - $rowData['data'][$dqlAlias][$fieldName] = $this->buildEnum($rowData['data'][$dqlAlias][$fieldName], $cacheKeyInfo['enumType']); - } - - if ($cacheKeyInfo['isIdentifier'] && $value !== null) { - $id[$dqlAlias] .= '|' . $value; - $nonemptyComponents[$dqlAlias] = true; - } - - break; - } - } - - return $rowData; - } - - /** - * Processes a row of the result set. - * - * Used for HYDRATE_SCALAR. This is a variant of _gatherRowData() that - * simply converts column names to field names and properly converts the - * values according to their types. The resulting row has the same number - * of elements as before. - * - * @param mixed[] $data - * @psalm-param array $data - * - * @return mixed[] The processed row. - * @psalm-return array - */ - protected function gatherScalarRowData(array &$data): array - { - $rowData = []; - - foreach ($data as $key => $value) { - $cacheKeyInfo = $this->hydrateColumnInfo($key); - if ($cacheKeyInfo === null) { - continue; - } - - $fieldName = $cacheKeyInfo['fieldName']; - - // WARNING: BC break! We know this is the desired behavior to type convert values, but this - // erroneous behavior exists since 2.0 and we're forced to keep compatibility. - if (! isset($cacheKeyInfo['isScalar'])) { - $type = $cacheKeyInfo['type']; - $value = $type ? $type->convertToPHPValue($value, $this->platform) : $value; - - $fieldName = $cacheKeyInfo['dqlAlias'] . '_' . $fieldName; - } - - $rowData[$fieldName] = $value; - } - - return $rowData; - } - - /** - * Retrieve column information from ResultSetMapping. - * - * @param string $key Column name - * - * @return mixed[]|null - * @psalm-return array|null - */ - protected function hydrateColumnInfo(string $key): array|null - { - if (isset($this->cache[$key])) { - return $this->cache[$key]; - } - - switch (true) { - // NOTE: Most of the times it's a field mapping, so keep it first!!! - case isset($this->rsm->fieldMappings[$key]): - $classMetadata = $this->getClassMetadata($this->rsm->declaringClasses[$key]); - $fieldName = $this->rsm->fieldMappings[$key]; - $fieldMapping = $classMetadata->fieldMappings[$fieldName]; - $ownerMap = $this->rsm->columnOwnerMap[$key]; - $columnInfo = [ - 'isIdentifier' => in_array($fieldName, $classMetadata->identifier, true), - 'fieldName' => $fieldName, - 'type' => Type::getType($fieldMapping->type), - 'dqlAlias' => $ownerMap, - 'enumType' => $this->rsm->enumMappings[$key] ?? null, - ]; - - // the current discriminator value must be saved in order to disambiguate fields hydration, - // should there be field name collisions - if ($classMetadata->parentClasses && isset($this->rsm->discriminatorColumns[$ownerMap])) { - return $this->cache[$key] = array_merge( - $columnInfo, - [ - 'discriminatorColumn' => $this->rsm->discriminatorColumns[$ownerMap], - 'discriminatorValue' => $classMetadata->discriminatorValue, - 'discriminatorValues' => $this->getDiscriminatorValues($classMetadata), - ], - ); - } - - return $this->cache[$key] = $columnInfo; - - case isset($this->rsm->newObjectMappings[$key]): - // WARNING: A NEW object is also a scalar, so it must be declared before! - $mapping = $this->rsm->newObjectMappings[$key]; - - return $this->cache[$key] = [ - 'isScalar' => true, - 'isNewObjectParameter' => true, - 'fieldName' => $this->rsm->scalarMappings[$key], - 'type' => Type::getType($this->rsm->typeMappings[$key]), - 'argIndex' => $mapping['argIndex'], - 'objIndex' => $mapping['objIndex'], - 'class' => new ReflectionClass($mapping['className']), - 'enumType' => $this->rsm->enumMappings[$key] ?? null, - ]; - - case isset($this->rsm->scalarMappings[$key], $this->hints[LimitSubqueryWalker::FORCE_DBAL_TYPE_CONVERSION]): - return $this->cache[$key] = [ - 'fieldName' => $this->rsm->scalarMappings[$key], - 'type' => Type::getType($this->rsm->typeMappings[$key]), - 'dqlAlias' => '', - 'enumType' => $this->rsm->enumMappings[$key] ?? null, - ]; - - case isset($this->rsm->scalarMappings[$key]): - return $this->cache[$key] = [ - 'isScalar' => true, - 'fieldName' => $this->rsm->scalarMappings[$key], - 'type' => Type::getType($this->rsm->typeMappings[$key]), - 'enumType' => $this->rsm->enumMappings[$key] ?? null, - ]; - - case isset($this->rsm->metaMappings[$key]): - // Meta column (has meaning in relational schema only, i.e. foreign keys or discriminator columns). - $fieldName = $this->rsm->metaMappings[$key]; - $dqlAlias = $this->rsm->columnOwnerMap[$key]; - $type = isset($this->rsm->typeMappings[$key]) - ? Type::getType($this->rsm->typeMappings[$key]) - : null; - - // Cache metadata fetch - $this->getClassMetadata($this->rsm->aliasMap[$dqlAlias]); - - return $this->cache[$key] = [ - 'isIdentifier' => isset($this->rsm->isIdentifierColumn[$dqlAlias][$key]), - 'isMetaColumn' => true, - 'fieldName' => $fieldName, - 'type' => $type, - 'dqlAlias' => $dqlAlias, - 'enumType' => $this->rsm->enumMappings[$key] ?? null, - ]; - } - - // this column is a left over, maybe from a LIMIT query hack for example in Oracle or DB2 - // maybe from an additional column that has not been defined in a NativeQuery ResultSetMapping. - return null; - } - - /** - * @return string[] - * @psalm-return non-empty-list - */ - private function getDiscriminatorValues(ClassMetadata $classMetadata): array - { - $values = array_map( - fn (string $subClass): string => (string) $this->getClassMetadata($subClass)->discriminatorValue, - $classMetadata->subClasses, - ); - - $values[] = (string) $classMetadata->discriminatorValue; - - return $values; - } - - /** - * Retrieve ClassMetadata associated to entity class name. - */ - protected function getClassMetadata(string $className): ClassMetadata - { - if (! isset($this->metadataCache[$className])) { - $this->metadataCache[$className] = $this->em->getClassMetadata($className); - } - - return $this->metadataCache[$className]; - } - - /** - * Register entity as managed in UnitOfWork. - * - * @param mixed[] $data - * - * @todo The "$id" generation is the same of UnitOfWork#createEntity. Remove this duplication somehow - */ - protected function registerManaged(ClassMetadata $class, object $entity, array $data): void - { - if ($class->isIdentifierComposite) { - $id = []; - - foreach ($class->identifier as $fieldName) { - $id[$fieldName] = isset($class->associationMappings[$fieldName]) && $class->associationMappings[$fieldName]->isToOneOwningSide() - ? $data[$class->associationMappings[$fieldName]->joinColumns[0]->name] - : $data[$fieldName]; - } - } else { - $fieldName = $class->identifier[0]; - $id = [ - $fieldName => isset($class->associationMappings[$fieldName]) && $class->associationMappings[$fieldName]->isToOneOwningSide() - ? $data[$class->associationMappings[$fieldName]->joinColumns[0]->name] - : $data[$fieldName], - ]; - } - - $this->em->getUnitOfWork()->registerManaged($entity, $id, $data); - } - - /** - * @param class-string $enumType - * - * @return BackedEnum|array - */ - final protected function buildEnum(mixed $value, string $enumType): BackedEnum|array - { - if (is_array($value)) { - return array_map( - static fn ($value) => $enumType::from($value), - $value, - ); - } - - return $enumType::from($value); - } -} diff --git a/vendor/doctrine/orm/src/Internal/Hydration/ArrayHydrator.php b/vendor/doctrine/orm/src/Internal/Hydration/ArrayHydrator.php deleted file mode 100644 index 7115c16..0000000 --- a/vendor/doctrine/orm/src/Internal/Hydration/ArrayHydrator.php +++ /dev/null @@ -1,270 +0,0 @@ - */ - private array $rootAliases = []; - - private bool $isSimpleQuery = false; - - /** @var mixed[] */ - private array $identifierMap = []; - - /** @var mixed[] */ - private array $resultPointers = []; - - /** @var array */ - private array $idTemplate = []; - - private int $resultCounter = 0; - - protected function prepare(): void - { - $this->isSimpleQuery = count($this->resultSetMapping()->aliasMap) <= 1; - - foreach ($this->resultSetMapping()->aliasMap as $dqlAlias => $className) { - $this->identifierMap[$dqlAlias] = []; - $this->resultPointers[$dqlAlias] = []; - $this->idTemplate[$dqlAlias] = ''; - } - } - - /** - * {@inheritDoc} - */ - protected function hydrateAllData(): array - { - $result = []; - - while ($data = $this->statement()->fetchAssociative()) { - $this->hydrateRowData($data, $result); - } - - return $result; - } - - /** - * {@inheritDoc} - */ - protected function hydrateRowData(array $row, array &$result): void - { - // 1) Initialize - $id = $this->idTemplate; // initialize the id-memory - $nonemptyComponents = []; - $rowData = $this->gatherRowData($row, $id, $nonemptyComponents); - - // 2) Now hydrate the data found in the current row. - foreach ($rowData['data'] as $dqlAlias => $data) { - $index = false; - - if (isset($this->resultSetMapping()->parentAliasMap[$dqlAlias])) { - // It's a joined result - - $parent = $this->resultSetMapping()->parentAliasMap[$dqlAlias]; - $path = $parent . '.' . $dqlAlias; - - // missing parent data, skipping as RIGHT JOIN hydration is not supported. - if (! isset($nonemptyComponents[$parent])) { - continue; - } - - // Get a reference to the right element in the result tree. - // This element will get the associated element attached. - if ($this->resultSetMapping()->isMixed && isset($this->rootAliases[$parent])) { - $first = reset($this->resultPointers); - // TODO: Exception if $key === null ? - $baseElement =& $this->resultPointers[$parent][key($first)]; - } elseif (isset($this->resultPointers[$parent])) { - $baseElement =& $this->resultPointers[$parent]; - } else { - unset($this->resultPointers[$dqlAlias]); // Ticket #1228 - - continue; - } - - $relationAlias = $this->resultSetMapping()->relationMap[$dqlAlias]; - $parentClass = $this->metadataCache[$this->resultSetMapping()->aliasMap[$parent]]; - $relation = $parentClass->associationMappings[$relationAlias]; - - // Check the type of the relation (many or single-valued) - if (! $relation->isToOne()) { - $oneToOne = false; - - if (! isset($baseElement[$relationAlias])) { - $baseElement[$relationAlias] = []; - } - - if (isset($nonemptyComponents[$dqlAlias])) { - $indexExists = isset($this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]]); - $index = $indexExists ? $this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]] : false; - $indexIsValid = $index !== false ? isset($baseElement[$relationAlias][$index]) : false; - - if (! $indexExists || ! $indexIsValid) { - $element = $data; - - if (isset($this->resultSetMapping()->indexByMap[$dqlAlias])) { - $baseElement[$relationAlias][$row[$this->resultSetMapping()->indexByMap[$dqlAlias]]] = $element; - } else { - $baseElement[$relationAlias][] = $element; - } - - $this->identifierMap[$path][$id[$parent]][$id[$dqlAlias]] = array_key_last($baseElement[$relationAlias]); - } - } - } else { - $oneToOne = true; - - if ( - ! isset($nonemptyComponents[$dqlAlias]) && - ( ! isset($baseElement[$relationAlias])) - ) { - $baseElement[$relationAlias] = null; - } elseif (! isset($baseElement[$relationAlias])) { - $baseElement[$relationAlias] = $data; - } - } - - $coll =& $baseElement[$relationAlias]; - - if (is_array($coll)) { - $this->updateResultPointer($coll, $index, $dqlAlias, $oneToOne); - } - } else { - // It's a root result element - - $this->rootAliases[$dqlAlias] = true; // Mark as root - $entityKey = $this->resultSetMapping()->entityMappings[$dqlAlias] ?: 0; - - // if this row has a NULL value for the root result id then make it a null result. - if (! isset($nonemptyComponents[$dqlAlias])) { - $result[] = $this->resultSetMapping()->isMixed - ? [$entityKey => null] - : null; - - $resultKey = $this->resultCounter; - ++$this->resultCounter; - - continue; - } - - // Check for an existing element - if ($this->isSimpleQuery || ! isset($this->identifierMap[$dqlAlias][$id[$dqlAlias]])) { - $element = $this->resultSetMapping()->isMixed - ? [$entityKey => $data] - : $data; - - if (isset($this->resultSetMapping()->indexByMap[$dqlAlias])) { - $resultKey = $row[$this->resultSetMapping()->indexByMap[$dqlAlias]]; - $result[$resultKey] = $element; - } else { - $resultKey = $this->resultCounter; - $result[] = $element; - - ++$this->resultCounter; - } - - $this->identifierMap[$dqlAlias][$id[$dqlAlias]] = $resultKey; - } else { - $index = $this->identifierMap[$dqlAlias][$id[$dqlAlias]]; - $resultKey = $index; - } - - $this->updateResultPointer($result, $index, $dqlAlias, false); - } - } - - if (! isset($resultKey)) { - $this->resultCounter++; - } - - // Append scalar values to mixed result sets - if (isset($rowData['scalars'])) { - if (! isset($resultKey)) { - // this only ever happens when no object is fetched (scalar result only) - $resultKey = isset($this->resultSetMapping()->indexByMap['scalars']) - ? $row[$this->resultSetMapping()->indexByMap['scalars']] - : $this->resultCounter - 1; - } - - foreach ($rowData['scalars'] as $name => $value) { - $result[$resultKey][$name] = $value; - } - } - - // Append new object to mixed result sets - if (isset($rowData['newObjects'])) { - if (! isset($resultKey)) { - $resultKey = $this->resultCounter - 1; - } - - $scalarCount = (isset($rowData['scalars']) ? count($rowData['scalars']) : 0); - - foreach ($rowData['newObjects'] as $objIndex => $newObject) { - $class = $newObject['class']; - $args = $newObject['args']; - $obj = $class->newInstanceArgs($args); - - if (count($args) === $scalarCount || ($scalarCount === 0 && count($rowData['newObjects']) === 1)) { - $result[$resultKey] = $obj; - - continue; - } - - $result[$resultKey][$objIndex] = $obj; - } - } - } - - /** - * Updates the result pointer for an Entity. The result pointers point to the - * last seen instance of each Entity type. This is used for graph construction. - * - * @param mixed[]|null $coll The element. - * @param string|int|false $index Index of the element in the collection. - * @param bool $oneToOne Whether it is a single-valued association or not. - */ - private function updateResultPointer( - array|null &$coll, - string|int|false $index, - string $dqlAlias, - bool $oneToOne, - ): void { - if ($coll === null) { - unset($this->resultPointers[$dqlAlias]); // Ticket #1228 - - return; - } - - if ($oneToOne) { - $this->resultPointers[$dqlAlias] =& $coll; - - return; - } - - if ($index !== false) { - $this->resultPointers[$dqlAlias] =& $coll[$index]; - - return; - } - - if (! $coll) { - return; - } - - $this->resultPointers[$dqlAlias] =& $coll[array_key_last($coll)]; - } -} diff --git a/vendor/doctrine/orm/src/Internal/Hydration/HydrationException.php b/vendor/doctrine/orm/src/Internal/Hydration/HydrationException.php deleted file mode 100644 index 710114f..0000000 --- a/vendor/doctrine/orm/src/Internal/Hydration/HydrationException.php +++ /dev/null @@ -1,67 +0,0 @@ - $discrValues */ - public static function invalidDiscriminatorValue(string $discrValue, array $discrValues): self - { - return new self(sprintf( - 'The discriminator value "%s" is invalid. It must be one of "%s".', - $discrValue, - implode('", "', $discrValues), - )); - } -} diff --git a/vendor/doctrine/orm/src/Internal/Hydration/ObjectHydrator.php b/vendor/doctrine/orm/src/Internal/Hydration/ObjectHydrator.php deleted file mode 100644 index d0fc101..0000000 --- a/vendor/doctrine/orm/src/Internal/Hydration/ObjectHydrator.php +++ /dev/null @@ -1,586 +0,0 @@ - */ - private array $uninitializedCollections = []; - - /** @var mixed[] */ - private array $existingCollections = []; - - protected function prepare(): void - { - if (! isset($this->hints[UnitOfWork::HINT_DEFEREAGERLOAD])) { - $this->hints[UnitOfWork::HINT_DEFEREAGERLOAD] = true; - } - - foreach ($this->resultSetMapping()->aliasMap as $dqlAlias => $className) { - $this->identifierMap[$dqlAlias] = []; - $this->idTemplate[$dqlAlias] = ''; - - // Remember which associations are "fetch joined", so that we know where to inject - // collection stubs or proxies and where not. - if (! isset($this->resultSetMapping()->relationMap[$dqlAlias])) { - continue; - } - - $parent = $this->resultSetMapping()->parentAliasMap[$dqlAlias]; - - if (! isset($this->resultSetMapping()->aliasMap[$parent])) { - throw HydrationException::parentObjectOfRelationNotFound($dqlAlias, $parent); - } - - $sourceClassName = $this->resultSetMapping()->aliasMap[$parent]; - $sourceClass = $this->getClassMetadata($sourceClassName); - $assoc = $sourceClass->associationMappings[$this->resultSetMapping()->relationMap[$dqlAlias]]; - - $this->hints['fetched'][$parent][$assoc->fieldName] = true; - - if ($assoc->isManyToMany()) { - continue; - } - - // Mark any non-collection opposite sides as fetched, too. - if (! $assoc->isOwningSide()) { - $this->hints['fetched'][$dqlAlias][$assoc->mappedBy] = true; - - continue; - } - - // handle fetch-joined owning side bi-directional one-to-one associations - if ($assoc->inversedBy !== null) { - $class = $this->getClassMetadata($className); - $inverseAssoc = $class->associationMappings[$assoc->inversedBy]; - - if (! $inverseAssoc->isToOne()) { - continue; - } - - $this->hints['fetched'][$dqlAlias][$inverseAssoc->fieldName] = true; - } - } - } - - protected function cleanup(): void - { - $eagerLoad = isset($this->hints[UnitOfWork::HINT_DEFEREAGERLOAD]) && $this->hints[UnitOfWork::HINT_DEFEREAGERLOAD] === true; - - parent::cleanup(); - - $this->identifierMap = - $this->initializedCollections = - $this->uninitializedCollections = - $this->existingCollections = - $this->resultPointers = []; - - if ($eagerLoad) { - $this->uow->triggerEagerLoads(); - } - - $this->uow->hydrationComplete(); - } - - protected function cleanupAfterRowIteration(): void - { - $this->identifierMap = - $this->initializedCollections = - $this->uninitializedCollections = - $this->existingCollections = - $this->resultPointers = []; - } - - /** - * {@inheritDoc} - */ - protected function hydrateAllData(): array - { - $result = []; - - while ($row = $this->statement()->fetchAssociative()) { - $this->hydrateRowData($row, $result); - } - - // Take snapshots from all newly initialized collections - foreach ($this->initializedCollections as $coll) { - $coll->takeSnapshot(); - } - - foreach ($this->uninitializedCollections as $coll) { - if (! $coll->isInitialized()) { - $coll->setInitialized(true); - } - } - - return $result; - } - - /** - * Initializes a related collection. - * - * @param string $fieldName The name of the field on the entity that holds the collection. - * @param string $parentDqlAlias Alias of the parent fetch joining this collection. - */ - private function initRelatedCollection( - object $entity, - ClassMetadata $class, - string $fieldName, - string $parentDqlAlias, - ): PersistentCollection { - $oid = spl_object_id($entity); - $relation = $class->associationMappings[$fieldName]; - $value = $class->reflFields[$fieldName]->getValue($entity); - - if ($value === null || is_array($value)) { - $value = new ArrayCollection((array) $value); - } - - if (! $value instanceof PersistentCollection) { - assert($relation->isToMany()); - $value = new PersistentCollection( - $this->em, - $this->metadataCache[$relation->targetEntity], - $value, - ); - $value->setOwner($entity, $relation); - - $class->reflFields[$fieldName]->setValue($entity, $value); - $this->uow->setOriginalEntityProperty($oid, $fieldName, $value); - - $this->initializedCollections[$oid . $fieldName] = $value; - } elseif ( - isset($this->hints[Query::HINT_REFRESH]) || - isset($this->hints['fetched'][$parentDqlAlias][$fieldName]) && - ! $value->isInitialized() - ) { - // Is already PersistentCollection, but either REFRESH or FETCH-JOIN and UNINITIALIZED! - $value->setDirty(false); - $value->setInitialized(true); - $value->unwrap()->clear(); - - $this->initializedCollections[$oid . $fieldName] = $value; - } else { - // Is already PersistentCollection, and DON'T REFRESH or FETCH-JOIN! - $this->existingCollections[$oid . $fieldName] = $value; - } - - return $value; - } - - /** - * Gets an entity instance. - * - * @param string $dqlAlias The DQL alias of the entity's class. - * @psalm-param array $data The instance data. - * - * @throws HydrationException - */ - private function getEntity(array $data, string $dqlAlias): object - { - $className = $this->resultSetMapping()->aliasMap[$dqlAlias]; - - if (isset($this->resultSetMapping()->discriminatorColumns[$dqlAlias])) { - $fieldName = $this->resultSetMapping()->discriminatorColumns[$dqlAlias]; - - if (! isset($this->resultSetMapping()->metaMappings[$fieldName])) { - throw HydrationException::missingDiscriminatorMetaMappingColumn($className, $fieldName, $dqlAlias); - } - - $discrColumn = $this->resultSetMapping()->metaMappings[$fieldName]; - - if (! isset($data[$discrColumn])) { - throw HydrationException::missingDiscriminatorColumn($className, $discrColumn, $dqlAlias); - } - - if ($data[$discrColumn] === '') { - throw HydrationException::emptyDiscriminatorValue($dqlAlias); - } - - $discrMap = $this->metadataCache[$className]->discriminatorMap; - $discriminatorValue = $data[$discrColumn]; - if ($discriminatorValue instanceof BackedEnum) { - $discriminatorValue = $discriminatorValue->value; - } - - $discriminatorValue = (string) $discriminatorValue; - - if (! isset($discrMap[$discriminatorValue])) { - throw HydrationException::invalidDiscriminatorValue($discriminatorValue, array_keys($discrMap)); - } - - $className = $discrMap[$discriminatorValue]; - - unset($data[$discrColumn]); - } - - if (isset($this->hints[Query::HINT_REFRESH_ENTITY], $this->rootAliases[$dqlAlias])) { - $this->registerManaged($this->metadataCache[$className], $this->hints[Query::HINT_REFRESH_ENTITY], $data); - } - - $this->hints['fetchAlias'] = $dqlAlias; - - return $this->uow->createEntity($className, $data, $this->hints); - } - - /** - * @psalm-param class-string $className - * @psalm-param array $data - */ - private function getEntityFromIdentityMap(string $className, array $data): object|bool - { - // TODO: Abstract this code and UnitOfWork::createEntity() equivalent? - $class = $this->metadataCache[$className]; - - if ($class->isIdentifierComposite) { - $idHash = UnitOfWork::getIdHashByIdentifier( - array_map( - /** @return mixed */ - static fn (string $fieldName) => isset($class->associationMappings[$fieldName]) && assert($class->associationMappings[$fieldName]->isToOneOwningSide()) - ? $data[$class->associationMappings[$fieldName]->joinColumns[0]->name] - : $data[$fieldName], - $class->identifier, - ), - ); - - return $this->uow->tryGetByIdHash(ltrim($idHash), $class->rootEntityName); - } elseif (isset($class->associationMappings[$class->identifier[0]])) { - $association = $class->associationMappings[$class->identifier[0]]; - assert($association->isToOneOwningSide()); - - return $this->uow->tryGetByIdHash($data[$association->joinColumns[0]->name], $class->rootEntityName); - } - - return $this->uow->tryGetByIdHash($data[$class->identifier[0]], $class->rootEntityName); - } - - /** - * Hydrates a single row in an SQL result set. - * - * @internal - * First, the data of the row is split into chunks where each chunk contains data - * that belongs to a particular component/class. Afterwards, all these chunks - * are processed, one after the other. For each chunk of class data only one of the - * following code paths is executed: - * Path A: The data chunk belongs to a joined/associated object and the association - * is collection-valued. - * Path B: The data chunk belongs to a joined/associated object and the association - * is single-valued. - * Path C: The data chunk belongs to a root result element/object that appears in the topmost - * level of the hydrated result. A typical example are the objects of the type - * specified by the FROM clause in a DQL query. - * - * @param mixed[] $row The data of the row to process. - * @param mixed[] $result The result array to fill. - */ - protected function hydrateRowData(array $row, array &$result): void - { - // Initialize - $id = $this->idTemplate; // initialize the id-memory - $nonemptyComponents = []; - // Split the row data into chunks of class data. - $rowData = $this->gatherRowData($row, $id, $nonemptyComponents); - - // reset result pointers for each data row - $this->resultPointers = []; - - // Hydrate the data chunks - foreach ($rowData['data'] as $dqlAlias => $data) { - $entityName = $this->resultSetMapping()->aliasMap[$dqlAlias]; - - if (isset($this->resultSetMapping()->parentAliasMap[$dqlAlias])) { - // It's a joined result - - $parentAlias = $this->resultSetMapping()->parentAliasMap[$dqlAlias]; - // we need the $path to save into the identifier map which entities were already - // seen for this parent-child relationship - $path = $parentAlias . '.' . $dqlAlias; - - // We have a RIGHT JOIN result here. Doctrine cannot hydrate RIGHT JOIN Object-Graphs - if (! isset($nonemptyComponents[$parentAlias])) { - // TODO: Add special case code where we hydrate the right join objects into identity map at least - continue; - } - - $parentClass = $this->metadataCache[$this->resultSetMapping()->aliasMap[$parentAlias]]; - $relationField = $this->resultSetMapping()->relationMap[$dqlAlias]; - $relation = $parentClass->associationMappings[$relationField]; - $reflField = $parentClass->reflFields[$relationField]; - - // Get a reference to the parent object to which the joined element belongs. - if ($this->resultSetMapping()->isMixed && isset($this->rootAliases[$parentAlias])) { - $objectClass = $this->resultPointers[$parentAlias]; - $parentObject = $objectClass[key($objectClass)]; - } elseif (isset($this->resultPointers[$parentAlias])) { - $parentObject = $this->resultPointers[$parentAlias]; - } else { - // Parent object of relation not found, mark as not-fetched again - if (isset($nonemptyComponents[$dqlAlias])) { - $element = $this->getEntity($data, $dqlAlias); - - // Update result pointer and provide initial fetch data for parent - $this->resultPointers[$dqlAlias] = $element; - $rowData['data'][$parentAlias][$relationField] = $element; - } else { - $element = null; - } - - // Mark as not-fetched again - unset($this->hints['fetched'][$parentAlias][$relationField]); - continue; - } - - $oid = spl_object_id($parentObject); - - // Check the type of the relation (many or single-valued) - if (! $relation->isToOne()) { - // PATH A: Collection-valued association - $reflFieldValue = $reflField->getValue($parentObject); - - if (isset($nonemptyComponents[$dqlAlias])) { - $collKey = $oid . $relationField; - if (isset($this->initializedCollections[$collKey])) { - $reflFieldValue = $this->initializedCollections[$collKey]; - } elseif (! isset($this->existingCollections[$collKey])) { - $reflFieldValue = $this->initRelatedCollection($parentObject, $parentClass, $relationField, $parentAlias); - } - - $indexExists = isset($this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]]); - $index = $indexExists ? $this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]] : false; - $indexIsValid = $index !== false ? isset($reflFieldValue[$index]) : false; - - if (! $indexExists || ! $indexIsValid) { - if (isset($this->existingCollections[$collKey])) { - // Collection exists, only look for the element in the identity map. - $element = $this->getEntityFromIdentityMap($entityName, $data); - if ($element) { - $this->resultPointers[$dqlAlias] = $element; - } else { - unset($this->resultPointers[$dqlAlias]); - } - } else { - $element = $this->getEntity($data, $dqlAlias); - - if (isset($this->resultSetMapping()->indexByMap[$dqlAlias])) { - $indexValue = $row[$this->resultSetMapping()->indexByMap[$dqlAlias]]; - $reflFieldValue->hydrateSet($indexValue, $element); - $this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]] = $indexValue; - } else { - if (! $reflFieldValue->contains($element)) { - $reflFieldValue->hydrateAdd($element); - $reflFieldValue->last(); - } - - $this->identifierMap[$path][$id[$parentAlias]][$id[$dqlAlias]] = $reflFieldValue->key(); - } - - // Update result pointer - $this->resultPointers[$dqlAlias] = $element; - } - } else { - // Update result pointer - $this->resultPointers[$dqlAlias] = $reflFieldValue[$index]; - } - } elseif (! $reflFieldValue) { - $this->initRelatedCollection($parentObject, $parentClass, $relationField, $parentAlias); - } elseif ($reflFieldValue instanceof PersistentCollection && $reflFieldValue->isInitialized() === false && ! isset($this->uninitializedCollections[$oid . $relationField])) { - $this->uninitializedCollections[$oid . $relationField] = $reflFieldValue; - } - } else { - // PATH B: Single-valued association - $reflFieldValue = $reflField->getValue($parentObject); - - if (! $reflFieldValue || isset($this->hints[Query::HINT_REFRESH]) || $this->uow->isUninitializedObject($reflFieldValue)) { - // we only need to take action if this value is null, - // we refresh the entity or its an uninitialized proxy. - if (isset($nonemptyComponents[$dqlAlias])) { - $element = $this->getEntity($data, $dqlAlias); - $reflField->setValue($parentObject, $element); - $this->uow->setOriginalEntityProperty($oid, $relationField, $element); - $targetClass = $this->metadataCache[$relation->targetEntity]; - - if ($relation->isOwningSide()) { - // TODO: Just check hints['fetched'] here? - // If there is an inverse mapping on the target class its bidirectional - if ($relation->inversedBy !== null) { - $inverseAssoc = $targetClass->associationMappings[$relation->inversedBy]; - if ($inverseAssoc->isToOne()) { - $targetClass->reflFields[$inverseAssoc->fieldName]->setValue($element, $parentObject); - $this->uow->setOriginalEntityProperty(spl_object_id($element), $inverseAssoc->fieldName, $parentObject); - } - } - } else { - // For sure bidirectional, as there is no inverse side in unidirectional mappings - $targetClass->reflFields[$relation->mappedBy]->setValue($element, $parentObject); - $this->uow->setOriginalEntityProperty(spl_object_id($element), $relation->mappedBy, $parentObject); - } - - // Update result pointer - $this->resultPointers[$dqlAlias] = $element; - } else { - $this->uow->setOriginalEntityProperty($oid, $relationField, null); - $reflField->setValue($parentObject, null); - } - // else leave $reflFieldValue null for single-valued associations - } else { - // Update result pointer - $this->resultPointers[$dqlAlias] = $reflFieldValue; - } - } - } else { - // PATH C: Its a root result element - $this->rootAliases[$dqlAlias] = true; // Mark as root alias - $entityKey = $this->resultSetMapping()->entityMappings[$dqlAlias] ?: 0; - - // if this row has a NULL value for the root result id then make it a null result. - if (! isset($nonemptyComponents[$dqlAlias])) { - if ($this->resultSetMapping()->isMixed) { - $result[] = [$entityKey => null]; - } else { - $result[] = null; - } - - $resultKey = $this->resultCounter; - ++$this->resultCounter; - continue; - } - - // check for existing result from the iterations before - if (! isset($this->identifierMap[$dqlAlias][$id[$dqlAlias]])) { - $element = $this->getEntity($data, $dqlAlias); - - if ($this->resultSetMapping()->isMixed) { - $element = [$entityKey => $element]; - } - - if (isset($this->resultSetMapping()->indexByMap[$dqlAlias])) { - $resultKey = $row[$this->resultSetMapping()->indexByMap[$dqlAlias]]; - - if (isset($this->hints['collection'])) { - $this->hints['collection']->hydrateSet($resultKey, $element); - } - - $result[$resultKey] = $element; - } else { - $resultKey = $this->resultCounter; - ++$this->resultCounter; - - if (isset($this->hints['collection'])) { - $this->hints['collection']->hydrateAdd($element); - } - - $result[] = $element; - } - - $this->identifierMap[$dqlAlias][$id[$dqlAlias]] = $resultKey; - - // Update result pointer - $this->resultPointers[$dqlAlias] = $element; - } else { - // Update result pointer - $index = $this->identifierMap[$dqlAlias][$id[$dqlAlias]]; - $this->resultPointers[$dqlAlias] = $result[$index]; - $resultKey = $index; - } - } - - if (isset($this->hints[Query::HINT_INTERNAL_ITERATION]) && $this->hints[Query::HINT_INTERNAL_ITERATION]) { - $this->uow->hydrationComplete(); - } - } - - if (! isset($resultKey)) { - $this->resultCounter++; - } - - // Append scalar values to mixed result sets - if (isset($rowData['scalars'])) { - if (! isset($resultKey)) { - $resultKey = isset($this->resultSetMapping()->indexByMap['scalars']) - ? $row[$this->resultSetMapping()->indexByMap['scalars']] - : $this->resultCounter - 1; - } - - foreach ($rowData['scalars'] as $name => $value) { - $result[$resultKey][$name] = $value; - } - } - - // Append new object to mixed result sets - if (isset($rowData['newObjects'])) { - if (! isset($resultKey)) { - $resultKey = $this->resultCounter - 1; - } - - $scalarCount = (isset($rowData['scalars']) ? count($rowData['scalars']) : 0); - - foreach ($rowData['newObjects'] as $objIndex => $newObject) { - $class = $newObject['class']; - $args = $newObject['args']; - $obj = $class->newInstanceArgs($args); - - if ($scalarCount === 0 && count($rowData['newObjects']) === 1) { - $result[$resultKey] = $obj; - - continue; - } - - $result[$resultKey][$objIndex] = $obj; - } - } - } - - /** - * When executed in a hydrate() loop we may have to clear internal state to - * decrease memory consumption. - */ - public function onClear(mixed $eventArgs): void - { - parent::onClear($eventArgs); - - $aliases = array_keys($this->identifierMap); - - $this->identifierMap = array_fill_keys($aliases, []); - } -} diff --git a/vendor/doctrine/orm/src/Internal/Hydration/ScalarColumnHydrator.php b/vendor/doctrine/orm/src/Internal/Hydration/ScalarColumnHydrator.php deleted file mode 100644 index 0f10fb4..0000000 --- a/vendor/doctrine/orm/src/Internal/Hydration/ScalarColumnHydrator.php +++ /dev/null @@ -1,34 +0,0 @@ -resultSetMapping()->fieldMappings) > 1) { - throw MultipleSelectorsFoundException::create($this->resultSetMapping()->fieldMappings); - } - - $result = $this->statement()->fetchAllNumeric(); - - return array_column($result, 0); - } -} diff --git a/vendor/doctrine/orm/src/Internal/Hydration/ScalarHydrator.php b/vendor/doctrine/orm/src/Internal/Hydration/ScalarHydrator.php deleted file mode 100644 index 15f3e7e..0000000 --- a/vendor/doctrine/orm/src/Internal/Hydration/ScalarHydrator.php +++ /dev/null @@ -1,35 +0,0 @@ -statement()->fetchAssociative()) { - $this->hydrateRowData($data, $result); - } - - return $result; - } - - /** - * {@inheritDoc} - */ - protected function hydrateRowData(array $row, array &$result): void - { - $result[] = $this->gatherScalarRowData($row); - } -} diff --git a/vendor/doctrine/orm/src/Internal/Hydration/SimpleObjectHydrator.php b/vendor/doctrine/orm/src/Internal/Hydration/SimpleObjectHydrator.php deleted file mode 100644 index eab7b9b..0000000 --- a/vendor/doctrine/orm/src/Internal/Hydration/SimpleObjectHydrator.php +++ /dev/null @@ -1,176 +0,0 @@ -resultSetMapping()->aliasMap) !== 1) { - throw new RuntimeException('Cannot use SimpleObjectHydrator with a ResultSetMapping that contains more than one object result.'); - } - - if ($this->resultSetMapping()->scalarMappings) { - throw new RuntimeException('Cannot use SimpleObjectHydrator with a ResultSetMapping that contains scalar mappings.'); - } - - $this->class = $this->getClassMetadata(reset($this->resultSetMapping()->aliasMap)); - } - - protected function cleanup(): void - { - parent::cleanup(); - - $this->uow->triggerEagerLoads(); - $this->uow->hydrationComplete(); - } - - /** - * {@inheritDoc} - */ - protected function hydrateAllData(): array - { - $result = []; - - while ($row = $this->statement()->fetchAssociative()) { - $this->hydrateRowData($row, $result); - } - - $this->em->getUnitOfWork()->triggerEagerLoads(); - - return $result; - } - - /** - * {@inheritDoc} - */ - protected function hydrateRowData(array $row, array &$result): void - { - assert($this->class !== null); - $entityName = $this->class->name; - $data = []; - $discrColumnValue = null; - - // We need to find the correct entity class name if we have inheritance in resultset - if ($this->class->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { - $discrColumn = $this->class->getDiscriminatorColumn(); - $discrColumnName = $this->getSQLResultCasing($this->platform, $discrColumn->name); - - // Find mapped discriminator column from the result set. - $metaMappingDiscrColumnName = array_search($discrColumnName, $this->resultSetMapping()->metaMappings, true); - if ($metaMappingDiscrColumnName) { - $discrColumnName = $metaMappingDiscrColumnName; - } - - if (! isset($row[$discrColumnName])) { - throw HydrationException::missingDiscriminatorColumn( - $entityName, - $discrColumnName, - key($this->resultSetMapping()->aliasMap), - ); - } - - if ($row[$discrColumnName] === '') { - throw HydrationException::emptyDiscriminatorValue(key( - $this->resultSetMapping()->aliasMap, - )); - } - - $discrMap = $this->class->discriminatorMap; - - if (! isset($discrMap[$row[$discrColumnName]])) { - throw HydrationException::invalidDiscriminatorValue($row[$discrColumnName], array_keys($discrMap)); - } - - $entityName = $discrMap[$row[$discrColumnName]]; - $discrColumnValue = $row[$discrColumnName]; - - unset($row[$discrColumnName]); - } - - foreach ($row as $column => $value) { - // An ObjectHydrator should be used instead of SimpleObjectHydrator - if (isset($this->resultSetMapping()->relationMap[$column])) { - throw new Exception(sprintf('Unable to retrieve association information for column "%s"', $column)); - } - - $cacheKeyInfo = $this->hydrateColumnInfo($column); - - if (! $cacheKeyInfo) { - continue; - } - - // If we have inheritance in resultset, make sure the field belongs to the correct class - if (isset($cacheKeyInfo['discriminatorValues']) && ! in_array((string) $discrColumnValue, $cacheKeyInfo['discriminatorValues'], true)) { - continue; - } - - // Check if value is null before conversion (because some types convert null to something else) - $valueIsNull = $value === null; - - // Convert field to a valid PHP value - if (isset($cacheKeyInfo['type'])) { - $type = $cacheKeyInfo['type']; - $value = $type->convertToPHPValue($value, $this->platform); - } - - if ($value !== null && isset($cacheKeyInfo['enumType'])) { - $originalValue = $value; - try { - $value = $this->buildEnum($originalValue, $cacheKeyInfo['enumType']); - } catch (ValueError $e) { - throw MappingException::invalidEnumValue( - $entityName, - $cacheKeyInfo['fieldName'], - (string) $originalValue, - $cacheKeyInfo['enumType'], - $e, - ); - } - } - - $fieldName = $cacheKeyInfo['fieldName']; - - // Prevent overwrite in case of inherit classes using same property name (See AbstractHydrator) - if (! isset($data[$fieldName]) || ! $valueIsNull) { - $data[$fieldName] = $value; - } - } - - if (isset($this->hints[Query::HINT_REFRESH_ENTITY])) { - $this->registerManaged($this->class, $this->hints[Query::HINT_REFRESH_ENTITY], $data); - } - - $uow = $this->em->getUnitOfWork(); - $entity = $uow->createEntity($entityName, $data, $this->hints); - - $result[] = $entity; - - if (isset($this->hints[Query::HINT_INTERNAL_ITERATION]) && $this->hints[Query::HINT_INTERNAL_ITERATION]) { - $this->uow->hydrationComplete(); - } - } -} diff --git a/vendor/doctrine/orm/src/Internal/Hydration/SingleScalarHydrator.php b/vendor/doctrine/orm/src/Internal/Hydration/SingleScalarHydrator.php deleted file mode 100644 index 2787bbc..0000000 --- a/vendor/doctrine/orm/src/Internal/Hydration/SingleScalarHydrator.php +++ /dev/null @@ -1,40 +0,0 @@ -statement()->fetchAllAssociative(); - $numRows = count($data); - - if ($numRows === 0) { - throw new NoResultException(); - } - - if ($numRows > 1) { - throw new NonUniqueResultException('The query returned multiple rows. Change the query or use a different result function like getScalarResult().'); - } - - $result = $this->gatherScalarRowData($data[key($data)]); - - if (count($result) > 1) { - throw new NonUniqueResultException('The query returned a row containing multiple columns. Change the query or use a different result function like getScalarResult().'); - } - - return array_shift($result); - } -} diff --git a/vendor/doctrine/orm/src/Internal/HydrationCompleteHandler.php b/vendor/doctrine/orm/src/Internal/HydrationCompleteHandler.php deleted file mode 100644 index e0fe342..0000000 --- a/vendor/doctrine/orm/src/Internal/HydrationCompleteHandler.php +++ /dev/null @@ -1,64 +0,0 @@ -listenersInvoker->getSubscribedSystems($class, Events::postLoad); - - if ($invoke === ListenersInvoker::INVOKE_NONE) { - return; - } - - $this->deferredPostLoadInvocations[] = [$class, $invoke, $entity]; - } - - /** - * This method should be called after any hydration cycle completed. - * - * Method fires all deferred invocations of postLoad events - */ - public function hydrationComplete(): void - { - $toInvoke = $this->deferredPostLoadInvocations; - $this->deferredPostLoadInvocations = []; - - foreach ($toInvoke as $classAndEntity) { - [$class, $invoke, $entity] = $classAndEntity; - - $this->listenersInvoker->invoke( - $class, - Events::postLoad, - $entity, - new PostLoadEventArgs($entity, $this->em), - $invoke, - ); - } - } -} diff --git a/vendor/doctrine/orm/src/Internal/NoUnknownNamedArguments.php b/vendor/doctrine/orm/src/Internal/NoUnknownNamedArguments.php deleted file mode 100644 index 7584744..0000000 --- a/vendor/doctrine/orm/src/Internal/NoUnknownNamedArguments.php +++ /dev/null @@ -1,55 +0,0 @@ - $parameter - */ - private static function validateVariadicParameter(array $parameter): void - { - if (array_is_list($parameter)) { - return; - } - - [, $trace] = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - assert(isset($trace['class'])); - - $additionalArguments = array_values(array_filter( - array_keys($parameter), - is_string(...), - )); - - throw new BadMethodCallException(sprintf( - 'Invalid call to %s::%s(), unknown named arguments: %s', - $trace['class'], - $trace['function'], - implode(', ', $additionalArguments), - )); - } -} diff --git a/vendor/doctrine/orm/src/Internal/QueryType.php b/vendor/doctrine/orm/src/Internal/QueryType.php deleted file mode 100644 index b5e60c7..0000000 --- a/vendor/doctrine/orm/src/Internal/QueryType.php +++ /dev/null @@ -1,13 +0,0 @@ - - */ - private array $nodes = []; - - /** - * DFS state for the different nodes, indexed by node object id and using one of - * this class' constants as value. - * - * @var array - */ - private array $states = []; - - /** - * Edges between the nodes. The first-level key is the object id of the outgoing - * node; the second array maps the destination node by object id as key. - * - * @var array> - */ - private array $edges = []; - - /** - * DFS numbers, by object ID - * - * @var array - */ - private array $dfs = []; - - /** - * lowlink numbers, by object ID - * - * @var array - */ - private array $lowlink = []; - - private int $maxdfs = 0; - - /** - * Nodes representing the SCC another node is in, indexed by lookup-node object ID - * - * @var array - */ - private array $representingNodes = []; - - /** - * Stack with OIDs of nodes visited in the current state of the DFS - * - * @var list - */ - private array $stack = []; - - public function addNode(object $node): void - { - $id = spl_object_id($node); - $this->nodes[$id] = $node; - $this->states[$id] = self::NOT_VISITED; - $this->edges[$id] = []; - } - - public function hasNode(object $node): bool - { - return isset($this->nodes[spl_object_id($node)]); - } - - /** - * Adds a new edge between two nodes to the graph - */ - public function addEdge(object $from, object $to): void - { - $fromId = spl_object_id($from); - $toId = spl_object_id($to); - - $this->edges[$fromId][$toId] = true; - } - - public function findStronglyConnectedComponents(): void - { - foreach (array_keys($this->nodes) as $oid) { - if ($this->states[$oid] === self::NOT_VISITED) { - $this->tarjan($oid); - } - } - } - - private function tarjan(int $oid): void - { - $this->dfs[$oid] = $this->lowlink[$oid] = $this->maxdfs++; - $this->states[$oid] = self::IN_PROGRESS; - array_push($this->stack, $oid); - - foreach ($this->edges[$oid] as $adjacentId => $ignored) { - if ($this->states[$adjacentId] === self::NOT_VISITED) { - $this->tarjan($adjacentId); - $this->lowlink[$oid] = min($this->lowlink[$oid], $this->lowlink[$adjacentId]); - } elseif ($this->states[$adjacentId] === self::IN_PROGRESS) { - $this->lowlink[$oid] = min($this->lowlink[$oid], $this->dfs[$adjacentId]); - } - } - - $lowlink = $this->lowlink[$oid]; - if ($lowlink === $this->dfs[$oid]) { - $representingNode = null; - do { - $unwindOid = array_pop($this->stack); - - if (! $representingNode) { - $representingNode = $this->nodes[$unwindOid]; - } - - $this->representingNodes[$unwindOid] = $representingNode; - $this->states[$unwindOid] = self::VISITED; - } while ($unwindOid !== $oid); - } - } - - public function getNodeRepresentingStronglyConnectedComponent(object $node): object - { - $oid = spl_object_id($node); - - if (! isset($this->representingNodes[$oid])) { - throw new InvalidArgumentException('unknown node'); - } - - return $this->representingNodes[$oid]; - } -} diff --git a/vendor/doctrine/orm/src/Internal/TopologicalSort.php b/vendor/doctrine/orm/src/Internal/TopologicalSort.php deleted file mode 100644 index 808bc0f..0000000 --- a/vendor/doctrine/orm/src/Internal/TopologicalSort.php +++ /dev/null @@ -1,155 +0,0 @@ - - */ - private array $nodes = []; - - /** - * DFS state for the different nodes, indexed by node object id and using one of - * this class' constants as value. - * - * @var array - */ - private array $states = []; - - /** - * Edges between the nodes. The first-level key is the object id of the outgoing - * node; the second array maps the destination node by object id as key. The final - * boolean value indicates whether the edge is optional or not. - * - * @var array> - */ - private array $edges = []; - - /** - * Builds up the result during the DFS. - * - * @var list - */ - private array $sortResult = []; - - public function addNode(object $node): void - { - $id = spl_object_id($node); - $this->nodes[$id] = $node; - $this->states[$id] = self::NOT_VISITED; - $this->edges[$id] = []; - } - - public function hasNode(object $node): bool - { - return isset($this->nodes[spl_object_id($node)]); - } - - /** - * Adds a new edge between two nodes to the graph - * - * @param bool $optional This indicates whether the edge may be ignored during the topological sort if it is necessary to break cycles. - */ - public function addEdge(object $from, object $to, bool $optional): void - { - $fromId = spl_object_id($from); - $toId = spl_object_id($to); - - if (isset($this->edges[$fromId][$toId]) && $this->edges[$fromId][$toId] === false) { - return; // we already know about this dependency, and it is not optional - } - - $this->edges[$fromId][$toId] = $optional; - } - - /** - * Returns a topological sort of all nodes. When we have an edge A->B between two nodes - * A and B, then B will be listed before A in the result. Visually speaking, when ordering - * the nodes in the result order from left to right, all edges point to the left. - * - * @return list - */ - public function sort(): array - { - foreach (array_keys($this->nodes) as $oid) { - if ($this->states[$oid] === self::NOT_VISITED) { - $this->visit($oid); - } - } - - return $this->sortResult; - } - - private function visit(int $oid): void - { - if ($this->states[$oid] === self::IN_PROGRESS) { - // This node is already on the current DFS stack. We've found a cycle! - throw new CycleDetectedException($this->nodes[$oid]); - } - - if ($this->states[$oid] === self::VISITED) { - // We've reached a node that we've already seen, including all - // other nodes that are reachable from here. We're done here, return. - return; - } - - $this->states[$oid] = self::IN_PROGRESS; - - // Continue the DFS downwards the edge list - foreach ($this->edges[$oid] as $adjacentId => $optional) { - try { - $this->visit($adjacentId); - } catch (CycleDetectedException $exception) { - if ($exception->isCycleCollected()) { - // There is a complete cycle downstream of the current node. We cannot - // do anything about that anymore. - throw $exception; - } - - if ($optional) { - // The current edge is part of a cycle, but it is optional and the closest - // such edge while backtracking. Break the cycle here by skipping the edge - // and continuing with the next one. - continue; - } - - // We have found a cycle and cannot break it at $edge. Best we can do - // is to backtrack from the current vertex, hoping that somewhere up the - // stack this can be salvaged. - $this->states[$oid] = self::NOT_VISITED; - $exception->addToCycle($this->nodes[$oid]); - - throw $exception; - } - } - - // We have traversed all edges and visited all other nodes reachable from here. - // So we're done with this vertex as well. - - $this->states[$oid] = self::VISITED; - $this->sortResult[] = $this->nodes[$oid]; - } -} diff --git a/vendor/doctrine/orm/src/Internal/TopologicalSort/CycleDetectedException.php b/vendor/doctrine/orm/src/Internal/TopologicalSort/CycleDetectedException.php deleted file mode 100644 index 3af5329..0000000 --- a/vendor/doctrine/orm/src/Internal/TopologicalSort/CycleDetectedException.php +++ /dev/null @@ -1,47 +0,0 @@ - */ - private array $cycle; - - /** - * Do we have the complete cycle collected? - */ - private bool $cycleCollected = false; - - public function __construct(private readonly object $startNode) - { - parent::__construct('A cycle has been detected, so a topological sort is not possible. The getCycle() method provides the list of nodes that form the cycle.'); - - $this->cycle = [$startNode]; - } - - /** @return list */ - public function getCycle(): array - { - return $this->cycle; - } - - public function addToCycle(object $node): void - { - array_unshift($this->cycle, $node); - - if ($node === $this->startNode) { - $this->cycleCollected = true; - } - } - - public function isCycleCollected(): bool - { - return $this->cycleCollected; - } -} diff --git a/vendor/doctrine/orm/src/LazyCriteriaCollection.php b/vendor/doctrine/orm/src/LazyCriteriaCollection.php deleted file mode 100644 index ca67914..0000000 --- a/vendor/doctrine/orm/src/LazyCriteriaCollection.php +++ /dev/null @@ -1,96 +0,0 @@ - - * @implements Selectable - */ -class LazyCriteriaCollection extends AbstractLazyCollection implements Selectable -{ - private int|null $count = null; - - public function __construct( - protected EntityPersister $entityPersister, - protected Criteria $criteria, - ) { - } - - /** - * Do an efficient count on the collection - */ - public function count(): int - { - if ($this->isInitialized()) { - return $this->collection->count(); - } - - // Return cached result in case count query was already executed - if ($this->count !== null) { - return $this->count; - } - - return $this->count = $this->entityPersister->count($this->criteria); - } - - /** - * check if collection is empty without loading it - */ - public function isEmpty(): bool - { - if ($this->isInitialized()) { - return $this->collection->isEmpty(); - } - - return ! $this->count(); - } - - /** - * Do an optimized search of an element - * - * @param mixed $element The element to search for. - * - * @return bool TRUE if the collection contains $element, FALSE otherwise. - */ - public function contains(mixed $element): bool - { - if ($this->isInitialized()) { - return $this->collection->contains($element); - } - - return $this->entityPersister->exists($element, $this->criteria); - } - - /** @return ReadableCollection&Selectable */ - public function matching(Criteria $criteria): ReadableCollection&Selectable - { - $this->initialize(); - assert($this->collection instanceof Selectable); - - return $this->collection->matching($criteria); - } - - protected function doInitialize(): void - { - $elements = $this->entityPersister->loadCriteria($this->criteria); - $this->collection = new ArrayCollection($elements); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/AnsiQuoteStrategy.php b/vendor/doctrine/orm/src/Mapping/AnsiQuoteStrategy.php deleted file mode 100644 index 872d4d6..0000000 --- a/vendor/doctrine/orm/src/Mapping/AnsiQuoteStrategy.php +++ /dev/null @@ -1,76 +0,0 @@ -fieldMappings[$fieldName]->columnName; - } - - public function getTableName(ClassMetadata $class, AbstractPlatform $platform): string - { - return $class->table['name']; - } - - /** - * {@inheritDoc} - */ - public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform): string - { - return $definition['sequenceName']; - } - - public function getJoinColumnName(JoinColumnMapping $joinColumn, ClassMetadata $class, AbstractPlatform $platform): string - { - return $joinColumn->name; - } - - public function getReferencedJoinColumnName( - JoinColumnMapping $joinColumn, - ClassMetadata $class, - AbstractPlatform $platform, - ): string { - return $joinColumn->referencedColumnName; - } - - public function getJoinTableName( - ManyToManyOwningSideMapping $association, - ClassMetadata $class, - AbstractPlatform $platform, - ): string { - return $association->joinTable->name; - } - - /** - * {@inheritDoc} - */ - public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform): array - { - return $class->identifier; - } - - public function getColumnAlias( - string $columnName, - int $counter, - AbstractPlatform $platform, - ClassMetadata|null $class = null, - ): string { - return $this->getSQLResultCasing($platform, $columnName . '_' . $counter); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ArrayAccessImplementation.php b/vendor/doctrine/orm/src/Mapping/ArrayAccessImplementation.php deleted file mode 100644 index 3fd0988..0000000 --- a/vendor/doctrine/orm/src/Mapping/ArrayAccessImplementation.php +++ /dev/null @@ -1,70 +0,0 @@ -$offset); - } - - /** @param string $offset */ - public function offsetGet(mixed $offset): mixed - { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11211', - 'Using ArrayAccess on %s is deprecated and will not be possible in Doctrine ORM 4.0. Use the corresponding property instead.', - static::class, - ); - - if (! property_exists($this, $offset)) { - throw new InvalidArgumentException('Undefined property: ' . $offset); - } - - return $this->$offset; - } - - /** @param string $offset */ - public function offsetSet(mixed $offset, mixed $value): void - { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11211', - 'Using ArrayAccess on %s is deprecated and will not be possible in Doctrine ORM 4.0. Use the corresponding property instead.', - static::class, - ); - - $this->$offset = $value; - } - - /** @param string $offset */ - public function offsetUnset(mixed $offset): void - { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11211', - 'Using ArrayAccess on %s is deprecated and will not be possible in Doctrine ORM 4.0. Use the corresponding property instead.', - static::class, - ); - - $this->$offset = null; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/AssociationMapping.php b/vendor/doctrine/orm/src/Mapping/AssociationMapping.php deleted file mode 100644 index ce7bdb4..0000000 --- a/vendor/doctrine/orm/src/Mapping/AssociationMapping.php +++ /dev/null @@ -1,359 +0,0 @@ - */ -abstract class AssociationMapping implements ArrayAccess -{ - /** - * The names of persistence operations to cascade on the association. - * - * @var list<'persist'|'remove'|'detach'|'refresh'|'all'> - */ - public array $cascade = []; - - /** - * The fetching strategy to use for the association, usually defaults to FETCH_LAZY. - * - * @var ClassMetadata::FETCH_*|null - */ - public int|null $fetch = null; - - /** - * This is set when the association is inherited by this class from another - * (inheritance) parent entity class. The value is the FQCN of the - * topmost entity class that contains this association. (If there are - * transient classes in the class hierarchy, these are ignored, so the - * class property may in fact come from a class further up in the PHP class - * hierarchy.) To-many associations initially declared in mapped - * superclasses are not considered 'inherited' in the nearest - * entity subclasses. - * - * @var class-string|null - */ - public string|null $inherited = null; - - /** - * This is set when the association does not appear in the current class - * for the first time, but is initially declared in another parent - * entity or mapped superclass. The value is the FQCN of the - * topmost non-transient class that contains association information for - * this relationship. - * - * @var class-string|null - */ - public string|null $declared = null; - - public array|null $cache = null; - - public bool|null $id = null; - - public bool|null $isOnDeleteCascade = null; - - /** @var class-string|null */ - public string|null $originalClass = null; - - public string|null $originalField = null; - - public bool $orphanRemoval = false; - - public bool|null $unique = null; - - /** - * @param string $fieldName The name of the field in the entity - * the association is mapped to. - * @param class-string $sourceEntity The class name of the source entity. - * In the case of to-many associations - * initially present in mapped - * superclasses, the nearest - * entity subclasses will be - * considered the respective source - * entities. - * @param class-string $targetEntity The class name of the target entity. - * If it is fully-qualified it is used as - * is. If it is a simple, unqualified - * class name the namespace is assumed to - * be the same as the namespace of the - * source entity. - */ - final public function __construct( - public readonly string $fieldName, - public string $sourceEntity, - public readonly string $targetEntity, - ) { - } - - /** - * @param mixed[] $mappingArray - * @psalm-param array{ - * fieldName: string, - * sourceEntity: class-string, - * targetEntity: class-string, - * cascade?: list<'persist'|'remove'|'detach'|'refresh'|'all'>, - * fetch?: ClassMetadata::FETCH_*|null, - * inherited?: class-string|null, - * declared?: class-string|null, - * cache?: array|null, - * id?: bool|null, - * isOnDeleteCascade?: bool|null, - * originalClass?: class-string|null, - * originalField?: string|null, - * orphanRemoval?: bool, - * unique?: bool|null, - * joinTable?: mixed[]|null, - * type?: int, - * isOwningSide: bool, - * } $mappingArray - */ - public static function fromMappingArray(array $mappingArray): static - { - unset($mappingArray['isOwningSide'], $mappingArray['type']); - $mapping = new static( - $mappingArray['fieldName'], - $mappingArray['sourceEntity'], - $mappingArray['targetEntity'], - ); - unset($mappingArray['fieldName'], $mappingArray['sourceEntity'], $mappingArray['targetEntity']); - - foreach ($mappingArray as $key => $value) { - if ($key === 'joinTable') { - assert($mapping instanceof ManyToManyAssociationMapping); - - if ($value === [] || $value === null) { - continue; - } - - assert($mapping instanceof ManyToManyOwningSideMapping); - - $mapping->joinTable = JoinTableMapping::fromMappingArray($value); - - continue; - } - - if (property_exists($mapping, $key)) { - $mapping->$key = $value; - } else { - throw new OutOfRangeException('Unknown property ' . $key . ' on class ' . static::class); - } - } - - return $mapping; - } - - /** - * @psalm-assert-if-true OwningSideMapping $this - * @psalm-assert-if-false InverseSideMapping $this - */ - final public function isOwningSide(): bool - { - return $this instanceof OwningSideMapping; - } - - /** @psalm-assert-if-true ToOneAssociationMapping $this */ - final public function isToOne(): bool - { - return $this instanceof ToOneAssociationMapping; - } - - /** @psalm-assert-if-true ToManyAssociationMapping $this */ - final public function isToMany(): bool - { - return $this instanceof ToManyAssociationMapping; - } - - /** @psalm-assert-if-true OneToOneOwningSideMapping $this */ - final public function isOneToOneOwningSide(): bool - { - return $this->isOneToOne() && $this->isOwningSide(); - } - - /** @psalm-assert-if-true OneToOneOwningSideMapping|ManyToOneAssociationMapping $this */ - final public function isToOneOwningSide(): bool - { - return $this->isToOne() && $this->isOwningSide(); - } - - /** @psalm-assert-if-true ManyToManyOwningSideMapping $this */ - final public function isManyToManyOwningSide(): bool - { - return $this instanceof ManyToManyOwningSideMapping; - } - - /** @psalm-assert-if-true OneToOneAssociationMapping $this */ - final public function isOneToOne(): bool - { - return $this instanceof OneToOneAssociationMapping; - } - - /** @psalm-assert-if-true OneToManyAssociationMapping $this */ - final public function isOneToMany(): bool - { - return $this instanceof OneToManyAssociationMapping; - } - - /** @psalm-assert-if-true ManyToOneAssociationMapping $this */ - final public function isManyToOne(): bool - { - return $this instanceof ManyToOneAssociationMapping; - } - - /** @psalm-assert-if-true ManyToManyAssociationMapping $this */ - final public function isManyToMany(): bool - { - return $this instanceof ManyToManyAssociationMapping; - } - - /** @psalm-assert-if-true ToManyAssociationMapping $this */ - final public function isOrdered(): bool - { - return $this->isToMany() && $this->orderBy() !== []; - } - - /** @psalm-assert-if-true ToManyAssociationMapping $this */ - public function isIndexed(): bool - { - return false; - } - - final public function type(): int - { - return match (true) { - $this instanceof OneToOneAssociationMapping => ClassMetadata::ONE_TO_ONE, - $this instanceof OneToManyAssociationMapping => ClassMetadata::ONE_TO_MANY, - $this instanceof ManyToOneAssociationMapping => ClassMetadata::MANY_TO_ONE, - $this instanceof ManyToManyAssociationMapping => ClassMetadata::MANY_TO_MANY, - default => throw new Exception('Cannot determine type for ' . static::class), - }; - } - - /** @param string $offset */ - public function offsetExists(mixed $offset): bool - { - return isset($this->$offset) || in_array($offset, ['isOwningSide', 'type'], true); - } - - final public function offsetGet(mixed $offset): mixed - { - return match ($offset) { - 'isOwningSide' => $this->isOwningSide(), - 'type' => $this->type(), - 'isCascadeRemove' => $this->isCascadeRemove(), - 'isCascadePersist' => $this->isCascadePersist(), - 'isCascadeRefresh' => $this->isCascadeRefresh(), - 'isCascadeDetach' => $this->isCascadeDetach(), - default => property_exists($this, $offset) ? $this->$offset : throw new OutOfRangeException(sprintf( - 'Unknown property "%s" on class %s', - $offset, - static::class, - )), - }; - } - - public function offsetSet(mixed $offset, mixed $value): void - { - assert($offset !== null); - if (! property_exists($this, $offset)) { - throw new OutOfRangeException(sprintf( - 'Unknown property "%s" on class %s', - $offset, - static::class, - )); - } - - if ($offset === 'joinTable') { - $value = JoinTableMapping::fromMappingArray($value); - } - - $this->$offset = $value; - } - - /** @param string $offset */ - public function offsetUnset(mixed $offset): void - { - if (! property_exists($this, $offset)) { - throw new OutOfRangeException(sprintf( - 'Unknown property "%s" on class %s', - $offset, - static::class, - )); - } - - $this->$offset = null; - } - - final public function isCascadeRemove(): bool - { - return in_array('remove', $this->cascade, true); - } - - final public function isCascadePersist(): bool - { - return in_array('persist', $this->cascade, true); - } - - final public function isCascadeRefresh(): bool - { - return in_array('refresh', $this->cascade, true); - } - - final public function isCascadeDetach(): bool - { - return in_array('detach', $this->cascade, true); - } - - /** @return array */ - public function toArray(): array - { - $array = (array) $this; - - $array['isOwningSide'] = $this->isOwningSide(); - $array['type'] = $this->type(); - - return $array; - } - - /** @return list */ - public function __sleep(): array - { - $serialized = ['fieldName', 'sourceEntity', 'targetEntity']; - - if (count($this->cascade) > 0) { - $serialized[] = 'cascade'; - } - - foreach ( - [ - 'fetch', - 'inherited', - 'declared', - 'cache', - 'originalClass', - 'originalField', - ] as $stringOrArrayProperty - ) { - if ($this->$stringOrArrayProperty !== null) { - $serialized[] = $stringOrArrayProperty; - } - } - - foreach (['id', 'orphanRemoval', 'isOnDeleteCascade', 'unique'] as $boolProperty) { - if ($this->$boolProperty) { - $serialized[] = $boolProperty; - } - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/AssociationOverride.php b/vendor/doctrine/orm/src/Mapping/AssociationOverride.php deleted file mode 100644 index e0ebc07..0000000 --- a/vendor/doctrine/orm/src/Mapping/AssociationOverride.php +++ /dev/null @@ -1,51 +0,0 @@ -|null - */ - public readonly array|null $joinColumns; - - /** - * The join column that is being mapped to the persistent attribute. - * - * @var array|null - */ - public readonly array|null $inverseJoinColumns; - - /** - * @param string $name The name of the relationship property whose mapping is being overridden. - * @param JoinColumn|array $joinColumns - * @param JoinColumn|array $inverseJoinColumns - * @param JoinTable|null $joinTable The join table that maps the relationship. - * @param string|null $inversedBy The name of the association-field on the inverse-side. - * @psalm-param 'LAZY'|'EAGER'|'EXTRA_LAZY'|null $fetch - */ - public function __construct( - public readonly string $name, - array|JoinColumn|null $joinColumns = null, - array|JoinColumn|null $inverseJoinColumns = null, - public readonly JoinTable|null $joinTable = null, - public readonly string|null $inversedBy = null, - public readonly string|null $fetch = null, - ) { - if ($joinColumns instanceof JoinColumn) { - $joinColumns = [$joinColumns]; - } - - if ($inverseJoinColumns instanceof JoinColumn) { - $inverseJoinColumns = [$inverseJoinColumns]; - } - - $this->joinColumns = $joinColumns; - $this->inverseJoinColumns = $inverseJoinColumns; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/AssociationOverrides.php b/vendor/doctrine/orm/src/Mapping/AssociationOverrides.php deleted file mode 100644 index 9fc6807..0000000 --- a/vendor/doctrine/orm/src/Mapping/AssociationOverrides.php +++ /dev/null @@ -1,38 +0,0 @@ - - */ - public readonly array $overrides; - - /** @param array|AssociationOverride $overrides */ - public function __construct(array|AssociationOverride $overrides) - { - if (! is_array($overrides)) { - $overrides = [$overrides]; - } - - foreach ($overrides as $override) { - if (! ($override instanceof AssociationOverride)) { - throw MappingException::invalidOverrideType('AssociationOverride', $override); - } - } - - $this->overrides = array_values($overrides); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/AttributeOverride.php b/vendor/doctrine/orm/src/Mapping/AttributeOverride.php deleted file mode 100644 index 8f0e70c..0000000 --- a/vendor/doctrine/orm/src/Mapping/AttributeOverride.php +++ /dev/null @@ -1,15 +0,0 @@ - - */ - public readonly array $overrides; - - /** @param array|AttributeOverride $overrides */ - public function __construct(array|AttributeOverride $overrides) - { - if (! is_array($overrides)) { - $overrides = [$overrides]; - } - - foreach ($overrides as $override) { - if (! ($override instanceof AttributeOverride)) { - throw MappingException::invalidOverrideType('AttributeOverride', $override); - } - } - - $this->overrides = array_values($overrides); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Builder/AssociationBuilder.php b/vendor/doctrine/orm/src/Mapping/Builder/AssociationBuilder.php deleted file mode 100644 index ea9e13c..0000000 --- a/vendor/doctrine/orm/src/Mapping/Builder/AssociationBuilder.php +++ /dev/null @@ -1,171 +0,0 @@ -mapping['mappedBy'] = $fieldName; - - return $this; - } - - /** @return $this */ - public function inversedBy(string $fieldName): static - { - $this->mapping['inversedBy'] = $fieldName; - - return $this; - } - - /** @return $this */ - public function cascadeAll(): static - { - $this->mapping['cascade'] = ['ALL']; - - return $this; - } - - /** @return $this */ - public function cascadePersist(): static - { - $this->mapping['cascade'][] = 'persist'; - - return $this; - } - - /** @return $this */ - public function cascadeRemove(): static - { - $this->mapping['cascade'][] = 'remove'; - - return $this; - } - - /** @return $this */ - public function cascadeDetach(): static - { - $this->mapping['cascade'][] = 'detach'; - - return $this; - } - - /** @return $this */ - public function cascadeRefresh(): static - { - $this->mapping['cascade'][] = 'refresh'; - - return $this; - } - - /** @return $this */ - public function fetchExtraLazy(): static - { - $this->mapping['fetch'] = ClassMetadata::FETCH_EXTRA_LAZY; - - return $this; - } - - /** @return $this */ - public function fetchEager(): static - { - $this->mapping['fetch'] = ClassMetadata::FETCH_EAGER; - - return $this; - } - - /** @return $this */ - public function fetchLazy(): static - { - $this->mapping['fetch'] = ClassMetadata::FETCH_LAZY; - - return $this; - } - - /** - * Add Join Columns. - * - * @return $this - */ - public function addJoinColumn( - string $columnName, - string $referencedColumnName, - bool $nullable = true, - bool $unique = false, - string|null $onDelete = null, - string|null $columnDef = null, - ): static { - $this->joinColumns[] = [ - 'name' => $columnName, - 'referencedColumnName' => $referencedColumnName, - 'nullable' => $nullable, - 'unique' => $unique, - 'onDelete' => $onDelete, - 'columnDefinition' => $columnDef, - ]; - - return $this; - } - - /** - * Sets field as primary key. - * - * @return $this - */ - public function makePrimaryKey(): static - { - $this->mapping['id'] = true; - - return $this; - } - - /** - * Removes orphan entities when detached from their parent. - * - * @return $this - */ - public function orphanRemoval(): static - { - $this->mapping['orphanRemoval'] = true; - - return $this; - } - - /** @throws InvalidArgumentException */ - public function build(): ClassMetadataBuilder - { - $mapping = $this->mapping; - if ($this->joinColumns) { - $mapping['joinColumns'] = $this->joinColumns; - } - - $cm = $this->builder->getClassMetadata(); - if ($this->type === ClassMetadata::MANY_TO_ONE) { - $cm->mapManyToOne($mapping); - } elseif ($this->type === ClassMetadata::ONE_TO_ONE) { - $cm->mapOneToOne($mapping); - } else { - throw new InvalidArgumentException('Type should be a ToOne Association here'); - } - - return $this->builder; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Builder/ClassMetadataBuilder.php b/vendor/doctrine/orm/src/Mapping/Builder/ClassMetadataBuilder.php deleted file mode 100644 index b9d3cc8..0000000 --- a/vendor/doctrine/orm/src/Mapping/Builder/ClassMetadataBuilder.php +++ /dev/null @@ -1,426 +0,0 @@ -cm; - } - - /** - * Marks the class as mapped superclass. - * - * @return $this - */ - public function setMappedSuperClass(): static - { - $this->cm->isMappedSuperclass = true; - $this->cm->isEmbeddedClass = false; - - return $this; - } - - /** - * Marks the class as embeddable. - * - * @return $this - */ - public function setEmbeddable(): static - { - $this->cm->isEmbeddedClass = true; - $this->cm->isMappedSuperclass = false; - - return $this; - } - - /** - * Adds and embedded class - * - * @param class-string $class - * - * @return $this - */ - public function addEmbedded(string $fieldName, string $class, string|false|null $columnPrefix = null): static - { - $this->cm->mapEmbedded( - [ - 'fieldName' => $fieldName, - 'class' => $class, - 'columnPrefix' => $columnPrefix, - ], - ); - - return $this; - } - - /** - * Sets custom Repository class name. - * - * @return $this - */ - public function setCustomRepositoryClass(string $repositoryClassName): static - { - $this->cm->setCustomRepositoryClass($repositoryClassName); - - return $this; - } - - /** - * Marks class read only. - * - * @return $this - */ - public function setReadOnly(): static - { - $this->cm->markReadOnly(); - - return $this; - } - - /** - * Sets the table name. - * - * @return $this - */ - public function setTable(string $name): static - { - $this->cm->setPrimaryTable(['name' => $name]); - - return $this; - } - - /** - * Adds Index. - * - * @psalm-param list $columns - * - * @return $this - */ - public function addIndex(array $columns, string $name): static - { - if (! isset($this->cm->table['indexes'])) { - $this->cm->table['indexes'] = []; - } - - $this->cm->table['indexes'][$name] = ['columns' => $columns]; - - return $this; - } - - /** - * Adds Unique Constraint. - * - * @psalm-param list $columns - * - * @return $this - */ - public function addUniqueConstraint(array $columns, string $name): static - { - if (! isset($this->cm->table['uniqueConstraints'])) { - $this->cm->table['uniqueConstraints'] = []; - } - - $this->cm->table['uniqueConstraints'][$name] = ['columns' => $columns]; - - return $this; - } - - /** - * Sets class as root of a joined table inheritance hierarchy. - * - * @return $this - */ - public function setJoinedTableInheritance(): static - { - $this->cm->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_JOINED); - - return $this; - } - - /** - * Sets class as root of a single table inheritance hierarchy. - * - * @return $this - */ - public function setSingleTableInheritance(): static - { - $this->cm->setInheritanceType(ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE); - - return $this; - } - - /** - * Sets the discriminator column details. - * - * @psalm-param class-string|null $enumType - * @psalm-param array $options - * - * @return $this - */ - public function setDiscriminatorColumn( - string $name, - string $type = 'string', - int $length = 255, - string|null $columnDefinition = null, - string|null $enumType = null, - array $options = [], - ): static { - $this->cm->setDiscriminatorColumn( - [ - 'name' => $name, - 'type' => $type, - 'length' => $length, - 'columnDefinition' => $columnDefinition, - 'enumType' => $enumType, - 'options' => $options, - ], - ); - - return $this; - } - - /** - * Adds a subclass to this inheritance hierarchy. - * - * @return $this - */ - public function addDiscriminatorMapClass(string $name, string $class): static - { - $this->cm->addDiscriminatorMapClass($name, $class); - - return $this; - } - - /** - * Sets deferred explicit change tracking policy. - * - * @return $this - */ - public function setChangeTrackingPolicyDeferredExplicit(): static - { - $this->cm->setChangeTrackingPolicy(ClassMetadata::CHANGETRACKING_DEFERRED_EXPLICIT); - - return $this; - } - - /** - * Adds lifecycle event. - * - * @return $this - */ - public function addLifecycleEvent(string $methodName, string $event): static - { - $this->cm->addLifecycleCallback($methodName, $event); - - return $this; - } - - /** - * Adds Field. - * - * @psalm-param array $mapping - * - * @return $this - */ - public function addField(string $name, string $type, array $mapping = []): static - { - $mapping['fieldName'] = $name; - $mapping['type'] = $type; - - $this->cm->mapField($mapping); - - return $this; - } - - /** - * Creates a field builder. - */ - public function createField(string $name, string $type): FieldBuilder - { - return new FieldBuilder( - $this, - [ - 'fieldName' => $name, - 'type' => $type, - ], - ); - } - - /** - * Creates an embedded builder. - */ - public function createEmbedded(string $fieldName, string $class): EmbeddedBuilder - { - return new EmbeddedBuilder( - $this, - [ - 'fieldName' => $fieldName, - 'class' => $class, - 'columnPrefix' => null, - ], - ); - } - - /** - * Adds a simple many to one association, optionally with the inversed by field. - */ - public function addManyToOne( - string $name, - string $targetEntity, - string|null $inversedBy = null, - ): ClassMetadataBuilder { - $builder = $this->createManyToOne($name, $targetEntity); - - if ($inversedBy !== null) { - $builder->inversedBy($inversedBy); - } - - return $builder->build(); - } - - /** - * Creates a ManyToOne Association Builder. - * - * Note: This method does not add the association, you have to call build() on the AssociationBuilder. - */ - public function createManyToOne(string $name, string $targetEntity): AssociationBuilder - { - return new AssociationBuilder( - $this, - [ - 'fieldName' => $name, - 'targetEntity' => $targetEntity, - ], - ClassMetadata::MANY_TO_ONE, - ); - } - - /** - * Creates a OneToOne Association Builder. - */ - public function createOneToOne(string $name, string $targetEntity): AssociationBuilder - { - return new AssociationBuilder( - $this, - [ - 'fieldName' => $name, - 'targetEntity' => $targetEntity, - ], - ClassMetadata::ONE_TO_ONE, - ); - } - - /** - * Adds simple inverse one-to-one association. - */ - public function addInverseOneToOne(string $name, string $targetEntity, string $mappedBy): ClassMetadataBuilder - { - $builder = $this->createOneToOne($name, $targetEntity); - $builder->mappedBy($mappedBy); - - return $builder->build(); - } - - /** - * Adds simple owning one-to-one association. - */ - public function addOwningOneToOne( - string $name, - string $targetEntity, - string|null $inversedBy = null, - ): ClassMetadataBuilder { - $builder = $this->createOneToOne($name, $targetEntity); - - if ($inversedBy !== null) { - $builder->inversedBy($inversedBy); - } - - return $builder->build(); - } - - /** - * Creates a ManyToMany Association Builder. - */ - public function createManyToMany(string $name, string $targetEntity): ManyToManyAssociationBuilder - { - return new ManyToManyAssociationBuilder( - $this, - [ - 'fieldName' => $name, - 'targetEntity' => $targetEntity, - ], - ClassMetadata::MANY_TO_MANY, - ); - } - - /** - * Adds a simple owning many to many association. - */ - public function addOwningManyToMany( - string $name, - string $targetEntity, - string|null $inversedBy = null, - ): ClassMetadataBuilder { - $builder = $this->createManyToMany($name, $targetEntity); - - if ($inversedBy !== null) { - $builder->inversedBy($inversedBy); - } - - return $builder->build(); - } - - /** - * Adds a simple inverse many to many association. - */ - public function addInverseManyToMany(string $name, string $targetEntity, string $mappedBy): ClassMetadataBuilder - { - $builder = $this->createManyToMany($name, $targetEntity); - $builder->mappedBy($mappedBy); - - return $builder->build(); - } - - /** - * Creates a one to many association builder. - */ - public function createOneToMany(string $name, string $targetEntity): OneToManyAssociationBuilder - { - return new OneToManyAssociationBuilder( - $this, - [ - 'fieldName' => $name, - 'targetEntity' => $targetEntity, - ], - ClassMetadata::ONE_TO_MANY, - ); - } - - /** - * Adds simple OneToMany association. - */ - public function addOneToMany(string $name, string $targetEntity, string $mappedBy): ClassMetadataBuilder - { - $builder = $this->createOneToMany($name, $targetEntity); - $builder->mappedBy($mappedBy); - - return $builder->build(); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Builder/EmbeddedBuilder.php b/vendor/doctrine/orm/src/Mapping/Builder/EmbeddedBuilder.php deleted file mode 100644 index b9d2127..0000000 --- a/vendor/doctrine/orm/src/Mapping/Builder/EmbeddedBuilder.php +++ /dev/null @@ -1,46 +0,0 @@ -mapping['columnPrefix'] = $columnPrefix; - - return $this; - } - - /** - * Finalizes this embeddable and attach it to the ClassMetadata. - * - * Without this call an EmbeddedBuilder has no effect on the ClassMetadata. - */ - public function build(): ClassMetadataBuilder - { - $cm = $this->builder->getClassMetadata(); - - $cm->mapEmbedded($this->mapping); - - return $this->builder; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Builder/EntityListenerBuilder.php b/vendor/doctrine/orm/src/Mapping/Builder/EntityListenerBuilder.php deleted file mode 100644 index a0b14b9..0000000 --- a/vendor/doctrine/orm/src/Mapping/Builder/EntityListenerBuilder.php +++ /dev/null @@ -1,55 +0,0 @@ - true, - Events::postRemove => true, - Events::prePersist => true, - Events::postPersist => true, - Events::preUpdate => true, - Events::postUpdate => true, - Events::postLoad => true, - Events::preFlush => true, - ]; - - /** - * Lookup the entity class to find methods that match to event lifecycle names - * - * @param ClassMetadata $metadata The entity metadata. - * @param string $className The listener class name. - * - * @throws MappingException When the listener class not found. - */ - public static function bindEntityListener(ClassMetadata $metadata, string $className): void - { - $class = $metadata->fullyQualifiedClassName($className); - - if (! class_exists($class)) { - throw MappingException::entityListenerClassNotFound($class, $className); - } - - foreach (get_class_methods($class) as $method) { - if (! isset(self::EVENTS[$method])) { - continue; - } - - $metadata->addEntityListener($method, $class, $method); - } - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Builder/FieldBuilder.php b/vendor/doctrine/orm/src/Mapping/Builder/FieldBuilder.php deleted file mode 100644 index 8326ff5..0000000 --- a/vendor/doctrine/orm/src/Mapping/Builder/FieldBuilder.php +++ /dev/null @@ -1,243 +0,0 @@ -mapping['length'] = $length; - - return $this; - } - - /** - * Sets nullable. - * - * @return $this - */ - public function nullable(bool $flag = true): static - { - $this->mapping['nullable'] = $flag; - - return $this; - } - - /** - * Sets Unique. - * - * @return $this - */ - public function unique(bool $flag = true): static - { - $this->mapping['unique'] = $flag; - - return $this; - } - - /** - * Sets column name. - * - * @return $this - */ - public function columnName(string $name): static - { - $this->mapping['columnName'] = $name; - - return $this; - } - - /** - * Sets Precision. - * - * @return $this - */ - public function precision(int $p): static - { - $this->mapping['precision'] = $p; - - return $this; - } - - /** - * Sets insertable. - * - * @return $this - */ - public function insertable(bool $flag = true): self - { - if (! $flag) { - $this->mapping['notInsertable'] = true; - } - - return $this; - } - - /** - * Sets updatable. - * - * @return $this - */ - public function updatable(bool $flag = true): self - { - if (! $flag) { - $this->mapping['notUpdatable'] = true; - } - - return $this; - } - - /** - * Sets scale. - * - * @return $this - */ - public function scale(int $s): static - { - $this->mapping['scale'] = $s; - - return $this; - } - - /** - * Sets field as primary key. - * - * @return $this - */ - public function makePrimaryKey(): static - { - $this->mapping['id'] = true; - - return $this; - } - - /** - * Sets an option. - * - * @return $this - */ - public function option(string $name, mixed $value): static - { - $this->mapping['options'][$name] = $value; - - return $this; - } - - /** @return $this */ - public function generatedValue(string $strategy = 'AUTO'): static - { - $this->generatedValue = $strategy; - - return $this; - } - - /** - * Sets field versioned. - * - * @return $this - */ - public function isVersionField(): static - { - $this->version = true; - - return $this; - } - - /** - * Sets Sequence Generator. - * - * @return $this - */ - public function setSequenceGenerator(string $sequenceName, int $allocationSize = 1, int $initialValue = 1): static - { - $this->sequenceDef = [ - 'sequenceName' => $sequenceName, - 'allocationSize' => $allocationSize, - 'initialValue' => $initialValue, - ]; - - return $this; - } - - /** - * Sets column definition. - * - * @return $this - */ - public function columnDefinition(string $def): static - { - $this->mapping['columnDefinition'] = $def; - - return $this; - } - - /** - * Set the FQCN of the custom ID generator. - * This class must extend \Doctrine\ORM\Id\AbstractIdGenerator. - * - * @return $this - */ - public function setCustomIdGenerator(string $customIdGenerator): static - { - $this->customIdGenerator = $customIdGenerator; - - return $this; - } - - /** - * Finalizes this field and attach it to the ClassMetadata. - * - * Without this call a FieldBuilder has no effect on the ClassMetadata. - */ - public function build(): ClassMetadataBuilder - { - $cm = $this->builder->getClassMetadata(); - if ($this->generatedValue) { - $cm->setIdGeneratorType(constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $this->generatedValue)); - } - - if ($this->version) { - $cm->setVersionMapping($this->mapping); - } - - $cm->mapField($this->mapping); - if ($this->sequenceDef) { - $cm->setSequenceGeneratorDefinition($this->sequenceDef); - } - - if ($this->customIdGenerator) { - $cm->setCustomGeneratorDefinition(['class' => $this->customIdGenerator]); - } - - return $this->builder; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Builder/ManyToManyAssociationBuilder.php b/vendor/doctrine/orm/src/Mapping/Builder/ManyToManyAssociationBuilder.php deleted file mode 100644 index b83a8ba..0000000 --- a/vendor/doctrine/orm/src/Mapping/Builder/ManyToManyAssociationBuilder.php +++ /dev/null @@ -1,73 +0,0 @@ -joinTableName = $name; - - return $this; - } - - /** - * Adds Inverse Join Columns. - * - * @return $this - */ - public function addInverseJoinColumn( - string $columnName, - string $referencedColumnName, - bool $nullable = true, - bool $unique = false, - string|null $onDelete = null, - string|null $columnDef = null, - ): static { - $this->inverseJoinColumns[] = [ - 'name' => $columnName, - 'referencedColumnName' => $referencedColumnName, - 'nullable' => $nullable, - 'unique' => $unique, - 'onDelete' => $onDelete, - 'columnDefinition' => $columnDef, - ]; - - return $this; - } - - public function build(): ClassMetadataBuilder - { - $mapping = $this->mapping; - $mapping['joinTable'] = []; - if ($this->joinColumns) { - $mapping['joinTable']['joinColumns'] = $this->joinColumns; - } - - if ($this->inverseJoinColumns) { - $mapping['joinTable']['inverseJoinColumns'] = $this->inverseJoinColumns; - } - - if ($this->joinTableName) { - $mapping['joinTable']['name'] = $this->joinTableName; - } - - $cm = $this->builder->getClassMetadata(); - $cm->mapManyToMany($mapping); - - return $this->builder; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Builder/OneToManyAssociationBuilder.php b/vendor/doctrine/orm/src/Mapping/Builder/OneToManyAssociationBuilder.php deleted file mode 100644 index 077c558..0000000 --- a/vendor/doctrine/orm/src/Mapping/Builder/OneToManyAssociationBuilder.php +++ /dev/null @@ -1,46 +0,0 @@ - $fieldNames - * - * @return $this - */ - public function setOrderBy(array $fieldNames): static - { - $this->mapping['orderBy'] = $fieldNames; - - return $this; - } - - /** @return $this */ - public function setIndexBy(string $fieldName): static - { - $this->mapping['indexBy'] = $fieldName; - - return $this; - } - - public function build(): ClassMetadataBuilder - { - $mapping = $this->mapping; - if ($this->joinColumns) { - $mapping['joinColumns'] = $this->joinColumns; - } - - $cm = $this->builder->getClassMetadata(); - $cm->mapOneToMany($mapping); - - return $this->builder; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Cache.php b/vendor/doctrine/orm/src/Mapping/Cache.php deleted file mode 100644 index 3161ab3..0000000 --- a/vendor/doctrine/orm/src/Mapping/Cache.php +++ /dev/null @@ -1,19 +0,0 @@ - $typedFieldMappers */ - private readonly array $typedFieldMappers; - - public function __construct(TypedFieldMapper ...$typedFieldMappers) - { - self::validateVariadicParameter($typedFieldMappers); - - $this->typedFieldMappers = $typedFieldMappers; - } - - /** - * {@inheritDoc} - */ - public function validateAndComplete(array $mapping, ReflectionProperty $field): array - { - foreach ($this->typedFieldMappers as $typedFieldMapper) { - $mapping = $typedFieldMapper->validateAndComplete($mapping, $field); - } - - return $mapping; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ChangeTrackingPolicy.php b/vendor/doctrine/orm/src/Mapping/ChangeTrackingPolicy.php deleted file mode 100644 index 7181d9f..0000000 --- a/vendor/doctrine/orm/src/Mapping/ChangeTrackingPolicy.php +++ /dev/null @@ -1,17 +0,0 @@ -ClassMetadata instance holds all the object-relational mapping metadata - * of an entity and its associations. - * - * Once populated, ClassMetadata instances are usually cached in a serialized form. - * - * IMPORTANT NOTE: - * - * The fields of this class are only public for 2 reasons: - * 1) To allow fast READ access. - * 2) To drastically reduce the size of a serialized instance (private/protected members - * get the whole class name, namespace inclusive, prepended to every property in - * the serialized representation). - * - * @psalm-type ConcreteAssociationMapping = OneToOneOwningSideMapping|OneToOneInverseSideMapping|ManyToOneAssociationMapping|OneToManyAssociationMapping|ManyToManyOwningSideMapping|ManyToManyInverseSideMapping - * @template-covariant T of object - * @template-implements PersistenceClassMetadata - */ -class ClassMetadata implements PersistenceClassMetadata, Stringable -{ - /* The inheritance mapping types */ - /** - * NONE means the class does not participate in an inheritance hierarchy - * and therefore does not need an inheritance mapping type. - */ - public const INHERITANCE_TYPE_NONE = 1; - - /** - * JOINED means the class will be persisted according to the rules of - * Class Table Inheritance. - */ - public const INHERITANCE_TYPE_JOINED = 2; - - /** - * SINGLE_TABLE means the class will be persisted according to the rules of - * Single Table Inheritance. - */ - public const INHERITANCE_TYPE_SINGLE_TABLE = 3; - - /* The Id generator types. */ - /** - * AUTO means the generator type will depend on what the used platform prefers. - * Offers full portability. - */ - public const GENERATOR_TYPE_AUTO = 1; - - /** - * SEQUENCE means a separate sequence object will be used. Platforms that do - * not have native sequence support may emulate it. Full portability is currently - * not guaranteed. - */ - public const GENERATOR_TYPE_SEQUENCE = 2; - - /** - * IDENTITY means an identity column is used for id generation. The database - * will fill in the id column on insertion. Platforms that do not support - * native identity columns may emulate them. Full portability is currently - * not guaranteed. - */ - public const GENERATOR_TYPE_IDENTITY = 4; - - /** - * NONE means the class does not have a generated id. That means the class - * must have a natural, manually assigned id. - */ - public const GENERATOR_TYPE_NONE = 5; - - /** - * CUSTOM means that customer will use own ID generator that supposedly work - */ - public const GENERATOR_TYPE_CUSTOM = 7; - - /** - * DEFERRED_IMPLICIT means that changes of entities are calculated at commit-time - * by doing a property-by-property comparison with the original data. This will - * be done for all entities that are in MANAGED state at commit-time. - * - * This is the default change tracking policy. - */ - public const CHANGETRACKING_DEFERRED_IMPLICIT = 1; - - /** - * DEFERRED_EXPLICIT means that changes of entities are calculated at commit-time - * by doing a property-by-property comparison with the original data. This will - * be done only for entities that were explicitly saved (through persist() or a cascade). - */ - public const CHANGETRACKING_DEFERRED_EXPLICIT = 2; - - /** - * Specifies that an association is to be fetched when it is first accessed. - */ - public const FETCH_LAZY = 2; - - /** - * Specifies that an association is to be fetched when the owner of the - * association is fetched. - */ - public const FETCH_EAGER = 3; - - /** - * Specifies that an association is to be fetched lazy (on first access) and that - * commands such as Collection#count, Collection#slice are issued directly against - * the database if the collection is not yet initialized. - */ - public const FETCH_EXTRA_LAZY = 4; - - /** - * Identifies a one-to-one association. - */ - public const ONE_TO_ONE = 1; - - /** - * Identifies a many-to-one association. - */ - public const MANY_TO_ONE = 2; - - /** - * Identifies a one-to-many association. - */ - public const ONE_TO_MANY = 4; - - /** - * Identifies a many-to-many association. - */ - public const MANY_TO_MANY = 8; - - /** - * Combined bitmask for to-one (single-valued) associations. - */ - public const TO_ONE = 3; - - /** - * Combined bitmask for to-many (collection-valued) associations. - */ - public const TO_MANY = 12; - - /** - * ReadOnly cache can do reads, inserts and deletes, cannot perform updates or employ any locks, - */ - public const CACHE_USAGE_READ_ONLY = 1; - - /** - * Nonstrict Read Write Cache doesn’t employ any locks but can do inserts, update and deletes. - */ - public const CACHE_USAGE_NONSTRICT_READ_WRITE = 2; - - /** - * Read Write Attempts to lock the entity before update/delete. - */ - public const CACHE_USAGE_READ_WRITE = 3; - - /** - * The value of this column is never generated by the database. - */ - public const GENERATED_NEVER = 0; - - /** - * The value of this column is generated by the database on INSERT, but not on UPDATE. - */ - public const GENERATED_INSERT = 1; - - /** - * The value of this column is generated by the database on both INSERT and UDPATE statements. - */ - public const GENERATED_ALWAYS = 2; - - /** - * READ-ONLY: The namespace the entity class is contained in. - * - * @todo Not really needed. Usage could be localized. - */ - public string|null $namespace = null; - - /** - * READ-ONLY: The name of the entity class that is at the root of the mapped entity inheritance - * hierarchy. If the entity is not part of a mapped inheritance hierarchy this is the same - * as {@link $name}. - * - * @psalm-var class-string - */ - public string $rootEntityName; - - /** - * READ-ONLY: The definition of custom generator. Only used for CUSTOM - * generator type - * - * The definition has the following structure: - * - * array( - * 'class' => 'ClassName', - * ) - * - * - * @todo Merge with tableGeneratorDefinition into generic generatorDefinition - * @var array|null - */ - public array|null $customGeneratorDefinition = null; - - /** - * The name of the custom repository class used for the entity class. - * (Optional). - * - * @psalm-var ?class-string - */ - public string|null $customRepositoryClassName = null; - - /** - * READ-ONLY: Whether this class describes the mapping of a mapped superclass. - */ - public bool $isMappedSuperclass = false; - - /** - * READ-ONLY: Whether this class describes the mapping of an embeddable class. - */ - public bool $isEmbeddedClass = false; - - /** - * READ-ONLY: The names of the parent entity classes (ancestors), starting with the - * nearest one and ending with the root entity class. - * - * @psalm-var list - */ - public array $parentClasses = []; - - /** - * READ-ONLY: For classes in inheritance mapping hierarchies, this field contains the names of all - * entity subclasses of this class. These may also be abstract classes. - * - * This list is used, for example, to enumerate all necessary tables in JTI when querying for root - * or subclass entities, or to gather all fields comprised in an entity inheritance tree. - * - * For classes that do not use STI/JTI, this list is empty. - * - * Implementation note: - * - * In PHP, there is no general way to discover all subclasses of a given class at runtime. For that - * reason, the list of classes given in the discriminator map at the root entity is considered - * authoritative. The discriminator map must contain all concrete classes that can - * appear in the particular inheritance hierarchy tree. Since there can be no instances of abstract - * entity classes, users are not required to list such classes with a discriminator value. - * - * The possibly remaining "gaps" for abstract entity classes are filled after the class metadata for the - * root entity has been loaded. - * - * For subclasses of such root entities, the list can be reused/passed downwards, it only needs to - * be filtered accordingly (only keep remaining subclasses) - * - * @psalm-var list - */ - public array $subClasses = []; - - /** - * READ-ONLY: The names of all embedded classes based on properties. - * - * @psalm-var array - */ - public array $embeddedClasses = []; - - /** - * READ-ONLY: The field names of all fields that are part of the identifier/primary key - * of the mapped entity class. - * - * @psalm-var list - */ - public array $identifier = []; - - /** - * READ-ONLY: The inheritance mapping type used by the class. - * - * @psalm-var self::INHERITANCE_TYPE_* - */ - public int $inheritanceType = self::INHERITANCE_TYPE_NONE; - - /** - * READ-ONLY: The Id generator type used by the class. - * - * @psalm-var self::GENERATOR_TYPE_* - */ - public int $generatorType = self::GENERATOR_TYPE_NONE; - - /** - * READ-ONLY: The field mappings of the class. - * Keys are field names and values are FieldMapping instances - * - * @var array - */ - public array $fieldMappings = []; - - /** - * READ-ONLY: An array of field names. Used to look up field names from column names. - * Keys are column names and values are field names. - * - * @psalm-var array - */ - public array $fieldNames = []; - - /** - * READ-ONLY: A map of field names to column names. Keys are field names and values column names. - * Used to look up column names from field names. - * This is the reverse lookup map of $_fieldNames. - * - * @deprecated 3.0 Remove this. - * - * @var mixed[] - */ - public array $columnNames = []; - - /** - * READ-ONLY: The discriminator value of this class. - * - * This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies - * where a discriminator column is used. - * - * @see discriminatorColumn - */ - public mixed $discriminatorValue = null; - - /** - * READ-ONLY: The discriminator map of all mapped classes in the hierarchy. - * - * This does only apply to the JOINED and SINGLE_TABLE inheritance mapping strategies - * where a discriminator column is used. - * - * @see discriminatorColumn - * - * @var array - * - * @psalm-var array - */ - public array $discriminatorMap = []; - - /** - * READ-ONLY: The definition of the discriminator column used in JOINED and SINGLE_TABLE - * inheritance mappings. - */ - public DiscriminatorColumnMapping|null $discriminatorColumn = null; - - /** - * READ-ONLY: The primary table definition. The definition is an array with the - * following entries: - * - * name => - * schema => - * indexes => array - * uniqueConstraints => array - * - * @var mixed[] - * @psalm-var array{ - * name: string, - * schema?: string, - * indexes?: array, - * uniqueConstraints?: array, - * options?: array, - * quoted?: bool - * } - */ - public array $table; - - /** - * READ-ONLY: The registered lifecycle callbacks for entities of this class. - * - * @psalm-var array> - */ - public array $lifecycleCallbacks = []; - - /** - * READ-ONLY: The registered entity listeners. - * - * @psalm-var array> - */ - public array $entityListeners = []; - - /** - * READ-ONLY: The association mappings of this class. - * - * A join table definition has the following structure: - *
-     * array(
-     *     'name' => ,
-     *      'joinColumns' => array(),
-     *      'inverseJoinColumns' => array()
-     * )
-     * 
- * - * @psalm-var array - */ - public array $associationMappings = []; - - /** - * READ-ONLY: Flag indicating whether the identifier/primary key of the class is composite. - */ - public bool $isIdentifierComposite = false; - - /** - * READ-ONLY: Flag indicating whether the identifier/primary key contains at least one foreign key association. - * - * This flag is necessary because some code blocks require special treatment of this cases. - */ - public bool $containsForeignIdentifier = false; - - /** - * READ-ONLY: Flag indicating whether the identifier/primary key contains at least one ENUM type. - * - * This flag is necessary because some code blocks require special treatment of this cases. - */ - public bool $containsEnumIdentifier = false; - - /** - * READ-ONLY: The ID generator used for generating IDs for this class. - * - * @todo Remove! - */ - public AbstractIdGenerator $idGenerator; - - /** - * READ-ONLY: The definition of the sequence generator of this class. Only used for the - * SEQUENCE generation strategy. - * - * The definition has the following structure: - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => '20', - * 'initialValue' => '1' - * ) - * - * - * @var array|null - * @psalm-var array{sequenceName: string, allocationSize: string, initialValue: string, quoted?: mixed}|null - * @todo Merge with tableGeneratorDefinition into generic generatorDefinition - */ - public array|null $sequenceGeneratorDefinition = null; - - /** - * READ-ONLY: The policy used for change-tracking on entities of this class. - */ - public int $changeTrackingPolicy = self::CHANGETRACKING_DEFERRED_IMPLICIT; - - /** - * READ-ONLY: A Flag indicating whether one or more columns of this class - * have to be reloaded after insert / update operations. - */ - public bool $requiresFetchAfterChange = false; - - /** - * READ-ONLY: A flag for whether or not instances of this class are to be versioned - * with optimistic locking. - */ - public bool $isVersioned = false; - - /** - * READ-ONLY: The name of the field which is used for versioning in optimistic locking (if any). - */ - public string|null $versionField = null; - - /** @var mixed[]|null */ - public array|null $cache = null; - - /** - * The ReflectionClass instance of the mapped class. - * - * @var ReflectionClass|null - */ - public ReflectionClass|null $reflClass = null; - - /** - * Is this entity marked as "read-only"? - * - * That means it is never considered for change-tracking in the UnitOfWork. It is a very helpful performance - * optimization for entities that are immutable, either in your domain or through the relation database - * (coming from a view, or a history table for example). - */ - public bool $isReadOnly = false; - - /** - * NamingStrategy determining the default column and table names. - */ - protected NamingStrategy $namingStrategy; - - /** - * The ReflectionProperty instances of the mapped class. - * - * @var array - */ - public array $reflFields = []; - - private InstantiatorInterface|null $instantiator = null; - - private readonly TypedFieldMapper $typedFieldMapper; - - /** - * Initializes a new ClassMetadata instance that will hold the object-relational mapping - * metadata of the class with the given name. - * - * @param string $name The name of the entity class the new instance is used for. - * @psalm-param class-string $name - */ - public function __construct(public string $name, NamingStrategy|null $namingStrategy = null, TypedFieldMapper|null $typedFieldMapper = null) - { - $this->rootEntityName = $name; - $this->namingStrategy = $namingStrategy ?? new DefaultNamingStrategy(); - $this->instantiator = new Instantiator(); - $this->typedFieldMapper = $typedFieldMapper ?? new DefaultTypedFieldMapper(); - } - - /** - * Gets the ReflectionProperties of the mapped class. - * - * @return ReflectionProperty[]|null[] An array of ReflectionProperty instances. - * @psalm-return array - */ - public function getReflectionProperties(): array - { - return $this->reflFields; - } - - /** - * Gets a ReflectionProperty for a specific field of the mapped class. - */ - public function getReflectionProperty(string $name): ReflectionProperty|null - { - return $this->reflFields[$name]; - } - - /** - * Gets the ReflectionProperty for the single identifier field. - * - * @throws BadMethodCallException If the class has a composite identifier. - */ - public function getSingleIdReflectionProperty(): ReflectionProperty|null - { - if ($this->isIdentifierComposite) { - throw new BadMethodCallException('Class ' . $this->name . ' has a composite identifier.'); - } - - return $this->reflFields[$this->identifier[0]]; - } - - /** - * Extracts the identifier values of an entity of this class. - * - * For composite identifiers, the identifier values are returned as an array - * with the same order as the field order in {@link identifier}. - * - * @return array - */ - public function getIdentifierValues(object $entity): array - { - if ($this->isIdentifierComposite) { - $id = []; - - foreach ($this->identifier as $idField) { - $value = $this->reflFields[$idField]->getValue($entity); - - if ($value !== null) { - $id[$idField] = $value; - } - } - - return $id; - } - - $id = $this->identifier[0]; - $value = $this->reflFields[$id]->getValue($entity); - - if ($value === null) { - return []; - } - - return [$id => $value]; - } - - /** - * Populates the entity identifier of an entity. - * - * @psalm-param array $id - * - * @todo Rename to assignIdentifier() - */ - public function setIdentifierValues(object $entity, array $id): void - { - foreach ($id as $idField => $idValue) { - $this->reflFields[$idField]->setValue($entity, $idValue); - } - } - - /** - * Sets the specified field to the specified value on the given entity. - */ - public function setFieldValue(object $entity, string $field, mixed $value): void - { - $this->reflFields[$field]->setValue($entity, $value); - } - - /** - * Gets the specified field's value off the given entity. - */ - public function getFieldValue(object $entity, string $field): mixed - { - return $this->reflFields[$field]->getValue($entity); - } - - /** - * Creates a string representation of this instance. - * - * @return string The string representation of this instance. - * - * @todo Construct meaningful string representation. - */ - public function __toString(): string - { - return self::class . '@' . spl_object_id($this); - } - - /** - * Determines which fields get serialized. - * - * It is only serialized what is necessary for best unserialization performance. - * That means any metadata properties that are not set or empty or simply have - * their default value are NOT serialized. - * - * Parts that are also NOT serialized because they can not be properly unserialized: - * - reflClass (ReflectionClass) - * - reflFields (ReflectionProperty array) - * - * @return string[] The names of all the fields that should be serialized. - */ - public function __sleep(): array - { - // This metadata is always serialized/cached. - $serialized = [ - 'associationMappings', - 'columnNames', //TODO: 3.0 Remove this. Can use fieldMappings[$fieldName]['columnName'] - 'fieldMappings', - 'fieldNames', - 'embeddedClasses', - 'identifier', - 'isIdentifierComposite', // TODO: REMOVE - 'name', - 'namespace', // TODO: REMOVE - 'table', - 'rootEntityName', - 'idGenerator', //TODO: Does not really need to be serialized. Could be moved to runtime. - ]; - - // The rest of the metadata is only serialized if necessary. - if ($this->changeTrackingPolicy !== self::CHANGETRACKING_DEFERRED_IMPLICIT) { - $serialized[] = 'changeTrackingPolicy'; - } - - if ($this->customRepositoryClassName) { - $serialized[] = 'customRepositoryClassName'; - } - - if ($this->inheritanceType !== self::INHERITANCE_TYPE_NONE) { - $serialized[] = 'inheritanceType'; - $serialized[] = 'discriminatorColumn'; - $serialized[] = 'discriminatorValue'; - $serialized[] = 'discriminatorMap'; - $serialized[] = 'parentClasses'; - $serialized[] = 'subClasses'; - } - - if ($this->generatorType !== self::GENERATOR_TYPE_NONE) { - $serialized[] = 'generatorType'; - if ($this->generatorType === self::GENERATOR_TYPE_SEQUENCE) { - $serialized[] = 'sequenceGeneratorDefinition'; - } - } - - if ($this->isMappedSuperclass) { - $serialized[] = 'isMappedSuperclass'; - } - - if ($this->isEmbeddedClass) { - $serialized[] = 'isEmbeddedClass'; - } - - if ($this->containsForeignIdentifier) { - $serialized[] = 'containsForeignIdentifier'; - } - - if ($this->containsEnumIdentifier) { - $serialized[] = 'containsEnumIdentifier'; - } - - if ($this->isVersioned) { - $serialized[] = 'isVersioned'; - $serialized[] = 'versionField'; - } - - if ($this->lifecycleCallbacks) { - $serialized[] = 'lifecycleCallbacks'; - } - - if ($this->entityListeners) { - $serialized[] = 'entityListeners'; - } - - if ($this->isReadOnly) { - $serialized[] = 'isReadOnly'; - } - - if ($this->customGeneratorDefinition) { - $serialized[] = 'customGeneratorDefinition'; - } - - if ($this->cache) { - $serialized[] = 'cache'; - } - - if ($this->requiresFetchAfterChange) { - $serialized[] = 'requiresFetchAfterChange'; - } - - return $serialized; - } - - /** - * Creates a new instance of the mapped class, without invoking the constructor. - */ - public function newInstance(): object - { - return $this->instantiator->instantiate($this->name); - } - - /** - * Restores some state that can not be serialized/unserialized. - */ - public function wakeupReflection(ReflectionService $reflService): void - { - // Restore ReflectionClass and properties - $this->reflClass = $reflService->getClass($this->name); - $this->instantiator = $this->instantiator ?: new Instantiator(); - - $parentReflFields = []; - - foreach ($this->embeddedClasses as $property => $embeddedClass) { - if (isset($embeddedClass->declaredField)) { - assert($embeddedClass->originalField !== null); - $childProperty = $this->getAccessibleProperty( - $reflService, - $this->embeddedClasses[$embeddedClass->declaredField]->class, - $embeddedClass->originalField, - ); - assert($childProperty !== null); - $parentReflFields[$property] = new ReflectionEmbeddedProperty( - $parentReflFields[$embeddedClass->declaredField], - $childProperty, - $this->embeddedClasses[$embeddedClass->declaredField]->class, - ); - - continue; - } - - $fieldRefl = $this->getAccessibleProperty( - $reflService, - $embeddedClass->declared ?? $this->name, - $property, - ); - - $parentReflFields[$property] = $fieldRefl; - $this->reflFields[$property] = $fieldRefl; - } - - foreach ($this->fieldMappings as $field => $mapping) { - if (isset($mapping->declaredField) && isset($parentReflFields[$mapping->declaredField])) { - assert($mapping->originalField !== null); - assert($mapping->originalClass !== null); - $childProperty = $this->getAccessibleProperty($reflService, $mapping->originalClass, $mapping->originalField); - assert($childProperty !== null); - - if (isset($mapping->enumType)) { - $childProperty = new EnumReflectionProperty( - $childProperty, - $mapping->enumType, - ); - } - - $this->reflFields[$field] = new ReflectionEmbeddedProperty( - $parentReflFields[$mapping->declaredField], - $childProperty, - $mapping->originalClass, - ); - continue; - } - - $this->reflFields[$field] = isset($mapping->declared) - ? $this->getAccessibleProperty($reflService, $mapping->declared, $field) - : $this->getAccessibleProperty($reflService, $this->name, $field); - - if (isset($mapping->enumType) && $this->reflFields[$field] !== null) { - $this->reflFields[$field] = new EnumReflectionProperty( - $this->reflFields[$field], - $mapping->enumType, - ); - } - } - - foreach ($this->associationMappings as $field => $mapping) { - $this->reflFields[$field] = isset($mapping->declared) - ? $this->getAccessibleProperty($reflService, $mapping->declared, $field) - : $this->getAccessibleProperty($reflService, $this->name, $field); - } - } - - /** - * Initializes a new ClassMetadata instance that will hold the object-relational mapping - * metadata of the class with the given name. - * - * @param ReflectionService $reflService The reflection service. - */ - public function initializeReflection(ReflectionService $reflService): void - { - $this->reflClass = $reflService->getClass($this->name); - $this->namespace = $reflService->getClassNamespace($this->name); - - if ($this->reflClass) { - $this->name = $this->rootEntityName = $this->reflClass->name; - } - - $this->table['name'] = $this->namingStrategy->classToTableName($this->name); - } - - /** - * Validates Identifier. - * - * @throws MappingException - */ - public function validateIdentifier(): void - { - if ($this->isMappedSuperclass || $this->isEmbeddedClass) { - return; - } - - // Verify & complete identifier mapping - if (! $this->identifier) { - throw MappingException::identifierRequired($this->name); - } - - if ($this->usesIdGenerator() && $this->isIdentifierComposite) { - throw MappingException::compositeKeyAssignedIdGeneratorRequired($this->name); - } - } - - /** - * Validates association targets actually exist. - * - * @throws MappingException - */ - public function validateAssociations(): void - { - foreach ($this->associationMappings as $mapping) { - if ( - ! class_exists($mapping->targetEntity) - && ! interface_exists($mapping->targetEntity) - && ! trait_exists($mapping->targetEntity) - ) { - throw MappingException::invalidTargetEntityClass($mapping->targetEntity, $this->name, $mapping->fieldName); - } - } - } - - /** - * Validates lifecycle callbacks. - * - * @throws MappingException - */ - public function validateLifecycleCallbacks(ReflectionService $reflService): void - { - foreach ($this->lifecycleCallbacks as $callbacks) { - foreach ($callbacks as $callbackFuncName) { - if (! $reflService->hasPublicMethod($this->name, $callbackFuncName)) { - throw MappingException::lifecycleCallbackMethodNotFound($this->name, $callbackFuncName); - } - } - } - } - - /** - * {@inheritDoc} - * - * Can return null when using static reflection, in violation of the LSP - */ - public function getReflectionClass(): ReflectionClass|null - { - return $this->reflClass; - } - - /** @psalm-param array{usage?: mixed, region?: mixed} $cache */ - public function enableCache(array $cache): void - { - if (! isset($cache['usage'])) { - $cache['usage'] = self::CACHE_USAGE_READ_ONLY; - } - - if (! isset($cache['region'])) { - $cache['region'] = strtolower(str_replace('\\', '_', $this->rootEntityName)); - } - - $this->cache = $cache; - } - - /** @psalm-param array{usage?: int, region?: string} $cache */ - public function enableAssociationCache(string $fieldName, array $cache): void - { - $this->associationMappings[$fieldName]->cache = $this->getAssociationCacheDefaults($fieldName, $cache); - } - - /** - * @psalm-param array{usage?: int, region?: string|null} $cache - * - * @return int[]|string[] - * @psalm-return array{usage: int, region: string|null} - */ - public function getAssociationCacheDefaults(string $fieldName, array $cache): array - { - if (! isset($cache['usage'])) { - $cache['usage'] = $this->cache['usage'] ?? self::CACHE_USAGE_READ_ONLY; - } - - if (! isset($cache['region'])) { - $cache['region'] = strtolower(str_replace('\\', '_', $this->rootEntityName)) . '__' . $fieldName; - } - - return $cache; - } - - /** - * Sets the change tracking policy used by this class. - */ - public function setChangeTrackingPolicy(int $policy): void - { - $this->changeTrackingPolicy = $policy; - } - - /** - * Whether the change tracking policy of this class is "deferred explicit". - */ - public function isChangeTrackingDeferredExplicit(): bool - { - return $this->changeTrackingPolicy === self::CHANGETRACKING_DEFERRED_EXPLICIT; - } - - /** - * Whether the change tracking policy of this class is "deferred implicit". - */ - public function isChangeTrackingDeferredImplicit(): bool - { - return $this->changeTrackingPolicy === self::CHANGETRACKING_DEFERRED_IMPLICIT; - } - - /** - * Checks whether a field is part of the identifier/primary key field(s). - */ - public function isIdentifier(string $fieldName): bool - { - if (! $this->identifier) { - return false; - } - - if (! $this->isIdentifierComposite) { - return $fieldName === $this->identifier[0]; - } - - return in_array($fieldName, $this->identifier, true); - } - - public function isUniqueField(string $fieldName): bool - { - $mapping = $this->getFieldMapping($fieldName); - - return $mapping !== false && isset($mapping->unique) && $mapping->unique; - } - - public function isNullable(string $fieldName): bool - { - $mapping = $this->getFieldMapping($fieldName); - - return $mapping !== false && isset($mapping->nullable) && $mapping->nullable; - } - - /** - * Gets a column name for a field name. - * If the column name for the field cannot be found, the given field name - * is returned. - */ - public function getColumnName(string $fieldName): string - { - return $this->columnNames[$fieldName] ?? $fieldName; - } - - /** - * Gets the mapping of a (regular) field that holds some data but not a - * reference to another object. - * - * @throws MappingException - */ - public function getFieldMapping(string $fieldName): FieldMapping - { - if (! isset($this->fieldMappings[$fieldName])) { - throw MappingException::mappingNotFound($this->name, $fieldName); - } - - return $this->fieldMappings[$fieldName]; - } - - /** - * Gets the mapping of an association. - * - * @see ClassMetadata::$associationMappings - * - * @param string $fieldName The field name that represents the association in - * the object model. - * - * @throws MappingException - */ - public function getAssociationMapping(string $fieldName): AssociationMapping - { - if (! isset($this->associationMappings[$fieldName])) { - throw MappingException::mappingNotFound($this->name, $fieldName); - } - - return $this->associationMappings[$fieldName]; - } - - /** - * Gets all association mappings of the class. - * - * @psalm-return array - */ - public function getAssociationMappings(): array - { - return $this->associationMappings; - } - - /** - * Gets the field name for a column name. - * If no field name can be found the column name is returned. - * - * @return string The column alias. - */ - public function getFieldName(string $columnName): string - { - return $this->fieldNames[$columnName] ?? $columnName; - } - - /** - * Checks whether given property has type - */ - private function isTypedProperty(string $name): bool - { - return isset($this->reflClass) - && $this->reflClass->hasProperty($name) - && $this->reflClass->getProperty($name)->hasType(); - } - - /** - * Validates & completes the given field mapping based on typed property. - * - * @param array{fieldName: string, type?: string} $mapping The field mapping to validate & complete. - * - * @return array{fieldName: string, enumType?: class-string, type?: string} The updated mapping. - */ - private function validateAndCompleteTypedFieldMapping(array $mapping): array - { - $field = $this->reflClass->getProperty($mapping['fieldName']); - - $mapping = $this->typedFieldMapper->validateAndComplete($mapping, $field); - - return $mapping; - } - - /** - * Validates & completes the basic mapping information based on typed property. - * - * @param array{type: self::ONE_TO_ONE|self::MANY_TO_ONE|self::ONE_TO_MANY|self::MANY_TO_MANY, fieldName: string, targetEntity?: class-string} $mapping The mapping. - * - * @return mixed[] The updated mapping. - */ - private function validateAndCompleteTypedAssociationMapping(array $mapping): array - { - $type = $this->reflClass->getProperty($mapping['fieldName'])->getType(); - - if ($type === null || ($mapping['type'] & self::TO_ONE) === 0) { - return $mapping; - } - - if (! isset($mapping['targetEntity']) && $type instanceof ReflectionNamedType) { - $mapping['targetEntity'] = $type->getName(); - } - - return $mapping; - } - - /** - * Validates & completes the given field mapping. - * - * @psalm-param array{ - * fieldName?: string, - * columnName?: string, - * id?: bool, - * generated?: self::GENERATED_*, - * enumType?: class-string, - * } $mapping The field mapping to validate & complete. - * - * @return FieldMapping The updated mapping. - * - * @throws MappingException - */ - protected function validateAndCompleteFieldMapping(array $mapping): FieldMapping - { - // Check mandatory fields - if (! isset($mapping['fieldName']) || ! $mapping['fieldName']) { - throw MappingException::missingFieldName($this->name); - } - - if ($this->isTypedProperty($mapping['fieldName'])) { - $mapping = $this->validateAndCompleteTypedFieldMapping($mapping); - } - - if (! isset($mapping['type'])) { - // Default to string - $mapping['type'] = 'string'; - } - - // Complete fieldName and columnName mapping - if (! isset($mapping['columnName'])) { - $mapping['columnName'] = $this->namingStrategy->propertyToColumnName($mapping['fieldName'], $this->name); - } - - $mapping = FieldMapping::fromMappingArray($mapping); - - if ($mapping->columnName[0] === '`') { - $mapping->columnName = trim($mapping->columnName, '`'); - $mapping->quoted = true; - } - - $this->columnNames[$mapping->fieldName] = $mapping->columnName; - - if (isset($this->fieldNames[$mapping->columnName]) || ($this->discriminatorColumn && $this->discriminatorColumn->name === $mapping->columnName)) { - throw MappingException::duplicateColumnName($this->name, $mapping->columnName); - } - - $this->fieldNames[$mapping->columnName] = $mapping->fieldName; - - // Complete id mapping - if (isset($mapping->id) && $mapping->id === true) { - if ($this->versionField === $mapping->fieldName) { - throw MappingException::cannotVersionIdField($this->name, $mapping->fieldName); - } - - if (! in_array($mapping->fieldName, $this->identifier, true)) { - $this->identifier[] = $mapping->fieldName; - } - - // Check for composite key - if (! $this->isIdentifierComposite && count($this->identifier) > 1) { - $this->isIdentifierComposite = true; - } - } - - if (isset($mapping->generated)) { - if (! in_array($mapping->generated, [self::GENERATED_NEVER, self::GENERATED_INSERT, self::GENERATED_ALWAYS])) { - throw MappingException::invalidGeneratedMode($mapping->generated); - } - - if ($mapping->generated === self::GENERATED_NEVER) { - unset($mapping->generated); - } - } - - if (isset($mapping->enumType)) { - if (! enum_exists($mapping->enumType)) { - throw MappingException::nonEnumTypeMapped($this->name, $mapping->fieldName, $mapping->enumType); - } - - if (! empty($mapping->id)) { - $this->containsEnumIdentifier = true; - } - } - - return $mapping; - } - - /** - * Validates & completes the basic mapping information that is common to all - * association mappings (one-to-one, many-ot-one, one-to-many, many-to-many). - * - * @psalm-param array $mapping The mapping. - * - * @return ConcreteAssociationMapping - * - * @throws MappingException If something is wrong with the mapping. - */ - protected function _validateAndCompleteAssociationMapping(array $mapping): AssociationMapping - { - if (array_key_exists('mappedBy', $mapping) && $mapping['mappedBy'] === null) { - unset($mapping['mappedBy']); - } - - if (array_key_exists('inversedBy', $mapping) && $mapping['inversedBy'] === null) { - unset($mapping['inversedBy']); - } - - if (array_key_exists('joinColumns', $mapping) && in_array($mapping['joinColumns'], [null, []], true)) { - unset($mapping['joinColumns']); - } - - $mapping['isOwningSide'] = true; // assume owning side until we hit mappedBy - - if (empty($mapping['indexBy'])) { - unset($mapping['indexBy']); - } - - // If targetEntity is unqualified, assume it is in the same namespace as - // the sourceEntity. - $mapping['sourceEntity'] = $this->name; - - if ($this->isTypedProperty($mapping['fieldName'])) { - $mapping = $this->validateAndCompleteTypedAssociationMapping($mapping); - } - - if (isset($mapping['targetEntity'])) { - $mapping['targetEntity'] = $this->fullyQualifiedClassName($mapping['targetEntity']); - $mapping['targetEntity'] = ltrim($mapping['targetEntity'], '\\'); - } - - if (($mapping['type'] & self::MANY_TO_ONE) > 0 && isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']) { - throw MappingException::illegalOrphanRemoval($this->name, $mapping['fieldName']); - } - - // Complete id mapping - if (isset($mapping['id']) && $mapping['id'] === true) { - if (isset($mapping['orphanRemoval']) && $mapping['orphanRemoval']) { - throw MappingException::illegalOrphanRemovalOnIdentifierAssociation($this->name, $mapping['fieldName']); - } - - if (! in_array($mapping['fieldName'], $this->identifier, true)) { - if (isset($mapping['joinColumns']) && count($mapping['joinColumns']) >= 2) { - throw MappingException::cannotMapCompositePrimaryKeyEntitiesAsForeignId( - $mapping['targetEntity'], - $this->name, - $mapping['fieldName'], - ); - } - - assert(is_string($mapping['fieldName'])); - $this->identifier[] = $mapping['fieldName']; - $this->containsForeignIdentifier = true; - } - - // Check for composite key - if (! $this->isIdentifierComposite && count($this->identifier) > 1) { - $this->isIdentifierComposite = true; - } - - if ($this->cache && ! isset($mapping['cache'])) { - throw NonCacheableEntityAssociation::fromEntityAndField( - $this->name, - $mapping['fieldName'], - ); - } - } - - // Mandatory attributes for both sides - // Mandatory: fieldName, targetEntity - if (! isset($mapping['fieldName']) || ! $mapping['fieldName']) { - throw MappingException::missingFieldName($this->name); - } - - if (! isset($mapping['targetEntity'])) { - throw MappingException::missingTargetEntity($mapping['fieldName']); - } - - // Mandatory and optional attributes for either side - if (! isset($mapping['mappedBy'])) { - if (isset($mapping['joinTable'])) { - if (isset($mapping['joinTable']['name']) && $mapping['joinTable']['name'][0] === '`') { - $mapping['joinTable']['name'] = trim($mapping['joinTable']['name'], '`'); - $mapping['joinTable']['quoted'] = true; - } - } - } else { - $mapping['isOwningSide'] = false; - } - - if (isset($mapping['id']) && $mapping['id'] === true && $mapping['type'] & self::TO_MANY) { - throw MappingException::illegalToManyIdentifierAssociation($this->name, $mapping['fieldName']); - } - - // Fetch mode. Default fetch mode to LAZY, if not set. - if (! isset($mapping['fetch'])) { - $mapping['fetch'] = self::FETCH_LAZY; - } - - // Cascades - $cascades = isset($mapping['cascade']) ? array_map('strtolower', $mapping['cascade']) : []; - - $allCascades = ['remove', 'persist', 'refresh', 'detach']; - if (in_array('all', $cascades, true)) { - $cascades = $allCascades; - } elseif (count($cascades) !== count(array_intersect($cascades, $allCascades))) { - throw MappingException::invalidCascadeOption( - array_diff($cascades, $allCascades), - $this->name, - $mapping['fieldName'], - ); - } - - $mapping['cascade'] = $cascades; - - switch ($mapping['type']) { - case self::ONE_TO_ONE: - if (isset($mapping['joinColumns']) && $mapping['joinColumns'] && ! $mapping['isOwningSide']) { - throw MappingException::joinColumnNotAllowedOnOneToOneInverseSide( - $this->name, - $mapping['fieldName'], - ); - } - - return $mapping['isOwningSide'] ? - OneToOneOwningSideMapping::fromMappingArrayAndName( - $mapping, - $this->namingStrategy, - $this->name, - $this->table ?? null, - $this->isInheritanceTypeSingleTable(), - ) : - OneToOneInverseSideMapping::fromMappingArrayAndName($mapping, $this->name); - - case self::MANY_TO_ONE: - return ManyToOneAssociationMapping::fromMappingArrayAndName( - $mapping, - $this->namingStrategy, - $this->name, - $this->table ?? null, - $this->isInheritanceTypeSingleTable(), - ); - - case self::ONE_TO_MANY: - return OneToManyAssociationMapping::fromMappingArrayAndName($mapping, $this->name); - - case self::MANY_TO_MANY: - if (isset($mapping['joinColumns'])) { - unset($mapping['joinColumns']); - } - - return $mapping['isOwningSide'] ? - ManyToManyOwningSideMapping::fromMappingArrayAndNamingStrategy($mapping, $this->namingStrategy) : - ManyToManyInverseSideMapping::fromMappingArray($mapping); - - default: - throw MappingException::invalidAssociationType( - $this->name, - $mapping['fieldName'], - $mapping['type'], - ); - } - } - - /** - * {@inheritDoc} - */ - public function getIdentifierFieldNames(): array - { - return $this->identifier; - } - - /** - * Gets the name of the single id field. Note that this only works on - * entity classes that have a single-field pk. - * - * @throws MappingException If the class doesn't have an identifier or it has a composite primary key. - */ - public function getSingleIdentifierFieldName(): string - { - if ($this->isIdentifierComposite) { - throw MappingException::singleIdNotAllowedOnCompositePrimaryKey($this->name); - } - - if (! isset($this->identifier[0])) { - throw MappingException::noIdDefined($this->name); - } - - return $this->identifier[0]; - } - - /** - * Gets the column name of the single id column. Note that this only works on - * entity classes that have a single-field pk. - * - * @throws MappingException If the class doesn't have an identifier or it has a composite primary key. - */ - public function getSingleIdentifierColumnName(): string - { - return $this->getColumnName($this->getSingleIdentifierFieldName()); - } - - /** - * INTERNAL: - * Sets the mapped identifier/primary key fields of this class. - * Mainly used by the ClassMetadataFactory to assign inherited identifiers. - * - * @psalm-param list $identifier - */ - public function setIdentifier(array $identifier): void - { - $this->identifier = $identifier; - $this->isIdentifierComposite = (count($this->identifier) > 1); - } - - /** - * {@inheritDoc} - */ - public function getIdentifier(): array - { - return $this->identifier; - } - - public function hasField(string $fieldName): bool - { - return isset($this->fieldMappings[$fieldName]) || isset($this->embeddedClasses[$fieldName]); - } - - /** - * Gets an array containing all the column names. - * - * @psalm-param list|null $fieldNames - * - * @return mixed[] - * @psalm-return list - */ - public function getColumnNames(array|null $fieldNames = null): array - { - if ($fieldNames === null) { - return array_keys($this->fieldNames); - } - - return array_values(array_map($this->getColumnName(...), $fieldNames)); - } - - /** - * Returns an array with all the identifier column names. - * - * @psalm-return list - */ - public function getIdentifierColumnNames(): array - { - $columnNames = []; - - foreach ($this->identifier as $idProperty) { - if (isset($this->fieldMappings[$idProperty])) { - $columnNames[] = $this->fieldMappings[$idProperty]->columnName; - - continue; - } - - // Association defined as Id field - assert($this->associationMappings[$idProperty]->isToOneOwningSide()); - $joinColumns = $this->associationMappings[$idProperty]->joinColumns; - $assocColumnNames = array_map(static fn (JoinColumnMapping $joinColumn): string => $joinColumn->name, $joinColumns); - - $columnNames = array_merge($columnNames, $assocColumnNames); - } - - return $columnNames; - } - - /** - * Sets the type of Id generator to use for the mapped class. - * - * @psalm-param self::GENERATOR_TYPE_* $generatorType - */ - public function setIdGeneratorType(int $generatorType): void - { - $this->generatorType = $generatorType; - } - - /** - * Checks whether the mapped class uses an Id generator. - */ - public function usesIdGenerator(): bool - { - return $this->generatorType !== self::GENERATOR_TYPE_NONE; - } - - public function isInheritanceTypeNone(): bool - { - return $this->inheritanceType === self::INHERITANCE_TYPE_NONE; - } - - /** - * Checks whether the mapped class uses the JOINED inheritance mapping strategy. - * - * @return bool TRUE if the class participates in a JOINED inheritance mapping, - * FALSE otherwise. - */ - public function isInheritanceTypeJoined(): bool - { - return $this->inheritanceType === self::INHERITANCE_TYPE_JOINED; - } - - /** - * Checks whether the mapped class uses the SINGLE_TABLE inheritance mapping strategy. - * - * @return bool TRUE if the class participates in a SINGLE_TABLE inheritance mapping, - * FALSE otherwise. - */ - public function isInheritanceTypeSingleTable(): bool - { - return $this->inheritanceType === self::INHERITANCE_TYPE_SINGLE_TABLE; - } - - /** - * Checks whether the class uses an identity column for the Id generation. - */ - public function isIdGeneratorIdentity(): bool - { - return $this->generatorType === self::GENERATOR_TYPE_IDENTITY; - } - - /** - * Checks whether the class uses a sequence for id generation. - * - * @psalm-assert-if-true !null $this->sequenceGeneratorDefinition - */ - public function isIdGeneratorSequence(): bool - { - return $this->generatorType === self::GENERATOR_TYPE_SEQUENCE; - } - - /** - * Checks whether the class has a natural identifier/pk (which means it does - * not use any Id generator. - */ - public function isIdentifierNatural(): bool - { - return $this->generatorType === self::GENERATOR_TYPE_NONE; - } - - /** - * Gets the type of a field. - * - * @todo 3.0 Remove this. PersisterHelper should fix it somehow - */ - public function getTypeOfField(string $fieldName): string|null - { - return isset($this->fieldMappings[$fieldName]) - ? $this->fieldMappings[$fieldName]->type - : null; - } - - /** - * Gets the name of the primary table. - */ - public function getTableName(): string - { - return $this->table['name']; - } - - /** - * Gets primary table's schema name. - */ - public function getSchemaName(): string|null - { - return $this->table['schema'] ?? null; - } - - /** - * Gets the table name to use for temporary identifier tables of this class. - */ - public function getTemporaryIdTableName(): string - { - // replace dots with underscores because PostgreSQL creates temporary tables in a special schema - return str_replace('.', '_', $this->getTableName() . '_id_tmp'); - } - - /** - * Sets the mapped subclasses of this class. - * - * @psalm-param list $subclasses The names of all mapped subclasses. - */ - public function setSubclasses(array $subclasses): void - { - foreach ($subclasses as $subclass) { - $this->subClasses[] = $this->fullyQualifiedClassName($subclass); - } - } - - /** - * Sets the parent class names. Only entity classes may be given. - * - * Assumes that the class names in the passed array are in the order: - * directParent -> directParentParent -> directParentParentParent ... -> root. - * - * @psalm-param list $classNames - */ - public function setParentClasses(array $classNames): void - { - $this->parentClasses = $classNames; - - if (count($classNames) > 0) { - $this->rootEntityName = array_pop($classNames); - } - } - - /** - * Sets the inheritance type used by the class and its subclasses. - * - * @psalm-param self::INHERITANCE_TYPE_* $type - * - * @throws MappingException - */ - public function setInheritanceType(int $type): void - { - if (! $this->isInheritanceType($type)) { - throw MappingException::invalidInheritanceType($this->name, $type); - } - - $this->inheritanceType = $type; - } - - /** - * Sets the association to override association mapping of property for an entity relationship. - * - * @psalm-param array $overrideMapping - * - * @throws MappingException - */ - public function setAssociationOverride(string $fieldName, array $overrideMapping): void - { - if (! isset($this->associationMappings[$fieldName])) { - throw MappingException::invalidOverrideFieldName($this->name, $fieldName); - } - - $mapping = $this->associationMappings[$fieldName]->toArray(); - - if (isset($mapping['inherited'])) { - throw MappingException::illegalOverrideOfInheritedProperty( - $this->name, - $fieldName, - $mapping['inherited'], - ); - } - - if (isset($overrideMapping['joinColumns'])) { - $mapping['joinColumns'] = $overrideMapping['joinColumns']; - } - - if (isset($overrideMapping['inversedBy'])) { - $mapping['inversedBy'] = $overrideMapping['inversedBy']; - } - - if (isset($overrideMapping['joinTable'])) { - $mapping['joinTable'] = $overrideMapping['joinTable']; - } - - if (isset($overrideMapping['fetch'])) { - $mapping['fetch'] = $overrideMapping['fetch']; - } - - switch ($mapping['type']) { - case self::ONE_TO_ONE: - case self::MANY_TO_ONE: - $mapping['joinColumnFieldNames'] = []; - $mapping['sourceToTargetKeyColumns'] = []; - break; - case self::MANY_TO_MANY: - $mapping['relationToSourceKeyColumns'] = []; - $mapping['relationToTargetKeyColumns'] = []; - break; - } - - $this->associationMappings[$fieldName] = $this->_validateAndCompleteAssociationMapping($mapping); - } - - /** - * Sets the override for a mapped field. - * - * @psalm-param array $overrideMapping - * - * @throws MappingException - */ - public function setAttributeOverride(string $fieldName, array $overrideMapping): void - { - if (! isset($this->fieldMappings[$fieldName])) { - throw MappingException::invalidOverrideFieldName($this->name, $fieldName); - } - - $mapping = $this->fieldMappings[$fieldName]; - - if (isset($mapping->inherited)) { - throw MappingException::illegalOverrideOfInheritedProperty($this->name, $fieldName, $mapping->inherited); - } - - if (isset($mapping->id)) { - $overrideMapping['id'] = $mapping->id; - } - - if (isset($mapping->declared)) { - $overrideMapping['declared'] = $mapping->declared; - } - - if (! isset($overrideMapping['type'])) { - $overrideMapping['type'] = $mapping->type; - } - - if (! isset($overrideMapping['fieldName'])) { - $overrideMapping['fieldName'] = $mapping->fieldName; - } - - if ($overrideMapping['type'] !== $mapping->type) { - throw MappingException::invalidOverrideFieldType($this->name, $fieldName); - } - - unset($this->fieldMappings[$fieldName]); - unset($this->fieldNames[$mapping->columnName]); - unset($this->columnNames[$mapping->fieldName]); - - $overrideMapping = $this->validateAndCompleteFieldMapping($overrideMapping); - - $this->fieldMappings[$fieldName] = $overrideMapping; - } - - /** - * Checks whether a mapped field is inherited from an entity superclass. - */ - public function isInheritedField(string $fieldName): bool - { - return isset($this->fieldMappings[$fieldName]->inherited); - } - - /** - * Checks if this entity is the root in any entity-inheritance-hierarchy. - */ - public function isRootEntity(): bool - { - return $this->name === $this->rootEntityName; - } - - /** - * Checks whether a mapped association field is inherited from a superclass. - */ - public function isInheritedAssociation(string $fieldName): bool - { - return isset($this->associationMappings[$fieldName]->inherited); - } - - public function isInheritedEmbeddedClass(string $fieldName): bool - { - return isset($this->embeddedClasses[$fieldName]->inherited); - } - - /** - * Sets the name of the primary table the class is mapped to. - * - * @deprecated Use {@link setPrimaryTable}. - */ - public function setTableName(string $tableName): void - { - $this->table['name'] = $tableName; - } - - /** - * Sets the primary table definition. The provided array supports the - * following structure: - * - * name => (optional, defaults to class name) - * indexes => array of indexes (optional) - * uniqueConstraints => array of constraints (optional) - * - * If a key is omitted, the current value is kept. - * - * @psalm-param array $table The table description. - */ - public function setPrimaryTable(array $table): void - { - if (isset($table['name'])) { - // Split schema and table name from a table name like "myschema.mytable" - if (str_contains($table['name'], '.')) { - [$this->table['schema'], $table['name']] = explode('.', $table['name'], 2); - } - - if ($table['name'][0] === '`') { - $table['name'] = trim($table['name'], '`'); - $this->table['quoted'] = true; - } - - $this->table['name'] = $table['name']; - } - - if (isset($table['quoted'])) { - $this->table['quoted'] = $table['quoted']; - } - - if (isset($table['schema'])) { - $this->table['schema'] = $table['schema']; - } - - if (isset($table['indexes'])) { - $this->table['indexes'] = $table['indexes']; - } - - if (isset($table['uniqueConstraints'])) { - $this->table['uniqueConstraints'] = $table['uniqueConstraints']; - } - - if (isset($table['options'])) { - $this->table['options'] = $table['options']; - } - } - - /** - * Checks whether the given type identifies an inheritance type. - */ - private function isInheritanceType(int $type): bool - { - return $type === self::INHERITANCE_TYPE_NONE || - $type === self::INHERITANCE_TYPE_SINGLE_TABLE || - $type === self::INHERITANCE_TYPE_JOINED; - } - - /** - * Adds a mapped field to the class. - * - * @psalm-param array $mapping The field mapping. - * - * @throws MappingException - */ - public function mapField(array $mapping): void - { - $mapping = $this->validateAndCompleteFieldMapping($mapping); - $this->assertFieldNotMapped($mapping->fieldName); - - if (isset($mapping->generated)) { - $this->requiresFetchAfterChange = true; - } - - $this->fieldMappings[$mapping->fieldName] = $mapping; - } - - /** - * INTERNAL: - * Adds an association mapping without completing/validating it. - * This is mainly used to add inherited association mappings to derived classes. - * - * @param ConcreteAssociationMapping $mapping - * - * @throws MappingException - */ - public function addInheritedAssociationMapping(AssociationMapping $mapping/*, $owningClassName = null*/): void - { - if (isset($this->associationMappings[$mapping->fieldName])) { - throw MappingException::duplicateAssociationMapping($this->name, $mapping->fieldName); - } - - $this->associationMappings[$mapping->fieldName] = $mapping; - } - - /** - * INTERNAL: - * Adds a field mapping without completing/validating it. - * This is mainly used to add inherited field mappings to derived classes. - */ - public function addInheritedFieldMapping(FieldMapping $fieldMapping): void - { - $this->fieldMappings[$fieldMapping->fieldName] = $fieldMapping; - $this->columnNames[$fieldMapping->fieldName] = $fieldMapping->columnName; - $this->fieldNames[$fieldMapping->columnName] = $fieldMapping->fieldName; - - if (isset($fieldMapping->generated)) { - $this->requiresFetchAfterChange = true; - } - } - - /** - * Adds a one-to-one mapping. - * - * @param array $mapping The mapping. - */ - public function mapOneToOne(array $mapping): void - { - $mapping['type'] = self::ONE_TO_ONE; - - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); - - $this->_storeAssociationMapping($mapping); - } - - /** - * Adds a one-to-many mapping. - * - * @psalm-param array $mapping The mapping. - */ - public function mapOneToMany(array $mapping): void - { - $mapping['type'] = self::ONE_TO_MANY; - - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); - - $this->_storeAssociationMapping($mapping); - } - - /** - * Adds a many-to-one mapping. - * - * @psalm-param array $mapping The mapping. - */ - public function mapManyToOne(array $mapping): void - { - $mapping['type'] = self::MANY_TO_ONE; - - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); - - $this->_storeAssociationMapping($mapping); - } - - /** - * Adds a many-to-many mapping. - * - * @psalm-param array $mapping The mapping. - */ - public function mapManyToMany(array $mapping): void - { - $mapping['type'] = self::MANY_TO_MANY; - - $mapping = $this->_validateAndCompleteAssociationMapping($mapping); - - $this->_storeAssociationMapping($mapping); - } - - /** - * Stores the association mapping. - * - * @param ConcreteAssociationMapping $assocMapping - * - * @throws MappingException - */ - protected function _storeAssociationMapping(AssociationMapping $assocMapping): void - { - $sourceFieldName = $assocMapping->fieldName; - - $this->assertFieldNotMapped($sourceFieldName); - - $this->associationMappings[$sourceFieldName] = $assocMapping; - } - - /** - * Registers a custom repository class for the entity class. - * - * @param string|null $repositoryClassName The class name of the custom mapper. - * @psalm-param class-string|null $repositoryClassName - */ - public function setCustomRepositoryClass(string|null $repositoryClassName): void - { - if ($repositoryClassName === null) { - $this->customRepositoryClassName = null; - - return; - } - - $this->customRepositoryClassName = $this->fullyQualifiedClassName($repositoryClassName); - } - - /** - * Dispatches the lifecycle event of the given entity to the registered - * lifecycle callbacks and lifecycle listeners. - * - * @deprecated Deprecated since version 2.4 in favor of \Doctrine\ORM\Event\ListenersInvoker - * - * @param string $lifecycleEvent The lifecycle event. - */ - public function invokeLifecycleCallbacks(string $lifecycleEvent, object $entity): void - { - foreach ($this->lifecycleCallbacks[$lifecycleEvent] as $callback) { - $entity->$callback(); - } - } - - /** - * Whether the class has any attached lifecycle listeners or callbacks for a lifecycle event. - */ - public function hasLifecycleCallbacks(string $lifecycleEvent): bool - { - return isset($this->lifecycleCallbacks[$lifecycleEvent]); - } - - /** - * Gets the registered lifecycle callbacks for an event. - * - * @return string[] - * @psalm-return list - */ - public function getLifecycleCallbacks(string $event): array - { - return $this->lifecycleCallbacks[$event] ?? []; - } - - /** - * Adds a lifecycle callback for entities of this class. - */ - public function addLifecycleCallback(string $callback, string $event): void - { - if ($this->isEmbeddedClass) { - throw MappingException::illegalLifecycleCallbackOnEmbeddedClass($callback, $this->name); - } - - if (isset($this->lifecycleCallbacks[$event]) && in_array($callback, $this->lifecycleCallbacks[$event], true)) { - return; - } - - $this->lifecycleCallbacks[$event][] = $callback; - } - - /** - * Sets the lifecycle callbacks for entities of this class. - * Any previously registered callbacks are overwritten. - * - * @psalm-param array> $callbacks - */ - public function setLifecycleCallbacks(array $callbacks): void - { - $this->lifecycleCallbacks = $callbacks; - } - - /** - * Adds a entity listener for entities of this class. - * - * @param string $eventName The entity lifecycle event. - * @param string $class The listener class. - * @param string $method The listener callback method. - * - * @throws MappingException - */ - public function addEntityListener(string $eventName, string $class, string $method): void - { - $class = $this->fullyQualifiedClassName($class); - - $listener = [ - 'class' => $class, - 'method' => $method, - ]; - - if (! class_exists($class)) { - throw MappingException::entityListenerClassNotFound($class, $this->name); - } - - if (! method_exists($class, $method)) { - throw MappingException::entityListenerMethodNotFound($class, $method, $this->name); - } - - if (isset($this->entityListeners[$eventName]) && in_array($listener, $this->entityListeners[$eventName], true)) { - throw MappingException::duplicateEntityListener($class, $method, $this->name); - } - - $this->entityListeners[$eventName][] = $listener; - } - - /** - * Sets the discriminator column definition. - * - * @see getDiscriminatorColumn() - * - * @param DiscriminatorColumnMapping|mixed[]|null $columnDef - * @psalm-param DiscriminatorColumnMapping|array{ - * name: string|null, - * fieldName?: string|null, - * type?: string|null, - * length?: int|null, - * columnDefinition?: string|null, - * enumType?: class-string|null, - * options?: array|null - * }|null $columnDef - * - * @throws MappingException - */ - public function setDiscriminatorColumn(DiscriminatorColumnMapping|array|null $columnDef): void - { - if ($columnDef instanceof DiscriminatorColumnMapping) { - $this->discriminatorColumn = $columnDef; - - return; - } - - if ($columnDef !== null) { - if (! isset($columnDef['name'])) { - throw MappingException::nameIsMandatoryForDiscriminatorColumns($this->name); - } - - if (isset($this->fieldNames[$columnDef['name']])) { - throw MappingException::duplicateColumnName($this->name, $columnDef['name']); - } - - $columnDef['fieldName'] ??= $columnDef['name']; - $columnDef['type'] ??= 'string'; - $columnDef['options'] ??= []; - - if (in_array($columnDef['type'], ['boolean', 'array', 'object', 'datetime', 'time', 'date'], true)) { - throw MappingException::invalidDiscriminatorColumnType($this->name, $columnDef['type']); - } - - $this->discriminatorColumn = DiscriminatorColumnMapping::fromMappingArray($columnDef); - } - } - - final public function getDiscriminatorColumn(): DiscriminatorColumnMapping - { - if ($this->discriminatorColumn === null) { - throw new LogicException('The discriminator column was not set.'); - } - - return $this->discriminatorColumn; - } - - /** - * Sets the discriminator values used by this class. - * Used for JOINED and SINGLE_TABLE inheritance mapping strategies. - * - * @param array $map - */ - public function setDiscriminatorMap(array $map): void - { - foreach ($map as $value => $className) { - $this->addDiscriminatorMapClass($value, $className); - } - } - - /** - * Adds one entry of the discriminator map with a new class and corresponding name. - * - * @throws MappingException - */ - public function addDiscriminatorMapClass(int|string $name, string $className): void - { - $className = $this->fullyQualifiedClassName($className); - $className = ltrim($className, '\\'); - - $this->discriminatorMap[$name] = $className; - - if ($this->name === $className) { - $this->discriminatorValue = $name; - - return; - } - - if (! (class_exists($className) || interface_exists($className))) { - throw MappingException::invalidClassInDiscriminatorMap($className, $this->name); - } - - $this->addSubClass($className); - } - - /** @param array $classes */ - public function addSubClasses(array $classes): void - { - foreach ($classes as $className) { - $this->addSubClass($className); - } - } - - public function addSubClass(string $className): void - { - // By ignoring classes that are not subclasses of the current class, we simplify inheriting - // the subclass list from a parent class at the beginning of \Doctrine\ORM\Mapping\ClassMetadataFactory::doLoadMetadata. - - if (is_subclass_of($className, $this->name) && ! in_array($className, $this->subClasses, true)) { - $this->subClasses[] = $className; - } - } - - public function hasAssociation(string $fieldName): bool - { - return isset($this->associationMappings[$fieldName]); - } - - public function isSingleValuedAssociation(string $fieldName): bool - { - return isset($this->associationMappings[$fieldName]) - && ($this->associationMappings[$fieldName]->isToOne()); - } - - public function isCollectionValuedAssociation(string $fieldName): bool - { - return isset($this->associationMappings[$fieldName]) - && ! $this->associationMappings[$fieldName]->isToOne(); - } - - /** - * Is this an association that only has a single join column? - */ - public function isAssociationWithSingleJoinColumn(string $fieldName): bool - { - return isset($this->associationMappings[$fieldName]) - && isset($this->associationMappings[$fieldName]->joinColumns[0]) - && ! isset($this->associationMappings[$fieldName]->joinColumns[1]); - } - - /** - * Returns the single association join column (if any). - * - * @throws MappingException - */ - public function getSingleAssociationJoinColumnName(string $fieldName): string - { - if (! $this->isAssociationWithSingleJoinColumn($fieldName)) { - throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); - } - - $assoc = $this->associationMappings[$fieldName]; - - assert($assoc->isToOneOwningSide()); - - return $assoc->joinColumns[0]->name; - } - - /** - * Returns the single association referenced join column name (if any). - * - * @throws MappingException - */ - public function getSingleAssociationReferencedJoinColumnName(string $fieldName): string - { - if (! $this->isAssociationWithSingleJoinColumn($fieldName)) { - throw MappingException::noSingleAssociationJoinColumnFound($this->name, $fieldName); - } - - $assoc = $this->associationMappings[$fieldName]; - - assert($assoc->isToOneOwningSide()); - - return $assoc->joinColumns[0]->referencedColumnName; - } - - /** - * Used to retrieve a fieldname for either field or association from a given column. - * - * This method is used in foreign-key as primary-key contexts. - * - * @throws MappingException - */ - public function getFieldForColumn(string $columnName): string - { - if (isset($this->fieldNames[$columnName])) { - return $this->fieldNames[$columnName]; - } - - foreach ($this->associationMappings as $assocName => $mapping) { - if ( - $this->isAssociationWithSingleJoinColumn($assocName) && - assert($this->associationMappings[$assocName]->isToOneOwningSide()) && - $this->associationMappings[$assocName]->joinColumns[0]->name === $columnName - ) { - return $assocName; - } - } - - throw MappingException::noFieldNameFoundForColumn($this->name, $columnName); - } - - /** - * Sets the ID generator used to generate IDs for instances of this class. - */ - public function setIdGenerator(AbstractIdGenerator $generator): void - { - $this->idGenerator = $generator; - } - - /** - * Sets definition. - * - * @psalm-param array $definition - */ - public function setCustomGeneratorDefinition(array $definition): void - { - $this->customGeneratorDefinition = $definition; - } - - /** - * Sets the definition of the sequence ID generator for this class. - * - * The definition must have the following structure: - * - * array( - * 'sequenceName' => 'name', - * 'allocationSize' => 20, - * 'initialValue' => 1 - * 'quoted' => 1 - * ) - * - * - * @psalm-param array{sequenceName?: string, allocationSize?: int|string, initialValue?: int|string, quoted?: mixed} $definition - * - * @throws MappingException - */ - public function setSequenceGeneratorDefinition(array $definition): void - { - if (! isset($definition['sequenceName']) || trim($definition['sequenceName']) === '') { - throw MappingException::missingSequenceName($this->name); - } - - if ($definition['sequenceName'][0] === '`') { - $definition['sequenceName'] = trim($definition['sequenceName'], '`'); - $definition['quoted'] = true; - } - - if (! isset($definition['allocationSize']) || trim((string) $definition['allocationSize']) === '') { - $definition['allocationSize'] = '1'; - } - - if (! isset($definition['initialValue']) || trim((string) $definition['initialValue']) === '') { - $definition['initialValue'] = '1'; - } - - $definition['allocationSize'] = (string) $definition['allocationSize']; - $definition['initialValue'] = (string) $definition['initialValue']; - - $this->sequenceGeneratorDefinition = $definition; - } - - /** - * Sets the version field mapping used for versioning. Sets the default - * value to use depending on the column type. - * - * @psalm-param array $mapping The version field mapping array. - * - * @throws MappingException - */ - public function setVersionMapping(array &$mapping): void - { - $this->isVersioned = true; - $this->versionField = $mapping['fieldName']; - $this->requiresFetchAfterChange = true; - - if (! isset($mapping['default'])) { - if (in_array($mapping['type'], ['integer', 'bigint', 'smallint'], true)) { - $mapping['default'] = 1; - } elseif ($mapping['type'] === 'datetime') { - $mapping['default'] = 'CURRENT_TIMESTAMP'; - } else { - throw MappingException::unsupportedOptimisticLockingType($this->name, $mapping['fieldName'], $mapping['type']); - } - } - } - - /** - * Sets whether this class is to be versioned for optimistic locking. - */ - public function setVersioned(bool $bool): void - { - $this->isVersioned = $bool; - - if ($bool) { - $this->requiresFetchAfterChange = true; - } - } - - /** - * Sets the name of the field that is to be used for versioning if this class is - * versioned for optimistic locking. - */ - public function setVersionField(string|null $versionField): void - { - $this->versionField = $versionField; - } - - /** - * Marks this class as read only, no change tracking is applied to it. - */ - public function markReadOnly(): void - { - $this->isReadOnly = true; - } - - /** - * {@inheritDoc} - */ - public function getFieldNames(): array - { - return array_keys($this->fieldMappings); - } - - /** - * {@inheritDoc} - */ - public function getAssociationNames(): array - { - return array_keys($this->associationMappings); - } - - /** - * {@inheritDoc} - * - * @psalm-return class-string - * - * @throws InvalidArgumentException - */ - public function getAssociationTargetClass(string $assocName): string - { - return $this->associationMappings[$assocName]->targetEntity - ?? throw new InvalidArgumentException("Association name expected, '" . $assocName . "' is not an association."); - } - - public function getName(): string - { - return $this->name; - } - - public function isAssociationInverseSide(string $assocName): bool - { - return isset($this->associationMappings[$assocName]) - && ! $this->associationMappings[$assocName]->isOwningSide(); - } - - public function getAssociationMappedByTargetField(string $assocName): string - { - $assoc = $this->getAssociationMapping($assocName); - - if (! $assoc instanceof InverseSideMapping) { - throw new LogicException(sprintf( - <<<'EXCEPTION' - Context: Calling %s() with "%s", which is the owning side of an association. - Problem: The owning side of an association has no "mappedBy" field. - Solution: Call %s::isAssociationInverseSide() to check first. - EXCEPTION, - __METHOD__, - $assocName, - self::class, - )); - } - - return $assoc->mappedBy; - } - - /** - * @param C $className - * - * @return string|null null if and only if the input value is null - * @psalm-return (C is class-string ? class-string : (C is string ? string : null)) - * - * @template C of string|null - */ - public function fullyQualifiedClassName(string|null $className): string|null - { - if ($className === null) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11294', - 'Passing null to %s is deprecated and will not be supported in Doctrine ORM 4.0', - __METHOD__, - ); - - return null; - } - - if (! str_contains($className, '\\') && $this->namespace) { - return $this->namespace . '\\' . $className; - } - - return $className; - } - - public function getMetadataValue(string $name): mixed - { - return $this->$name ?? null; - } - - /** - * Map Embedded Class - * - * @psalm-param array{ - * fieldName: string, - * class?: class-string, - * declaredField?: string, - * columnPrefix?: string|false|null, - * originalField?: string - * } $mapping - * - * @throws MappingException - */ - public function mapEmbedded(array $mapping): void - { - $this->assertFieldNotMapped($mapping['fieldName']); - - if (! isset($mapping['class']) && $this->isTypedProperty($mapping['fieldName'])) { - $type = $this->reflClass->getProperty($mapping['fieldName'])->getType(); - if ($type instanceof ReflectionNamedType) { - $mapping['class'] = $type->getName(); - } - } - - if (! (isset($mapping['class']) && $mapping['class'])) { - throw MappingException::missingEmbeddedClass($mapping['fieldName']); - } - - $this->embeddedClasses[$mapping['fieldName']] = EmbeddedClassMapping::fromMappingArray([ - 'class' => $this->fullyQualifiedClassName($mapping['class']), - 'columnPrefix' => $mapping['columnPrefix'] ?? null, - 'declaredField' => $mapping['declaredField'] ?? null, - 'originalField' => $mapping['originalField'] ?? null, - ]); - } - - /** - * Inline the embeddable class - */ - public function inlineEmbeddable(string $property, ClassMetadata $embeddable): void - { - foreach ($embeddable->fieldMappings as $originalFieldMapping) { - $fieldMapping = (array) $originalFieldMapping; - $fieldMapping['originalClass'] ??= $embeddable->name; - $fieldMapping['declaredField'] = isset($fieldMapping['declaredField']) - ? $property . '.' . $fieldMapping['declaredField'] - : $property; - $fieldMapping['originalField'] ??= $fieldMapping['fieldName']; - $fieldMapping['fieldName'] = $property . '.' . $fieldMapping['fieldName']; - - if (! empty($this->embeddedClasses[$property]->columnPrefix)) { - $fieldMapping['columnName'] = $this->embeddedClasses[$property]->columnPrefix . $fieldMapping['columnName']; - } elseif ($this->embeddedClasses[$property]->columnPrefix !== false) { - assert($this->reflClass !== null); - assert($embeddable->reflClass !== null); - $fieldMapping['columnName'] = $this->namingStrategy - ->embeddedFieldToColumnName( - $property, - $fieldMapping['columnName'], - $this->reflClass->name, - $embeddable->reflClass->name, - ); - } - - $this->mapField($fieldMapping); - } - } - - /** @throws MappingException */ - private function assertFieldNotMapped(string $fieldName): void - { - if ( - isset($this->fieldMappings[$fieldName]) || - isset($this->associationMappings[$fieldName]) || - isset($this->embeddedClasses[$fieldName]) - ) { - throw MappingException::duplicateFieldMapping($this->name, $fieldName); - } - } - - /** - * Gets the sequence name based on class metadata. - * - * @todo Sequence names should be computed in DBAL depending on the platform - */ - public function getSequenceName(AbstractPlatform $platform): string - { - $sequencePrefix = $this->getSequencePrefix($platform); - $columnName = $this->getSingleIdentifierColumnName(); - - return $sequencePrefix . '_' . $columnName . '_seq'; - } - - /** - * Gets the sequence name prefix based on class metadata. - * - * @todo Sequence names should be computed in DBAL depending on the platform - */ - public function getSequencePrefix(AbstractPlatform $platform): string - { - $tableName = $this->getTableName(); - $sequencePrefix = $tableName; - - // Prepend the schema name to the table name if there is one - $schemaName = $this->getSchemaName(); - if ($schemaName) { - $sequencePrefix = $schemaName . '.' . $tableName; - } - - return $sequencePrefix; - } - - /** @psalm-param class-string $class */ - private function getAccessibleProperty(ReflectionService $reflService, string $class, string $field): ReflectionProperty|null - { - $reflectionProperty = $reflService->getAccessibleProperty($class, $field); - if ($reflectionProperty?->isReadOnly()) { - $declaringClass = $reflectionProperty->class; - if ($declaringClass !== $class) { - $reflectionProperty = $reflService->getAccessibleProperty($declaringClass, $field); - } - - if ($reflectionProperty !== null) { - $reflectionProperty = new ReflectionReadonlyProperty($reflectionProperty); - } - } - - return $reflectionProperty; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php b/vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php deleted file mode 100644 index a3a4701..0000000 --- a/vendor/doctrine/orm/src/Mapping/ClassMetadataFactory.php +++ /dev/null @@ -1,729 +0,0 @@ - - */ -class ClassMetadataFactory extends AbstractClassMetadataFactory -{ - private EntityManagerInterface|null $em = null; - private AbstractPlatform|null $targetPlatform = null; - private MappingDriver|null $driver = null; - private EventManager|null $evm = null; - - /** @var mixed[] */ - private array $embeddablesActiveNesting = []; - - private const NON_IDENTITY_DEFAULT_STRATEGY = [ - Platforms\OraclePlatform::class => ClassMetadata::GENERATOR_TYPE_SEQUENCE, - ]; - - public function setEntityManager(EntityManagerInterface $em): void - { - parent::setProxyClassNameResolver(new DefaultProxyClassNameResolver()); - - $this->em = $em; - } - - /** - * @param A $maybeOwningSide - * - * @return (A is ManyToManyAssociationMapping ? ManyToManyOwningSideMapping : ( - * A is OneToOneAssociationMapping ? OneToOneOwningSideMapping : ( - * A is OneToManyAssociationMapping ? ManyToOneAssociationMapping : ( - * A is ManyToOneAssociationMapping ? ManyToOneAssociationMapping : - * ManyToManyOwningSideMapping|OneToOneOwningSideMapping|ManyToOneAssociationMapping - * )))) - * - * @template A of AssociationMapping - */ - final public function getOwningSide(AssociationMapping $maybeOwningSide): OwningSideMapping - { - if ($maybeOwningSide instanceof OwningSideMapping) { - assert($maybeOwningSide instanceof ManyToManyOwningSideMapping || - $maybeOwningSide instanceof OneToOneOwningSideMapping || - $maybeOwningSide instanceof ManyToOneAssociationMapping); - - return $maybeOwningSide; - } - - assert($maybeOwningSide instanceof InverseSideMapping); - - $owningSide = $this->getMetadataFor($maybeOwningSide->targetEntity) - ->associationMappings[$maybeOwningSide->mappedBy]; - - assert($owningSide instanceof ManyToManyOwningSideMapping || - $owningSide instanceof OneToOneOwningSideMapping || - $owningSide instanceof ManyToOneAssociationMapping); - - return $owningSide; - } - - protected function initialize(): void - { - $this->driver = $this->em->getConfiguration()->getMetadataDriverImpl(); - $this->evm = $this->em->getEventManager(); - $this->initialized = true; - } - - protected function onNotFoundMetadata(string $className): ClassMetadata|null - { - if (! $this->evm->hasListeners(Events::onClassMetadataNotFound)) { - return null; - } - - $eventArgs = new OnClassMetadataNotFoundEventArgs($className, $this->em); - - $this->evm->dispatchEvent(Events::onClassMetadataNotFound, $eventArgs); - $classMetadata = $eventArgs->getFoundMetadata(); - assert($classMetadata instanceof ClassMetadata || $classMetadata === null); - - return $classMetadata; - } - - /** - * {@inheritDoc} - */ - protected function doLoadMetadata( - ClassMetadataInterface $class, - ClassMetadataInterface|null $parent, - bool $rootEntityFound, - array $nonSuperclassParents, - ): void { - if ($parent) { - $class->setInheritanceType($parent->inheritanceType); - $class->setDiscriminatorColumn($parent->discriminatorColumn === null ? null : clone $parent->discriminatorColumn); - $class->setIdGeneratorType($parent->generatorType); - $this->addInheritedFields($class, $parent); - $this->addInheritedRelations($class, $parent); - $this->addInheritedEmbeddedClasses($class, $parent); - $class->setIdentifier($parent->identifier); - $class->setVersioned($parent->isVersioned); - $class->setVersionField($parent->versionField); - $class->setDiscriminatorMap($parent->discriminatorMap); - $class->addSubClasses($parent->subClasses); - $class->setLifecycleCallbacks($parent->lifecycleCallbacks); - $class->setChangeTrackingPolicy($parent->changeTrackingPolicy); - - if (! empty($parent->customGeneratorDefinition)) { - $class->setCustomGeneratorDefinition($parent->customGeneratorDefinition); - } - - if ($parent->isMappedSuperclass) { - $class->setCustomRepositoryClass($parent->customRepositoryClassName); - } - } - - // Invoke driver - try { - $this->driver->loadMetadataForClass($class->getName(), $class); - } catch (ReflectionException $e) { - throw MappingException::reflectionFailure($class->getName(), $e); - } - - // If this class has a parent the id generator strategy is inherited. - // However this is only true if the hierarchy of parents contains the root entity, - // if it consists of mapped superclasses these don't necessarily include the id field. - if ($parent && $rootEntityFound) { - $this->inheritIdGeneratorMapping($class, $parent); - } else { - $this->completeIdGeneratorMapping($class); - } - - if (! $class->isMappedSuperclass) { - if ($rootEntityFound && $class->isInheritanceTypeNone()) { - throw MappingException::missingInheritanceTypeDeclaration(end($nonSuperclassParents), $class->name); - } - - foreach ($class->embeddedClasses as $property => $embeddableClass) { - if (isset($embeddableClass->inherited)) { - continue; - } - - if (isset($this->embeddablesActiveNesting[$embeddableClass->class])) { - throw MappingException::infiniteEmbeddableNesting($class->name, $property); - } - - $this->embeddablesActiveNesting[$class->name] = true; - - $embeddableMetadata = $this->getMetadataFor($embeddableClass->class); - - if ($embeddableMetadata->isEmbeddedClass) { - $this->addNestedEmbeddedClasses($embeddableMetadata, $class, $property); - } - - $identifier = $embeddableMetadata->getIdentifier(); - - if (! empty($identifier)) { - $this->inheritIdGeneratorMapping($class, $embeddableMetadata); - } - - $class->inlineEmbeddable($property, $embeddableMetadata); - - unset($this->embeddablesActiveNesting[$class->name]); - } - } - - if ($parent) { - if ($parent->isInheritanceTypeSingleTable()) { - $class->setPrimaryTable($parent->table); - } - - $this->addInheritedIndexes($class, $parent); - - if ($parent->cache) { - $class->cache = $parent->cache; - } - - if ($parent->containsForeignIdentifier) { - $class->containsForeignIdentifier = true; - } - - if ($parent->containsEnumIdentifier) { - $class->containsEnumIdentifier = true; - } - - if (! empty($parent->entityListeners) && empty($class->entityListeners)) { - $class->entityListeners = $parent->entityListeners; - } - } - - $class->setParentClasses($nonSuperclassParents); - - if ($class->isRootEntity() && ! $class->isInheritanceTypeNone() && ! $class->discriminatorMap) { - $this->addDefaultDiscriminatorMap($class); - } - - // During the following event, there may also be updates to the discriminator map as per GH-1257/GH-8402. - // So, we must not discover the missing subclasses before that. - - if ($this->evm->hasListeners(Events::loadClassMetadata)) { - $eventArgs = new LoadClassMetadataEventArgs($class, $this->em); - $this->evm->dispatchEvent(Events::loadClassMetadata, $eventArgs); - } - - $this->findAbstractEntityClassesNotListedInDiscriminatorMap($class); - - $this->validateRuntimeMetadata($class, $parent); - } - - /** - * Validate runtime metadata is correctly defined. - * - * @throws MappingException - */ - protected function validateRuntimeMetadata(ClassMetadata $class, ClassMetadataInterface|null $parent): void - { - if (! $class->reflClass) { - // only validate if there is a reflection class instance - return; - } - - $class->validateIdentifier(); - $class->validateAssociations(); - $class->validateLifecycleCallbacks($this->getReflectionService()); - - // verify inheritance - if (! $class->isMappedSuperclass && ! $class->isInheritanceTypeNone()) { - if (! $parent) { - if (count($class->discriminatorMap) === 0) { - throw MappingException::missingDiscriminatorMap($class->name); - } - - if (! $class->discriminatorColumn) { - throw MappingException::missingDiscriminatorColumn($class->name); - } - - foreach ($class->subClasses as $subClass) { - if ((new ReflectionClass($subClass))->name !== $subClass) { - throw MappingException::invalidClassInDiscriminatorMap($subClass, $class->name); - } - } - } else { - assert($parent instanceof ClassMetadata); // https://github.com/doctrine/orm/issues/8746 - if ( - ! $class->reflClass->isAbstract() - && ! in_array($class->name, $class->discriminatorMap, true) - ) { - throw MappingException::mappedClassNotPartOfDiscriminatorMap($class->name, $class->rootEntityName); - } - } - } elseif ($class->isMappedSuperclass && $class->name === $class->rootEntityName && (count($class->discriminatorMap) || $class->discriminatorColumn)) { - // second condition is necessary for mapped superclasses in the middle of an inheritance hierarchy - throw MappingException::noInheritanceOnMappedSuperClass($class->name); - } - } - - protected function newClassMetadataInstance(string $className): ClassMetadata - { - return new ClassMetadata( - $className, - $this->em->getConfiguration()->getNamingStrategy(), - $this->em->getConfiguration()->getTypedFieldMapper(), - ); - } - - /** - * Adds a default discriminator map if no one is given - * - * If an entity is of any inheritance type and does not contain a - * discriminator map, then the map is generated automatically. This process - * is expensive computation wise. - * - * The automatically generated discriminator map contains the lowercase short name of - * each class as key. - * - * @throws MappingException - */ - private function addDefaultDiscriminatorMap(ClassMetadata $class): void - { - $allClasses = $this->driver->getAllClassNames(); - $fqcn = $class->getName(); - $map = [$this->getShortName($class->name) => $fqcn]; - - $duplicates = []; - foreach ($allClasses as $subClassCandidate) { - if (is_subclass_of($subClassCandidate, $fqcn)) { - $shortName = $this->getShortName($subClassCandidate); - - if (isset($map[$shortName])) { - $duplicates[] = $shortName; - } - - $map[$shortName] = $subClassCandidate; - } - } - - if ($duplicates) { - throw MappingException::duplicateDiscriminatorEntry($class->name, $duplicates, $map); - } - - $class->setDiscriminatorMap($map); - } - - private function findAbstractEntityClassesNotListedInDiscriminatorMap(ClassMetadata $rootEntityClass): void - { - // Only root classes in inheritance hierarchies need contain a discriminator map, - // so skip for other classes. - if (! $rootEntityClass->isRootEntity() || $rootEntityClass->isInheritanceTypeNone()) { - return; - } - - $processedClasses = [$rootEntityClass->name => true]; - foreach ($rootEntityClass->subClasses as $knownSubClass) { - $processedClasses[$knownSubClass] = true; - } - - foreach ($rootEntityClass->discriminatorMap as $declaredClassName) { - // This fetches non-transient parent classes only - $parentClasses = $this->getParentClasses($declaredClassName); - - foreach ($parentClasses as $parentClass) { - if (isset($processedClasses[$parentClass])) { - continue; - } - - $processedClasses[$parentClass] = true; - - // All non-abstract entity classes must be listed in the discriminator map, and - // this will be validated/enforced at runtime (possibly at a later time, when the - // subclass is loaded, but anyways). Also, subclasses is about entity classes only. - // That means we can ignore non-abstract classes here. The (expensive) driver - // check for mapped superclasses need only be run for abstract candidate classes. - if (! (new ReflectionClass($parentClass))->isAbstract() || $this->peekIfIsMappedSuperclass($parentClass)) { - continue; - } - - // We have found a non-transient, non-mapped-superclass = an entity class (possibly abstract, but that does not matter) - $rootEntityClass->addSubClass($parentClass); - } - } - } - - /** @param class-string $className */ - private function peekIfIsMappedSuperclass(string $className): bool - { - $reflService = $this->getReflectionService(); - $class = $this->newClassMetadataInstance($className); - $this->initializeReflection($class, $reflService); - - $this->getDriver()->loadMetadataForClass($className, $class); - - return $class->isMappedSuperclass; - } - - /** - * Gets the lower-case short name of a class. - * - * @psalm-param class-string $className - */ - private function getShortName(string $className): string - { - if (! str_contains($className, '\\')) { - return strtolower($className); - } - - $parts = explode('\\', $className); - - return strtolower(end($parts)); - } - - /** - * Puts the `inherited` and `declared` values into mapping information for fields, associations - * and embedded classes. - */ - private function addMappingInheritanceInformation( - AssociationMapping|EmbeddedClassMapping|FieldMapping $mapping, - ClassMetadata $parentClass, - ): void { - if (! isset($mapping->inherited) && ! $parentClass->isMappedSuperclass) { - $mapping->inherited = $parentClass->name; - } - - if (! isset($mapping->declared)) { - $mapping->declared = $parentClass->name; - } - } - - /** - * Adds inherited fields to the subclass mapping. - */ - private function addInheritedFields(ClassMetadata $subClass, ClassMetadata $parentClass): void - { - foreach ($parentClass->fieldMappings as $mapping) { - $subClassMapping = clone $mapping; - $this->addMappingInheritanceInformation($subClassMapping, $parentClass); - $subClass->addInheritedFieldMapping($subClassMapping); - } - - foreach ($parentClass->reflFields as $name => $field) { - $subClass->reflFields[$name] = $field; - } - } - - /** - * Adds inherited association mappings to the subclass mapping. - * - * @throws MappingException - */ - private function addInheritedRelations(ClassMetadata $subClass, ClassMetadata $parentClass): void - { - foreach ($parentClass->associationMappings as $field => $mapping) { - $subClassMapping = clone $mapping; - $this->addMappingInheritanceInformation($subClassMapping, $parentClass); - // When the class inheriting the relation ($subClass) is the first entity class since the - // relation has been defined in a mapped superclass (or in a chain - // of mapped superclasses) above, then declare this current entity class as the source of - // the relationship. - // According to the definitions given in https://github.com/doctrine/orm/pull/10396/, - // this is the case <=> ! isset($mapping['inherited']). - if (! isset($subClassMapping->inherited)) { - $subClassMapping->sourceEntity = $subClass->name; - } - - $subClass->addInheritedAssociationMapping($subClassMapping); - } - } - - private function addInheritedEmbeddedClasses(ClassMetadata $subClass, ClassMetadata $parentClass): void - { - foreach ($parentClass->embeddedClasses as $field => $embeddedClass) { - $subClassMapping = clone $embeddedClass; - $this->addMappingInheritanceInformation($subClassMapping, $parentClass); - $subClass->embeddedClasses[$field] = $subClassMapping; - } - } - - /** - * Adds nested embedded classes metadata to a parent class. - * - * @param ClassMetadata $subClass Sub embedded class metadata to add nested embedded classes metadata from. - * @param ClassMetadata $parentClass Parent class to add nested embedded classes metadata to. - * @param string $prefix Embedded classes' prefix to use for nested embedded classes field names. - */ - private function addNestedEmbeddedClasses( - ClassMetadata $subClass, - ClassMetadata $parentClass, - string $prefix, - ): void { - foreach ($subClass->embeddedClasses as $property => $embeddableClass) { - if (isset($embeddableClass->inherited)) { - continue; - } - - $embeddableMetadata = $this->getMetadataFor($embeddableClass->class); - - $parentClass->mapEmbedded( - [ - 'fieldName' => $prefix . '.' . $property, - 'class' => $embeddableMetadata->name, - 'columnPrefix' => $embeddableClass->columnPrefix, - 'declaredField' => $embeddableClass->declaredField - ? $prefix . '.' . $embeddableClass->declaredField - : $prefix, - 'originalField' => $embeddableClass->originalField ?: $property, - ], - ); - } - } - - /** - * Copy the table indices from the parent class superclass to the child class - */ - private function addInheritedIndexes(ClassMetadata $subClass, ClassMetadata $parentClass): void - { - if (! $parentClass->isMappedSuperclass) { - return; - } - - foreach (['uniqueConstraints', 'indexes'] as $indexType) { - if (isset($parentClass->table[$indexType])) { - foreach ($parentClass->table[$indexType] as $indexName => $index) { - if (isset($subClass->table[$indexType][$indexName])) { - continue; // Let the inheriting table override indices - } - - $subClass->table[$indexType][$indexName] = $index; - } - } - } - } - - /** - * Completes the ID generator mapping. If "auto" is specified we choose the generator - * most appropriate for the targeted database platform. - * - * @throws ORMException - */ - private function completeIdGeneratorMapping(ClassMetadata $class): void - { - $idGenType = $class->generatorType; - if ($idGenType === ClassMetadata::GENERATOR_TYPE_AUTO) { - $class->setIdGeneratorType($this->determineIdGeneratorStrategy($this->getTargetPlatform())); - } - - // Create & assign an appropriate ID generator instance - switch ($class->generatorType) { - case ClassMetadata::GENERATOR_TYPE_IDENTITY: - $sequenceName = null; - $fieldName = $class->identifier ? $class->getSingleIdentifierFieldName() : null; - $platform = $this->getTargetPlatform(); - - $generator = $fieldName && $class->fieldMappings[$fieldName]->type === 'bigint' - ? new BigIntegerIdentityGenerator() - : new IdentityGenerator(); - - $class->setIdGenerator($generator); - - break; - - case ClassMetadata::GENERATOR_TYPE_SEQUENCE: - // If there is no sequence definition yet, create a default definition - $definition = $class->sequenceGeneratorDefinition; - - if (! $definition) { - $fieldName = $class->getSingleIdentifierFieldName(); - $sequenceName = $class->getSequenceName($this->getTargetPlatform()); - $quoted = isset($class->fieldMappings[$fieldName]->quoted) || isset($class->table['quoted']); - - $definition = [ - 'sequenceName' => $this->truncateSequenceName($sequenceName), - 'allocationSize' => 1, - 'initialValue' => 1, - ]; - - if ($quoted) { - $definition['quoted'] = true; - } - - $class->setSequenceGeneratorDefinition($definition); - } - - $sequenceGenerator = new SequenceGenerator( - $this->em->getConfiguration()->getQuoteStrategy()->getSequenceName($definition, $class, $this->getTargetPlatform()), - (int) $definition['allocationSize'], - ); - $class->setIdGenerator($sequenceGenerator); - break; - - case ClassMetadata::GENERATOR_TYPE_NONE: - $class->setIdGenerator(new AssignedGenerator()); - break; - - case ClassMetadata::GENERATOR_TYPE_CUSTOM: - $definition = $class->customGeneratorDefinition; - if ($definition === null) { - throw InvalidCustomGenerator::onClassNotConfigured(); - } - - if (! class_exists($definition['class'])) { - throw InvalidCustomGenerator::onMissingClass($definition); - } - - $class->setIdGenerator(new $definition['class']()); - break; - - default: - throw UnknownGeneratorType::create($class->generatorType); - } - } - - /** @psalm-return ClassMetadata::GENERATOR_TYPE_* */ - private function determineIdGeneratorStrategy(AbstractPlatform $platform): int - { - assert($this->em !== null); - foreach ($this->em->getConfiguration()->getIdentityGenerationPreferences() as $platformFamily => $strategy) { - if (is_a($platform, $platformFamily)) { - return $strategy; - } - } - - $nonIdentityDefaultStrategy = self::NON_IDENTITY_DEFAULT_STRATEGY; - - // DBAL 3 - if (method_exists($platform, 'getIdentitySequenceName')) { - $nonIdentityDefaultStrategy[Platforms\PostgreSQLPlatform::class] = ClassMetadata::GENERATOR_TYPE_SEQUENCE; - } - - foreach ($nonIdentityDefaultStrategy as $platformFamily => $strategy) { - if (is_a($platform, $platformFamily)) { - if ($platform instanceof Platforms\PostgreSQLPlatform) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/issues/8893', - <<<'DEPRECATION' - Relying on non-optimal defaults for ID generation is deprecated, and IDENTITY - results in SERIAL, which is not recommended. - Instead, configure identifier generation strategies explicitly through - configuration. - We currently recommend "SEQUENCE" for "%s", when using DBAL 3, - and "IDENTITY" when using DBAL 4, - so you should probably use the following configuration before upgrading to DBAL 4, - and remove it after deploying that upgrade: - - $configuration->setIdentityGenerationPreferences([ - "%s" => ClassMetadata::GENERATOR_TYPE_SEQUENCE, - ]); - - DEPRECATION, - $platformFamily, - $platformFamily, - ); - } - - return $strategy; - } - } - - return ClassMetadata::GENERATOR_TYPE_IDENTITY; - } - - private function truncateSequenceName(string $schemaElementName): string - { - $platform = $this->getTargetPlatform(); - if (! $platform instanceof Platforms\OraclePlatform) { - return $schemaElementName; - } - - $maxIdentifierLength = $platform->getMaxIdentifierLength(); - - if (strlen($schemaElementName) > $maxIdentifierLength) { - return substr($schemaElementName, 0, $maxIdentifierLength); - } - - return $schemaElementName; - } - - /** - * Inherits the ID generator mapping from a parent class. - */ - private function inheritIdGeneratorMapping(ClassMetadata $class, ClassMetadata $parent): void - { - if ($parent->isIdGeneratorSequence()) { - $class->setSequenceGeneratorDefinition($parent->sequenceGeneratorDefinition); - } - - if ($parent->generatorType) { - $class->setIdGeneratorType($parent->generatorType); - } - - if ($parent->idGenerator ?? null) { - $class->setIdGenerator($parent->idGenerator); - } - } - - protected function wakeupReflection(ClassMetadataInterface $class, ReflectionService $reflService): void - { - $class->wakeupReflection($reflService); - } - - protected function initializeReflection(ClassMetadataInterface $class, ReflectionService $reflService): void - { - $class->initializeReflection($reflService); - } - - protected function getDriver(): MappingDriver - { - assert($this->driver !== null); - - return $this->driver; - } - - protected function isEntity(ClassMetadataInterface $class): bool - { - return ! $class->isMappedSuperclass; - } - - private function getTargetPlatform(): Platforms\AbstractPlatform - { - if (! $this->targetPlatform) { - $this->targetPlatform = $this->em->getConnection()->getDatabasePlatform(); - } - - return $this->targetPlatform; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Column.php b/vendor/doctrine/orm/src/Mapping/Column.php deleted file mode 100644 index 68121e6..0000000 --- a/vendor/doctrine/orm/src/Mapping/Column.php +++ /dev/null @@ -1,36 +0,0 @@ -|null $enumType - * @param array $options - * @psalm-param 'NEVER'|'INSERT'|'ALWAYS'|null $generated - */ - public function __construct( - public readonly string|null $name = null, - public readonly string|null $type = null, - public readonly int|null $length = null, - public readonly int|null $precision = null, - public readonly int|null $scale = null, - public readonly bool $unique = false, - public readonly bool $nullable = false, - public readonly bool $insertable = true, - public readonly bool $updatable = true, - public readonly string|null $enumType = null, - public readonly array $options = [], - public readonly string|null $columnDefinition = null, - public readonly string|null $generated = null, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/CustomIdGenerator.php b/vendor/doctrine/orm/src/Mapping/CustomIdGenerator.php deleted file mode 100644 index 7b31dc3..0000000 --- a/vendor/doctrine/orm/src/Mapping/CustomIdGenerator.php +++ /dev/null @@ -1,16 +0,0 @@ - Map to store entity listener instances. */ - private array $instances = []; - - public function clear(string|null $className = null): void - { - if ($className === null) { - $this->instances = []; - - return; - } - - $className = trim($className, '\\'); - unset($this->instances[$className]); - } - - public function register(object $object): void - { - $this->instances[$object::class] = $object; - } - - public function resolve(string $className): object - { - $className = trim($className, '\\'); - - return $this->instances[$className] ??= new $className(); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/DefaultNamingStrategy.php b/vendor/doctrine/orm/src/Mapping/DefaultNamingStrategy.php deleted file mode 100644 index 15218f9..0000000 --- a/vendor/doctrine/orm/src/Mapping/DefaultNamingStrategy.php +++ /dev/null @@ -1,68 +0,0 @@ -referenceColumnName(); - } - - public function joinTableName( - string $sourceEntity, - string $targetEntity, - string $propertyName, - ): string { - return strtolower($this->classToTableName($sourceEntity) . '_' . - $this->classToTableName($targetEntity)); - } - - public function joinKeyColumnName( - string $entityName, - string|null $referencedColumnName, - ): string { - return strtolower($this->classToTableName($entityName) . '_' . - ($referencedColumnName ?: $this->referenceColumnName())); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php b/vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php deleted file mode 100644 index 6260336..0000000 --- a/vendor/doctrine/orm/src/Mapping/DefaultQuoteStrategy.php +++ /dev/null @@ -1,145 +0,0 @@ -fieldMappings[$fieldName]->quoted) - ? $platform->quoteIdentifier($class->fieldMappings[$fieldName]->columnName) - : $class->fieldMappings[$fieldName]->columnName; - } - - /** - * {@inheritDoc} - * - * @todo Table names should be computed in DBAL depending on the platform - */ - public function getTableName(ClassMetadata $class, AbstractPlatform $platform): string - { - $tableName = $class->table['name']; - - if (! empty($class->table['schema'])) { - $tableName = $class->table['schema'] . '.' . $class->table['name']; - } - - return isset($class->table['quoted']) - ? $platform->quoteIdentifier($tableName) - : $tableName; - } - - /** - * {@inheritDoc} - */ - public function getSequenceName(array $definition, ClassMetadata $class, AbstractPlatform $platform): string - { - return isset($definition['quoted']) - ? $platform->quoteIdentifier($definition['sequenceName']) - : $definition['sequenceName']; - } - - public function getJoinColumnName(JoinColumnMapping $joinColumn, ClassMetadata $class, AbstractPlatform $platform): string - { - return isset($joinColumn->quoted) - ? $platform->quoteIdentifier($joinColumn->name) - : $joinColumn->name; - } - - public function getReferencedJoinColumnName( - JoinColumnMapping $joinColumn, - ClassMetadata $class, - AbstractPlatform $platform, - ): string { - return isset($joinColumn->quoted) - ? $platform->quoteIdentifier($joinColumn->referencedColumnName) - : $joinColumn->referencedColumnName; - } - - public function getJoinTableName( - ManyToManyOwningSideMapping $association, - ClassMetadata $class, - AbstractPlatform $platform, - ): string { - $schema = ''; - - if (isset($association->joinTable->schema)) { - $schema = $association->joinTable->schema . '.'; - } - - $tableName = $association->joinTable->name; - - if (isset($association->joinTable->quoted)) { - $tableName = $platform->quoteIdentifier($tableName); - } - - return $schema . $tableName; - } - - /** - * {@inheritDoc} - */ - public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform): array - { - $quotedColumnNames = []; - - foreach ($class->identifier as $fieldName) { - if (isset($class->fieldMappings[$fieldName])) { - $quotedColumnNames[] = $this->getColumnName($fieldName, $class, $platform); - - continue; - } - - // Association defined as Id field - $assoc = $class->associationMappings[$fieldName]; - assert($assoc->isToOneOwningSide()); - $joinColumns = $assoc->joinColumns; - $assocQuotedColumnNames = array_map( - static fn (JoinColumnMapping $joinColumn) => isset($joinColumn->quoted) - ? $platform->quoteIdentifier($joinColumn->name) - : $joinColumn->name, - $joinColumns, - ); - - $quotedColumnNames = array_merge($quotedColumnNames, $assocQuotedColumnNames); - } - - return $quotedColumnNames; - } - - public function getColumnAlias( - string $columnName, - int $counter, - AbstractPlatform $platform, - ClassMetadata|null $class = null, - ): string { - // 1 ) Concatenate column name and counter - // 2 ) Trim the column alias to the maximum identifier length of the platform. - // If the alias is to long, characters are cut off from the beginning. - // 3 ) Strip non alphanumeric characters - // 4 ) Prefix with "_" if the result its numeric - $columnName .= '_' . $counter; - $columnName = substr($columnName, -$platform->getMaxIdentifierLength()); - $columnName = preg_replace('/[^A-Za-z0-9_]/', '', $columnName); - $columnName = is_numeric($columnName) ? '_' . $columnName : $columnName; - - return $this->getSQLResultCasing($platform, $columnName); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/DefaultTypedFieldMapper.php b/vendor/doctrine/orm/src/Mapping/DefaultTypedFieldMapper.php deleted file mode 100644 index 49144b8..0000000 --- a/vendor/doctrine/orm/src/Mapping/DefaultTypedFieldMapper.php +++ /dev/null @@ -1,80 +0,0 @@ -|string> $typedFieldMappings */ - private array $typedFieldMappings; - - private const DEFAULT_TYPED_FIELD_MAPPINGS = [ - DateInterval::class => Types::DATEINTERVAL, - DateTime::class => Types::DATETIME_MUTABLE, - DateTimeImmutable::class => Types::DATETIME_IMMUTABLE, - 'array' => Types::JSON, - 'bool' => Types::BOOLEAN, - 'float' => Types::FLOAT, - 'int' => Types::INTEGER, - 'string' => Types::STRING, - ]; - - /** @param array|string> $typedFieldMappings */ - public function __construct(array $typedFieldMappings = []) - { - $this->typedFieldMappings = array_merge(self::DEFAULT_TYPED_FIELD_MAPPINGS, $typedFieldMappings); - } - - /** - * {@inheritDoc} - */ - public function validateAndComplete(array $mapping, ReflectionProperty $field): array - { - $type = $field->getType(); - - if ( - ! isset($mapping['type']) - && ($type instanceof ReflectionNamedType) - ) { - if (! $type->isBuiltin() && enum_exists($type->getName())) { - $reflection = new ReflectionEnum($type->getName()); - if (! $reflection->isBacked()) { - throw MappingException::backedEnumTypeRequired( - $field->class, - $mapping['fieldName'], - $type->getName(), - ); - } - - assert(is_a($type->getName(), BackedEnum::class, true)); - $mapping['enumType'] = $type->getName(); - $type = $reflection->getBackingType(); - - assert($type instanceof ReflectionNamedType); - } - - if (isset($this->typedFieldMappings[$type->getName()])) { - $mapping['type'] = $this->typedFieldMappings[$type->getName()]; - } - } - - return $mapping; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/DiscriminatorColumn.php b/vendor/doctrine/orm/src/Mapping/DiscriminatorColumn.php deleted file mode 100644 index fb9c7d3..0000000 --- a/vendor/doctrine/orm/src/Mapping/DiscriminatorColumn.php +++ /dev/null @@ -1,24 +0,0 @@ -|null */ - public readonly string|null $enumType = null, - /** @var array */ - public readonly array $options = [], - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/DiscriminatorColumnMapping.php b/vendor/doctrine/orm/src/Mapping/DiscriminatorColumnMapping.php deleted file mode 100644 index 4ccb71c..0000000 --- a/vendor/doctrine/orm/src/Mapping/DiscriminatorColumnMapping.php +++ /dev/null @@ -1,83 +0,0 @@ - */ -final class DiscriminatorColumnMapping implements ArrayAccess -{ - use ArrayAccessImplementation; - - /** The database length of the column. Optional. Default value taken from the type. */ - public int|null $length = null; - - public string|null $columnDefinition = null; - - /** @var class-string|null */ - public string|null $enumType = null; - - /** @var array */ - public array $options = []; - - public function __construct( - public string $type, - public string $fieldName, - public string $name, - ) { - } - - /** - * @psalm-param array{ - * type: string, - * fieldName: string, - * name: string, - * length?: int|null, - * columnDefinition?: string|null, - * enumType?: class-string|null, - * options?: array|null, - * } $mappingArray - */ - public static function fromMappingArray(array $mappingArray): self - { - $mapping = new self( - $mappingArray['type'], - $mappingArray['fieldName'], - $mappingArray['name'], - ); - foreach ($mappingArray as $key => $value) { - if (in_array($key, ['type', 'fieldName', 'name'])) { - continue; - } - - if (property_exists($mapping, $key)) { - $mapping->$key = $value ?? $mapping->$key; - } else { - throw new Exception('Unknown property ' . $key . ' on class ' . static::class); - } - } - - return $mapping; - } - - /** @return list */ - public function __sleep(): array - { - $serialized = ['type', 'fieldName', 'name']; - - foreach (['length', 'columnDefinition', 'enumType', 'options'] as $stringOrArrayKey) { - if ($this->$stringOrArrayKey !== null) { - $serialized[] = $stringOrArrayKey; - } - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/DiscriminatorMap.php b/vendor/doctrine/orm/src/Mapping/DiscriminatorMap.php deleted file mode 100644 index 2b204a9..0000000 --- a/vendor/doctrine/orm/src/Mapping/DiscriminatorMap.php +++ /dev/null @@ -1,17 +0,0 @@ - $value */ - public function __construct( - public readonly array $value, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Driver/AttributeDriver.php b/vendor/doctrine/orm/src/Mapping/Driver/AttributeDriver.php deleted file mode 100644 index 9ba3481..0000000 --- a/vendor/doctrine/orm/src/Mapping/Driver/AttributeDriver.php +++ /dev/null @@ -1,768 +0,0 @@ - 1, - Mapping\MappedSuperclass::class => 2, - ]; - - private readonly AttributeReader $reader; - - /** - * @param array $paths - * @param true $reportFieldsWhereDeclared no-op, to be removed in 4.0 - */ - public function __construct(array $paths, bool $reportFieldsWhereDeclared = true) - { - if (! $reportFieldsWhereDeclared) { - throw new InvalidArgumentException(sprintf( - 'The $reportFieldsWhereDeclared argument is no longer supported, make sure to omit it when calling %s.', - __METHOD__, - )); - } - - $this->reader = new AttributeReader(); - $this->addPaths($paths); - } - - public function isTransient(string $className): bool - { - $classAttributes = $this->reader->getClassAttributes(new ReflectionClass($className)); - - foreach ($classAttributes as $a) { - $attr = $a instanceof RepeatableAttributeCollection ? $a[0] : $a; - if (isset(self::ENTITY_ATTRIBUTE_CLASSES[$attr::class])) { - return false; - } - } - - return true; - } - - /** - * {@inheritDoc} - * - * @psalm-param class-string $className - * @psalm-param ClassMetadata $metadata - * - * @template T of object - */ - public function loadMetadataForClass(string $className, PersistenceClassMetadata $metadata): void - { - $reflectionClass = $metadata->getReflectionClass() - // this happens when running attribute driver in combination with - // static reflection services. This is not the nicest fix - ?? new ReflectionClass($metadata->name); - - $classAttributes = $this->reader->getClassAttributes($reflectionClass); - - // Evaluate Entity attribute - if (isset($classAttributes[Mapping\Entity::class])) { - $entityAttribute = $classAttributes[Mapping\Entity::class]; - if ($entityAttribute->repositoryClass !== null) { - $metadata->setCustomRepositoryClass($entityAttribute->repositoryClass); - } - - if ($entityAttribute->readOnly) { - $metadata->markReadOnly(); - } - } elseif (isset($classAttributes[Mapping\MappedSuperclass::class])) { - $mappedSuperclassAttribute = $classAttributes[Mapping\MappedSuperclass::class]; - - $metadata->setCustomRepositoryClass($mappedSuperclassAttribute->repositoryClass); - $metadata->isMappedSuperclass = true; - } elseif (isset($classAttributes[Mapping\Embeddable::class])) { - $metadata->isEmbeddedClass = true; - } else { - throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); - } - - $primaryTable = []; - - if (isset($classAttributes[Mapping\Table::class])) { - $tableAnnot = $classAttributes[Mapping\Table::class]; - $primaryTable['name'] = $tableAnnot->name; - $primaryTable['schema'] = $tableAnnot->schema; - - if ($tableAnnot->options) { - $primaryTable['options'] = $tableAnnot->options; - } - } - - if (isset($classAttributes[Mapping\Index::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\Index::class); - } - - foreach ($classAttributes[Mapping\Index::class] as $idx => $indexAnnot) { - $index = []; - - if (! empty($indexAnnot->columns)) { - $index['columns'] = $indexAnnot->columns; - } - - if (! empty($indexAnnot->fields)) { - $index['fields'] = $indexAnnot->fields; - } - - if ( - isset($index['columns'], $index['fields']) - || ( - ! isset($index['columns']) - && ! isset($index['fields']) - ) - ) { - throw MappingException::invalidIndexConfiguration( - $className, - (string) ($indexAnnot->name ?? $idx), - ); - } - - if (! empty($indexAnnot->flags)) { - $index['flags'] = $indexAnnot->flags; - } - - if (! empty($indexAnnot->options)) { - $index['options'] = $indexAnnot->options; - } - - if (! empty($indexAnnot->name)) { - $primaryTable['indexes'][$indexAnnot->name] = $index; - } else { - $primaryTable['indexes'][] = $index; - } - } - } - - if (isset($classAttributes[Mapping\UniqueConstraint::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\UniqueConstraint::class); - } - - foreach ($classAttributes[Mapping\UniqueConstraint::class] as $idx => $uniqueConstraintAnnot) { - $uniqueConstraint = []; - - if (! empty($uniqueConstraintAnnot->columns)) { - $uniqueConstraint['columns'] = $uniqueConstraintAnnot->columns; - } - - if (! empty($uniqueConstraintAnnot->fields)) { - $uniqueConstraint['fields'] = $uniqueConstraintAnnot->fields; - } - - if ( - isset($uniqueConstraint['columns'], $uniqueConstraint['fields']) - || ( - ! isset($uniqueConstraint['columns']) - && ! isset($uniqueConstraint['fields']) - ) - ) { - throw MappingException::invalidUniqueConstraintConfiguration( - $className, - (string) ($uniqueConstraintAnnot->name ?? $idx), - ); - } - - if (! empty($uniqueConstraintAnnot->options)) { - $uniqueConstraint['options'] = $uniqueConstraintAnnot->options; - } - - if (! empty($uniqueConstraintAnnot->name)) { - $primaryTable['uniqueConstraints'][$uniqueConstraintAnnot->name] = $uniqueConstraint; - } else { - $primaryTable['uniqueConstraints'][] = $uniqueConstraint; - } - } - } - - $metadata->setPrimaryTable($primaryTable); - - // Evaluate #[Cache] attribute - if (isset($classAttributes[Mapping\Cache::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\Cache::class); - } - - $cacheAttribute = $classAttributes[Mapping\Cache::class]; - $cacheMap = [ - 'region' => $cacheAttribute->region, - 'usage' => constant('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $cacheAttribute->usage), - ]; - - $metadata->enableCache($cacheMap); - } - - // Evaluate InheritanceType attribute - if (isset($classAttributes[Mapping\InheritanceType::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\InheritanceType::class); - } - - $inheritanceTypeAttribute = $classAttributes[Mapping\InheritanceType::class]; - - $metadata->setInheritanceType( - constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceTypeAttribute->value), - ); - - if ($metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { - // Evaluate DiscriminatorColumn attribute - if (isset($classAttributes[Mapping\DiscriminatorColumn::class])) { - $discrColumnAttribute = $classAttributes[Mapping\DiscriminatorColumn::class]; - assert($discrColumnAttribute instanceof Mapping\DiscriminatorColumn); - - $columnDef = [ - 'name' => $discrColumnAttribute->name, - 'type' => $discrColumnAttribute->type ?? 'string', - 'length' => $discrColumnAttribute->length ?? 255, - 'columnDefinition' => $discrColumnAttribute->columnDefinition, - 'enumType' => $discrColumnAttribute->enumType, - ]; - - if ($discrColumnAttribute->options) { - $columnDef['options'] = $discrColumnAttribute->options; - } - - $metadata->setDiscriminatorColumn($columnDef); - } else { - $metadata->setDiscriminatorColumn(['name' => 'dtype', 'type' => 'string', 'length' => 255]); - } - - // Evaluate DiscriminatorMap attribute - if (isset($classAttributes[Mapping\DiscriminatorMap::class])) { - $discrMapAttribute = $classAttributes[Mapping\DiscriminatorMap::class]; - $metadata->setDiscriminatorMap($discrMapAttribute->value); - } - } - } - - // Evaluate DoctrineChangeTrackingPolicy attribute - if (isset($classAttributes[Mapping\ChangeTrackingPolicy::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\ChangeTrackingPolicy::class); - } - - $changeTrackingAttribute = $classAttributes[Mapping\ChangeTrackingPolicy::class]; - $metadata->setChangeTrackingPolicy(constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' . $changeTrackingAttribute->value)); - } - - foreach ($reflectionClass->getProperties() as $property) { - assert($property instanceof ReflectionProperty); - - if ($this->isRepeatedPropertyDeclaration($property, $metadata)) { - continue; - } - - $mapping = []; - $mapping['fieldName'] = $property->name; - - // Evaluate #[Cache] attribute - $cacheAttribute = $this->reader->getPropertyAttribute($property, Mapping\Cache::class); - if ($cacheAttribute !== null) { - assert($cacheAttribute instanceof Mapping\Cache); - - $mapping['cache'] = $metadata->getAssociationCacheDefaults( - $mapping['fieldName'], - [ - 'usage' => (int) constant('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $cacheAttribute->usage), - 'region' => $cacheAttribute->region, - ], - ); - } - - // Check for JoinColumn/JoinColumns attributes - $joinColumns = []; - - $joinColumnAttributes = $this->reader->getPropertyAttributeCollection($property, Mapping\JoinColumn::class); - - foreach ($joinColumnAttributes as $joinColumnAttribute) { - $joinColumns[] = $this->joinColumnToArray($joinColumnAttribute); - } - - // Field can only be attributed with one of: - // Column, OneToOne, OneToMany, ManyToOne, ManyToMany, Embedded - $columnAttribute = $this->reader->getPropertyAttribute($property, Mapping\Column::class); - $oneToOneAttribute = $this->reader->getPropertyAttribute($property, Mapping\OneToOne::class); - $oneToManyAttribute = $this->reader->getPropertyAttribute($property, Mapping\OneToMany::class); - $manyToOneAttribute = $this->reader->getPropertyAttribute($property, Mapping\ManyToOne::class); - $manyToManyAttribute = $this->reader->getPropertyAttribute($property, Mapping\ManyToMany::class); - $embeddedAttribute = $this->reader->getPropertyAttribute($property, Mapping\Embedded::class); - - if ($columnAttribute !== null) { - $mapping = $this->columnToArray($property->name, $columnAttribute); - - if ($this->reader->getPropertyAttribute($property, Mapping\Id::class)) { - $mapping['id'] = true; - } - - $generatedValueAttribute = $this->reader->getPropertyAttribute($property, Mapping\GeneratedValue::class); - - if ($generatedValueAttribute !== null) { - $metadata->setIdGeneratorType(constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' . $generatedValueAttribute->strategy)); - } - - if ($this->reader->getPropertyAttribute($property, Mapping\Version::class)) { - $metadata->setVersionMapping($mapping); - } - - $metadata->mapField($mapping); - - // Check for SequenceGenerator/TableGenerator definition - $seqGeneratorAttribute = $this->reader->getPropertyAttribute($property, Mapping\SequenceGenerator::class); - $customGeneratorAttribute = $this->reader->getPropertyAttribute($property, Mapping\CustomIdGenerator::class); - - if ($seqGeneratorAttribute !== null) { - $metadata->setSequenceGeneratorDefinition( - [ - 'sequenceName' => $seqGeneratorAttribute->sequenceName, - 'allocationSize' => $seqGeneratorAttribute->allocationSize, - 'initialValue' => $seqGeneratorAttribute->initialValue, - ], - ); - } elseif ($customGeneratorAttribute !== null) { - $metadata->setCustomGeneratorDefinition( - [ - 'class' => $customGeneratorAttribute->class, - ], - ); - } - } elseif ($oneToOneAttribute !== null) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\OneToOne::class); - } - - if ($this->reader->getPropertyAttribute($property, Mapping\Id::class)) { - $mapping['id'] = true; - } - - $mapping['targetEntity'] = $oneToOneAttribute->targetEntity; - $mapping['joinColumns'] = $joinColumns; - $mapping['mappedBy'] = $oneToOneAttribute->mappedBy; - $mapping['inversedBy'] = $oneToOneAttribute->inversedBy; - $mapping['cascade'] = $oneToOneAttribute->cascade; - $mapping['orphanRemoval'] = $oneToOneAttribute->orphanRemoval; - $mapping['fetch'] = $this->getFetchMode($className, $oneToOneAttribute->fetch); - $metadata->mapOneToOne($mapping); - } elseif ($oneToManyAttribute !== null) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\OneToMany::class); - } - - $mapping['mappedBy'] = $oneToManyAttribute->mappedBy; - $mapping['targetEntity'] = $oneToManyAttribute->targetEntity; - $mapping['cascade'] = $oneToManyAttribute->cascade; - $mapping['indexBy'] = $oneToManyAttribute->indexBy; - $mapping['orphanRemoval'] = $oneToManyAttribute->orphanRemoval; - $mapping['fetch'] = $this->getFetchMode($className, $oneToManyAttribute->fetch); - - $orderByAttribute = $this->reader->getPropertyAttribute($property, Mapping\OrderBy::class); - - if ($orderByAttribute !== null) { - $mapping['orderBy'] = $orderByAttribute->value; - } - - $metadata->mapOneToMany($mapping); - } elseif ($manyToOneAttribute !== null) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\ManyToOne::class); - } - - $idAttribute = $this->reader->getPropertyAttribute($property, Mapping\Id::class); - - if ($idAttribute !== null) { - $mapping['id'] = true; - } - - $mapping['joinColumns'] = $joinColumns; - $mapping['cascade'] = $manyToOneAttribute->cascade; - $mapping['inversedBy'] = $manyToOneAttribute->inversedBy; - $mapping['targetEntity'] = $manyToOneAttribute->targetEntity; - $mapping['fetch'] = $this->getFetchMode($className, $manyToOneAttribute->fetch); - $metadata->mapManyToOne($mapping); - } elseif ($manyToManyAttribute !== null) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\ManyToMany::class); - } - - $joinTable = []; - $joinTableAttribute = $this->reader->getPropertyAttribute($property, Mapping\JoinTable::class); - - if ($joinTableAttribute !== null) { - $joinTable = [ - 'name' => $joinTableAttribute->name, - 'schema' => $joinTableAttribute->schema, - ]; - - if ($joinTableAttribute->options) { - $joinTable['options'] = $joinTableAttribute->options; - } - - foreach ($joinTableAttribute->joinColumns as $joinColumn) { - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumn); - } - - foreach ($joinTableAttribute->inverseJoinColumns as $joinColumn) { - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumn); - } - } - - foreach ($this->reader->getPropertyAttributeCollection($property, Mapping\JoinColumn::class) as $joinColumn) { - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumn); - } - - foreach ($this->reader->getPropertyAttributeCollection($property, Mapping\InverseJoinColumn::class) as $joinColumn) { - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumn); - } - - $mapping['joinTable'] = $joinTable; - $mapping['targetEntity'] = $manyToManyAttribute->targetEntity; - $mapping['mappedBy'] = $manyToManyAttribute->mappedBy; - $mapping['inversedBy'] = $manyToManyAttribute->inversedBy; - $mapping['cascade'] = $manyToManyAttribute->cascade; - $mapping['indexBy'] = $manyToManyAttribute->indexBy; - $mapping['orphanRemoval'] = $manyToManyAttribute->orphanRemoval; - $mapping['fetch'] = $this->getFetchMode($className, $manyToManyAttribute->fetch); - - $orderByAttribute = $this->reader->getPropertyAttribute($property, Mapping\OrderBy::class); - - if ($orderByAttribute !== null) { - $mapping['orderBy'] = $orderByAttribute->value; - } - - $metadata->mapManyToMany($mapping); - } elseif ($embeddedAttribute !== null) { - $mapping['class'] = $embeddedAttribute->class; - $mapping['columnPrefix'] = $embeddedAttribute->columnPrefix; - - $metadata->mapEmbedded($mapping); - } - } - - // Evaluate AssociationOverrides attribute - if (isset($classAttributes[Mapping\AssociationOverrides::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\AssociationOverride::class); - } - - $associationOverride = $classAttributes[Mapping\AssociationOverrides::class]; - - foreach ($associationOverride->overrides as $associationOverride) { - $override = []; - $fieldName = $associationOverride->name; - - // Check for JoinColumn/JoinColumns attributes - if ($associationOverride->joinColumns) { - $joinColumns = []; - - foreach ($associationOverride->joinColumns as $joinColumn) { - $joinColumns[] = $this->joinColumnToArray($joinColumn); - } - - $override['joinColumns'] = $joinColumns; - } - - if ($associationOverride->inverseJoinColumns) { - $joinColumns = []; - - foreach ($associationOverride->inverseJoinColumns as $joinColumn) { - $joinColumns[] = $this->joinColumnToArray($joinColumn); - } - - $override['inverseJoinColumns'] = $joinColumns; - } - - // Check for JoinTable attributes - if ($associationOverride->joinTable) { - $joinTableAnnot = $associationOverride->joinTable; - $joinTable = [ - 'name' => $joinTableAnnot->name, - 'schema' => $joinTableAnnot->schema, - 'joinColumns' => $override['joinColumns'] ?? [], - 'inverseJoinColumns' => $override['inverseJoinColumns'] ?? [], - ]; - - unset($override['joinColumns'], $override['inverseJoinColumns']); - - $override['joinTable'] = $joinTable; - } - - // Check for inversedBy - if ($associationOverride->inversedBy) { - $override['inversedBy'] = $associationOverride->inversedBy; - } - - // Check for `fetch` - if ($associationOverride->fetch) { - $override['fetch'] = constant(ClassMetadata::class . '::FETCH_' . $associationOverride->fetch); - } - - $metadata->setAssociationOverride($fieldName, $override); - } - } - - // Evaluate AttributeOverrides attribute - if (isset($classAttributes[Mapping\AttributeOverrides::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\AttributeOverrides::class); - } - - $attributeOverridesAnnot = $classAttributes[Mapping\AttributeOverrides::class]; - - foreach ($attributeOverridesAnnot->overrides as $attributeOverride) { - $mapping = $this->columnToArray($attributeOverride->name, $attributeOverride->column); - - $metadata->setAttributeOverride($attributeOverride->name, $mapping); - } - } - - // Evaluate EntityListeners attribute - if (isset($classAttributes[Mapping\EntityListeners::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\EntityListeners::class); - } - - $entityListenersAttribute = $classAttributes[Mapping\EntityListeners::class]; - - foreach ($entityListenersAttribute->value as $item) { - $listenerClassName = $metadata->fullyQualifiedClassName($item); - - if (! class_exists($listenerClassName)) { - throw MappingException::entityListenerClassNotFound($listenerClassName, $className); - } - - $hasMapping = false; - $listenerClass = new ReflectionClass($listenerClassName); - - foreach ($listenerClass->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { - assert($method instanceof ReflectionMethod); - // find method callbacks. - $callbacks = $this->getMethodCallbacks($method); - $hasMapping = $hasMapping ?: ! empty($callbacks); - - foreach ($callbacks as $value) { - $metadata->addEntityListener($value[1], $listenerClassName, $value[0]); - } - } - - // Evaluate the listener using naming convention. - if (! $hasMapping) { - EntityListenerBuilder::bindEntityListener($metadata, $listenerClassName); - } - } - } - - // Evaluate #[HasLifecycleCallbacks] attribute - if (isset($classAttributes[Mapping\HasLifecycleCallbacks::class])) { - if ($metadata->isEmbeddedClass) { - throw MappingException::invalidAttributeOnEmbeddable($metadata->name, Mapping\HasLifecycleCallbacks::class); - } - - foreach ($reflectionClass->getMethods(ReflectionMethod::IS_PUBLIC) as $method) { - assert($method instanceof ReflectionMethod); - foreach ($this->getMethodCallbacks($method) as $value) { - $metadata->addLifecycleCallback($value[0], $value[1]); - } - } - } - } - - /** - * Attempts to resolve the fetch mode. - * - * @param class-string $className The class name. - * @param string $fetchMode The fetch mode. - * - * @return ClassMetadata::FETCH_* The fetch mode as defined in ClassMetadata. - * - * @throws MappingException If the fetch mode is not valid. - */ - private function getFetchMode(string $className, string $fetchMode): int - { - if (! defined('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $fetchMode)) { - throw MappingException::invalidFetchMode($className, $fetchMode); - } - - return constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . $fetchMode); - } - - /** - * Attempts to resolve the generated mode. - * - * @throws MappingException If the fetch mode is not valid. - */ - private function getGeneratedMode(string $generatedMode): int - { - if (! defined('Doctrine\ORM\Mapping\ClassMetadata::GENERATED_' . $generatedMode)) { - throw MappingException::invalidGeneratedMode($generatedMode); - } - - return constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATED_' . $generatedMode); - } - - /** - * Parses the given method. - * - * @return list - * @psalm-return list - */ - private function getMethodCallbacks(ReflectionMethod $method): array - { - $callbacks = []; - $attributes = $this->reader->getMethodAttributes($method); - - foreach ($attributes as $attribute) { - if ($attribute instanceof Mapping\PrePersist) { - $callbacks[] = [$method->name, Events::prePersist]; - } - - if ($attribute instanceof Mapping\PostPersist) { - $callbacks[] = [$method->name, Events::postPersist]; - } - - if ($attribute instanceof Mapping\PreUpdate) { - $callbacks[] = [$method->name, Events::preUpdate]; - } - - if ($attribute instanceof Mapping\PostUpdate) { - $callbacks[] = [$method->name, Events::postUpdate]; - } - - if ($attribute instanceof Mapping\PreRemove) { - $callbacks[] = [$method->name, Events::preRemove]; - } - - if ($attribute instanceof Mapping\PostRemove) { - $callbacks[] = [$method->name, Events::postRemove]; - } - - if ($attribute instanceof Mapping\PostLoad) { - $callbacks[] = [$method->name, Events::postLoad]; - } - - if ($attribute instanceof Mapping\PreFlush) { - $callbacks[] = [$method->name, Events::preFlush]; - } - } - - return $callbacks; - } - - /** - * Parse the given JoinColumn as array - * - * @return mixed[] - * @psalm-return array{ - * name: string|null, - * unique: bool, - * nullable: bool, - * onDelete: mixed, - * columnDefinition: string|null, - * referencedColumnName: string, - * options?: array - * } - */ - private function joinColumnToArray(Mapping\JoinColumn|Mapping\InverseJoinColumn $joinColumn): array - { - $mapping = [ - 'name' => $joinColumn->name, - 'unique' => $joinColumn->unique, - 'nullable' => $joinColumn->nullable, - 'onDelete' => $joinColumn->onDelete, - 'columnDefinition' => $joinColumn->columnDefinition, - 'referencedColumnName' => $joinColumn->referencedColumnName, - ]; - - if ($joinColumn->options) { - $mapping['options'] = $joinColumn->options; - } - - return $mapping; - } - - /** - * Parse the given Column as array - * - * @return mixed[] - * @psalm-return array{ - * fieldName: string, - * type: mixed, - * scale: int, - * length: int, - * unique: bool, - * nullable: bool, - * precision: int, - * enumType?: class-string, - * options?: mixed[], - * columnName?: string, - * columnDefinition?: string - * } - */ - private function columnToArray(string $fieldName, Mapping\Column $column): array - { - $mapping = [ - 'fieldName' => $fieldName, - 'type' => $column->type, - 'scale' => $column->scale, - 'length' => $column->length, - 'unique' => $column->unique, - 'nullable' => $column->nullable, - 'precision' => $column->precision, - ]; - - if ($column->options) { - $mapping['options'] = $column->options; - } - - if (isset($column->name)) { - $mapping['columnName'] = $column->name; - } - - if (isset($column->columnDefinition)) { - $mapping['columnDefinition'] = $column->columnDefinition; - } - - if ($column->updatable === false) { - $mapping['notUpdatable'] = true; - } - - if ($column->insertable === false) { - $mapping['notInsertable'] = true; - } - - if ($column->generated !== null) { - $mapping['generated'] = $this->getGeneratedMode($column->generated); - } - - if ($column->enumType) { - $mapping['enumType'] = $column->enumType; - } - - return $mapping; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Driver/AttributeReader.php b/vendor/doctrine/orm/src/Mapping/Driver/AttributeReader.php deleted file mode 100644 index 2de622a..0000000 --- a/vendor/doctrine/orm/src/Mapping/Driver/AttributeReader.php +++ /dev/null @@ -1,146 +0,0 @@ -, bool> */ - private array $isRepeatableAttribute = []; - - /** - * @psalm-return class-string-map> - * - * @template T of MappingAttribute - */ - public function getClassAttributes(ReflectionClass $class): array - { - return $this->convertToAttributeInstances($class->getAttributes()); - } - - /** - * @return class-string-map> - * - * @template T of MappingAttribute - */ - public function getMethodAttributes(ReflectionMethod $method): array - { - return $this->convertToAttributeInstances($method->getAttributes()); - } - - /** - * @return class-string-map> - * - * @template T of MappingAttribute - */ - public function getPropertyAttributes(ReflectionProperty $property): array - { - return $this->convertToAttributeInstances($property->getAttributes()); - } - - /** - * @param class-string $attributeName The name of the annotation. - * - * @return T|null - * - * @template T of MappingAttribute - */ - public function getPropertyAttribute(ReflectionProperty $property, string $attributeName) - { - if ($this->isRepeatable($attributeName)) { - throw new LogicException(sprintf( - 'The attribute "%s" is repeatable. Call getPropertyAttributeCollection() instead.', - $attributeName, - )); - } - - return $this->getPropertyAttributes($property)[$attributeName] ?? null; - } - - /** - * @param class-string $attributeName The name of the annotation. - * - * @return RepeatableAttributeCollection - * - * @template T of MappingAttribute - */ - public function getPropertyAttributeCollection( - ReflectionProperty $property, - string $attributeName, - ): RepeatableAttributeCollection { - if (! $this->isRepeatable($attributeName)) { - throw new LogicException(sprintf( - 'The attribute "%s" is not repeatable. Call getPropertyAttribute() instead.', - $attributeName, - )); - } - - return $this->getPropertyAttributes($property)[$attributeName] ?? new RepeatableAttributeCollection(); - } - - /** - * @param array $attributes - * - * @return class-string-map> - * - * @template T of MappingAttribute - */ - private function convertToAttributeInstances(array $attributes): array - { - $instances = []; - - foreach ($attributes as $attribute) { - $attributeName = $attribute->getName(); - assert(is_string($attributeName)); - // Make sure we only get Doctrine Attributes - if (! is_subclass_of($attributeName, MappingAttribute::class)) { - continue; - } - - $instance = $attribute->newInstance(); - assert($instance instanceof MappingAttribute); - - if ($this->isRepeatable($attributeName)) { - if (! isset($instances[$attributeName])) { - $instances[$attributeName] = new RepeatableAttributeCollection(); - } - - $collection = $instances[$attributeName]; - assert($collection instanceof RepeatableAttributeCollection); - $collection[] = $instance; - } else { - $instances[$attributeName] = $instance; - } - } - - return $instances; - } - - /** @param class-string $attributeClassName */ - private function isRepeatable(string $attributeClassName): bool - { - if (isset($this->isRepeatableAttribute[$attributeClassName])) { - return $this->isRepeatableAttribute[$attributeClassName]; - } - - $reflectionClass = new ReflectionClass($attributeClassName); - $attribute = $reflectionClass->getAttributes()[0]->newInstance(); - - return $this->isRepeatableAttribute[$attributeClassName] = ($attribute->flags & Attribute::IS_REPEATABLE) > 0; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Driver/DatabaseDriver.php b/vendor/doctrine/orm/src/Mapping/Driver/DatabaseDriver.php deleted file mode 100644 index 49e2e93..0000000 --- a/vendor/doctrine/orm/src/Mapping/Driver/DatabaseDriver.php +++ /dev/null @@ -1,528 +0,0 @@ -|null */ - private array|null $tables = null; - - /** @var array */ - private array $classToTableNames = []; - - /** @psalm-var array */ - private array $manyToManyTables = []; - - /** @var mixed[] */ - private array $classNamesForTables = []; - - /** @var mixed[] */ - private array $fieldNamesForColumns = []; - - /** - * The namespace for the generated entities. - */ - private string|null $namespace = null; - - private Inflector $inflector; - - public function __construct(private readonly AbstractSchemaManager $sm) - { - $this->inflector = InflectorFactory::create()->build(); - } - - /** - * Set the namespace for the generated entities. - */ - public function setNamespace(string $namespace): void - { - $this->namespace = $namespace; - } - - public function isTransient(string $className): bool - { - return true; - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames(): array - { - $this->reverseEngineerMappingFromDatabase(); - - return array_keys($this->classToTableNames); - } - - /** - * Sets class name for a table. - */ - public function setClassNameForTable(string $tableName, string $className): void - { - $this->classNamesForTables[$tableName] = $className; - } - - /** - * Sets field name for a column on a specific table. - */ - public function setFieldNameForColumn(string $tableName, string $columnName, string $fieldName): void - { - $this->fieldNamesForColumns[$tableName][$columnName] = $fieldName; - } - - /** - * Sets tables manually instead of relying on the reverse engineering capabilities of SchemaManager. - * - * @param Table[] $entityTables - * @param Table[] $manyToManyTables - * @psalm-param list $entityTables - * @psalm-param list
$manyToManyTables - */ - public function setTables(array $entityTables, array $manyToManyTables): void - { - $this->tables = $this->manyToManyTables = $this->classToTableNames = []; - - foreach ($entityTables as $table) { - $className = $this->getClassNameForTable($table->getName()); - - $this->classToTableNames[$className] = $table->getName(); - $this->tables[$table->getName()] = $table; - } - - foreach ($manyToManyTables as $table) { - $this->manyToManyTables[$table->getName()] = $table; - } - } - - public function setInflector(Inflector $inflector): void - { - $this->inflector = $inflector; - } - - /** - * {@inheritDoc} - * - * @psalm-param class-string $className - * @psalm-param ClassMetadata $metadata - * - * @template T of object - */ - public function loadMetadataForClass(string $className, PersistenceClassMetadata $metadata): void - { - if (! $metadata instanceof ClassMetadata) { - throw new TypeError(sprintf( - 'Argument #2 passed to %s() must be an instance of %s, %s given.', - __METHOD__, - ClassMetadata::class, - get_debug_type($metadata), - )); - } - - $this->reverseEngineerMappingFromDatabase(); - - if (! isset($this->classToTableNames[$className])) { - throw new InvalidArgumentException('Unknown class ' . $className); - } - - $tableName = $this->classToTableNames[$className]; - - $metadata->name = $className; - $metadata->table['name'] = $tableName; - - $this->buildIndexes($metadata); - $this->buildFieldMappings($metadata); - $this->buildToOneAssociationMappings($metadata); - - foreach ($this->manyToManyTables as $manyTable) { - foreach ($manyTable->getForeignKeys() as $foreignKey) { - // foreign key maps to the table of the current entity, many to many association probably exists - if (! (strtolower($tableName) === strtolower($foreignKey->getForeignTableName()))) { - continue; - } - - $myFk = $foreignKey; - $otherFk = null; - - foreach ($manyTable->getForeignKeys() as $foreignKey) { - if ($foreignKey !== $myFk) { - $otherFk = $foreignKey; - break; - } - } - - if (! $otherFk) { - // the definition of this many to many table does not contain - // enough foreign key information to continue reverse engineering. - continue; - } - - $localColumn = current($myFk->getLocalColumns()); - - $associationMapping = []; - $associationMapping['fieldName'] = $this->getFieldNameForColumn($manyTable->getName(), current($otherFk->getLocalColumns()), true); - $associationMapping['targetEntity'] = $this->getClassNameForTable($otherFk->getForeignTableName()); - - if (current($manyTable->getColumns())->getName() === $localColumn) { - $associationMapping['inversedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getLocalColumns()), true); - $associationMapping['joinTable'] = [ - 'name' => strtolower($manyTable->getName()), - 'joinColumns' => [], - 'inverseJoinColumns' => [], - ]; - - $fkCols = $myFk->getForeignColumns(); - $cols = $myFk->getLocalColumns(); - - for ($i = 0, $colsCount = count($cols); $i < $colsCount; $i++) { - $associationMapping['joinTable']['joinColumns'][] = [ - 'name' => $cols[$i], - 'referencedColumnName' => $fkCols[$i], - ]; - } - - $fkCols = $otherFk->getForeignColumns(); - $cols = $otherFk->getLocalColumns(); - - for ($i = 0, $colsCount = count($cols); $i < $colsCount; $i++) { - $associationMapping['joinTable']['inverseJoinColumns'][] = [ - 'name' => $cols[$i], - 'referencedColumnName' => $fkCols[$i], - ]; - } - } else { - $associationMapping['mappedBy'] = $this->getFieldNameForColumn($manyTable->getName(), current($myFk->getLocalColumns()), true); - } - - $metadata->mapManyToMany($associationMapping); - - break; - } - } - } - - /** @throws MappingException */ - private function reverseEngineerMappingFromDatabase(): void - { - if ($this->tables !== null) { - return; - } - - $this->tables = $this->manyToManyTables = $this->classToTableNames = []; - - foreach ($this->sm->listTables() as $table) { - $tableName = $table->getName(); - $foreignKeys = $table->getForeignKeys(); - - $allForeignKeyColumns = []; - - foreach ($foreignKeys as $foreignKey) { - $allForeignKeyColumns = array_merge($allForeignKeyColumns, $foreignKey->getLocalColumns()); - } - - $primaryKey = $table->getPrimaryKey(); - if ($primaryKey === null) { - throw new MappingException( - 'Table ' . $tableName . ' has no primary key. Doctrine does not ' . - "support reverse engineering from tables that don't have a primary key.", - ); - } - - $pkColumns = $primaryKey->getColumns(); - - sort($pkColumns); - sort($allForeignKeyColumns); - - if ($pkColumns === $allForeignKeyColumns && count($foreignKeys) === 2) { - $this->manyToManyTables[$tableName] = $table; - } else { - // lower-casing is necessary because of Oracle Uppercase Tablenames, - // assumption is lower-case + underscore separated. - $className = $this->getClassNameForTable($tableName); - - $this->tables[$tableName] = $table; - $this->classToTableNames[$className] = $tableName; - } - } - } - - /** - * Build indexes from a class metadata. - */ - private function buildIndexes(ClassMetadata $metadata): void - { - $tableName = $metadata->table['name']; - $indexes = $this->tables[$tableName]->getIndexes(); - - foreach ($indexes as $index) { - if ($index->isPrimary()) { - continue; - } - - $indexName = $index->getName(); - $indexColumns = $index->getColumns(); - $constraintType = $index->isUnique() - ? 'uniqueConstraints' - : 'indexes'; - - $metadata->table[$constraintType][$indexName]['columns'] = $indexColumns; - } - } - - /** - * Build field mapping from class metadata. - */ - private function buildFieldMappings(ClassMetadata $metadata): void - { - $tableName = $metadata->table['name']; - $columns = $this->tables[$tableName]->getColumns(); - $primaryKeys = $this->getTablePrimaryKeys($this->tables[$tableName]); - $foreignKeys = $this->tables[$tableName]->getForeignKeys(); - $allForeignKeys = []; - - foreach ($foreignKeys as $foreignKey) { - $allForeignKeys = array_merge($allForeignKeys, $foreignKey->getLocalColumns()); - } - - $ids = []; - $fieldMappings = []; - - foreach ($columns as $column) { - if (in_array($column->getName(), $allForeignKeys, true)) { - continue; - } - - $fieldMapping = $this->buildFieldMapping($tableName, $column); - - if ($primaryKeys && in_array($column->getName(), $primaryKeys, true)) { - $fieldMapping['id'] = true; - $ids[] = $fieldMapping; - } - - $fieldMappings[] = $fieldMapping; - } - - // We need to check for the columns here, because we might have associations as id as well. - if ($ids && count($primaryKeys) === 1) { - $metadata->setIdGeneratorType(ClassMetadata::GENERATOR_TYPE_AUTO); - } - - foreach ($fieldMappings as $fieldMapping) { - $metadata->mapField($fieldMapping); - } - } - - /** - * Build field mapping from a schema column definition - * - * @return mixed[] - * @psalm-return array{ - * fieldName: string, - * columnName: string, - * type: string, - * nullable: bool, - * options: array{ - * unsigned?: bool, - * fixed?: bool, - * comment: string|null, - * default?: mixed - * }, - * precision?: int, - * scale?: int, - * length?: int|null - * } - */ - private function buildFieldMapping(string $tableName, Column $column): array - { - $fieldMapping = [ - 'fieldName' => $this->getFieldNameForColumn($tableName, $column->getName(), false), - 'columnName' => $column->getName(), - 'type' => Type::getTypeRegistry()->lookupName($column->getType()), - 'nullable' => ! $column->getNotnull(), - 'options' => [ - 'comment' => $column->getComment(), - ], - ]; - - // Type specific elements - switch ($fieldMapping['type']) { - case self::ARRAY: - case Types::BLOB: - case Types::GUID: - case self::OBJECT: - case Types::SIMPLE_ARRAY: - case Types::STRING: - case Types::TEXT: - $fieldMapping['length'] = $column->getLength(); - $fieldMapping['options']['fixed'] = $column->getFixed(); - break; - - case Types::DECIMAL: - case Types::FLOAT: - $fieldMapping['precision'] = $column->getPrecision(); - $fieldMapping['scale'] = $column->getScale(); - break; - - case Types::INTEGER: - case Types::BIGINT: - case Types::SMALLINT: - $fieldMapping['options']['unsigned'] = $column->getUnsigned(); - break; - } - - // Default - $default = $column->getDefault(); - if ($default !== null) { - $fieldMapping['options']['default'] = $default; - } - - return $fieldMapping; - } - - /** - * Build to one (one to one, many to one) association mapping from class metadata. - */ - private function buildToOneAssociationMappings(ClassMetadata $metadata): void - { - assert($this->tables !== null); - - $tableName = $metadata->table['name']; - $primaryKeys = $this->getTablePrimaryKeys($this->tables[$tableName]); - $foreignKeys = $this->tables[$tableName]->getForeignKeys(); - - foreach ($foreignKeys as $foreignKey) { - $foreignTableName = $foreignKey->getForeignTableName(); - $fkColumns = $foreignKey->getLocalColumns(); - $fkForeignColumns = $foreignKey->getForeignColumns(); - $localColumn = current($fkColumns); - $associationMapping = [ - 'fieldName' => $this->getFieldNameForColumn($tableName, $localColumn, true), - 'targetEntity' => $this->getClassNameForTable($foreignTableName), - ]; - - if (isset($metadata->fieldMappings[$associationMapping['fieldName']])) { - $associationMapping['fieldName'] .= '2'; // "foo" => "foo2" - } - - if ($primaryKeys && in_array($localColumn, $primaryKeys, true)) { - $associationMapping['id'] = true; - } - - for ($i = 0, $fkColumnsCount = count($fkColumns); $i < $fkColumnsCount; $i++) { - $associationMapping['joinColumns'][] = [ - 'name' => $fkColumns[$i], - 'referencedColumnName' => $fkForeignColumns[$i], - ]; - } - - // Here we need to check if $fkColumns are the same as $primaryKeys - if (! array_diff($fkColumns, $primaryKeys)) { - $metadata->mapOneToOne($associationMapping); - } else { - $metadata->mapManyToOne($associationMapping); - } - } - } - - /** - * Retrieve schema table definition primary keys. - * - * @return string[] - */ - private function getTablePrimaryKeys(Table $table): array - { - try { - return $table->getPrimaryKey()->getColumns(); - } catch (SchemaException) { - // Do nothing - } - - return []; - } - - /** - * Returns the mapped class name for a table if it exists. Otherwise return "classified" version. - * - * @psalm-return class-string - */ - private function getClassNameForTable(string $tableName): string - { - if (isset($this->classNamesForTables[$tableName])) { - return $this->namespace . $this->classNamesForTables[$tableName]; - } - - return $this->namespace . $this->inflector->classify(strtolower($tableName)); - } - - /** - * Return the mapped field name for a column, if it exists. Otherwise return camelized version. - * - * @param bool $fk Whether the column is a foreignkey or not. - */ - private function getFieldNameForColumn( - string $tableName, - string $columnName, - bool $fk = false, - ): string { - if (isset($this->fieldNamesForColumns[$tableName], $this->fieldNamesForColumns[$tableName][$columnName])) { - return $this->fieldNamesForColumns[$tableName][$columnName]; - } - - $columnName = strtolower($columnName); - - // Replace _id if it is a foreignkey column - if ($fk) { - $columnName = preg_replace('/_id$/', '', $columnName); - } - - return $this->inflector->camelize($columnName); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Driver/ReflectionBasedDriver.php b/vendor/doctrine/orm/src/Mapping/Driver/ReflectionBasedDriver.php deleted file mode 100644 index 7d85471..0000000 --- a/vendor/doctrine/orm/src/Mapping/Driver/ReflectionBasedDriver.php +++ /dev/null @@ -1,44 +0,0 @@ -class; - - if ( - isset($metadata->fieldMappings[$property->name]->declared) - && $metadata->fieldMappings[$property->name]->declared === $declaringClass - ) { - return true; - } - - if ( - isset($metadata->associationMappings[$property->name]->declared) - && $metadata->associationMappings[$property->name]->declared === $declaringClass - ) { - return true; - } - - return isset($metadata->embeddedClasses[$property->name]->declared) - && $metadata->embeddedClasses[$property->name]->declared === $declaringClass; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Driver/RepeatableAttributeCollection.php b/vendor/doctrine/orm/src/Mapping/Driver/RepeatableAttributeCollection.php deleted file mode 100644 index 2f6ae93..0000000 --- a/vendor/doctrine/orm/src/Mapping/Driver/RepeatableAttributeCollection.php +++ /dev/null @@ -1,16 +0,0 @@ - - * @template T of MappingAttribute - */ -final class RepeatableAttributeCollection extends ArrayObject -{ -} diff --git a/vendor/doctrine/orm/src/Mapping/Driver/SimplifiedXmlDriver.php b/vendor/doctrine/orm/src/Mapping/Driver/SimplifiedXmlDriver.php deleted file mode 100644 index 486185f..0000000 --- a/vendor/doctrine/orm/src/Mapping/Driver/SimplifiedXmlDriver.php +++ /dev/null @@ -1,25 +0,0 @@ - - */ -class XmlDriver extends FileDriver -{ - public const DEFAULT_FILE_EXTENSION = '.dcm.xml'; - - /** - * {@inheritDoc} - */ - public function __construct( - string|array|FileLocator $locator, - string $fileExtension = self::DEFAULT_FILE_EXTENSION, - private readonly bool $isXsdValidationEnabled = true, - ) { - if (! extension_loaded('simplexml')) { - throw new LogicException( - 'The XML metadata driver cannot be enabled because the SimpleXML PHP extension is missing.' - . ' Please configure PHP with SimpleXML or choose a different metadata driver.', - ); - } - - if ($isXsdValidationEnabled && ! extension_loaded('dom')) { - throw new LogicException( - 'XSD validation cannot be enabled because the DOM extension is missing.', - ); - } - - parent::__construct($locator, $fileExtension); - } - - /** - * {@inheritDoc} - * - * @psalm-param class-string $className - * @psalm-param ClassMetadata $metadata - * - * @template T of object - */ - public function loadMetadataForClass($className, PersistenceClassMetadata $metadata): void - { - $xmlRoot = $this->getElement($className); - - if ($xmlRoot->getName() === 'entity') { - if (isset($xmlRoot['repository-class'])) { - $metadata->setCustomRepositoryClass((string) $xmlRoot['repository-class']); - } - - if (isset($xmlRoot['read-only']) && $this->evaluateBoolean($xmlRoot['read-only'])) { - $metadata->markReadOnly(); - } - } elseif ($xmlRoot->getName() === 'mapped-superclass') { - $metadata->setCustomRepositoryClass( - isset($xmlRoot['repository-class']) ? (string) $xmlRoot['repository-class'] : null, - ); - $metadata->isMappedSuperclass = true; - } elseif ($xmlRoot->getName() === 'embeddable') { - $metadata->isEmbeddedClass = true; - } else { - throw MappingException::classIsNotAValidEntityOrMappedSuperClass($className); - } - - // Evaluate attributes - $primaryTable = []; - - if (isset($xmlRoot['table'])) { - $primaryTable['name'] = (string) $xmlRoot['table']; - } - - if (isset($xmlRoot['schema'])) { - $primaryTable['schema'] = (string) $xmlRoot['schema']; - } - - $metadata->setPrimaryTable($primaryTable); - - // Evaluate second level cache - if (isset($xmlRoot->cache)) { - $metadata->enableCache($this->cacheToArray($xmlRoot->cache)); - } - - if (isset($xmlRoot['inheritance-type'])) { - $inheritanceType = (string) $xmlRoot['inheritance-type']; - $metadata->setInheritanceType(constant('Doctrine\ORM\Mapping\ClassMetadata::INHERITANCE_TYPE_' . $inheritanceType)); - - if ($metadata->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { - // Evaluate - if (isset($xmlRoot->{'discriminator-column'})) { - $discrColumn = $xmlRoot->{'discriminator-column'}; - $columnDef = [ - 'name' => isset($discrColumn['name']) ? (string) $discrColumn['name'] : null, - 'type' => isset($discrColumn['type']) ? (string) $discrColumn['type'] : 'string', - 'length' => isset($discrColumn['length']) ? (int) $discrColumn['length'] : 255, - 'columnDefinition' => isset($discrColumn['column-definition']) ? (string) $discrColumn['column-definition'] : null, - 'enumType' => isset($discrColumn['enum-type']) ? (string) $discrColumn['enum-type'] : null, - ]; - - if (isset($discrColumn['options'])) { - assert($discrColumn['options'] instanceof SimpleXMLElement); - $columnDef['options'] = $this->parseOptions($discrColumn['options']->children()); - } - - $metadata->setDiscriminatorColumn($columnDef); - } else { - $metadata->setDiscriminatorColumn(['name' => 'dtype', 'type' => 'string', 'length' => 255]); - } - - // Evaluate - if (isset($xmlRoot->{'discriminator-map'})) { - $map = []; - assert($xmlRoot->{'discriminator-map'}->{'discriminator-mapping'} instanceof SimpleXMLElement); - foreach ($xmlRoot->{'discriminator-map'}->{'discriminator-mapping'} as $discrMapElement) { - $map[(string) $discrMapElement['value']] = (string) $discrMapElement['class']; - } - - $metadata->setDiscriminatorMap($map); - } - } - } - - // Evaluate - if (isset($xmlRoot['change-tracking-policy'])) { - $metadata->setChangeTrackingPolicy(constant('Doctrine\ORM\Mapping\ClassMetadata::CHANGETRACKING_' - . strtoupper((string) $xmlRoot['change-tracking-policy']))); - } - - // Evaluate - if (isset($xmlRoot->indexes)) { - $metadata->table['indexes'] = []; - foreach ($xmlRoot->indexes->index ?? [] as $indexXml) { - $index = []; - - if (isset($indexXml['columns']) && ! empty($indexXml['columns'])) { - $index['columns'] = explode(',', (string) $indexXml['columns']); - } - - if (isset($indexXml['fields'])) { - $index['fields'] = explode(',', (string) $indexXml['fields']); - } - - if ( - isset($index['columns'], $index['fields']) - || ( - ! isset($index['columns']) - && ! isset($index['fields']) - ) - ) { - throw MappingException::invalidIndexConfiguration( - $className, - (string) ($indexXml['name'] ?? count($metadata->table['indexes'])), - ); - } - - if (isset($indexXml['flags'])) { - $index['flags'] = explode(',', (string) $indexXml['flags']); - } - - if (isset($indexXml->options)) { - $index['options'] = $this->parseOptions($indexXml->options->children()); - } - - if (isset($indexXml['name'])) { - $metadata->table['indexes'][(string) $indexXml['name']] = $index; - } else { - $metadata->table['indexes'][] = $index; - } - } - } - - // Evaluate - if (isset($xmlRoot->{'unique-constraints'})) { - $metadata->table['uniqueConstraints'] = []; - foreach ($xmlRoot->{'unique-constraints'}->{'unique-constraint'} ?? [] as $uniqueXml) { - $unique = []; - - if (isset($uniqueXml['columns']) && ! empty($uniqueXml['columns'])) { - $unique['columns'] = explode(',', (string) $uniqueXml['columns']); - } - - if (isset($uniqueXml['fields'])) { - $unique['fields'] = explode(',', (string) $uniqueXml['fields']); - } - - if ( - isset($unique['columns'], $unique['fields']) - || ( - ! isset($unique['columns']) - && ! isset($unique['fields']) - ) - ) { - throw MappingException::invalidUniqueConstraintConfiguration( - $className, - (string) ($uniqueXml['name'] ?? count($metadata->table['uniqueConstraints'])), - ); - } - - if (isset($uniqueXml->options)) { - $unique['options'] = $this->parseOptions($uniqueXml->options->children()); - } - - if (isset($uniqueXml['name'])) { - $metadata->table['uniqueConstraints'][(string) $uniqueXml['name']] = $unique; - } else { - $metadata->table['uniqueConstraints'][] = $unique; - } - } - } - - if (isset($xmlRoot->options)) { - $metadata->table['options'] = $this->parseOptions($xmlRoot->options->children()); - } - - // The mapping assignment is done in 2 times as a bug might occurs on some php/xml lib versions - // The internal SimpleXmlIterator get resetted, to this generate a duplicate field exception - // Evaluate mappings - if (isset($xmlRoot->field)) { - foreach ($xmlRoot->field as $fieldMapping) { - $mapping = $this->columnToArray($fieldMapping); - - if (isset($mapping['version'])) { - $metadata->setVersionMapping($mapping); - unset($mapping['version']); - } - - $metadata->mapField($mapping); - } - } - - if (isset($xmlRoot->embedded)) { - foreach ($xmlRoot->embedded as $embeddedMapping) { - $columnPrefix = isset($embeddedMapping['column-prefix']) - ? (string) $embeddedMapping['column-prefix'] - : null; - - $useColumnPrefix = isset($embeddedMapping['use-column-prefix']) - ? $this->evaluateBoolean($embeddedMapping['use-column-prefix']) - : true; - - $mapping = [ - 'fieldName' => (string) $embeddedMapping['name'], - 'class' => isset($embeddedMapping['class']) ? (string) $embeddedMapping['class'] : null, - 'columnPrefix' => $useColumnPrefix ? $columnPrefix : false, - ]; - - $metadata->mapEmbedded($mapping); - } - } - - // Evaluate mappings - $associationIds = []; - foreach ($xmlRoot->id ?? [] as $idElement) { - if (isset($idElement['association-key']) && $this->evaluateBoolean($idElement['association-key'])) { - $associationIds[(string) $idElement['name']] = true; - continue; - } - - $mapping = $this->columnToArray($idElement); - $mapping['id'] = true; - - $metadata->mapField($mapping); - - if (isset($idElement->generator)) { - $strategy = isset($idElement->generator['strategy']) ? - (string) $idElement->generator['strategy'] : 'AUTO'; - $metadata->setIdGeneratorType(constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATOR_TYPE_' - . $strategy)); - } - - // Check for SequenceGenerator/TableGenerator definition - if (isset($idElement->{'sequence-generator'})) { - $seqGenerator = $idElement->{'sequence-generator'}; - $metadata->setSequenceGeneratorDefinition( - [ - 'sequenceName' => (string) $seqGenerator['sequence-name'], - 'allocationSize' => (string) $seqGenerator['allocation-size'], - 'initialValue' => (string) $seqGenerator['initial-value'], - ], - ); - } elseif (isset($idElement->{'custom-id-generator'})) { - $customGenerator = $idElement->{'custom-id-generator'}; - $metadata->setCustomGeneratorDefinition( - [ - 'class' => (string) $customGenerator['class'], - ], - ); - } - } - - // Evaluate mappings - if (isset($xmlRoot->{'one-to-one'})) { - foreach ($xmlRoot->{'one-to-one'} as $oneToOneElement) { - $mapping = [ - 'fieldName' => (string) $oneToOneElement['field'], - ]; - - if (isset($oneToOneElement['target-entity'])) { - $mapping['targetEntity'] = (string) $oneToOneElement['target-entity']; - } - - if (isset($associationIds[$mapping['fieldName']])) { - $mapping['id'] = true; - } - - if (isset($oneToOneElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . (string) $oneToOneElement['fetch']); - } - - if (isset($oneToOneElement['mapped-by'])) { - $mapping['mappedBy'] = (string) $oneToOneElement['mapped-by']; - } else { - if (isset($oneToOneElement['inversed-by'])) { - $mapping['inversedBy'] = (string) $oneToOneElement['inversed-by']; - } - - $joinColumns = []; - - if (isset($oneToOneElement->{'join-column'})) { - $joinColumns[] = $this->joinColumnToArray($oneToOneElement->{'join-column'}); - } elseif (isset($oneToOneElement->{'join-columns'})) { - foreach ($oneToOneElement->{'join-columns'}->{'join-column'} ?? [] as $joinColumnElement) { - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); - } - } - - $mapping['joinColumns'] = $joinColumns; - } - - if (isset($oneToOneElement->cascade)) { - $mapping['cascade'] = $this->getCascadeMappings($oneToOneElement->cascade); - } - - if (isset($oneToOneElement['orphan-removal'])) { - $mapping['orphanRemoval'] = $this->evaluateBoolean($oneToOneElement['orphan-removal']); - } - - // Evaluate second level cache - if (isset($oneToOneElement->cache)) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($oneToOneElement->cache)); - } - - $metadata->mapOneToOne($mapping); - } - } - - // Evaluate mappings - if (isset($xmlRoot->{'one-to-many'})) { - foreach ($xmlRoot->{'one-to-many'} as $oneToManyElement) { - $mapping = [ - 'fieldName' => (string) $oneToManyElement['field'], - 'mappedBy' => (string) $oneToManyElement['mapped-by'], - ]; - - if (isset($oneToManyElement['target-entity'])) { - $mapping['targetEntity'] = (string) $oneToManyElement['target-entity']; - } - - if (isset($oneToManyElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . (string) $oneToManyElement['fetch']); - } - - if (isset($oneToManyElement->cascade)) { - $mapping['cascade'] = $this->getCascadeMappings($oneToManyElement->cascade); - } - - if (isset($oneToManyElement['orphan-removal'])) { - $mapping['orphanRemoval'] = $this->evaluateBoolean($oneToManyElement['orphan-removal']); - } - - if (isset($oneToManyElement->{'order-by'})) { - $orderBy = []; - foreach ($oneToManyElement->{'order-by'}->{'order-by-field'} ?? [] as $orderByField) { - /** @psalm-suppress DeprecatedConstant */ - $orderBy[(string) $orderByField['name']] = isset($orderByField['direction']) - ? (string) $orderByField['direction'] - : (enum_exists(Order::class) ? Order::Ascending->value : Criteria::ASC); - } - - $mapping['orderBy'] = $orderBy; - } - - if (isset($oneToManyElement['index-by'])) { - $mapping['indexBy'] = (string) $oneToManyElement['index-by']; - } elseif (isset($oneToManyElement->{'index-by'})) { - throw new InvalidArgumentException(' is not a valid tag'); - } - - // Evaluate second level cache - if (isset($oneToManyElement->cache)) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($oneToManyElement->cache)); - } - - $metadata->mapOneToMany($mapping); - } - } - - // Evaluate mappings - if (isset($xmlRoot->{'many-to-one'})) { - foreach ($xmlRoot->{'many-to-one'} as $manyToOneElement) { - $mapping = [ - 'fieldName' => (string) $manyToOneElement['field'], - ]; - - if (isset($manyToOneElement['target-entity'])) { - $mapping['targetEntity'] = (string) $manyToOneElement['target-entity']; - } - - if (isset($associationIds[$mapping['fieldName']])) { - $mapping['id'] = true; - } - - if (isset($manyToOneElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . (string) $manyToOneElement['fetch']); - } - - if (isset($manyToOneElement['inversed-by'])) { - $mapping['inversedBy'] = (string) $manyToOneElement['inversed-by']; - } - - $joinColumns = []; - - if (isset($manyToOneElement->{'join-column'})) { - $joinColumns[] = $this->joinColumnToArray($manyToOneElement->{'join-column'}); - } elseif (isset($manyToOneElement->{'join-columns'})) { - foreach ($manyToOneElement->{'join-columns'}->{'join-column'} ?? [] as $joinColumnElement) { - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); - } - } - - $mapping['joinColumns'] = $joinColumns; - - if (isset($manyToOneElement->cascade)) { - $mapping['cascade'] = $this->getCascadeMappings($manyToOneElement->cascade); - } - - // Evaluate second level cache - if (isset($manyToOneElement->cache)) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($manyToOneElement->cache)); - } - - $metadata->mapManyToOne($mapping); - } - } - - // Evaluate mappings - if (isset($xmlRoot->{'many-to-many'})) { - foreach ($xmlRoot->{'many-to-many'} as $manyToManyElement) { - $mapping = [ - 'fieldName' => (string) $manyToManyElement['field'], - ]; - - if (isset($manyToManyElement['target-entity'])) { - $mapping['targetEntity'] = (string) $manyToManyElement['target-entity']; - } - - if (isset($manyToManyElement['fetch'])) { - $mapping['fetch'] = constant('Doctrine\ORM\Mapping\ClassMetadata::FETCH_' . (string) $manyToManyElement['fetch']); - } - - if (isset($manyToManyElement['orphan-removal'])) { - $mapping['orphanRemoval'] = $this->evaluateBoolean($manyToManyElement['orphan-removal']); - } - - if (isset($manyToManyElement['mapped-by'])) { - $mapping['mappedBy'] = (string) $manyToManyElement['mapped-by']; - } elseif (isset($manyToManyElement->{'join-table'})) { - if (isset($manyToManyElement['inversed-by'])) { - $mapping['inversedBy'] = (string) $manyToManyElement['inversed-by']; - } - - $joinTableElement = $manyToManyElement->{'join-table'}; - $joinTable = [ - 'name' => (string) $joinTableElement['name'], - ]; - - if (isset($joinTableElement['schema'])) { - $joinTable['schema'] = (string) $joinTableElement['schema']; - } - - if (isset($joinTableElement->options)) { - $joinTable['options'] = $this->parseOptions($joinTableElement->options->children()); - } - - foreach ($joinTableElement->{'join-columns'}->{'join-column'} ?? [] as $joinColumnElement) { - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumnElement); - } - - foreach ($joinTableElement->{'inverse-join-columns'}->{'join-column'} ?? [] as $joinColumnElement) { - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumnElement); - } - - $mapping['joinTable'] = $joinTable; - } - - if (isset($manyToManyElement->cascade)) { - $mapping['cascade'] = $this->getCascadeMappings($manyToManyElement->cascade); - } - - if (isset($manyToManyElement->{'order-by'})) { - $orderBy = []; - foreach ($manyToManyElement->{'order-by'}->{'order-by-field'} ?? [] as $orderByField) { - /** @psalm-suppress DeprecatedConstant */ - $orderBy[(string) $orderByField['name']] = isset($orderByField['direction']) - ? (string) $orderByField['direction'] - : (enum_exists(Order::class) ? Order::Ascending->value : Criteria::ASC); - } - - $mapping['orderBy'] = $orderBy; - } - - if (isset($manyToManyElement['index-by'])) { - $mapping['indexBy'] = (string) $manyToManyElement['index-by']; - } elseif (isset($manyToManyElement->{'index-by'})) { - throw new InvalidArgumentException(' is not a valid tag'); - } - - // Evaluate second level cache - if (isset($manyToManyElement->cache)) { - $mapping['cache'] = $metadata->getAssociationCacheDefaults($mapping['fieldName'], $this->cacheToArray($manyToManyElement->cache)); - } - - $metadata->mapManyToMany($mapping); - } - } - - // Evaluate association-overrides - if (isset($xmlRoot->{'attribute-overrides'})) { - foreach ($xmlRoot->{'attribute-overrides'}->{'attribute-override'} ?? [] as $overrideElement) { - $fieldName = (string) $overrideElement['name']; - foreach ($overrideElement->field ?? [] as $field) { - $mapping = $this->columnToArray($field); - $mapping['fieldName'] = $fieldName; - $metadata->setAttributeOverride($fieldName, $mapping); - } - } - } - - // Evaluate association-overrides - if (isset($xmlRoot->{'association-overrides'})) { - foreach ($xmlRoot->{'association-overrides'}->{'association-override'} ?? [] as $overrideElement) { - $fieldName = (string) $overrideElement['name']; - $override = []; - - // Check for join-columns - if (isset($overrideElement->{'join-columns'})) { - $joinColumns = []; - foreach ($overrideElement->{'join-columns'}->{'join-column'} ?? [] as $joinColumnElement) { - $joinColumns[] = $this->joinColumnToArray($joinColumnElement); - } - - $override['joinColumns'] = $joinColumns; - } - - // Check for join-table - if ($overrideElement->{'join-table'}) { - $joinTable = null; - $joinTableElement = $overrideElement->{'join-table'}; - - $joinTable = [ - 'name' => (string) $joinTableElement['name'], - 'schema' => (string) $joinTableElement['schema'], - ]; - - if (isset($joinTableElement->options)) { - $joinTable['options'] = $this->parseOptions($joinTableElement->options->children()); - } - - if (isset($joinTableElement->{'join-columns'})) { - foreach ($joinTableElement->{'join-columns'}->{'join-column'} ?? [] as $joinColumnElement) { - $joinTable['joinColumns'][] = $this->joinColumnToArray($joinColumnElement); - } - } - - if (isset($joinTableElement->{'inverse-join-columns'})) { - foreach ($joinTableElement->{'inverse-join-columns'}->{'join-column'} ?? [] as $joinColumnElement) { - $joinTable['inverseJoinColumns'][] = $this->joinColumnToArray($joinColumnElement); - } - } - - $override['joinTable'] = $joinTable; - } - - // Check for inversed-by - if (isset($overrideElement->{'inversed-by'})) { - $override['inversedBy'] = (string) $overrideElement->{'inversed-by'}['name']; - } - - // Check for `fetch` - if (isset($overrideElement['fetch'])) { - $override['fetch'] = constant(ClassMetadata::class . '::FETCH_' . (string) $overrideElement['fetch']); - } - - $metadata->setAssociationOverride($fieldName, $override); - } - } - - // Evaluate - if (isset($xmlRoot->{'lifecycle-callbacks'})) { - foreach ($xmlRoot->{'lifecycle-callbacks'}->{'lifecycle-callback'} ?? [] as $lifecycleCallback) { - $metadata->addLifecycleCallback((string) $lifecycleCallback['method'], constant('Doctrine\ORM\Events::' . (string) $lifecycleCallback['type'])); - } - } - - // Evaluate entity listener - if (isset($xmlRoot->{'entity-listeners'})) { - foreach ($xmlRoot->{'entity-listeners'}->{'entity-listener'} ?? [] as $listenerElement) { - $className = (string) $listenerElement['class']; - // Evaluate the listener using naming convention. - if ($listenerElement->count() === 0) { - EntityListenerBuilder::bindEntityListener($metadata, $className); - - continue; - } - - foreach ($listenerElement as $callbackElement) { - $eventName = (string) $callbackElement['type']; - $methodName = (string) $callbackElement['method']; - - $metadata->addEntityListener($eventName, $className, $methodName); - } - } - } - } - - /** - * Parses (nested) option elements. - * - * @return mixed[] The options array. - * @psalm-return array|bool|string> - */ - private function parseOptions(SimpleXMLElement|null $options): array - { - $array = []; - - foreach ($options ?? [] as $option) { - if ($option->count()) { - $value = $this->parseOptions($option->children()); - } else { - $value = (string) $option; - } - - $attributes = $option->attributes(); - - if (isset($attributes->name)) { - $nameAttribute = (string) $attributes->name; - $array[$nameAttribute] = in_array($nameAttribute, ['unsigned', 'fixed'], true) - ? $this->evaluateBoolean($value) - : $value; - } else { - $array[] = $value; - } - } - - return $array; - } - - /** - * Constructs a joinColumn mapping array based on the information - * found in the given SimpleXMLElement. - * - * @param SimpleXMLElement $joinColumnElement The XML element. - * - * @return mixed[] The mapping array. - * @psalm-return array{ - * name: string, - * referencedColumnName: string, - * unique?: bool, - * nullable?: bool, - * onDelete?: string, - * columnDefinition?: string, - * options?: mixed[] - * } - */ - private function joinColumnToArray(SimpleXMLElement $joinColumnElement): array - { - $joinColumn = [ - 'name' => (string) $joinColumnElement['name'], - 'referencedColumnName' => (string) $joinColumnElement['referenced-column-name'], - ]; - - if (isset($joinColumnElement['unique'])) { - $joinColumn['unique'] = $this->evaluateBoolean($joinColumnElement['unique']); - } - - if (isset($joinColumnElement['nullable'])) { - $joinColumn['nullable'] = $this->evaluateBoolean($joinColumnElement['nullable']); - } - - if (isset($joinColumnElement['on-delete'])) { - $joinColumn['onDelete'] = (string) $joinColumnElement['on-delete']; - } - - if (isset($joinColumnElement['column-definition'])) { - $joinColumn['columnDefinition'] = (string) $joinColumnElement['column-definition']; - } - - if (isset($joinColumnElement['options'])) { - $joinColumn['options'] = $this->parseOptions($joinColumnElement['options'] ? $joinColumnElement['options']->children() : null); - } - - return $joinColumn; - } - - /** - * Parses the given field as array. - * - * @return mixed[] - * @psalm-return array{ - * fieldName: string, - * type?: string, - * columnName?: string, - * length?: int, - * precision?: int, - * scale?: int, - * unique?: bool, - * nullable?: bool, - * notInsertable?: bool, - * notUpdatable?: bool, - * enumType?: string, - * version?: bool, - * columnDefinition?: string, - * options?: array - * } - */ - private function columnToArray(SimpleXMLElement $fieldMapping): array - { - $mapping = [ - 'fieldName' => (string) $fieldMapping['name'], - ]; - - if (isset($fieldMapping['type'])) { - $mapping['type'] = (string) $fieldMapping['type']; - } - - if (isset($fieldMapping['column'])) { - $mapping['columnName'] = (string) $fieldMapping['column']; - } - - if (isset($fieldMapping['length'])) { - $mapping['length'] = (int) $fieldMapping['length']; - } - - if (isset($fieldMapping['precision'])) { - $mapping['precision'] = (int) $fieldMapping['precision']; - } - - if (isset($fieldMapping['scale'])) { - $mapping['scale'] = (int) $fieldMapping['scale']; - } - - if (isset($fieldMapping['unique'])) { - $mapping['unique'] = $this->evaluateBoolean($fieldMapping['unique']); - } - - if (isset($fieldMapping['nullable'])) { - $mapping['nullable'] = $this->evaluateBoolean($fieldMapping['nullable']); - } - - if (isset($fieldMapping['insertable']) && ! $this->evaluateBoolean($fieldMapping['insertable'])) { - $mapping['notInsertable'] = true; - } - - if (isset($fieldMapping['updatable']) && ! $this->evaluateBoolean($fieldMapping['updatable'])) { - $mapping['notUpdatable'] = true; - } - - if (isset($fieldMapping['generated'])) { - $mapping['generated'] = constant('Doctrine\ORM\Mapping\ClassMetadata::GENERATED_' . (string) $fieldMapping['generated']); - } - - if (isset($fieldMapping['version']) && $fieldMapping['version']) { - $mapping['version'] = $this->evaluateBoolean($fieldMapping['version']); - } - - if (isset($fieldMapping['column-definition'])) { - $mapping['columnDefinition'] = (string) $fieldMapping['column-definition']; - } - - if (isset($fieldMapping['enum-type'])) { - $mapping['enumType'] = (string) $fieldMapping['enum-type']; - } - - if (isset($fieldMapping->options)) { - $mapping['options'] = $this->parseOptions($fieldMapping->options->children()); - } - - return $mapping; - } - - /** - * Parse / Normalize the cache configuration - * - * @return mixed[] - * @psalm-return array{usage: int|null, region?: string} - */ - private function cacheToArray(SimpleXMLElement $cacheMapping): array - { - $region = isset($cacheMapping['region']) ? (string) $cacheMapping['region'] : null; - $usage = isset($cacheMapping['usage']) ? strtoupper((string) $cacheMapping['usage']) : null; - - if ($usage && ! defined('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $usage)) { - throw new InvalidArgumentException(sprintf('Invalid cache usage "%s"', $usage)); - } - - if ($usage) { - $usage = (int) constant('Doctrine\ORM\Mapping\ClassMetadata::CACHE_USAGE_' . $usage); - } - - return [ - 'usage' => $usage, - 'region' => $region, - ]; - } - - /** - * Gathers a list of cascade options found in the given cascade element. - * - * @param SimpleXMLElement $cascadeElement The cascade element. - * - * @return string[] The list of cascade options. - * @psalm-return list - */ - private function getCascadeMappings(SimpleXMLElement $cascadeElement): array - { - $cascades = []; - $children = $cascadeElement->children(); - assert($children !== null); - - foreach ($children as $action) { - // According to the JPA specifications, XML uses "cascade-persist" - // instead of "persist". Here, both variations - // are supported because Attribute uses "persist" - // and we want to make sure that this driver doesn't need to know - // anything about the supported cascading actions - $cascades[] = str_replace('cascade-', '', $action->getName()); - } - - return $cascades; - } - - /** - * {@inheritDoc} - */ - protected function loadMappingFile($file) - { - $this->validateMapping($file); - $result = []; - // Note: we do not use `simplexml_load_file()` because of https://bugs.php.net/bug.php?id=62577 - $xmlElement = simplexml_load_string(file_get_contents($file)); - assert($xmlElement !== false); - - if (isset($xmlElement->entity)) { - foreach ($xmlElement->entity as $entityElement) { - /** @psalm-var class-string $entityName */ - $entityName = (string) $entityElement['name']; - $result[$entityName] = $entityElement; - } - } elseif (isset($xmlElement->{'mapped-superclass'})) { - foreach ($xmlElement->{'mapped-superclass'} as $mappedSuperClass) { - /** @psalm-var class-string $className */ - $className = (string) $mappedSuperClass['name']; - $result[$className] = $mappedSuperClass; - } - } elseif (isset($xmlElement->embeddable)) { - foreach ($xmlElement->embeddable as $embeddableElement) { - /** @psalm-var class-string $embeddableName */ - $embeddableName = (string) $embeddableElement['name']; - $result[$embeddableName] = $embeddableElement; - } - } - - return $result; - } - - private function validateMapping(string $file): void - { - if (! $this->isXsdValidationEnabled) { - return; - } - - $backedUpErrorSetting = libxml_use_internal_errors(true); - - try { - $document = new DOMDocument(); - $document->load($file); - - if (! $document->schemaValidate(__DIR__ . '/../../../doctrine-mapping.xsd')) { - throw MappingException::fromLibXmlErrors(libxml_get_errors()); - } - } finally { - libxml_clear_errors(); - libxml_use_internal_errors($backedUpErrorSetting); - } - } - - protected function evaluateBoolean(mixed $element): bool - { - $flag = (string) $element; - - return $flag === 'true' || $flag === '1'; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Embeddable.php b/vendor/doctrine/orm/src/Mapping/Embeddable.php deleted file mode 100644 index b8dfea0..0000000 --- a/vendor/doctrine/orm/src/Mapping/Embeddable.php +++ /dev/null @@ -1,12 +0,0 @@ - */ -final class EmbeddedClassMapping implements ArrayAccess -{ - use ArrayAccessImplementation; - - public string|false|null $columnPrefix = null; - public string|null $declaredField = null; - public string|null $originalField = null; - - /** - * This is set when this embedded-class field is inherited by this class - * from another (inheritance) parent entity class. The value is - * the FQCN of the topmost entity class that contains mapping information - * for this field. (If there are transient classes in the class hierarchy, - * these are ignored, so the class property may in fact come from a class - * further up in the PHP class hierarchy.) Fields initially declared in - * mapped superclasses are not considered 'inherited' in the - * nearest entity subclasses. - * - * @var class-string|null - */ - public string|null $inherited = null; - - /** - * This is set when the embedded-class field does not appear for the first - * time in this class, but is originally declared in another parent - * entity or mapped superclass. The value is the FQCN of the - * topmost non-transient class that contains mapping information for this - * field. - * - * @var class-string|null - */ - public string|null $declared = null; - - /** @param class-string $class */ - public function __construct(public string $class) - { - } - - /** - * @psalm-param array{ - * class: class-string, - * columnPrefix?: false|string|null, - * declaredField?: string|null, - * originalField?: string|null, - * inherited?: class-string|null, - * declared?: class-string|null, - * } $mappingArray - */ - public static function fromMappingArray(array $mappingArray): self - { - $mapping = new self($mappingArray['class']); - foreach ($mappingArray as $key => $value) { - if ($key === 'class') { - continue; - } - - if (property_exists($mapping, $key)) { - $mapping->$key = $value; - } - } - - return $mapping; - } - - /** @return list */ - public function __sleep(): array - { - $serialized = ['class']; - - if ($this->columnPrefix) { - $serialized[] = 'columnPrefix'; - } - - foreach (['declaredField', 'originalField', 'inherited', 'declared'] as $property) { - if ($this->$property !== null) { - $serialized[] = $property; - } - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Entity.php b/vendor/doctrine/orm/src/Mapping/Entity.php deleted file mode 100644 index 0e27913..0000000 --- a/vendor/doctrine/orm/src/Mapping/Entity.php +++ /dev/null @@ -1,20 +0,0 @@ ->|null $repositoryClass */ - public function __construct( - public readonly string|null $repositoryClass = null, - public readonly bool $readOnly = false, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/EntityListenerResolver.php b/vendor/doctrine/orm/src/Mapping/EntityListenerResolver.php deleted file mode 100644 index eabc217..0000000 --- a/vendor/doctrine/orm/src/Mapping/EntityListenerResolver.php +++ /dev/null @@ -1,30 +0,0 @@ - $value */ - public function __construct( - public readonly array $value = [], - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Exception/InvalidCustomGenerator.php b/vendor/doctrine/orm/src/Mapping/Exception/InvalidCustomGenerator.php deleted file mode 100644 index b9e10bf..0000000 --- a/vendor/doctrine/orm/src/Mapping/Exception/InvalidCustomGenerator.php +++ /dev/null @@ -1,28 +0,0 @@ - */ -final class FieldMapping implements ArrayAccess -{ - use ArrayAccessImplementation; - - /** The database length of the column. Optional. Default value taken from the type. */ - public int|null $length = null; - /** - * Marks the field as the primary key of the entity. Multiple - * fields of an entity can have the id attribute, forming a composite key. - */ - public bool|null $id = null; - public bool|null $nullable = null; - public bool|null $notInsertable = null; - public bool|null $notUpdatable = null; - public string|null $columnDefinition = null; - /** @psalm-var ClassMetadata::GENERATED_*|null */ - public int|null $generated = null; - /** @var class-string|null */ - public string|null $enumType = null; - /** - * The precision of a decimal column. - * Only valid if the column type is decimal - */ - public int|null $precision = null; - /** - * The scale of a decimal column. - * Only valid if the column type is decimal - */ - public int|null $scale = null; - /** Whether a unique constraint should be generated for the column. */ - public bool|null $unique = null; - /** - * @var class-string|null This is set when the field is inherited by this - * class from another (inheritance) parent entity class. The value - * is the FQCN of the topmost entity class that contains mapping information - * for this field. (If there are transient classes in the class hierarchy, - * these are ignored, so the class property may in fact come from a class - * further up in the PHP class hierarchy.) - * Fields initially declared in mapped superclasses are - * not considered 'inherited' in the nearest entity subclasses. - */ - public string|null $inherited = null; - - public string|null $originalClass = null; - public string|null $originalField = null; - public bool|null $quoted = null; - /** - * @var class-string|null This is set when the field does not appear for - * the first time in this class, but is originally declared in another - * parent entity or mapped superclass. The value is the FQCN of - * the topmost non-transient class that contains mapping information for - * this field. - */ - public string|null $declared = null; - public string|null $declaredField = null; - public array|null $options = null; - public bool|null $version = null; - public string|int|null $default = null; - - /** - * @param string $type The type name of the mapped field. Can be one of - * Doctrine's mapping types or a custom mapping type. - * @param string $fieldName The name of the field in the Entity. - * @param string $columnName The column name. Optional. Defaults to the field name. - */ - public function __construct( - public string $type, - public string $fieldName, - public string $columnName, - ) { - } - - /** - * @param array $mappingArray - * @psalm-param array{ - * type: string, - * fieldName: string, - * columnName: string, - * length?: int|null, - * id?: bool|null, - * nullable?: bool|null, - * notInsertable?: bool|null, - * notUpdatable?: bool|null, - * columnDefinition?: string|null, - * generated?: ClassMetadata::GENERATED_*|null, - * enumType?: string|null, - * precision?: int|null, - * scale?: int|null, - * unique?: bool|null, - * inherited?: string|null, - * originalClass?: string|null, - * originalField?: string|null, - * quoted?: bool|null, - * declared?: string|null, - * declaredField?: string|null, - * options?: array|null, - * version?: bool|null, - * default?: string|int|null, - * } $mappingArray - */ - public static function fromMappingArray(array $mappingArray): self - { - $mapping = new self( - $mappingArray['type'], - $mappingArray['fieldName'], - $mappingArray['columnName'], - ); - foreach ($mappingArray as $key => $value) { - if (in_array($key, ['type', 'fieldName', 'columnName'])) { - continue; - } - - if (property_exists($mapping, $key)) { - $mapping->$key = $value; - } - } - - return $mapping; - } - - /** @return list */ - public function __sleep(): array - { - $serialized = ['type', 'fieldName', 'columnName']; - - foreach (['nullable', 'notInsertable', 'notUpdatable', 'id', 'unique', 'version', 'quoted'] as $boolKey) { - if ($this->$boolKey) { - $serialized[] = $boolKey; - } - } - - foreach ( - [ - 'length', - 'columnDefinition', - 'generated', - 'enumType', - 'precision', - 'scale', - 'inherited', - 'originalClass', - 'originalField', - 'declared', - 'declaredField', - 'options', - 'default', - ] as $key - ) { - if ($this->$key !== null) { - $serialized[] = $key; - } - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/GeneratedValue.php b/vendor/doctrine/orm/src/Mapping/GeneratedValue.php deleted file mode 100644 index aca5f4b..0000000 --- a/vendor/doctrine/orm/src/Mapping/GeneratedValue.php +++ /dev/null @@ -1,17 +0,0 @@ -|null $columns - * @param array|null $fields - * @param array|null $flags - * @param array|null $options - */ - public function __construct( - public readonly string|null $name = null, - public readonly array|null $columns = null, - public readonly array|null $fields = null, - public readonly array|null $flags = null, - public readonly array|null $options = null, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/InheritanceType.php b/vendor/doctrine/orm/src/Mapping/InheritanceType.php deleted file mode 100644 index c042ee7..0000000 --- a/vendor/doctrine/orm/src/Mapping/InheritanceType.php +++ /dev/null @@ -1,17 +0,0 @@ -mappedBy; - } - - /** @return list */ - public function __sleep(): array - { - return [ - ...parent::__sleep(), - 'mappedBy', - ]; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/JoinColumn.php b/vendor/doctrine/orm/src/Mapping/JoinColumn.php deleted file mode 100644 index 9a049fb..0000000 --- a/vendor/doctrine/orm/src/Mapping/JoinColumn.php +++ /dev/null @@ -1,13 +0,0 @@ - */ -final class JoinColumnMapping implements ArrayAccess -{ - use ArrayAccessImplementation; - - public bool|null $unique = null; - public bool|null $quoted = null; - public string|null $fieldName = null; - public string|null $onDelete = null; - public string|null $columnDefinition = null; - public bool|null $nullable = null; - - /** @var array|null */ - public array|null $options = null; - - public function __construct( - public string $name, - public string $referencedColumnName, - ) { - } - - /** - * @param array $mappingArray - * @psalm-param array{ - * name: string, - * referencedColumnName: string, - * unique?: bool|null, - * quoted?: bool|null, - * fieldName?: string|null, - * onDelete?: string|null, - * columnDefinition?: string|null, - * nullable?: bool|null, - * options?: array|null, - * } $mappingArray - */ - public static function fromMappingArray(array $mappingArray): self - { - $mapping = new self($mappingArray['name'], $mappingArray['referencedColumnName']); - foreach ($mappingArray as $key => $value) { - if (property_exists($mapping, $key) && $value !== null) { - $mapping->$key = $value; - } - } - - return $mapping; - } - - /** @return list */ - public function __sleep(): array - { - $serialized = []; - - foreach (['name', 'fieldName', 'onDelete', 'columnDefinition', 'referencedColumnName', 'options'] as $stringOrArrayKey) { - if ($this->$stringOrArrayKey !== null) { - $serialized[] = $stringOrArrayKey; - } - } - - foreach (['unique', 'quoted', 'nullable'] as $boolKey) { - if ($this->$boolKey !== null) { - $serialized[] = $boolKey; - } - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/JoinColumnProperties.php b/vendor/doctrine/orm/src/Mapping/JoinColumnProperties.php deleted file mode 100644 index 7d13295..0000000 --- a/vendor/doctrine/orm/src/Mapping/JoinColumnProperties.php +++ /dev/null @@ -1,21 +0,0 @@ - $options */ - public function __construct( - public readonly string|null $name = null, - public readonly string $referencedColumnName = 'id', - public readonly bool $unique = false, - public readonly bool $nullable = true, - public readonly mixed $onDelete = null, - public readonly string|null $columnDefinition = null, - public readonly string|null $fieldName = null, - public readonly array $options = [], - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/JoinColumns.php b/vendor/doctrine/orm/src/Mapping/JoinColumns.php deleted file mode 100644 index f166b76..0000000 --- a/vendor/doctrine/orm/src/Mapping/JoinColumns.php +++ /dev/null @@ -1,14 +0,0 @@ - $value */ - public function __construct( - public readonly array $value, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/JoinTable.php b/vendor/doctrine/orm/src/Mapping/JoinTable.php deleted file mode 100644 index 0558761..0000000 --- a/vendor/doctrine/orm/src/Mapping/JoinTable.php +++ /dev/null @@ -1,35 +0,0 @@ - */ - public readonly array $joinColumns; - - /** @var array */ - public readonly array $inverseJoinColumns; - - /** - * @param array|JoinColumn $joinColumns - * @param array|JoinColumn $inverseJoinColumns - * @param array $options - */ - public function __construct( - public readonly string|null $name = null, - public readonly string|null $schema = null, - array|JoinColumn $joinColumns = [], - array|JoinColumn $inverseJoinColumns = [], - public readonly array $options = [], - ) { - $this->joinColumns = $joinColumns instanceof JoinColumn ? [$joinColumns] : $joinColumns; - $this->inverseJoinColumns = $inverseJoinColumns instanceof JoinColumn - ? [$inverseJoinColumns] - : $inverseJoinColumns; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/JoinTableMapping.php b/vendor/doctrine/orm/src/Mapping/JoinTableMapping.php deleted file mode 100644 index c8b4968..0000000 --- a/vendor/doctrine/orm/src/Mapping/JoinTableMapping.php +++ /dev/null @@ -1,115 +0,0 @@ - */ -final class JoinTableMapping implements ArrayAccess -{ - use ArrayAccessImplementation; - - public bool|null $quoted = null; - - /** @var list */ - public array $joinColumns = []; - - /** @var list */ - public array $inverseJoinColumns = []; - - /** @var array */ - public array $options = []; - - public string|null $schema = null; - - public function __construct(public string $name) - { - } - - /** - * @param mixed[] $mappingArray - * @psalm-param array{ - * name: string, - * quoted?: bool|null, - * joinColumns?: mixed[], - * inverseJoinColumns?: mixed[], - * schema?: string|null, - * options?: array - * } $mappingArray - */ - public static function fromMappingArray(array $mappingArray): self - { - $mapping = new self($mappingArray['name']); - - foreach (['quoted', 'schema', 'options'] as $key) { - if (isset($mappingArray[$key])) { - $mapping->$key = $mappingArray[$key]; - } - } - - if (isset($mappingArray['joinColumns'])) { - foreach ($mappingArray['joinColumns'] as $column) { - $mapping->joinColumns[] = JoinColumnMapping::fromMappingArray($column); - } - } - - if (isset($mappingArray['inverseJoinColumns'])) { - foreach ($mappingArray['inverseJoinColumns'] as $column) { - $mapping->inverseJoinColumns[] = JoinColumnMapping::fromMappingArray($column); - } - } - - return $mapping; - } - - public function offsetSet(mixed $offset, mixed $value): void - { - if (in_array($offset, ['joinColumns', 'inverseJoinColumns'], true)) { - $joinColumns = []; - foreach ($value as $column) { - $joinColumns[] = JoinColumnMapping::fromMappingArray($column); - } - - $value = $joinColumns; - } - - $this->$offset = $value; - } - - /** @return mixed[] */ - public function toArray(): array - { - $array = (array) $this; - - $toArray = static fn (JoinColumnMapping $column): array => (array) $column; - $array['joinColumns'] = array_map($toArray, $array['joinColumns']); - $array['inverseJoinColumns'] = array_map($toArray, $array['inverseJoinColumns']); - - return $array; - } - - /** @return list */ - public function __sleep(): array - { - $serialized = []; - - foreach (['joinColumns', 'inverseJoinColumns', 'name', 'schema', 'options'] as $stringOrArrayKey) { - if ($this->$stringOrArrayKey !== null) { - $serialized[] = $stringOrArrayKey; - } - } - - foreach (['quoted'] as $boolKey) { - if ($this->$boolKey) { - $serialized[] = $boolKey; - } - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ManyToMany.php b/vendor/doctrine/orm/src/Mapping/ManyToMany.php deleted file mode 100644 index d90a762..0000000 --- a/vendor/doctrine/orm/src/Mapping/ManyToMany.php +++ /dev/null @@ -1,27 +0,0 @@ - */ - public array $joinTableColumns = []; - - /** @var array */ - public array $relationToSourceKeyColumns = []; - /** @var array */ - public array $relationToTargetKeyColumns = []; - - /** @return array */ - public function toArray(): array - { - $array = parent::toArray(); - - $array['joinTable'] = $this->joinTable->toArray(); - - return $array; - } - - /** - * @param mixed[] $mappingArray - * @psalm-param array{ - * fieldName: string, - * sourceEntity: class-string, - * targetEntity: class-string, - * cascade?: list<'persist'|'remove'|'detach'|'refresh'|'all'>, - * fetch?: ClassMetadata::FETCH_*|null, - * inherited?: class-string|null, - * declared?: class-string|null, - * cache?: array|null, - * id?: bool|null, - * isOnDeleteCascade?: bool|null, - * originalClass?: class-string|null, - * originalField?: string|null, - * orphanRemoval?: bool, - * unique?: bool|null, - * joinTable?: mixed[]|null, - * type?: int, - * isOwningSide: bool, - * } $mappingArray - */ - public static function fromMappingArrayAndNamingStrategy(array $mappingArray, NamingStrategy $namingStrategy): self - { - if (isset($mappingArray['joinTable']['joinColumns'])) { - foreach ($mappingArray['joinTable']['joinColumns'] as $key => $joinColumn) { - if (empty($joinColumn['name'])) { - $mappingArray['joinTable']['joinColumns'][$key]['name'] = $namingStrategy->joinKeyColumnName( - $mappingArray['sourceEntity'], - $joinColumn['referencedColumnName'] ?? null, - ); - } - } - } - - if (isset($mappingArray['joinTable']['inverseJoinColumns'])) { - foreach ($mappingArray['joinTable']['inverseJoinColumns'] as $key => $joinColumn) { - if (empty($joinColumn['name'])) { - $mappingArray['joinTable']['inverseJoinColumns'][$key]['name'] = $namingStrategy->joinKeyColumnName( - $mappingArray['targetEntity'], - $joinColumn['referencedColumnName'] ?? null, - ); - } - } - } - - // owning side MUST have a join table - if (! isset($mappingArray['joinTable']) || ! isset($mappingArray['joinTable']['name'])) { - $mappingArray['joinTable']['name'] = $namingStrategy->joinTableName( - $mappingArray['sourceEntity'], - $mappingArray['targetEntity'], - $mappingArray['fieldName'], - ); - } - - $mapping = parent::fromMappingArray($mappingArray); - - $selfReferencingEntityWithoutJoinColumns = $mapping->sourceEntity === $mapping->targetEntity - && $mapping->joinTable->joinColumns === [] - && $mapping->joinTable->inverseJoinColumns === []; - - if ($mapping->joinTable->joinColumns === []) { - $mapping->joinTable->joinColumns = [ - JoinColumnMapping::fromMappingArray([ - 'name' => $namingStrategy->joinKeyColumnName($mapping->sourceEntity, $selfReferencingEntityWithoutJoinColumns ? 'source' : null), - 'referencedColumnName' => $namingStrategy->referenceColumnName(), - 'onDelete' => 'CASCADE', - ]), - ]; - } - - if ($mapping->joinTable->inverseJoinColumns === []) { - $mapping->joinTable->inverseJoinColumns = [ - JoinColumnMapping::fromMappingArray([ - 'name' => $namingStrategy->joinKeyColumnName($mapping->targetEntity, $selfReferencingEntityWithoutJoinColumns ? 'target' : null), - 'referencedColumnName' => $namingStrategy->referenceColumnName(), - 'onDelete' => 'CASCADE', - ]), - ]; - } - - $mapping->joinTableColumns = []; - - foreach ($mapping->joinTable->joinColumns as $joinColumn) { - if (empty($joinColumn->referencedColumnName)) { - $joinColumn->referencedColumnName = $namingStrategy->referenceColumnName(); - } - - if ($joinColumn->name[0] === '`') { - $joinColumn->name = trim($joinColumn->name, '`'); - $joinColumn->quoted = true; - } - - if ($joinColumn->referencedColumnName[0] === '`') { - $joinColumn->referencedColumnName = trim($joinColumn->referencedColumnName, '`'); - $joinColumn->quoted = true; - } - - if (isset($joinColumn->onDelete) && strtolower($joinColumn->onDelete) === 'cascade') { - $mapping->isOnDeleteCascade = true; - } - - $mapping->relationToSourceKeyColumns[$joinColumn->name] = $joinColumn->referencedColumnName; - $mapping->joinTableColumns[] = $joinColumn->name; - } - - foreach ($mapping->joinTable->inverseJoinColumns as $inverseJoinColumn) { - if (empty($inverseJoinColumn->referencedColumnName)) { - $inverseJoinColumn->referencedColumnName = $namingStrategy->referenceColumnName(); - } - - if ($inverseJoinColumn->name[0] === '`') { - $inverseJoinColumn->name = trim($inverseJoinColumn->name, '`'); - $inverseJoinColumn->quoted = true; - } - - if ($inverseJoinColumn->referencedColumnName[0] === '`') { - $inverseJoinColumn->referencedColumnName = trim($inverseJoinColumn->referencedColumnName, '`'); - $inverseJoinColumn->quoted = true; - } - - if (isset($inverseJoinColumn->onDelete) && strtolower($inverseJoinColumn->onDelete) === 'cascade') { - $mapping->isOnDeleteCascade = true; - } - - $mapping->relationToTargetKeyColumns[$inverseJoinColumn->name] = $inverseJoinColumn->referencedColumnName; - $mapping->joinTableColumns[] = $inverseJoinColumn->name; - } - - return $mapping; - } - - /** @return list */ - public function __sleep(): array - { - $serialized = parent::__sleep(); - $serialized[] = 'joinTable'; - $serialized[] = 'joinTableColumns'; - - foreach (['relationToSourceKeyColumns', 'relationToTargetKeyColumns'] as $arrayKey) { - if ($this->$arrayKey !== null) { - $serialized[] = $arrayKey; - } - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ManyToOne.php b/vendor/doctrine/orm/src/Mapping/ManyToOne.php deleted file mode 100644 index 8fccff3..0000000 --- a/vendor/doctrine/orm/src/Mapping/ManyToOne.php +++ /dev/null @@ -1,24 +0,0 @@ -|null $repositoryClass */ - public function __construct( - public readonly string|null $repositoryClass = null, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/MappingAttribute.php b/vendor/doctrine/orm/src/Mapping/MappingAttribute.php deleted file mode 100644 index 61091a9..0000000 --- a/vendor/doctrine/orm/src/Mapping/MappingAttribute.php +++ /dev/null @@ -1,10 +0,0 @@ - $map - */ - public static function duplicateDiscriminatorEntry(string $className, array $entries, array $map): self - { - return new self( - 'The entries ' . implode(', ', $entries) . " in discriminator map of class '" . $className . "' is duplicated. " . - 'If the discriminator map is automatically generated you have to convert it to an explicit discriminator map now. ' . - 'The entries of the current map are: @DiscriminatorMap({' . implode(', ', array_map( - static fn ($a, $b) => sprintf("'%s': '%s'", $a, $b), - array_keys($map), - array_values($map), - )) . '})', - ); - } - - /** - * @param class-string $rootEntityClass - * @param class-string $childEntityClass - */ - public static function missingInheritanceTypeDeclaration(string $rootEntityClass, string $childEntityClass): self - { - return new self(sprintf( - "Entity class '%s' is a subclass of the root entity class '%s', but no inheritance mapping type was declared.", - $childEntityClass, - $rootEntityClass, - )); - } - - public static function missingDiscriminatorMap(string $className): self - { - return new self(sprintf( - "Entity class '%s' is using inheritance but no discriminator map was defined.", - $className, - )); - } - - public static function missingDiscriminatorColumn(string $className): self - { - return new self(sprintf( - "Entity class '%s' is using inheritance but no discriminator column was defined.", - $className, - )); - } - - public static function invalidDiscriminatorColumnType(string $className, string $type): self - { - return new self(sprintf( - "Discriminator column type on entity class '%s' is not allowed to be '%s'. 'string' or 'integer' type variables are suggested!", - $className, - $type, - )); - } - - public static function nameIsMandatoryForDiscriminatorColumns(string $className): self - { - return new self(sprintf("Discriminator column name on entity class '%s' is not defined.", $className)); - } - - public static function cannotVersionIdField(string $className, string $fieldName): self - { - return new self(sprintf( - "Setting Id field '%s' as versionable in entity class '%s' is not supported.", - $fieldName, - $className, - )); - } - - public static function duplicateColumnName(string $className, string $columnName): self - { - return new self("Duplicate definition of column '" . $columnName . "' on entity '" . $className . "' in a field or discriminator column mapping."); - } - - public static function illegalToManyAssociationOnMappedSuperclass(string $className, string $field): self - { - return new self("It is illegal to put an inverse side one-to-many or many-to-many association on mapped superclass '" . $className . '#' . $field . "'."); - } - - public static function cannotMapCompositePrimaryKeyEntitiesAsForeignId(string $className, string $targetEntity, string $targetField): self - { - return new self("It is not possible to map entity '" . $className . "' with a composite primary key " . - "as part of the primary key of another entity '" . $targetEntity . '#' . $targetField . "'."); - } - - public static function noSingleAssociationJoinColumnFound(string $className, string $field): self - { - return new self(sprintf("'%s#%s' is not an association with a single join column.", $className, $field)); - } - - public static function noFieldNameFoundForColumn(string $className, string $column): self - { - return new self(sprintf( - "Cannot find a field on '%s' that is mapped to column '%s'. Either the " . - 'field does not exist or an association exists but it has multiple join columns.', - $className, - $column, - )); - } - - public static function illegalOrphanRemovalOnIdentifierAssociation(string $className, string $field): self - { - return new self(sprintf( - "The orphan removal option is not allowed on an association that is part of the identifier in '%s#%s'.", - $className, - $field, - )); - } - - public static function illegalOrphanRemoval(string $className, string $field): self - { - return new self('Orphan removal is only allowed on one-to-one and one-to-many ' . - 'associations, but ' . $className . '#' . $field . ' is not.'); - } - - public static function illegalInverseIdentifierAssociation(string $className, string $field): self - { - return new self(sprintf( - "An inverse association is not allowed to be identifier in '%s#%s'.", - $className, - $field, - )); - } - - public static function illegalToManyIdentifierAssociation(string $className, string $field): self - { - return new self(sprintf( - "Many-to-many or one-to-many associations are not allowed to be identifier in '%s#%s'.", - $className, - $field, - )); - } - - public static function noInheritanceOnMappedSuperClass(string $className): self - { - return new self("It is not supported to define inheritance information on a mapped superclass '" . $className . "'."); - } - - public static function mappedClassNotPartOfDiscriminatorMap(string $className, string $rootClassName): self - { - return new self( - "Entity '" . $className . "' has to be part of the discriminator map of '" . $rootClassName . "' " . - "to be properly mapped in the inheritance hierarchy. Alternatively you can make '" . $className . "' an abstract class " . - 'to avoid this exception from occurring.', - ); - } - - public static function lifecycleCallbackMethodNotFound(string $className, string $methodName): self - { - return new self("Entity '" . $className . "' has no method '" . $methodName . "' to be registered as lifecycle callback."); - } - - /** @param class-string $className */ - public static function illegalLifecycleCallbackOnEmbeddedClass(string $event, string $className): self - { - return new self(sprintf( - <<<'EXCEPTION' - Context: Attempt to register lifecycle callback "%s" on embedded class "%s". - Problem: Registering lifecycle callbacks on embedded classes is not allowed. - EXCEPTION, - $event, - $className, - )); - } - - public static function entityListenerClassNotFound(string $listenerName, string $className): self - { - return new self(sprintf('Entity Listener "%s" declared on "%s" not found.', $listenerName, $className)); - } - - public static function entityListenerMethodNotFound(string $listenerName, string $methodName, string $className): self - { - return new self(sprintf('Entity Listener "%s" declared on "%s" has no method "%s".', $listenerName, $className, $methodName)); - } - - public static function duplicateEntityListener(string $listenerName, string $methodName, string $className): self - { - return new self(sprintf('Entity Listener "%s#%s()" in "%s" was already declared, but it must be declared only once.', $listenerName, $methodName, $className)); - } - - /** @param class-string $className */ - public static function invalidFetchMode(string $className, string $fetchMode): self - { - return new self("Entity '" . $className . "' has a mapping with invalid fetch mode '" . $fetchMode . "'"); - } - - public static function invalidGeneratedMode(int|string $generatedMode): self - { - return new self("Invalid generated mode '" . $generatedMode . "'"); - } - - public static function compositeKeyAssignedIdGeneratorRequired(string $className): self - { - return new self("Entity '" . $className . "' has a composite identifier but uses an ID generator other than manually assigning (Identity, Sequence). This is not supported."); - } - - public static function invalidTargetEntityClass(string $targetEntity, string $sourceEntity, string $associationName): self - { - return new self('The target-entity ' . $targetEntity . " cannot be found in '" . $sourceEntity . '#' . $associationName . "'."); - } - - /** @param string[] $cascades */ - public static function invalidCascadeOption(array $cascades, string $className, string $propertyName): self - { - $cascades = implode(', ', array_map(static fn (string $e): string => "'" . $e . "'", $cascades)); - - return new self(sprintf( - "You have specified invalid cascade options for %s::$%s: %s; available options: 'remove', 'persist', 'refresh', and 'detach'", - $className, - $propertyName, - $cascades, - )); - } - - public static function missingSequenceName(string $className): self - { - return new self( - sprintf('Missing "sequenceName" attribute for sequence id generator definition on class "%s".', $className), - ); - } - - public static function infiniteEmbeddableNesting(string $className, string $propertyName): self - { - return new self( - sprintf( - 'Infinite nesting detected for embedded property %s::%s. ' . - 'You cannot embed an embeddable from the same type inside an embeddable.', - $className, - $propertyName, - ), - ); - } - - public static function illegalOverrideOfInheritedProperty(string $className, string $propertyName, string $inheritFromClass): self - { - return new self( - sprintf( - 'Overrides are only allowed for fields or associations declared in mapped superclasses or traits. This is not the case for %s::%s, which was inherited from %s.', - $className, - $propertyName, - $inheritFromClass, - ), - ); - } - - public static function invalidIndexConfiguration(string $className, string $indexName): self - { - return new self( - sprintf( - 'Index %s for entity %s should contain columns or fields values, but not both.', - $indexName, - $className, - ), - ); - } - - public static function invalidUniqueConstraintConfiguration(string $className, string $indexName): self - { - return new self( - sprintf( - 'Unique constraint %s for entity %s should contain columns or fields values, but not both.', - $indexName, - $className, - ), - ); - } - - public static function invalidOverrideType(string $expectdType, mixed $givenValue): self - { - return new self(sprintf( - 'Expected %s, but %s was given.', - $expectdType, - get_debug_type($givenValue), - )); - } - - public static function backedEnumTypeRequired(string $className, string $fieldName, string $enumType): self - { - return new self(sprintf( - 'Attempting to map a non-backed enum type %s in entity %s::$%s. Please use backed enums only', - $enumType, - $className, - $fieldName, - )); - } - - public static function nonEnumTypeMapped(string $className, string $fieldName, string $enumType): self - { - return new self(sprintf( - 'Attempting to map non-enum type %s as enum in entity %s::$%s', - $enumType, - $className, - $fieldName, - )); - } - - /** - * @param class-string $className - * @param class-string $enumType - */ - public static function invalidEnumValue( - string $className, - string $fieldName, - string $value, - string $enumType, - ValueError $previous, - ): self { - return new self(sprintf( - <<<'EXCEPTION' -Context: Trying to hydrate enum property "%s::$%s" -Problem: Case "%s" is not listed in enum "%s" -Solution: Either add the case to the enum type or migrate the database column to use another case of the enum -EXCEPTION - , - $className, - $fieldName, - $value, - $enumType, - ), 0, $previous); - } - - /** @param LibXMLError[] $errors */ - public static function fromLibXmlErrors(array $errors): self - { - $formatter = static fn (LibXMLError $error): string => sprintf( - 'libxml error: %s in %s at line %d', - $error->message, - $error->file, - $error->line, - ); - - return new self(implode(PHP_EOL, array_map($formatter, $errors))); - } - - public static function invalidAttributeOnEmbeddable(string $entityName, string $attributeName): self - { - return new self(sprintf( - 'Attribute "%s" on embeddable "%s" is not allowed.', - $attributeName, - $entityName, - )); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/NamingStrategy.php b/vendor/doctrine/orm/src/Mapping/NamingStrategy.php deleted file mode 100644 index afedebe..0000000 --- a/vendor/doctrine/orm/src/Mapping/NamingStrategy.php +++ /dev/null @@ -1,71 +0,0 @@ -, - * fetch?: ClassMetadata::FETCH_*|null, - * inherited?: class-string|null, - * declared?: class-string|null, - * cache?: array|null, - * id?: bool|null, - * isOnDeleteCascade?: bool|null, - * originalClass?: class-string|null, - * originalField?: string|null, - * orphanRemoval?: bool, - * unique?: bool|null, - * joinTable?: mixed[]|null, - * type?: int, - * isOwningSide: bool, - * } $mappingArray - */ - public static function fromMappingArray(array $mappingArray): static - { - $mapping = parent::fromMappingArray($mappingArray); - - if ($mapping->orphanRemoval && ! $mapping->isCascadeRemove()) { - $mapping->cascade[] = 'remove'; - } - - return $mapping; - } - - /** - * @param mixed[] $mappingArray - * @psalm-param array{ - * fieldName: string, - * sourceEntity: class-string, - * targetEntity: class-string, - * cascade?: list<'persist'|'remove'|'detach'|'refresh'|'all'>, - * fetch?: ClassMetadata::FETCH_*|null, - * inherited?: class-string|null, - * declared?: class-string|null, - * cache?: array|null, - * id?: bool|null, - * isOnDeleteCascade?: bool|null, - * originalClass?: class-string|null, - * originalField?: string|null, - * orphanRemoval?: bool, - * unique?: bool|null, - * joinTable?: mixed[]|null, - * type?: int, - * isOwningSide: bool, - * } $mappingArray - */ - public static function fromMappingArrayAndName(array $mappingArray, string $name): static - { - $mapping = self::fromMappingArray($mappingArray); - - // OneToMany-side MUST be inverse (must have mappedBy) - if (! isset($mapping->mappedBy)) { - throw MappingException::oneToManyRequiresMappedBy($name, $mapping->fieldName); - } - - return $mapping; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/OneToOne.php b/vendor/doctrine/orm/src/Mapping/OneToOne.php deleted file mode 100644 index 1ddf21c..0000000 --- a/vendor/doctrine/orm/src/Mapping/OneToOne.php +++ /dev/null @@ -1,26 +0,0 @@ -|null $cascade - * @psalm-param 'LAZY'|'EAGER'|'EXTRA_LAZY' $fetch - */ - public function __construct( - public readonly string|null $targetEntity = null, - public readonly string|null $mappedBy = null, - public readonly string|null $inversedBy = null, - public readonly array|null $cascade = null, - public readonly string $fetch = 'LAZY', - public readonly bool $orphanRemoval = false, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/OneToOneAssociationMapping.php b/vendor/doctrine/orm/src/Mapping/OneToOneAssociationMapping.php deleted file mode 100644 index 89c6483..0000000 --- a/vendor/doctrine/orm/src/Mapping/OneToOneAssociationMapping.php +++ /dev/null @@ -1,9 +0,0 @@ - $value */ - public function __construct( - public readonly array $value, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/OwningSideMapping.php b/vendor/doctrine/orm/src/Mapping/OwningSideMapping.php deleted file mode 100644 index ab8b7b2..0000000 --- a/vendor/doctrine/orm/src/Mapping/OwningSideMapping.php +++ /dev/null @@ -1,28 +0,0 @@ - */ - public function __sleep(): array - { - $serialized = parent::__sleep(); - - if ($this->inversedBy !== null) { - $serialized[] = 'inversedBy'; - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/PostLoad.php b/vendor/doctrine/orm/src/Mapping/PostLoad.php deleted file mode 100644 index 9ce1e5c..0000000 --- a/vendor/doctrine/orm/src/Mapping/PostLoad.php +++ /dev/null @@ -1,12 +0,0 @@ - - */ - public function getIdentifierColumnNames(ClassMetadata $class, AbstractPlatform $platform): array; - - /** - * Gets the column alias. - */ - public function getColumnAlias( - string $columnName, - int $counter, - AbstractPlatform $platform, - ClassMetadata|null $class = null, - ): string; -} diff --git a/vendor/doctrine/orm/src/Mapping/ReflectionEmbeddedProperty.php b/vendor/doctrine/orm/src/Mapping/ReflectionEmbeddedProperty.php deleted file mode 100644 index da3d097..0000000 --- a/vendor/doctrine/orm/src/Mapping/ReflectionEmbeddedProperty.php +++ /dev/null @@ -1,61 +0,0 @@ -getDeclaringClass()->name, $childProperty->getName()); - } - - public function getValue(object|null $object = null): mixed - { - $embeddedObject = $this->parentProperty->getValue($object); - - if ($embeddedObject === null) { - return null; - } - - return $this->childProperty->getValue($embeddedObject); - } - - public function setValue(mixed $object, mixed $value = null): void - { - $embeddedObject = $this->parentProperty->getValue($object); - - if ($embeddedObject === null) { - $this->instantiator ??= new Instantiator(); - - $embeddedObject = $this->instantiator->instantiate($this->embeddedClass); - - $this->parentProperty->setValue($object, $embeddedObject); - } - - $this->childProperty->setValue($embeddedObject, $value); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ReflectionEnumProperty.php b/vendor/doctrine/orm/src/Mapping/ReflectionEnumProperty.php deleted file mode 100644 index 0ebd978..0000000 --- a/vendor/doctrine/orm/src/Mapping/ReflectionEnumProperty.php +++ /dev/null @@ -1,87 +0,0 @@ - $enumType */ - public function __construct( - private readonly ReflectionProperty $originalReflectionProperty, - private readonly string $enumType, - ) { - parent::__construct( - $originalReflectionProperty->class, - $originalReflectionProperty->name, - ); - } - - public function getValue(object|null $object = null): int|string|array|null - { - if ($object === null) { - return null; - } - - $enum = $this->originalReflectionProperty->getValue($object); - - if ($enum === null) { - return null; - } - - if (is_array($enum)) { - return array_map( - static fn (BackedEnum $item): int|string => $item->value, - $enum, - ); - } - - return $enum->value; - } - - /** - * @param object $object - * @param int|string|int[]|string[]|BackedEnum|BackedEnum[]|null $value - */ - public function setValue(mixed $object, mixed $value = null): void - { - if ($value !== null) { - if (is_array($value)) { - $value = array_map(fn (int|string|BackedEnum $item): BackedEnum => $this->initializeEnumValue($object, $item), $value); - } else { - $value = $this->initializeEnumValue($object, $value); - } - } - - $this->originalReflectionProperty->setValue($object, $value); - } - - private function initializeEnumValue(object $object, int|string|BackedEnum $value): BackedEnum - { - if ($value instanceof BackedEnum) { - return $value; - } - - $enumType = $this->enumType; - - try { - return $enumType::from($value); - } catch (ValueError $e) { - throw MappingException::invalidEnumValue( - $object::class, - $this->originalReflectionProperty->name, - (string) $value, - $enumType, - $e, - ); - } - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ReflectionReadonlyProperty.php b/vendor/doctrine/orm/src/Mapping/ReflectionReadonlyProperty.php deleted file mode 100644 index 13e9f6d..0000000 --- a/vendor/doctrine/orm/src/Mapping/ReflectionReadonlyProperty.php +++ /dev/null @@ -1,49 +0,0 @@ -isReadOnly()) { - throw new InvalidArgumentException('Given property is not readonly.'); - } - - parent::__construct($wrappedProperty->class, $wrappedProperty->name); - } - - public function getValue(object|null $object = null): mixed - { - return $this->wrappedProperty->getValue(...func_get_args()); - } - - public function setValue(mixed $objectOrValue, mixed $value = null): void - { - if (func_num_args() < 2 || $objectOrValue === null || ! $this->isInitialized($objectOrValue)) { - $this->wrappedProperty->setValue(...func_get_args()); - - return; - } - - assert(is_object($objectOrValue)); - - if (parent::getValue($objectOrValue) !== $value) { - throw new LogicException(sprintf('Attempting to change readonly property %s::$%s.', $this->class, $this->name)); - } - } -} diff --git a/vendor/doctrine/orm/src/Mapping/SequenceGenerator.php b/vendor/doctrine/orm/src/Mapping/SequenceGenerator.php deleted file mode 100644 index 6c06e84..0000000 --- a/vendor/doctrine/orm/src/Mapping/SequenceGenerator.php +++ /dev/null @@ -1,18 +0,0 @@ -|null $indexes - * @param array|null $uniqueConstraints - * @param array $options - */ - public function __construct( - public readonly string|null $name = null, - public readonly string|null $schema = null, - public readonly array|null $indexes = null, - public readonly array|null $uniqueConstraints = null, - public readonly array $options = [], - ) { - if ($this->indexes !== null) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11357', - 'Providing the property $indexes on %s does not have any effect and will be removed in Doctrine ORM 4.0. Please use the %s attribute instead.', - self::class, - Index::class, - ); - } - - if ($this->uniqueConstraints !== null) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11357', - 'Providing the property $uniqueConstraints on %s does not have any effect and will be removed in Doctrine ORM 4.0. Please use the %s attribute instead.', - self::class, - UniqueConstraint::class, - ); - } - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ToManyAssociationMapping.php b/vendor/doctrine/orm/src/Mapping/ToManyAssociationMapping.php deleted file mode 100644 index 2e4969c..0000000 --- a/vendor/doctrine/orm/src/Mapping/ToManyAssociationMapping.php +++ /dev/null @@ -1,16 +0,0 @@ -indexBy() */ - public function isIndexed(): bool; - - public function indexBy(): string; - - /** @return array */ - public function orderBy(): array; -} diff --git a/vendor/doctrine/orm/src/Mapping/ToManyAssociationMappingImplementation.php b/vendor/doctrine/orm/src/Mapping/ToManyAssociationMappingImplementation.php deleted file mode 100644 index 306880d..0000000 --- a/vendor/doctrine/orm/src/Mapping/ToManyAssociationMappingImplementation.php +++ /dev/null @@ -1,69 +0,0 @@ - - */ - public array $orderBy = []; - - /** @return array */ - final public function orderBy(): array - { - return $this->orderBy; - } - - /** @psalm-assert-if-true !null $this->indexBy */ - final public function isIndexed(): bool - { - return $this->indexBy !== null; - } - - final public function indexBy(): string - { - if (! $this->isIndexed()) { - throw new LogicException(sprintf( - 'This mapping is not indexed. Use %s::isIndexed() to check that before calling %s.', - self::class, - __METHOD__, - )); - } - - return $this->indexBy; - } - - /** @return list */ - public function __sleep(): array - { - $serialized = parent::__sleep(); - - if ($this->indexBy !== null) { - $serialized[] = 'indexBy'; - } - - if ($this->orderBy !== []) { - $serialized[] = 'orderBy'; - } - - return $serialized; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ToManyInverseSideMapping.php b/vendor/doctrine/orm/src/Mapping/ToManyInverseSideMapping.php deleted file mode 100644 index a092ebe..0000000 --- a/vendor/doctrine/orm/src/Mapping/ToManyInverseSideMapping.php +++ /dev/null @@ -1,10 +0,0 @@ -, - * fetch?: ClassMetadata::FETCH_*|null, - * inherited?: class-string|null, - * declared?: class-string|null, - * cache?: array|null, - * id?: bool|null, - * isOnDeleteCascade?: bool|null, - * originalClass?: class-string|null, - * originalField?: string|null, - * orphanRemoval?: bool, - * unique?: bool|null, - * joinTable?: mixed[]|null, - * type?: int, - * isOwningSide: bool, - * } $mappingArray - */ - public static function fromMappingArrayAndName( - array $mappingArray, - string $name, - ): static { - $mapping = static::fromMappingArray($mappingArray); - - if (isset($mapping->id) && $mapping->id === true) { - throw MappingException::illegalInverseIdentifierAssociation($name, $mapping->fieldName); - } - - if ($mapping->orphanRemoval) { - if (! $mapping->isCascadeRemove()) { - $mapping->cascade[] = 'remove'; - } - - $mapping->unique = null; - } - - return $mapping; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php b/vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php deleted file mode 100644 index cb85afb..0000000 --- a/vendor/doctrine/orm/src/Mapping/ToOneOwningSideMapping.php +++ /dev/null @@ -1,212 +0,0 @@ - */ - public array $sourceToTargetKeyColumns = []; - - /** @var array */ - public array $targetToSourceKeyColumns = []; - - /** @var list */ - public array $joinColumns = []; - - /** @var array */ - public array $joinColumnFieldNames = []; - - /** - * @param array $mappingArray - * @psalm-param array{ - * fieldName: string, - * sourceEntity: class-string, - * targetEntity: class-string, - * cascade?: list<'persist'|'remove'|'detach'|'refresh'|'all'>, - * fetch?: ClassMetadata::FETCH_*|null, - * inherited?: class-string|null, - * declared?: class-string|null, - * cache?: array|null, - * id?: bool|null, - * isOnDeleteCascade?: bool|null, - * originalClass?: class-string|null, - * originalField?: string|null, - * orphanRemoval?: bool, - * unique?: bool|null, - * joinTable?: mixed[]|null, - * type?: int, - * isOwningSide: bool, - * joinColumns?: mixed[]|null, - * } $mappingArray - */ - public static function fromMappingArray(array $mappingArray): static - { - $joinColumns = $mappingArray['joinColumns'] ?? []; - unset($mappingArray['joinColumns']); - - $instance = parent::fromMappingArray($mappingArray); - assert($instance->isToOneOwningSide()); - - foreach ($joinColumns as $column) { - $instance->joinColumns[] = JoinColumnMapping::fromMappingArray($column); - } - - if ($instance->orphanRemoval) { - if (! $instance->isCascadeRemove()) { - $instance->cascade[] = 'remove'; - } - - $instance->unique = null; - } - - return $instance; - } - - /** - * @param mixed[] $mappingArray - * @param class-string $name - * @psalm-param array{ - * fieldName: string, - * sourceEntity: class-string, - * targetEntity: class-string, - * cascade?: list<'persist'|'remove'|'detach'|'refresh'|'all'>, - * fetch?: ClassMetadata::FETCH_*|null, - * inherited?: class-string|null, - * declared?: class-string|null, - * cache?: array|null, - * id?: bool|null, - * isOnDeleteCascade?: bool|null, - * originalClass?: class-string|null, - * originalField?: string|null, - * orphanRemoval?: bool, - * unique?: bool|null, - * joinTable?: mixed[]|null, - * type?: int, - * isOwningSide: bool, - * joinColumns?: mixed[]|null, - * } $mappingArray - */ - public static function fromMappingArrayAndName( - array $mappingArray, - NamingStrategy $namingStrategy, - string $name, - array|null $table, - bool $isInheritanceTypeSingleTable, - ): static { - if (isset($mappingArray['joinColumns'])) { - foreach ($mappingArray['joinColumns'] as $index => $joinColumn) { - if (empty($joinColumn['name'])) { - $mappingArray['joinColumns'][$index]['name'] = $namingStrategy->joinColumnName($mappingArray['fieldName'], $name); - } - } - } - - $mapping = static::fromMappingArray($mappingArray); - - assert($mapping->isToOneOwningSide()); - if (empty($mapping->joinColumns)) { - // Apply default join column - $mapping->joinColumns = [ - JoinColumnMapping::fromMappingArray([ - 'name' => $namingStrategy->joinColumnName($mapping->fieldName, $name), - 'referencedColumnName' => $namingStrategy->referenceColumnName(), - ]), - ]; - } - - $uniqueConstraintColumns = []; - - foreach ($mapping->joinColumns as $joinColumn) { - if ($mapping->isOneToOne() && ! $isInheritanceTypeSingleTable) { - if (count($mapping->joinColumns) === 1) { - if (empty($mapping->id)) { - $joinColumn->unique = true; - } - } else { - $uniqueConstraintColumns[] = $joinColumn->name; - } - } - - if (empty($joinColumn->referencedColumnName)) { - $joinColumn->referencedColumnName = $namingStrategy->referenceColumnName(); - } - - if ($joinColumn->name[0] === '`') { - $joinColumn->name = trim($joinColumn->name, '`'); - $joinColumn->quoted = true; - } - - if ($joinColumn->referencedColumnName[0] === '`') { - $joinColumn->referencedColumnName = trim($joinColumn->referencedColumnName, '`'); - $joinColumn->quoted = true; - } - - $mapping->sourceToTargetKeyColumns[$joinColumn->name] = $joinColumn->referencedColumnName; - $mapping->joinColumnFieldNames[$joinColumn->name] = $joinColumn->fieldName ?? $joinColumn->name; - } - - if ($uniqueConstraintColumns) { - if (! $table) { - throw new RuntimeException('ClassMetadata::setTable() has to be called before defining a one to one relationship.'); - } - - $table['uniqueConstraints'][$mapping->fieldName . '_uniq'] = ['columns' => $uniqueConstraintColumns]; - } - - $mapping->targetToSourceKeyColumns = array_flip($mapping->sourceToTargetKeyColumns); - - return $mapping; - } - - public function offsetSet(mixed $offset, mixed $value): void - { - if ($offset === 'joinColumns') { - $joinColumns = []; - foreach ($value as $column) { - $joinColumns[] = JoinColumnMapping::fromMappingArray($column); - } - - $this->joinColumns = $joinColumns; - - return; - } - - parent::offsetSet($offset, $value); - } - - /** @return array */ - public function toArray(): array - { - $array = parent::toArray(); - - $joinColumns = []; - foreach ($array['joinColumns'] as $column) { - $joinColumns[] = (array) $column; - } - - $array['joinColumns'] = $joinColumns; - - return $array; - } - - /** @return list */ - public function __sleep(): array - { - return [ - ...parent::__sleep(), - 'joinColumns', - 'joinColumnFieldNames', - 'sourceToTargetKeyColumns', - 'targetToSourceKeyColumns', - ]; - } -} diff --git a/vendor/doctrine/orm/src/Mapping/TypedFieldMapper.php b/vendor/doctrine/orm/src/Mapping/TypedFieldMapper.php deleted file mode 100644 index 2db9e90..0000000 --- a/vendor/doctrine/orm/src/Mapping/TypedFieldMapper.php +++ /dev/null @@ -1,20 +0,0 @@ -, type?: string} $mapping The field mapping to validate & complete. - * - * @return array{fieldName: string, enumType?: class-string, type?: string} The updated mapping. - */ - public function validateAndComplete(array $mapping, ReflectionProperty $field): array; -} diff --git a/vendor/doctrine/orm/src/Mapping/UnderscoreNamingStrategy.php b/vendor/doctrine/orm/src/Mapping/UnderscoreNamingStrategy.php deleted file mode 100644 index cedc150..0000000 --- a/vendor/doctrine/orm/src/Mapping/UnderscoreNamingStrategy.php +++ /dev/null @@ -1,108 +0,0 @@ -case; - } - - /** - * Sets string case CASE_LOWER | CASE_UPPER. - * Alphabetic characters converted to lowercase or uppercase. - */ - public function setCase(int $case): void - { - $this->case = $case; - } - - public function classToTableName(string $className): string - { - if (str_contains($className, '\\')) { - $className = substr($className, strrpos($className, '\\') + 1); - } - - return $this->underscore($className); - } - - public function propertyToColumnName(string $propertyName, string $className): string - { - return $this->underscore($propertyName); - } - - public function embeddedFieldToColumnName( - string $propertyName, - string $embeddedColumnName, - string $className, - string $embeddedClassName, - ): string { - return $this->underscore($propertyName) . '_' . $embeddedColumnName; - } - - public function referenceColumnName(): string - { - return $this->case === CASE_UPPER ? 'ID' : 'id'; - } - - public function joinColumnName(string $propertyName, string $className): string - { - return $this->underscore($propertyName) . '_' . $this->referenceColumnName(); - } - - public function joinTableName( - string $sourceEntity, - string $targetEntity, - string $propertyName, - ): string { - return $this->classToTableName($sourceEntity) . '_' . $this->classToTableName($targetEntity); - } - - public function joinKeyColumnName( - string $entityName, - string|null $referencedColumnName, - ): string { - return $this->classToTableName($entityName) . '_' . - ($referencedColumnName ?: $this->referenceColumnName()); - } - - private function underscore(string $string): string - { - $string = preg_replace('/(?<=[a-z0-9])([A-Z])/', '_$1', $string); - - if ($this->case === CASE_UPPER) { - return strtoupper($string); - } - - return strtolower($string); - } -} diff --git a/vendor/doctrine/orm/src/Mapping/UniqueConstraint.php b/vendor/doctrine/orm/src/Mapping/UniqueConstraint.php deleted file mode 100644 index 3180be0..0000000 --- a/vendor/doctrine/orm/src/Mapping/UniqueConstraint.php +++ /dev/null @@ -1,24 +0,0 @@ -|null $columns - * @param array|null $fields - * @param array|null $options - */ - public function __construct( - public readonly string|null $name = null, - public readonly array|null $columns = null, - public readonly array|null $fields = null, - public readonly array|null $options = null, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Mapping/Version.php b/vendor/doctrine/orm/src/Mapping/Version.php deleted file mode 100644 index 7252e05..0000000 --- a/vendor/doctrine/orm/src/Mapping/Version.php +++ /dev/null @@ -1,12 +0,0 @@ -sql = $sql; - - return $this; - } - - public function getSQL(): string - { - return $this->sql; - } - - protected function _doExecute(): Result|int - { - $parameters = []; - $types = []; - - foreach ($this->getParameters() as $parameter) { - $name = $parameter->getName(); - - if ($parameter->typeWasSpecified()) { - $parameters[$name] = $parameter->getValue(); - $types[$name] = $parameter->getType(); - - continue; - } - - $value = $this->processParameterValue($parameter->getValue()); - $type = $parameter->getValue() === $value - ? $parameter->getType() - : ParameterTypeInferer::inferType($value); - - $parameters[$name] = $value; - $types[$name] = $type; - } - - if ($parameters && is_int(key($parameters))) { - ksort($parameters); - ksort($types); - - $parameters = array_values($parameters); - $types = array_values($types); - } - - return $this->em->getConnection()->executeQuery( - $this->sql, - $parameters, - $types, - $this->queryCacheProfile, - ); - } -} diff --git a/vendor/doctrine/orm/src/NoResultException.php b/vendor/doctrine/orm/src/NoResultException.php deleted file mode 100644 index 6ecabae..0000000 --- a/vendor/doctrine/orm/src/NoResultException.php +++ /dev/null @@ -1,16 +0,0 @@ - $newEntitiesWithAssociations */ - public static function newEntitiesFoundThroughRelationships(array $newEntitiesWithAssociations): self - { - $errorMessages = array_map( - static function (array $newEntityWithAssociation): string { - [$associationMapping, $entity] = $newEntityWithAssociation; - - return self::newEntityFoundThroughRelationshipMessage($associationMapping, $entity); - }, - $newEntitiesWithAssociations, - ); - - if (count($errorMessages) === 1) { - return new self(reset($errorMessages)); - } - - return new self( - 'Multiple non-persisted new entities were found through the given association graph:' - . "\n\n * " - . implode("\n * ", $errorMessages), - ); - } - - public static function newEntityFoundThroughRelationship(AssociationMapping $associationMapping, object $entry): self - { - return new self(self::newEntityFoundThroughRelationshipMessage($associationMapping, $entry)); - } - - public static function detachedEntityFoundThroughRelationship(AssociationMapping $assoc, object $entry): self - { - return new self('A detached entity of type ' . $assoc->targetEntity . ' (' . self::objToStr($entry) . ') ' - . " was found through the relationship '" . $assoc->sourceEntity . '#' . $assoc->fieldName . "' " - . 'during cascading a persist operation.'); - } - - public static function entityNotManaged(object $entity): self - { - return new self('Entity ' . self::objToStr($entity) . ' is not managed. An entity is managed if its fetched ' . - 'from the database or registered as new through EntityManager#persist'); - } - - public static function entityHasNoIdentity(object $entity, string $operation): self - { - return new self('Entity has no identity, therefore ' . $operation . ' cannot be performed. ' . self::objToStr($entity)); - } - - public static function entityIsRemoved(object $entity, string $operation): self - { - return new self('Entity is removed, therefore ' . $operation . ' cannot be performed. ' . self::objToStr($entity)); - } - - public static function detachedEntityCannot(object $entity, string $operation): self - { - return new self('Detached entity ' . self::objToStr($entity) . ' cannot be ' . $operation); - } - - public static function invalidObject(string $context, mixed $given, int $parameterIndex = 1): self - { - return new self($context . ' expects parameter ' . $parameterIndex . - ' to be an entity object, ' . gettype($given) . ' given.'); - } - - public static function invalidCompositeIdentifier(): self - { - return new self('Binding an entity with a composite primary key to a query is not supported. ' . - 'You should split the parameter into the explicit fields and bind them separately.'); - } - - public static function invalidIdentifierBindingEntity(string $class): self - { - return new self(sprintf( - <<<'EXCEPTION' -Binding entities to query parameters only allowed for entities that have an identifier. -Class "%s" does not have an identifier. -EXCEPTION - , - $class, - )); - } - - public static function invalidAssociation(ClassMetadata $targetClass, AssociationMapping $assoc, mixed $actualValue): self - { - $expectedType = $targetClass->getName(); - - return new self(sprintf( - 'Expected value of type "%s" for association field "%s#$%s", got "%s" instead.', - $expectedType, - $assoc->sourceEntity, - $assoc->fieldName, - get_debug_type($actualValue), - )); - } - - public static function invalidAutoGenerateMode(mixed $value): self - { - return new self(sprintf('Invalid auto generate mode "%s" given.', is_scalar($value) ? (string) $value : get_debug_type($value))); - } - - public static function missingPrimaryKeyValue(string $className, string $idField): self - { - return new self(sprintf('Missing value for primary key %s on %s', $idField, $className)); - } - - public static function proxyDirectoryRequired(): self - { - return new self('You must configure a proxy directory. See docs for details'); - } - - public static function proxyNamespaceRequired(): self - { - return new self('You must configure a proxy namespace'); - } - - public static function proxyDirectoryNotWritable(string $proxyDirectory): self - { - return new self(sprintf('Your proxy directory "%s" must be writable', $proxyDirectory)); - } - - /** - * Helper method to show an object as string. - */ - private static function objToStr(object $obj): string - { - return $obj instanceof Stringable ? (string) $obj : get_debug_type($obj) . '@' . spl_object_id($obj); - } - - private static function newEntityFoundThroughRelationshipMessage(AssociationMapping $associationMapping, object $entity): string - { - return 'A new entity was found through the relationship \'' - . $associationMapping->sourceEntity . '#' . $associationMapping->fieldName . '\' that was not' - . ' configured to cascade persist operations for entity: ' . self::objToStr($entity) . '.' - . ' To solve this issue: Either explicitly call EntityManager#persist()' - . ' on this unknown entity or configure cascade persist' - . ' this association in the mapping for example @ManyToOne(..,cascade={"persist"}).' - . ($entity instanceof Stringable - ? '' - : ' If you cannot find out which entity causes the problem implement \'' - . $associationMapping->targetEntity . '#__toString()\' to get a clue.' - ); - } -} diff --git a/vendor/doctrine/orm/src/ORMSetup.php b/vendor/doctrine/orm/src/ORMSetup.php deleted file mode 100644 index 7354c71..0000000 --- a/vendor/doctrine/orm/src/ORMSetup.php +++ /dev/null @@ -1,127 +0,0 @@ -setMetadataDriverImpl(new AttributeDriver($paths)); - - return $config; - } - - /** - * Creates a configuration with an XML metadata driver. - * - * @param string[] $paths - */ - public static function createXMLMetadataConfiguration( - array $paths, - bool $isDevMode = false, - string|null $proxyDir = null, - CacheItemPoolInterface|null $cache = null, - bool $isXsdValidationEnabled = true, - ): Configuration { - $config = self::createConfiguration($isDevMode, $proxyDir, $cache); - $config->setMetadataDriverImpl(new XmlDriver($paths, XmlDriver::DEFAULT_FILE_EXTENSION, $isXsdValidationEnabled)); - - return $config; - } - - /** - * Creates a configuration without a metadata driver. - */ - public static function createConfiguration( - bool $isDevMode = false, - string|null $proxyDir = null, - CacheItemPoolInterface|null $cache = null, - ): Configuration { - $proxyDir = $proxyDir ?: sys_get_temp_dir(); - - $cache = self::createCacheInstance($isDevMode, $proxyDir, $cache); - - $config = new Configuration(); - - $config->setMetadataCache($cache); - $config->setQueryCache($cache); - $config->setResultCache($cache); - $config->setProxyDir($proxyDir); - $config->setProxyNamespace('DoctrineProxies'); - $config->setAutoGenerateProxyClasses($isDevMode); - - return $config; - } - - private static function createCacheInstance( - bool $isDevMode, - string $proxyDir, - CacheItemPoolInterface|null $cache, - ): CacheItemPoolInterface { - if ($cache !== null) { - return $cache; - } - - if (! class_exists(ArrayAdapter::class)) { - throw new RuntimeException( - 'The Doctrine setup tool cannot configure caches without symfony/cache.' - . ' Please add symfony/cache as explicit dependency or pass your own cache implementation.', - ); - } - - if ($isDevMode) { - return new ArrayAdapter(); - } - - $namespace = 'dc2_' . md5($proxyDir); - - if (extension_loaded('apcu') && apcu_enabled()) { - return new ApcuAdapter($namespace); - } - - if (MemcachedAdapter::isSupported()) { - return new MemcachedAdapter(MemcachedAdapter::createConnection('memcached://127.0.0.1'), $namespace); - } - - if (extension_loaded('redis')) { - $redis = new Redis(); - $redis->connect('127.0.0.1'); - - return new RedisAdapter($redis, $namespace); - } - - return new ArrayAdapter(); - } - - private function __construct() - { - } -} diff --git a/vendor/doctrine/orm/src/OptimisticLockException.php b/vendor/doctrine/orm/src/OptimisticLockException.php deleted file mode 100644 index f84e134..0000000 --- a/vendor/doctrine/orm/src/OptimisticLockException.php +++ /dev/null @@ -1,55 +0,0 @@ -entity; - } - - /** @param object|class-string $entity */ - public static function lockFailed(object|string $entity): self - { - return new self('The optimistic lock on an entity failed.', $entity); - } - - public static function lockFailedVersionMismatch( - object $entity, - int|string|DateTimeInterface $expectedLockVersion, - int|string|DateTimeInterface $actualLockVersion, - ): self { - $expectedLockVersion = $expectedLockVersion instanceof DateTimeInterface ? $expectedLockVersion->getTimestamp() : $expectedLockVersion; - $actualLockVersion = $actualLockVersion instanceof DateTimeInterface ? $actualLockVersion->getTimestamp() : $actualLockVersion; - - return new self('The optimistic lock failed, version ' . $expectedLockVersion . ' was expected, but is actually ' . $actualLockVersion, $entity); - } - - public static function notVersioned(string $entityName): self - { - return new self('Cannot obtain optimistic lock on unversioned entity ' . $entityName, null); - } -} diff --git a/vendor/doctrine/orm/src/PersistentCollection.php b/vendor/doctrine/orm/src/PersistentCollection.php deleted file mode 100644 index d54d3d1..0000000 --- a/vendor/doctrine/orm/src/PersistentCollection.php +++ /dev/null @@ -1,652 +0,0 @@ - - * @template-implements Selectable - */ -final class PersistentCollection extends AbstractLazyCollection implements Selectable -{ - /** - * A snapshot of the collection at the moment it was fetched from the database. - * This is used to create a diff of the collection at commit time. - * - * @psalm-var array - */ - private array $snapshot = []; - - /** - * The entity that owns this collection. - */ - private object|null $owner = null; - - /** - * The association mapping the collection belongs to. - * This is currently either a OneToManyMapping or a ManyToManyMapping. - * - * @var (AssociationMapping&ToManyAssociationMapping)|null - */ - private AssociationMapping|null $association = null; - - /** - * The name of the field on the target entities that points to the owner - * of the collection. This is only set if the association is bi-directional. - */ - private string|null $backRefFieldName = null; - - /** - * Whether the collection is dirty and needs to be synchronized with the database - * when the UnitOfWork that manages its persistent state commits. - */ - private bool $isDirty = false; - - /** - * Creates a new persistent collection. - * - * @param EntityManagerInterface $em The EntityManager the collection will be associated with. - * @param ClassMetadata $typeClass The class descriptor of the entity type of this collection. - * @psalm-param Collection&Selectable $collection The collection elements. - */ - public function __construct( - private EntityManagerInterface|null $em, - private readonly ClassMetadata|null $typeClass, - Collection $collection, - ) { - $this->collection = $collection; - $this->initialized = true; - } - - /** - * INTERNAL: - * Sets the collection's owning entity together with the AssociationMapping that - * describes the association between the owner and the elements of the collection. - */ - public function setOwner(object $entity, AssociationMapping&ToManyAssociationMapping $assoc): void - { - $this->owner = $entity; - $this->association = $assoc; - $this->backRefFieldName = $assoc->isOwningSide() ? $assoc->inversedBy : $assoc->mappedBy; - } - - /** - * INTERNAL: - * Gets the collection owner. - */ - public function getOwner(): object|null - { - return $this->owner; - } - - public function getTypeClass(): ClassMetadata - { - assert($this->typeClass !== null); - - return $this->typeClass; - } - - private function getUnitOfWork(): UnitOfWork - { - assert($this->em !== null); - - return $this->em->getUnitOfWork(); - } - - /** - * INTERNAL: - * Adds an element to a collection during hydration. This will automatically - * complete bidirectional associations in the case of a one-to-many association. - */ - public function hydrateAdd(mixed $element): void - { - $this->unwrap()->add($element); - - // If _backRefFieldName is set and its a one-to-many association, - // we need to set the back reference. - if ($this->backRefFieldName && $this->getMapping()->isOneToMany()) { - assert($this->typeClass !== null); - // Set back reference to owner - $this->typeClass->reflFields[$this->backRefFieldName]->setValue( - $element, - $this->owner, - ); - - $this->getUnitOfWork()->setOriginalEntityProperty( - spl_object_id($element), - $this->backRefFieldName, - $this->owner, - ); - } - } - - /** - * INTERNAL: - * Sets a keyed element in the collection during hydration. - */ - public function hydrateSet(mixed $key, mixed $element): void - { - $this->unwrap()->set($key, $element); - - // If _backRefFieldName is set, then the association is bidirectional - // and we need to set the back reference. - if ($this->backRefFieldName && $this->getMapping()->isOneToMany()) { - assert($this->typeClass !== null); - // Set back reference to owner - $this->typeClass->reflFields[$this->backRefFieldName]->setValue( - $element, - $this->owner, - ); - } - } - - /** - * Initializes the collection by loading its contents from the database - * if the collection is not yet initialized. - */ - public function initialize(): void - { - if ($this->initialized || ! $this->association) { - return; - } - - $this->doInitialize(); - - $this->initialized = true; - } - - /** - * INTERNAL: - * Tells this collection to take a snapshot of its current state. - */ - public function takeSnapshot(): void - { - $this->snapshot = $this->unwrap()->toArray(); - $this->isDirty = false; - } - - /** - * INTERNAL: - * Returns the last snapshot of the elements in the collection. - * - * @psalm-return array The last snapshot of the elements. - */ - public function getSnapshot(): array - { - return $this->snapshot; - } - - /** - * INTERNAL: - * getDeleteDiff - * - * @return mixed[] - */ - public function getDeleteDiff(): array - { - $collectionItems = $this->unwrap()->toArray(); - - return array_values(array_diff_key( - array_combine(array_map('spl_object_id', $this->snapshot), $this->snapshot), - array_combine(array_map('spl_object_id', $collectionItems), $collectionItems), - )); - } - - /** - * INTERNAL: - * getInsertDiff - * - * @return mixed[] - */ - public function getInsertDiff(): array - { - $collectionItems = $this->unwrap()->toArray(); - - return array_values(array_diff_key( - array_combine(array_map('spl_object_id', $collectionItems), $collectionItems), - array_combine(array_map('spl_object_id', $this->snapshot), $this->snapshot), - )); - } - - /** INTERNAL: Gets the association mapping of the collection. */ - public function getMapping(): AssociationMapping&ToManyAssociationMapping - { - if ($this->association === null) { - throw new UnexpectedValueException('The underlying association mapping is null although it should not be'); - } - - return $this->association; - } - - /** - * Marks this collection as changed/dirty. - */ - private function changed(): void - { - if ($this->isDirty) { - return; - } - - $this->isDirty = true; - } - - /** - * Gets a boolean flag indicating whether this collection is dirty which means - * its state needs to be synchronized with the database. - */ - public function isDirty(): bool - { - return $this->isDirty; - } - - /** - * Sets a boolean flag, indicating whether this collection is dirty. - */ - public function setDirty(bool $dirty): void - { - $this->isDirty = $dirty; - } - - /** - * Sets the initialized flag of the collection, forcing it into that state. - */ - public function setInitialized(bool $bool): void - { - $this->initialized = $bool; - } - - public function remove(string|int $key): mixed - { - // TODO: If the keys are persistent as well (not yet implemented) - // and the collection is not initialized and orphanRemoval is - // not used we can issue a straight SQL delete/update on the - // association (table). Without initializing the collection. - $removed = parent::remove($key); - - if (! $removed) { - return $removed; - } - - $this->changed(); - - if ( - $this->association !== null && - $this->association->isToMany() && - $this->owner && - $this->getMapping()->orphanRemoval - ) { - $this->getUnitOfWork()->scheduleOrphanRemoval($removed); - } - - return $removed; - } - - public function removeElement(mixed $element): bool - { - $removed = parent::removeElement($element); - - if (! $removed) { - return $removed; - } - - $this->changed(); - - if ( - $this->association !== null && - $this->association->isToMany() && - $this->owner && - $this->getMapping()->orphanRemoval - ) { - $this->getUnitOfWork()->scheduleOrphanRemoval($element); - } - - return $removed; - } - - public function containsKey(mixed $key): bool - { - if ( - ! $this->initialized && $this->getMapping()->fetch === ClassMetadata::FETCH_EXTRA_LAZY - && isset($this->getMapping()->indexBy) - ) { - $persister = $this->getUnitOfWork()->getCollectionPersister($this->getMapping()); - - return $this->unwrap()->containsKey($key) || $persister->containsKey($this, $key); - } - - return parent::containsKey($key); - } - - public function contains(mixed $element): bool - { - if (! $this->initialized && $this->getMapping()->fetch === ClassMetadata::FETCH_EXTRA_LAZY) { - $persister = $this->getUnitOfWork()->getCollectionPersister($this->getMapping()); - - return $this->unwrap()->contains($element) || $persister->contains($this, $element); - } - - return parent::contains($element); - } - - public function get(string|int $key): mixed - { - if ( - ! $this->initialized - && $this->getMapping()->fetch === ClassMetadata::FETCH_EXTRA_LAZY - && isset($this->getMapping()->indexBy) - ) { - assert($this->em !== null); - assert($this->typeClass !== null); - if (! $this->typeClass->isIdentifierComposite && $this->typeClass->isIdentifier($this->getMapping()->indexBy)) { - return $this->em->find($this->typeClass->name, $key); - } - - return $this->getUnitOfWork()->getCollectionPersister($this->getMapping())->get($this, $key); - } - - return parent::get($key); - } - - public function count(): int - { - if (! $this->initialized && $this->association !== null && $this->getMapping()->fetch === ClassMetadata::FETCH_EXTRA_LAZY) { - $persister = $this->getUnitOfWork()->getCollectionPersister($this->association); - - return $persister->count($this) + ($this->isDirty ? $this->unwrap()->count() : 0); - } - - return parent::count(); - } - - public function set(string|int $key, mixed $value): void - { - parent::set($key, $value); - - $this->changed(); - - if (is_object($value) && $this->em) { - $this->getUnitOfWork()->cancelOrphanRemoval($value); - } - } - - public function add(mixed $value): bool - { - $this->unwrap()->add($value); - - $this->changed(); - - if (is_object($value) && $this->em) { - $this->getUnitOfWork()->cancelOrphanRemoval($value); - } - - return true; - } - - public function offsetExists(mixed $offset): bool - { - return $this->containsKey($offset); - } - - public function offsetGet(mixed $offset): mixed - { - return $this->get($offset); - } - - public function offsetSet(mixed $offset, mixed $value): void - { - if (! isset($offset)) { - $this->add($value); - - return; - } - - $this->set($offset, $value); - } - - public function offsetUnset(mixed $offset): void - { - $this->remove($offset); - } - - public function isEmpty(): bool - { - return $this->unwrap()->isEmpty() && $this->count() === 0; - } - - public function clear(): void - { - if ($this->initialized && $this->isEmpty()) { - $this->unwrap()->clear(); - - return; - } - - $uow = $this->getUnitOfWork(); - $association = $this->getMapping(); - - if ( - $association->isToMany() && - $association->orphanRemoval && - $this->owner - ) { - // we need to initialize here, as orphan removal acts like implicit cascadeRemove, - // hence for event listeners we need the objects in memory. - $this->initialize(); - - foreach ($this->unwrap() as $element) { - $uow->scheduleOrphanRemoval($element); - } - } - - $this->unwrap()->clear(); - - $this->initialized = true; // direct call, {@link initialize()} is too expensive - - if ($association->isOwningSide() && $this->owner) { - $this->changed(); - - $uow->scheduleCollectionDeletion($this); - - $this->takeSnapshot(); - } - } - - /** - * Called by PHP when this collection is serialized. Ensures that only the - * elements are properly serialized. - * - * Internal note: Tried to implement Serializable first but that did not work well - * with circular references. This solution seems simpler and works well. - * - * @return string[] - * @psalm-return array{0: string, 1: string} - */ - public function __sleep(): array - { - return ['collection', 'initialized']; - } - - public function __wakeup(): void - { - $this->em = null; - } - - /** - * Extracts a slice of $length elements starting at position $offset from the Collection. - * - * If $length is null it returns all elements from $offset to the end of the Collection. - * Keys have to be preserved by this method. Calling this method will only return the - * selected slice and NOT change the elements contained in the collection slice is called on. - * - * @return mixed[] - * @psalm-return array - */ - public function slice(int $offset, int|null $length = null): array - { - if (! $this->initialized && ! $this->isDirty && $this->getMapping()->fetch === ClassMetadata::FETCH_EXTRA_LAZY) { - $persister = $this->getUnitOfWork()->getCollectionPersister($this->getMapping()); - - return $persister->slice($this, $offset, $length); - } - - return parent::slice($offset, $length); - } - - /** - * Cleans up internal state of cloned persistent collection. - * - * The following problems have to be prevented: - * 1. Added entities are added to old PC - * 2. New collection is not dirty, if reused on other entity nothing - * changes. - * 3. Snapshot leads to invalid diffs being generated. - * 4. Lazy loading grabs entities from old owner object. - * 5. New collection is connected to old owner and leads to duplicate keys. - */ - public function __clone() - { - if (is_object($this->collection)) { - $this->collection = clone $this->collection; - } - - $this->initialize(); - - $this->owner = null; - $this->snapshot = []; - - $this->changed(); - } - - /** - * Selects all elements from a selectable that match the expression and - * return a new collection containing these elements. - * - * @psalm-return Collection - * - * @throws RuntimeException - */ - public function matching(Criteria $criteria): Collection - { - if ($this->isDirty) { - $this->initialize(); - } - - if ($this->initialized) { - return $this->unwrap()->matching($criteria); - } - - $association = $this->getMapping(); - if ($association->isManyToMany()) { - $persister = $this->getUnitOfWork()->getCollectionPersister($association); - - return new ArrayCollection($persister->loadCriteria($this, $criteria)); - } - - $builder = Criteria::expr(); - $ownerExpression = $builder->eq($this->backRefFieldName, $this->owner); - $expression = $criteria->getWhereExpression(); - $expression = $expression ? $builder->andX($expression, $ownerExpression) : $ownerExpression; - - $criteria = clone $criteria; - $criteria->where($expression); - $criteria->orderBy( - $criteria->orderings() ?: array_map( - static fn (string $order): Order => Order::from(strtoupper($order)), - $association->orderBy(), - ), - ); - - $persister = $this->getUnitOfWork()->getEntityPersister($association->targetEntity); - - return $association->fetch === ClassMetadata::FETCH_EXTRA_LAZY - ? new LazyCriteriaCollection($persister, $criteria) - : new ArrayCollection($persister->loadCriteria($criteria)); - } - - /** - * Retrieves the wrapped Collection instance. - * - * @return Collection&Selectable - */ - public function unwrap(): Selectable&Collection - { - assert($this->collection instanceof Collection); - assert($this->collection instanceof Selectable); - - return $this->collection; - } - - protected function doInitialize(): void - { - // Has NEW objects added through add(). Remember them. - $newlyAddedDirtyObjects = []; - - if ($this->isDirty) { - $newlyAddedDirtyObjects = $this->unwrap()->toArray(); - } - - $this->unwrap()->clear(); - $this->getUnitOfWork()->loadCollection($this); - $this->takeSnapshot(); - - if ($newlyAddedDirtyObjects) { - $this->restoreNewObjectsInDirtyCollection($newlyAddedDirtyObjects); - } - } - - /** - * @param object[] $newObjects - * - * Note: the only reason why this entire looping/complexity is performed via `spl_object_id` - * is because we want to prevent using `array_udiff()`, which is likely to cause very - * high overhead (complexity of O(n^2)). `array_diff_key()` performs the operation in - * core, which is faster than using a callback for comparisons - */ - private function restoreNewObjectsInDirtyCollection(array $newObjects): void - { - $loadedObjects = $this->unwrap()->toArray(); - $newObjectsByOid = array_combine(array_map('spl_object_id', $newObjects), $newObjects); - $loadedObjectsByOid = array_combine(array_map('spl_object_id', $loadedObjects), $loadedObjects); - $newObjectsThatWereNotLoaded = array_diff_key($newObjectsByOid, $loadedObjectsByOid); - - if ($newObjectsThatWereNotLoaded) { - // Reattach NEW objects added through add(), if any. - array_walk($newObjectsThatWereNotLoaded, [$this->unwrap(), 'add']); - - $this->isDirty = true; - } - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Collection/AbstractCollectionPersister.php b/vendor/doctrine/orm/src/Persisters/Collection/AbstractCollectionPersister.php deleted file mode 100644 index 26f0b9e..0000000 --- a/vendor/doctrine/orm/src/Persisters/Collection/AbstractCollectionPersister.php +++ /dev/null @@ -1,50 +0,0 @@ -uow = $em->getUnitOfWork(); - $this->conn = $em->getConnection(); - $this->platform = $this->conn->getDatabasePlatform(); - $this->quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); - } - - /** - * Check if entity is in a valid state for operations. - */ - protected function isValidEntityState(object $entity): bool - { - $entityState = $this->uow->getEntityState($entity, UnitOfWork::STATE_NEW); - - if ($entityState === UnitOfWork::STATE_NEW) { - return false; - } - - // If Entity is scheduled for inclusion, it is not in this collection. - // We can assure that because it would have return true before on array check - return ! ($entityState === UnitOfWork::STATE_MANAGED && $this->uow->isScheduledForInsert($entity)); - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Collection/CollectionPersister.php b/vendor/doctrine/orm/src/Persisters/Collection/CollectionPersister.php deleted file mode 100644 index 07c4eaf..0000000 --- a/vendor/doctrine/orm/src/Persisters/Collection/CollectionPersister.php +++ /dev/null @@ -1,59 +0,0 @@ -getMapping($collection); - - if (! $mapping->isOwningSide()) { - return; // ignore inverse side - } - - assert($mapping->isManyToManyOwningSide()); - - $types = []; - $class = $this->em->getClassMetadata($mapping->sourceEntity); - - foreach ($mapping->joinTable->joinColumns as $joinColumn) { - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $class, $this->em); - } - - $this->conn->executeStatement($this->getDeleteSQL($collection), $this->getDeleteSQLParameters($collection), $types); - } - - public function update(PersistentCollection $collection): void - { - $mapping = $this->getMapping($collection); - - if (! $mapping->isOwningSide()) { - return; // ignore inverse side - } - - [$deleteSql, $deleteTypes] = $this->getDeleteRowSQL($collection); - [$insertSql, $insertTypes] = $this->getInsertRowSQL($collection); - - foreach ($collection->getDeleteDiff() as $element) { - $this->conn->executeStatement( - $deleteSql, - $this->getDeleteRowSQLParameters($collection, $element), - $deleteTypes, - ); - } - - foreach ($collection->getInsertDiff() as $element) { - $this->conn->executeStatement( - $insertSql, - $this->getInsertRowSQLParameters($collection, $element), - $insertTypes, - ); - } - } - - public function get(PersistentCollection $collection, mixed $index): object|null - { - $mapping = $this->getMapping($collection); - - if (! $mapping->isIndexed()) { - throw new BadMethodCallException('Selecting a collection by index is only supported on indexed collections.'); - } - - $persister = $this->uow->getEntityPersister($mapping->targetEntity); - $mappedKey = $mapping->isOwningSide() - ? $mapping->inversedBy - : $mapping->mappedBy; - - assert($mappedKey !== null); - - return $persister->load( - [$mappedKey => $collection->getOwner(), $mapping->indexBy() => $index], - null, - $mapping, - [], - LockMode::NONE, - 1, - ); - } - - public function count(PersistentCollection $collection): int - { - $conditions = []; - $params = []; - $types = []; - $mapping = $this->getMapping($collection); - $id = $this->uow->getEntityIdentifier($collection->getOwner()); - $sourceClass = $this->em->getClassMetadata($mapping->sourceEntity); - $association = $this->em->getMetadataFactory()->getOwningSide($mapping); - - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $sourceClass, $this->platform); - $joinColumns = ! $mapping->isOwningSide() - ? $association->joinTable->inverseJoinColumns - : $association->joinTable->joinColumns; - - foreach ($joinColumns as $joinColumn) { - $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $sourceClass, $this->platform); - $referencedName = $joinColumn->referencedColumnName; - $conditions[] = 't.' . $columnName . ' = ?'; - $params[] = $id[$sourceClass->getFieldForColumn($referencedName)]; - $types[] = PersisterHelper::getTypeOfColumn($referencedName, $sourceClass, $this->em); - } - - [$joinTargetEntitySQL, $filterSql] = $this->getFilterSql($mapping); - - if ($filterSql) { - $conditions[] = $filterSql; - } - - // If there is a provided criteria, make part of conditions - // @todo Fix this. Current SQL returns something like: - /*if ($criteria && ($expression = $criteria->getWhereExpression()) !== null) { - // A join is needed on the target entity - $targetTableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); - $targetJoinSql = ' JOIN ' . $targetTableName . ' te' - . ' ON' . implode(' AND ', $this->getOnConditionSQL($association)); - - // And criteria conditions needs to be added - $persister = $this->uow->getEntityPersister($targetClass->name); - $visitor = new SqlExpressionVisitor($persister, $targetClass); - $conditions[] = $visitor->dispatch($expression); - - $joinTargetEntitySQL = $targetJoinSql . $joinTargetEntitySQL; - }*/ - - $sql = 'SELECT COUNT(*)' - . ' FROM ' . $joinTableName . ' t' - . $joinTargetEntitySQL - . ' WHERE ' . implode(' AND ', $conditions); - - return (int) $this->conn->fetchOne($sql, $params, $types); - } - - /** - * {@inheritDoc} - */ - public function slice(PersistentCollection $collection, int $offset, int|null $length = null): array - { - $mapping = $this->getMapping($collection); - $persister = $this->uow->getEntityPersister($mapping->targetEntity); - - return $persister->getManyToManyCollection($mapping, $collection->getOwner(), $offset, $length); - } - - public function containsKey(PersistentCollection $collection, mixed $key): bool - { - $mapping = $this->getMapping($collection); - - if (! $mapping->isIndexed()) { - throw new BadMethodCallException('Selecting a collection by index is only supported on indexed collections.'); - } - - [$quotedJoinTable, $whereClauses, $params, $types] = $this->getJoinTableRestrictionsWithKey( - $collection, - (string) $key, - true, - ); - - $sql = 'SELECT 1 FROM ' . $quotedJoinTable . ' WHERE ' . implode(' AND ', $whereClauses); - - return (bool) $this->conn->fetchOne($sql, $params, $types); - } - - public function contains(PersistentCollection $collection, object $element): bool - { - if (! $this->isValidEntityState($element)) { - return false; - } - - [$quotedJoinTable, $whereClauses, $params, $types] = $this->getJoinTableRestrictions( - $collection, - $element, - true, - ); - - $sql = 'SELECT 1 FROM ' . $quotedJoinTable . ' WHERE ' . implode(' AND ', $whereClauses); - - return (bool) $this->conn->fetchOne($sql, $params, $types); - } - - /** - * {@inheritDoc} - */ - public function loadCriteria(PersistentCollection $collection, Criteria $criteria): array - { - $mapping = $this->getMapping($collection); - $owner = $collection->getOwner(); - $ownerMetadata = $this->em->getClassMetadata($owner::class); - $id = $this->uow->getEntityIdentifier($owner); - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - $onConditions = $this->getOnConditionSQL($mapping); - $whereClauses = $params = []; - $paramTypes = []; - - if (! $mapping->isOwningSide()) { - assert($mapping instanceof InverseSideMapping); - $associationSourceClass = $targetClass; - $sourceRelationMode = 'relationToTargetKeyColumns'; - } else { - $associationSourceClass = $ownerMetadata; - $sourceRelationMode = 'relationToSourceKeyColumns'; - } - - $mapping = $this->em->getMetadataFactory()->getOwningSide($mapping); - - foreach ($mapping->$sourceRelationMode as $key => $value) { - $whereClauses[] = sprintf('t.%s = ?', $key); - $params[] = $ownerMetadata->containsForeignIdentifier - ? $id[$ownerMetadata->getFieldForColumn($value)] - : $id[$ownerMetadata->fieldNames[$value]]; - $paramTypes[] = PersisterHelper::getTypeOfColumn($value, $ownerMetadata, $this->em); - } - - $parameters = $this->expandCriteriaParameters($criteria); - - foreach ($parameters as $parameter) { - [$name, $value, $operator] = $parameter; - - $field = $this->quoteStrategy->getColumnName($name, $targetClass, $this->platform); - - if ($value === null && ($operator === Comparison::EQ || $operator === Comparison::NEQ)) { - $whereClauses[] = sprintf('te.%s %s NULL', $field, $operator === Comparison::EQ ? 'IS' : 'IS NOT'); - } else { - $whereClauses[] = sprintf('te.%s %s ?', $field, $operator); - $params[] = $value; - $paramTypes[] = PersisterHelper::getTypeOfField($name, $targetClass, $this->em)[0]; - } - } - - $tableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); - $joinTable = $this->quoteStrategy->getJoinTableName($mapping, $associationSourceClass, $this->platform); - - $rsm = new Query\ResultSetMappingBuilder($this->em); - $rsm->addRootEntityFromClassMetadata($targetClass->name, 'te'); - - $sql = 'SELECT ' . $rsm->generateSelectClause() - . ' FROM ' . $tableName . ' te' - . ' JOIN ' . $joinTable . ' t ON' - . implode(' AND ', $onConditions) - . ' WHERE ' . implode(' AND ', $whereClauses); - - $sql .= $this->getOrderingSql($criteria, $targetClass); - - $sql .= $this->getLimitSql($criteria); - - $stmt = $this->conn->executeQuery($sql, $params, $paramTypes); - - return $this - ->em - ->newHydrator(Query::HYDRATE_OBJECT) - ->hydrateAll($stmt, $rsm); - } - - /** - * Generates the filter SQL for a given mapping. - * - * This method is not used for actually grabbing the related entities - * but when the extra-lazy collection methods are called on a filtered - * association. This is why besides the many to many table we also - * have to join in the actual entities table leading to additional - * JOIN. - * - * @param AssociationMapping $mapping Array containing mapping information. - * - * @return string[] ordered tuple: - * - JOIN condition to add to the SQL - * - WHERE condition to add to the SQL - * @psalm-return array{0: string, 1: string} - */ - public function getFilterSql(AssociationMapping $mapping): array - { - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - $rootClass = $this->em->getClassMetadata($targetClass->rootEntityName); - $filterSql = $this->generateFilterConditionSQL($rootClass, 'te'); - - if ($filterSql === '') { - return ['', '']; - } - - // A join is needed if there is filtering on the target entity - $tableName = $this->quoteStrategy->getTableName($rootClass, $this->platform); - $joinSql = ' JOIN ' . $tableName . ' te' - . ' ON' . implode(' AND ', $this->getOnConditionSQL($mapping)); - - return [$joinSql, $filterSql]; - } - - /** - * Generates the filter SQL for a given entity and table alias. - * - * @param ClassMetadata $targetEntity Metadata of the target entity. - * @param string $targetTableAlias The table alias of the joined/selected table. - * - * @return string The SQL query part to add to a query. - */ - protected function generateFilterConditionSQL(ClassMetadata $targetEntity, string $targetTableAlias): string - { - $filterClauses = []; - - foreach ($this->em->getFilters()->getEnabledFilters() as $filter) { - $filterExpr = $filter->addFilterConstraint($targetEntity, $targetTableAlias); - if ($filterExpr) { - $filterClauses[] = '(' . $filterExpr . ')'; - } - } - - return $filterClauses - ? '(' . implode(' AND ', $filterClauses) . ')' - : ''; - } - - /** - * Generate ON condition - * - * @return string[] - * @psalm-return list - */ - protected function getOnConditionSQL(AssociationMapping $mapping): array - { - $association = $this->em->getMetadataFactory()->getOwningSide($mapping); - $joinColumns = $mapping->isOwningSide() - ? $association->joinTable->inverseJoinColumns - : $association->joinTable->joinColumns; - - $conditions = []; - - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - foreach ($joinColumns as $joinColumn) { - $joinColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $refColumnName = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $targetClass, $this->platform); - - $conditions[] = ' t.' . $joinColumnName . ' = te.' . $refColumnName; - } - - return $conditions; - } - - protected function getDeleteSQL(PersistentCollection $collection): string - { - $columns = []; - $mapping = $this->getMapping($collection); - assert($mapping->isManyToManyOwningSide()); - $class = $this->em->getClassMetadata($collection->getOwner()::class); - $joinTable = $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform); - - foreach ($mapping->joinTable->joinColumns as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - } - - return 'DELETE FROM ' . $joinTable - . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?'; - } - - /** - * Internal note: Order of the parameters must be the same as the order of the columns in getDeleteSql. - * - * @return list - */ - protected function getDeleteSQLParameters(PersistentCollection $collection): array - { - $mapping = $this->getMapping($collection); - assert($mapping->isManyToManyOwningSide()); - $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); - - // Optimization for single column identifier - if (count($mapping->relationToSourceKeyColumns) === 1) { - return [reset($identifier)]; - } - - // Composite identifier - $sourceClass = $this->em->getClassMetadata($mapping->sourceEntity); - $params = []; - - foreach ($mapping->relationToSourceKeyColumns as $columnName => $refColumnName) { - $params[] = isset($sourceClass->fieldNames[$refColumnName]) - ? $identifier[$sourceClass->fieldNames[$refColumnName]] - : $identifier[$sourceClass->getFieldForColumn($refColumnName)]; - } - - return $params; - } - - /** - * Gets the SQL statement used for deleting a row from the collection. - * - * @return string[]|string[][] ordered tuple containing the SQL to be executed and an array - * of types for bound parameters - * @psalm-return array{0: string, 1: list} - */ - protected function getDeleteRowSQL(PersistentCollection $collection): array - { - $mapping = $this->getMapping($collection); - assert($mapping->isManyToManyOwningSide()); - $class = $this->em->getClassMetadata($mapping->sourceEntity); - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - $columns = []; - $types = []; - - foreach ($mapping->joinTable->joinColumns as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $class, $this->em); - } - - foreach ($mapping->joinTable->inverseJoinColumns as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em); - } - - return [ - 'DELETE FROM ' . $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform) - . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?', - $types, - ]; - } - - /** - * Gets the SQL parameters for the corresponding SQL statement to delete the given - * element from the given collection. - * - * Internal note: Order of the parameters must be the same as the order of the columns in getDeleteRowSql. - * - * @return mixed[] - * @psalm-return list - */ - protected function getDeleteRowSQLParameters(PersistentCollection $collection, object $element): array - { - return $this->collectJoinTableColumnParameters($collection, $element); - } - - /** - * Gets the SQL statement used for inserting a row in the collection. - * - * @return string[]|string[][] ordered tuple containing the SQL to be executed and an array - * of types for bound parameters - * @psalm-return array{0: string, 1: list} - */ - protected function getInsertRowSQL(PersistentCollection $collection): array - { - $columns = []; - $types = []; - $mapping = $this->getMapping($collection); - assert($mapping->isManyToManyOwningSide()); - $class = $this->em->getClassMetadata($mapping->sourceEntity); - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - - foreach ($mapping->joinTable->joinColumns as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $class, $this->em); - } - - foreach ($mapping->joinTable->inverseJoinColumns as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em); - } - - return [ - 'INSERT INTO ' . $this->quoteStrategy->getJoinTableName($mapping, $class, $this->platform) - . ' (' . implode(', ', $columns) . ')' - . ' VALUES' - . ' (' . implode(', ', array_fill(0, count($columns), '?')) . ')', - $types, - ]; - } - - /** - * Gets the SQL parameters for the corresponding SQL statement to insert the given - * element of the given collection into the database. - * - * Internal note: Order of the parameters must be the same as the order of the columns in getInsertRowSql. - * - * @return mixed[] - * @psalm-return list - */ - protected function getInsertRowSQLParameters(PersistentCollection $collection, object $element): array - { - return $this->collectJoinTableColumnParameters($collection, $element); - } - - /** - * Collects the parameters for inserting/deleting on the join table in the order - * of the join table columns as specified in ManyToManyMapping#joinTableColumns. - * - * @return mixed[] - * @psalm-return list - */ - private function collectJoinTableColumnParameters( - PersistentCollection $collection, - object $element, - ): array { - $params = []; - $mapping = $this->getMapping($collection); - assert($mapping->isManyToManyOwningSide()); - $isComposite = count($mapping->joinTableColumns) > 2; - - $identifier1 = $this->uow->getEntityIdentifier($collection->getOwner()); - $identifier2 = $this->uow->getEntityIdentifier($element); - - $class1 = $class2 = null; - if ($isComposite) { - $class1 = $this->em->getClassMetadata($collection->getOwner()::class); - $class2 = $collection->getTypeClass(); - } - - foreach ($mapping->joinTableColumns as $joinTableColumn) { - $isRelationToSource = isset($mapping->relationToSourceKeyColumns[$joinTableColumn]); - - if (! $isComposite) { - $params[] = $isRelationToSource ? array_pop($identifier1) : array_pop($identifier2); - - continue; - } - - if ($isRelationToSource) { - $params[] = $identifier1[$class1->getFieldForColumn($mapping->relationToSourceKeyColumns[$joinTableColumn])]; - - continue; - } - - $params[] = $identifier2[$class2->getFieldForColumn($mapping->relationToTargetKeyColumns[$joinTableColumn])]; - } - - return $params; - } - - /** - * @param bool $addFilters Whether the filter SQL should be included or not. - * - * @return mixed[] ordered vector: - * - quoted join table name - * - where clauses to be added for filtering - * - parameters to be bound for filtering - * - types of the parameters to be bound for filtering - * @psalm-return array{0: string, 1: list, 2: list, 3: list} - */ - private function getJoinTableRestrictionsWithKey( - PersistentCollection $collection, - string $key, - bool $addFilters, - ): array { - $filterMapping = $this->getMapping($collection); - $mapping = $filterMapping; - $indexBy = $mapping->indexBy(); - $id = $this->uow->getEntityIdentifier($collection->getOwner()); - $sourceClass = $this->em->getClassMetadata($mapping->sourceEntity); - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - - if (! $mapping->isOwningSide()) { - assert($mapping instanceof InverseSideMapping); - $associationSourceClass = $this->em->getClassMetadata($mapping->targetEntity); - $mapping = $associationSourceClass->associationMappings[$mapping->mappedBy]; - assert($mapping->isManyToManyOwningSide()); - $joinColumns = $mapping->joinTable->joinColumns; - $sourceRelationMode = 'relationToTargetKeyColumns'; - $targetRelationMode = 'relationToSourceKeyColumns'; - } else { - assert($mapping->isManyToManyOwningSide()); - $associationSourceClass = $this->em->getClassMetadata($mapping->sourceEntity); - $joinColumns = $mapping->joinTable->inverseJoinColumns; - $sourceRelationMode = 'relationToSourceKeyColumns'; - $targetRelationMode = 'relationToTargetKeyColumns'; - } - - $quotedJoinTable = $this->quoteStrategy->getJoinTableName($mapping, $associationSourceClass, $this->platform) . ' t'; - $whereClauses = []; - $params = []; - $types = []; - - $joinNeeded = ! in_array($indexBy, $targetClass->identifier, true); - - if ($joinNeeded) { // extra join needed if indexBy is not a @id - $joinConditions = []; - - foreach ($joinColumns as $joinTableColumn) { - $joinConditions[] = 't.' . $joinTableColumn->name . ' = tr.' . $joinTableColumn->referencedColumnName; - } - - $tableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); - $quotedJoinTable .= ' JOIN ' . $tableName . ' tr ON ' . implode(' AND ', $joinConditions); - $columnName = $targetClass->getColumnName($indexBy); - - $whereClauses[] = 'tr.' . $columnName . ' = ?'; - $params[] = $key; - $types[] = PersisterHelper::getTypeOfColumn($columnName, $targetClass, $this->em); - } - - foreach ($mapping->joinTableColumns as $joinTableColumn) { - if (isset($mapping->{$sourceRelationMode}[$joinTableColumn])) { - $column = $mapping->{$sourceRelationMode}[$joinTableColumn]; - $whereClauses[] = 't.' . $joinTableColumn . ' = ?'; - $params[] = $sourceClass->containsForeignIdentifier - ? $id[$sourceClass->getFieldForColumn($column)] - : $id[$sourceClass->fieldNames[$column]]; - $types[] = PersisterHelper::getTypeOfColumn($column, $sourceClass, $this->em); - } elseif (! $joinNeeded) { - $column = $mapping->{$targetRelationMode}[$joinTableColumn]; - - $whereClauses[] = 't.' . $joinTableColumn . ' = ?'; - $params[] = $key; - $types[] = PersisterHelper::getTypeOfColumn($column, $targetClass, $this->em); - } - } - - if ($addFilters) { - [$joinTargetEntitySQL, $filterSql] = $this->getFilterSql($filterMapping); - - if ($filterSql) { - $quotedJoinTable .= ' ' . $joinTargetEntitySQL; - $whereClauses[] = $filterSql; - } - } - - return [$quotedJoinTable, $whereClauses, $params, $types]; - } - - /** - * @param bool $addFilters Whether the filter SQL should be included or not. - * - * @return mixed[] ordered vector: - * - quoted join table name - * - where clauses to be added for filtering - * - parameters to be bound for filtering - * - types of the parameters to be bound for filtering - * @psalm-return array{0: string, 1: list, 2: list, 3: list} - */ - private function getJoinTableRestrictions( - PersistentCollection $collection, - object $element, - bool $addFilters, - ): array { - $filterMapping = $this->getMapping($collection); - $mapping = $filterMapping; - - if (! $mapping->isOwningSide()) { - $sourceClass = $this->em->getClassMetadata($mapping->targetEntity); - $targetClass = $this->em->getClassMetadata($mapping->sourceEntity); - $sourceId = $this->uow->getEntityIdentifier($element); - $targetId = $this->uow->getEntityIdentifier($collection->getOwner()); - } else { - $sourceClass = $this->em->getClassMetadata($mapping->sourceEntity); - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - $sourceId = $this->uow->getEntityIdentifier($collection->getOwner()); - $targetId = $this->uow->getEntityIdentifier($element); - } - - $mapping = $this->em->getMetadataFactory()->getOwningSide($mapping); - - $quotedJoinTable = $this->quoteStrategy->getJoinTableName($mapping, $sourceClass, $this->platform); - $whereClauses = []; - $params = []; - $types = []; - - foreach ($mapping->joinTableColumns as $joinTableColumn) { - $whereClauses[] = ($addFilters ? 't.' : '') . $joinTableColumn . ' = ?'; - - if (isset($mapping->relationToTargetKeyColumns[$joinTableColumn])) { - $targetColumn = $mapping->relationToTargetKeyColumns[$joinTableColumn]; - $params[] = $targetId[$targetClass->getFieldForColumn($targetColumn)]; - $types[] = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); - - continue; - } - - // relationToSourceKeyColumns - $targetColumn = $mapping->relationToSourceKeyColumns[$joinTableColumn]; - $params[] = $sourceId[$sourceClass->getFieldForColumn($targetColumn)]; - $types[] = PersisterHelper::getTypeOfColumn($targetColumn, $sourceClass, $this->em); - } - - if ($addFilters) { - $quotedJoinTable .= ' t'; - - [$joinTargetEntitySQL, $filterSql] = $this->getFilterSql($filterMapping); - - if ($filterSql) { - $quotedJoinTable .= ' ' . $joinTargetEntitySQL; - $whereClauses[] = $filterSql; - } - } - - return [$quotedJoinTable, $whereClauses, $params, $types]; - } - - /** - * Expands Criteria Parameters by walking the expressions and grabbing all - * parameters and types from it. - * - * @return mixed[][] - */ - private function expandCriteriaParameters(Criteria $criteria): array - { - $expression = $criteria->getWhereExpression(); - - if ($expression === null) { - return []; - } - - $valueVisitor = new SqlValueVisitor(); - - $valueVisitor->dispatch($expression); - - [, $types] = $valueVisitor->getParamsAndTypes(); - - return $types; - } - - private function getOrderingSql(Criteria $criteria, ClassMetadata $targetClass): string - { - $orderings = $criteria->orderings(); - if ($orderings) { - $orderBy = []; - foreach ($orderings as $name => $direction) { - $field = $this->quoteStrategy->getColumnName( - $name, - $targetClass, - $this->platform, - ); - $orderBy[] = $field . ' ' . $direction->value; - } - - return ' ORDER BY ' . implode(', ', $orderBy); - } - - return ''; - } - - /** @throws DBALException */ - private function getLimitSql(Criteria $criteria): string - { - $limit = $criteria->getMaxResults(); - $offset = $criteria->getFirstResult(); - - return $this->platform->modifyLimitQuery('', $limit, $offset ?? 0); - } - - private function getMapping(PersistentCollection $collection): AssociationMapping&ManyToManyAssociationMapping - { - $mapping = $collection->getMapping(); - - assert($mapping instanceof ManyToManyAssociationMapping); - - return $mapping; - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Collection/OneToManyPersister.php b/vendor/doctrine/orm/src/Persisters/Collection/OneToManyPersister.php deleted file mode 100644 index d96be8d..0000000 --- a/vendor/doctrine/orm/src/Persisters/Collection/OneToManyPersister.php +++ /dev/null @@ -1,270 +0,0 @@ -getMapping($collection); - - if (! $mapping->orphanRemoval) { - // Handling non-orphan removal should never happen, as @OneToMany - // can only be inverse side. For owning side one to many, it is - // required to have a join table, which would classify as a ManyToManyPersister. - return; - } - - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - - $targetClass->isInheritanceTypeJoined() - ? $this->deleteJoinedEntityCollection($collection) - : $this->deleteEntityCollection($collection); - } - - public function update(PersistentCollection $collection): void - { - // This can never happen. One to many can only be inverse side. - // For owning side one to many, it is required to have a join table, - // then classifying it as a ManyToManyPersister. - return; - } - - public function get(PersistentCollection $collection, mixed $index): object|null - { - $mapping = $this->getMapping($collection); - - if (! $mapping->isIndexed()) { - throw new BadMethodCallException('Selecting a collection by index is only supported on indexed collections.'); - } - - $persister = $this->uow->getEntityPersister($mapping->targetEntity); - - return $persister->load( - [ - $mapping->mappedBy => $collection->getOwner(), - $mapping->indexBy() => $index, - ], - null, - $mapping, - [], - null, - 1, - ); - } - - public function count(PersistentCollection $collection): int - { - $mapping = $this->getMapping($collection); - $persister = $this->uow->getEntityPersister($mapping->targetEntity); - - // only works with single id identifier entities. Will throw an - // exception in Entity Persisters if that is not the case for the - // 'mappedBy' field. - $criteria = new Criteria(Criteria::expr()->eq($mapping->mappedBy, $collection->getOwner())); - - return $persister->count($criteria); - } - - /** - * {@inheritDoc} - */ - public function slice(PersistentCollection $collection, int $offset, int|null $length = null): array - { - $mapping = $this->getMapping($collection); - $persister = $this->uow->getEntityPersister($mapping->targetEntity); - - return $persister->getOneToManyCollection($mapping, $collection->getOwner(), $offset, $length); - } - - public function containsKey(PersistentCollection $collection, mixed $key): bool - { - $mapping = $this->getMapping($collection); - - if (! $mapping->isIndexed()) { - throw new BadMethodCallException('Selecting a collection by index is only supported on indexed collections.'); - } - - $persister = $this->uow->getEntityPersister($mapping->targetEntity); - - // only works with single id identifier entities. Will throw an - // exception in Entity Persisters if that is not the case for the - // 'mappedBy' field. - $criteria = new Criteria(); - - $criteria->andWhere(Criteria::expr()->eq($mapping->mappedBy, $collection->getOwner())); - $criteria->andWhere(Criteria::expr()->eq($mapping->indexBy(), $key)); - - return (bool) $persister->count($criteria); - } - - public function contains(PersistentCollection $collection, object $element): bool - { - if (! $this->isValidEntityState($element)) { - return false; - } - - $mapping = $this->getMapping($collection); - $persister = $this->uow->getEntityPersister($mapping->targetEntity); - - // only works with single id identifier entities. Will throw an - // exception in Entity Persisters if that is not the case for the - // 'mappedBy' field. - $criteria = new Criteria(Criteria::expr()->eq($mapping->mappedBy, $collection->getOwner())); - - return $persister->exists($element, $criteria); - } - - /** - * {@inheritDoc} - */ - public function loadCriteria(PersistentCollection $collection, Criteria $criteria): array - { - throw new BadMethodCallException('Filtering a collection by Criteria is not supported by this CollectionPersister.'); - } - - /** - * @throws DBALException - * @throws EntityNotFoundException - * @throws MappingException - */ - private function deleteEntityCollection(PersistentCollection $collection): int - { - $mapping = $this->getMapping($collection); - $identifier = $this->uow->getEntityIdentifier($collection->getOwner()); - $sourceClass = $this->em->getClassMetadata($mapping->sourceEntity); - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - $columns = []; - $parameters = []; - $types = []; - - foreach ($this->em->getMetadataFactory()->getOwningSide($mapping)->joinColumns as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $parameters[] = $identifier[$sourceClass->getFieldForColumn($joinColumn->referencedColumnName)]; - $types[] = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $sourceClass, $this->em); - } - - $statement = 'DELETE FROM ' . $this->quoteStrategy->getTableName($targetClass, $this->platform) - . ' WHERE ' . implode(' = ? AND ', $columns) . ' = ?'; - - if ($targetClass->isInheritanceTypeSingleTable()) { - $discriminatorColumn = $targetClass->getDiscriminatorColumn(); - $discriminatorValues = $targetClass->discriminatorValue ? [$targetClass->discriminatorValue] : array_keys($targetClass->discriminatorMap); - $statement .= ' AND ' . $discriminatorColumn->name . ' IN (' . implode(', ', array_fill(0, count($discriminatorValues), '?')) . ')'; - foreach ($discriminatorValues as $discriminatorValue) { - $parameters[] = $discriminatorValue; - $types[] = $discriminatorColumn->type; - } - } - - $numAffected = $this->conn->executeStatement($statement, $parameters, $types); - - assert(is_int($numAffected)); - - return $numAffected; - } - - /** - * Delete Class Table Inheritance entities. - * A temporary table is needed to keep IDs to be deleted in both parent and child class' tables. - * - * Thanks Steve Ebersole (Hibernate) for idea on how to tackle reliably this scenario, we owe him a beer! =) - * - * @throws DBALException - */ - private function deleteJoinedEntityCollection(PersistentCollection $collection): int - { - $mapping = $this->getMapping($collection); - $sourceClass = $this->em->getClassMetadata($mapping->sourceEntity); - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - $rootClass = $this->em->getClassMetadata($targetClass->rootEntityName); - - // 1) Build temporary table DDL - $tempTable = $this->platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); - $idColumnNames = $rootClass->getIdentifierColumnNames(); - $idColumnList = implode(', ', $idColumnNames); - $columnDefinitions = []; - - foreach ($idColumnNames as $idColumnName) { - $columnDefinitions[$idColumnName] = [ - 'name' => $idColumnName, - 'notnull' => true, - 'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $this->em)), - ]; - } - - $statement = $this->platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable - . ' (' . $this->platform->getColumnDeclarationListSQL($columnDefinitions) . ')'; - - $this->conn->executeStatement($statement); - - // 2) Build insert table records into temporary table - $query = $this->em->createQuery( - ' SELECT t0.' . implode(', t0.', $rootClass->getIdentifierFieldNames()) - . ' FROM ' . $targetClass->name . ' t0 WHERE t0.' . $mapping->mappedBy . ' = :owner', - )->setParameter('owner', $collection->getOwner()); - - $sql = $query->getSQL(); - assert(is_string($sql)); - $statement = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ') ' . $sql; - $parameters = array_values($sourceClass->getIdentifierValues($collection->getOwner())); - $numDeleted = $this->conn->executeStatement($statement, $parameters); - - // 3) Delete records on each table in the hierarchy - $classNames = [...$targetClass->parentClasses, ...[$targetClass->name], ...$targetClass->subClasses]; - - foreach (array_reverse($classNames) as $className) { - $tableName = $this->quoteStrategy->getTableName($this->em->getClassMetadata($className), $this->platform); - $statement = 'DELETE FROM ' . $tableName . ' WHERE (' . $idColumnList . ')' - . ' IN (SELECT ' . $idColumnList . ' FROM ' . $tempTable . ')'; - - $this->conn->executeStatement($statement); - } - - // 4) Drop temporary table - $statement = $this->platform->getDropTemporaryTableSQL($tempTable); - - $this->conn->executeStatement($statement); - - assert(is_int($numDeleted)); - - return $numDeleted; - } - - private function getMapping(PersistentCollection $collection): OneToManyAssociationMapping - { - $mapping = $collection->getMapping(); - - assert($mapping->isOneToMany()); - - return $mapping; - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php b/vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php deleted file mode 100644 index cf8a74e..0000000 --- a/vendor/doctrine/orm/src/Persisters/Entity/AbstractEntityInheritancePersister.php +++ /dev/null @@ -1,66 +0,0 @@ -class->getDiscriminatorColumn(); - $this->columnTypes[$discColumn->name] = $discColumn->type; - $data[$this->getDiscriminatorColumnTableName()][$discColumn->name] = $this->class->discriminatorValue; - - return $data; - } - - /** - * Gets the name of the table that contains the discriminator column. - */ - abstract protected function getDiscriminatorColumnTableName(): string; - - protected function getSelectColumnSQL(string $field, ClassMetadata $class, string $alias = 'r'): string - { - $tableAlias = $alias === 'r' ? '' : $alias; - $fieldMapping = $class->fieldMappings[$field]; - $columnAlias = $this->getSQLColumnAlias($fieldMapping->columnName); - $sql = sprintf( - '%s.%s', - $this->getSQLTableAlias($class->name, $tableAlias), - $this->quoteStrategy->getColumnName($field, $class, $this->platform), - ); - - $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field, $class->name); - - $type = Type::getType($fieldMapping->type); - $sql = $type->convertToPHPValueSQL($sql, $this->platform); - - return $sql . ' AS ' . $columnAlias; - } - - protected function getSelectJoinColumnSQL(string $tableAlias, string $joinColumnName, string $quotedColumnName, string $type): string - { - $columnAlias = $this->getSQLColumnAlias($joinColumnName); - - $this->currentPersisterContext->rsm->addMetaResult('r', $columnAlias, $joinColumnName, false, $type); - - return $tableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Entity/BasicEntityPersister.php b/vendor/doctrine/orm/src/Persisters/Entity/BasicEntityPersister.php deleted file mode 100644 index abaf8f4..0000000 --- a/vendor/doctrine/orm/src/Persisters/Entity/BasicEntityPersister.php +++ /dev/null @@ -1,2110 +0,0 @@ - */ - private static array $comparisonMap = [ - Comparison::EQ => '= %s', - Comparison::NEQ => '!= %s', - Comparison::GT => '> %s', - Comparison::GTE => '>= %s', - Comparison::LT => '< %s', - Comparison::LTE => '<= %s', - Comparison::IN => 'IN (%s)', - Comparison::NIN => 'NOT IN (%s)', - Comparison::CONTAINS => 'LIKE %s', - Comparison::STARTS_WITH => 'LIKE %s', - Comparison::ENDS_WITH => 'LIKE %s', - ]; - - /** - * The underlying DBAL Connection of the used EntityManager. - */ - protected Connection $conn; - - /** - * The database platform. - */ - protected AbstractPlatform $platform; - - /** - * Queued inserts. - * - * @psalm-var array - */ - protected array $queuedInserts = []; - - /** - * The map of column names to DBAL mapping types of all prepared columns used - * when INSERTing or UPDATEing an entity. - * - * @see prepareInsertData($entity) - * @see prepareUpdateData($entity) - * - * @var mixed[] - */ - protected array $columnTypes = []; - - /** - * The map of quoted column names. - * - * @see prepareInsertData($entity) - * @see prepareUpdateData($entity) - * - * @var mixed[] - */ - protected array $quotedColumns = []; - - /** - * The INSERT SQL statement used for entities handled by this persister. - * This SQL is only generated once per request, if at all. - */ - private string|null $insertSql = null; - - /** - * The quote strategy. - */ - protected QuoteStrategy $quoteStrategy; - - /** - * The IdentifierFlattener used for manipulating identifiers - */ - protected readonly IdentifierFlattener $identifierFlattener; - - protected CachedPersisterContext $currentPersisterContext; - private readonly CachedPersisterContext $limitsHandlingContext; - private readonly CachedPersisterContext $noLimitsContext; - - /** - * Initializes a new BasicEntityPersister that uses the given EntityManager - * and persists instances of the class described by the given ClassMetadata descriptor. - * - * @param ClassMetadata $class Metadata object that describes the mapping of the mapped entity class. - */ - public function __construct( - protected EntityManagerInterface $em, - protected ClassMetadata $class, - ) { - $this->conn = $em->getConnection(); - $this->platform = $this->conn->getDatabasePlatform(); - $this->quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); - $this->identifierFlattener = new IdentifierFlattener($em->getUnitOfWork(), $em->getMetadataFactory()); - $this->noLimitsContext = $this->currentPersisterContext = new CachedPersisterContext( - $class, - new Query\ResultSetMapping(), - false, - ); - $this->limitsHandlingContext = new CachedPersisterContext( - $class, - new Query\ResultSetMapping(), - true, - ); - } - - public function getClassMetadata(): ClassMetadata - { - return $this->class; - } - - public function getResultSetMapping(): ResultSetMapping - { - return $this->currentPersisterContext->rsm; - } - - public function addInsert(object $entity): void - { - $this->queuedInserts[spl_object_id($entity)] = $entity; - } - - /** - * {@inheritDoc} - */ - public function getInserts(): array - { - return $this->queuedInserts; - } - - public function executeInserts(): void - { - if (! $this->queuedInserts) { - return; - } - - $uow = $this->em->getUnitOfWork(); - $idGenerator = $this->class->idGenerator; - $isPostInsertId = $idGenerator->isPostInsertGenerator(); - - $stmt = $this->conn->prepare($this->getInsertSQL()); - $tableName = $this->class->getTableName(); - - foreach ($this->queuedInserts as $key => $entity) { - $insertData = $this->prepareInsertData($entity); - - if (isset($insertData[$tableName])) { - $paramIndex = 1; - - foreach ($insertData[$tableName] as $column => $value) { - $stmt->bindValue($paramIndex++, $value, $this->columnTypes[$column]); - } - } - - $stmt->executeStatement(); - - if ($isPostInsertId) { - $generatedId = $idGenerator->generateId($this->em, $entity); - $id = [$this->class->identifier[0] => $generatedId]; - - $uow->assignPostInsertId($entity, $generatedId); - } else { - $id = $this->class->getIdentifierValues($entity); - } - - if ($this->class->requiresFetchAfterChange) { - $this->assignDefaultVersionAndUpsertableValues($entity, $id); - } - - // Unset this queued insert, so that the prepareUpdateData() method knows right away - // (for the next entity already) that the current entity has been written to the database - // and no extra updates need to be scheduled to refer to it. - // - // In \Doctrine\ORM\UnitOfWork::executeInserts(), the UoW already removed entities - // from its own list (\Doctrine\ORM\UnitOfWork::$entityInsertions) right after they - // were given to our addInsert() method. - unset($this->queuedInserts[$key]); - } - } - - /** - * Retrieves the default version value which was created - * by the preceding INSERT statement and assigns it back in to the - * entities version field if the given entity is versioned. - * Also retrieves values of columns marked as 'non insertable' and / or - * 'not updatable' and assigns them back to the entities corresponding fields. - * - * @param mixed[] $id - */ - protected function assignDefaultVersionAndUpsertableValues(object $entity, array $id): void - { - $values = $this->fetchVersionAndNotUpsertableValues($this->class, $id); - - foreach ($values as $field => $value) { - $value = Type::getType($this->class->fieldMappings[$field]->type)->convertToPHPValue($value, $this->platform); - - $this->class->setFieldValue($entity, $field, $value); - } - } - - /** - * Fetches the current version value of a versioned entity and / or the values of fields - * marked as 'not insertable' and / or 'not updatable'. - * - * @param mixed[] $id - */ - protected function fetchVersionAndNotUpsertableValues(ClassMetadata $versionedClass, array $id): mixed - { - $columnNames = []; - foreach ($this->class->fieldMappings as $key => $column) { - if (isset($column->generated) || ($this->class->isVersioned && $key === $versionedClass->versionField)) { - $columnNames[$key] = $this->quoteStrategy->getColumnName($key, $versionedClass, $this->platform); - } - } - - $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); - $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); - - // FIXME: Order with composite keys might not be correct - $sql = 'SELECT ' . implode(', ', $columnNames) - . ' FROM ' . $tableName - . ' WHERE ' . implode(' = ? AND ', $identifier) . ' = ?'; - - $flatId = $this->identifierFlattener->flattenIdentifier($versionedClass, $id); - - $values = $this->conn->fetchNumeric( - $sql, - array_values($flatId), - $this->extractIdentifierTypes($id, $versionedClass), - ); - - if ($values === false) { - throw new LengthException('Unexpected empty result for database query.'); - } - - $values = array_combine(array_keys($columnNames), $values); - - if (! $values) { - throw new LengthException('Unexpected number of database columns.'); - } - - return $values; - } - - /** - * @param mixed[] $id - * - * @return list - * @psalm-return list - */ - final protected function extractIdentifierTypes(array $id, ClassMetadata $versionedClass): array - { - $types = []; - - foreach ($id as $field => $value) { - $types = [...$types, ...$this->getTypes($field, $value, $versionedClass)]; - } - - return $types; - } - - public function update(object $entity): void - { - $tableName = $this->class->getTableName(); - $updateData = $this->prepareUpdateData($entity); - - if (! isset($updateData[$tableName])) { - return; - } - - $data = $updateData[$tableName]; - - if (! $data) { - return; - } - - $isVersioned = $this->class->isVersioned; - $quotedTableName = $this->quoteStrategy->getTableName($this->class, $this->platform); - - $this->updateTable($entity, $quotedTableName, $data, $isVersioned); - - if ($this->class->requiresFetchAfterChange) { - $id = $this->class->getIdentifierValues($entity); - - $this->assignDefaultVersionAndUpsertableValues($entity, $id); - } - } - - /** - * Performs an UPDATE statement for an entity on a specific table. - * The UPDATE can optionally be versioned, which requires the entity to have a version field. - * - * @param object $entity The entity object being updated. - * @param string $quotedTableName The quoted name of the table to apply the UPDATE on. - * @param mixed[] $updateData The map of columns to update (column => value). - * @param bool $versioned Whether the UPDATE should be versioned. - * - * @throws UnrecognizedField - * @throws OptimisticLockException - */ - final protected function updateTable( - object $entity, - string $quotedTableName, - array $updateData, - bool $versioned = false, - ): void { - $set = []; - $types = []; - $params = []; - - foreach ($updateData as $columnName => $value) { - $placeholder = '?'; - $column = $columnName; - - switch (true) { - case isset($this->class->fieldNames[$columnName]): - $fieldName = $this->class->fieldNames[$columnName]; - $column = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); - - if (isset($this->class->fieldMappings[$fieldName])) { - $type = Type::getType($this->columnTypes[$columnName]); - $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); - } - - break; - - case isset($this->quotedColumns[$columnName]): - $column = $this->quotedColumns[$columnName]; - - break; - } - - $params[] = $value; - $set[] = $column . ' = ' . $placeholder; - $types[] = $this->columnTypes[$columnName]; - } - - $where = []; - $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); - - foreach ($this->class->identifier as $idField) { - if (! isset($this->class->associationMappings[$idField])) { - $params[] = $identifier[$idField]; - $types[] = $this->class->fieldMappings[$idField]->type; - $where[] = $this->quoteStrategy->getColumnName($idField, $this->class, $this->platform); - - continue; - } - - assert($this->class->associationMappings[$idField]->isToOneOwningSide()); - - $params[] = $identifier[$idField]; - $where[] = $this->quoteStrategy->getJoinColumnName( - $this->class->associationMappings[$idField]->joinColumns[0], - $this->class, - $this->platform, - ); - - $targetMapping = $this->em->getClassMetadata($this->class->associationMappings[$idField]->targetEntity); - $targetType = PersisterHelper::getTypeOfField($targetMapping->identifier[0], $targetMapping, $this->em); - - if ($targetType === []) { - throw UnrecognizedField::byFullyQualifiedName($this->class->name, $targetMapping->identifier[0]); - } - - $types[] = reset($targetType); - } - - if ($versioned) { - $versionField = $this->class->versionField; - assert($versionField !== null); - $versionFieldType = $this->class->fieldMappings[$versionField]->type; - $versionColumn = $this->quoteStrategy->getColumnName($versionField, $this->class, $this->platform); - - $where[] = $versionColumn; - $types[] = $this->class->fieldMappings[$versionField]->type; - $params[] = $this->class->reflFields[$versionField]->getValue($entity); - - switch ($versionFieldType) { - case Types::SMALLINT: - case Types::INTEGER: - case Types::BIGINT: - $set[] = $versionColumn . ' = ' . $versionColumn . ' + 1'; - break; - - case Types::DATETIME_MUTABLE: - $set[] = $versionColumn . ' = CURRENT_TIMESTAMP'; - break; - } - } - - $sql = 'UPDATE ' . $quotedTableName - . ' SET ' . implode(', ', $set) - . ' WHERE ' . implode(' = ? AND ', $where) . ' = ?'; - - $result = $this->conn->executeStatement($sql, $params, $types); - - if ($versioned && ! $result) { - throw OptimisticLockException::lockFailed($entity); - } - } - - /** - * @param array $identifier - * @param string[] $types - * - * @todo Add check for platform if it supports foreign keys/cascading. - */ - protected function deleteJoinTableRecords(array $identifier, array $types): void - { - foreach ($this->class->associationMappings as $mapping) { - if (! $mapping->isManyToMany() || $mapping->isOnDeleteCascade) { - continue; - } - - // @Todo this only covers scenarios with no inheritance or of the same level. Is there something - // like self-referential relationship between different levels of an inheritance hierarchy? I hope not! - $selfReferential = ($mapping->targetEntity === $mapping->sourceEntity); - $class = $this->class; - $association = $mapping; - $otherColumns = []; - $otherKeys = []; - $keys = []; - - if (! $mapping->isOwningSide()) { - $class = $this->em->getClassMetadata($mapping->targetEntity); - } - - $association = $this->em->getMetadataFactory()->getOwningSide($association); - $joinColumns = $mapping->isOwningSide() - ? $association->joinTable->joinColumns - : $association->joinTable->inverseJoinColumns; - - if ($selfReferential) { - $otherColumns = ! $mapping->isOwningSide() - ? $association->joinTable->joinColumns - : $association->joinTable->inverseJoinColumns; - } - - foreach ($joinColumns as $joinColumn) { - $keys[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - } - - foreach ($otherColumns as $joinColumn) { - $otherKeys[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - } - - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $this->class, $this->platform); - - $this->conn->delete($joinTableName, array_combine($keys, $identifier), $types); - - if ($selfReferential) { - $this->conn->delete($joinTableName, array_combine($otherKeys, $identifier), $types); - } - } - } - - public function delete(object $entity): bool - { - $class = $this->class; - $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); - $tableName = $this->quoteStrategy->getTableName($class, $this->platform); - $idColumns = $this->quoteStrategy->getIdentifierColumnNames($class, $this->platform); - $id = array_combine($idColumns, $identifier); - $types = $this->getClassIdentifiersTypes($class); - - $this->deleteJoinTableRecords($identifier, $types); - - return (bool) $this->conn->delete($tableName, $id, $types); - } - - /** - * Prepares the changeset of an entity for database insertion (UPDATE). - * - * The changeset is obtained from the currently running UnitOfWork. - * - * During this preparation the array that is passed as the second parameter is filled with - * => pairs, grouped by table name. - * - * Example: - * - * array( - * 'foo_table' => array('column1' => 'value1', 'column2' => 'value2', ...), - * 'bar_table' => array('columnX' => 'valueX', 'columnY' => 'valueY', ...), - * ... - * ) - * - * - * @param object $entity The entity for which to prepare the data. - * @param bool $isInsert Whether the data to be prepared refers to an insert statement. - * - * @return mixed[][] The prepared data. - * @psalm-return array> - */ - protected function prepareUpdateData(object $entity, bool $isInsert = false): array - { - $versionField = null; - $result = []; - $uow = $this->em->getUnitOfWork(); - - $versioned = $this->class->isVersioned; - if ($versioned !== false) { - $versionField = $this->class->versionField; - } - - foreach ($uow->getEntityChangeSet($entity) as $field => $change) { - if (isset($versionField) && $versionField === $field) { - continue; - } - - if (isset($this->class->embeddedClasses[$field])) { - continue; - } - - $newVal = $change[1]; - - if (! isset($this->class->associationMappings[$field])) { - $fieldMapping = $this->class->fieldMappings[$field]; - $columnName = $fieldMapping->columnName; - - if (! $isInsert && isset($fieldMapping->notUpdatable)) { - continue; - } - - if ($isInsert && isset($fieldMapping->notInsertable)) { - continue; - } - - $this->columnTypes[$columnName] = $fieldMapping->type; - - $result[$this->getOwningTable($field)][$columnName] = $newVal; - - continue; - } - - $assoc = $this->class->associationMappings[$field]; - - // Only owning side of x-1 associations can have a FK column. - if (! $assoc->isToOneOwningSide()) { - continue; - } - - if ($newVal !== null) { - $oid = spl_object_id($newVal); - - // If the associated entity $newVal is not yet persisted and/or does not yet have - // an ID assigned, we must set $newVal = null. This will insert a null value and - // schedule an extra update on the UnitOfWork. - // - // This gives us extra time to a) possibly obtain a database-generated identifier - // value for $newVal, and b) insert $newVal into the database before the foreign - // key reference is being made. - // - // When looking at $this->queuedInserts and $uow->isScheduledForInsert, be aware - // of the implementation details that our own executeInserts() method will remove - // entities from the former as soon as the insert statement has been executed and - // a post-insert ID has been assigned (if necessary), and that the UnitOfWork has - // already removed entities from its own list at the time they were passed to our - // addInsert() method. - // - // Then, there is one extra exception we can make: An entity that references back to itself - // _and_ uses an application-provided ID (the "NONE" generator strategy) also does not - // need the extra update, although it is still in the list of insertions itself. - // This looks like a minor optimization at first, but is the capstone for being able to - // use non-NULLable, self-referencing associations in applications that provide IDs (like UUIDs). - if ( - (isset($this->queuedInserts[$oid]) || $uow->isScheduledForInsert($newVal)) - && ! ($newVal === $entity && $this->class->isIdentifierNatural()) - ) { - $uow->scheduleExtraUpdate($entity, [$field => [null, $newVal]]); - - $newVal = null; - } - } - - $newValId = null; - - if ($newVal !== null) { - $newValId = $uow->getEntityIdentifier($newVal); - } - - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - $owningTable = $this->getOwningTable($field); - - foreach ($assoc->joinColumns as $joinColumn) { - $sourceColumn = $joinColumn->name; - $targetColumn = $joinColumn->referencedColumnName; - $quotedColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - - $this->quotedColumns[$sourceColumn] = $quotedColumn; - $this->columnTypes[$sourceColumn] = PersisterHelper::getTypeOfColumn($targetColumn, $targetClass, $this->em); - $result[$owningTable][$sourceColumn] = $newValId - ? $newValId[$targetClass->getFieldForColumn($targetColumn)] - : null; - } - } - - return $result; - } - - /** - * Prepares the data changeset of a managed entity for database insertion (initial INSERT). - * The changeset of the entity is obtained from the currently running UnitOfWork. - * - * The default insert data preparation is the same as for updates. - * - * @see prepareUpdateData - * - * @param object $entity The entity for which to prepare the data. - * - * @return mixed[][] The prepared data for the tables to update. - * @psalm-return array - */ - protected function prepareInsertData(object $entity): array - { - return $this->prepareUpdateData($entity, true); - } - - public function getOwningTable(string $fieldName): string - { - return $this->class->getTableName(); - } - - /** - * {@inheritDoc} - */ - public function load( - array $criteria, - object|null $entity = null, - AssociationMapping|null $assoc = null, - array $hints = [], - LockMode|int|null $lockMode = null, - int|null $limit = null, - array|null $orderBy = null, - ): object|null { - $this->switchPersisterContext(null, $limit); - - $sql = $this->getSelectSQL($criteria, $assoc, $lockMode, $limit, null, $orderBy); - [$params, $types] = $this->expandParameters($criteria); - $stmt = $this->conn->executeQuery($sql, $params, $types); - - if ($entity !== null) { - $hints[Query::HINT_REFRESH] = true; - $hints[Query::HINT_REFRESH_ENTITY] = $entity; - } - - $hydrator = $this->em->newHydrator($this->currentPersisterContext->selectJoinSql ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); - $entities = $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, $hints); - - return $entities ? $entities[0] : null; - } - - /** - * {@inheritDoc} - */ - public function loadById(array $identifier, object|null $entity = null): object|null - { - return $this->load($identifier, $entity); - } - - /** - * {@inheritDoc} - */ - public function loadOneToOneEntity(AssociationMapping $assoc, object $sourceEntity, array $identifier = []): object|null - { - $foundEntity = $this->em->getUnitOfWork()->tryGetById($identifier, $assoc->targetEntity); - if ($foundEntity !== false) { - return $foundEntity; - } - - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - - if ($assoc->isOwningSide()) { - $isInverseSingleValued = $assoc->inversedBy !== null && ! $targetClass->isCollectionValuedAssociation($assoc->inversedBy); - - // Mark inverse side as fetched in the hints, otherwise the UoW would - // try to load it in a separate query (remember: to-one inverse sides can not be lazy). - $hints = []; - - if ($isInverseSingleValued) { - $hints['fetched']['r'][$assoc->inversedBy] = true; - } - - $targetEntity = $this->load($identifier, null, $assoc, $hints); - - // Complete bidirectional association, if necessary - if ($targetEntity !== null && $isInverseSingleValued) { - $targetClass->reflFields[$assoc->inversedBy]->setValue($targetEntity, $sourceEntity); - } - - return $targetEntity; - } - - assert(isset($assoc->mappedBy)); - $sourceClass = $this->em->getClassMetadata($assoc->sourceEntity); - $owningAssoc = $targetClass->getAssociationMapping($assoc->mappedBy); - assert($owningAssoc->isOneToOneOwningSide()); - - $computedIdentifier = []; - - /** @var array|null $sourceEntityData */ - $sourceEntityData = null; - - // TRICKY: since the association is specular source and target are flipped - foreach ($owningAssoc->targetToSourceKeyColumns as $sourceKeyColumn => $targetKeyColumn) { - if (! isset($sourceClass->fieldNames[$sourceKeyColumn])) { - // The likely case here is that the column is a join column - // in an association mapping. However, there is no guarantee - // at this point that a corresponding (generally identifying) - // association has been mapped in the source entity. To handle - // this case we directly reference the column-keyed data used - // to initialize the source entity before throwing an exception. - $resolvedSourceData = false; - if (! isset($sourceEntityData)) { - $sourceEntityData = $this->em->getUnitOfWork()->getOriginalEntityData($sourceEntity); - } - - if (isset($sourceEntityData[$sourceKeyColumn])) { - $dataValue = $sourceEntityData[$sourceKeyColumn]; - if ($dataValue !== null) { - $resolvedSourceData = true; - $computedIdentifier[$targetClass->getFieldForColumn($targetKeyColumn)] = - $dataValue; - } - } - - if (! $resolvedSourceData) { - throw MappingException::joinColumnMustPointToMappedField( - $sourceClass->name, - $sourceKeyColumn, - ); - } - } else { - $computedIdentifier[$targetClass->getFieldForColumn($targetKeyColumn)] = - $sourceClass->reflFields[$sourceClass->fieldNames[$sourceKeyColumn]]->getValue($sourceEntity); - } - } - - $targetEntity = $this->load($computedIdentifier, null, $assoc); - - if ($targetEntity !== null) { - $targetClass->setFieldValue($targetEntity, $assoc->mappedBy, $sourceEntity); - } - - return $targetEntity; - } - - /** - * {@inheritDoc} - */ - public function refresh(array $id, object $entity, LockMode|int|null $lockMode = null): void - { - $sql = $this->getSelectSQL($id, null, $lockMode); - [$params, $types] = $this->expandParameters($id); - $stmt = $this->conn->executeQuery($sql, $params, $types); - - $hydrator = $this->em->newHydrator(Query::HYDRATE_OBJECT); - $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, [Query::HINT_REFRESH => true]); - } - - public function count(array|Criteria $criteria = []): int - { - $sql = $this->getCountSQL($criteria); - - [$params, $types] = $criteria instanceof Criteria - ? $this->expandCriteriaParameters($criteria) - : $this->expandParameters($criteria); - - return (int) $this->conn->executeQuery($sql, $params, $types)->fetchOne(); - } - - /** - * {@inheritDoc} - */ - public function loadCriteria(Criteria $criteria): array - { - $orderBy = array_map( - static fn (Order $order): string => $order->value, - $criteria->orderings(), - ); - $limit = $criteria->getMaxResults(); - $offset = $criteria->getFirstResult(); - $query = $this->getSelectSQL($criteria, null, null, $limit, $offset, $orderBy); - - [$params, $types] = $this->expandCriteriaParameters($criteria); - - $stmt = $this->conn->executeQuery($query, $params, $types); - $hydrator = $this->em->newHydrator($this->currentPersisterContext->selectJoinSql ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); - - return $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, [UnitOfWork::HINT_DEFEREAGERLOAD => true]); - } - - /** - * {@inheritDoc} - */ - public function expandCriteriaParameters(Criteria $criteria): array - { - $expression = $criteria->getWhereExpression(); - $sqlParams = []; - $sqlTypes = []; - - if ($expression === null) { - return [$sqlParams, $sqlTypes]; - } - - $valueVisitor = new SqlValueVisitor(); - - $valueVisitor->dispatch($expression); - - [, $types] = $valueVisitor->getParamsAndTypes(); - - foreach ($types as $type) { - [$field, $value, $operator] = $type; - - if ($value === null && ($operator === Comparison::EQ || $operator === Comparison::NEQ)) { - continue; - } - - $sqlParams = [...$sqlParams, ...$this->getValues($value)]; - $sqlTypes = [...$sqlTypes, ...$this->getTypes($field, $value, $this->class)]; - } - - return [$sqlParams, $sqlTypes]; - } - - /** - * {@inheritDoc} - */ - public function loadAll( - array $criteria = [], - array|null $orderBy = null, - int|null $limit = null, - int|null $offset = null, - ): array { - $this->switchPersisterContext($offset, $limit); - - $sql = $this->getSelectSQL($criteria, null, null, $limit, $offset, $orderBy); - [$params, $types] = $this->expandParameters($criteria); - $stmt = $this->conn->executeQuery($sql, $params, $types); - - $hydrator = $this->em->newHydrator($this->currentPersisterContext->selectJoinSql ? Query::HYDRATE_OBJECT : Query::HYDRATE_SIMPLEOBJECT); - - return $hydrator->hydrateAll($stmt, $this->currentPersisterContext->rsm, [UnitOfWork::HINT_DEFEREAGERLOAD => true]); - } - - /** - * {@inheritDoc} - */ - public function getManyToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - int|null $offset = null, - int|null $limit = null, - ): array { - assert($assoc->isManyToMany()); - $this->switchPersisterContext($offset, $limit); - - $stmt = $this->getManyToManyStatement($assoc, $sourceEntity, $offset, $limit); - - return $this->loadArrayFromResult($assoc, $stmt); - } - - /** - * Loads an array of entities from a given DBAL statement. - * - * @return mixed[] - */ - private function loadArrayFromResult(AssociationMapping $assoc, Result $stmt): array - { - $rsm = $this->currentPersisterContext->rsm; - $hints = [UnitOfWork::HINT_DEFEREAGERLOAD => true]; - - if ($assoc->isIndexed()) { - $rsm = clone $this->currentPersisterContext->rsm; // this is necessary because the "default rsm" should be changed. - $rsm->addIndexBy('r', $assoc->indexBy()); - } - - return $this->em->newHydrator(Query::HYDRATE_OBJECT)->hydrateAll($stmt, $rsm, $hints); - } - - /** - * Hydrates a collection from a given DBAL statement. - * - * @return mixed[] - */ - private function loadCollectionFromStatement( - AssociationMapping $assoc, - Result $stmt, - PersistentCollection $coll, - ): array { - $rsm = $this->currentPersisterContext->rsm; - $hints = [ - UnitOfWork::HINT_DEFEREAGERLOAD => true, - 'collection' => $coll, - ]; - - if ($assoc->isIndexed()) { - $rsm = clone $this->currentPersisterContext->rsm; // this is necessary because the "default rsm" should be changed. - $rsm->addIndexBy('r', $assoc->indexBy()); - } - - return $this->em->newHydrator(Query::HYDRATE_OBJECT)->hydrateAll($stmt, $rsm, $hints); - } - - /** - * {@inheritDoc} - */ - public function loadManyToManyCollection(AssociationMapping $assoc, object $sourceEntity, PersistentCollection $collection): array - { - assert($assoc->isManyToMany()); - $stmt = $this->getManyToManyStatement($assoc, $sourceEntity); - - return $this->loadCollectionFromStatement($assoc, $stmt, $collection); - } - - /** @throws MappingException */ - private function getManyToManyStatement( - AssociationMapping&ManyToManyAssociationMapping $assoc, - object $sourceEntity, - int|null $offset = null, - int|null $limit = null, - ): Result { - $this->switchPersisterContext($offset, $limit); - - $sourceClass = $this->em->getClassMetadata($assoc->sourceEntity); - $class = $sourceClass; - $association = $assoc; - $criteria = []; - $parameters = []; - - if (! $assoc->isOwningSide()) { - $class = $this->em->getClassMetadata($assoc->targetEntity); - } - - $association = $this->em->getMetadataFactory()->getOwningSide($assoc); - $joinColumns = $assoc->isOwningSide() - ? $association->joinTable->joinColumns - : $association->joinTable->inverseJoinColumns; - - $quotedJoinTable = $this->quoteStrategy->getJoinTableName($association, $class, $this->platform); - - foreach ($joinColumns as $joinColumn) { - $sourceKeyColumn = $joinColumn->referencedColumnName; - $quotedKeyColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - - switch (true) { - case $sourceClass->containsForeignIdentifier: - $field = $sourceClass->getFieldForColumn($sourceKeyColumn); - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - - if (isset($sourceClass->associationMappings[$field])) { - $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); - $value = $value[$this->em->getClassMetadata($sourceClass->associationMappings[$field]->targetEntity)->identifier[0]]; - } - - break; - - case isset($sourceClass->fieldNames[$sourceKeyColumn]): - $field = $sourceClass->fieldNames[$sourceKeyColumn]; - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - - break; - - default: - throw MappingException::joinColumnMustPointToMappedField( - $sourceClass->name, - $sourceKeyColumn, - ); - } - - $criteria[$quotedJoinTable . '.' . $quotedKeyColumn] = $value; - $parameters[] = [ - 'value' => $value, - 'field' => $field, - 'class' => $sourceClass, - ]; - } - - $sql = $this->getSelectSQL($criteria, $assoc, null, $limit, $offset); - [$params, $types] = $this->expandToManyParameters($parameters); - - return $this->conn->executeQuery($sql, $params, $types); - } - - public function getSelectSQL( - array|Criteria $criteria, - AssociationMapping|null $assoc = null, - LockMode|int|null $lockMode = null, - int|null $limit = null, - int|null $offset = null, - array|null $orderBy = null, - ): string { - $this->switchPersisterContext($offset, $limit); - - $joinSql = ''; - $orderBySql = ''; - - if ($assoc !== null && $assoc->isManyToMany()) { - $joinSql = $this->getSelectManyToManyJoinSQL($assoc); - } - - if ($assoc !== null && $assoc->isOrdered()) { - $orderBy = $assoc->orderBy(); - } - - if ($orderBy) { - $orderBySql = $this->getOrderBySQL($orderBy, $this->getSQLTableAlias($this->class->name)); - } - - $conditionSql = $criteria instanceof Criteria - ? $this->getSelectConditionCriteriaSQL($criteria) - : $this->getSelectConditionSQL($criteria, $assoc); - - $lockSql = match ($lockMode) { - LockMode::PESSIMISTIC_READ => ' ' . $this->getReadLockSQL($this->platform), - LockMode::PESSIMISTIC_WRITE => ' ' . $this->getWriteLockSQL($this->platform), - default => '', - }; - - $columnList = $this->getSelectColumnsSQL(); - $tableAlias = $this->getSQLTableAlias($this->class->name); - $filterSql = $this->generateFilterConditionSQL($this->class, $tableAlias); - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); - - if ($filterSql !== '') { - $conditionSql = $conditionSql - ? $conditionSql . ' AND ' . $filterSql - : $filterSql; - } - - $select = 'SELECT ' . $columnList; - $from = ' FROM ' . $tableName . ' ' . $tableAlias; - $join = $this->currentPersisterContext->selectJoinSql . $joinSql; - $where = ($conditionSql ? ' WHERE ' . $conditionSql : ''); - $lock = $this->platform->appendLockHint($from, $lockMode ?? LockMode::NONE); - $query = $select - . $lock - . $join - . $where - . $orderBySql; - - return $this->platform->modifyLimitQuery($query, $limit, $offset ?? 0) . $lockSql; - } - - public function getCountSQL(array|Criteria $criteria = []): string - { - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); - $tableAlias = $this->getSQLTableAlias($this->class->name); - - $conditionSql = $criteria instanceof Criteria - ? $this->getSelectConditionCriteriaSQL($criteria) - : $this->getSelectConditionSQL($criteria); - - $filterSql = $this->generateFilterConditionSQL($this->class, $tableAlias); - - if ($filterSql !== '') { - $conditionSql = $conditionSql - ? $conditionSql . ' AND ' . $filterSql - : $filterSql; - } - - return 'SELECT COUNT(*) ' - . 'FROM ' . $tableName . ' ' . $tableAlias - . (empty($conditionSql) ? '' : ' WHERE ' . $conditionSql); - } - - /** - * Gets the ORDER BY SQL snippet for ordered collections. - * - * @psalm-param array $orderBy - * - * @throws InvalidOrientation - * @throws InvalidFindByCall - * @throws UnrecognizedField - */ - final protected function getOrderBySQL(array $orderBy, string $baseTableAlias): string - { - $orderByList = []; - - foreach ($orderBy as $fieldName => $orientation) { - $orientation = strtoupper(trim($orientation)); - - if ($orientation !== 'ASC' && $orientation !== 'DESC') { - throw InvalidOrientation::fromClassNameAndField($this->class->name, $fieldName); - } - - if (isset($this->class->fieldMappings[$fieldName])) { - $tableAlias = isset($this->class->fieldMappings[$fieldName]->inherited) - ? $this->getSQLTableAlias($this->class->fieldMappings[$fieldName]->inherited) - : $baseTableAlias; - - $columnName = $this->quoteStrategy->getColumnName($fieldName, $this->class, $this->platform); - $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; - - continue; - } - - if (isset($this->class->associationMappings[$fieldName])) { - $association = $this->class->associationMappings[$fieldName]; - if (! $association->isOwningSide()) { - throw InvalidFindByCall::fromInverseSideUsage($this->class->name, $fieldName); - } - - assert($association->isToOneOwningSide()); - - $tableAlias = isset($association->inherited) - ? $this->getSQLTableAlias($association->inherited) - : $baseTableAlias; - - foreach ($association->joinColumns as $joinColumn) { - $columnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $orderByList[] = $tableAlias . '.' . $columnName . ' ' . $orientation; - } - - continue; - } - - throw UnrecognizedField::byFullyQualifiedName($this->class->name, $fieldName); - } - - return ' ORDER BY ' . implode(', ', $orderByList); - } - - /** - * Gets the SQL fragment with the list of columns to select when querying for - * an entity in this persister. - * - * Subclasses should override this method to alter or change the select column - * list SQL fragment. Note that in the implementation of BasicEntityPersister - * the resulting SQL fragment is generated only once and cached in {@link selectColumnListSql}. - * Subclasses may or may not do the same. - */ - protected function getSelectColumnsSQL(): string - { - if ($this->currentPersisterContext->selectColumnListSql !== null) { - return $this->currentPersisterContext->selectColumnListSql; - } - - $columnList = []; - $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); // r for root - - // Add regular columns to select list - foreach ($this->class->fieldNames as $field) { - $columnList[] = $this->getSelectColumnSQL($field, $this->class); - } - - $this->currentPersisterContext->selectJoinSql = ''; - $eagerAliasCounter = 0; - - foreach ($this->class->associationMappings as $assocField => $assoc) { - $assocColumnSQL = $this->getSelectColumnAssociationSQL($assocField, $assoc, $this->class); - - if ($assocColumnSQL) { - $columnList[] = $assocColumnSQL; - } - - $isAssocToOneInverseSide = $assoc->isToOne() && ! $assoc->isOwningSide(); - $isAssocFromOneEager = $assoc->isToOne() && $assoc->fetch === ClassMetadata::FETCH_EAGER; - - if (! ($isAssocFromOneEager || $isAssocToOneInverseSide)) { - continue; - } - - if ($assoc->isToMany() && $this->currentPersisterContext->handlesLimits) { - continue; - } - - $eagerEntity = $this->em->getClassMetadata($assoc->targetEntity); - - if ($eagerEntity->inheritanceType !== ClassMetadata::INHERITANCE_TYPE_NONE) { - continue; // now this is why you shouldn't use inheritance - } - - $assocAlias = 'e' . ($eagerAliasCounter++); - $this->currentPersisterContext->rsm->addJoinedEntityResult($assoc->targetEntity, $assocAlias, 'r', $assocField); - - foreach ($eagerEntity->fieldNames as $field) { - $columnList[] = $this->getSelectColumnSQL($field, $eagerEntity, $assocAlias); - } - - foreach ($eagerEntity->associationMappings as $eagerAssocField => $eagerAssoc) { - $eagerAssocColumnSQL = $this->getSelectColumnAssociationSQL( - $eagerAssocField, - $eagerAssoc, - $eagerEntity, - $assocAlias, - ); - - if ($eagerAssocColumnSQL) { - $columnList[] = $eagerAssocColumnSQL; - } - } - - $association = $assoc; - $joinCondition = []; - - if ($assoc->isIndexed()) { - assert($assoc->isToMany()); - $this->currentPersisterContext->rsm->addIndexBy($assocAlias, $assoc->indexBy()); - } - - if (! $assoc->isOwningSide()) { - $eagerEntity = $this->em->getClassMetadata($assoc->targetEntity); - $association = $eagerEntity->getAssociationMapping($assoc->mappedBy); - } - - assert($association->isToOneOwningSide()); - - $joinTableAlias = $this->getSQLTableAlias($eagerEntity->name, $assocAlias); - $joinTableName = $this->quoteStrategy->getTableName($eagerEntity, $this->platform); - - if ($assoc->isOwningSide()) { - $tableAlias = $this->getSQLTableAlias($association->targetEntity, $assocAlias); - $this->currentPersisterContext->selectJoinSql .= ' ' . $this->getJoinSQLForJoinColumns($association->joinColumns); - - foreach ($association->joinColumns as $joinColumn) { - $sourceCol = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $targetCol = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform); - $joinCondition[] = $this->getSQLTableAlias($association->sourceEntity) - . '.' . $sourceCol . ' = ' . $tableAlias . '.' . $targetCol; - } - - // Add filter SQL - $filterSql = $this->generateFilterConditionSQL($eagerEntity, $tableAlias); - if ($filterSql) { - $joinCondition[] = $filterSql; - } - } else { - $this->currentPersisterContext->selectJoinSql .= ' LEFT JOIN'; - - foreach ($association->joinColumns as $joinColumn) { - $sourceCol = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $targetCol = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform); - - $joinCondition[] = $this->getSQLTableAlias($association->sourceEntity, $assocAlias) . '.' . $sourceCol . ' = ' - . $this->getSQLTableAlias($association->targetEntity) . '.' . $targetCol; - } - } - - $this->currentPersisterContext->selectJoinSql .= ' ' . $joinTableName . ' ' . $joinTableAlias . ' ON '; - $this->currentPersisterContext->selectJoinSql .= implode(' AND ', $joinCondition); - } - - $this->currentPersisterContext->selectColumnListSql = implode(', ', $columnList); - - return $this->currentPersisterContext->selectColumnListSql; - } - - /** Gets the SQL join fragment used when selecting entities from an association. */ - protected function getSelectColumnAssociationSQL( - string $field, - AssociationMapping $assoc, - ClassMetadata $class, - string $alias = 'r', - ): string { - if (! $assoc->isToOneOwningSide()) { - return ''; - } - - $columnList = []; - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - $isIdentifier = isset($assoc->id) && $assoc->id === true; - $sqlTableAlias = $this->getSQLTableAlias($class->name, ($alias === 'r' ? '' : $alias)); - - foreach ($assoc->joinColumns as $joinColumn) { - $quotedColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $resultColumnName = $this->getSQLColumnAlias($joinColumn->name); - $type = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em); - - $this->currentPersisterContext->rsm->addMetaResult($alias, $resultColumnName, $joinColumn->name, $isIdentifier, $type); - - $columnList[] = sprintf('%s.%s AS %s', $sqlTableAlias, $quotedColumn, $resultColumnName); - } - - return implode(', ', $columnList); - } - - /** - * Gets the SQL join fragment used when selecting entities from a - * many-to-many association. - */ - protected function getSelectManyToManyJoinSQL(AssociationMapping&ManyToManyAssociationMapping $manyToMany): string - { - $conditions = []; - $association = $manyToMany; - $sourceTableAlias = $this->getSQLTableAlias($this->class->name); - - $association = $this->em->getMetadataFactory()->getOwningSide($manyToMany); - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $this->class, $this->platform); - $joinColumns = $manyToMany->isOwningSide() - ? $association->joinTable->inverseJoinColumns - : $association->joinTable->joinColumns; - - foreach ($joinColumns as $joinColumn) { - $quotedSourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - $quotedTargetColumn = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $this->class, $this->platform); - $conditions[] = $sourceTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableName . '.' . $quotedSourceColumn; - } - - return ' INNER JOIN ' . $joinTableName . ' ON ' . implode(' AND ', $conditions); - } - - public function getInsertSQL(): string - { - if ($this->insertSql !== null) { - return $this->insertSql; - } - - $columns = $this->getInsertColumnList(); - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); - - if (empty($columns)) { - $identityColumn = $this->quoteStrategy->getColumnName($this->class->identifier[0], $this->class, $this->platform); - $this->insertSql = $this->platform->getEmptyIdentityInsertSQL($tableName, $identityColumn); - - return $this->insertSql; - } - - $values = []; - $columns = array_unique($columns); - - foreach ($columns as $column) { - $placeholder = '?'; - - if ( - isset($this->class->fieldNames[$column]) - && isset($this->columnTypes[$this->class->fieldNames[$column]]) - && isset($this->class->fieldMappings[$this->class->fieldNames[$column]]) - ) { - $type = Type::getType($this->columnTypes[$this->class->fieldNames[$column]]); - $placeholder = $type->convertToDatabaseValueSQL('?', $this->platform); - } - - $values[] = $placeholder; - } - - $columns = implode(', ', $columns); - $values = implode(', ', $values); - - $this->insertSql = sprintf('INSERT INTO %s (%s) VALUES (%s)', $tableName, $columns, $values); - - return $this->insertSql; - } - - /** - * Gets the list of columns to put in the INSERT SQL statement. - * - * Subclasses should override this method to alter or change the list of - * columns placed in the INSERT statements used by the persister. - * - * @psalm-return list - */ - protected function getInsertColumnList(): array - { - $columns = []; - - foreach ($this->class->reflFields as $name => $field) { - if ($this->class->isVersioned && $this->class->versionField === $name) { - continue; - } - - if (isset($this->class->embeddedClasses[$name])) { - continue; - } - - if (isset($this->class->associationMappings[$name])) { - $assoc = $this->class->associationMappings[$name]; - - if ($assoc->isToOneOwningSide()) { - foreach ($assoc->joinColumns as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - } - } - - continue; - } - - if (! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name) { - if (isset($this->class->fieldMappings[$name]->notInsertable)) { - continue; - } - - $columns[] = $this->quoteStrategy->getColumnName($name, $this->class, $this->platform); - $this->columnTypes[$name] = $this->class->fieldMappings[$name]->type; - } - } - - return $columns; - } - - /** - * Gets the SQL snippet of a qualified column name for the given field name. - * - * @param ClassMetadata $class The class that declares this field. The table this class is - * mapped to must own the column for the given field. - */ - protected function getSelectColumnSQL(string $field, ClassMetadata $class, string $alias = 'r'): string - { - $root = $alias === 'r' ? '' : $alias; - $tableAlias = $this->getSQLTableAlias($class->name, $root); - $fieldMapping = $class->fieldMappings[$field]; - $sql = sprintf('%s.%s', $tableAlias, $this->quoteStrategy->getColumnName($field, $class, $this->platform)); - $columnAlias = $this->getSQLColumnAlias($fieldMapping->columnName); - - $this->currentPersisterContext->rsm->addFieldResult($alias, $columnAlias, $field); - if (! empty($fieldMapping->enumType)) { - $this->currentPersisterContext->rsm->addEnumResult($columnAlias, $fieldMapping->enumType); - } - - $type = Type::getType($fieldMapping->type); - $sql = $type->convertToPHPValueSQL($sql, $this->platform); - - return $sql . ' AS ' . $columnAlias; - } - - /** - * Gets the SQL table alias for the given class name. - * - * @todo Reconsider. Binding table aliases to class names is not such a good idea. - */ - protected function getSQLTableAlias(string $className, string $assocName = ''): string - { - if ($assocName) { - $className .= '#' . $assocName; - } - - if (isset($this->currentPersisterContext->sqlTableAliases[$className])) { - return $this->currentPersisterContext->sqlTableAliases[$className]; - } - - $tableAlias = 't' . $this->currentPersisterContext->sqlAliasCounter++; - - $this->currentPersisterContext->sqlTableAliases[$className] = $tableAlias; - - return $tableAlias; - } - - /** - * {@inheritDoc} - */ - public function lock(array $criteria, LockMode|int $lockMode): void - { - $conditionSql = $this->getSelectConditionSQL($criteria); - - $lockSql = match ($lockMode) { - LockMode::PESSIMISTIC_READ => $this->getReadLockSQL($this->platform), - LockMode::PESSIMISTIC_WRITE => $this->getWriteLockSQL($this->platform), - default => '', - }; - - $lock = $this->getLockTablesSql($lockMode); - $where = ($conditionSql ? ' WHERE ' . $conditionSql : '') . ' '; - $sql = 'SELECT 1 ' - . $lock - . $where - . $lockSql; - - [$params, $types] = $this->expandParameters($criteria); - - $this->conn->executeQuery($sql, $params, $types); - } - - /** - * Gets the FROM and optionally JOIN conditions to lock the entity managed by this persister. - * - * @psalm-param LockMode::* $lockMode - */ - protected function getLockTablesSql(LockMode|int $lockMode): string - { - return $this->platform->appendLockHint( - 'FROM ' - . $this->quoteStrategy->getTableName($this->class, $this->platform) . ' ' - . $this->getSQLTableAlias($this->class->name), - $lockMode, - ); - } - - /** - * Gets the Select Where Condition from a Criteria object. - */ - protected function getSelectConditionCriteriaSQL(Criteria $criteria): string - { - $expression = $criteria->getWhereExpression(); - - if ($expression === null) { - return ''; - } - - $visitor = new SqlExpressionVisitor($this, $this->class); - - return $visitor->dispatch($expression); - } - - public function getSelectConditionStatementSQL( - string $field, - mixed $value, - AssociationMapping|null $assoc = null, - string|null $comparison = null, - ): string { - $selectedColumns = []; - $columns = $this->getSelectConditionStatementColumnSQL($field, $assoc); - - if (count($columns) > 1 && $comparison === Comparison::IN) { - /* - * @todo try to support multi-column IN expressions. - * Example: (col1, col2) IN (('val1A', 'val2A'), ('val1B', 'val2B')) - */ - throw CantUseInOperatorOnCompositeKeys::create(); - } - - foreach ($columns as $column) { - $placeholder = '?'; - - if (isset($this->class->fieldMappings[$field])) { - $type = Type::getType($this->class->fieldMappings[$field]->type); - $placeholder = $type->convertToDatabaseValueSQL($placeholder, $this->platform); - } - - if ($comparison !== null) { - // special case null value handling - if (($comparison === Comparison::EQ || $comparison === Comparison::IS) && $value === null) { - $selectedColumns[] = $column . ' IS NULL'; - - continue; - } - - if ($comparison === Comparison::NEQ && $value === null) { - $selectedColumns[] = $column . ' IS NOT NULL'; - - continue; - } - - $selectedColumns[] = $column . ' ' . sprintf(self::$comparisonMap[$comparison], $placeholder); - - continue; - } - - if (is_array($value)) { - $in = sprintf('%s IN (%s)', $column, $placeholder); - - if (array_search(null, $value, true) !== false) { - $selectedColumns[] = sprintf('(%s OR %s IS NULL)', $in, $column); - - continue; - } - - $selectedColumns[] = $in; - - continue; - } - - if ($value === null) { - $selectedColumns[] = sprintf('%s IS NULL', $column); - - continue; - } - - $selectedColumns[] = sprintf('%s = %s', $column, $placeholder); - } - - return implode(' AND ', $selectedColumns); - } - - /** - * Builds the left-hand-side of a where condition statement. - * - * @return string[] - * @psalm-return list - * - * @throws InvalidFindByCall - * @throws UnrecognizedField - */ - private function getSelectConditionStatementColumnSQL( - string $field, - AssociationMapping|null $assoc = null, - ): array { - if (isset($this->class->fieldMappings[$field])) { - $className = $this->class->fieldMappings[$field]->inherited ?? $this->class->name; - - return [$this->getSQLTableAlias($className) . '.' . $this->quoteStrategy->getColumnName($field, $this->class, $this->platform)]; - } - - if (isset($this->class->associationMappings[$field])) { - $association = $this->class->associationMappings[$field]; - // Many-To-Many requires join table check for joinColumn - $columns = []; - $class = $this->class; - - if ($association->isManyToMany()) { - assert($assoc !== null); - if (! $association->isOwningSide()) { - $association = $assoc; - } - - assert($association->isManyToManyOwningSide()); - - $joinTableName = $this->quoteStrategy->getJoinTableName($association, $class, $this->platform); - $joinColumns = $assoc->isOwningSide() - ? $association->joinTable->joinColumns - : $association->joinTable->inverseJoinColumns; - - foreach ($joinColumns as $joinColumn) { - $columns[] = $joinTableName . '.' . $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - } - } else { - if (! $association->isOwningSide()) { - throw InvalidFindByCall::fromInverseSideUsage( - $this->class->name, - $field, - ); - } - - assert($association->isToOneOwningSide()); - - $className = $association->inherited ?? $this->class->name; - - foreach ($association->joinColumns as $joinColumn) { - $columns[] = $this->getSQLTableAlias($className) . '.' . $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform); - } - } - - return $columns; - } - - if ($assoc !== null && ! str_contains($field, ' ') && ! str_contains($field, '(')) { - // very careless developers could potentially open up this normally hidden api for userland attacks, - // therefore checking for spaces and function calls which are not allowed. - - // found a join column condition, not really a "field" - return [$field]; - } - - throw UnrecognizedField::byFullyQualifiedName($this->class->name, $field); - } - - /** - * Gets the conditional SQL fragment used in the WHERE clause when selecting - * entities in this persister. - * - * Subclasses are supposed to override this method if they intend to change - * or alter the criteria by which entities are selected. - * - * @psalm-param array $criteria - */ - protected function getSelectConditionSQL(array $criteria, AssociationMapping|null $assoc = null): string - { - $conditions = []; - - foreach ($criteria as $field => $value) { - $conditions[] = $this->getSelectConditionStatementSQL($field, $value, $assoc); - } - - return implode(' AND ', $conditions); - } - - /** - * {@inheritDoc} - */ - public function getOneToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - int|null $offset = null, - int|null $limit = null, - ): array { - assert($assoc instanceof OneToManyAssociationMapping); - $this->switchPersisterContext($offset, $limit); - - $stmt = $this->getOneToManyStatement($assoc, $sourceEntity, $offset, $limit); - - return $this->loadArrayFromResult($assoc, $stmt); - } - - public function loadOneToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - PersistentCollection $collection, - ): mixed { - assert($assoc instanceof OneToManyAssociationMapping); - $stmt = $this->getOneToManyStatement($assoc, $sourceEntity); - - return $this->loadCollectionFromStatement($assoc, $stmt, $collection); - } - - /** Builds criteria and execute SQL statement to fetch the one to many entities from. */ - private function getOneToManyStatement( - OneToManyAssociationMapping $assoc, - object $sourceEntity, - int|null $offset = null, - int|null $limit = null, - ): Result { - $this->switchPersisterContext($offset, $limit); - - $criteria = []; - $parameters = []; - $owningAssoc = $this->class->associationMappings[$assoc->mappedBy]; - $sourceClass = $this->em->getClassMetadata($assoc->sourceEntity); - $tableAlias = $this->getSQLTableAlias($owningAssoc->inherited ?? $this->class->name); - assert($owningAssoc->isManyToOne()); - - foreach ($owningAssoc->targetToSourceKeyColumns as $sourceKeyColumn => $targetKeyColumn) { - if ($sourceClass->containsForeignIdentifier) { - $field = $sourceClass->getFieldForColumn($sourceKeyColumn); - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - - if (isset($sourceClass->associationMappings[$field])) { - $value = $this->em->getUnitOfWork()->getEntityIdentifier($value); - $value = $value[$this->em->getClassMetadata($sourceClass->associationMappings[$field]->targetEntity)->identifier[0]]; - } - - $criteria[$tableAlias . '.' . $targetKeyColumn] = $value; - $parameters[] = [ - 'value' => $value, - 'field' => $field, - 'class' => $sourceClass, - ]; - - continue; - } - - $field = $sourceClass->fieldNames[$sourceKeyColumn]; - $value = $sourceClass->reflFields[$field]->getValue($sourceEntity); - - $criteria[$tableAlias . '.' . $targetKeyColumn] = $value; - $parameters[] = [ - 'value' => $value, - 'field' => $field, - 'class' => $sourceClass, - ]; - } - - $sql = $this->getSelectSQL($criteria, $assoc, null, $limit, $offset); - [$params, $types] = $this->expandToManyParameters($parameters); - - return $this->conn->executeQuery($sql, $params, $types); - } - - /** - * {@inheritDoc} - */ - public function expandParameters(array $criteria): array - { - $params = []; - $types = []; - - foreach ($criteria as $field => $value) { - if ($value === null) { - continue; // skip null values. - } - - $types = [...$types, ...$this->getTypes($field, $value, $this->class)]; - $params = array_merge($params, $this->getValues($value)); - } - - return [$params, $types]; - } - - /** - * Expands the parameters from the given criteria and use the correct binding types if found, - * specialized for OneToMany or ManyToMany associations. - * - * @param mixed[][] $criteria an array of arrays containing following: - * - field to which each criterion will be bound - * - value to be bound - * - class to which the field belongs to - * - * @return mixed[][] - * @psalm-return array{0: array, 1: list} - */ - private function expandToManyParameters(array $criteria): array - { - $params = []; - $types = []; - - foreach ($criteria as $criterion) { - if ($criterion['value'] === null) { - continue; // skip null values. - } - - $types = [...$types, ...$this->getTypes($criterion['field'], $criterion['value'], $criterion['class'])]; - $params = array_merge($params, $this->getValues($criterion['value'])); - } - - return [$params, $types]; - } - - /** - * Infers field types to be used by parameter type casting. - * - * @return list - * @psalm-return list - * - * @throws QueryException - */ - private function getTypes(string $field, mixed $value, ClassMetadata $class): array - { - $types = []; - - switch (true) { - case isset($class->fieldMappings[$field]): - $types = array_merge($types, [$class->fieldMappings[$field]->type]); - break; - - case isset($class->associationMappings[$field]): - $assoc = $this->em->getMetadataFactory()->getOwningSide($class->associationMappings[$field]); - $class = $this->em->getClassMetadata($assoc->targetEntity); - - if ($assoc->isManyToManyOwningSide()) { - $columns = $assoc->relationToTargetKeyColumns; - } else { - assert($assoc->isToOneOwningSide()); - $columns = $assoc->sourceToTargetKeyColumns; - } - - foreach ($columns as $column) { - $types[] = PersisterHelper::getTypeOfColumn($column, $class, $this->em); - } - - break; - - default: - $types[] = ParameterType::STRING; - break; - } - - if (is_array($value)) { - return array_map($this->getArrayBindingType(...), $types); - } - - return $types; - } - - /** @psalm-return ArrayParameterType::* */ - private function getArrayBindingType(ParameterType|int|string $type): ArrayParameterType|int - { - if (! $type instanceof ParameterType) { - $type = Type::getType((string) $type)->getBindingType(); - } - - return match ($type) { - ParameterType::STRING => ArrayParameterType::STRING, - ParameterType::INTEGER => ArrayParameterType::INTEGER, - ParameterType::ASCII => ArrayParameterType::ASCII, - }; - } - - /** - * Retrieves the parameters that identifies a value. - * - * @return mixed[] - */ - private function getValues(mixed $value): array - { - if (is_array($value)) { - $newValue = []; - - foreach ($value as $itemValue) { - $newValue = array_merge($newValue, $this->getValues($itemValue)); - } - - return [$newValue]; - } - - return $this->getIndividualValue($value); - } - - /** - * Retrieves an individual parameter value. - * - * @psalm-return list - */ - private function getIndividualValue(mixed $value): array - { - if (! is_object($value)) { - return [$value]; - } - - if ($value instanceof BackedEnum) { - return [$value->value]; - } - - $valueClass = DefaultProxyClassNameResolver::getClass($value); - - if ($this->em->getMetadataFactory()->isTransient($valueClass)) { - return [$value]; - } - - $class = $this->em->getClassMetadata($valueClass); - - if ($class->isIdentifierComposite) { - $newValue = []; - - foreach ($class->getIdentifierValues($value) as $innerValue) { - $newValue = array_merge($newValue, $this->getValues($innerValue)); - } - - return $newValue; - } - - return [$this->em->getUnitOfWork()->getSingleIdentifierValue($value)]; - } - - public function exists(object $entity, Criteria|null $extraConditions = null): bool - { - $criteria = $this->class->getIdentifierValues($entity); - - if (! $criteria) { - return false; - } - - $alias = $this->getSQLTableAlias($this->class->name); - - $sql = 'SELECT 1 ' - . $this->getLockTablesSql(LockMode::NONE) - . ' WHERE ' . $this->getSelectConditionSQL($criteria); - - [$params, $types] = $this->expandParameters($criteria); - - if ($extraConditions !== null) { - $sql .= ' AND ' . $this->getSelectConditionCriteriaSQL($extraConditions); - [$criteriaParams, $criteriaTypes] = $this->expandCriteriaParameters($extraConditions); - - $params = [...$params, ...$criteriaParams]; - $types = [...$types, ...$criteriaTypes]; - } - - $filterSql = $this->generateFilterConditionSQL($this->class, $alias); - if ($filterSql) { - $sql .= ' AND ' . $filterSql; - } - - return (bool) $this->conn->fetchOne($sql, $params, $types); - } - - /** - * Generates the appropriate join SQL for the given join column. - * - * @param list $joinColumns The join columns definition of an association. - * - * @return string LEFT JOIN if one of the columns is nullable, INNER JOIN otherwise. - */ - protected function getJoinSQLForJoinColumns(array $joinColumns): string - { - // if one of the join columns is nullable, return left join - foreach ($joinColumns as $joinColumn) { - if (! isset($joinColumn->nullable) || $joinColumn->nullable) { - return 'LEFT JOIN'; - } - } - - return 'INNER JOIN'; - } - - public function getSQLColumnAlias(string $columnName): string - { - return $this->quoteStrategy->getColumnAlias($columnName, $this->currentPersisterContext->sqlAliasCounter++, $this->platform); - } - - /** - * Generates the filter SQL for a given entity and table alias. - * - * @param ClassMetadata $targetEntity Metadata of the target entity. - * @param string $targetTableAlias The table alias of the joined/selected table. - * - * @return string The SQL query part to add to a query. - */ - protected function generateFilterConditionSQL(ClassMetadata $targetEntity, string $targetTableAlias): string - { - $filterClauses = []; - - foreach ($this->em->getFilters()->getEnabledFilters() as $filter) { - $filterExpr = $filter->addFilterConstraint($targetEntity, $targetTableAlias); - if ($filterExpr !== '') { - $filterClauses[] = '(' . $filterExpr . ')'; - } - } - - $sql = implode(' AND ', $filterClauses); - - return $sql ? '(' . $sql . ')' : ''; // Wrap again to avoid "X or Y and FilterConditionSQL" - } - - /** - * Switches persister context according to current query offset/limits - * - * This is due to the fact that to-many associations cannot be fetch-joined when a limit is involved - */ - protected function switchPersisterContext(int|null $offset, int|null $limit): void - { - if ($offset === null && $limit === null) { - $this->currentPersisterContext = $this->noLimitsContext; - - return; - } - - $this->currentPersisterContext = $this->limitsHandlingContext; - } - - /** - * @return string[] - * @psalm-return list - */ - protected function getClassIdentifiersTypes(ClassMetadata $class): array - { - $entityManager = $this->em; - - return array_map( - static function ($fieldName) use ($class, $entityManager): string { - $types = PersisterHelper::getTypeOfField($fieldName, $class, $entityManager); - assert(isset($types[0])); - - return $types[0]; - }, - $class->identifier, - ); - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Entity/CachedPersisterContext.php b/vendor/doctrine/orm/src/Persisters/Entity/CachedPersisterContext.php deleted file mode 100644 index 03d053b..0000000 --- a/vendor/doctrine/orm/src/Persisters/Entity/CachedPersisterContext.php +++ /dev/null @@ -1,60 +0,0 @@ - - */ - public array $sqlTableAliases = []; - - public function __construct( - /** - * Metadata object that describes the mapping of the mapped entity class. - */ - public ClassMetadata $class, - /** - * ResultSetMapping that is used for all queries. Is generated lazily once per request. - */ - public ResultSetMapping $rsm, - /** - * Whether this persistent context is considering limit operations applied to the selection queries - */ - public bool $handlesLimits, - ) { - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Entity/EntityPersister.php b/vendor/doctrine/orm/src/Persisters/Entity/EntityPersister.php deleted file mode 100644 index 6b278a7..0000000 --- a/vendor/doctrine/orm/src/Persisters/Entity/EntityPersister.php +++ /dev/null @@ -1,298 +0,0 @@ -, list} - */ - public function expandParameters(array $criteria): array; - - /** - * Expands Criteria Parameters by walking the expressions and grabbing all parameters and types from it. - * - * @psalm-return array{list, list} - */ - public function expandCriteriaParameters(Criteria $criteria): array; - - /** Gets the SQL WHERE condition for matching a field with a given value. */ - public function getSelectConditionStatementSQL( - string $field, - mixed $value, - AssociationMapping|null $assoc = null, - string|null $comparison = null, - ): string; - - /** - * Adds an entity to the queued insertions. - * The entity remains queued until {@link executeInserts} is invoked. - */ - public function addInsert(object $entity): void; - - /** - * Executes all queued entity insertions. - * - * If no inserts are queued, invoking this method is a NOOP. - */ - public function executeInserts(): void; - - /** - * Updates a managed entity. The entity is updated according to its current changeset - * in the running UnitOfWork. If there is no changeset, nothing is updated. - */ - public function update(object $entity): void; - - /** - * Deletes a managed entity. - * - * The entity to delete must be managed and have a persistent identifier. - * The deletion happens instantaneously. - * - * Subclasses may override this method to customize the semantics of entity deletion. - * - * @return bool TRUE if the entity got deleted in the database, FALSE otherwise. - */ - public function delete(object $entity): bool; - - /** - * Count entities (optionally filtered by a criteria) - * - * @param mixed[]|Criteria $criteria - */ - public function count(array|Criteria $criteria = []): int; - - /** - * Gets the name of the table that owns the column the given field is mapped to. - * - * The default implementation in BasicEntityPersister always returns the name - * of the table the entity type of this persister is mapped to, since an entity - * is always persisted to a single table with a BasicEntityPersister. - */ - public function getOwningTable(string $fieldName): string; - - /** - * Loads an entity by a list of field criteria. - * - * @param mixed[] $criteria The criteria by which to load the entity. - * @param object|null $entity The entity to load the data into. If not specified, - * a new entity is created. - * @param AssociationMapping|null $assoc The association that connects the entity - * to load to another entity, if any. - * @param mixed[] $hints Hints for entity creation. - * @param LockMode|int|null $lockMode One of the \Doctrine\DBAL\LockMode::* constants - * or NULL if no specific lock mode should be used - * for loading the entity. - * @param int|null $limit Limit number of results. - * @param string[]|null $orderBy Criteria to order by. - * @psalm-param array $criteria - * @psalm-param array $hints - * @psalm-param LockMode::*|null $lockMode - * @psalm-param array|null $orderBy - * - * @return object|null The loaded and managed entity instance or NULL if the entity can not be found. - * - * @todo Check identity map? loadById method? Try to guess whether $criteria is the id? - */ - public function load( - array $criteria, - object|null $entity = null, - AssociationMapping|null $assoc = null, - array $hints = [], - LockMode|int|null $lockMode = null, - int|null $limit = null, - array|null $orderBy = null, - ): object|null; - - /** - * Loads an entity by identifier. - * - * @param object|null $entity The entity to load the data into. If not specified, a new entity is created. - * @psalm-param array $identifier The entity identifier. - * - * @return object|null The loaded and managed entity instance or NULL if the entity can not be found. - * - * @todo Check parameters - */ - public function loadById(array $identifier, object|null $entity = null): object|null; - - /** - * Loads an entity of this persister's mapped class as part of a single-valued - * association from another entity. - * - * @param AssociationMapping $assoc The association to load. - * @param object $sourceEntity The entity that owns the association (not necessarily the "owning side"). - * @psalm-param array $identifier The identifier of the entity to load. Must be provided if - * the association to load represents the owning side, otherwise - * the identifier is derived from the $sourceEntity. - * - * @return object|null The loaded and managed entity instance or NULL if the entity can not be found. - * - * @throws MappingException - */ - public function loadOneToOneEntity(AssociationMapping $assoc, object $sourceEntity, array $identifier = []): object|null; - - /** - * Refreshes a managed entity. - * - * @param LockMode|int|null $lockMode One of the \Doctrine\DBAL\LockMode::* constants - * or NULL if no specific lock mode should be used - * for refreshing the managed entity. - * @psalm-param array $id The identifier of the entity as an - * associative array from column or - * field names to values. - * @psalm-param LockMode::*|null $lockMode - */ - public function refresh(array $id, object $entity, LockMode|int|null $lockMode = null): void; - - /** - * Loads Entities matching the given Criteria object. - * - * @return mixed[] - */ - public function loadCriteria(Criteria $criteria): array; - - /** - * Loads a list of entities by a list of field criteria. - * - * @psalm-param array|null $orderBy - * @psalm-param array $criteria - * - * @return mixed[] - */ - public function loadAll( - array $criteria = [], - array|null $orderBy = null, - int|null $limit = null, - int|null $offset = null, - ): array; - - /** - * Gets (sliced or full) elements of the given collection. - * - * @return mixed[] - */ - public function getManyToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - int|null $offset = null, - int|null $limit = null, - ): array; - - /** - * Loads a collection of entities of a many-to-many association. - * - * @param AssociationMapping $assoc The association mapping of the association being loaded. - * @param object $sourceEntity The entity that owns the collection. - * @param PersistentCollection $collection The collection to fill. - * - * @return mixed[] - */ - public function loadManyToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - PersistentCollection $collection, - ): array; - - /** - * Loads a collection of entities in a one-to-many association. - * - * @param PersistentCollection $collection The collection to load/fill. - */ - public function loadOneToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - PersistentCollection $collection, - ): mixed; - - /** - * Locks all rows of this entity matching the given criteria with the specified pessimistic lock mode. - * - * @psalm-param array $criteria - * @psalm-param LockMode::* $lockMode - */ - public function lock(array $criteria, LockMode|int $lockMode): void; - - /** - * Returns an array with (sliced or full list) of elements in the specified collection. - * - * @return mixed[] - */ - public function getOneToManyCollection( - AssociationMapping $assoc, - object $sourceEntity, - int|null $offset = null, - int|null $limit = null, - ): array; - - /** - * Checks whether the given managed entity exists in the database. - */ - public function exists(object $entity, Criteria|null $extraConditions = null): bool; -} diff --git a/vendor/doctrine/orm/src/Persisters/Entity/JoinedSubclassPersister.php b/vendor/doctrine/orm/src/Persisters/Entity/JoinedSubclassPersister.php deleted file mode 100644 index 76719a2..0000000 --- a/vendor/doctrine/orm/src/Persisters/Entity/JoinedSubclassPersister.php +++ /dev/null @@ -1,601 +0,0 @@ -Class Table Inheritance strategy. - * - * @see https://martinfowler.com/eaaCatalog/classTableInheritance.html - */ -class JoinedSubclassPersister extends AbstractEntityInheritancePersister -{ - use LockSqlHelper; - use SQLResultCasing; - - /** - * Map that maps column names to the table names that own them. - * This is mainly a temporary cache, used during a single request. - * - * @psalm-var array - */ - private array $owningTableMap = []; - - /** - * Map of table to quoted table names. - * - * @psalm-var array - */ - private array $quotedTableMap = []; - - protected function getDiscriminatorColumnTableName(): string - { - $class = $this->class->name !== $this->class->rootEntityName - ? $this->em->getClassMetadata($this->class->rootEntityName) - : $this->class; - - return $class->getTableName(); - } - - /** - * This function finds the ClassMetadata instance in an inheritance hierarchy - * that is responsible for enabling versioning. - */ - private function getVersionedClassMetadata(): ClassMetadata - { - if (isset($this->class->fieldMappings[$this->class->versionField]->inherited)) { - $definingClassName = $this->class->fieldMappings[$this->class->versionField]->inherited; - - return $this->em->getClassMetadata($definingClassName); - } - - return $this->class; - } - - /** - * Gets the name of the table that owns the column the given field is mapped to. - */ - public function getOwningTable(string $fieldName): string - { - if (isset($this->owningTableMap[$fieldName])) { - return $this->owningTableMap[$fieldName]; - } - - $cm = match (true) { - isset($this->class->associationMappings[$fieldName]->inherited) - => $this->em->getClassMetadata($this->class->associationMappings[$fieldName]->inherited), - isset($this->class->fieldMappings[$fieldName]->inherited) - => $this->em->getClassMetadata($this->class->fieldMappings[$fieldName]->inherited), - default => $this->class, - }; - - $tableName = $cm->getTableName(); - $quotedTableName = $this->quoteStrategy->getTableName($cm, $this->platform); - - $this->owningTableMap[$fieldName] = $tableName; - $this->quotedTableMap[$tableName] = $quotedTableName; - - return $tableName; - } - - public function executeInserts(): void - { - if (! $this->queuedInserts) { - return; - } - - $uow = $this->em->getUnitOfWork(); - $idGenerator = $this->class->idGenerator; - $isPostInsertId = $idGenerator->isPostInsertGenerator(); - $rootClass = $this->class->name !== $this->class->rootEntityName - ? $this->em->getClassMetadata($this->class->rootEntityName) - : $this->class; - - // Prepare statement for the root table - $rootPersister = $this->em->getUnitOfWork()->getEntityPersister($rootClass->name); - $rootTableName = $rootClass->getTableName(); - $rootTableStmt = $this->conn->prepare($rootPersister->getInsertSQL()); - - // Prepare statements for sub tables. - $subTableStmts = []; - - if ($rootClass !== $this->class) { - $subTableStmts[$this->class->getTableName()] = $this->conn->prepare($this->getInsertSQL()); - } - - foreach ($this->class->parentClasses as $parentClassName) { - $parentClass = $this->em->getClassMetadata($parentClassName); - $parentTableName = $parentClass->getTableName(); - - if ($parentClass !== $rootClass) { - $parentPersister = $this->em->getUnitOfWork()->getEntityPersister($parentClassName); - $subTableStmts[$parentTableName] = $this->conn->prepare($parentPersister->getInsertSQL()); - } - } - - // Execute all inserts. For each entity: - // 1) Insert on root table - // 2) Insert on sub tables - foreach ($this->queuedInserts as $entity) { - $insertData = $this->prepareInsertData($entity); - - // Execute insert on root table - $paramIndex = 1; - - foreach ($insertData[$rootTableName] as $columnName => $value) { - $rootTableStmt->bindValue($paramIndex++, $value, $this->columnTypes[$columnName]); - } - - $rootTableStmt->executeStatement(); - - if ($isPostInsertId) { - $generatedId = $idGenerator->generateId($this->em, $entity); - $id = [$this->class->identifier[0] => $generatedId]; - - $uow->assignPostInsertId($entity, $generatedId); - } else { - $id = $this->em->getUnitOfWork()->getEntityIdentifier($entity); - } - - // Execute inserts on subtables. - // The order doesn't matter because all child tables link to the root table via FK. - foreach ($subTableStmts as $tableName => $stmt) { - $paramIndex = 1; - $data = $insertData[$tableName] ?? []; - - foreach ($id as $idName => $idVal) { - $type = $this->columnTypes[$idName] ?? Types::STRING; - - $stmt->bindValue($paramIndex++, $idVal, $type); - } - - foreach ($data as $columnName => $value) { - if (! isset($id[$columnName])) { - $stmt->bindValue($paramIndex++, $value, $this->columnTypes[$columnName]); - } - } - - $stmt->executeStatement(); - } - - if ($this->class->requiresFetchAfterChange) { - $this->assignDefaultVersionAndUpsertableValues($entity, $id); - } - } - - $this->queuedInserts = []; - } - - public function update(object $entity): void - { - $updateData = $this->prepareUpdateData($entity); - - if (! $updateData) { - return; - } - - $isVersioned = $this->class->isVersioned; - - $versionedClass = $this->getVersionedClassMetadata(); - $versionedTable = $versionedClass->getTableName(); - - foreach ($updateData as $tableName => $data) { - $tableName = $this->quotedTableMap[$tableName]; - $versioned = $isVersioned && $versionedTable === $tableName; - - $this->updateTable($entity, $tableName, $data, $versioned); - } - - if ($this->class->requiresFetchAfterChange) { - // Make sure the table with the version column is updated even if no columns on that - // table were affected. - if ($isVersioned && ! isset($updateData[$versionedTable])) { - $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); - - $this->updateTable($entity, $tableName, [], true); - } - - $identifiers = $this->em->getUnitOfWork()->getEntityIdentifier($entity); - - $this->assignDefaultVersionAndUpsertableValues($entity, $identifiers); - } - } - - public function delete(object $entity): bool - { - $identifier = $this->em->getUnitOfWork()->getEntityIdentifier($entity); - $id = array_combine($this->class->getIdentifierColumnNames(), $identifier); - $types = $this->getClassIdentifiersTypes($this->class); - - $this->deleteJoinTableRecords($identifier, $types); - - // Delete the row from the root table. Cascades do the rest. - $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); - $rootTable = $this->quoteStrategy->getTableName($rootClass, $this->platform); - $rootTypes = $this->getClassIdentifiersTypes($rootClass); - - return (bool) $this->conn->delete($rootTable, $id, $rootTypes); - } - - public function getSelectSQL( - array|Criteria $criteria, - AssociationMapping|null $assoc = null, - LockMode|int|null $lockMode = null, - int|null $limit = null, - int|null $offset = null, - array|null $orderBy = null, - ): string { - $this->switchPersisterContext($offset, $limit); - - $baseTableAlias = $this->getSQLTableAlias($this->class->name); - $joinSql = $this->getJoinSql($baseTableAlias); - - if ($assoc !== null && $assoc->isManyToMany()) { - $joinSql .= $this->getSelectManyToManyJoinSQL($assoc); - } - - $conditionSql = $criteria instanceof Criteria - ? $this->getSelectConditionCriteriaSQL($criteria) - : $this->getSelectConditionSQL($criteria, $assoc); - - $filterSql = $this->generateFilterConditionSQL( - $this->em->getClassMetadata($this->class->rootEntityName), - $this->getSQLTableAlias($this->class->rootEntityName), - ); - // If the current class in the root entity, add the filters - if ($filterSql) { - $conditionSql .= $conditionSql - ? ' AND ' . $filterSql - : $filterSql; - } - - $orderBySql = ''; - - if ($assoc !== null && $assoc->isOrdered()) { - $orderBy = $assoc->orderBy(); - } - - if ($orderBy) { - $orderBySql = $this->getOrderBySQL($orderBy, $baseTableAlias); - } - - $lockSql = ''; - - switch ($lockMode) { - case LockMode::PESSIMISTIC_READ: - $lockSql = ' ' . $this->getReadLockSQL($this->platform); - - break; - - case LockMode::PESSIMISTIC_WRITE: - $lockSql = ' ' . $this->getWriteLockSQL($this->platform); - - break; - } - - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); - $from = ' FROM ' . $tableName . ' ' . $baseTableAlias; - $where = $conditionSql !== '' ? ' WHERE ' . $conditionSql : ''; - $lock = $this->platform->appendLockHint($from, $lockMode ?? LockMode::NONE); - $columnList = $this->getSelectColumnsSQL(); - $query = 'SELECT ' . $columnList - . $lock - . $joinSql - . $where - . $orderBySql; - - return $this->platform->modifyLimitQuery($query, $limit, $offset ?? 0) . $lockSql; - } - - public function getCountSQL(array|Criteria $criteria = []): string - { - $tableName = $this->quoteStrategy->getTableName($this->class, $this->platform); - $baseTableAlias = $this->getSQLTableAlias($this->class->name); - $joinSql = $this->getJoinSql($baseTableAlias); - - $conditionSql = $criteria instanceof Criteria - ? $this->getSelectConditionCriteriaSQL($criteria) - : $this->getSelectConditionSQL($criteria); - - $filterSql = $this->generateFilterConditionSQL($this->em->getClassMetadata($this->class->rootEntityName), $this->getSQLTableAlias($this->class->rootEntityName)); - - if ($filterSql !== '') { - $conditionSql = $conditionSql - ? $conditionSql . ' AND ' . $filterSql - : $filterSql; - } - - return 'SELECT COUNT(*) ' - . 'FROM ' . $tableName . ' ' . $baseTableAlias - . $joinSql - . (empty($conditionSql) ? '' : ' WHERE ' . $conditionSql); - } - - protected function getLockTablesSql(LockMode|int $lockMode): string - { - $joinSql = ''; - $identifierColumns = $this->class->getIdentifierColumnNames(); - $baseTableAlias = $this->getSQLTableAlias($this->class->name); - - // INNER JOIN parent tables - foreach ($this->class->parentClasses as $parentClassName) { - $conditions = []; - $tableAlias = $this->getSQLTableAlias($parentClassName); - $parentClass = $this->em->getClassMetadata($parentClassName); - $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; - - foreach ($identifierColumns as $idColumn) { - $conditions[] = $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn; - } - - $joinSql .= implode(' AND ', $conditions); - } - - return parent::getLockTablesSql($lockMode) . $joinSql; - } - - /** - * Ensure this method is never called. This persister overrides getSelectEntitiesSQL directly. - */ - protected function getSelectColumnsSQL(): string - { - // Create the column list fragment only once - if ($this->currentPersisterContext->selectColumnListSql !== null) { - return $this->currentPersisterContext->selectColumnListSql; - } - - $columnList = []; - $discrColumn = $this->class->getDiscriminatorColumn(); - $discrColumnName = $discrColumn->name; - $discrColumnType = $discrColumn->type; - $baseTableAlias = $this->getSQLTableAlias($this->class->name); - $resultColumnName = $this->getSQLResultCasing($this->platform, $discrColumnName); - - $this->currentPersisterContext->rsm->addEntityResult($this->class->name, 'r'); - $this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName); - $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType); - - // Add regular columns - foreach ($this->class->fieldMappings as $fieldName => $mapping) { - $class = isset($mapping->inherited) - ? $this->em->getClassMetadata($mapping->inherited) - : $this->class; - - $columnList[] = $this->getSelectColumnSQL($fieldName, $class); - } - - // Add foreign key columns - foreach ($this->class->associationMappings as $mapping) { - if (! $mapping->isToOneOwningSide()) { - continue; - } - - $tableAlias = isset($mapping->inherited) - ? $this->getSQLTableAlias($mapping->inherited) - : $baseTableAlias; - - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - - foreach ($mapping->joinColumns as $joinColumn) { - $columnList[] = $this->getSelectJoinColumnSQL( - $tableAlias, - $joinColumn->name, - $this->quoteStrategy->getJoinColumnName($joinColumn, $this->class, $this->platform), - PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em), - ); - } - } - - // Add discriminator column (DO NOT ALIAS, see AbstractEntityInheritancePersister#processSQLResult). - $tableAlias = $this->class->rootEntityName === $this->class->name - ? $baseTableAlias - : $this->getSQLTableAlias($this->class->rootEntityName); - - $columnList[] = $tableAlias . '.' . $discrColumnName; - - // sub tables - foreach ($this->class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); - $tableAlias = $this->getSQLTableAlias($subClassName); - - // Add subclass columns - foreach ($subClass->fieldMappings as $fieldName => $mapping) { - if (isset($mapping->inherited)) { - continue; - } - - $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); - } - - // Add join columns (foreign keys) - foreach ($subClass->associationMappings as $mapping) { - if (! $mapping->isToOneOwningSide() || isset($mapping->inherited)) { - continue; - } - - $targetClass = $this->em->getClassMetadata($mapping->targetEntity); - - foreach ($mapping->joinColumns as $joinColumn) { - $columnList[] = $this->getSelectJoinColumnSQL( - $tableAlias, - $joinColumn->name, - $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform), - PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em), - ); - } - } - } - - $this->currentPersisterContext->selectColumnListSql = implode(', ', $columnList); - - return $this->currentPersisterContext->selectColumnListSql; - } - - /** - * {@inheritDoc} - */ - protected function getInsertColumnList(): array - { - // Identifier columns must always come first in the column list of subclasses. - $columns = $this->class->parentClasses - ? $this->class->getIdentifierColumnNames() - : []; - - foreach ($this->class->reflFields as $name => $field) { - if ( - isset($this->class->fieldMappings[$name]->inherited) - && ! isset($this->class->fieldMappings[$name]->id) - || isset($this->class->associationMappings[$name]->inherited) - || ($this->class->isVersioned && $this->class->versionField === $name) - || isset($this->class->embeddedClasses[$name]) - || isset($this->class->fieldMappings[$name]->notInsertable) - ) { - continue; - } - - if (isset($this->class->associationMappings[$name])) { - $assoc = $this->class->associationMappings[$name]; - if ($assoc->isToOneOwningSide()) { - foreach ($assoc->targetToSourceKeyColumns as $sourceCol) { - $columns[] = $sourceCol; - } - } - } elseif ( - $this->class->name !== $this->class->rootEntityName || - ! $this->class->isIdGeneratorIdentity() || $this->class->identifier[0] !== $name - ) { - $columns[] = $this->quoteStrategy->getColumnName($name, $this->class, $this->platform); - $this->columnTypes[$name] = $this->class->fieldMappings[$name]->type; - } - } - - // Add discriminator column if it is the topmost class. - if ($this->class->name === $this->class->rootEntityName) { - $columns[] = $this->class->getDiscriminatorColumn()->name; - } - - return $columns; - } - - /** - * {@inheritDoc} - */ - protected function assignDefaultVersionAndUpsertableValues(object $entity, array $id): void - { - $values = $this->fetchVersionAndNotUpsertableValues($this->getVersionedClassMetadata(), $id); - - foreach ($values as $field => $value) { - $value = Type::getType($this->class->fieldMappings[$field]->type)->convertToPHPValue($value, $this->platform); - - $this->class->setFieldValue($entity, $field, $value); - } - } - - /** - * {@inheritDoc} - */ - protected function fetchVersionAndNotUpsertableValues(ClassMetadata $versionedClass, array $id): mixed - { - $columnNames = []; - foreach ($this->class->fieldMappings as $key => $column) { - $class = null; - if ($this->class->isVersioned && $key === $versionedClass->versionField) { - $class = $versionedClass; - } elseif (isset($column->generated)) { - $class = isset($column->inherited) - ? $this->em->getClassMetadata($column->inherited) - : $this->class; - } else { - continue; - } - - $columnNames[$key] = $this->getSelectColumnSQL($key, $class); - } - - $tableName = $this->quoteStrategy->getTableName($versionedClass, $this->platform); - $baseTableAlias = $this->getSQLTableAlias($this->class->name); - $joinSql = $this->getJoinSql($baseTableAlias); - $identifier = $this->quoteStrategy->getIdentifierColumnNames($versionedClass, $this->platform); - foreach ($identifier as $i => $idValue) { - $identifier[$i] = $baseTableAlias . '.' . $idValue; - } - - $sql = 'SELECT ' . implode(', ', $columnNames) - . ' FROM ' . $tableName . ' ' . $baseTableAlias - . $joinSql - . ' WHERE ' . implode(' = ? AND ', $identifier) . ' = ?'; - - $flatId = $this->identifierFlattener->flattenIdentifier($versionedClass, $id); - $values = $this->conn->fetchNumeric( - $sql, - array_values($flatId), - $this->extractIdentifierTypes($id, $versionedClass), - ); - - if ($values === false) { - throw new LengthException('Unexpected empty result for database query.'); - } - - $values = array_combine(array_keys($columnNames), $values); - - if (! $values) { - throw new LengthException('Unexpected number of database columns.'); - } - - return $values; - } - - private function getJoinSql(string $baseTableAlias): string - { - $joinSql = ''; - $identifierColumn = $this->class->getIdentifierColumnNames(); - - // INNER JOIN parent tables - foreach ($this->class->parentClasses as $parentClassName) { - $conditions = []; - $parentClass = $this->em->getClassMetadata($parentClassName); - $tableAlias = $this->getSQLTableAlias($parentClassName); - $joinSql .= ' INNER JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; - - foreach ($identifierColumn as $idColumn) { - $conditions[] = $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn; - } - - $joinSql .= implode(' AND ', $conditions); - } - - // OUTER JOIN sub tables - foreach ($this->class->subClasses as $subClassName) { - $conditions = []; - $subClass = $this->em->getClassMetadata($subClassName); - $tableAlias = $this->getSQLTableAlias($subClassName); - $joinSql .= ' LEFT JOIN ' . $this->quoteStrategy->getTableName($subClass, $this->platform) . ' ' . $tableAlias . ' ON '; - - foreach ($identifierColumn as $idColumn) { - $conditions[] = $baseTableAlias . '.' . $idColumn . ' = ' . $tableAlias . '.' . $idColumn; - } - - $joinSql .= implode(' AND ', $conditions); - } - - return $joinSql; - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Entity/SingleTablePersister.php b/vendor/doctrine/orm/src/Persisters/Entity/SingleTablePersister.php deleted file mode 100644 index 4a4d999..0000000 --- a/vendor/doctrine/orm/src/Persisters/Entity/SingleTablePersister.php +++ /dev/null @@ -1,166 +0,0 @@ -class->getTableName(); - } - - protected function getSelectColumnsSQL(): string - { - $columnList = []; - if ($this->currentPersisterContext->selectColumnListSql !== null) { - return $this->currentPersisterContext->selectColumnListSql; - } - - $columnList[] = parent::getSelectColumnsSQL(); - - $rootClass = $this->em->getClassMetadata($this->class->rootEntityName); - $tableAlias = $this->getSQLTableAlias($rootClass->name); - - // Append discriminator column - $discrColumn = $this->class->getDiscriminatorColumn(); - $discrColumnName = $discrColumn->name; - $discrColumnType = $discrColumn->type; - - $columnList[] = $tableAlias . '.' . $discrColumnName; - - $resultColumnName = $this->getSQLResultCasing($this->platform, $discrColumnName); - - $this->currentPersisterContext->rsm->setDiscriminatorColumn('r', $resultColumnName); - $this->currentPersisterContext->rsm->addMetaResult('r', $resultColumnName, $discrColumnName, false, $discrColumnType); - - // Append subclass columns - foreach ($this->class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); - - // Regular columns - foreach ($subClass->fieldMappings as $fieldName => $mapping) { - if (isset($mapping->inherited)) { - continue; - } - - $columnList[] = $this->getSelectColumnSQL($fieldName, $subClass); - } - - // Foreign key columns - foreach ($subClass->associationMappings as $assoc) { - if (! $assoc->isToOneOwningSide() || isset($assoc->inherited)) { - continue; - } - - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - - foreach ($assoc->joinColumns as $joinColumn) { - $columnList[] = $this->getSelectJoinColumnSQL( - $tableAlias, - $joinColumn->name, - $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform), - PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em), - ); - } - } - } - - $this->currentPersisterContext->selectColumnListSql = implode(', ', $columnList); - - return $this->currentPersisterContext->selectColumnListSql; - } - - /** - * {@inheritDoc} - */ - protected function getInsertColumnList(): array - { - $columns = parent::getInsertColumnList(); - - // Add discriminator column to the INSERT SQL - $columns[] = $this->class->getDiscriminatorColumn()->name; - - return $columns; - } - - protected function getSQLTableAlias(string $className, string $assocName = ''): string - { - return parent::getSQLTableAlias($this->class->rootEntityName, $assocName); - } - - /** - * {@inheritDoc} - */ - protected function getSelectConditionSQL(array $criteria, AssociationMapping|null $assoc = null): string - { - $conditionSql = parent::getSelectConditionSQL($criteria, $assoc); - - if ($conditionSql) { - $conditionSql .= ' AND '; - } - - return $conditionSql . $this->getSelectConditionDiscriminatorValueSQL(); - } - - protected function getSelectConditionCriteriaSQL(Criteria $criteria): string - { - $conditionSql = parent::getSelectConditionCriteriaSQL($criteria); - - if ($conditionSql) { - $conditionSql .= ' AND '; - } - - return $conditionSql . $this->getSelectConditionDiscriminatorValueSQL(); - } - - protected function getSelectConditionDiscriminatorValueSQL(): string - { - $values = array_map($this->conn->quote(...), array_map( - strval(...), - array_flip(array_intersect($this->class->discriminatorMap, $this->class->subClasses)), - )); - - if ($this->class->discriminatorValue !== null) { // discriminators can be 0 - array_unshift($values, $this->conn->quote((string) $this->class->discriminatorValue)); - } - - $discColumnName = $this->class->getDiscriminatorColumn()->name; - - $values = implode(', ', $values); - $tableAlias = $this->getSQLTableAlias($this->class->name); - - return $tableAlias . '.' . $discColumnName . ' IN (' . $values . ')'; - } - - protected function generateFilterConditionSQL(ClassMetadata $targetEntity, string $targetTableAlias): string - { - // Ensure that the filters are applied to the root entity of the inheritance tree - $targetEntity = $this->em->getClassMetadata($targetEntity->rootEntityName); - // we don't care about the $targetTableAlias, in a STI there is only one table. - - return parent::generateFilterConditionSQL($targetEntity, $targetTableAlias); - } -} diff --git a/vendor/doctrine/orm/src/Persisters/Exception/CantUseInOperatorOnCompositeKeys.php b/vendor/doctrine/orm/src/Persisters/Exception/CantUseInOperatorOnCompositeKeys.php deleted file mode 100644 index 5c91312..0000000 --- a/vendor/doctrine/orm/src/Persisters/Exception/CantUseInOperatorOnCompositeKeys.php +++ /dev/null @@ -1,15 +0,0 @@ -getField(); - $value = $comparison->getValue()->getValue(); // shortcut for walkValue() - - if ( - isset($this->classMetadata->associationMappings[$field]) && - $value !== null && - ! is_object($value) && - ! in_array($comparison->getOperator(), [Comparison::IN, Comparison::NIN], true) - ) { - throw MatchingAssociationFieldRequiresObject::fromClassAndAssociation( - $this->classMetadata->name, - $field, - ); - } - - return $this->persister->getSelectConditionStatementSQL($field, $value, null, $comparison->getOperator()); - } - - /** - * Converts a composite expression into the target query language output. - * - * @throws RuntimeException - */ - public function walkCompositeExpression(CompositeExpression $expr): string - { - $expressionList = []; - - foreach ($expr->getExpressionList() as $child) { - $expressionList[] = $this->dispatch($child); - } - - return match ($expr->getType()) { - CompositeExpression::TYPE_AND => '(' . implode(' AND ', $expressionList) . ')', - CompositeExpression::TYPE_OR => '(' . implode(' OR ', $expressionList) . ')', - CompositeExpression::TYPE_NOT => 'NOT (' . $expressionList[0] . ')', - default => throw new RuntimeException('Unknown composite ' . $expr->getType()), - }; - } - - /** - * Converts a value expression into the target query language part. - */ - public function walkValue(Value $value): string - { - return '?'; - } -} diff --git a/vendor/doctrine/orm/src/Persisters/SqlValueVisitor.php b/vendor/doctrine/orm/src/Persisters/SqlValueVisitor.php deleted file mode 100644 index 7f987ad..0000000 --- a/vendor/doctrine/orm/src/Persisters/SqlValueVisitor.php +++ /dev/null @@ -1,88 +0,0 @@ -getValueFromComparison($comparison); - - $this->values[] = $value; - $this->types[] = [$comparison->getField(), $value, $comparison->getOperator()]; - - return null; - } - - /** - * Converts a composite expression into the target query language output. - * - * {@inheritDoc} - */ - public function walkCompositeExpression(CompositeExpression $expr) - { - foreach ($expr->getExpressionList() as $child) { - $this->dispatch($child); - } - - return null; - } - - /** - * Converts a value expression into the target query language part. - * - * {@inheritDoc} - */ - public function walkValue(Value $value) - { - return null; - } - - /** - * Returns the Parameters and Types necessary for matching the last visited expression. - * - * @return mixed[][] - * @psalm-return array{0: array, 1: array>} - */ - public function getParamsAndTypes(): array - { - return [$this->values, $this->types]; - } - - /** - * Returns the value from a Comparison. In case of a CONTAINS comparison, - * the value is wrapped in %-signs, because it will be used in a LIKE clause. - */ - protected function getValueFromComparison(Comparison $comparison): mixed - { - $value = $comparison->getValue()->getValue(); - - return match ($comparison->getOperator()) { - Comparison::CONTAINS => '%' . $value . '%', - Comparison::STARTS_WITH => $value . '%', - Comparison::ENDS_WITH => '%' . $value, - default => $value, - }; - } -} diff --git a/vendor/doctrine/orm/src/PessimisticLockException.php b/vendor/doctrine/orm/src/PessimisticLockException.php deleted file mode 100644 index c71560f..0000000 --- a/vendor/doctrine/orm/src/PessimisticLockException.php +++ /dev/null @@ -1,16 +0,0 @@ -resolveClassName($object::class); - } -} diff --git a/vendor/doctrine/orm/src/Proxy/InternalProxy.php b/vendor/doctrine/orm/src/Proxy/InternalProxy.php deleted file mode 100644 index 7c1d833..0000000 --- a/vendor/doctrine/orm/src/Proxy/InternalProxy.php +++ /dev/null @@ -1,18 +0,0 @@ - - */ -interface InternalProxy extends Proxy -{ - public function __setInitialized(bool $initialized): void; -} diff --git a/vendor/doctrine/orm/src/Proxy/NotAProxyClass.php b/vendor/doctrine/orm/src/Proxy/NotAProxyClass.php deleted file mode 100644 index 689cc3e..0000000 --- a/vendor/doctrine/orm/src/Proxy/NotAProxyClass.php +++ /dev/null @@ -1,22 +0,0 @@ -; - -/** - * DO NOT EDIT THIS FILE - IT WAS CREATED BY DOCTRINE'S PROXY GENERATOR - */ -class extends \ implements \ -{ - - - public function __isInitialized(): bool - { - return isset($this->lazyObjectState) && $this->isLazyObjectInitialized(); - } - - public function __serialize(): array - { - - } -} - -EOPHP; - - /** The UnitOfWork this factory uses to retrieve persisters */ - private readonly UnitOfWork $uow; - - /** @var self::AUTOGENERATE_* */ - private $autoGenerate; - - /** The IdentifierFlattener used for manipulating identifiers */ - private readonly IdentifierFlattener $identifierFlattener; - - /** @var array */ - private array $proxyFactories = []; - - /** - * Initializes a new instance of the ProxyFactory class that is - * connected to the given EntityManager. - * - * @param EntityManagerInterface $em The EntityManager the new factory works for. - * @param string $proxyDir The directory to use for the proxy classes. It must exist. - * @param string $proxyNs The namespace to use for the proxy classes. - * @param bool|self::AUTOGENERATE_* $autoGenerate The strategy for automatically generating proxy classes. - */ - public function __construct( - private readonly EntityManagerInterface $em, - private readonly string $proxyDir, - private readonly string $proxyNs, - bool|int $autoGenerate = self::AUTOGENERATE_NEVER, - ) { - if (! $proxyDir) { - throw ORMInvalidArgumentException::proxyDirectoryRequired(); - } - - if (! $proxyNs) { - throw ORMInvalidArgumentException::proxyNamespaceRequired(); - } - - if (is_int($autoGenerate) ? $autoGenerate < 0 || $autoGenerate > 4 : ! is_bool($autoGenerate)) { - throw ORMInvalidArgumentException::invalidAutoGenerateMode($autoGenerate); - } - - $this->uow = $em->getUnitOfWork(); - $this->autoGenerate = (int) $autoGenerate; - $this->identifierFlattener = new IdentifierFlattener($this->uow, $em->getMetadataFactory()); - } - - /** - * @param class-string $className - * @param array $identifier - */ - public function getProxy(string $className, array $identifier): InternalProxy - { - $proxyFactory = $this->proxyFactories[$className] ?? $this->getProxyFactory($className); - - return $proxyFactory($identifier); - } - - /** - * Generates proxy classes for all given classes. - * - * @param ClassMetadata[] $classes The classes (ClassMetadata instances) for which to generate proxies. - * @param string|null $proxyDir The target directory of the proxy classes. If not specified, the - * directory configured on the Configuration of the EntityManager used - * by this factory is used. - * - * @return int Number of generated proxies. - */ - public function generateProxyClasses(array $classes, string|null $proxyDir = null): int - { - $generated = 0; - - foreach ($classes as $class) { - if ($this->skipClass($class)) { - continue; - } - - $proxyFileName = $this->getProxyFileName($class->getName(), $proxyDir ?: $this->proxyDir); - $proxyClassName = self::generateProxyClassName($class->getName(), $this->proxyNs); - - $this->generateProxyClass($class, $proxyFileName, $proxyClassName); - - ++$generated; - } - - return $generated; - } - - protected function skipClass(ClassMetadata $metadata): bool - { - return $metadata->isMappedSuperclass - || $metadata->isEmbeddedClass - || $metadata->getReflectionClass()->isAbstract(); - } - - /** - * Creates a closure capable of initializing a proxy - * - * @return Closure(InternalProxy, array):void - * - * @throws EntityNotFoundException - */ - private function createLazyInitializer(ClassMetadata $classMetadata, EntityPersister $entityPersister, IdentifierFlattener $identifierFlattener): Closure - { - return static function (InternalProxy $proxy, array $identifier) use ($entityPersister, $classMetadata, $identifierFlattener): void { - $original = $entityPersister->loadById($identifier); - - if ($original === null) { - throw EntityNotFoundException::fromClassNameAndIdentifier( - $classMetadata->getName(), - $identifierFlattener->flattenIdentifier($classMetadata, $identifier), - ); - } - - if ($proxy === $original) { - return; - } - - $class = $entityPersister->getClassMetadata(); - - foreach ($class->getReflectionProperties() as $property) { - if (! $property || isset($identifier[$property->getName()]) || ! $class->hasField($property->getName()) && ! $class->hasAssociation($property->getName())) { - continue; - } - - $property->setValue($proxy, $property->getValue($original)); - } - }; - } - - private function getProxyFileName(string $className, string $baseDirectory): string - { - $baseDirectory = $baseDirectory ?: $this->proxyDir; - - return rtrim($baseDirectory, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . InternalProxy::MARKER - . str_replace('\\', '', $className) . '.php'; - } - - private function getProxyFactory(string $className): Closure - { - $skippedProperties = []; - $class = $this->em->getClassMetadata($className); - $identifiers = array_flip($class->getIdentifierFieldNames()); - $filter = ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED | ReflectionProperty::IS_PRIVATE; - $reflector = $class->getReflectionClass(); - - while ($reflector) { - foreach ($reflector->getProperties($filter) as $property) { - $name = $property->name; - - if ($property->isStatic() || (($class->hasField($name) || $class->hasAssociation($name)) && ! isset($identifiers[$name]))) { - continue; - } - - $prefix = $property->isPrivate() ? "\0" . $property->class . "\0" : ($property->isProtected() ? "\0*\0" : ''); - - $skippedProperties[$prefix . $name] = true; - } - - $filter = ReflectionProperty::IS_PRIVATE; - $reflector = $reflector->getParentClass(); - } - - $className = $class->getName(); // aliases and case sensitivity - $entityPersister = $this->uow->getEntityPersister($className); - $initializer = $this->createLazyInitializer($class, $entityPersister, $this->identifierFlattener); - $proxyClassName = $this->loadProxyClass($class); - $identifierFields = array_intersect_key($class->getReflectionProperties(), $identifiers); - - $proxyFactory = Closure::bind(static function (array $identifier) use ($initializer, $skippedProperties, $identifierFields, $className): InternalProxy { - $proxy = self::createLazyGhost(static function (InternalProxy $object) use ($initializer, $identifier): void { - $initializer($object, $identifier); - }, $skippedProperties); - - foreach ($identifierFields as $idField => $reflector) { - if (! isset($identifier[$idField])) { - throw ORMInvalidArgumentException::missingPrimaryKeyValue($className, $idField); - } - - assert($reflector !== null); - $reflector->setValue($proxy, $identifier[$idField]); - } - - return $proxy; - }, null, $proxyClassName); - - return $this->proxyFactories[$className] = $proxyFactory; - } - - private function loadProxyClass(ClassMetadata $class): string - { - $proxyClassName = self::generateProxyClassName($class->getName(), $this->proxyNs); - - if (class_exists($proxyClassName, false)) { - return $proxyClassName; - } - - if ($this->autoGenerate === self::AUTOGENERATE_EVAL) { - $this->generateProxyClass($class, null, $proxyClassName); - - return $proxyClassName; - } - - $fileName = $this->getProxyFileName($class->getName(), $this->proxyDir); - - switch ($this->autoGenerate) { - case self::AUTOGENERATE_FILE_NOT_EXISTS_OR_CHANGED: - if (file_exists($fileName) && filemtime($fileName) >= filemtime($class->getReflectionClass()->getFileName())) { - break; - } - // no break - case self::AUTOGENERATE_FILE_NOT_EXISTS: - if (file_exists($fileName)) { - break; - } - // no break - case self::AUTOGENERATE_ALWAYS: - $this->generateProxyClass($class, $fileName, $proxyClassName); - break; - } - - require $fileName; - - return $proxyClassName; - } - - private function generateProxyClass(ClassMetadata $class, string|null $fileName, string $proxyClassName): void - { - $i = strrpos($proxyClassName, '\\'); - $placeholders = [ - '' => $class->getName(), - '' => substr($proxyClassName, 0, $i), - '' => substr($proxyClassName, 1 + $i), - '' => InternalProxy::class, - ]; - - preg_match_all('(<([a-zA-Z]+)>)', self::PROXY_CLASS_TEMPLATE, $placeholderMatches); - - foreach (array_combine($placeholderMatches[0], $placeholderMatches[1]) as $placeholder => $name) { - $placeholders[$placeholder] ?? $placeholders[$placeholder] = $this->{'generate' . ucfirst($name)}($class); - } - - $proxyCode = strtr(self::PROXY_CLASS_TEMPLATE, $placeholders); - - if (! $fileName) { - if (! class_exists($proxyClassName)) { - eval(substr($proxyCode, 5)); - } - - return; - } - - $parentDirectory = dirname($fileName); - - if (! is_dir($parentDirectory) && ! @mkdir($parentDirectory, 0775, true)) { - throw ORMInvalidArgumentException::proxyDirectoryNotWritable($this->proxyDir); - } - - if (! is_writable($parentDirectory)) { - throw ORMInvalidArgumentException::proxyDirectoryNotWritable($this->proxyDir); - } - - $tmpFileName = $fileName . '.' . bin2hex(random_bytes(12)); - - file_put_contents($tmpFileName, $proxyCode); - @chmod($tmpFileName, 0664); - rename($tmpFileName, $fileName); - } - - private function generateUseLazyGhostTrait(ClassMetadata $class): string - { - $code = ProxyHelper::generateLazyGhost($class->getReflectionClass()); - $code = substr($code, 7 + (int) strpos($code, "\n{")); - $code = substr($code, 0, (int) strpos($code, "\n}")); - $code = str_replace('LazyGhostTrait;', str_replace("\n ", "\n", 'LazyGhostTrait { - initializeLazyObject as private; - setLazyObjectAsInitialized as public __setInitialized; - isLazyObjectInitialized as private; - createLazyGhost as private; - resetLazyObject as private; - } - - public function __load(): void - { - $this->initializeLazyObject(); - } - '), $code); - - return $code; - } - - private function generateSerializeImpl(ClassMetadata $class): string - { - $reflector = $class->getReflectionClass(); - $properties = $reflector->hasMethod('__serialize') ? 'parent::__serialize()' : '(array) $this'; - - $code = '$properties = ' . $properties . '; - unset($properties["\0" . self::class . "\0lazyObjectState"]); - - '; - - if ($reflector->hasMethod('__serialize') || ! $reflector->hasMethod('__sleep')) { - return $code . 'return $properties;'; - } - - return $code . '$data = []; - - foreach (parent::__sleep() as $name) { - $value = $properties[$k = $name] ?? $properties[$k = "\0*\0$name"] ?? $properties[$k = "\0' . $reflector->name . '\0$name"] ?? $k = null; - - if (null === $k) { - trigger_error(sprintf(\'serialize(): "%s" returned as member variable from __sleep() but does not exist\', $name), \E_USER_NOTICE); - } else { - $data[$k] = $value; - } - } - - return $data;'; - } - - private static function generateProxyClassName(string $className, string $proxyNamespace): string - { - return rtrim($proxyNamespace, '\\') . '\\' . Proxy::MARKER . '\\' . ltrim($className, '\\'); - } -} diff --git a/vendor/doctrine/orm/src/Query.php b/vendor/doctrine/orm/src/Query.php deleted file mode 100644 index a869316..0000000 --- a/vendor/doctrine/orm/src/Query.php +++ /dev/null @@ -1,682 +0,0 @@ - - */ - private array $parsedTypes = []; - - /** - * Cached DQL query. - */ - private string|null $dql = null; - - /** - * The parser result that holds DQL => SQL information. - */ - private ParserResult $parserResult; - - /** - * The first result to return (the "offset"). - */ - private int $firstResult = 0; - - /** - * The maximum number of results to return (the "limit"). - */ - private int|null $maxResults = null; - - /** - * The cache driver used for caching queries. - */ - private CacheItemPoolInterface|null $queryCache = null; - - /** - * Whether or not expire the query cache. - */ - private bool $expireQueryCache = false; - - /** - * The query cache lifetime. - */ - private int|null $queryCacheTTL = null; - - /** - * Whether to use a query cache, if available. Defaults to TRUE. - */ - private bool $useQueryCache = true; - - /** - * Gets the SQL query/queries that correspond to this DQL query. - * - * @return list|string The built sql query or an array of all sql queries. - */ - public function getSQL(): string|array - { - return $this->parse()->getSqlExecutor()->getSqlStatements(); - } - - /** - * Returns the corresponding AST for this DQL query. - */ - public function getAST(): SelectStatement|UpdateStatement|DeleteStatement - { - $parser = new Parser($this); - - return $parser->getAST(); - } - - protected function getResultSetMapping(): ResultSetMapping - { - // parse query or load from cache - if ($this->resultSetMapping === null) { - $this->resultSetMapping = $this->parse()->getResultSetMapping(); - } - - return $this->resultSetMapping; - } - - /** - * Parses the DQL query, if necessary, and stores the parser result. - * - * Note: Populates $this->_parserResult as a side-effect. - */ - private function parse(): ParserResult - { - $types = []; - - foreach ($this->parameters as $parameter) { - /** @var Query\Parameter $parameter */ - $types[$parameter->getName()] = $parameter->getType(); - } - - // Return previous parser result if the query and the filter collection are both clean - if ($this->state === self::STATE_CLEAN && $this->parsedTypes === $types && $this->em->isFiltersStateClean()) { - return $this->parserResult; - } - - $this->state = self::STATE_CLEAN; - $this->parsedTypes = $types; - - $queryCache = $this->queryCache ?? $this->em->getConfiguration()->getQueryCache(); - // Check query cache. - if (! ($this->useQueryCache && $queryCache)) { - $parser = new Parser($this); - - $this->parserResult = $parser->parse(); - - return $this->parserResult; - } - - $cacheItem = $queryCache->getItem($this->getQueryCacheId()); - - if (! $this->expireQueryCache && $cacheItem->isHit()) { - $cached = $cacheItem->get(); - if ($cached instanceof ParserResult) { - // Cache hit. - $this->parserResult = $cached; - - return $this->parserResult; - } - } - - // Cache miss. - $parser = new Parser($this); - - $this->parserResult = $parser->parse(); - - $queryCache->save($cacheItem->set($this->parserResult)->expiresAfter($this->queryCacheTTL)); - - return $this->parserResult; - } - - protected function _doExecute(): Result|int - { - $executor = $this->parse()->getSqlExecutor(); - - if ($this->queryCacheProfile) { - $executor->setQueryCacheProfile($this->queryCacheProfile); - } else { - $executor->removeQueryCacheProfile(); - } - - if ($this->resultSetMapping === null) { - $this->resultSetMapping = $this->parserResult->getResultSetMapping(); - } - - // Prepare parameters - $paramMappings = $this->parserResult->getParameterMappings(); - $paramCount = count($this->parameters); - $mappingCount = count($paramMappings); - - if ($paramCount > $mappingCount) { - throw QueryException::tooManyParameters($mappingCount, $paramCount); - } - - if ($paramCount < $mappingCount) { - throw QueryException::tooFewParameters($mappingCount, $paramCount); - } - - // evict all cache for the entity region - if ($this->hasCache && isset($this->hints[self::HINT_CACHE_EVICT]) && $this->hints[self::HINT_CACHE_EVICT]) { - $this->evictEntityCacheRegion(); - } - - [$sqlParams, $types] = $this->processParameterMappings($paramMappings); - - $this->evictResultSetCache( - $executor, - $sqlParams, - $types, - $this->em->getConnection()->getParams(), - ); - - return $executor->execute($this->em->getConnection(), $sqlParams, $types); - } - - /** - * @param array $sqlParams - * @param array $types - * @param array $connectionParams - */ - private function evictResultSetCache( - AbstractSqlExecutor $executor, - array $sqlParams, - array $types, - array $connectionParams, - ): void { - if ($this->queryCacheProfile === null || ! $this->getExpireResultCache()) { - return; - } - - $cache = $this->queryCacheProfile->getResultCache(); - - assert($cache !== null); - - $statements = (array) $executor->getSqlStatements(); // Type casted since it can either be a string or an array - - foreach ($statements as $statement) { - $cacheKeys = $this->queryCacheProfile->generateCacheKeys($statement, $sqlParams, $types, $connectionParams); - $cache->deleteItem(reset($cacheKeys)); - } - } - - /** - * Evict entity cache region - */ - private function evictEntityCacheRegion(): void - { - $AST = $this->getAST(); - - if ($AST instanceof SelectStatement) { - throw new QueryException('The hint "HINT_CACHE_EVICT" is not valid for select statements.'); - } - - $className = $AST instanceof DeleteStatement - ? $AST->deleteClause->abstractSchemaName - : $AST->updateClause->abstractSchemaName; - - $this->em->getCache()->evictEntityRegion($className); - } - - /** - * Processes query parameter mappings. - * - * @param array> $paramMappings - * - * @return mixed[][] - * @psalm-return array{0: list, 1: array} - * - * @throws Query\QueryException - */ - private function processParameterMappings(array $paramMappings): array - { - $sqlParams = []; - $types = []; - - foreach ($this->parameters as $parameter) { - $key = $parameter->getName(); - - if (! isset($paramMappings[$key])) { - throw QueryException::unknownParameter($key); - } - - [$value, $type] = $this->resolveParameterValue($parameter); - - foreach ($paramMappings[$key] as $position) { - $types[$position] = $type; - } - - $sqlPositions = $paramMappings[$key]; - - // optimized multi value sql positions away for now, - // they are not allowed in DQL anyways. - $value = [$value]; - $countValue = count($value); - - for ($i = 0, $l = count($sqlPositions); $i < $l; $i++) { - $sqlParams[$sqlPositions[$i]] = $value[$i % $countValue]; - } - } - - if (count($sqlParams) !== count($types)) { - throw QueryException::parameterTypeMismatch(); - } - - if ($sqlParams) { - ksort($sqlParams); - $sqlParams = array_values($sqlParams); - - ksort($types); - $types = array_values($types); - } - - return [$sqlParams, $types]; - } - - /** - * @return mixed[] tuple of (value, type) - * @psalm-return array{0: mixed, 1: mixed} - */ - private function resolveParameterValue(Parameter $parameter): array - { - if ($parameter->typeWasSpecified()) { - return [$parameter->getValue(), $parameter->getType()]; - } - - $key = $parameter->getName(); - $originalValue = $parameter->getValue(); - $value = $originalValue; - $rsm = $this->getResultSetMapping(); - - if ($value instanceof ClassMetadata && isset($rsm->metadataParameterMapping[$key])) { - $value = $value->getMetadataValue($rsm->metadataParameterMapping[$key]); - } - - if ($value instanceof ClassMetadata && isset($rsm->discriminatorParameters[$key])) { - $value = array_keys(HierarchyDiscriminatorResolver::resolveDiscriminatorsForClass($value, $this->em)); - } - - $processedValue = $this->processParameterValue($value); - - return [ - $processedValue, - $originalValue === $processedValue - ? $parameter->getType() - : ParameterTypeInferer::inferType($processedValue), - ]; - } - - /** - * Defines a cache driver to be used for caching queries. - * - * @return $this - */ - public function setQueryCache(CacheItemPoolInterface|null $queryCache): self - { - $this->queryCache = $queryCache; - - return $this; - } - - /** - * Defines whether the query should make use of a query cache, if available. - * - * @return $this - */ - public function useQueryCache(bool $bool): self - { - $this->useQueryCache = $bool; - - return $this; - } - - /** - * Defines how long the query cache will be active before expire. - * - * @param int|null $timeToLive How long the cache entry is valid. - * - * @return $this - */ - public function setQueryCacheLifetime(int|null $timeToLive): self - { - $this->queryCacheTTL = $timeToLive; - - return $this; - } - - /** - * Retrieves the lifetime of resultset cache. - */ - public function getQueryCacheLifetime(): int|null - { - return $this->queryCacheTTL; - } - - /** - * Defines if the query cache is active or not. - * - * @return $this - */ - public function expireQueryCache(bool $expire = true): self - { - $this->expireQueryCache = $expire; - - return $this; - } - - /** - * Retrieves if the query cache is active or not. - */ - public function getExpireQueryCache(): bool - { - return $this->expireQueryCache; - } - - public function free(): void - { - parent::free(); - - $this->dql = null; - $this->state = self::STATE_CLEAN; - } - - /** - * Sets a DQL query string. - */ - public function setDQL(string $dqlQuery): self - { - $this->dql = $dqlQuery; - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Returns the DQL query that is represented by this query object. - */ - public function getDQL(): string|null - { - return $this->dql; - } - - /** - * Returns the state of this query object - * By default the type is Doctrine_ORM_Query_Abstract::STATE_CLEAN but if it appears any unprocessed DQL - * part, it is switched to Doctrine_ORM_Query_Abstract::STATE_DIRTY. - * - * @see AbstractQuery::STATE_CLEAN - * @see AbstractQuery::STATE_DIRTY - * - * @return int The query state. - * @psalm-return self::STATE_* The query state. - */ - public function getState(): int - { - return $this->state; - } - - /** - * Method to check if an arbitrary piece of DQL exists - * - * @param string $dql Arbitrary piece of DQL to check for. - */ - public function contains(string $dql): bool - { - return stripos($this->getDQL(), $dql) !== false; - } - - /** - * Sets the position of the first result to retrieve (the "offset"). - * - * @param int $firstResult The first result to return. - * - * @return $this - */ - public function setFirstResult(int $firstResult): self - { - $this->firstResult = $firstResult; - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Gets the position of the first result the query object was set to retrieve (the "offset"). - * Returns 0 if {@link setFirstResult} was not applied to this query. - * - * @return int The position of the first result. - */ - public function getFirstResult(): int - { - return $this->firstResult; - } - - /** - * Sets the maximum number of results to retrieve (the "limit"). - * - * @return $this - */ - public function setMaxResults(int|null $maxResults): self - { - $this->maxResults = $maxResults; - $this->state = self::STATE_DIRTY; - - return $this; - } - - /** - * Gets the maximum number of results the query object was set to retrieve (the "limit"). - * Returns NULL if {@link setMaxResults} was not applied to this query. - * - * @return int|null Maximum number of results. - */ - public function getMaxResults(): int|null - { - return $this->maxResults; - } - - /** {@inheritDoc} */ - public function toIterable(iterable $parameters = [], $hydrationMode = self::HYDRATE_OBJECT): iterable - { - $this->setHint(self::HINT_INTERNAL_ITERATION, true); - - return parent::toIterable($parameters, $hydrationMode); - } - - public function setHint(string $name, mixed $value): static - { - $this->state = self::STATE_DIRTY; - - return parent::setHint($name, $value); - } - - public function setHydrationMode(string|int $hydrationMode): static - { - $this->state = self::STATE_DIRTY; - - return parent::setHydrationMode($hydrationMode); - } - - /** - * Set the lock mode for this Query. - * - * @see \Doctrine\DBAL\LockMode - * - * @psalm-param LockMode::* $lockMode - * - * @return $this - * - * @throws TransactionRequiredException - */ - public function setLockMode(LockMode|int $lockMode): self - { - if (in_array($lockMode, [LockMode::NONE, LockMode::PESSIMISTIC_READ, LockMode::PESSIMISTIC_WRITE], true)) { - if (! $this->em->getConnection()->isTransactionActive()) { - throw TransactionRequiredException::transactionRequired(); - } - } - - $this->setHint(self::HINT_LOCK_MODE, $lockMode); - - return $this; - } - - /** - * Get the current lock mode for this query. - * - * @return LockMode|int|null The current lock mode of this query or NULL if no specific lock mode is set. - * @psalm-return LockMode::*|null - */ - public function getLockMode(): LockMode|int|null - { - $lockMode = $this->getHint(self::HINT_LOCK_MODE); - - if ($lockMode === false) { - return null; - } - - return $lockMode; - } - - /** - * Generate a cache id for the query cache - reusing the Result-Cache-Id generator. - */ - protected function getQueryCacheId(): string - { - ksort($this->hints); - - return md5( - $this->getDQL() . serialize($this->hints) . - '&platform=' . get_debug_type($this->getEntityManager()->getConnection()->getDatabasePlatform()) . - ($this->em->hasFilters() ? $this->em->getFilters()->getHash() : '') . - '&firstResult=' . $this->firstResult . '&maxResult=' . $this->maxResults . - '&hydrationMode=' . $this->hydrationMode . '&types=' . serialize($this->parsedTypes) . 'DOCTRINE_QUERY_CACHE_SALT', - ); - } - - protected function getHash(): string - { - return sha1(parent::getHash() . '-' . $this->firstResult . '-' . $this->maxResults); - } - - /** - * Cleanup Query resource when clone is called. - */ - public function __clone() - { - parent::__clone(); - - $this->state = self::STATE_DIRTY; - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ASTException.php b/vendor/doctrine/orm/src/Query/AST/ASTException.php deleted file mode 100644 index 1ef890a..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ASTException.php +++ /dev/null @@ -1,20 +0,0 @@ -walkAggregateExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ArithmeticExpression.php b/vendor/doctrine/orm/src/Query/AST/ArithmeticExpression.php deleted file mode 100644 index a819e05..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ArithmeticExpression.php +++ /dev/null @@ -1,34 +0,0 @@ -simpleArithmeticExpression; - } - - public function isSubselect(): bool - { - return (bool) $this->subselect; - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkArithmeticExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ArithmeticFactor.php b/vendor/doctrine/orm/src/Query/AST/ArithmeticFactor.php deleted file mode 100644 index 278a921..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ArithmeticFactor.php +++ /dev/null @@ -1,36 +0,0 @@ -sign === true; - } - - public function isNegativeSigned(): bool - { - return $this->sign === false; - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkArithmeticFactor($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ArithmeticTerm.php b/vendor/doctrine/orm/src/Query/AST/ArithmeticTerm.php deleted file mode 100644 index b233612..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ArithmeticTerm.php +++ /dev/null @@ -1,25 +0,0 @@ -walkArithmeticTerm($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/BetweenExpression.php b/vendor/doctrine/orm/src/Query/AST/BetweenExpression.php deleted file mode 100644 index c13292b..0000000 --- a/vendor/doctrine/orm/src/Query/AST/BetweenExpression.php +++ /dev/null @@ -1,23 +0,0 @@ -walkBetweenExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/CoalesceExpression.php b/vendor/doctrine/orm/src/Query/AST/CoalesceExpression.php deleted file mode 100644 index 89f025f..0000000 --- a/vendor/doctrine/orm/src/Query/AST/CoalesceExpression.php +++ /dev/null @@ -1,25 +0,0 @@ -walkCoalesceExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/CollectionMemberExpression.php b/vendor/doctrine/orm/src/Query/AST/CollectionMemberExpression.php deleted file mode 100644 index a62a191..0000000 --- a/vendor/doctrine/orm/src/Query/AST/CollectionMemberExpression.php +++ /dev/null @@ -1,27 +0,0 @@ -walkCollectionMemberExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ComparisonExpression.php b/vendor/doctrine/orm/src/Query/AST/ComparisonExpression.php deleted file mode 100644 index a7d91f9..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ComparisonExpression.php +++ /dev/null @@ -1,32 +0,0 @@ -" | "!=") (BooleanExpression | QuantifiedExpression) | - * EnumExpression ("=" | "<>" | "!=") (EnumExpression | QuantifiedExpression) | - * DatetimeExpression ComparisonOperator (DatetimeExpression | QuantifiedExpression) | - * EntityExpression ("=" | "<>") (EntityExpression | QuantifiedExpression) - * - * @link www.doctrine-project.org - */ -class ComparisonExpression extends Node -{ - public function __construct( - public Node|string $leftExpression, - public string $operator, - public Node|string $rightExpression, - ) { - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkComparisonExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ConditionalExpression.php b/vendor/doctrine/orm/src/Query/AST/ConditionalExpression.php deleted file mode 100644 index 26a98e5..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ConditionalExpression.php +++ /dev/null @@ -1,25 +0,0 @@ -walkConditionalExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ConditionalFactor.php b/vendor/doctrine/orm/src/Query/AST/ConditionalFactor.php deleted file mode 100644 index 7881743..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ConditionalFactor.php +++ /dev/null @@ -1,26 +0,0 @@ -walkConditionalFactor($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ConditionalPrimary.php b/vendor/doctrine/orm/src/Query/AST/ConditionalPrimary.php deleted file mode 100644 index 9344cd9..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ConditionalPrimary.php +++ /dev/null @@ -1,34 +0,0 @@ -simpleConditionalExpression; - } - - public function isConditionalExpression(): bool - { - return (bool) $this->conditionalExpression; - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkConditionalPrimary($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ConditionalTerm.php b/vendor/doctrine/orm/src/Query/AST/ConditionalTerm.php deleted file mode 100644 index dcea50b..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ConditionalTerm.php +++ /dev/null @@ -1,25 +0,0 @@ -walkConditionalTerm($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/DeleteClause.php b/vendor/doctrine/orm/src/Query/AST/DeleteClause.php deleted file mode 100644 index 25e9085..0000000 --- a/vendor/doctrine/orm/src/Query/AST/DeleteClause.php +++ /dev/null @@ -1,26 +0,0 @@ -walkDeleteClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/DeleteStatement.php b/vendor/doctrine/orm/src/Query/AST/DeleteStatement.php deleted file mode 100644 index f367d09..0000000 --- a/vendor/doctrine/orm/src/Query/AST/DeleteStatement.php +++ /dev/null @@ -1,26 +0,0 @@ -walkDeleteStatement($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/EmptyCollectionComparisonExpression.php b/vendor/doctrine/orm/src/Query/AST/EmptyCollectionComparisonExpression.php deleted file mode 100644 index 9978800..0000000 --- a/vendor/doctrine/orm/src/Query/AST/EmptyCollectionComparisonExpression.php +++ /dev/null @@ -1,26 +0,0 @@ -walkEmptyCollectionComparisonExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ExistsExpression.php b/vendor/doctrine/orm/src/Query/AST/ExistsExpression.php deleted file mode 100644 index 72757f4..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ExistsExpression.php +++ /dev/null @@ -1,26 +0,0 @@ -walkExistsExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/FromClause.php b/vendor/doctrine/orm/src/Query/AST/FromClause.php deleted file mode 100644 index 0b74393..0000000 --- a/vendor/doctrine/orm/src/Query/AST/FromClause.php +++ /dev/null @@ -1,25 +0,0 @@ -walkFromClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/AbsFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/AbsFunction.php deleted file mode 100644 index 4edff06..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/AbsFunction.php +++ /dev/null @@ -1,37 +0,0 @@ -walkSimpleArithmeticExpression( - $this->simpleArithmeticExpression, - ) . ')'; - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->simpleArithmeticExpression = $parser->SimpleArithmeticExpression(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/AvgFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/AvgFunction.php deleted file mode 100644 index ba7b7f3..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/AvgFunction.php +++ /dev/null @@ -1,27 +0,0 @@ -aggregateExpression->dispatch($sqlWalker); - } - - public function parse(Parser $parser): void - { - $this->aggregateExpression = $parser->AggregateExpression(); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/BitAndFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/BitAndFunction.php deleted file mode 100644 index f2d3146..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/BitAndFunction.php +++ /dev/null @@ -1,43 +0,0 @@ -getConnection()->getDatabasePlatform(); - - return $platform->getBitAndComparisonExpression( - $this->firstArithmetic->dispatch($sqlWalker), - $this->secondArithmetic->dispatch($sqlWalker), - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->firstArithmetic = $parser->ArithmeticPrimary(); - $parser->match(TokenType::T_COMMA); - $this->secondArithmetic = $parser->ArithmeticPrimary(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/BitOrFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/BitOrFunction.php deleted file mode 100644 index f3f84da..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/BitOrFunction.php +++ /dev/null @@ -1,43 +0,0 @@ -getConnection()->getDatabasePlatform(); - - return $platform->getBitOrComparisonExpression( - $this->firstArithmetic->dispatch($sqlWalker), - $this->secondArithmetic->dispatch($sqlWalker), - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->firstArithmetic = $parser->ArithmeticPrimary(); - $parser->match(TokenType::T_COMMA); - $this->secondArithmetic = $parser->ArithmeticPrimary(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/ConcatFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/ConcatFunction.php deleted file mode 100644 index 5b8d696..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/ConcatFunction.php +++ /dev/null @@ -1,58 +0,0 @@ - */ - public array $concatExpressions = []; - - public function getSql(SqlWalker $sqlWalker): string - { - $platform = $sqlWalker->getConnection()->getDatabasePlatform(); - - $args = []; - - foreach ($this->concatExpressions as $expression) { - $args[] = $sqlWalker->walkStringPrimary($expression); - } - - return $platform->getConcatExpression(...$args); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->firstStringPrimary = $parser->StringPrimary(); - $this->concatExpressions[] = $this->firstStringPrimary; - - $parser->match(TokenType::T_COMMA); - - $this->secondStringPrimary = $parser->StringPrimary(); - $this->concatExpressions[] = $this->secondStringPrimary; - - while ($parser->getLexer()->isNextToken(TokenType::T_COMMA)) { - $parser->match(TokenType::T_COMMA); - $this->concatExpressions[] = $parser->StringPrimary(); - } - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/CountFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/CountFunction.php deleted file mode 100644 index dc926a5..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/CountFunction.php +++ /dev/null @@ -1,35 +0,0 @@ -aggregateExpression->dispatch($sqlWalker); - } - - public function parse(Parser $parser): void - { - $this->aggregateExpression = $parser->AggregateExpression(); - } - - public function getReturnType(): Type - { - return Type::getType(Types::INTEGER); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/CurrentDateFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/CurrentDateFunction.php deleted file mode 100644 index cec9632..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/CurrentDateFunction.php +++ /dev/null @@ -1,29 +0,0 @@ -getConnection()->getDatabasePlatform()->getCurrentDateSQL(); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/CurrentTimeFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/CurrentTimeFunction.php deleted file mode 100644 index 6473fce..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/CurrentTimeFunction.php +++ /dev/null @@ -1,29 +0,0 @@ -getConnection()->getDatabasePlatform()->getCurrentTimeSQL(); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/CurrentTimestampFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/CurrentTimestampFunction.php deleted file mode 100644 index edcd27c..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/CurrentTimestampFunction.php +++ /dev/null @@ -1,29 +0,0 @@ -getConnection()->getDatabasePlatform()->getCurrentTimestampSQL(); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/DateAddFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/DateAddFunction.php deleted file mode 100644 index 12920dc..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/DateAddFunction.php +++ /dev/null @@ -1,83 +0,0 @@ -unit->value)) { - 'second' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddSecondsExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'minute' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddMinutesExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'hour' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddHourExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'day' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddDaysExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'week' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddWeeksExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'month' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddMonthExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'year' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateAddYearsExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - default => throw QueryException::semanticalError( - 'DATE_ADD() only supports units of type second, minute, hour, day, week, month and year.', - ), - }; - } - - /** @throws ASTException */ - private function dispatchIntervalExpression(SqlWalker $sqlWalker): string - { - return $this->intervalExpression->dispatch($sqlWalker); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->firstDateExpression = $parser->ArithmeticPrimary(); - $parser->match(TokenType::T_COMMA); - $this->intervalExpression = $parser->ArithmeticPrimary(); - $parser->match(TokenType::T_COMMA); - $this->unit = $parser->StringPrimary(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/DateDiffFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/DateDiffFunction.php deleted file mode 100644 index 55598c0..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/DateDiffFunction.php +++ /dev/null @@ -1,41 +0,0 @@ -getConnection()->getDatabasePlatform()->getDateDiffExpression( - $this->date1->dispatch($sqlWalker), - $this->date2->dispatch($sqlWalker), - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->date1 = $parser->ArithmeticPrimary(); - $parser->match(TokenType::T_COMMA); - $this->date2 = $parser->ArithmeticPrimary(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/DateSubFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/DateSubFunction.php deleted file mode 100644 index 5363680..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/DateSubFunction.php +++ /dev/null @@ -1,62 +0,0 @@ -unit->value)) { - 'second' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubSecondsExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'minute' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubMinutesExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'hour' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubHourExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'day' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubDaysExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'week' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubWeeksExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'month' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubMonthExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - 'year' => $sqlWalker->getConnection()->getDatabasePlatform()->getDateSubYearsExpression( - $this->firstDateExpression->dispatch($sqlWalker), - $this->dispatchIntervalExpression($sqlWalker), - ), - default => throw QueryException::semanticalError( - 'DATE_SUB() only supports units of type second, minute, hour, day, week, month and year.', - ), - }; - } - - /** @throws ASTException */ - private function dispatchIntervalExpression(SqlWalker $sqlWalker): string - { - return $this->intervalExpression->dispatch($sqlWalker); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/FunctionNode.php b/vendor/doctrine/orm/src/Query/AST/Functions/FunctionNode.php deleted file mode 100644 index 4cc549e..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/FunctionNode.php +++ /dev/null @@ -1,32 +0,0 @@ -walkFunction($this); - } - - abstract public function parse(Parser $parser): void; -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/IdentityFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/IdentityFunction.php deleted file mode 100644 index 1dd1bf5..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/IdentityFunction.php +++ /dev/null @@ -1,90 +0,0 @@ -pathExpression->field !== null); - $entityManager = $sqlWalker->getEntityManager(); - $platform = $entityManager->getConnection()->getDatabasePlatform(); - $quoteStrategy = $entityManager->getConfiguration()->getQuoteStrategy(); - $dqlAlias = $this->pathExpression->identificationVariable; - $assocField = $this->pathExpression->field; - $assoc = $sqlWalker->getMetadataForDqlAlias($dqlAlias)->associationMappings[$assocField]; - $targetEntity = $entityManager->getClassMetadata($assoc->targetEntity); - - assert($assoc->isToOneOwningSide()); - $joinColumn = reset($assoc->joinColumns); - - if ($this->fieldMapping !== null) { - if (! isset($targetEntity->fieldMappings[$this->fieldMapping])) { - throw new QueryException(sprintf('Undefined reference field mapping "%s"', $this->fieldMapping)); - } - - $field = $targetEntity->fieldMappings[$this->fieldMapping]; - $joinColumn = null; - - foreach ($assoc->joinColumns as $mapping) { - if ($mapping->referencedColumnName === $field->columnName) { - $joinColumn = $mapping; - - break; - } - } - - if ($joinColumn === null) { - throw new QueryException(sprintf('Unable to resolve the reference field mapping "%s"', $this->fieldMapping)); - } - } - - // The table with the relation may be a subclass, so get the table name from the association definition - $tableName = $entityManager->getClassMetadata($assoc->sourceEntity)->getTableName(); - - $tableAlias = $sqlWalker->getSQLTableAlias($tableName, $dqlAlias); - $columnName = $quoteStrategy->getJoinColumnName($joinColumn, $targetEntity, $platform); - - return $tableAlias . '.' . $columnName; - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->pathExpression = $parser->SingleValuedAssociationPathExpression(); - - if ($parser->getLexer()->isNextToken(TokenType::T_COMMA)) { - $parser->match(TokenType::T_COMMA); - $parser->match(TokenType::T_STRING); - - $token = $parser->getLexer()->token; - assert($token !== null); - $this->fieldMapping = $token->value; - } - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/LengthFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/LengthFunction.php deleted file mode 100644 index 3994918..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/LengthFunction.php +++ /dev/null @@ -1,45 +0,0 @@ -getConnection()->getDatabasePlatform()->getLengthExpression( - $sqlWalker->walkSimpleArithmeticExpression($this->stringPrimary), - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->stringPrimary = $parser->StringPrimary(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } - - public function getReturnType(): Type - { - return Type::getType(Types::INTEGER); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/LocateFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/LocateFunction.php deleted file mode 100644 index c0d3b4a..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/LocateFunction.php +++ /dev/null @@ -1,62 +0,0 @@ -getConnection()->getDatabasePlatform(); - - $firstString = $sqlWalker->walkStringPrimary($this->firstStringPrimary); - $secondString = $sqlWalker->walkStringPrimary($this->secondStringPrimary); - - if ($this->simpleArithmeticExpression) { - return $platform->getLocateExpression( - $secondString, - $firstString, - $sqlWalker->walkSimpleArithmeticExpression($this->simpleArithmeticExpression), - ); - } - - return $platform->getLocateExpression($secondString, $firstString); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->firstStringPrimary = $parser->StringPrimary(); - - $parser->match(TokenType::T_COMMA); - - $this->secondStringPrimary = $parser->StringPrimary(); - - $lexer = $parser->getLexer(); - if ($lexer->isNextToken(TokenType::T_COMMA)) { - $parser->match(TokenType::T_COMMA); - - $this->simpleArithmeticExpression = $parser->SimpleArithmeticExpression(); - } - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/LowerFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/LowerFunction.php deleted file mode 100644 index 8ae337a..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/LowerFunction.php +++ /dev/null @@ -1,40 +0,0 @@ -walkSimpleArithmeticExpression($this->stringPrimary), - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->stringPrimary = $parser->StringPrimary(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/MaxFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/MaxFunction.php deleted file mode 100644 index 8a6eecf..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/MaxFunction.php +++ /dev/null @@ -1,27 +0,0 @@ -aggregateExpression->dispatch($sqlWalker); - } - - public function parse(Parser $parser): void - { - $this->aggregateExpression = $parser->AggregateExpression(); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/MinFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/MinFunction.php deleted file mode 100644 index 98d73a2..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/MinFunction.php +++ /dev/null @@ -1,27 +0,0 @@ -aggregateExpression->dispatch($sqlWalker); - } - - public function parse(Parser $parser): void - { - $this->aggregateExpression = $parser->AggregateExpression(); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/ModFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/ModFunction.php deleted file mode 100644 index 7c1af0b..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/ModFunction.php +++ /dev/null @@ -1,43 +0,0 @@ -getConnection()->getDatabasePlatform()->getModExpression( - $sqlWalker->walkSimpleArithmeticExpression($this->firstSimpleArithmeticExpression), - $sqlWalker->walkSimpleArithmeticExpression($this->secondSimpleArithmeticExpression), - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->firstSimpleArithmeticExpression = $parser->SimpleArithmeticExpression(); - - $parser->match(TokenType::T_COMMA); - - $this->secondSimpleArithmeticExpression = $parser->SimpleArithmeticExpression(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/SizeFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/SizeFunction.php deleted file mode 100644 index 87ee713..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/SizeFunction.php +++ /dev/null @@ -1,113 +0,0 @@ -collectionPathExpression->field !== null); - $entityManager = $sqlWalker->getEntityManager(); - $platform = $entityManager->getConnection()->getDatabasePlatform(); - $quoteStrategy = $entityManager->getConfiguration()->getQuoteStrategy(); - $dqlAlias = $this->collectionPathExpression->identificationVariable; - $assocField = $this->collectionPathExpression->field; - - $class = $sqlWalker->getMetadataForDqlAlias($dqlAlias); - $assoc = $class->associationMappings[$assocField]; - $sql = 'SELECT COUNT(*) FROM '; - - if ($assoc->isOneToMany()) { - $targetClass = $entityManager->getClassMetadata($assoc->targetEntity); - $targetTableAlias = $sqlWalker->getSQLTableAlias($targetClass->getTableName()); - $sourceTableAlias = $sqlWalker->getSQLTableAlias($class->getTableName(), $dqlAlias); - - $sql .= $quoteStrategy->getTableName($targetClass, $platform) . ' ' . $targetTableAlias . ' WHERE '; - - $owningAssoc = $targetClass->associationMappings[$assoc->mappedBy]; - assert($owningAssoc->isManyToOne()); - - $first = true; - - foreach ($owningAssoc->targetToSourceKeyColumns as $targetColumn => $sourceColumn) { - if ($first) { - $first = false; - } else { - $sql .= ' AND '; - } - - $sql .= $targetTableAlias . '.' . $sourceColumn - . ' = ' - . $sourceTableAlias . '.' . $quoteStrategy->getColumnName($class->fieldNames[$targetColumn], $class, $platform); - } - } else { // many-to-many - assert($assoc->isManyToMany()); - $owningAssoc = $entityManager->getMetadataFactory()->getOwningSide($assoc); - $joinTable = $owningAssoc->joinTable; - - // SQL table aliases - $joinTableAlias = $sqlWalker->getSQLTableAlias($joinTable->name); - $sourceTableAlias = $sqlWalker->getSQLTableAlias($class->getTableName(), $dqlAlias); - - // join to target table - $targetClass = $entityManager->getClassMetadata($assoc->targetEntity); - $sql .= $quoteStrategy->getJoinTableName($owningAssoc, $targetClass, $platform) . ' ' . $joinTableAlias . ' WHERE '; - - $joinColumns = $assoc->isOwningSide() - ? $joinTable->joinColumns - : $joinTable->inverseJoinColumns; - - $first = true; - - foreach ($joinColumns as $joinColumn) { - if ($first) { - $first = false; - } else { - $sql .= ' AND '; - } - - $sourceColumnName = $quoteStrategy->getColumnName( - $class->fieldNames[$joinColumn->referencedColumnName], - $class, - $platform, - ); - - $sql .= $joinTableAlias . '.' . $joinColumn->name - . ' = ' - . $sourceTableAlias . '.' . $sourceColumnName; - } - } - - return '(' . $sql . ')'; - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->collectionPathExpression = $parser->CollectionValuedPathExpression(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/SqrtFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/SqrtFunction.php deleted file mode 100644 index e643663..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/SqrtFunction.php +++ /dev/null @@ -1,40 +0,0 @@ -walkSimpleArithmeticExpression($this->simpleArithmeticExpression), - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->simpleArithmeticExpression = $parser->SimpleArithmeticExpression(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/SubstringFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/SubstringFunction.php deleted file mode 100644 index 5744f08..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/SubstringFunction.php +++ /dev/null @@ -1,58 +0,0 @@ -secondSimpleArithmeticExpression !== null) { - $optionalSecondSimpleArithmeticExpression = $sqlWalker->walkSimpleArithmeticExpression($this->secondSimpleArithmeticExpression); - } - - return $sqlWalker->getConnection()->getDatabasePlatform()->getSubstringExpression( - $sqlWalker->walkStringPrimary($this->stringPrimary), - $sqlWalker->walkSimpleArithmeticExpression($this->firstSimpleArithmeticExpression), - $optionalSecondSimpleArithmeticExpression, - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->stringPrimary = $parser->StringPrimary(); - - $parser->match(TokenType::T_COMMA); - - $this->firstSimpleArithmeticExpression = $parser->SimpleArithmeticExpression(); - - $lexer = $parser->getLexer(); - if ($lexer->isNextToken(TokenType::T_COMMA)) { - $parser->match(TokenType::T_COMMA); - - $this->secondSimpleArithmeticExpression = $parser->SimpleArithmeticExpression(); - } - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/SumFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/SumFunction.php deleted file mode 100644 index 588dce9..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/SumFunction.php +++ /dev/null @@ -1,27 +0,0 @@ -aggregateExpression->dispatch($sqlWalker); - } - - public function parse(Parser $parser): void - { - $this->aggregateExpression = $parser->AggregateExpression(); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/TrimFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/TrimFunction.php deleted file mode 100644 index e0a3e99..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/TrimFunction.php +++ /dev/null @@ -1,119 +0,0 @@ -walkStringPrimary($this->stringPrimary); - $platform = $sqlWalker->getConnection()->getDatabasePlatform(); - $trimMode = $this->getTrimMode(); - - if ($this->trimChar !== false) { - return $platform->getTrimExpression( - $stringPrimary, - $trimMode, - $platform->quoteStringLiteral($this->trimChar), - ); - } - - return $platform->getTrimExpression($stringPrimary, $trimMode); - } - - public function parse(Parser $parser): void - { - $lexer = $parser->getLexer(); - - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->parseTrimMode($parser); - - if ($lexer->isNextToken(TokenType::T_STRING)) { - $parser->match(TokenType::T_STRING); - - assert($lexer->token !== null); - $this->trimChar = $lexer->token->value; - } - - if ($this->leading || $this->trailing || $this->both || ($this->trimChar !== false)) { - $parser->match(TokenType::T_FROM); - } - - $this->stringPrimary = $parser->StringPrimary(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } - - /** @psalm-return TrimMode::* */ - private function getTrimMode(): TrimMode|int - { - if ($this->leading) { - return TrimMode::LEADING; - } - - if ($this->trailing) { - return TrimMode::TRAILING; - } - - if ($this->both) { - return TrimMode::BOTH; - } - - return TrimMode::UNSPECIFIED; - } - - private function parseTrimMode(Parser $parser): void - { - $lexer = $parser->getLexer(); - assert($lexer->lookahead !== null); - $value = $lexer->lookahead->value; - - if (strcasecmp('leading', $value) === 0) { - $parser->match(TokenType::T_LEADING); - - $this->leading = true; - - return; - } - - if (strcasecmp('trailing', $value) === 0) { - $parser->match(TokenType::T_TRAILING); - - $this->trailing = true; - - return; - } - - if (strcasecmp('both', $value) === 0) { - $parser->match(TokenType::T_BOTH); - - $this->both = true; - - return; - } - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Functions/UpperFunction.php b/vendor/doctrine/orm/src/Query/AST/Functions/UpperFunction.php deleted file mode 100644 index 1ecef66..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Functions/UpperFunction.php +++ /dev/null @@ -1,40 +0,0 @@ -walkSimpleArithmeticExpression($this->stringPrimary), - ); - } - - public function parse(Parser $parser): void - { - $parser->match(TokenType::T_IDENTIFIER); - $parser->match(TokenType::T_OPEN_PARENTHESIS); - - $this->stringPrimary = $parser->StringPrimary(); - - $parser->match(TokenType::T_CLOSE_PARENTHESIS); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/GeneralCaseExpression.php b/vendor/doctrine/orm/src/Query/AST/GeneralCaseExpression.php deleted file mode 100644 index 39d760a..0000000 --- a/vendor/doctrine/orm/src/Query/AST/GeneralCaseExpression.php +++ /dev/null @@ -1,27 +0,0 @@ -walkGeneralCaseExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/GroupByClause.php b/vendor/doctrine/orm/src/Query/AST/GroupByClause.php deleted file mode 100644 index eb0f1b9..0000000 --- a/vendor/doctrine/orm/src/Query/AST/GroupByClause.php +++ /dev/null @@ -1,20 +0,0 @@ -walkGroupByClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/HavingClause.php b/vendor/doctrine/orm/src/Query/AST/HavingClause.php deleted file mode 100644 index 0d4d821..0000000 --- a/vendor/doctrine/orm/src/Query/AST/HavingClause.php +++ /dev/null @@ -1,19 +0,0 @@ -walkHavingClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/IdentificationVariableDeclaration.php b/vendor/doctrine/orm/src/Query/AST/IdentificationVariableDeclaration.php deleted file mode 100644 index c4c7cca..0000000 --- a/vendor/doctrine/orm/src/Query/AST/IdentificationVariableDeclaration.php +++ /dev/null @@ -1,28 +0,0 @@ -walkIdentificationVariableDeclaration($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/InListExpression.php b/vendor/doctrine/orm/src/Query/AST/InListExpression.php deleted file mode 100644 index dc0f32b..0000000 --- a/vendor/doctrine/orm/src/Query/AST/InListExpression.php +++ /dev/null @@ -1,23 +0,0 @@ - $literals */ - public function __construct( - public ArithmeticExpression $expression, - public array $literals, - public bool $not = false, - ) { - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkInListExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/InSubselectExpression.php b/vendor/doctrine/orm/src/Query/AST/InSubselectExpression.php deleted file mode 100644 index 1128285..0000000 --- a/vendor/doctrine/orm/src/Query/AST/InSubselectExpression.php +++ /dev/null @@ -1,22 +0,0 @@ -walkInSubselectExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/IndexBy.php b/vendor/doctrine/orm/src/Query/AST/IndexBy.php deleted file mode 100644 index 3d90265..0000000 --- a/vendor/doctrine/orm/src/Query/AST/IndexBy.php +++ /dev/null @@ -1,26 +0,0 @@ -walkIndexBy($this); - - return ''; - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/InputParameter.php b/vendor/doctrine/orm/src/Query/AST/InputParameter.php deleted file mode 100644 index a8e0a3b..0000000 --- a/vendor/doctrine/orm/src/Query/AST/InputParameter.php +++ /dev/null @@ -1,35 +0,0 @@ -isNamed = ! is_numeric($param); - $this->name = $param; - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkInputParameter($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/InstanceOfExpression.php b/vendor/doctrine/orm/src/Query/AST/InstanceOfExpression.php deleted file mode 100644 index 3a4e75f..0000000 --- a/vendor/doctrine/orm/src/Query/AST/InstanceOfExpression.php +++ /dev/null @@ -1,29 +0,0 @@ - $value */ - public function __construct( - public string $identificationVariable, - public array $value, - public bool $not = false, - ) { - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkInstanceOfExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Join.php b/vendor/doctrine/orm/src/Query/AST/Join.php deleted file mode 100644 index 34ce830..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Join.php +++ /dev/null @@ -1,34 +0,0 @@ -walkJoin($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/JoinAssociationDeclaration.php b/vendor/doctrine/orm/src/Query/AST/JoinAssociationDeclaration.php deleted file mode 100644 index e08d7f5..0000000 --- a/vendor/doctrine/orm/src/Query/AST/JoinAssociationDeclaration.php +++ /dev/null @@ -1,27 +0,0 @@ -walkJoinAssociationDeclaration($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/JoinAssociationPathExpression.php b/vendor/doctrine/orm/src/Query/AST/JoinAssociationPathExpression.php deleted file mode 100644 index 230be36..0000000 --- a/vendor/doctrine/orm/src/Query/AST/JoinAssociationPathExpression.php +++ /dev/null @@ -1,19 +0,0 @@ -walkJoinPathExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/JoinVariableDeclaration.php b/vendor/doctrine/orm/src/Query/AST/JoinVariableDeclaration.php deleted file mode 100644 index bf76695..0000000 --- a/vendor/doctrine/orm/src/Query/AST/JoinVariableDeclaration.php +++ /dev/null @@ -1,24 +0,0 @@ -walkJoinVariableDeclaration($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/LikeExpression.php b/vendor/doctrine/orm/src/Query/AST/LikeExpression.php deleted file mode 100644 index e3f67f8..0000000 --- a/vendor/doctrine/orm/src/Query/AST/LikeExpression.php +++ /dev/null @@ -1,29 +0,0 @@ -walkLikeExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Literal.php b/vendor/doctrine/orm/src/Query/AST/Literal.php deleted file mode 100644 index 9ec2036..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Literal.php +++ /dev/null @@ -1,26 +0,0 @@ -walkLiteral($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/NewObjectExpression.php b/vendor/doctrine/orm/src/Query/AST/NewObjectExpression.php deleted file mode 100644 index 7383c48..0000000 --- a/vendor/doctrine/orm/src/Query/AST/NewObjectExpression.php +++ /dev/null @@ -1,25 +0,0 @@ -walkNewObject($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Node.php b/vendor/doctrine/orm/src/Query/AST/Node.php deleted file mode 100644 index cdb5855..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Node.php +++ /dev/null @@ -1,85 +0,0 @@ -dump($this); - } - - public function dump(mixed $value): string - { - static $ident = 0; - - $str = ''; - - if ($value instanceof Node) { - $str .= get_debug_type($value) . '(' . PHP_EOL; - $props = get_object_vars($value); - - foreach ($props as $name => $prop) { - $ident += 4; - $str .= str_repeat(' ', $ident) . '"' . $name . '": ' - . $this->dump($prop) . ',' . PHP_EOL; - $ident -= 4; - } - - $str .= str_repeat(' ', $ident) . ')'; - } elseif (is_array($value)) { - $ident += 4; - $str .= 'array('; - $some = false; - - foreach ($value as $k => $v) { - $str .= PHP_EOL . str_repeat(' ', $ident) . '"' - . $k . '" => ' . $this->dump($v) . ','; - $some = true; - } - - $ident -= 4; - $str .= ($some ? PHP_EOL . str_repeat(' ', $ident) : '') . ')'; - } elseif (is_object($value)) { - $str .= 'instanceof(' . get_debug_type($value) . ')'; - } else { - $str .= var_export($value, true); - } - - return $str; - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/NullComparisonExpression.php b/vendor/doctrine/orm/src/Query/AST/NullComparisonExpression.php deleted file mode 100644 index e60cb04..0000000 --- a/vendor/doctrine/orm/src/Query/AST/NullComparisonExpression.php +++ /dev/null @@ -1,26 +0,0 @@ -walkNullComparisonExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/NullIfExpression.php b/vendor/doctrine/orm/src/Query/AST/NullIfExpression.php deleted file mode 100644 index 6fffeeb..0000000 --- a/vendor/doctrine/orm/src/Query/AST/NullIfExpression.php +++ /dev/null @@ -1,24 +0,0 @@ -walkNullIfExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/OrderByClause.php b/vendor/doctrine/orm/src/Query/AST/OrderByClause.php deleted file mode 100644 index f6d7a67..0000000 --- a/vendor/doctrine/orm/src/Query/AST/OrderByClause.php +++ /dev/null @@ -1,25 +0,0 @@ -walkOrderByClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/OrderByItem.php b/vendor/doctrine/orm/src/Query/AST/OrderByItem.php deleted file mode 100644 index 64b3f40..0000000 --- a/vendor/doctrine/orm/src/Query/AST/OrderByItem.php +++ /dev/null @@ -1,38 +0,0 @@ -type) === 'ASC'; - } - - public function isDesc(): bool - { - return strtoupper($this->type) === 'DESC'; - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkOrderByItem($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/ParenthesisExpression.php b/vendor/doctrine/orm/src/Query/AST/ParenthesisExpression.php deleted file mode 100644 index cda6d19..0000000 --- a/vendor/doctrine/orm/src/Query/AST/ParenthesisExpression.php +++ /dev/null @@ -1,22 +0,0 @@ -walkParenthesisExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/PathExpression.php b/vendor/doctrine/orm/src/Query/AST/PathExpression.php deleted file mode 100644 index 4a56fcd..0000000 --- a/vendor/doctrine/orm/src/Query/AST/PathExpression.php +++ /dev/null @@ -1,39 +0,0 @@ - $expectedType */ - public function __construct( - public int $expectedType, - public string $identificationVariable, - public string|null $field = null, - ) { - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkPathExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Phase2OptimizableConditional.php b/vendor/doctrine/orm/src/Query/AST/Phase2OptimizableConditional.php deleted file mode 100644 index 276f8f8..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Phase2OptimizableConditional.php +++ /dev/null @@ -1,17 +0,0 @@ -type) === 'ALL'; - } - - public function isAny(): bool - { - return strtoupper($this->type) === 'ANY'; - } - - public function isSome(): bool - { - return strtoupper($this->type) === 'SOME'; - } - - public function dispatch(SqlWalker $walker): string - { - return $walker->walkQuantifiedExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/RangeVariableDeclaration.php b/vendor/doctrine/orm/src/Query/AST/RangeVariableDeclaration.php deleted file mode 100644 index 59bd5c8..0000000 --- a/vendor/doctrine/orm/src/Query/AST/RangeVariableDeclaration.php +++ /dev/null @@ -1,27 +0,0 @@ -walkRangeVariableDeclaration($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SelectClause.php b/vendor/doctrine/orm/src/Query/AST/SelectClause.php deleted file mode 100644 index ad50e67..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SelectClause.php +++ /dev/null @@ -1,27 +0,0 @@ -walkSelectClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SelectExpression.php b/vendor/doctrine/orm/src/Query/AST/SelectExpression.php deleted file mode 100644 index f09f3cd..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SelectExpression.php +++ /dev/null @@ -1,28 +0,0 @@ -walkSelectExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SelectStatement.php b/vendor/doctrine/orm/src/Query/AST/SelectStatement.php deleted file mode 100644 index 399462f..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SelectStatement.php +++ /dev/null @@ -1,32 +0,0 @@ -walkSelectStatement($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SimpleArithmeticExpression.php b/vendor/doctrine/orm/src/Query/AST/SimpleArithmeticExpression.php deleted file mode 100644 index ae7ca44..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SimpleArithmeticExpression.php +++ /dev/null @@ -1,25 +0,0 @@ -walkSimpleArithmeticExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SimpleCaseExpression.php b/vendor/doctrine/orm/src/Query/AST/SimpleCaseExpression.php deleted file mode 100644 index b3764ba..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SimpleCaseExpression.php +++ /dev/null @@ -1,28 +0,0 @@ -walkSimpleCaseExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SimpleSelectClause.php b/vendor/doctrine/orm/src/Query/AST/SimpleSelectClause.php deleted file mode 100644 index 0259e3b..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SimpleSelectClause.php +++ /dev/null @@ -1,26 +0,0 @@ -walkSimpleSelectClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SimpleSelectExpression.php b/vendor/doctrine/orm/src/Query/AST/SimpleSelectExpression.php deleted file mode 100644 index 97e8f08..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SimpleSelectExpression.php +++ /dev/null @@ -1,27 +0,0 @@ -walkSimpleSelectExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SimpleWhenClause.php b/vendor/doctrine/orm/src/Query/AST/SimpleWhenClause.php deleted file mode 100644 index 892165a..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SimpleWhenClause.php +++ /dev/null @@ -1,26 +0,0 @@ -walkWhenClauseExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/Subselect.php b/vendor/doctrine/orm/src/Query/AST/Subselect.php deleted file mode 100644 index 8ff8595..0000000 --- a/vendor/doctrine/orm/src/Query/AST/Subselect.php +++ /dev/null @@ -1,32 +0,0 @@ -walkSubselect($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SubselectFromClause.php b/vendor/doctrine/orm/src/Query/AST/SubselectFromClause.php deleted file mode 100644 index 7cf01e2..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SubselectFromClause.php +++ /dev/null @@ -1,25 +0,0 @@ -walkSubselectFromClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/SubselectIdentificationVariableDeclaration.php b/vendor/doctrine/orm/src/Query/AST/SubselectIdentificationVariableDeclaration.php deleted file mode 100644 index eadf6bc..0000000 --- a/vendor/doctrine/orm/src/Query/AST/SubselectIdentificationVariableDeclaration.php +++ /dev/null @@ -1,19 +0,0 @@ -walkUpdateClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/UpdateItem.php b/vendor/doctrine/orm/src/Query/AST/UpdateItem.php deleted file mode 100644 index b540593..0000000 --- a/vendor/doctrine/orm/src/Query/AST/UpdateItem.php +++ /dev/null @@ -1,26 +0,0 @@ -walkUpdateItem($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/UpdateStatement.php b/vendor/doctrine/orm/src/Query/AST/UpdateStatement.php deleted file mode 100644 index 7ea5076..0000000 --- a/vendor/doctrine/orm/src/Query/AST/UpdateStatement.php +++ /dev/null @@ -1,26 +0,0 @@ -walkUpdateStatement($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/WhenClause.php b/vendor/doctrine/orm/src/Query/AST/WhenClause.php deleted file mode 100644 index 9bf194e..0000000 --- a/vendor/doctrine/orm/src/Query/AST/WhenClause.php +++ /dev/null @@ -1,26 +0,0 @@ -walkWhenClauseExpression($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/AST/WhereClause.php b/vendor/doctrine/orm/src/Query/AST/WhereClause.php deleted file mode 100644 index e4d7b66..0000000 --- a/vendor/doctrine/orm/src/Query/AST/WhereClause.php +++ /dev/null @@ -1,24 +0,0 @@ -walkWhereClause($this); - } -} diff --git a/vendor/doctrine/orm/src/Query/Exec/AbstractSqlExecutor.php b/vendor/doctrine/orm/src/Query/Exec/AbstractSqlExecutor.php deleted file mode 100644 index 101bf26..0000000 --- a/vendor/doctrine/orm/src/Query/Exec/AbstractSqlExecutor.php +++ /dev/null @@ -1,61 +0,0 @@ -, WrapperParameterType>|array - */ -abstract class AbstractSqlExecutor -{ - /** @var list|string */ - protected array|string $sqlStatements; - - protected QueryCacheProfile|null $queryCacheProfile = null; - - /** - * Gets the SQL statements that are executed by the executor. - * - * @return list|string All the SQL update statements. - */ - public function getSqlStatements(): array|string - { - return $this->sqlStatements; - } - - public function setQueryCacheProfile(QueryCacheProfile $qcp): void - { - $this->queryCacheProfile = $qcp; - } - - /** - * Do not use query cache - */ - public function removeQueryCacheProfile(): void - { - $this->queryCacheProfile = null; - } - - /** - * Executes all sql statements. - * - * @param Connection $conn The database connection that is used to execute the queries. - * @param list|array $params The parameters. - * @psalm-param WrapperParameterTypeArray $types The parameter types. - */ - abstract public function execute(Connection $conn, array $params, array $types): Result|int; -} diff --git a/vendor/doctrine/orm/src/Query/Exec/MultiTableDeleteExecutor.php b/vendor/doctrine/orm/src/Query/Exec/MultiTableDeleteExecutor.php deleted file mode 100644 index 6096462..0000000 --- a/vendor/doctrine/orm/src/Query/Exec/MultiTableDeleteExecutor.php +++ /dev/null @@ -1,131 +0,0 @@ -MultiTableDeleteExecutor. - * - * Internal note: Any SQL construction and preparation takes place in the constructor for - * best performance. With a query cache the executor will be cached. - * - * @param DeleteStatement $AST The root AST node of the DQL query. - * @param SqlWalker $sqlWalker The walker used for SQL generation from the AST. - */ - public function __construct(AST\Node $AST, SqlWalker $sqlWalker) - { - $em = $sqlWalker->getEntityManager(); - $conn = $em->getConnection(); - $platform = $conn->getDatabasePlatform(); - $quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); - - if ($conn instanceof PrimaryReadReplicaConnection) { - $conn->ensureConnectedToPrimary(); - } - - $primaryClass = $em->getClassMetadata($AST->deleteClause->abstractSchemaName); - $primaryDqlAlias = $AST->deleteClause->aliasIdentificationVariable; - $rootClass = $em->getClassMetadata($primaryClass->rootEntityName); - - $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); - $idColumnNames = $rootClass->getIdentifierColumnNames(); - $idColumnList = implode(', ', $idColumnNames); - - // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause() - $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $primaryDqlAlias); - - $insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')' - . ' SELECT t0.' . implode(', t0.', $idColumnNames); - - $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $primaryDqlAlias); - $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); - $insertSql .= $sqlWalker->walkFromClause($fromClause); - - // Append WHERE clause, if there is one. - if ($AST->whereClause) { - $insertSql .= $sqlWalker->walkWhereClause($AST->whereClause); - } - - $this->insertSql = $insertSql; - - // 2. Create ID subselect statement used in DELETE ... WHERE ... IN (subselect) - $idSubselect = 'SELECT ' . $idColumnList . ' FROM ' . $tempTable; - - // 3. Create and store DELETE statements - $classNames = [...$primaryClass->parentClasses, ...[$primaryClass->name], ...$primaryClass->subClasses]; - foreach (array_reverse($classNames) as $className) { - $tableName = $quoteStrategy->getTableName($em->getClassMetadata($className), $platform); - $this->sqlStatements[] = 'DELETE FROM ' . $tableName - . ' WHERE (' . $idColumnList . ') IN (' . $idSubselect . ')'; - } - - // 4. Store DDL for temporary identifier table. - $columnDefinitions = []; - foreach ($idColumnNames as $idColumnName) { - $columnDefinitions[$idColumnName] = [ - 'name' => $idColumnName, - 'notnull' => true, - 'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em)), - ]; - } - - $this->createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' - . $platform->getColumnDeclarationListSQL($columnDefinitions) . ', PRIMARY KEY(' . implode(',', $idColumnNames) . '))'; - $this->dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable); - } - - /** - * {@inheritDoc} - */ - public function execute(Connection $conn, array $params, array $types): int - { - // Create temporary id table - $conn->executeStatement($this->createTempTableSql); - - try { - // Insert identifiers - $numDeleted = $conn->executeStatement($this->insertSql, $params, $types); - - // Execute DELETE statements - foreach ($this->sqlStatements as $sql) { - $conn->executeStatement($sql); - } - } catch (Throwable $exception) { - // FAILURE! Drop temporary table to avoid possible collisions - $conn->executeStatement($this->dropTempTableSql); - - // Re-throw exception - throw $exception; - } - - // Drop temporary table - $conn->executeStatement($this->dropTempTableSql); - - return $numDeleted; - } -} diff --git a/vendor/doctrine/orm/src/Query/Exec/MultiTableUpdateExecutor.php b/vendor/doctrine/orm/src/Query/Exec/MultiTableUpdateExecutor.php deleted file mode 100644 index dab1b61..0000000 --- a/vendor/doctrine/orm/src/Query/Exec/MultiTableUpdateExecutor.php +++ /dev/null @@ -1,180 +0,0 @@ -MultiTableUpdateExecutor. - * - * Internal note: Any SQL construction and preparation takes place in the constructor for - * best performance. With a query cache the executor will be cached. - * - * @param UpdateStatement $AST The root AST node of the DQL query. - * @param SqlWalker $sqlWalker The walker used for SQL generation from the AST. - */ - public function __construct(AST\Node $AST, SqlWalker $sqlWalker) - { - $em = $sqlWalker->getEntityManager(); - $conn = $em->getConnection(); - $platform = $conn->getDatabasePlatform(); - $quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); - $this->sqlStatements = []; - - if ($conn instanceof PrimaryReadReplicaConnection) { - $conn->ensureConnectedToPrimary(); - } - - $updateClause = $AST->updateClause; - $primaryClass = $sqlWalker->getEntityManager()->getClassMetadata($updateClause->abstractSchemaName); - $rootClass = $em->getClassMetadata($primaryClass->rootEntityName); - - $updateItems = $updateClause->updateItems; - - $tempTable = $platform->getTemporaryTableName($rootClass->getTemporaryIdTableName()); - $idColumnNames = $rootClass->getIdentifierColumnNames(); - $idColumnList = implode(', ', $idColumnNames); - - // 1. Create an INSERT INTO temptable ... SELECT identifiers WHERE $AST->getWhereClause() - $sqlWalker->setSQLTableAlias($primaryClass->getTableName(), 't0', $updateClause->aliasIdentificationVariable); - - $insertSql = 'INSERT INTO ' . $tempTable . ' (' . $idColumnList . ')' - . ' SELECT t0.' . implode(', t0.', $idColumnNames); - - $rangeDecl = new AST\RangeVariableDeclaration($primaryClass->name, $updateClause->aliasIdentificationVariable); - $fromClause = new AST\FromClause([new AST\IdentificationVariableDeclaration($rangeDecl, null, [])]); - - $insertSql .= $sqlWalker->walkFromClause($fromClause); - - // 2. Create ID subselect statement used in UPDATE ... WHERE ... IN (subselect) - $idSubselect = 'SELECT ' . $idColumnList . ' FROM ' . $tempTable; - - // 3. Create and store UPDATE statements - $classNames = [...$primaryClass->parentClasses, ...[$primaryClass->name], ...$primaryClass->subClasses]; - - foreach (array_reverse($classNames) as $className) { - $affected = false; - $class = $em->getClassMetadata($className); - $updateSql = 'UPDATE ' . $quoteStrategy->getTableName($class, $platform) . ' SET '; - - $sqlParameters = []; - foreach ($updateItems as $updateItem) { - $field = $updateItem->pathExpression->field; - - if ( - (isset($class->fieldMappings[$field]) && ! isset($class->fieldMappings[$field]->inherited)) || - (isset($class->associationMappings[$field]) && ! isset($class->associationMappings[$field]->inherited)) - ) { - $newValue = $updateItem->newValue; - - if (! $affected) { - $affected = true; - } else { - $updateSql .= ', '; - } - - $updateSql .= $sqlWalker->walkUpdateItem($updateItem); - - if ($newValue instanceof AST\InputParameter) { - $sqlParameters[] = $newValue->name; - - ++$this->numParametersInUpdateClause; - } - } - } - - if ($affected) { - $this->sqlParameters[] = $sqlParameters; - $this->sqlStatements[] = $updateSql . ' WHERE (' . $idColumnList . ') IN (' . $idSubselect . ')'; - } - } - - // Append WHERE clause to insertSql, if there is one. - if ($AST->whereClause) { - $insertSql .= $sqlWalker->walkWhereClause($AST->whereClause); - } - - $this->insertSql = $insertSql; - - // 4. Store DDL for temporary identifier table. - $columnDefinitions = []; - - foreach ($idColumnNames as $idColumnName) { - $columnDefinitions[$idColumnName] = [ - 'name' => $idColumnName, - 'notnull' => true, - 'type' => Type::getType(PersisterHelper::getTypeOfColumn($idColumnName, $rootClass, $em)), - ]; - } - - $this->createTempTableSql = $platform->getCreateTemporaryTableSnippetSQL() . ' ' . $tempTable . ' (' - . $platform->getColumnDeclarationListSQL($columnDefinitions) . ', PRIMARY KEY(' . implode(',', $idColumnNames) . '))'; - - $this->dropTempTableSql = $platform->getDropTemporaryTableSQL($tempTable); - } - - /** - * {@inheritDoc} - */ - public function execute(Connection $conn, array $params, array $types): int - { - // Create temporary id table - $conn->executeStatement($this->createTempTableSql); - - try { - // Insert identifiers. Parameters from the update clause are cut off. - $numUpdated = $conn->executeStatement( - $this->insertSql, - array_slice($params, $this->numParametersInUpdateClause), - array_slice($types, $this->numParametersInUpdateClause), - ); - - // Execute UPDATE statements - foreach ($this->sqlStatements as $key => $statement) { - $paramValues = []; - $paramTypes = []; - - if (isset($this->sqlParameters[$key])) { - foreach ($this->sqlParameters[$key] as $parameterKey => $parameterName) { - $paramValues[] = $params[$parameterKey]; - $paramTypes[] = $types[$parameterKey] ?? ParameterTypeInferer::inferType($params[$parameterKey]); - } - } - - $conn->executeStatement($statement, $paramValues, $paramTypes); - } - } finally { - // Drop temporary table - $conn->executeStatement($this->dropTempTableSql); - } - - return $numUpdated; - } -} diff --git a/vendor/doctrine/orm/src/Query/Exec/SingleSelectExecutor.php b/vendor/doctrine/orm/src/Query/Exec/SingleSelectExecutor.php deleted file mode 100644 index 5445edb..0000000 --- a/vendor/doctrine/orm/src/Query/Exec/SingleSelectExecutor.php +++ /dev/null @@ -1,31 +0,0 @@ -sqlStatements = $sqlWalker->walkSelectStatement($AST); - } - - /** - * {@inheritDoc} - */ - public function execute(Connection $conn, array $params, array $types): Result - { - return $conn->executeQuery($this->sqlStatements, $params, $types, $this->queryCacheProfile); - } -} diff --git a/vendor/doctrine/orm/src/Query/Exec/SingleTableDeleteUpdateExecutor.php b/vendor/doctrine/orm/src/Query/Exec/SingleTableDeleteUpdateExecutor.php deleted file mode 100644 index 66696db..0000000 --- a/vendor/doctrine/orm/src/Query/Exec/SingleTableDeleteUpdateExecutor.php +++ /dev/null @@ -1,42 +0,0 @@ -sqlStatements = $sqlWalker->walkUpdateStatement($AST); - } elseif ($AST instanceof AST\DeleteStatement) { - $this->sqlStatements = $sqlWalker->walkDeleteStatement($AST); - } - } - - /** - * {@inheritDoc} - */ - public function execute(Connection $conn, array $params, array $types): int - { - if ($conn instanceof PrimaryReadReplicaConnection) { - $conn->ensureConnectedToPrimary(); - } - - return $conn->executeStatement($this->sqlStatements, $params, $types); - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr.php b/vendor/doctrine/orm/src/Query/Expr.php deleted file mode 100644 index 65f3082..0000000 --- a/vendor/doctrine/orm/src/Query/Expr.php +++ /dev/null @@ -1,615 +0,0 @@ -andX($expr->eq('u.type', ':1'), $expr->eq('u.role', ':2')); - * - * @param Expr\Comparison|Expr\Func|Expr\Andx|Expr\Orx|string ...$x Optional clause. Defaults to null, - * but requires at least one defined - * when converting to string. - */ - public function andX(Expr\Comparison|Expr\Func|Expr\Andx|Expr\Orx|string ...$x): Expr\Andx - { - self::validateVariadicParameter($x); - - return new Expr\Andx($x); - } - - /** - * Creates a disjunction of the given boolean expressions. - * - * Example: - * - * [php] - * // (u.type = ?1) OR (u.role = ?2) - * $q->where($q->expr()->orX('u.type = ?1', 'u.role = ?2')); - * - * @param Expr\Comparison|Expr\Func|Expr\Andx|Expr\Orx|string ...$x Optional clause. Defaults to null, - * but requires at least one defined - * when converting to string. - */ - public function orX(Expr\Comparison|Expr\Func|Expr\Andx|Expr\Orx|string ...$x): Expr\Orx - { - self::validateVariadicParameter($x); - - return new Expr\Orx($x); - } - - /** - * Creates an ASCending order expression. - */ - public function asc(mixed $expr): Expr\OrderBy - { - return new Expr\OrderBy($expr, 'ASC'); - } - - /** - * Creates a DESCending order expression. - */ - public function desc(mixed $expr): Expr\OrderBy - { - return new Expr\OrderBy($expr, 'DESC'); - } - - /** - * Creates an equality comparison expression with the given arguments. - * - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a = . Example: - * - * [php] - * // u.id = ?1 - * $expr->eq('u.id', '?1'); - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function eq(mixed $x, mixed $y): Expr\Comparison - { - return new Expr\Comparison($x, Expr\Comparison::EQ, $y); - } - - /** - * Creates an instance of Expr\Comparison, with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a <> . Example: - * - * [php] - * // u.id <> ?1 - * $q->where($q->expr()->neq('u.id', '?1')); - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function neq(mixed $x, mixed $y): Expr\Comparison - { - return new Expr\Comparison($x, Expr\Comparison::NEQ, $y); - } - - /** - * Creates an instance of Expr\Comparison, with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a < . Example: - * - * [php] - * // u.id < ?1 - * $q->where($q->expr()->lt('u.id', '?1')); - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function lt(mixed $x, mixed $y): Expr\Comparison - { - return new Expr\Comparison($x, Expr\Comparison::LT, $y); - } - - /** - * Creates an instance of Expr\Comparison, with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a <= . Example: - * - * [php] - * // u.id <= ?1 - * $q->where($q->expr()->lte('u.id', '?1')); - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function lte(mixed $x, mixed $y): Expr\Comparison - { - return new Expr\Comparison($x, Expr\Comparison::LTE, $y); - } - - /** - * Creates an instance of Expr\Comparison, with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a > . Example: - * - * [php] - * // u.id > ?1 - * $q->where($q->expr()->gt('u.id', '?1')); - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function gt(mixed $x, mixed $y): Expr\Comparison - { - return new Expr\Comparison($x, Expr\Comparison::GT, $y); - } - - /** - * Creates an instance of Expr\Comparison, with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a >= . Example: - * - * [php] - * // u.id >= ?1 - * $q->where($q->expr()->gte('u.id', '?1')); - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function gte(mixed $x, mixed $y): Expr\Comparison - { - return new Expr\Comparison($x, Expr\Comparison::GTE, $y); - } - - /** - * Creates an instance of AVG() function, with the given argument. - * - * @param mixed $x Argument to be used in AVG() function. - */ - public function avg(mixed $x): Expr\Func - { - return new Expr\Func('AVG', [$x]); - } - - /** - * Creates an instance of MAX() function, with the given argument. - * - * @param mixed $x Argument to be used in MAX() function. - */ - public function max(mixed $x): Expr\Func - { - return new Expr\Func('MAX', [$x]); - } - - /** - * Creates an instance of MIN() function, with the given argument. - * - * @param mixed $x Argument to be used in MIN() function. - */ - public function min(mixed $x): Expr\Func - { - return new Expr\Func('MIN', [$x]); - } - - /** - * Creates an instance of COUNT() function, with the given argument. - * - * @param mixed $x Argument to be used in COUNT() function. - */ - public function count(mixed $x): Expr\Func - { - return new Expr\Func('COUNT', [$x]); - } - - /** - * Creates an instance of COUNT(DISTINCT) function, with the given argument. - * - * @param mixed ...$x Argument to be used in COUNT(DISTINCT) function. - */ - public function countDistinct(mixed ...$x): string - { - self::validateVariadicParameter($x); - - return 'COUNT(DISTINCT ' . implode(', ', $x) . ')'; - } - - /** - * Creates an instance of EXISTS() function, with the given DQL Subquery. - * - * @param mixed $subquery DQL Subquery to be used in EXISTS() function. - */ - public function exists(mixed $subquery): Expr\Func - { - return new Expr\Func('EXISTS', [$subquery]); - } - - /** - * Creates an instance of ALL() function, with the given DQL Subquery. - * - * @param mixed $subquery DQL Subquery to be used in ALL() function. - */ - public function all(mixed $subquery): Expr\Func - { - return new Expr\Func('ALL', [$subquery]); - } - - /** - * Creates a SOME() function expression with the given DQL subquery. - * - * @param mixed $subquery DQL Subquery to be used in SOME() function. - */ - public function some(mixed $subquery): Expr\Func - { - return new Expr\Func('SOME', [$subquery]); - } - - /** - * Creates an ANY() function expression with the given DQL subquery. - * - * @param mixed $subquery DQL Subquery to be used in ANY() function. - */ - public function any(mixed $subquery): Expr\Func - { - return new Expr\Func('ANY', [$subquery]); - } - - /** - * Creates a negation expression of the given restriction. - * - * @param mixed $restriction Restriction to be used in NOT() function. - */ - public function not(mixed $restriction): Expr\Func - { - return new Expr\Func('NOT', [$restriction]); - } - - /** - * Creates an ABS() function expression with the given argument. - * - * @param mixed $x Argument to be used in ABS() function. - */ - public function abs(mixed $x): Expr\Func - { - return new Expr\Func('ABS', [$x]); - } - - /** - * Creates a MOD($x, $y) function expression to return the remainder of $x divided by $y. - */ - public function mod(mixed $x, mixed $y): Expr\Func - { - return new Expr\Func('MOD', [$x, $y]); - } - - /** - * Creates a product mathematical expression with the given arguments. - * - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a * . Example: - * - * [php] - * // u.salary * u.percentAnnualSalaryIncrease - * $q->expr()->prod('u.salary', 'u.percentAnnualSalaryIncrease') - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function prod(mixed $x, mixed $y): Expr\Math - { - return new Expr\Math($x, '*', $y); - } - - /** - * Creates a difference mathematical expression with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a - . Example: - * - * [php] - * // u.monthlySubscriptionCount - 1 - * $q->expr()->diff('u.monthlySubscriptionCount', '1') - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function diff(mixed $x, mixed $y): Expr\Math - { - return new Expr\Math($x, '-', $y); - } - - /** - * Creates a sum mathematical expression with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a + . Example: - * - * [php] - * // u.numChildren + 1 - * $q->expr()->sum('u.numChildren', '1') - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function sum(mixed $x, mixed $y): Expr\Math - { - return new Expr\Math($x, '+', $y); - } - - /** - * Creates a quotient mathematical expression with the given arguments. - * First argument is considered the left expression and the second is the right expression. - * When converted to string, it will generated a / . Example: - * - * [php] - * // u.total / u.period - * $expr->quot('u.total', 'u.period') - * - * @param mixed $x Left expression. - * @param mixed $y Right expression. - */ - public function quot(mixed $x, mixed $y): Expr\Math - { - return new Expr\Math($x, '/', $y); - } - - /** - * Creates a SQRT() function expression with the given argument. - * - * @param mixed $x Argument to be used in SQRT() function. - */ - public function sqrt(mixed $x): Expr\Func - { - return new Expr\Func('SQRT', [$x]); - } - - /** - * Creates an IN() expression with the given arguments. - * - * @param string $x Field in string format to be restricted by IN() function. - * @param mixed $y Argument to be used in IN() function. - */ - public function in(string $x, mixed $y): Expr\Func - { - if (is_iterable($y)) { - if ($y instanceof Traversable) { - $y = iterator_to_array($y); - } - - foreach ($y as &$literal) { - if (! ($literal instanceof Expr\Literal)) { - $literal = $this->quoteLiteral($literal); - } - } - } - - return new Expr\Func($x . ' IN', (array) $y); - } - - /** - * Creates a NOT IN() expression with the given arguments. - * - * @param string $x Field in string format to be restricted by NOT IN() function. - * @param mixed $y Argument to be used in NOT IN() function. - */ - public function notIn(string $x, mixed $y): Expr\Func - { - if (is_iterable($y)) { - if ($y instanceof Traversable) { - $y = iterator_to_array($y); - } - - foreach ($y as &$literal) { - if (! ($literal instanceof Expr\Literal)) { - $literal = $this->quoteLiteral($literal); - } - } - } - - return new Expr\Func($x . ' NOT IN', (array) $y); - } - - /** - * Creates an IS NULL expression with the given arguments. - * - * @param string $x Field in string format to be restricted by IS NULL. - */ - public function isNull(string $x): string - { - return $x . ' IS NULL'; - } - - /** - * Creates an IS NOT NULL expression with the given arguments. - * - * @param string $x Field in string format to be restricted by IS NOT NULL. - */ - public function isNotNull(string $x): string - { - return $x . ' IS NOT NULL'; - } - - /** - * Creates a LIKE() comparison expression with the given arguments. - * - * @param string $x Field in string format to be inspected by LIKE() comparison. - * @param mixed $y Argument to be used in LIKE() comparison. - */ - public function like(string $x, mixed $y): Expr\Comparison - { - return new Expr\Comparison($x, 'LIKE', $y); - } - - /** - * Creates a NOT LIKE() comparison expression with the given arguments. - * - * @param string $x Field in string format to be inspected by LIKE() comparison. - * @param mixed $y Argument to be used in LIKE() comparison. - */ - public function notLike(string $x, mixed $y): Expr\Comparison - { - return new Expr\Comparison($x, 'NOT LIKE', $y); - } - - /** - * Creates a CONCAT() function expression with the given arguments. - * - * @param mixed ...$x Arguments to be used in CONCAT() function. - */ - public function concat(mixed ...$x): Expr\Func - { - self::validateVariadicParameter($x); - - return new Expr\Func('CONCAT', $x); - } - - /** - * Creates a SUBSTRING() function expression with the given arguments. - * - * @param mixed $x Argument to be used as string to be cropped by SUBSTRING() function. - * @param int $from Initial offset to start cropping string. May accept negative values. - * @param int|null $len Length of crop. May accept negative values. - */ - public function substring(mixed $x, int $from, int|null $len = null): Expr\Func - { - $args = [$x, $from]; - if ($len !== null) { - $args[] = $len; - } - - return new Expr\Func('SUBSTRING', $args); - } - - /** - * Creates a LOWER() function expression with the given argument. - * - * @param mixed $x Argument to be used in LOWER() function. - * - * @return Expr\Func A LOWER function expression. - */ - public function lower(mixed $x): Expr\Func - { - return new Expr\Func('LOWER', [$x]); - } - - /** - * Creates an UPPER() function expression with the given argument. - * - * @param mixed $x Argument to be used in UPPER() function. - * - * @return Expr\Func An UPPER function expression. - */ - public function upper(mixed $x): Expr\Func - { - return new Expr\Func('UPPER', [$x]); - } - - /** - * Creates a LENGTH() function expression with the given argument. - * - * @param mixed $x Argument to be used as argument of LENGTH() function. - * - * @return Expr\Func A LENGTH function expression. - */ - public function length(mixed $x): Expr\Func - { - return new Expr\Func('LENGTH', [$x]); - } - - /** - * Creates a literal expression of the given argument. - * - * @param scalar $literal Argument to be converted to literal. - */ - public function literal(bool|string|int|float $literal): Expr\Literal - { - return new Expr\Literal($this->quoteLiteral($literal)); - } - - /** - * Quotes a literal value, if necessary, according to the DQL syntax. - * - * @param scalar $literal The literal value. - */ - private function quoteLiteral(bool|string|int|float $literal): string - { - if (is_int($literal) || is_float($literal)) { - return (string) $literal; - } - - if (is_bool($literal)) { - return $literal ? 'true' : 'false'; - } - - return "'" . str_replace("'", "''", $literal) . "'"; - } - - /** - * Creates an instance of BETWEEN() function, with the given argument. - * - * @param mixed $val Valued to be inspected by range values. - * @param int|string $x Starting range value to be used in BETWEEN() function. - * @param int|string $y End point value to be used in BETWEEN() function. - * - * @return string A BETWEEN expression. - */ - public function between(mixed $val, int|string $x, int|string $y): string - { - return $val . ' BETWEEN ' . $x . ' AND ' . $y; - } - - /** - * Creates an instance of TRIM() function, with the given argument. - * - * @param mixed $x Argument to be used as argument of TRIM() function. - * - * @return Expr\Func a TRIM expression. - */ - public function trim(mixed $x): Expr\Func - { - return new Expr\Func('TRIM', $x); - } - - /** - * Creates an instance of MEMBER OF function, with the given arguments. - * - * @param string $x Value to be checked - * @param string $y Value to be checked against - */ - public function isMemberOf(string $x, string $y): Expr\Comparison - { - return new Expr\Comparison($x, 'MEMBER OF', $y); - } - - /** - * Creates an instance of INSTANCE OF function, with the given arguments. - * - * @param string $x Value to be checked - * @param string $y Value to be checked against - */ - public function isInstanceOf(string $x, string $y): Expr\Comparison - { - return new Expr\Comparison($x, 'INSTANCE OF', $y); - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Andx.php b/vendor/doctrine/orm/src/Query/Expr/Andx.php deleted file mode 100644 index a20bcef..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Andx.php +++ /dev/null @@ -1,32 +0,0 @@ - */ - protected array $parts = []; - - /** @psalm-return list */ - public function getParts(): array - { - return $this->parts; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Base.php b/vendor/doctrine/orm/src/Query/Expr/Base.php deleted file mode 100644 index e0f2572..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Base.php +++ /dev/null @@ -1,96 +0,0 @@ - */ - protected array $allowedClasses = []; - - /** @var list */ - protected array $parts = []; - - public function __construct(mixed $args = []) - { - if (is_array($args) && array_key_exists(0, $args) && is_array($args[0])) { - $args = $args[0]; - } - - $this->addMultiple($args); - } - - /** - * @param string[]|object[]|string|object $args - * @psalm-param list|string|object $args - * - * @return $this - */ - public function addMultiple(array|string|object $args = []): static - { - foreach ((array) $args as $arg) { - $this->add($arg); - } - - return $this; - } - - /** - * @return $this - * - * @throws InvalidArgumentException - */ - public function add(mixed $arg): static - { - if ($arg !== null && (! $arg instanceof self || $arg->count() > 0)) { - // If we decide to keep Expr\Base instances, we can use this check - if (! is_string($arg) && ! in_array($arg::class, $this->allowedClasses, true)) { - throw new InvalidArgumentException(sprintf( - "Expression of type '%s' not allowed in this context.", - get_debug_type($arg), - )); - } - - $this->parts[] = $arg; - } - - return $this; - } - - /** @psalm-return 0|positive-int */ - public function count(): int - { - return count($this->parts); - } - - public function __toString(): string - { - if ($this->count() === 1) { - return (string) $this->parts[0]; - } - - return $this->preSeparator . implode($this->separator, $this->parts) . $this->postSeparator; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Comparison.php b/vendor/doctrine/orm/src/Query/Expr/Comparison.php deleted file mode 100644 index ec8ef21..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Comparison.php +++ /dev/null @@ -1,47 +0,0 @@ -'; - final public const LT = '<'; - final public const LTE = '<='; - final public const GT = '>'; - final public const GTE = '>='; - - /** Creates a comparison expression with the given arguments. */ - public function __construct(protected mixed $leftExpr, protected string $operator, protected mixed $rightExpr) - { - } - - public function getLeftExpr(): mixed - { - return $this->leftExpr; - } - - public function getOperator(): string - { - return $this->operator; - } - - public function getRightExpr(): mixed - { - return $this->rightExpr; - } - - public function __toString(): string - { - return $this->leftExpr . ' ' . $this->operator . ' ' . $this->rightExpr; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Composite.php b/vendor/doctrine/orm/src/Query/Expr/Composite.php deleted file mode 100644 index f3007a7..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Composite.php +++ /dev/null @@ -1,50 +0,0 @@ -count() === 1) { - return (string) $this->parts[0]; - } - - $components = []; - - foreach ($this->parts as $part) { - $components[] = $this->processQueryPart($part); - } - - return implode($this->separator, $components); - } - - private function processQueryPart(string|Stringable $part): string - { - $queryPart = (string) $part; - - if (is_object($part) && $part instanceof self && $part->count() > 1) { - return $this->preSeparator . $queryPart . $this->postSeparator; - } - - // Fixes DDC-1237: User may have added a where item containing nested expression (with "OR" or "AND") - if (preg_match('/\s(OR|AND)\s/i', $queryPart)) { - return $this->preSeparator . $queryPart . $this->postSeparator; - } - - return $queryPart; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/From.php b/vendor/doctrine/orm/src/Query/Expr/From.php deleted file mode 100644 index 21af078..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/From.php +++ /dev/null @@ -1,48 +0,0 @@ -from; - } - - public function getAlias(): string - { - return $this->alias; - } - - public function getIndexBy(): string|null - { - return $this->indexBy; - } - - public function __toString(): string - { - return $this->from . ' ' . $this->alias . - ($this->indexBy ? ' INDEX BY ' . $this->indexBy : ''); - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Func.php b/vendor/doctrine/orm/src/Query/Expr/Func.php deleted file mode 100644 index cd9e8e0..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Func.php +++ /dev/null @@ -1,48 +0,0 @@ -|mixed $arguments - */ - public function __construct( - protected string $name, - mixed $arguments, - ) { - $this->arguments = (array) $arguments; - } - - public function getName(): string - { - return $this->name; - } - - /** @psalm-return list */ - public function getArguments(): array - { - return $this->arguments; - } - - public function __toString(): string - { - return $this->name . '(' . implode(', ', $this->arguments) . ')'; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/GroupBy.php b/vendor/doctrine/orm/src/Query/Expr/GroupBy.php deleted file mode 100644 index fa4625a..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/GroupBy.php +++ /dev/null @@ -1,25 +0,0 @@ - */ - protected array $parts = []; - - /** @psalm-return list */ - public function getParts(): array - { - return $this->parts; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Join.php b/vendor/doctrine/orm/src/Query/Expr/Join.php deleted file mode 100644 index c3b6dc9..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Join.php +++ /dev/null @@ -1,77 +0,0 @@ -joinType; - } - - public function getJoin(): string - { - return $this->join; - } - - public function getAlias(): string|null - { - return $this->alias; - } - - /** @psalm-return self::ON|self::WITH|null */ - public function getConditionType(): string|null - { - return $this->conditionType; - } - - public function getCondition(): string|Comparison|Composite|Func|null - { - return $this->condition; - } - - public function getIndexBy(): string|null - { - return $this->indexBy; - } - - public function __toString(): string - { - return strtoupper($this->joinType) . ' JOIN ' . $this->join - . ($this->alias ? ' ' . $this->alias : '') - . ($this->indexBy ? ' INDEX BY ' . $this->indexBy : '') - . ($this->condition ? ' ' . strtoupper($this->conditionType) . ' ' . $this->condition : ''); - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Literal.php b/vendor/doctrine/orm/src/Query/Expr/Literal.php deleted file mode 100644 index 0c13030..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Literal.php +++ /dev/null @@ -1,25 +0,0 @@ - */ - protected array $parts = []; - - /** @psalm-return list */ - public function getParts(): array - { - return $this->parts; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Math.php b/vendor/doctrine/orm/src/Query/Expr/Math.php deleted file mode 100644 index 05e0b39..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Math.php +++ /dev/null @@ -1,59 +0,0 @@ -leftExpr; - } - - public function getOperator(): string - { - return $this->operator; - } - - public function getRightExpr(): mixed - { - return $this->rightExpr; - } - - public function __toString(): string - { - // Adjusting Left Expression - $leftExpr = (string) $this->leftExpr; - - if ($this->leftExpr instanceof Math) { - $leftExpr = '(' . $leftExpr . ')'; - } - - // Adjusting Right Expression - $rightExpr = (string) $this->rightExpr; - - if ($this->rightExpr instanceof Math) { - $rightExpr = '(' . $rightExpr . ')'; - } - - return $leftExpr . ' ' . $this->operator . ' ' . $rightExpr; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/OrderBy.php b/vendor/doctrine/orm/src/Query/Expr/OrderBy.php deleted file mode 100644 index ac9e160..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/OrderBy.php +++ /dev/null @@ -1,60 +0,0 @@ - */ - protected array $parts = []; - - public function __construct( - string|null $sort = null, - string|null $order = null, - ) { - if ($sort) { - $this->add($sort, $order); - } - } - - public function add(string $sort, string|null $order = null): void - { - $order = ! $order ? 'ASC' : $order; - $this->parts[] = $sort . ' ' . $order; - } - - /** @psalm-return 0|positive-int */ - public function count(): int - { - return count($this->parts); - } - - /** @psalm-return list */ - public function getParts(): array - { - return $this->parts; - } - - public function __toString(): string - { - return $this->preSeparator . implode($this->separator, $this->parts) . $this->postSeparator; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Orx.php b/vendor/doctrine/orm/src/Query/Expr/Orx.php deleted file mode 100644 index 2ae2332..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Orx.php +++ /dev/null @@ -1,32 +0,0 @@ - */ - protected array $parts = []; - - /** @psalm-return list */ - public function getParts(): array - { - return $this->parts; - } -} diff --git a/vendor/doctrine/orm/src/Query/Expr/Select.php b/vendor/doctrine/orm/src/Query/Expr/Select.php deleted file mode 100644 index 91b0b60..0000000 --- a/vendor/doctrine/orm/src/Query/Expr/Select.php +++ /dev/null @@ -1,28 +0,0 @@ - */ - protected array $parts = []; - - /** @psalm-return list */ - public function getParts(): array - { - return $this->parts; - } -} diff --git a/vendor/doctrine/orm/src/Query/Filter/FilterException.php b/vendor/doctrine/orm/src/Query/Filter/FilterException.php deleted file mode 100644 index 37f12bc..0000000 --- a/vendor/doctrine/orm/src/Query/Filter/FilterException.php +++ /dev/null @@ -1,23 +0,0 @@ - - */ - private array $parameters = []; - - final public function __construct( - private readonly EntityManagerInterface $em, - ) { - } - - /** - * Sets a parameter list that can be used by the filter. - * - * @param array $values List of parameter values. - * @param string $type The parameter type. If specified, the given value will be run through - * the type conversion of this type. - * - * @return $this - */ - final public function setParameterList(string $name, array $values, string $type = Types::STRING): static - { - $this->parameters[$name] = ['value' => $values, 'type' => $type, 'is_list' => true]; - - // Keep the parameters sorted for the hash - ksort($this->parameters); - - // The filter collection of the EM is now dirty - $this->em->getFilters()->setFiltersStateDirty(); - - return $this; - } - - /** - * Sets a parameter that can be used by the filter. - * - * @param string|null $type The parameter type. If specified, the given value will be run through - * the type conversion of this type. This is usually not needed for - * strings and numeric types. - * - * @return $this - */ - final public function setParameter(string $name, mixed $value, string|null $type = null): static - { - if ($type === null) { - $type = ParameterTypeInferer::inferType($value); - } - - $this->parameters[$name] = ['value' => $value, 'type' => $type, 'is_list' => false]; - - // Keep the parameters sorted for the hash - ksort($this->parameters); - - // The filter collection of the EM is now dirty - $this->em->getFilters()->setFiltersStateDirty(); - - return $this; - } - - /** - * Gets a parameter to use in a query. - * - * The function is responsible for the right output escaping to use the - * value in a query. - * - * @return string The SQL escaped parameter to use in a query. - * - * @throws InvalidArgumentException - */ - final public function getParameter(string $name): string - { - if (! isset($this->parameters[$name])) { - throw new InvalidArgumentException("Parameter '" . $name . "' does not exist."); - } - - if ($this->parameters[$name]['is_list']) { - throw FilterException::cannotConvertListParameterIntoSingleValue($name); - } - - return $this->em->getConnection()->quote((string) $this->parameters[$name]['value']); - } - - /** - * Gets a parameter to use in a query assuming it's a list of entries. - * - * The function is responsible for the right output escaping to use the - * value in a query, separating each entry by comma to inline it into - * an IN() query part. - * - * @throws InvalidArgumentException - */ - final public function getParameterList(string $name): string - { - if (! isset($this->parameters[$name])) { - throw new InvalidArgumentException("Parameter '" . $name . "' does not exist."); - } - - if ($this->parameters[$name]['is_list'] === false) { - throw FilterException::cannotConvertSingleParameterIntoListValue($name); - } - - $param = $this->parameters[$name]; - $connection = $this->em->getConnection(); - - $quoted = array_map( - static fn (mixed $value): string => $connection->quote((string) $value), - $param['value'], - ); - - return implode(',', $quoted); - } - - /** - * Checks if a parameter was set for the filter. - */ - final public function hasParameter(string $name): bool - { - return isset($this->parameters[$name]); - } - - /** - * Returns as string representation of the SQLFilter parameters (the state). - */ - final public function __toString(): string - { - return serialize($this->parameters); - } - - /** - * Returns the database connection used by the entity manager - */ - final protected function getConnection(): Connection - { - return $this->em->getConnection(); - } - - /** - * Gets the SQL query part to add to a query. - * - * @psalm-param ClassMetadata $targetEntity - * - * @return string The constraint SQL if there is available, empty string otherwise. - */ - abstract public function addFilterConstraint(ClassMetadata $targetEntity, string $targetTableAlias): string; -} diff --git a/vendor/doctrine/orm/src/Query/FilterCollection.php b/vendor/doctrine/orm/src/Query/FilterCollection.php deleted file mode 100644 index 3d3c576..0000000 --- a/vendor/doctrine/orm/src/Query/FilterCollection.php +++ /dev/null @@ -1,260 +0,0 @@ - - */ - private array $enabledFilters = []; - - /** The filter hash from the last time the query was parsed. */ - private string $filterHash = ''; - - /** - * Instances of suspended filters. - * - * @var SQLFilter[] - * @psalm-var array - */ - private array $suspendedFilters = []; - - /** - * The current state of this filter. - * - * @psalm-var self::FILTERS_STATE_* - */ - private int $filtersState = self::FILTERS_STATE_CLEAN; - - public function __construct( - private readonly EntityManagerInterface $em, - ) { - $this->config = $em->getConfiguration(); - } - - /** - * Gets all the enabled filters. - * - * @return array The enabled filters. - */ - public function getEnabledFilters(): array - { - return $this->enabledFilters; - } - - /** - * Gets all the suspended filters. - * - * @return SQLFilter[] The suspended filters. - * @psalm-return array - */ - public function getSuspendedFilters(): array - { - return $this->suspendedFilters; - } - - /** - * Enables a filter from the collection. - * - * @throws InvalidArgumentException If the filter does not exist. - */ - public function enable(string $name): SQLFilter - { - if (! $this->has($name)) { - throw new InvalidArgumentException("Filter '" . $name . "' does not exist."); - } - - if (! $this->isEnabled($name)) { - $filterClass = $this->config->getFilterClassName($name); - - assert($filterClass !== null); - - $this->enabledFilters[$name] = new $filterClass($this->em); - - // In case a suspended filter with the same name was forgotten - unset($this->suspendedFilters[$name]); - - // Keep the enabled filters sorted for the hash - ksort($this->enabledFilters); - - $this->setFiltersStateDirty(); - } - - return $this->enabledFilters[$name]; - } - - /** - * Disables a filter. - * - * @throws InvalidArgumentException If the filter does not exist. - */ - public function disable(string $name): SQLFilter - { - // Get the filter to return it - $filter = $this->getFilter($name); - - unset($this->enabledFilters[$name]); - - $this->setFiltersStateDirty(); - - return $filter; - } - - /** - * Suspend a filter. - * - * @param string $name Name of the filter. - * - * @return SQLFilter The suspended filter. - * - * @throws InvalidArgumentException If the filter does not exist. - */ - public function suspend(string $name): SQLFilter - { - // Get the filter to return it - $filter = $this->getFilter($name); - - $this->suspendedFilters[$name] = $filter; - unset($this->enabledFilters[$name]); - - $this->setFiltersStateDirty(); - - return $filter; - } - - /** - * Restore a disabled filter from the collection. - * - * @param string $name Name of the filter. - * - * @return SQLFilter The restored filter. - * - * @throws InvalidArgumentException If the filter does not exist. - */ - public function restore(string $name): SQLFilter - { - if (! $this->isSuspended($name)) { - throw new InvalidArgumentException("Filter '" . $name . "' is not suspended."); - } - - $this->enabledFilters[$name] = $this->suspendedFilters[$name]; - unset($this->suspendedFilters[$name]); - - // Keep the enabled filters sorted for the hash - ksort($this->enabledFilters); - - $this->setFiltersStateDirty(); - - return $this->enabledFilters[$name]; - } - - /** - * Gets an enabled filter from the collection. - * - * @throws InvalidArgumentException If the filter is not enabled. - */ - public function getFilter(string $name): SQLFilter - { - if (! $this->isEnabled($name)) { - throw new InvalidArgumentException("Filter '" . $name . "' is not enabled."); - } - - return $this->enabledFilters[$name]; - } - - /** - * Checks whether filter with given name is defined. - */ - public function has(string $name): bool - { - return $this->config->getFilterClassName($name) !== null; - } - - /** - * Checks if a filter is enabled. - */ - public function isEnabled(string $name): bool - { - return isset($this->enabledFilters[$name]); - } - - /** - * Checks if a filter is suspended. - * - * @param string $name Name of the filter. - * - * @return bool True if the filter is suspended, false otherwise. - */ - public function isSuspended(string $name): bool - { - return isset($this->suspendedFilters[$name]); - } - - /** - * Checks if the filter collection is clean. - */ - public function isClean(): bool - { - return $this->filtersState === self::FILTERS_STATE_CLEAN; - } - - /** - * Generates a string of currently enabled filters to use for the cache id. - */ - public function getHash(): string - { - // If there are only clean filters, the previous hash can be returned - if ($this->filtersState === self::FILTERS_STATE_CLEAN) { - return $this->filterHash; - } - - $filterHash = ''; - - foreach ($this->enabledFilters as $name => $filter) { - $filterHash .= $name . $filter; - } - - $this->filterHash = $filterHash; - $this->filtersState = self::FILTERS_STATE_CLEAN; - - return $filterHash; - } - - /** - * Sets the filter state to dirty. - */ - public function setFiltersStateDirty(): void - { - $this->filtersState = self::FILTERS_STATE_DIRTY; - } -} diff --git a/vendor/doctrine/orm/src/Query/Lexer.php b/vendor/doctrine/orm/src/Query/Lexer.php deleted file mode 100644 index c446675..0000000 --- a/vendor/doctrine/orm/src/Query/Lexer.php +++ /dev/null @@ -1,150 +0,0 @@ - - */ -class Lexer extends AbstractLexer -{ - /** - * Creates a new query scanner object. - * - * @param string $input A query string. - */ - public function __construct(string $input) - { - $this->setInput($input); - } - - /** - * {@inheritDoc} - */ - protected function getCatchablePatterns(): array - { - return [ - '[a-z_][a-z0-9_]*\:[a-z_][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // aliased name - '[a-z_\\\][a-z0-9_]*(?:\\\[a-z_][a-z0-9_]*)*', // identifier or qualified name - '(?:[0-9]+(?:[\.][0-9]+)*)(?:e[+-]?[0-9]+)?', // numbers - "'(?:[^']|'')*'", // quoted strings - '\?[0-9]*|:[a-z_][a-z0-9_]*', // parameters - ]; - } - - /** - * {@inheritDoc} - */ - protected function getNonCatchablePatterns(): array - { - return ['\s+', '--.*', '(.)']; - } - - protected function getType(string &$value): TokenType - { - $type = TokenType::T_NONE; - - switch (true) { - // Recognize numeric values - case is_numeric($value): - if (str_contains($value, '.') || stripos($value, 'e') !== false) { - return TokenType::T_FLOAT; - } - - return TokenType::T_INTEGER; - - // Recognize quoted strings - case $value[0] === "'": - $value = str_replace("''", "'", substr($value, 1, strlen($value) - 2)); - - return TokenType::T_STRING; - - // Recognize identifiers, aliased or qualified names - case ctype_alpha($value[0]) || $value[0] === '_' || $value[0] === '\\': - $name = 'Doctrine\ORM\Query\TokenType::T_' . strtoupper($value); - - if (defined($name)) { - $type = constant($name); - - if ($type->value > 100) { - return $type; - } - } - - if (str_contains($value, '\\')) { - return TokenType::T_FULLY_QUALIFIED_NAME; - } - - return TokenType::T_IDENTIFIER; - - // Recognize input parameters - case $value[0] === '?' || $value[0] === ':': - return TokenType::T_INPUT_PARAMETER; - - // Recognize symbols - case $value === '.': - return TokenType::T_DOT; - - case $value === ',': - return TokenType::T_COMMA; - - case $value === '(': - return TokenType::T_OPEN_PARENTHESIS; - - case $value === ')': - return TokenType::T_CLOSE_PARENTHESIS; - - case $value === '=': - return TokenType::T_EQUALS; - - case $value === '>': - return TokenType::T_GREATER_THAN; - - case $value === '<': - return TokenType::T_LOWER_THAN; - - case $value === '+': - return TokenType::T_PLUS; - - case $value === '-': - return TokenType::T_MINUS; - - case $value === '*': - return TokenType::T_MULTIPLY; - - case $value === '/': - return TokenType::T_DIVIDE; - - case $value === '!': - return TokenType::T_NEGATE; - - case $value === '{': - return TokenType::T_OPEN_CURLY_BRACE; - - case $value === '}': - return TokenType::T_CLOSE_CURLY_BRACE; - - // Default - default: - // Do nothing - } - - return $type; - } -} diff --git a/vendor/doctrine/orm/src/Query/Parameter.php b/vendor/doctrine/orm/src/Query/Parameter.php deleted file mode 100644 index 43eb7a4..0000000 --- a/vendor/doctrine/orm/src/Query/Parameter.php +++ /dev/null @@ -1,89 +0,0 @@ -name = self::normalizeName($name); - $this->typeSpecified = $type !== null; - - $this->setValue($value, $type); - } - - /** - * Retrieves the Parameter name. - */ - public function getName(): string - { - return $this->name; - } - - /** - * Retrieves the Parameter value. - */ - public function getValue(): mixed - { - return $this->value; - } - - /** - * Retrieves the Parameter type. - */ - public function getType(): mixed - { - return $this->type; - } - - /** - * Defines the Parameter value. - */ - public function setValue(mixed $value, mixed $type = null): void - { - $this->value = $value; - $this->type = $type ?: ParameterTypeInferer::inferType($value); - } - - public function typeWasSpecified(): bool - { - return $this->typeSpecified; - } -} diff --git a/vendor/doctrine/orm/src/Query/ParameterTypeInferer.php b/vendor/doctrine/orm/src/Query/ParameterTypeInferer.php deleted file mode 100644 index dae28fa..0000000 --- a/vendor/doctrine/orm/src/Query/ParameterTypeInferer.php +++ /dev/null @@ -1,77 +0,0 @@ -value) - ? Types::INTEGER - : Types::STRING; - } - - if (is_array($value)) { - $firstValue = current($value); - if ($firstValue instanceof BackedEnum) { - $firstValue = $firstValue->value; - } - - return is_int($firstValue) - ? ArrayParameterType::INTEGER - : ArrayParameterType::STRING; - } - - return ParameterType::STRING; - } - - private function __construct() - { - } -} diff --git a/vendor/doctrine/orm/src/Query/Parser.php b/vendor/doctrine/orm/src/Query/Parser.php deleted file mode 100644 index e948f2c..0000000 --- a/vendor/doctrine/orm/src/Query/Parser.php +++ /dev/null @@ -1,3269 +0,0 @@ - - * @psalm-type QueryComponent = array{ - * metadata?: ClassMetadata, - * parent?: string|null, - * relation?: AssociationMapping|null, - * map?: string|null, - * resultVariable?: AST\Node|string, - * nestingLevel: int, - * token: DqlToken, - * } - */ -final class Parser -{ - /** - * @readonly Maps BUILT-IN string function names to AST class names. - * @psalm-var array> - */ - private static array $stringFunctions = [ - 'concat' => Functions\ConcatFunction::class, - 'substring' => Functions\SubstringFunction::class, - 'trim' => Functions\TrimFunction::class, - 'lower' => Functions\LowerFunction::class, - 'upper' => Functions\UpperFunction::class, - 'identity' => Functions\IdentityFunction::class, - ]; - - /** - * @readonly Maps BUILT-IN numeric function names to AST class names. - * @psalm-var array> - */ - private static array $numericFunctions = [ - 'length' => Functions\LengthFunction::class, - 'locate' => Functions\LocateFunction::class, - 'abs' => Functions\AbsFunction::class, - 'sqrt' => Functions\SqrtFunction::class, - 'mod' => Functions\ModFunction::class, - 'size' => Functions\SizeFunction::class, - 'date_diff' => Functions\DateDiffFunction::class, - 'bit_and' => Functions\BitAndFunction::class, - 'bit_or' => Functions\BitOrFunction::class, - - // Aggregate functions - 'min' => Functions\MinFunction::class, - 'max' => Functions\MaxFunction::class, - 'avg' => Functions\AvgFunction::class, - 'sum' => Functions\SumFunction::class, - 'count' => Functions\CountFunction::class, - ]; - - /** - * @readonly Maps BUILT-IN datetime function names to AST class names. - * @psalm-var array> - */ - private static array $datetimeFunctions = [ - 'current_date' => Functions\CurrentDateFunction::class, - 'current_time' => Functions\CurrentTimeFunction::class, - 'current_timestamp' => Functions\CurrentTimestampFunction::class, - 'date_add' => Functions\DateAddFunction::class, - 'date_sub' => Functions\DateSubFunction::class, - ]; - - /* - * Expressions that were encountered during parsing of identifiers and expressions - * and still need to be validated. - */ - - /** @psalm-var list */ - private array $deferredIdentificationVariables = []; - - /** @psalm-var list */ - private array $deferredPathExpressions = []; - - /** @psalm-var list */ - private array $deferredResultVariables = []; - - /** @psalm-var list */ - private array $deferredNewObjectExpressions = []; - - /** - * The lexer. - */ - private readonly Lexer $lexer; - - /** - * The parser result. - */ - private readonly ParserResult $parserResult; - - /** - * The EntityManager. - */ - private readonly EntityManagerInterface $em; - - /** - * Map of declared query components in the parsed query. - * - * @psalm-var array - */ - private array $queryComponents = []; - - /** - * Keeps the nesting level of defined ResultVariables. - */ - private int $nestingLevel = 0; - - /** - * Any additional custom tree walkers that modify the AST. - * - * @psalm-var list> - */ - private array $customTreeWalkers = []; - - /** - * The custom last tree walker, if any, that is responsible for producing the output. - * - * @var class-string|null - */ - private $customOutputWalker; - - /** @psalm-var array */ - private array $identVariableExpressions = []; - - /** - * Creates a new query parser object. - * - * @param Query $query The Query to parse. - */ - public function __construct(private readonly Query $query) - { - $this->em = $query->getEntityManager(); - $this->lexer = new Lexer((string) $query->getDQL()); - $this->parserResult = new ParserResult(); - } - - /** - * Sets a custom tree walker that produces output. - * This tree walker will be run last over the AST, after any other walkers. - * - * @psalm-param class-string $className - */ - public function setCustomOutputTreeWalker(string $className): void - { - $this->customOutputWalker = $className; - } - - /** - * Adds a custom tree walker for modifying the AST. - * - * @psalm-param class-string $className - */ - public function addCustomTreeWalker(string $className): void - { - $this->customTreeWalkers[] = $className; - } - - /** - * Gets the lexer used by the parser. - */ - public function getLexer(): Lexer - { - return $this->lexer; - } - - /** - * Gets the ParserResult that is being filled with information during parsing. - */ - public function getParserResult(): ParserResult - { - return $this->parserResult; - } - - /** - * Gets the EntityManager used by the parser. - */ - public function getEntityManager(): EntityManagerInterface - { - return $this->em; - } - - /** - * Parses and builds AST for the given Query. - */ - public function getAST(): AST\SelectStatement|AST\UpdateStatement|AST\DeleteStatement - { - // Parse & build AST - $AST = $this->QueryLanguage(); - - // Process any deferred validations of some nodes in the AST. - // This also allows post-processing of the AST for modification purposes. - $this->processDeferredIdentificationVariables(); - - if ($this->deferredPathExpressions) { - $this->processDeferredPathExpressions(); - } - - if ($this->deferredResultVariables) { - $this->processDeferredResultVariables(); - } - - if ($this->deferredNewObjectExpressions) { - $this->processDeferredNewObjectExpressions($AST); - } - - $this->processRootEntityAliasSelected(); - - // TODO: Is there a way to remove this? It may impact the mixed hydration resultset a lot! - $this->fixIdentificationVariableOrder($AST); - - return $AST; - } - - /** - * Attempts to match the given token with the current lookahead token. - * - * If they match, updates the lookahead token; otherwise raises a syntax - * error. - * - * @throws QueryException If the tokens don't match. - */ - public function match(TokenType $token): void - { - $lookaheadType = $this->lexer->lookahead->type ?? null; - - // Short-circuit on first condition, usually types match - if ($lookaheadType === $token) { - $this->lexer->moveNext(); - - return; - } - - // If parameter is not identifier (1-99) must be exact match - if ($token->value < TokenType::T_IDENTIFIER->value) { - $this->syntaxError($this->lexer->getLiteral($token)); - } - - // If parameter is keyword (200+) must be exact match - if ($token->value > TokenType::T_IDENTIFIER->value) { - $this->syntaxError($this->lexer->getLiteral($token)); - } - - // If parameter is T_IDENTIFIER, then matches T_IDENTIFIER (100) and keywords (200+) - if ($token->value === TokenType::T_IDENTIFIER->value && $lookaheadType->value < TokenType::T_IDENTIFIER->value) { - $this->syntaxError($this->lexer->getLiteral($token)); - } - - $this->lexer->moveNext(); - } - - /** - * Frees this parser, enabling it to be reused. - * - * @param bool $deep Whether to clean peek and reset errors. - * @param int $position Position to reset. - */ - public function free(bool $deep = false, int $position = 0): void - { - // WARNING! Use this method with care. It resets the scanner! - $this->lexer->resetPosition($position); - - // Deep = true cleans peek and also any previously defined errors - if ($deep) { - $this->lexer->resetPeek(); - } - - $this->lexer->token = null; - $this->lexer->lookahead = null; - } - - /** - * Parses a query string. - */ - public function parse(): ParserResult - { - $AST = $this->getAST(); - - $customWalkers = $this->query->getHint(Query::HINT_CUSTOM_TREE_WALKERS); - if ($customWalkers !== false) { - $this->customTreeWalkers = $customWalkers; - } - - $customOutputWalker = $this->query->getHint(Query::HINT_CUSTOM_OUTPUT_WALKER); - if ($customOutputWalker !== false) { - $this->customOutputWalker = $customOutputWalker; - } - - // Run any custom tree walkers over the AST - if ($this->customTreeWalkers) { - $treeWalkerChain = new TreeWalkerChain($this->query, $this->parserResult, $this->queryComponents); - - foreach ($this->customTreeWalkers as $walker) { - $treeWalkerChain->addTreeWalker($walker); - } - - match (true) { - $AST instanceof AST\UpdateStatement => $treeWalkerChain->walkUpdateStatement($AST), - $AST instanceof AST\DeleteStatement => $treeWalkerChain->walkDeleteStatement($AST), - $AST instanceof AST\SelectStatement => $treeWalkerChain->walkSelectStatement($AST), - }; - - $this->queryComponents = $treeWalkerChain->getQueryComponents(); - } - - $outputWalkerClass = $this->customOutputWalker ?: SqlWalker::class; - $outputWalker = new $outputWalkerClass($this->query, $this->parserResult, $this->queryComponents); - - // Assign an SQL executor to the parser result - $this->parserResult->setSqlExecutor($outputWalker->getExecutor($AST)); - - return $this->parserResult; - } - - /** - * Fixes order of identification variables. - * - * They have to appear in the select clause in the same order as the - * declarations (from ... x join ... y join ... z ...) appear in the query - * as the hydration process relies on that order for proper operation. - */ - private function fixIdentificationVariableOrder(AST\SelectStatement|AST\DeleteStatement|AST\UpdateStatement $AST): void - { - if (count($this->identVariableExpressions) <= 1) { - return; - } - - assert($AST instanceof AST\SelectStatement); - - foreach ($this->queryComponents as $dqlAlias => $qComp) { - if (! isset($this->identVariableExpressions[$dqlAlias])) { - continue; - } - - $expr = $this->identVariableExpressions[$dqlAlias]; - $key = array_search($expr, $AST->selectClause->selectExpressions, true); - - unset($AST->selectClause->selectExpressions[$key]); - - $AST->selectClause->selectExpressions[] = $expr; - } - } - - /** - * Generates a new syntax error. - * - * @param string $expected Expected string. - * @param DqlToken|null $token Got token. - * - * @throws QueryException - */ - public function syntaxError(string $expected = '', Token|null $token = null): never - { - if ($token === null) { - $token = $this->lexer->lookahead; - } - - $tokenPos = $token->position ?? '-1'; - - $message = sprintf('line 0, col %d: Error: ', $tokenPos); - $message .= $expected !== '' ? sprintf('Expected %s, got ', $expected) : 'Unexpected '; - $message .= $this->lexer->lookahead === null ? 'end of string.' : sprintf("'%s'", $token->value); - - throw QueryException::syntaxError($message, QueryException::dqlError($this->query->getDQL() ?? '')); - } - - /** - * Generates a new semantical error. - * - * @param string $message Optional message. - * @psalm-param DqlToken|null $token - * - * @throws QueryException - */ - public function semanticalError(string $message = '', Token|null $token = null): never - { - if ($token === null) { - $token = $this->lexer->lookahead ?? new Token('fake token', 42, 0); - } - - // Minimum exposed chars ahead of token - $distance = 12; - - // Find a position of a final word to display in error string - $dql = $this->query->getDQL(); - $length = strlen($dql); - $pos = $token->position + $distance; - $pos = strpos($dql, ' ', $length > $pos ? $pos : $length); - $length = $pos !== false ? $pos - $token->position : $distance; - - $tokenPos = $token->position > 0 ? $token->position : '-1'; - $tokenStr = substr($dql, $token->position, $length); - - // Building informative message - $message = 'line 0, col ' . $tokenPos . " near '" . $tokenStr . "': Error: " . $message; - - throw QueryException::semanticalError($message, QueryException::dqlError($this->query->getDQL())); - } - - /** - * Peeks beyond the matched closing parenthesis and returns the first token after that one. - * - * @param bool $resetPeek Reset peek after finding the closing parenthesis. - * - * @psalm-return DqlToken|null - */ - private function peekBeyondClosingParenthesis(bool $resetPeek = true): Token|null - { - $token = $this->lexer->peek(); - $numUnmatched = 1; - - while ($numUnmatched > 0 && $token !== null) { - switch ($token->type) { - case TokenType::T_OPEN_PARENTHESIS: - ++$numUnmatched; - break; - - case TokenType::T_CLOSE_PARENTHESIS: - --$numUnmatched; - break; - - default: - // Do nothing - } - - $token = $this->lexer->peek(); - } - - if ($resetPeek) { - $this->lexer->resetPeek(); - } - - return $token; - } - - /** - * Checks if the given token indicates a mathematical operator. - * - * @psalm-param DqlToken|null $token - */ - private function isMathOperator(Token|null $token): bool - { - return $token !== null && in_array($token->type, [TokenType::T_PLUS, TokenType::T_MINUS, TokenType::T_DIVIDE, TokenType::T_MULTIPLY], true); - } - - /** - * Checks if the next-next (after lookahead) token starts a function. - * - * @return bool TRUE if the next-next tokens start a function, FALSE otherwise. - */ - private function isFunction(): bool - { - assert($this->lexer->lookahead !== null); - $lookaheadType = $this->lexer->lookahead->type; - $peek = $this->lexer->peek(); - - $this->lexer->resetPeek(); - - return $lookaheadType->value >= TokenType::T_IDENTIFIER->value && $peek !== null && $peek->type === TokenType::T_OPEN_PARENTHESIS; - } - - /** - * Checks whether the given token type indicates an aggregate function. - * - * @return bool TRUE if the token type is an aggregate function, FALSE otherwise. - */ - private function isAggregateFunction(TokenType $tokenType): bool - { - return in_array( - $tokenType, - [TokenType::T_AVG, TokenType::T_MIN, TokenType::T_MAX, TokenType::T_SUM, TokenType::T_COUNT], - true, - ); - } - - /** - * Checks whether the current lookahead token of the lexer has the type T_ALL, T_ANY or T_SOME. - */ - private function isNextAllAnySome(): bool - { - assert($this->lexer->lookahead !== null); - - return in_array( - $this->lexer->lookahead->type, - [TokenType::T_ALL, TokenType::T_ANY, TokenType::T_SOME], - true, - ); - } - - /** - * Validates that the given IdentificationVariable is semantically correct. - * It must exist in query components list. - */ - private function processDeferredIdentificationVariables(): void - { - foreach ($this->deferredIdentificationVariables as $deferredItem) { - $identVariable = $deferredItem['expression']; - - // Check if IdentificationVariable exists in queryComponents - if (! isset($this->queryComponents[$identVariable])) { - $this->semanticalError( - sprintf("'%s' is not defined.", $identVariable), - $deferredItem['token'], - ); - } - - $qComp = $this->queryComponents[$identVariable]; - - // Check if queryComponent points to an AbstractSchemaName or a ResultVariable - if (! isset($qComp['metadata'])) { - $this->semanticalError( - sprintf("'%s' does not point to a Class.", $identVariable), - $deferredItem['token'], - ); - } - - // Validate if identification variable nesting level is lower or equal than the current one - if ($qComp['nestingLevel'] > $deferredItem['nestingLevel']) { - $this->semanticalError( - sprintf("'%s' is used outside the scope of its declaration.", $identVariable), - $deferredItem['token'], - ); - } - } - } - - /** - * Validates that the given NewObjectExpression. - */ - private function processDeferredNewObjectExpressions(AST\SelectStatement $AST): void - { - foreach ($this->deferredNewObjectExpressions as $deferredItem) { - $expression = $deferredItem['expression']; - $token = $deferredItem['token']; - $className = $expression->className; - $args = $expression->args; - $fromClassName = $AST->fromClause->identificationVariableDeclarations[0]->rangeVariableDeclaration->abstractSchemaName ?? null; - - // If the namespace is not given then assumes the first FROM entity namespace - if (! str_contains($className, '\\') && ! class_exists($className) && is_string($fromClassName) && str_contains($fromClassName, '\\')) { - $namespace = substr($fromClassName, 0, strrpos($fromClassName, '\\')); - $fqcn = $namespace . '\\' . $className; - - if (class_exists($fqcn)) { - $expression->className = $fqcn; - $className = $fqcn; - } - } - - if (! class_exists($className)) { - $this->semanticalError(sprintf('Class "%s" is not defined.', $className), $token); - } - - $class = new ReflectionClass($className); - - if (! $class->isInstantiable()) { - $this->semanticalError(sprintf('Class "%s" can not be instantiated.', $className), $token); - } - - if ($class->getConstructor() === null) { - $this->semanticalError(sprintf('Class "%s" has not a valid constructor.', $className), $token); - } - - if ($class->getConstructor()->getNumberOfRequiredParameters() > count($args)) { - $this->semanticalError(sprintf('Number of arguments does not match with "%s" constructor declaration.', $className), $token); - } - } - } - - /** - * Validates that the given ResultVariable is semantically correct. - * It must exist in query components list. - */ - private function processDeferredResultVariables(): void - { - foreach ($this->deferredResultVariables as $deferredItem) { - $resultVariable = $deferredItem['expression']; - - // Check if ResultVariable exists in queryComponents - if (! isset($this->queryComponents[$resultVariable])) { - $this->semanticalError( - sprintf("'%s' is not defined.", $resultVariable), - $deferredItem['token'], - ); - } - - $qComp = $this->queryComponents[$resultVariable]; - - // Check if queryComponent points to an AbstractSchemaName or a ResultVariable - if (! isset($qComp['resultVariable'])) { - $this->semanticalError( - sprintf("'%s' does not point to a ResultVariable.", $resultVariable), - $deferredItem['token'], - ); - } - - // Validate if identification variable nesting level is lower or equal than the current one - if ($qComp['nestingLevel'] > $deferredItem['nestingLevel']) { - $this->semanticalError( - sprintf("'%s' is used outside the scope of its declaration.", $resultVariable), - $deferredItem['token'], - ); - } - } - } - - /** - * Validates that the given PathExpression is semantically correct for grammar rules: - * - * AssociationPathExpression ::= CollectionValuedPathExpression | SingleValuedAssociationPathExpression - * SingleValuedPathExpression ::= StateFieldPathExpression | SingleValuedAssociationPathExpression - * StateFieldPathExpression ::= IdentificationVariable "." StateField - * SingleValuedAssociationPathExpression ::= IdentificationVariable "." SingleValuedAssociationField - * CollectionValuedPathExpression ::= IdentificationVariable "." CollectionValuedAssociationField - */ - private function processDeferredPathExpressions(): void - { - foreach ($this->deferredPathExpressions as $deferredItem) { - $pathExpression = $deferredItem['expression']; - - $class = $this->getMetadataForDqlAlias($pathExpression->identificationVariable); - - $field = $pathExpression->field; - if ($field === null) { - $field = $pathExpression->field = $class->identifier[0]; - } - - // Check if field or association exists - if (! isset($class->associationMappings[$field]) && ! isset($class->fieldMappings[$field])) { - $this->semanticalError( - 'Class ' . $class->name . ' has no field or association named ' . $field, - $deferredItem['token'], - ); - } - - $fieldType = AST\PathExpression::TYPE_STATE_FIELD; - - if (isset($class->associationMappings[$field])) { - $assoc = $class->associationMappings[$field]; - - $fieldType = $assoc->isToOne() - ? AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION - : AST\PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION; - } - - // Validate if PathExpression is one of the expected types - $expectedType = $pathExpression->expectedType; - - if (! ($expectedType & $fieldType)) { - // We need to recognize which was expected type(s) - $expectedStringTypes = []; - - // Validate state field type - if ($expectedType & AST\PathExpression::TYPE_STATE_FIELD) { - $expectedStringTypes[] = 'StateFieldPathExpression'; - } - - // Validate single valued association (*-to-one) - if ($expectedType & AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION) { - $expectedStringTypes[] = 'SingleValuedAssociationField'; - } - - // Validate single valued association (*-to-many) - if ($expectedType & AST\PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION) { - $expectedStringTypes[] = 'CollectionValuedAssociationField'; - } - - // Build the error message - $semanticalError = 'Invalid PathExpression. '; - $semanticalError .= count($expectedStringTypes) === 1 - ? 'Must be a ' . $expectedStringTypes[0] . '.' - : implode(' or ', $expectedStringTypes) . ' expected.'; - - $this->semanticalError($semanticalError, $deferredItem['token']); - } - - // We need to force the type in PathExpression - $pathExpression->type = $fieldType; - } - } - - private function processRootEntityAliasSelected(): void - { - if (! count($this->identVariableExpressions)) { - return; - } - - foreach ($this->identVariableExpressions as $dqlAlias => $expr) { - if (isset($this->queryComponents[$dqlAlias]) && ! isset($this->queryComponents[$dqlAlias]['parent'])) { - return; - } - } - - $this->semanticalError('Cannot select entity through identification variables without choosing at least one root entity alias.'); - } - - /** - * QueryLanguage ::= SelectStatement | UpdateStatement | DeleteStatement - */ - public function QueryLanguage(): AST\SelectStatement|AST\UpdateStatement|AST\DeleteStatement - { - $statement = null; - - $this->lexer->moveNext(); - - switch ($this->lexer->lookahead->type ?? null) { - case TokenType::T_SELECT: - $statement = $this->SelectStatement(); - break; - - case TokenType::T_UPDATE: - $statement = $this->UpdateStatement(); - break; - - case TokenType::T_DELETE: - $statement = $this->DeleteStatement(); - break; - - default: - $this->syntaxError('SELECT, UPDATE or DELETE'); - break; - } - - // Check for end of string - if ($this->lexer->lookahead !== null) { - $this->syntaxError('end of string'); - } - - return $statement; - } - - /** - * SelectStatement ::= SelectClause FromClause [WhereClause] [GroupByClause] [HavingClause] [OrderByClause] - */ - public function SelectStatement(): AST\SelectStatement - { - $selectStatement = new AST\SelectStatement($this->SelectClause(), $this->FromClause()); - - $selectStatement->whereClause = $this->lexer->isNextToken(TokenType::T_WHERE) ? $this->WhereClause() : null; - $selectStatement->groupByClause = $this->lexer->isNextToken(TokenType::T_GROUP) ? $this->GroupByClause() : null; - $selectStatement->havingClause = $this->lexer->isNextToken(TokenType::T_HAVING) ? $this->HavingClause() : null; - $selectStatement->orderByClause = $this->lexer->isNextToken(TokenType::T_ORDER) ? $this->OrderByClause() : null; - - return $selectStatement; - } - - /** - * UpdateStatement ::= UpdateClause [WhereClause] - */ - public function UpdateStatement(): AST\UpdateStatement - { - $updateStatement = new AST\UpdateStatement($this->UpdateClause()); - - $updateStatement->whereClause = $this->lexer->isNextToken(TokenType::T_WHERE) ? $this->WhereClause() : null; - - return $updateStatement; - } - - /** - * DeleteStatement ::= DeleteClause [WhereClause] - */ - public function DeleteStatement(): AST\DeleteStatement - { - $deleteStatement = new AST\DeleteStatement($this->DeleteClause()); - - $deleteStatement->whereClause = $this->lexer->isNextToken(TokenType::T_WHERE) ? $this->WhereClause() : null; - - return $deleteStatement; - } - - /** - * IdentificationVariable ::= identifier - */ - public function IdentificationVariable(): string - { - $this->match(TokenType::T_IDENTIFIER); - - assert($this->lexer->token !== null); - $identVariable = $this->lexer->token->value; - - $this->deferredIdentificationVariables[] = [ - 'expression' => $identVariable, - 'nestingLevel' => $this->nestingLevel, - 'token' => $this->lexer->token, - ]; - - return $identVariable; - } - - /** - * AliasIdentificationVariable = identifier - */ - public function AliasIdentificationVariable(): string - { - $this->match(TokenType::T_IDENTIFIER); - - assert($this->lexer->token !== null); - $aliasIdentVariable = $this->lexer->token->value; - $exists = isset($this->queryComponents[$aliasIdentVariable]); - - if ($exists) { - $this->semanticalError( - sprintf("'%s' is already defined.", $aliasIdentVariable), - $this->lexer->token, - ); - } - - return $aliasIdentVariable; - } - - /** - * AbstractSchemaName ::= fully_qualified_name | identifier - */ - public function AbstractSchemaName(): string - { - if ($this->lexer->isNextToken(TokenType::T_FULLY_QUALIFIED_NAME)) { - $this->match(TokenType::T_FULLY_QUALIFIED_NAME); - assert($this->lexer->token !== null); - - return $this->lexer->token->value; - } - - $this->match(TokenType::T_IDENTIFIER); - assert($this->lexer->token !== null); - - return $this->lexer->token->value; - } - - /** - * Validates an AbstractSchemaName, making sure the class exists. - * - * @param string $schemaName The name to validate. - * - * @throws QueryException if the name does not exist. - */ - private function validateAbstractSchemaName(string $schemaName): void - { - assert($this->lexer->token !== null); - if (! (class_exists($schemaName, true) || interface_exists($schemaName, true))) { - $this->semanticalError( - sprintf("Class '%s' is not defined.", $schemaName), - $this->lexer->token, - ); - } - } - - /** - * AliasResultVariable ::= identifier - */ - public function AliasResultVariable(): string - { - $this->match(TokenType::T_IDENTIFIER); - - assert($this->lexer->token !== null); - $resultVariable = $this->lexer->token->value; - $exists = isset($this->queryComponents[$resultVariable]); - - if ($exists) { - $this->semanticalError( - sprintf("'%s' is already defined.", $resultVariable), - $this->lexer->token, - ); - } - - return $resultVariable; - } - - /** - * ResultVariable ::= identifier - */ - public function ResultVariable(): string - { - $this->match(TokenType::T_IDENTIFIER); - - assert($this->lexer->token !== null); - $resultVariable = $this->lexer->token->value; - - // Defer ResultVariable validation - $this->deferredResultVariables[] = [ - 'expression' => $resultVariable, - 'nestingLevel' => $this->nestingLevel, - 'token' => $this->lexer->token, - ]; - - return $resultVariable; - } - - /** - * JoinAssociationPathExpression ::= IdentificationVariable "." (CollectionValuedAssociationField | SingleValuedAssociationField) - */ - public function JoinAssociationPathExpression(): AST\JoinAssociationPathExpression - { - $identVariable = $this->IdentificationVariable(); - - if (! isset($this->queryComponents[$identVariable])) { - $this->semanticalError( - 'Identification Variable ' . $identVariable . ' used in join path expression but was not defined before.', - ); - } - - $this->match(TokenType::T_DOT); - $this->match(TokenType::T_IDENTIFIER); - - assert($this->lexer->token !== null); - $field = $this->lexer->token->value; - - // Validate association field - $class = $this->getMetadataForDqlAlias($identVariable); - - if (! $class->hasAssociation($field)) { - $this->semanticalError('Class ' . $class->name . ' has no association named ' . $field); - } - - return new AST\JoinAssociationPathExpression($identVariable, $field); - } - - /** - * Parses an arbitrary path expression and defers semantical validation - * based on expected types. - * - * PathExpression ::= IdentificationVariable {"." identifier}* - * - * @psalm-param int-mask-of $expectedTypes - */ - public function PathExpression(int $expectedTypes): AST\PathExpression - { - $identVariable = $this->IdentificationVariable(); - $field = null; - - assert($this->lexer->token !== null); - if ($this->lexer->isNextToken(TokenType::T_DOT)) { - $this->match(TokenType::T_DOT); - $this->match(TokenType::T_IDENTIFIER); - - $field = $this->lexer->token->value; - - while ($this->lexer->isNextToken(TokenType::T_DOT)) { - $this->match(TokenType::T_DOT); - $this->match(TokenType::T_IDENTIFIER); - $field .= '.' . $this->lexer->token->value; - } - } - - // Creating AST node - $pathExpr = new AST\PathExpression($expectedTypes, $identVariable, $field); - - // Defer PathExpression validation if requested to be deferred - $this->deferredPathExpressions[] = [ - 'expression' => $pathExpr, - 'nestingLevel' => $this->nestingLevel, - 'token' => $this->lexer->token, - ]; - - return $pathExpr; - } - - /** - * AssociationPathExpression ::= CollectionValuedPathExpression | SingleValuedAssociationPathExpression - */ - public function AssociationPathExpression(): AST\PathExpression - { - return $this->PathExpression( - AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION | - AST\PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION, - ); - } - - /** - * SingleValuedPathExpression ::= StateFieldPathExpression | SingleValuedAssociationPathExpression - */ - public function SingleValuedPathExpression(): AST\PathExpression - { - return $this->PathExpression( - AST\PathExpression::TYPE_STATE_FIELD | - AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, - ); - } - - /** - * StateFieldPathExpression ::= IdentificationVariable "." StateField - */ - public function StateFieldPathExpression(): AST\PathExpression - { - return $this->PathExpression(AST\PathExpression::TYPE_STATE_FIELD); - } - - /** - * SingleValuedAssociationPathExpression ::= IdentificationVariable "." SingleValuedAssociationField - */ - public function SingleValuedAssociationPathExpression(): AST\PathExpression - { - return $this->PathExpression(AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION); - } - - /** - * CollectionValuedPathExpression ::= IdentificationVariable "." CollectionValuedAssociationField - */ - public function CollectionValuedPathExpression(): AST\PathExpression - { - return $this->PathExpression(AST\PathExpression::TYPE_COLLECTION_VALUED_ASSOCIATION); - } - - /** - * SelectClause ::= "SELECT" ["DISTINCT"] SelectExpression {"," SelectExpression} - */ - public function SelectClause(): AST\SelectClause - { - $isDistinct = false; - $this->match(TokenType::T_SELECT); - - // Check for DISTINCT - if ($this->lexer->isNextToken(TokenType::T_DISTINCT)) { - $this->match(TokenType::T_DISTINCT); - - $isDistinct = true; - } - - // Process SelectExpressions (1..N) - $selectExpressions = []; - $selectExpressions[] = $this->SelectExpression(); - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $selectExpressions[] = $this->SelectExpression(); - } - - return new AST\SelectClause($selectExpressions, $isDistinct); - } - - /** - * SimpleSelectClause ::= "SELECT" ["DISTINCT"] SimpleSelectExpression - */ - public function SimpleSelectClause(): AST\SimpleSelectClause - { - $isDistinct = false; - $this->match(TokenType::T_SELECT); - - if ($this->lexer->isNextToken(TokenType::T_DISTINCT)) { - $this->match(TokenType::T_DISTINCT); - - $isDistinct = true; - } - - return new AST\SimpleSelectClause($this->SimpleSelectExpression(), $isDistinct); - } - - /** - * UpdateClause ::= "UPDATE" AbstractSchemaName ["AS"] AliasIdentificationVariable "SET" UpdateItem {"," UpdateItem}* - */ - public function UpdateClause(): AST\UpdateClause - { - $this->match(TokenType::T_UPDATE); - assert($this->lexer->lookahead !== null); - - $token = $this->lexer->lookahead; - $abstractSchemaName = $this->AbstractSchemaName(); - - $this->validateAbstractSchemaName($abstractSchemaName); - - if ($this->lexer->isNextToken(TokenType::T_AS)) { - $this->match(TokenType::T_AS); - } - - $aliasIdentificationVariable = $this->AliasIdentificationVariable(); - - $class = $this->em->getClassMetadata($abstractSchemaName); - - // Building queryComponent - $queryComponent = [ - 'metadata' => $class, - 'parent' => null, - 'relation' => null, - 'map' => null, - 'nestingLevel' => $this->nestingLevel, - 'token' => $token, - ]; - - $this->queryComponents[$aliasIdentificationVariable] = $queryComponent; - - $this->match(TokenType::T_SET); - - $updateItems = []; - $updateItems[] = $this->UpdateItem(); - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $updateItems[] = $this->UpdateItem(); - } - - $updateClause = new AST\UpdateClause($abstractSchemaName, $updateItems); - $updateClause->aliasIdentificationVariable = $aliasIdentificationVariable; - - return $updateClause; - } - - /** - * DeleteClause ::= "DELETE" ["FROM"] AbstractSchemaName ["AS"] AliasIdentificationVariable - */ - public function DeleteClause(): AST\DeleteClause - { - $this->match(TokenType::T_DELETE); - - if ($this->lexer->isNextToken(TokenType::T_FROM)) { - $this->match(TokenType::T_FROM); - } - - assert($this->lexer->lookahead !== null); - $token = $this->lexer->lookahead; - $abstractSchemaName = $this->AbstractSchemaName(); - - $this->validateAbstractSchemaName($abstractSchemaName); - - $deleteClause = new AST\DeleteClause($abstractSchemaName); - - if ($this->lexer->isNextToken(TokenType::T_AS)) { - $this->match(TokenType::T_AS); - } - - $aliasIdentificationVariable = $this->lexer->isNextToken(TokenType::T_IDENTIFIER) - ? $this->AliasIdentificationVariable() - : 'alias_should_have_been_set'; - - $deleteClause->aliasIdentificationVariable = $aliasIdentificationVariable; - $class = $this->em->getClassMetadata($deleteClause->abstractSchemaName); - - // Building queryComponent - $queryComponent = [ - 'metadata' => $class, - 'parent' => null, - 'relation' => null, - 'map' => null, - 'nestingLevel' => $this->nestingLevel, - 'token' => $token, - ]; - - $this->queryComponents[$aliasIdentificationVariable] = $queryComponent; - - return $deleteClause; - } - - /** - * FromClause ::= "FROM" IdentificationVariableDeclaration {"," IdentificationVariableDeclaration}* - */ - public function FromClause(): AST\FromClause - { - $this->match(TokenType::T_FROM); - - $identificationVariableDeclarations = []; - $identificationVariableDeclarations[] = $this->IdentificationVariableDeclaration(); - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $identificationVariableDeclarations[] = $this->IdentificationVariableDeclaration(); - } - - return new AST\FromClause($identificationVariableDeclarations); - } - - /** - * SubselectFromClause ::= "FROM" SubselectIdentificationVariableDeclaration {"," SubselectIdentificationVariableDeclaration}* - */ - public function SubselectFromClause(): AST\SubselectFromClause - { - $this->match(TokenType::T_FROM); - - $identificationVariables = []; - $identificationVariables[] = $this->SubselectIdentificationVariableDeclaration(); - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $identificationVariables[] = $this->SubselectIdentificationVariableDeclaration(); - } - - return new AST\SubselectFromClause($identificationVariables); - } - - /** - * WhereClause ::= "WHERE" ConditionalExpression - */ - public function WhereClause(): AST\WhereClause - { - $this->match(TokenType::T_WHERE); - - return new AST\WhereClause($this->ConditionalExpression()); - } - - /** - * HavingClause ::= "HAVING" ConditionalExpression - */ - public function HavingClause(): AST\HavingClause - { - $this->match(TokenType::T_HAVING); - - return new AST\HavingClause($this->ConditionalExpression()); - } - - /** - * GroupByClause ::= "GROUP" "BY" GroupByItem {"," GroupByItem}* - */ - public function GroupByClause(): AST\GroupByClause - { - $this->match(TokenType::T_GROUP); - $this->match(TokenType::T_BY); - - $groupByItems = [$this->GroupByItem()]; - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $groupByItems[] = $this->GroupByItem(); - } - - return new AST\GroupByClause($groupByItems); - } - - /** - * OrderByClause ::= "ORDER" "BY" OrderByItem {"," OrderByItem}* - */ - public function OrderByClause(): AST\OrderByClause - { - $this->match(TokenType::T_ORDER); - $this->match(TokenType::T_BY); - - $orderByItems = []; - $orderByItems[] = $this->OrderByItem(); - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $orderByItems[] = $this->OrderByItem(); - } - - return new AST\OrderByClause($orderByItems); - } - - /** - * Subselect ::= SimpleSelectClause SubselectFromClause [WhereClause] [GroupByClause] [HavingClause] [OrderByClause] - */ - public function Subselect(): AST\Subselect - { - // Increase query nesting level - $this->nestingLevel++; - - $subselect = new AST\Subselect($this->SimpleSelectClause(), $this->SubselectFromClause()); - - $subselect->whereClause = $this->lexer->isNextToken(TokenType::T_WHERE) ? $this->WhereClause() : null; - $subselect->groupByClause = $this->lexer->isNextToken(TokenType::T_GROUP) ? $this->GroupByClause() : null; - $subselect->havingClause = $this->lexer->isNextToken(TokenType::T_HAVING) ? $this->HavingClause() : null; - $subselect->orderByClause = $this->lexer->isNextToken(TokenType::T_ORDER) ? $this->OrderByClause() : null; - - // Decrease query nesting level - $this->nestingLevel--; - - return $subselect; - } - - /** - * UpdateItem ::= SingleValuedPathExpression "=" NewValue - */ - public function UpdateItem(): AST\UpdateItem - { - $pathExpr = $this->SingleValuedPathExpression(); - - $this->match(TokenType::T_EQUALS); - - return new AST\UpdateItem($pathExpr, $this->NewValue()); - } - - /** - * GroupByItem ::= IdentificationVariable | ResultVariable | SingleValuedPathExpression - */ - public function GroupByItem(): string|AST\PathExpression - { - // We need to check if we are in a IdentificationVariable or SingleValuedPathExpression - $glimpse = $this->lexer->glimpse(); - - if ($glimpse !== null && $glimpse->type === TokenType::T_DOT) { - return $this->SingleValuedPathExpression(); - } - - assert($this->lexer->lookahead !== null); - // Still need to decide between IdentificationVariable or ResultVariable - $lookaheadValue = $this->lexer->lookahead->value; - - if (! isset($this->queryComponents[$lookaheadValue])) { - $this->semanticalError('Cannot group by undefined identification or result variable.'); - } - - return isset($this->queryComponents[$lookaheadValue]['metadata']) - ? $this->IdentificationVariable() - : $this->ResultVariable(); - } - - /** - * OrderByItem ::= ( - * SimpleArithmeticExpression | SingleValuedPathExpression | CaseExpression | - * ScalarExpression | ResultVariable | FunctionDeclaration - * ) ["ASC" | "DESC"] - */ - public function OrderByItem(): AST\OrderByItem - { - $this->lexer->peek(); // lookahead => '.' - $this->lexer->peek(); // lookahead => token after '.' - - $peek = $this->lexer->peek(); // lookahead => token after the token after the '.' - - $this->lexer->resetPeek(); - - $glimpse = $this->lexer->glimpse(); - - assert($this->lexer->lookahead !== null); - $expr = match (true) { - $this->isMathOperator($peek) => $this->SimpleArithmeticExpression(), - $glimpse !== null && $glimpse->type === TokenType::T_DOT => $this->SingleValuedPathExpression(), - $this->lexer->peek() && $this->isMathOperator($this->peekBeyondClosingParenthesis()) => $this->ScalarExpression(), - $this->lexer->lookahead->type === TokenType::T_CASE => $this->CaseExpression(), - $this->isFunction() => $this->FunctionDeclaration(), - default => $this->ResultVariable(), - }; - - $type = 'ASC'; - $item = new AST\OrderByItem($expr); - - switch (true) { - case $this->lexer->isNextToken(TokenType::T_DESC): - $this->match(TokenType::T_DESC); - $type = 'DESC'; - break; - - case $this->lexer->isNextToken(TokenType::T_ASC): - $this->match(TokenType::T_ASC); - break; - - default: - // Do nothing - } - - $item->type = $type; - - return $item; - } - - /** - * NewValue ::= SimpleArithmeticExpression | StringPrimary | DatetimePrimary | BooleanPrimary | - * EnumPrimary | SimpleEntityExpression | "NULL" - * - * NOTE: Since it is not possible to correctly recognize individual types, here is the full - * grammar that needs to be supported: - * - * NewValue ::= SimpleArithmeticExpression | "NULL" - * - * SimpleArithmeticExpression covers all *Primary grammar rules and also SimpleEntityExpression - */ - public function NewValue(): AST\ArithmeticExpression|AST\InputParameter|null - { - if ($this->lexer->isNextToken(TokenType::T_NULL)) { - $this->match(TokenType::T_NULL); - - return null; - } - - if ($this->lexer->isNextToken(TokenType::T_INPUT_PARAMETER)) { - $this->match(TokenType::T_INPUT_PARAMETER); - assert($this->lexer->token !== null); - - return new AST\InputParameter($this->lexer->token->value); - } - - return $this->ArithmeticExpression(); - } - - /** - * IdentificationVariableDeclaration ::= RangeVariableDeclaration [IndexBy] {Join}* - */ - public function IdentificationVariableDeclaration(): AST\IdentificationVariableDeclaration - { - $joins = []; - $rangeVariableDeclaration = $this->RangeVariableDeclaration(); - $indexBy = $this->lexer->isNextToken(TokenType::T_INDEX) - ? $this->IndexBy() - : null; - - $rangeVariableDeclaration->isRoot = true; - - while ( - $this->lexer->isNextToken(TokenType::T_LEFT) || - $this->lexer->isNextToken(TokenType::T_INNER) || - $this->lexer->isNextToken(TokenType::T_JOIN) - ) { - $joins[] = $this->Join(); - } - - return new AST\IdentificationVariableDeclaration( - $rangeVariableDeclaration, - $indexBy, - $joins, - ); - } - - /** - * SubselectIdentificationVariableDeclaration ::= IdentificationVariableDeclaration - * - * {Internal note: WARNING: Solution is harder than a bare implementation. - * Desired EBNF support: - * - * SubselectIdentificationVariableDeclaration ::= IdentificationVariableDeclaration | (AssociationPathExpression ["AS"] AliasIdentificationVariable) - * - * It demands that entire SQL generation to become programmatical. This is - * needed because association based subselect requires "WHERE" conditional - * expressions to be injected, but there is no scope to do that. Only scope - * accessible is "FROM", prohibiting an easy implementation without larger - * changes.} - */ - public function SubselectIdentificationVariableDeclaration(): AST\IdentificationVariableDeclaration - { - /* - NOT YET IMPLEMENTED! - - $glimpse = $this->lexer->glimpse(); - - if ($glimpse->type == TokenType::T_DOT) { - $associationPathExpression = $this->AssociationPathExpression(); - - if ($this->lexer->isNextToken(TokenType::T_AS)) { - $this->match(TokenType::T_AS); - } - - $aliasIdentificationVariable = $this->AliasIdentificationVariable(); - $identificationVariable = $associationPathExpression->identificationVariable; - $field = $associationPathExpression->associationField; - - $class = $this->queryComponents[$identificationVariable]['metadata']; - $targetClass = $this->em->getClassMetadata($class->associationMappings[$field]['targetEntity']); - - // Building queryComponent - $joinQueryComponent = array( - 'metadata' => $targetClass, - 'parent' => $identificationVariable, - 'relation' => $class->getAssociationMapping($field), - 'map' => null, - 'nestingLevel' => $this->nestingLevel, - 'token' => $this->lexer->lookahead - ); - - $this->queryComponents[$aliasIdentificationVariable] = $joinQueryComponent; - - return new AST\SubselectIdentificationVariableDeclaration( - $associationPathExpression, $aliasIdentificationVariable - ); - } - */ - - return $this->IdentificationVariableDeclaration(); - } - - /** - * Join ::= ["LEFT" ["OUTER"] | "INNER"] "JOIN" - * (JoinAssociationDeclaration | RangeVariableDeclaration) - * ["WITH" ConditionalExpression] - */ - public function Join(): AST\Join - { - // Check Join type - $joinType = AST\Join::JOIN_TYPE_INNER; - - switch (true) { - case $this->lexer->isNextToken(TokenType::T_LEFT): - $this->match(TokenType::T_LEFT); - - $joinType = AST\Join::JOIN_TYPE_LEFT; - - // Possible LEFT OUTER join - if ($this->lexer->isNextToken(TokenType::T_OUTER)) { - $this->match(TokenType::T_OUTER); - - $joinType = AST\Join::JOIN_TYPE_LEFTOUTER; - } - - break; - - case $this->lexer->isNextToken(TokenType::T_INNER): - $this->match(TokenType::T_INNER); - break; - - default: - // Do nothing - } - - $this->match(TokenType::T_JOIN); - - $next = $this->lexer->glimpse(); - assert($next !== null); - $joinDeclaration = $next->type === TokenType::T_DOT ? $this->JoinAssociationDeclaration() : $this->RangeVariableDeclaration(); - $adhocConditions = $this->lexer->isNextToken(TokenType::T_WITH); - $join = new AST\Join($joinType, $joinDeclaration); - - // Describe non-root join declaration - if ($joinDeclaration instanceof AST\RangeVariableDeclaration) { - $joinDeclaration->isRoot = false; - } - - // Check for ad-hoc Join conditions - if ($adhocConditions) { - $this->match(TokenType::T_WITH); - - $join->conditionalExpression = $this->ConditionalExpression(); - } - - return $join; - } - - /** - * RangeVariableDeclaration ::= AbstractSchemaName ["AS"] AliasIdentificationVariable - * - * @throws QueryException - */ - public function RangeVariableDeclaration(): AST\RangeVariableDeclaration - { - if ($this->lexer->isNextToken(TokenType::T_OPEN_PARENTHESIS) && $this->lexer->glimpse()->type === TokenType::T_SELECT) { - $this->semanticalError('Subquery is not supported here', $this->lexer->token); - } - - $abstractSchemaName = $this->AbstractSchemaName(); - - $this->validateAbstractSchemaName($abstractSchemaName); - - if ($this->lexer->isNextToken(TokenType::T_AS)) { - $this->match(TokenType::T_AS); - } - - assert($this->lexer->lookahead !== null); - $token = $this->lexer->lookahead; - $aliasIdentificationVariable = $this->AliasIdentificationVariable(); - $classMetadata = $this->em->getClassMetadata($abstractSchemaName); - - // Building queryComponent - $queryComponent = [ - 'metadata' => $classMetadata, - 'parent' => null, - 'relation' => null, - 'map' => null, - 'nestingLevel' => $this->nestingLevel, - 'token' => $token, - ]; - - $this->queryComponents[$aliasIdentificationVariable] = $queryComponent; - - return new AST\RangeVariableDeclaration($abstractSchemaName, $aliasIdentificationVariable); - } - - /** - * JoinAssociationDeclaration ::= JoinAssociationPathExpression ["AS"] AliasIdentificationVariable [IndexBy] - */ - public function JoinAssociationDeclaration(): AST\JoinAssociationDeclaration - { - $joinAssociationPathExpression = $this->JoinAssociationPathExpression(); - - if ($this->lexer->isNextToken(TokenType::T_AS)) { - $this->match(TokenType::T_AS); - } - - assert($this->lexer->lookahead !== null); - - $aliasIdentificationVariable = $this->AliasIdentificationVariable(); - $indexBy = $this->lexer->isNextToken(TokenType::T_INDEX) ? $this->IndexBy() : null; - - $identificationVariable = $joinAssociationPathExpression->identificationVariable; - $field = $joinAssociationPathExpression->associationField; - - $class = $this->getMetadataForDqlAlias($identificationVariable); - $targetClass = $this->em->getClassMetadata($class->associationMappings[$field]->targetEntity); - - // Building queryComponent - $joinQueryComponent = [ - 'metadata' => $targetClass, - 'parent' => $joinAssociationPathExpression->identificationVariable, - 'relation' => $class->getAssociationMapping($field), - 'map' => null, - 'nestingLevel' => $this->nestingLevel, - 'token' => $this->lexer->lookahead, - ]; - - $this->queryComponents[$aliasIdentificationVariable] = $joinQueryComponent; - - return new AST\JoinAssociationDeclaration($joinAssociationPathExpression, $aliasIdentificationVariable, $indexBy); - } - - /** - * NewObjectExpression ::= "NEW" AbstractSchemaName "(" NewObjectArg {"," NewObjectArg}* ")" - */ - public function NewObjectExpression(): AST\NewObjectExpression - { - $args = []; - $this->match(TokenType::T_NEW); - - $className = $this->AbstractSchemaName(); // note that this is not yet validated - $token = $this->lexer->token; - - $this->match(TokenType::T_OPEN_PARENTHESIS); - - $args[] = $this->NewObjectArg(); - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $args[] = $this->NewObjectArg(); - } - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - $expression = new AST\NewObjectExpression($className, $args); - - // Defer NewObjectExpression validation - $this->deferredNewObjectExpressions[] = [ - 'token' => $token, - 'expression' => $expression, - 'nestingLevel' => $this->nestingLevel, - ]; - - return $expression; - } - - /** - * NewObjectArg ::= ScalarExpression | "(" Subselect ")" - */ - public function NewObjectArg(): mixed - { - assert($this->lexer->lookahead !== null); - $token = $this->lexer->lookahead; - $peek = $this->lexer->glimpse(); - - assert($peek !== null); - if ($token->type === TokenType::T_OPEN_PARENTHESIS && $peek->type === TokenType::T_SELECT) { - $this->match(TokenType::T_OPEN_PARENTHESIS); - $expression = $this->Subselect(); - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return $expression; - } - - return $this->ScalarExpression(); - } - - /** - * IndexBy ::= "INDEX" "BY" SingleValuedPathExpression - */ - public function IndexBy(): AST\IndexBy - { - $this->match(TokenType::T_INDEX); - $this->match(TokenType::T_BY); - $pathExpr = $this->SingleValuedPathExpression(); - - // Add the INDEX BY info to the query component - $this->queryComponents[$pathExpr->identificationVariable]['map'] = $pathExpr->field; - - return new AST\IndexBy($pathExpr); - } - - /** - * ScalarExpression ::= SimpleArithmeticExpression | StringPrimary | DateTimePrimary | - * StateFieldPathExpression | BooleanPrimary | CaseExpression | - * InstanceOfExpression - * - * @return mixed One of the possible expressions or subexpressions. - */ - public function ScalarExpression(): mixed - { - assert($this->lexer->token !== null); - assert($this->lexer->lookahead !== null); - $lookahead = $this->lexer->lookahead->type; - $peek = $this->lexer->glimpse(); - - switch (true) { - case $lookahead === TokenType::T_INTEGER: - case $lookahead === TokenType::T_FLOAT: - // SimpleArithmeticExpression : (- u.value ) or ( + u.value ) or ( - 1 ) or ( + 1 ) - case $lookahead === TokenType::T_MINUS: - case $lookahead === TokenType::T_PLUS: - return $this->SimpleArithmeticExpression(); - - case $lookahead === TokenType::T_STRING: - return $this->StringPrimary(); - - case $lookahead === TokenType::T_TRUE: - case $lookahead === TokenType::T_FALSE: - $this->match($lookahead); - - return new AST\Literal(AST\Literal::BOOLEAN, $this->lexer->token->value); - - case $lookahead === TokenType::T_INPUT_PARAMETER: - return match (true) { - $this->isMathOperator($peek) => $this->SimpleArithmeticExpression(), - default => $this->InputParameter(), - }; - - case $lookahead === TokenType::T_CASE: - case $lookahead === TokenType::T_COALESCE: - case $lookahead === TokenType::T_NULLIF: - // Since NULLIF and COALESCE can be identified as a function, - // we need to check these before checking for FunctionDeclaration - return $this->CaseExpression(); - - case $lookahead === TokenType::T_OPEN_PARENTHESIS: - return $this->SimpleArithmeticExpression(); - - // this check must be done before checking for a filed path expression - case $this->isFunction(): - $this->lexer->peek(); - - return match (true) { - $this->isMathOperator($this->peekBeyondClosingParenthesis()) => $this->SimpleArithmeticExpression(), - default => $this->FunctionDeclaration(), - }; - - // it is no function, so it must be a field path - case $lookahead === TokenType::T_IDENTIFIER: - $this->lexer->peek(); // lookahead => '.' - $this->lexer->peek(); // lookahead => token after '.' - $peek = $this->lexer->peek(); // lookahead => token after the token after the '.' - $this->lexer->resetPeek(); - - if ($this->isMathOperator($peek)) { - return $this->SimpleArithmeticExpression(); - } - - return $this->StateFieldPathExpression(); - - default: - $this->syntaxError(); - } - } - - /** - * CaseExpression ::= GeneralCaseExpression | SimpleCaseExpression | CoalesceExpression | NullifExpression - * GeneralCaseExpression ::= "CASE" WhenClause {WhenClause}* "ELSE" ScalarExpression "END" - * WhenClause ::= "WHEN" ConditionalExpression "THEN" ScalarExpression - * SimpleCaseExpression ::= "CASE" CaseOperand SimpleWhenClause {SimpleWhenClause}* "ELSE" ScalarExpression "END" - * CaseOperand ::= StateFieldPathExpression | TypeDiscriminator - * SimpleWhenClause ::= "WHEN" ScalarExpression "THEN" ScalarExpression - * CoalesceExpression ::= "COALESCE" "(" ScalarExpression {"," ScalarExpression}* ")" - * NullifExpression ::= "NULLIF" "(" ScalarExpression "," ScalarExpression ")" - * - * @return mixed One of the possible expressions or subexpressions. - */ - public function CaseExpression(): mixed - { - assert($this->lexer->lookahead !== null); - $lookahead = $this->lexer->lookahead->type; - - switch ($lookahead) { - case TokenType::T_NULLIF: - return $this->NullIfExpression(); - - case TokenType::T_COALESCE: - return $this->CoalesceExpression(); - - case TokenType::T_CASE: - $this->lexer->resetPeek(); - $peek = $this->lexer->peek(); - - assert($peek !== null); - if ($peek->type === TokenType::T_WHEN) { - return $this->GeneralCaseExpression(); - } - - return $this->SimpleCaseExpression(); - - default: - // Do nothing - break; - } - - $this->syntaxError(); - } - - /** - * CoalesceExpression ::= "COALESCE" "(" ScalarExpression {"," ScalarExpression}* ")" - */ - public function CoalesceExpression(): AST\CoalesceExpression - { - $this->match(TokenType::T_COALESCE); - $this->match(TokenType::T_OPEN_PARENTHESIS); - - // Process ScalarExpressions (1..N) - $scalarExpressions = []; - $scalarExpressions[] = $this->ScalarExpression(); - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $scalarExpressions[] = $this->ScalarExpression(); - } - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return new AST\CoalesceExpression($scalarExpressions); - } - - /** - * NullIfExpression ::= "NULLIF" "(" ScalarExpression "," ScalarExpression ")" - */ - public function NullIfExpression(): AST\NullIfExpression - { - $this->match(TokenType::T_NULLIF); - $this->match(TokenType::T_OPEN_PARENTHESIS); - - $firstExpression = $this->ScalarExpression(); - $this->match(TokenType::T_COMMA); - $secondExpression = $this->ScalarExpression(); - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return new AST\NullIfExpression($firstExpression, $secondExpression); - } - - /** - * GeneralCaseExpression ::= "CASE" WhenClause {WhenClause}* "ELSE" ScalarExpression "END" - */ - public function GeneralCaseExpression(): AST\GeneralCaseExpression - { - $this->match(TokenType::T_CASE); - - // Process WhenClause (1..N) - $whenClauses = []; - - do { - $whenClauses[] = $this->WhenClause(); - } while ($this->lexer->isNextToken(TokenType::T_WHEN)); - - $this->match(TokenType::T_ELSE); - $scalarExpression = $this->ScalarExpression(); - $this->match(TokenType::T_END); - - return new AST\GeneralCaseExpression($whenClauses, $scalarExpression); - } - - /** - * SimpleCaseExpression ::= "CASE" CaseOperand SimpleWhenClause {SimpleWhenClause}* "ELSE" ScalarExpression "END" - * CaseOperand ::= StateFieldPathExpression | TypeDiscriminator - */ - public function SimpleCaseExpression(): AST\SimpleCaseExpression - { - $this->match(TokenType::T_CASE); - $caseOperand = $this->StateFieldPathExpression(); - - // Process SimpleWhenClause (1..N) - $simpleWhenClauses = []; - - do { - $simpleWhenClauses[] = $this->SimpleWhenClause(); - } while ($this->lexer->isNextToken(TokenType::T_WHEN)); - - $this->match(TokenType::T_ELSE); - $scalarExpression = $this->ScalarExpression(); - $this->match(TokenType::T_END); - - return new AST\SimpleCaseExpression($caseOperand, $simpleWhenClauses, $scalarExpression); - } - - /** - * WhenClause ::= "WHEN" ConditionalExpression "THEN" ScalarExpression - */ - public function WhenClause(): AST\WhenClause - { - $this->match(TokenType::T_WHEN); - $conditionalExpression = $this->ConditionalExpression(); - $this->match(TokenType::T_THEN); - - return new AST\WhenClause($conditionalExpression, $this->ScalarExpression()); - } - - /** - * SimpleWhenClause ::= "WHEN" ScalarExpression "THEN" ScalarExpression - */ - public function SimpleWhenClause(): AST\SimpleWhenClause - { - $this->match(TokenType::T_WHEN); - $conditionalExpression = $this->ScalarExpression(); - $this->match(TokenType::T_THEN); - - return new AST\SimpleWhenClause($conditionalExpression, $this->ScalarExpression()); - } - - /** - * SelectExpression ::= ( - * IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | - * "(" Subselect ")" | CaseExpression | NewObjectExpression - * ) [["AS"] ["HIDDEN"] AliasResultVariable] - */ - public function SelectExpression(): AST\SelectExpression - { - assert($this->lexer->lookahead !== null); - $expression = null; - $identVariable = null; - $peek = $this->lexer->glimpse(); - $lookaheadType = $this->lexer->lookahead->type; - assert($peek !== null); - - switch (true) { - // ScalarExpression (u.name) - case $lookaheadType === TokenType::T_IDENTIFIER && $peek->type === TokenType::T_DOT: - $expression = $this->ScalarExpression(); - break; - - // IdentificationVariable (u) - case $lookaheadType === TokenType::T_IDENTIFIER && $peek->type !== TokenType::T_OPEN_PARENTHESIS: - $expression = $identVariable = $this->IdentificationVariable(); - break; - - // CaseExpression (CASE ... or NULLIF(...) or COALESCE(...)) - case $lookaheadType === TokenType::T_CASE: - case $lookaheadType === TokenType::T_COALESCE: - case $lookaheadType === TokenType::T_NULLIF: - $expression = $this->CaseExpression(); - break; - - // DQL Function (SUM(u.value) or SUM(u.value) + 1) - case $this->isFunction(): - $this->lexer->peek(); // "(" - - $expression = match (true) { - $this->isMathOperator($this->peekBeyondClosingParenthesis()) => $this->ScalarExpression(), - default => $this->FunctionDeclaration(), - }; - - break; - - // Subselect - case $lookaheadType === TokenType::T_OPEN_PARENTHESIS && $peek->type === TokenType::T_SELECT: - $this->match(TokenType::T_OPEN_PARENTHESIS); - $expression = $this->Subselect(); - $this->match(TokenType::T_CLOSE_PARENTHESIS); - break; - - // Shortcut: ScalarExpression => SimpleArithmeticExpression - case $lookaheadType === TokenType::T_OPEN_PARENTHESIS: - case $lookaheadType === TokenType::T_INTEGER: - case $lookaheadType === TokenType::T_STRING: - case $lookaheadType === TokenType::T_FLOAT: - // SimpleArithmeticExpression : (- u.value ) or ( + u.value ) - case $lookaheadType === TokenType::T_MINUS: - case $lookaheadType === TokenType::T_PLUS: - $expression = $this->SimpleArithmeticExpression(); - break; - - // NewObjectExpression (New ClassName(id, name)) - case $lookaheadType === TokenType::T_NEW: - $expression = $this->NewObjectExpression(); - break; - - default: - $this->syntaxError( - 'IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | "(" Subselect ")" | CaseExpression', - $this->lexer->lookahead, - ); - } - - // [["AS"] ["HIDDEN"] AliasResultVariable] - $mustHaveAliasResultVariable = false; - - if ($this->lexer->isNextToken(TokenType::T_AS)) { - $this->match(TokenType::T_AS); - - $mustHaveAliasResultVariable = true; - } - - $hiddenAliasResultVariable = false; - - if ($this->lexer->isNextToken(TokenType::T_HIDDEN)) { - $this->match(TokenType::T_HIDDEN); - - $hiddenAliasResultVariable = true; - } - - $aliasResultVariable = null; - - if ($mustHaveAliasResultVariable || $this->lexer->isNextToken(TokenType::T_IDENTIFIER)) { - assert($expression instanceof AST\Node || is_string($expression)); - $token = $this->lexer->lookahead; - $aliasResultVariable = $this->AliasResultVariable(); - - // Include AliasResultVariable in query components. - $this->queryComponents[$aliasResultVariable] = [ - 'resultVariable' => $expression, - 'nestingLevel' => $this->nestingLevel, - 'token' => $token, - ]; - } - - // AST - - $expr = new AST\SelectExpression($expression, $aliasResultVariable, $hiddenAliasResultVariable); - - if ($identVariable) { - $this->identVariableExpressions[$identVariable] = $expr; - } - - return $expr; - } - - /** - * SimpleSelectExpression ::= ( - * StateFieldPathExpression | IdentificationVariable | FunctionDeclaration | - * AggregateExpression | "(" Subselect ")" | ScalarExpression - * ) [["AS"] AliasResultVariable] - */ - public function SimpleSelectExpression(): AST\SimpleSelectExpression - { - assert($this->lexer->lookahead !== null); - $peek = $this->lexer->glimpse(); - assert($peek !== null); - - switch ($this->lexer->lookahead->type) { - case TokenType::T_IDENTIFIER: - switch (true) { - case $peek->type === TokenType::T_DOT: - $expression = $this->StateFieldPathExpression(); - - return new AST\SimpleSelectExpression($expression); - - case $peek->type !== TokenType::T_OPEN_PARENTHESIS: - $expression = $this->IdentificationVariable(); - - return new AST\SimpleSelectExpression($expression); - - case $this->isFunction(): - // SUM(u.id) + COUNT(u.id) - if ($this->isMathOperator($this->peekBeyondClosingParenthesis())) { - return new AST\SimpleSelectExpression($this->ScalarExpression()); - } - - // COUNT(u.id) - if ($this->isAggregateFunction($this->lexer->lookahead->type)) { - return new AST\SimpleSelectExpression($this->AggregateExpression()); - } - - // IDENTITY(u) - return new AST\SimpleSelectExpression($this->FunctionDeclaration()); - - default: - // Do nothing - } - - break; - - case TokenType::T_OPEN_PARENTHESIS: - if ($peek->type !== TokenType::T_SELECT) { - // Shortcut: ScalarExpression => SimpleArithmeticExpression - $expression = $this->SimpleArithmeticExpression(); - - return new AST\SimpleSelectExpression($expression); - } - - // Subselect - $this->match(TokenType::T_OPEN_PARENTHESIS); - $expression = $this->Subselect(); - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return new AST\SimpleSelectExpression($expression); - - default: - // Do nothing - } - - $this->lexer->peek(); - - $expression = $this->ScalarExpression(); - $expr = new AST\SimpleSelectExpression($expression); - - if ($this->lexer->isNextToken(TokenType::T_AS)) { - $this->match(TokenType::T_AS); - } - - if ($this->lexer->isNextToken(TokenType::T_IDENTIFIER)) { - $token = $this->lexer->lookahead; - $resultVariable = $this->AliasResultVariable(); - $expr->fieldIdentificationVariable = $resultVariable; - - // Include AliasResultVariable in query components. - $this->queryComponents[$resultVariable] = [ - 'resultvariable' => $expr, - 'nestingLevel' => $this->nestingLevel, - 'token' => $token, - ]; - } - - return $expr; - } - - /** - * ConditionalExpression ::= ConditionalTerm {"OR" ConditionalTerm}* - */ - public function ConditionalExpression(): AST\ConditionalExpression|AST\ConditionalFactor|AST\ConditionalPrimary|AST\ConditionalTerm - { - $conditionalTerms = []; - $conditionalTerms[] = $this->ConditionalTerm(); - - while ($this->lexer->isNextToken(TokenType::T_OR)) { - $this->match(TokenType::T_OR); - - $conditionalTerms[] = $this->ConditionalTerm(); - } - - // Phase 1 AST optimization: Prevent AST\ConditionalExpression - // if only one AST\ConditionalTerm is defined - if (count($conditionalTerms) === 1) { - return $conditionalTerms[0]; - } - - return new AST\ConditionalExpression($conditionalTerms); - } - - /** - * ConditionalTerm ::= ConditionalFactor {"AND" ConditionalFactor}* - */ - public function ConditionalTerm(): AST\ConditionalFactor|AST\ConditionalPrimary|AST\ConditionalTerm - { - $conditionalFactors = []; - $conditionalFactors[] = $this->ConditionalFactor(); - - while ($this->lexer->isNextToken(TokenType::T_AND)) { - $this->match(TokenType::T_AND); - - $conditionalFactors[] = $this->ConditionalFactor(); - } - - // Phase 1 AST optimization: Prevent AST\ConditionalTerm - // if only one AST\ConditionalFactor is defined - if (count($conditionalFactors) === 1) { - return $conditionalFactors[0]; - } - - return new AST\ConditionalTerm($conditionalFactors); - } - - /** - * ConditionalFactor ::= ["NOT"] ConditionalPrimary - */ - public function ConditionalFactor(): AST\ConditionalFactor|AST\ConditionalPrimary - { - $not = false; - - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - - $not = true; - } - - $conditionalPrimary = $this->ConditionalPrimary(); - - // Phase 1 AST optimization: Prevent AST\ConditionalFactor - // if only one AST\ConditionalPrimary is defined - if (! $not) { - return $conditionalPrimary; - } - - return new AST\ConditionalFactor($conditionalPrimary, $not); - } - - /** - * ConditionalPrimary ::= SimpleConditionalExpression | "(" ConditionalExpression ")" - */ - public function ConditionalPrimary(): AST\ConditionalPrimary - { - $condPrimary = new AST\ConditionalPrimary(); - - if (! $this->lexer->isNextToken(TokenType::T_OPEN_PARENTHESIS)) { - $condPrimary->simpleConditionalExpression = $this->SimpleConditionalExpression(); - - return $condPrimary; - } - - // Peek beyond the matching closing parenthesis ')' - $peek = $this->peekBeyondClosingParenthesis(); - - if ( - $peek !== null && ( - in_array($peek->value, ['=', '<', '<=', '<>', '>', '>=', '!='], true) || - in_array($peek->type, [TokenType::T_NOT, TokenType::T_BETWEEN, TokenType::T_LIKE, TokenType::T_IN, TokenType::T_IS, TokenType::T_EXISTS], true) || - $this->isMathOperator($peek) - ) - ) { - $condPrimary->simpleConditionalExpression = $this->SimpleConditionalExpression(); - - return $condPrimary; - } - - $this->match(TokenType::T_OPEN_PARENTHESIS); - $condPrimary->conditionalExpression = $this->ConditionalExpression(); - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return $condPrimary; - } - - /** - * SimpleConditionalExpression ::= - * ComparisonExpression | BetweenExpression | LikeExpression | - * InExpression | NullComparisonExpression | ExistsExpression | - * EmptyCollectionComparisonExpression | CollectionMemberExpression | - * InstanceOfExpression - */ - public function SimpleConditionalExpression(): AST\ExistsExpression|AST\BetweenExpression|AST\LikeExpression|AST\InListExpression|AST\InSubselectExpression|AST\InstanceOfExpression|AST\CollectionMemberExpression|AST\NullComparisonExpression|AST\EmptyCollectionComparisonExpression|AST\ComparisonExpression - { - assert($this->lexer->lookahead !== null); - if ($this->lexer->isNextToken(TokenType::T_EXISTS)) { - return $this->ExistsExpression(); - } - - $token = $this->lexer->lookahead; - $peek = $this->lexer->glimpse(); - $lookahead = $token; - - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $token = $this->lexer->glimpse(); - } - - assert($token !== null); - assert($peek !== null); - if ($token->type === TokenType::T_IDENTIFIER || $token->type === TokenType::T_INPUT_PARAMETER || $this->isFunction()) { - // Peek beyond the matching closing parenthesis. - $beyond = $this->lexer->peek(); - - switch ($peek->value) { - case '(': - // Peeks beyond the matched closing parenthesis. - $token = $this->peekBeyondClosingParenthesis(false); - assert($token !== null); - - if ($token->type === TokenType::T_NOT) { - $token = $this->lexer->peek(); - assert($token !== null); - } - - if ($token->type === TokenType::T_IS) { - $lookahead = $this->lexer->peek(); - } - - break; - - default: - // Peek beyond the PathExpression or InputParameter. - $token = $beyond; - - while ($token->value === '.') { - $this->lexer->peek(); - - $token = $this->lexer->peek(); - assert($token !== null); - } - - // Also peek beyond a NOT if there is one. - assert($token !== null); - if ($token->type === TokenType::T_NOT) { - $token = $this->lexer->peek(); - assert($token !== null); - } - - // We need to go even further in case of IS (differentiate between NULL and EMPTY) - $lookahead = $this->lexer->peek(); - } - - assert($lookahead !== null); - // Also peek beyond a NOT if there is one. - if ($lookahead->type === TokenType::T_NOT) { - $lookahead = $this->lexer->peek(); - } - - $this->lexer->resetPeek(); - } - - if ($token->type === TokenType::T_BETWEEN) { - return $this->BetweenExpression(); - } - - if ($token->type === TokenType::T_LIKE) { - return $this->LikeExpression(); - } - - if ($token->type === TokenType::T_IN) { - return $this->InExpression(); - } - - if ($token->type === TokenType::T_INSTANCE) { - return $this->InstanceOfExpression(); - } - - if ($token->type === TokenType::T_MEMBER) { - return $this->CollectionMemberExpression(); - } - - assert($lookahead !== null); - if ($token->type === TokenType::T_IS && $lookahead->type === TokenType::T_NULL) { - return $this->NullComparisonExpression(); - } - - if ($token->type === TokenType::T_IS && $lookahead->type === TokenType::T_EMPTY) { - return $this->EmptyCollectionComparisonExpression(); - } - - return $this->ComparisonExpression(); - } - - /** - * EmptyCollectionComparisonExpression ::= CollectionValuedPathExpression "IS" ["NOT"] "EMPTY" - */ - public function EmptyCollectionComparisonExpression(): AST\EmptyCollectionComparisonExpression - { - $pathExpression = $this->CollectionValuedPathExpression(); - $this->match(TokenType::T_IS); - - $not = false; - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - $not = true; - } - - $this->match(TokenType::T_EMPTY); - - return new AST\EmptyCollectionComparisonExpression( - $pathExpression, - $not, - ); - } - - /** - * CollectionMemberExpression ::= EntityExpression ["NOT"] "MEMBER" ["OF"] CollectionValuedPathExpression - * - * EntityExpression ::= SingleValuedAssociationPathExpression | SimpleEntityExpression - * SimpleEntityExpression ::= IdentificationVariable | InputParameter - */ - public function CollectionMemberExpression(): AST\CollectionMemberExpression - { - $not = false; - $entityExpr = $this->EntityExpression(); - - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - - $not = true; - } - - $this->match(TokenType::T_MEMBER); - - if ($this->lexer->isNextToken(TokenType::T_OF)) { - $this->match(TokenType::T_OF); - } - - return new AST\CollectionMemberExpression( - $entityExpr, - $this->CollectionValuedPathExpression(), - $not, - ); - } - - /** - * Literal ::= string | char | integer | float | boolean - */ - public function Literal(): AST\Literal - { - assert($this->lexer->lookahead !== null); - assert($this->lexer->token !== null); - switch ($this->lexer->lookahead->type) { - case TokenType::T_STRING: - $this->match(TokenType::T_STRING); - - return new AST\Literal(AST\Literal::STRING, $this->lexer->token->value); - - case TokenType::T_INTEGER: - case TokenType::T_FLOAT: - $this->match( - $this->lexer->isNextToken(TokenType::T_INTEGER) ? TokenType::T_INTEGER : TokenType::T_FLOAT, - ); - - return new AST\Literal(AST\Literal::NUMERIC, $this->lexer->token->value); - - case TokenType::T_TRUE: - case TokenType::T_FALSE: - $this->match( - $this->lexer->isNextToken(TokenType::T_TRUE) ? TokenType::T_TRUE : TokenType::T_FALSE, - ); - - return new AST\Literal(AST\Literal::BOOLEAN, $this->lexer->token->value); - - default: - $this->syntaxError('Literal'); - } - } - - /** - * InParameter ::= ArithmeticExpression | InputParameter - */ - public function InParameter(): AST\InputParameter|AST\ArithmeticExpression - { - assert($this->lexer->lookahead !== null); - if ($this->lexer->lookahead->type === TokenType::T_INPUT_PARAMETER) { - return $this->InputParameter(); - } - - return $this->ArithmeticExpression(); - } - - /** - * InputParameter ::= PositionalParameter | NamedParameter - */ - public function InputParameter(): AST\InputParameter - { - $this->match(TokenType::T_INPUT_PARAMETER); - assert($this->lexer->token !== null); - - return new AST\InputParameter($this->lexer->token->value); - } - - /** - * ArithmeticExpression ::= SimpleArithmeticExpression | "(" Subselect ")" - */ - public function ArithmeticExpression(): AST\ArithmeticExpression - { - $expr = new AST\ArithmeticExpression(); - - if ($this->lexer->isNextToken(TokenType::T_OPEN_PARENTHESIS)) { - $peek = $this->lexer->glimpse(); - assert($peek !== null); - - if ($peek->type === TokenType::T_SELECT) { - $this->match(TokenType::T_OPEN_PARENTHESIS); - $expr->subselect = $this->Subselect(); - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return $expr; - } - } - - $expr->simpleArithmeticExpression = $this->SimpleArithmeticExpression(); - - return $expr; - } - - /** - * SimpleArithmeticExpression ::= ArithmeticTerm {("+" | "-") ArithmeticTerm}* - */ - public function SimpleArithmeticExpression(): AST\Node|string - { - $terms = []; - $terms[] = $this->ArithmeticTerm(); - - while (($isPlus = $this->lexer->isNextToken(TokenType::T_PLUS)) || $this->lexer->isNextToken(TokenType::T_MINUS)) { - $this->match($isPlus ? TokenType::T_PLUS : TokenType::T_MINUS); - - assert($this->lexer->token !== null); - $terms[] = $this->lexer->token->value; - $terms[] = $this->ArithmeticTerm(); - } - - // Phase 1 AST optimization: Prevent AST\SimpleArithmeticExpression - // if only one AST\ArithmeticTerm is defined - if (count($terms) === 1) { - return $terms[0]; - } - - return new AST\SimpleArithmeticExpression($terms); - } - - /** - * ArithmeticTerm ::= ArithmeticFactor {("*" | "/") ArithmeticFactor}* - */ - public function ArithmeticTerm(): AST\Node|string - { - $factors = []; - $factors[] = $this->ArithmeticFactor(); - - while (($isMult = $this->lexer->isNextToken(TokenType::T_MULTIPLY)) || $this->lexer->isNextToken(TokenType::T_DIVIDE)) { - $this->match($isMult ? TokenType::T_MULTIPLY : TokenType::T_DIVIDE); - - assert($this->lexer->token !== null); - $factors[] = $this->lexer->token->value; - $factors[] = $this->ArithmeticFactor(); - } - - // Phase 1 AST optimization: Prevent AST\ArithmeticTerm - // if only one AST\ArithmeticFactor is defined - if (count($factors) === 1) { - return $factors[0]; - } - - return new AST\ArithmeticTerm($factors); - } - - /** - * ArithmeticFactor ::= [("+" | "-")] ArithmeticPrimary - */ - public function ArithmeticFactor(): AST\Node|string|AST\ArithmeticFactor - { - $sign = null; - - $isPlus = $this->lexer->isNextToken(TokenType::T_PLUS); - if ($isPlus || $this->lexer->isNextToken(TokenType::T_MINUS)) { - $this->match($isPlus ? TokenType::T_PLUS : TokenType::T_MINUS); - $sign = $isPlus; - } - - $primary = $this->ArithmeticPrimary(); - - // Phase 1 AST optimization: Prevent AST\ArithmeticFactor - // if only one AST\ArithmeticPrimary is defined - if ($sign === null) { - return $primary; - } - - return new AST\ArithmeticFactor($primary, $sign); - } - - /** - * ArithmeticPrimary ::= SingleValuedPathExpression | Literal | ParenthesisExpression - * | FunctionsReturningNumerics | AggregateExpression | FunctionsReturningStrings - * | FunctionsReturningDatetime | IdentificationVariable | ResultVariable - * | InputParameter | CaseExpression - */ - public function ArithmeticPrimary(): AST\Node|string - { - if ($this->lexer->isNextToken(TokenType::T_OPEN_PARENTHESIS)) { - $this->match(TokenType::T_OPEN_PARENTHESIS); - - $expr = $this->SimpleArithmeticExpression(); - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return new AST\ParenthesisExpression($expr); - } - - if ($this->lexer->lookahead === null) { - $this->syntaxError('ArithmeticPrimary'); - } - - switch ($this->lexer->lookahead->type) { - case TokenType::T_COALESCE: - case TokenType::T_NULLIF: - case TokenType::T_CASE: - return $this->CaseExpression(); - - case TokenType::T_IDENTIFIER: - $peek = $this->lexer->glimpse(); - - if ($peek !== null && $peek->value === '(') { - return $this->FunctionDeclaration(); - } - - if ($peek !== null && $peek->value === '.') { - return $this->SingleValuedPathExpression(); - } - - if (isset($this->queryComponents[$this->lexer->lookahead->value]['resultVariable'])) { - return $this->ResultVariable(); - } - - return $this->StateFieldPathExpression(); - - case TokenType::T_INPUT_PARAMETER: - return $this->InputParameter(); - - default: - $peek = $this->lexer->glimpse(); - - if ($peek !== null && $peek->value === '(') { - return $this->FunctionDeclaration(); - } - - return $this->Literal(); - } - } - - /** - * StringExpression ::= StringPrimary | ResultVariable | "(" Subselect ")" - */ - public function StringExpression(): AST\Subselect|AST\Node|string - { - $peek = $this->lexer->glimpse(); - assert($peek !== null); - - // Subselect - if ($this->lexer->isNextToken(TokenType::T_OPEN_PARENTHESIS) && $peek->type === TokenType::T_SELECT) { - $this->match(TokenType::T_OPEN_PARENTHESIS); - $expr = $this->Subselect(); - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return $expr; - } - - assert($this->lexer->lookahead !== null); - // ResultVariable (string) - if ( - $this->lexer->isNextToken(TokenType::T_IDENTIFIER) && - isset($this->queryComponents[$this->lexer->lookahead->value]['resultVariable']) - ) { - return $this->ResultVariable(); - } - - return $this->StringPrimary(); - } - - /** - * StringPrimary ::= StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression | CaseExpression - */ - public function StringPrimary(): AST\Node - { - assert($this->lexer->lookahead !== null); - $lookaheadType = $this->lexer->lookahead->type; - - switch ($lookaheadType) { - case TokenType::T_IDENTIFIER: - $peek = $this->lexer->glimpse(); - assert($peek !== null); - - if ($peek->value === '.') { - return $this->StateFieldPathExpression(); - } - - if ($peek->value === '(') { - // do NOT directly go to FunctionsReturningString() because it doesn't check for custom functions. - return $this->FunctionDeclaration(); - } - - $this->syntaxError("'.' or '('"); - break; - - case TokenType::T_STRING: - $this->match(TokenType::T_STRING); - assert($this->lexer->token !== null); - - return new AST\Literal(AST\Literal::STRING, $this->lexer->token->value); - - case TokenType::T_INPUT_PARAMETER: - return $this->InputParameter(); - - case TokenType::T_CASE: - case TokenType::T_COALESCE: - case TokenType::T_NULLIF: - return $this->CaseExpression(); - - default: - assert($lookaheadType !== null); - if ($this->isAggregateFunction($lookaheadType)) { - return $this->AggregateExpression(); - } - } - - $this->syntaxError( - 'StateFieldPathExpression | string | InputParameter | FunctionsReturningStrings | AggregateExpression', - ); - } - - /** - * EntityExpression ::= SingleValuedAssociationPathExpression | SimpleEntityExpression - */ - public function EntityExpression(): AST\InputParameter|AST\PathExpression - { - $glimpse = $this->lexer->glimpse(); - assert($glimpse !== null); - - if ($this->lexer->isNextToken(TokenType::T_IDENTIFIER) && $glimpse->value === '.') { - return $this->SingleValuedAssociationPathExpression(); - } - - return $this->SimpleEntityExpression(); - } - - /** - * SimpleEntityExpression ::= IdentificationVariable | InputParameter - */ - public function SimpleEntityExpression(): AST\InputParameter|AST\PathExpression - { - if ($this->lexer->isNextToken(TokenType::T_INPUT_PARAMETER)) { - return $this->InputParameter(); - } - - return $this->StateFieldPathExpression(); - } - - /** - * AggregateExpression ::= - * ("AVG" | "MAX" | "MIN" | "SUM" | "COUNT") "(" ["DISTINCT"] SimpleArithmeticExpression ")" - */ - public function AggregateExpression(): AST\AggregateExpression - { - assert($this->lexer->lookahead !== null); - $lookaheadType = $this->lexer->lookahead->type; - $isDistinct = false; - - if (! in_array($lookaheadType, [TokenType::T_COUNT, TokenType::T_AVG, TokenType::T_MAX, TokenType::T_MIN, TokenType::T_SUM], true)) { - $this->syntaxError('One of: MAX, MIN, AVG, SUM, COUNT'); - } - - $this->match($lookaheadType); - assert($this->lexer->token !== null); - $functionName = $this->lexer->token->value; - $this->match(TokenType::T_OPEN_PARENTHESIS); - - if ($this->lexer->isNextToken(TokenType::T_DISTINCT)) { - $this->match(TokenType::T_DISTINCT); - $isDistinct = true; - } - - $pathExp = $this->SimpleArithmeticExpression(); - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return new AST\AggregateExpression($functionName, $pathExp, $isDistinct); - } - - /** - * QuantifiedExpression ::= ("ALL" | "ANY" | "SOME") "(" Subselect ")" - */ - public function QuantifiedExpression(): AST\QuantifiedExpression - { - assert($this->lexer->lookahead !== null); - $lookaheadType = $this->lexer->lookahead->type; - $value = $this->lexer->lookahead->value; - - if (! in_array($lookaheadType, [TokenType::T_ALL, TokenType::T_ANY, TokenType::T_SOME], true)) { - $this->syntaxError('ALL, ANY or SOME'); - } - - $this->match($lookaheadType); - $this->match(TokenType::T_OPEN_PARENTHESIS); - - $qExpr = new AST\QuantifiedExpression($this->Subselect()); - $qExpr->type = $value; - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return $qExpr; - } - - /** - * BetweenExpression ::= ArithmeticExpression ["NOT"] "BETWEEN" ArithmeticExpression "AND" ArithmeticExpression - */ - public function BetweenExpression(): AST\BetweenExpression - { - $not = false; - $arithExpr1 = $this->ArithmeticExpression(); - - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - $not = true; - } - - $this->match(TokenType::T_BETWEEN); - $arithExpr2 = $this->ArithmeticExpression(); - $this->match(TokenType::T_AND); - $arithExpr3 = $this->ArithmeticExpression(); - - return new AST\BetweenExpression($arithExpr1, $arithExpr2, $arithExpr3, $not); - } - - /** - * ComparisonExpression ::= ArithmeticExpression ComparisonOperator ( QuantifiedExpression | ArithmeticExpression ) - */ - public function ComparisonExpression(): AST\ComparisonExpression - { - $this->lexer->glimpse(); - - $leftExpr = $this->ArithmeticExpression(); - $operator = $this->ComparisonOperator(); - $rightExpr = $this->isNextAllAnySome() - ? $this->QuantifiedExpression() - : $this->ArithmeticExpression(); - - return new AST\ComparisonExpression($leftExpr, $operator, $rightExpr); - } - - /** - * InExpression ::= SingleValuedPathExpression ["NOT"] "IN" "(" (InParameter {"," InParameter}* | Subselect) ")" - */ - public function InExpression(): AST\InListExpression|AST\InSubselectExpression - { - $expression = $this->ArithmeticExpression(); - - $not = false; - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - $not = true; - } - - $this->match(TokenType::T_IN); - $this->match(TokenType::T_OPEN_PARENTHESIS); - - if ($this->lexer->isNextToken(TokenType::T_SELECT)) { - $inExpression = new AST\InSubselectExpression( - $expression, - $this->Subselect(), - $not, - ); - } else { - $literals = [$this->InParameter()]; - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - $literals[] = $this->InParameter(); - } - - $inExpression = new AST\InListExpression( - $expression, - $literals, - $not, - ); - } - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return $inExpression; - } - - /** - * InstanceOfExpression ::= IdentificationVariable ["NOT"] "INSTANCE" ["OF"] (InstanceOfParameter | "(" InstanceOfParameter {"," InstanceOfParameter}* ")") - */ - public function InstanceOfExpression(): AST\InstanceOfExpression - { - $identificationVariable = $this->IdentificationVariable(); - - $not = false; - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - $not = true; - } - - $this->match(TokenType::T_INSTANCE); - $this->match(TokenType::T_OF); - - $exprValues = $this->lexer->isNextToken(TokenType::T_OPEN_PARENTHESIS) - ? $this->InstanceOfParameterList() - : [$this->InstanceOfParameter()]; - - return new AST\InstanceOfExpression( - $identificationVariable, - $exprValues, - $not, - ); - } - - /** @return non-empty-list */ - public function InstanceOfParameterList(): array - { - $this->match(TokenType::T_OPEN_PARENTHESIS); - - $exprValues = [$this->InstanceOfParameter()]; - - while ($this->lexer->isNextToken(TokenType::T_COMMA)) { - $this->match(TokenType::T_COMMA); - - $exprValues[] = $this->InstanceOfParameter(); - } - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return $exprValues; - } - - /** - * InstanceOfParameter ::= AbstractSchemaName | InputParameter - */ - public function InstanceOfParameter(): AST\InputParameter|string - { - if ($this->lexer->isNextToken(TokenType::T_INPUT_PARAMETER)) { - $this->match(TokenType::T_INPUT_PARAMETER); - assert($this->lexer->token !== null); - - return new AST\InputParameter($this->lexer->token->value); - } - - $abstractSchemaName = $this->AbstractSchemaName(); - - $this->validateAbstractSchemaName($abstractSchemaName); - - return $abstractSchemaName; - } - - /** - * LikeExpression ::= StringExpression ["NOT"] "LIKE" StringPrimary ["ESCAPE" char] - */ - public function LikeExpression(): AST\LikeExpression - { - $stringExpr = $this->StringExpression(); - $not = false; - - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - $not = true; - } - - $this->match(TokenType::T_LIKE); - - if ($this->lexer->isNextToken(TokenType::T_INPUT_PARAMETER)) { - $this->match(TokenType::T_INPUT_PARAMETER); - assert($this->lexer->token !== null); - $stringPattern = new AST\InputParameter($this->lexer->token->value); - } else { - $stringPattern = $this->StringPrimary(); - } - - $escapeChar = null; - - if ($this->lexer->lookahead !== null && $this->lexer->lookahead->type === TokenType::T_ESCAPE) { - $this->match(TokenType::T_ESCAPE); - $this->match(TokenType::T_STRING); - assert($this->lexer->token !== null); - - $escapeChar = new AST\Literal(AST\Literal::STRING, $this->lexer->token->value); - } - - return new AST\LikeExpression($stringExpr, $stringPattern, $escapeChar, $not); - } - - /** - * NullComparisonExpression ::= (InputParameter | NullIfExpression | CoalesceExpression | AggregateExpression | FunctionDeclaration | IdentificationVariable | SingleValuedPathExpression | ResultVariable) "IS" ["NOT"] "NULL" - */ - public function NullComparisonExpression(): AST\NullComparisonExpression - { - switch (true) { - case $this->lexer->isNextToken(TokenType::T_INPUT_PARAMETER): - $this->match(TokenType::T_INPUT_PARAMETER); - assert($this->lexer->token !== null); - - $expr = new AST\InputParameter($this->lexer->token->value); - break; - - case $this->lexer->isNextToken(TokenType::T_NULLIF): - $expr = $this->NullIfExpression(); - break; - - case $this->lexer->isNextToken(TokenType::T_COALESCE): - $expr = $this->CoalesceExpression(); - break; - - case $this->isFunction(): - $expr = $this->FunctionDeclaration(); - break; - - default: - // We need to check if we are in a IdentificationVariable or SingleValuedPathExpression - $glimpse = $this->lexer->glimpse(); - assert($glimpse !== null); - - if ($glimpse->type === TokenType::T_DOT) { - $expr = $this->SingleValuedPathExpression(); - - // Leave switch statement - break; - } - - assert($this->lexer->lookahead !== null); - $lookaheadValue = $this->lexer->lookahead->value; - - // Validate existing component - if (! isset($this->queryComponents[$lookaheadValue])) { - $this->semanticalError('Cannot add having condition on undefined result variable.'); - } - - // Validate SingleValuedPathExpression (ie.: "product") - if (isset($this->queryComponents[$lookaheadValue]['metadata'])) { - $expr = $this->SingleValuedPathExpression(); - break; - } - - // Validating ResultVariable - if (! isset($this->queryComponents[$lookaheadValue]['resultVariable'])) { - $this->semanticalError('Cannot add having condition on a non result variable.'); - } - - $expr = $this->ResultVariable(); - break; - } - - $this->match(TokenType::T_IS); - - $not = false; - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - - $not = true; - } - - $this->match(TokenType::T_NULL); - - return new AST\NullComparisonExpression($expr, $not); - } - - /** - * ExistsExpression ::= ["NOT"] "EXISTS" "(" Subselect ")" - */ - public function ExistsExpression(): AST\ExistsExpression - { - $not = false; - - if ($this->lexer->isNextToken(TokenType::T_NOT)) { - $this->match(TokenType::T_NOT); - $not = true; - } - - $this->match(TokenType::T_EXISTS); - $this->match(TokenType::T_OPEN_PARENTHESIS); - - $subselect = $this->Subselect(); - - $this->match(TokenType::T_CLOSE_PARENTHESIS); - - return new AST\ExistsExpression($subselect, $not); - } - - /** - * ComparisonOperator ::= "=" | "<" | "<=" | "<>" | ">" | ">=" | "!=" - */ - public function ComparisonOperator(): string - { - assert($this->lexer->lookahead !== null); - switch ($this->lexer->lookahead->value) { - case '=': - $this->match(TokenType::T_EQUALS); - - return '='; - - case '<': - $this->match(TokenType::T_LOWER_THAN); - $operator = '<'; - - if ($this->lexer->isNextToken(TokenType::T_EQUALS)) { - $this->match(TokenType::T_EQUALS); - $operator .= '='; - } elseif ($this->lexer->isNextToken(TokenType::T_GREATER_THAN)) { - $this->match(TokenType::T_GREATER_THAN); - $operator .= '>'; - } - - return $operator; - - case '>': - $this->match(TokenType::T_GREATER_THAN); - $operator = '>'; - - if ($this->lexer->isNextToken(TokenType::T_EQUALS)) { - $this->match(TokenType::T_EQUALS); - $operator .= '='; - } - - return $operator; - - case '!': - $this->match(TokenType::T_NEGATE); - $this->match(TokenType::T_EQUALS); - - return '<>'; - - default: - $this->syntaxError('=, <, <=, <>, >, >=, !='); - } - } - - /** - * FunctionDeclaration ::= FunctionsReturningStrings | FunctionsReturningNumerics | FunctionsReturningDatetime - */ - public function FunctionDeclaration(): Functions\FunctionNode - { - assert($this->lexer->lookahead !== null); - $token = $this->lexer->lookahead; - $funcName = strtolower($token->value); - - $customFunctionDeclaration = $this->CustomFunctionDeclaration(); - - // Check for custom functions functions first! - switch (true) { - case $customFunctionDeclaration !== null: - return $customFunctionDeclaration; - - case isset(self::$stringFunctions[$funcName]): - return $this->FunctionsReturningStrings(); - - case isset(self::$numericFunctions[$funcName]): - return $this->FunctionsReturningNumerics(); - - case isset(self::$datetimeFunctions[$funcName]): - return $this->FunctionsReturningDatetime(); - - default: - $this->syntaxError('known function', $token); - } - } - - /** - * Helper function for FunctionDeclaration grammar rule. - */ - private function CustomFunctionDeclaration(): Functions\FunctionNode|null - { - assert($this->lexer->lookahead !== null); - $token = $this->lexer->lookahead; - $funcName = strtolower($token->value); - - // Check for custom functions afterwards - $config = $this->em->getConfiguration(); - - return match (true) { - $config->getCustomStringFunction($funcName) !== null => $this->CustomFunctionsReturningStrings(), - $config->getCustomNumericFunction($funcName) !== null => $this->CustomFunctionsReturningNumerics(), - $config->getCustomDatetimeFunction($funcName) !== null => $this->CustomFunctionsReturningDatetime(), - default => null, - }; - } - - /** - * FunctionsReturningNumerics ::= - * "LENGTH" "(" StringPrimary ")" | - * "LOCATE" "(" StringPrimary "," StringPrimary ["," SimpleArithmeticExpression]")" | - * "ABS" "(" SimpleArithmeticExpression ")" | - * "SQRT" "(" SimpleArithmeticExpression ")" | - * "MOD" "(" SimpleArithmeticExpression "," SimpleArithmeticExpression ")" | - * "SIZE" "(" CollectionValuedPathExpression ")" | - * "DATE_DIFF" "(" ArithmeticPrimary "," ArithmeticPrimary ")" | - * "BIT_AND" "(" ArithmeticPrimary "," ArithmeticPrimary ")" | - * "BIT_OR" "(" ArithmeticPrimary "," ArithmeticPrimary ")" - */ - public function FunctionsReturningNumerics(): AST\Functions\FunctionNode - { - assert($this->lexer->lookahead !== null); - $funcNameLower = strtolower($this->lexer->lookahead->value); - $funcClass = self::$numericFunctions[$funcNameLower]; - - $function = new $funcClass($funcNameLower); - $function->parse($this); - - return $function; - } - - public function CustomFunctionsReturningNumerics(): AST\Functions\FunctionNode - { - assert($this->lexer->lookahead !== null); - // getCustomNumericFunction is case-insensitive - $functionName = strtolower($this->lexer->lookahead->value); - $functionClass = $this->em->getConfiguration()->getCustomNumericFunction($functionName); - - assert($functionClass !== null); - - $function = is_string($functionClass) - ? new $functionClass($functionName) - : $functionClass($functionName); - - $function->parse($this); - - return $function; - } - - /** - * FunctionsReturningDateTime ::= - * "CURRENT_DATE" | - * "CURRENT_TIME" | - * "CURRENT_TIMESTAMP" | - * "DATE_ADD" "(" ArithmeticPrimary "," ArithmeticPrimary "," StringPrimary ")" | - * "DATE_SUB" "(" ArithmeticPrimary "," ArithmeticPrimary "," StringPrimary ")" - */ - public function FunctionsReturningDatetime(): AST\Functions\FunctionNode - { - assert($this->lexer->lookahead !== null); - $funcNameLower = strtolower($this->lexer->lookahead->value); - $funcClass = self::$datetimeFunctions[$funcNameLower]; - - $function = new $funcClass($funcNameLower); - $function->parse($this); - - return $function; - } - - public function CustomFunctionsReturningDatetime(): AST\Functions\FunctionNode - { - assert($this->lexer->lookahead !== null); - // getCustomDatetimeFunction is case-insensitive - $functionName = $this->lexer->lookahead->value; - $functionClass = $this->em->getConfiguration()->getCustomDatetimeFunction($functionName); - - assert($functionClass !== null); - - $function = is_string($functionClass) - ? new $functionClass($functionName) - : $functionClass($functionName); - - $function->parse($this); - - return $function; - } - - /** - * FunctionsReturningStrings ::= - * "CONCAT" "(" StringPrimary "," StringPrimary {"," StringPrimary}* ")" | - * "SUBSTRING" "(" StringPrimary "," SimpleArithmeticExpression "," SimpleArithmeticExpression ")" | - * "TRIM" "(" [["LEADING" | "TRAILING" | "BOTH"] [char] "FROM"] StringPrimary ")" | - * "LOWER" "(" StringPrimary ")" | - * "UPPER" "(" StringPrimary ")" | - * "IDENTITY" "(" SingleValuedAssociationPathExpression {"," string} ")" - */ - public function FunctionsReturningStrings(): AST\Functions\FunctionNode - { - assert($this->lexer->lookahead !== null); - $funcNameLower = strtolower($this->lexer->lookahead->value); - $funcClass = self::$stringFunctions[$funcNameLower]; - - $function = new $funcClass($funcNameLower); - $function->parse($this); - - return $function; - } - - public function CustomFunctionsReturningStrings(): Functions\FunctionNode - { - assert($this->lexer->lookahead !== null); - // getCustomStringFunction is case-insensitive - $functionName = $this->lexer->lookahead->value; - $functionClass = $this->em->getConfiguration()->getCustomStringFunction($functionName); - - assert($functionClass !== null); - - $function = is_string($functionClass) - ? new $functionClass($functionName) - : $functionClass($functionName); - - $function->parse($this); - - return $function; - } - - private function getMetadataForDqlAlias(string $dqlAlias): ClassMetadata - { - if (! isset($this->queryComponents[$dqlAlias]['metadata'])) { - throw new LogicException(sprintf('No metadata for DQL alias: %s', $dqlAlias)); - } - - return $this->queryComponents[$dqlAlias]['metadata']; - } -} diff --git a/vendor/doctrine/orm/src/Query/ParserResult.php b/vendor/doctrine/orm/src/Query/ParserResult.php deleted file mode 100644 index 8b5ee1f..0000000 --- a/vendor/doctrine/orm/src/Query/ParserResult.php +++ /dev/null @@ -1,118 +0,0 @@ -> - */ - private array $parameterMappings = []; - - /** - * Initializes a new instance of the ParserResult class. - * The new instance is initialized with an empty ResultSetMapping. - */ - public function __construct() - { - $this->resultSetMapping = new ResultSetMapping(); - } - - /** - * Gets the ResultSetMapping for the parsed query. - * - * @return ResultSetMapping The result set mapping of the parsed query - */ - public function getResultSetMapping(): ResultSetMapping - { - return $this->resultSetMapping; - } - - /** - * Sets the ResultSetMapping of the parsed query. - */ - public function setResultSetMapping(ResultSetMapping $rsm): void - { - $this->resultSetMapping = $rsm; - } - - /** - * Sets the SQL executor that should be used for this ParserResult. - */ - public function setSqlExecutor(AbstractSqlExecutor $executor): void - { - $this->sqlExecutor = $executor; - } - - /** - * Gets the SQL executor used by this ParserResult. - */ - public function getSqlExecutor(): AbstractSqlExecutor - { - if ($this->sqlExecutor === null) { - throw new LogicException(sprintf( - 'Executor not set yet. Call %s::setSqlExecutor() first.', - self::class, - )); - } - - return $this->sqlExecutor; - } - - /** - * Adds a DQL to SQL parameter mapping. One DQL parameter name/position can map to - * several SQL parameter positions. - */ - public function addParameterMapping(string|int $dqlPosition, int $sqlPosition): void - { - $this->parameterMappings[$dqlPosition][] = $sqlPosition; - } - - /** - * Gets all DQL to SQL parameter mappings. - * - * @psalm-return array> The parameter mappings. - */ - public function getParameterMappings(): array - { - return $this->parameterMappings; - } - - /** - * Gets the SQL parameter positions for a DQL parameter name/position. - * - * @param string|int $dqlPosition The name or position of the DQL parameter. - * - * @return int[] The positions of the corresponding SQL parameters. - * @psalm-return list - */ - public function getSqlParameterPositions(string|int $dqlPosition): array - { - return $this->parameterMappings[$dqlPosition]; - } -} diff --git a/vendor/doctrine/orm/src/Query/Printer.php b/vendor/doctrine/orm/src/Query/Printer.php deleted file mode 100644 index db1f159..0000000 --- a/vendor/doctrine/orm/src/Query/Printer.php +++ /dev/null @@ -1,64 +0,0 @@ -println('(' . $name); - $this->indent++; - } - - /** - * Decreases indentation level by one and prints a closing parenthesis. - * - * This method is called after executing a production. - */ - public function endProduction(): void - { - $this->indent--; - $this->println(')'); - } - - /** - * Prints text indented with spaces depending on current indentation level. - * - * @param string $str The text. - */ - public function println(string $str): void - { - if (! $this->silent) { - echo str_repeat(' ', $this->indent), $str, "\n"; - } - } -} diff --git a/vendor/doctrine/orm/src/Query/QueryException.php b/vendor/doctrine/orm/src/Query/QueryException.php deleted file mode 100644 index ae945b1..0000000 --- a/vendor/doctrine/orm/src/Query/QueryException.php +++ /dev/null @@ -1,155 +0,0 @@ - or ? expected.'); - } - - public static function unknownParameter(string $key): self - { - return new self('Invalid parameter: token ' . $key . ' is not defined in the query.'); - } - - public static function parameterTypeMismatch(): self - { - return new self('DQL Query parameter and type numbers mismatch, but have to be exactly equal.'); - } - - public static function invalidPathExpression(PathExpression $pathExpr): self - { - return new self( - "Invalid PathExpression '" . $pathExpr->identificationVariable . '.' . $pathExpr->field . "'.", - ); - } - - public static function invalidLiteral(string|Stringable $literal): self - { - return new self("Invalid literal '" . $literal . "'"); - } - - public static function iterateWithFetchJoinCollectionNotAllowed(AssociationMapping $assoc): self - { - return new self( - 'Invalid query operation: Not allowed to iterate over fetch join collections ' . - 'in class ' . $assoc->sourceEntity . ' association ' . $assoc->fieldName, - ); - } - - /** - * @param string[] $assoc - * @psalm-param array $assoc - */ - public static function overwritingJoinConditionsNotYetSupported(array $assoc): self - { - return new self( - 'Unsupported query operation: It is not yet possible to overwrite the join ' . - 'conditions in class ' . $assoc['sourceEntityName'] . ' association ' . $assoc['fieldName'] . '. ' . - 'Use WITH to append additional join conditions to the association.', - ); - } - - public static function associationPathInverseSideNotSupported(PathExpression $pathExpr): self - { - return new self( - 'A single-valued association path expression to an inverse side is not supported in DQL queries. ' . - 'Instead of "' . $pathExpr->identificationVariable . '.' . $pathExpr->field . '" use an explicit join.', - ); - } - - public static function iterateWithFetchJoinNotAllowed(AssociationMapping $assoc): self - { - return new self( - 'Iterate with fetch join in class ' . $assoc->sourceEntity . - ' using association ' . $assoc->fieldName . ' not allowed.', - ); - } - - public static function eagerFetchJoinWithNotAllowed(string $sourceEntity, string $fieldName): self - { - return new self( - 'Associations with fetch-mode=EAGER may not be using WITH conditions in - "' . $sourceEntity . '#' . $fieldName . '".', - ); - } - - public static function iterateWithMixedResultNotAllowed(): self - { - return new self('Iterating a query with mixed results (using scalars) is not supported.'); - } - - public static function associationPathCompositeKeyNotSupported(): self - { - return new self( - 'A single-valued association path expression to an entity with a composite primary ' . - 'key is not supported. Explicitly name the components of the composite primary key ' . - 'in the query.', - ); - } - - public static function instanceOfUnrelatedClass(string $className, string $rootClass): self - { - return new self("Cannot check if a child of '" . $rootClass . "' is instanceof '" . $className . "', " . - 'inheritance hierarchy does not exists between these two classes.'); - } - - public static function invalidQueryComponent(string $dqlAlias): self - { - return new self( - "Invalid query component given for DQL alias '" . $dqlAlias . "', " . - "requires 'metadata', 'parent', 'relation', 'map', 'nestingLevel' and 'token' keys.", - ); - } -} diff --git a/vendor/doctrine/orm/src/Query/QueryExpressionVisitor.php b/vendor/doctrine/orm/src/Query/QueryExpressionVisitor.php deleted file mode 100644 index 3e0ec65..0000000 --- a/vendor/doctrine/orm/src/Query/QueryExpressionVisitor.php +++ /dev/null @@ -1,180 +0,0 @@ - Expr\Comparison::GT, - Comparison::GTE => Expr\Comparison::GTE, - Comparison::LT => Expr\Comparison::LT, - Comparison::LTE => Expr\Comparison::LTE, - ]; - - private readonly Expr $expr; - - /** @var list */ - private array $parameters = []; - - /** @param mixed[] $queryAliases */ - public function __construct( - private readonly array $queryAliases, - ) { - $this->expr = new Expr(); - } - - /** - * Gets bound parameters. - * Filled after {@link dispach()}. - * - * @return ArrayCollection - */ - public function getParameters(): ArrayCollection - { - return new ArrayCollection($this->parameters); - } - - public function clearParameters(): void - { - $this->parameters = []; - } - - /** - * Converts Criteria expression to Query one based on static map. - */ - private static function convertComparisonOperator(string $criteriaOperator): string|null - { - return self::OPERATOR_MAP[$criteriaOperator] ?? null; - } - - public function walkCompositeExpression(CompositeExpression $expr): mixed - { - $expressionList = []; - - foreach ($expr->getExpressionList() as $child) { - $expressionList[] = $this->dispatch($child); - } - - return match ($expr->getType()) { - CompositeExpression::TYPE_AND => new Expr\Andx($expressionList), - CompositeExpression::TYPE_OR => new Expr\Orx($expressionList), - CompositeExpression::TYPE_NOT => $this->expr->not($expressionList[0]), - default => throw new RuntimeException('Unknown composite ' . $expr->getType()), - }; - } - - public function walkComparison(Comparison $comparison): mixed - { - if (! isset($this->queryAliases[0])) { - throw new QueryException('No aliases are set before invoking walkComparison().'); - } - - $field = $this->queryAliases[0] . '.' . $comparison->getField(); - - foreach ($this->queryAliases as $alias) { - if (str_starts_with($comparison->getField() . '.', $alias . '.')) { - $field = $comparison->getField(); - break; - } - } - - $parameterName = str_replace('.', '_', $comparison->getField()); - - foreach ($this->parameters as $parameter) { - if ($parameter->getName() === $parameterName) { - $parameterName .= '_' . count($this->parameters); - break; - } - } - - $parameter = new Parameter($parameterName, $this->walkValue($comparison->getValue())); - $placeholder = ':' . $parameterName; - - switch ($comparison->getOperator()) { - case Comparison::IN: - $this->parameters[] = $parameter; - - return $this->expr->in($field, $placeholder); - - case Comparison::NIN: - $this->parameters[] = $parameter; - - return $this->expr->notIn($field, $placeholder); - - case Comparison::EQ: - case Comparison::IS: - if ($this->walkValue($comparison->getValue()) === null) { - return $this->expr->isNull($field); - } - - $this->parameters[] = $parameter; - - return $this->expr->eq($field, $placeholder); - - case Comparison::NEQ: - if ($this->walkValue($comparison->getValue()) === null) { - return $this->expr->isNotNull($field); - } - - $this->parameters[] = $parameter; - - return $this->expr->neq($field, $placeholder); - - case Comparison::CONTAINS: - $parameter->setValue('%' . $parameter->getValue() . '%', $parameter->getType()); - $this->parameters[] = $parameter; - - return $this->expr->like($field, $placeholder); - - case Comparison::MEMBER_OF: - return $this->expr->isMemberOf($comparison->getField(), $comparison->getValue()->getValue()); - - case Comparison::STARTS_WITH: - $parameter->setValue($parameter->getValue() . '%', $parameter->getType()); - $this->parameters[] = $parameter; - - return $this->expr->like($field, $placeholder); - - case Comparison::ENDS_WITH: - $parameter->setValue('%' . $parameter->getValue(), $parameter->getType()); - $this->parameters[] = $parameter; - - return $this->expr->like($field, $placeholder); - - default: - $operator = self::convertComparisonOperator($comparison->getOperator()); - if ($operator) { - $this->parameters[] = $parameter; - - return new Expr\Comparison( - $field, - $operator, - $placeholder, - ); - } - - throw new RuntimeException('Unknown comparison operator: ' . $comparison->getOperator()); - } - } - - public function walkValue(Value $value): mixed - { - return $value->getValue(); - } -} diff --git a/vendor/doctrine/orm/src/Query/ResultSetMapping.php b/vendor/doctrine/orm/src/Query/ResultSetMapping.php deleted file mode 100644 index 612474d..0000000 --- a/vendor/doctrine/orm/src/Query/ResultSetMapping.php +++ /dev/null @@ -1,547 +0,0 @@ -Users should use the public methods. - * - * @todo Think about whether the number of lookup maps can be reduced. - */ -class ResultSetMapping -{ - /** - * Whether the result is mixed (contains scalar values together with field values). - * - * @ignore - */ - public bool $isMixed = false; - - /** - * Whether the result is a select statement. - * - * @ignore - */ - public bool $isSelect = true; - - /** - * Maps alias names to class names. - * - * @ignore - * @psalm-var array - */ - public array $aliasMap = []; - - /** - * Maps alias names to related association field names. - * - * @ignore - * @psalm-var array - */ - public array $relationMap = []; - - /** - * Maps alias names to parent alias names. - * - * @ignore - * @psalm-var array - */ - public array $parentAliasMap = []; - - /** - * Maps column names in the result set to field names for each class. - * - * @ignore - * @psalm-var array - */ - public array $fieldMappings = []; - - /** - * Maps column names in the result set to the alias/field name to use in the mapped result. - * - * @ignore - * @psalm-var array - */ - public array $scalarMappings = []; - - /** - * Maps scalar columns to enums - * - * @ignore - * @psalm-var array - */ - public $enumMappings = []; - - /** - * Maps column names in the result set to the alias/field type to use in the mapped result. - * - * @ignore - * @psalm-var array - */ - public array $typeMappings = []; - - /** - * Maps entities in the result set to the alias name to use in the mapped result. - * - * @ignore - * @psalm-var array - */ - public array $entityMappings = []; - - /** - * Maps column names of meta columns (foreign keys, discriminator columns, ...) to field names. - * - * @ignore - * @psalm-var array - */ - public array $metaMappings = []; - - /** - * Maps column names in the result set to the alias they belong to. - * - * @ignore - * @psalm-var array - */ - public array $columnOwnerMap = []; - - /** - * List of columns in the result set that are used as discriminator columns. - * - * @ignore - * @psalm-var array - */ - public array $discriminatorColumns = []; - - /** - * Maps alias names to field names that should be used for indexing. - * - * @ignore - * @psalm-var array - */ - public array $indexByMap = []; - - /** - * Map from column names to class names that declare the field the column is mapped to. - * - * @ignore - * @psalm-var array - */ - public array $declaringClasses = []; - - /** - * This is necessary to hydrate derivate foreign keys correctly. - * - * @psalm-var array> - */ - public array $isIdentifierColumn = []; - - /** - * Maps column names in the result set to field names for each new object expression. - * - * @psalm-var array> - */ - public array $newObjectMappings = []; - - /** - * Maps metadata parameter names to the metadata attribute. - * - * @psalm-var array - */ - public array $metadataParameterMapping = []; - - /** - * Contains query parameter names to be resolved as discriminator values - * - * @psalm-var array - */ - public array $discriminatorParameters = []; - - /** - * Adds an entity result to this ResultSetMapping. - * - * @param string $class The class name of the entity. - * @param string $alias The alias for the class. The alias must be unique among all entity - * results or joined entity results within this ResultSetMapping. - * @param string|null $resultAlias The result alias with which the entity result should be - * placed in the result structure. - * @psalm-param class-string $class - * - * @return $this - * - * @todo Rename: addRootEntity - */ - public function addEntityResult(string $class, string $alias, string|null $resultAlias = null): static - { - $this->aliasMap[$alias] = $class; - $this->entityMappings[$alias] = $resultAlias; - - if ($resultAlias !== null) { - $this->isMixed = true; - } - - return $this; - } - - /** - * Sets a discriminator column for an entity result or joined entity result. - * The discriminator column will be used to determine the concrete class name to - * instantiate. - * - * @param string $alias The alias of the entity result or joined entity result the discriminator - * column should be used for. - * @param string $discrColumn The name of the discriminator column in the SQL result set. - * - * @return $this - * - * @todo Rename: addDiscriminatorColumn - */ - public function setDiscriminatorColumn(string $alias, string $discrColumn): static - { - $this->discriminatorColumns[$alias] = $discrColumn; - $this->columnOwnerMap[$discrColumn] = $alias; - - return $this; - } - - /** - * Sets a field to use for indexing an entity result or joined entity result. - * - * @param string $alias The alias of an entity result or joined entity result. - * @param string $fieldName The name of the field to use for indexing. - * - * @return $this - */ - public function addIndexBy(string $alias, string $fieldName): static - { - $found = false; - - foreach ([...$this->metaMappings, ...$this->fieldMappings] as $columnName => $columnFieldName) { - if (! ($columnFieldName === $fieldName && $this->columnOwnerMap[$columnName] === $alias)) { - continue; - } - - $this->addIndexByColumn($alias, $columnName); - $found = true; - - break; - } - - /* TODO: check if this exception can be put back, for now it's gone because of assumptions made by some ORM internals - if ( ! $found) { - $message = sprintf( - 'Cannot add index by for DQL alias %s and field %s without calling addFieldResult() for them before.', - $alias, - $fieldName - ); - - throw new \LogicException($message); - } - */ - - return $this; - } - - /** - * Sets to index by a scalar result column name. - * - * @return $this - */ - public function addIndexByScalar(string $resultColumnName): static - { - $this->indexByMap['scalars'] = $resultColumnName; - - return $this; - } - - /** - * Sets a column to use for indexing an entity or joined entity result by the given alias name. - * - * @return $this - */ - public function addIndexByColumn(string $alias, string $resultColumnName): static - { - $this->indexByMap[$alias] = $resultColumnName; - - return $this; - } - - /** - * Checks whether an entity result or joined entity result with a given alias has - * a field set for indexing. - * - * @todo Rename: isIndexed($alias) - */ - public function hasIndexBy(string $alias): bool - { - return isset($this->indexByMap[$alias]); - } - - /** - * Checks whether the column with the given name is mapped as a field result - * as part of an entity result or joined entity result. - * - * @param string $columnName The name of the column in the SQL result set. - * - * @todo Rename: isField - */ - public function isFieldResult(string $columnName): bool - { - return isset($this->fieldMappings[$columnName]); - } - - /** - * Adds a field to the result that belongs to an entity or joined entity. - * - * @param string $alias The alias of the root entity or joined entity to which the field belongs. - * @param string $columnName The name of the column in the SQL result set. - * @param string $fieldName The name of the field on the declaring class. - * @param string|null $declaringClass The name of the class that declares/owns the specified field. - * When $alias refers to a superclass in a mapped hierarchy but - * the field $fieldName is defined on a subclass, specify that here. - * If not specified, the field is assumed to belong to the class - * designated by $alias. - * @psalm-param class-string|null $declaringClass - * - * @return $this - * - * @todo Rename: addField - */ - public function addFieldResult(string $alias, string $columnName, string $fieldName, string|null $declaringClass = null): static - { - // column name (in result set) => field name - $this->fieldMappings[$columnName] = $fieldName; - // column name => alias of owner - $this->columnOwnerMap[$columnName] = $alias; - // field name => class name of declaring class - $this->declaringClasses[$columnName] = $declaringClass ?: $this->aliasMap[$alias]; - - if (! $this->isMixed && $this->scalarMappings) { - $this->isMixed = true; - } - - return $this; - } - - /** - * Adds a joined entity result. - * - * @param string $class The class name of the joined entity. - * @param string $alias The unique alias to use for the joined entity. - * @param string $parentAlias The alias of the entity result that is the parent of this joined result. - * @param string $relation The association field that connects the parent entity result - * with the joined entity result. - * @psalm-param class-string $class - * - * @return $this - * - * @todo Rename: addJoinedEntity - */ - public function addJoinedEntityResult(string $class, string $alias, string $parentAlias, string $relation): static - { - $this->aliasMap[$alias] = $class; - $this->parentAliasMap[$alias] = $parentAlias; - $this->relationMap[$alias] = $relation; - - return $this; - } - - /** - * Adds a scalar result mapping. - * - * @param string $columnName The name of the column in the SQL result set. - * @param string|int $alias The result alias with which the scalar result should be placed in the result structure. - * @param string $type The column type - * - * @return $this - * - * @todo Rename: addScalar - */ - public function addScalarResult(string $columnName, string|int $alias, string $type = 'string'): static - { - $this->scalarMappings[$columnName] = $alias; - $this->typeMappings[$columnName] = $type; - - if (! $this->isMixed && $this->fieldMappings) { - $this->isMixed = true; - } - - return $this; - } - - /** - * Adds a scalar result mapping. - * - * @param string $columnName The name of the column in the SQL result set. - * @param string $enumType The enum type - * - * @return $this - */ - public function addEnumResult(string $columnName, string $enumType): static - { - $this->enumMappings[$columnName] = $enumType; - - return $this; - } - - /** - * Adds a metadata parameter mappings. - */ - public function addMetadataParameterMapping(string|int $parameter, string $attribute): void - { - $this->metadataParameterMapping[$parameter] = $attribute; - } - - /** - * Checks whether a column with a given name is mapped as a scalar result. - * - * @todo Rename: isScalar - */ - public function isScalarResult(string $columnName): bool - { - return isset($this->scalarMappings[$columnName]); - } - - /** - * Gets the name of the class of an entity result or joined entity result, - * identified by the given unique alias. - * - * @psalm-return class-string - */ - public function getClassName(string $alias): string - { - return $this->aliasMap[$alias]; - } - - /** - * Gets the field alias for a column that is mapped as a scalar value. - * - * @param string $columnName The name of the column in the SQL result set. - */ - public function getScalarAlias(string $columnName): string|int - { - return $this->scalarMappings[$columnName]; - } - - /** - * Gets the name of the class that owns a field mapping for the specified column. - * - * @psalm-return class-string - */ - public function getDeclaringClass(string $columnName): string - { - return $this->declaringClasses[$columnName]; - } - - public function getRelation(string $alias): string - { - return $this->relationMap[$alias]; - } - - public function isRelation(string $alias): bool - { - return isset($this->relationMap[$alias]); - } - - /** - * Gets the alias of the class that owns a field mapping for the specified column. - */ - public function getEntityAlias(string $columnName): string - { - return $this->columnOwnerMap[$columnName]; - } - - /** - * Gets the parent alias of the given alias. - */ - public function getParentAlias(string $alias): string - { - return $this->parentAliasMap[$alias]; - } - - /** - * Checks whether the given alias has a parent alias. - */ - public function hasParentAlias(string $alias): bool - { - return isset($this->parentAliasMap[$alias]); - } - - /** - * Gets the field name for a column name. - */ - public function getFieldName(string $columnName): string - { - return $this->fieldMappings[$columnName]; - } - - /** @psalm-return array */ - public function getAliasMap(): array - { - return $this->aliasMap; - } - - /** - * Gets the number of different entities that appear in the mapped result. - * - * @psalm-return 0|positive-int - */ - public function getEntityResultCount(): int - { - return count($this->aliasMap); - } - - /** - * Checks whether this ResultSetMapping defines a mixed result. - * - * Mixed results can only occur in object and array (graph) hydration. In such a - * case a mixed result means that scalar values are mixed with objects/array in - * the result. - */ - public function isMixedResult(): bool - { - return $this->isMixed; - } - - /** - * Adds a meta column (foreign key or discriminator column) to the result set. - * - * @param string $alias The result alias with which the meta result should be placed in the result structure. - * @param string $columnName The name of the column in the SQL result set. - * @param string $fieldName The name of the field on the declaring class. - * @param string|null $type The column type - * - * @return $this - * - * @todo Make all methods of this class require all parameters and not infer anything - */ - public function addMetaResult( - string $alias, - string $columnName, - string $fieldName, - bool $isIdentifierColumn = false, - string|null $type = null, - ): static { - $this->metaMappings[$columnName] = $fieldName; - $this->columnOwnerMap[$columnName] = $alias; - - if ($isIdentifierColumn) { - $this->isIdentifierColumn[$alias][$columnName] = true; - } - - if ($type) { - $this->typeMappings[$columnName] = $type; - } - - return $this; - } -} diff --git a/vendor/doctrine/orm/src/Query/ResultSetMappingBuilder.php b/vendor/doctrine/orm/src/Query/ResultSetMappingBuilder.php deleted file mode 100644 index f28f3a9..0000000 --- a/vendor/doctrine/orm/src/Query/ResultSetMappingBuilder.php +++ /dev/null @@ -1,281 +0,0 @@ - queryColumnName). - * @psalm-param class-string $class - * @psalm-param array $renamedColumns - * @psalm-param self::COLUMN_RENAMING_*|null $renameMode - */ - public function addRootEntityFromClassMetadata( - string $class, - string $alias, - array $renamedColumns = [], - int|null $renameMode = null, - ): void { - $renameMode = $renameMode ?: $this->defaultRenameMode; - $columnAliasMap = $this->getColumnAliasMap($class, $renameMode, $renamedColumns); - - $this->addEntityResult($class, $alias); - $this->addAllClassFields($class, $alias, $columnAliasMap); - } - - /** - * Adds a joined entity and all of its fields to the result set. - * - * @param string $class The class name of the joined entity. - * @param string $alias The unique alias to use for the joined entity. - * @param string $parentAlias The alias of the entity result that is the parent of this joined result. - * @param string $relation The association field that connects the parent entity result - * with the joined entity result. - * @param string[] $renamedColumns Columns that have been renamed (tableColumnName => queryColumnName). - * @psalm-param class-string $class - * @psalm-param array $renamedColumns - * @psalm-param self::COLUMN_RENAMING_*|null $renameMode - */ - public function addJoinedEntityFromClassMetadata( - string $class, - string $alias, - string $parentAlias, - string $relation, - array $renamedColumns = [], - int|null $renameMode = null, - ): void { - $renameMode = $renameMode ?: $this->defaultRenameMode; - $columnAliasMap = $this->getColumnAliasMap($class, $renameMode, $renamedColumns); - - $this->addJoinedEntityResult($class, $alias, $parentAlias, $relation); - $this->addAllClassFields($class, $alias, $columnAliasMap); - } - - /** - * Adds all fields of the given class to the result set mapping (columns and meta fields). - * - * @param string[] $columnAliasMap - * @psalm-param array $columnAliasMap - * - * @throws InvalidArgumentException - */ - protected function addAllClassFields(string $class, string $alias, array $columnAliasMap = []): void - { - $classMetadata = $this->em->getClassMetadata($class); - $platform = $this->em->getConnection()->getDatabasePlatform(); - - if (! $this->isInheritanceSupported($classMetadata)) { - throw new InvalidArgumentException('ResultSetMapping builder does not currently support your inheritance scheme.'); - } - - foreach ($classMetadata->getColumnNames() as $columnName) { - $propertyName = $classMetadata->getFieldName($columnName); - $columnAlias = $this->getSQLResultCasing($platform, $columnAliasMap[$columnName]); - - if (isset($this->fieldMappings[$columnAlias])) { - throw new InvalidArgumentException(sprintf( - "The column '%s' conflicts with another column in the mapper.", - $columnName, - )); - } - - $this->addFieldResult($alias, $columnAlias, $propertyName); - - $enumType = $classMetadata->getFieldMapping($propertyName)->enumType ?? null; - if (! empty($enumType)) { - $this->addEnumResult($columnAlias, $enumType); - } - } - - foreach ($classMetadata->associationMappings as $associationMapping) { - if ($associationMapping->isToOneOwningSide()) { - $targetClass = $this->em->getClassMetadata($associationMapping->targetEntity); - $isIdentifier = isset($associationMapping->id) && $associationMapping->id === true; - - foreach ($associationMapping->joinColumns as $joinColumn) { - $columnName = $joinColumn->name; - $columnAlias = $this->getSQLResultCasing($platform, $columnAliasMap[$columnName]); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em); - - if (isset($this->metaMappings[$columnAlias])) { - throw new InvalidArgumentException(sprintf( - "The column '%s' conflicts with another column in the mapper.", - $columnAlias, - )); - } - - $this->addMetaResult($alias, $columnAlias, $columnName, $isIdentifier, $columnType); - } - } - } - } - - private function isInheritanceSupported(ClassMetadata $classMetadata): bool - { - if ( - $classMetadata->isInheritanceTypeSingleTable() - && in_array($classMetadata->name, $classMetadata->discriminatorMap, true) - ) { - return true; - } - - return ! ($classMetadata->isInheritanceTypeSingleTable() || $classMetadata->isInheritanceTypeJoined()); - } - - /** - * Gets column alias for a given column. - * - * @psalm-param array $customRenameColumns - * - * @psalm-assert self::COLUMN_RENAMING_* $mode - */ - private function getColumnAlias(string $columnName, int $mode, array $customRenameColumns): string - { - return match ($mode) { - self::COLUMN_RENAMING_INCREMENT => $columnName . $this->sqlCounter++, - self::COLUMN_RENAMING_CUSTOM => $customRenameColumns[$columnName] ?? $columnName, - self::COLUMN_RENAMING_NONE => $columnName, - default => throw new InvalidArgumentException(sprintf('%d is not a valid value for $mode', $mode)), - }; - } - - /** - * Retrieves a class columns and join columns aliases that are used in the SELECT clause. - * - * This depends on the renaming mode selected by the user. - * - * @psalm-param class-string $className - * @psalm-param self::COLUMN_RENAMING_* $mode - * @psalm-param array $customRenameColumns - * - * @return string[] - * @psalm-return array - */ - private function getColumnAliasMap( - string $className, - int $mode, - array $customRenameColumns, - ): array { - if ($customRenameColumns) { // for BC with 2.2-2.3 API - $mode = self::COLUMN_RENAMING_CUSTOM; - } - - $columnAlias = []; - $class = $this->em->getClassMetadata($className); - - foreach ($class->getColumnNames() as $columnName) { - $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); - } - - foreach ($class->associationMappings as $associationMapping) { - if ($associationMapping->isToOneOwningSide()) { - foreach ($associationMapping->joinColumns as $joinColumn) { - $columnName = $joinColumn->name; - $columnAlias[$columnName] = $this->getColumnAlias($columnName, $mode, $customRenameColumns); - } - } - } - - return $columnAlias; - } - - /** - * Generates the Select clause from this ResultSetMappingBuilder. - * - * Works only for all the entity results. The select parts for scalar - * expressions have to be written manually. - * - * @param string[] $tableAliases - * @psalm-param array $tableAliases - */ - public function generateSelectClause(array $tableAliases = []): string - { - $sql = ''; - - foreach ($this->columnOwnerMap as $columnName => $dqlAlias) { - $tableAlias = $tableAliases[$dqlAlias] ?? $dqlAlias; - - if ($sql !== '') { - $sql .= ', '; - } - - if (isset($this->fieldMappings[$columnName])) { - $class = $this->em->getClassMetadata($this->declaringClasses[$columnName]); - $fieldName = $this->fieldMappings[$columnName]; - $classFieldMapping = $class->fieldMappings[$fieldName]; - $columnSql = $tableAlias . '.' . $classFieldMapping->columnName; - - $type = Type::getType($classFieldMapping->type); - $columnSql = $type->convertToPHPValueSQL($columnSql, $this->em->getConnection()->getDatabasePlatform()); - - $sql .= $columnSql; - } elseif (isset($this->metaMappings[$columnName])) { - $sql .= $tableAlias . '.' . $this->metaMappings[$columnName]; - } elseif (isset($this->discriminatorColumns[$dqlAlias])) { - $sql .= $tableAlias . '.' . $this->discriminatorColumns[$dqlAlias]; - } - - $sql .= ' AS ' . $columnName; - } - - return $sql; - } - - public function __toString(): string - { - return $this->generateSelectClause([]); - } -} diff --git a/vendor/doctrine/orm/src/Query/SqlWalker.php b/vendor/doctrine/orm/src/Query/SqlWalker.php deleted file mode 100644 index c6f98c1..0000000 --- a/vendor/doctrine/orm/src/Query/SqlWalker.php +++ /dev/null @@ -1,2264 +0,0 @@ -> - */ - private array $scalarResultAliasMap = []; - - /** - * Map from Table-Alias + Column-Name to OrderBy-Direction. - * - * @var array - */ - private array $orderedColumnsMap = []; - - /** - * Map from DQL-Alias + Field-Name to SQL Column Alias. - * - * @var array> - */ - private array $scalarFields = []; - - /** - * A list of classes that appear in non-scalar SelectExpressions. - * - * @psalm-var array - */ - private array $selectedClasses = []; - - /** - * The DQL alias of the root class of the currently traversed query. - * - * @psalm-var list - */ - private array $rootAliases = []; - - /** - * Flag that indicates whether to generate SQL table aliases in the SQL. - * These should only be generated for SELECT queries, not for UPDATE/DELETE. - */ - private bool $useSqlTableAliases = true; - - /** - * The database platform abstraction. - */ - private readonly AbstractPlatform $platform; - - /** - * The quote strategy. - */ - private readonly QuoteStrategy $quoteStrategy; - - /** @psalm-param array $queryComponents The query components (symbol table). */ - public function __construct( - private readonly Query $query, - private readonly ParserResult $parserResult, - private array $queryComponents, - ) { - $this->rsm = $parserResult->getResultSetMapping(); - $this->em = $query->getEntityManager(); - $this->conn = $this->em->getConnection(); - $this->platform = $this->conn->getDatabasePlatform(); - $this->quoteStrategy = $this->em->getConfiguration()->getQuoteStrategy(); - } - - /** - * Gets the Query instance used by the walker. - */ - public function getQuery(): Query - { - return $this->query; - } - - /** - * Gets the Connection used by the walker. - */ - public function getConnection(): Connection - { - return $this->conn; - } - - /** - * Gets the EntityManager used by the walker. - */ - public function getEntityManager(): EntityManagerInterface - { - return $this->em; - } - - /** - * Gets the information about a single query component. - * - * @param string $dqlAlias The DQL alias. - * - * @return mixed[] - * @psalm-return QueryComponent - */ - public function getQueryComponent(string $dqlAlias): array - { - return $this->queryComponents[$dqlAlias]; - } - - public function getMetadataForDqlAlias(string $dqlAlias): ClassMetadata - { - return $this->queryComponents[$dqlAlias]['metadata'] - ?? throw new LogicException(sprintf('No metadata for DQL alias: %s', $dqlAlias)); - } - - /** - * Returns internal queryComponents array. - * - * @return array - */ - public function getQueryComponents(): array - { - return $this->queryComponents; - } - - /** - * Sets or overrides a query component for a given dql alias. - * - * @psalm-param QueryComponent $queryComponent - */ - public function setQueryComponent(string $dqlAlias, array $queryComponent): void - { - $requiredKeys = ['metadata', 'parent', 'relation', 'map', 'nestingLevel', 'token']; - - if (array_diff($requiredKeys, array_keys($queryComponent))) { - throw QueryException::invalidQueryComponent($dqlAlias); - } - - $this->queryComponents[$dqlAlias] = $queryComponent; - } - - /** - * Gets an executor that can be used to execute the result of this walker. - */ - public function getExecutor(AST\SelectStatement|AST\UpdateStatement|AST\DeleteStatement $statement): Exec\AbstractSqlExecutor - { - return match (true) { - $statement instanceof AST\SelectStatement - => new Exec\SingleSelectExecutor($statement, $this), - $statement instanceof AST\UpdateStatement - => $this->em->getClassMetadata($statement->updateClause->abstractSchemaName)->isInheritanceTypeJoined() - ? new Exec\MultiTableUpdateExecutor($statement, $this) - : new Exec\SingleTableDeleteUpdateExecutor($statement, $this), - $statement instanceof AST\DeleteStatement - => $this->em->getClassMetadata($statement->deleteClause->abstractSchemaName)->isInheritanceTypeJoined() - ? new Exec\MultiTableDeleteExecutor($statement, $this) - : new Exec\SingleTableDeleteUpdateExecutor($statement, $this), - }; - } - - /** - * Generates a unique, short SQL table alias. - */ - public function getSQLTableAlias(string $tableName, string $dqlAlias = ''): string - { - $tableName .= $dqlAlias ? '@[' . $dqlAlias . ']' : ''; - - if (! isset($this->tableAliasMap[$tableName])) { - $this->tableAliasMap[$tableName] = (preg_match('/[a-z]/i', $tableName[0]) ? strtolower($tableName[0]) : 't') - . $this->tableAliasCounter++ . '_'; - } - - return $this->tableAliasMap[$tableName]; - } - - /** - * Forces the SqlWalker to use a specific alias for a table name, rather than - * generating an alias on its own. - */ - public function setSQLTableAlias(string $tableName, string $alias, string $dqlAlias = ''): string - { - $tableName .= $dqlAlias ? '@[' . $dqlAlias . ']' : ''; - - $this->tableAliasMap[$tableName] = $alias; - - return $alias; - } - - /** - * Gets an SQL column alias for a column name. - */ - public function getSQLColumnAlias(string $columnName): string - { - return $this->quoteStrategy->getColumnAlias($columnName, $this->aliasCounter++, $this->platform); - } - - /** - * Generates the SQL JOINs that are necessary for Class Table Inheritance - * for the given class. - */ - private function generateClassTableInheritanceJoins( - ClassMetadata $class, - string $dqlAlias, - ): string { - $sql = ''; - - $baseTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); - - // INNER JOIN parent class tables - foreach ($class->parentClasses as $parentClassName) { - $parentClass = $this->em->getClassMetadata($parentClassName); - $tableAlias = $this->getSQLTableAlias($parentClass->getTableName(), $dqlAlias); - - // If this is a joined association we must use left joins to preserve the correct result. - $sql .= isset($this->queryComponents[$dqlAlias]['relation']) ? ' LEFT ' : ' INNER '; - $sql .= 'JOIN ' . $this->quoteStrategy->getTableName($parentClass, $this->platform) . ' ' . $tableAlias . ' ON '; - - $sqlParts = []; - - foreach ($this->quoteStrategy->getIdentifierColumnNames($class, $this->platform) as $columnName) { - $sqlParts[] = $baseTableAlias . '.' . $columnName . ' = ' . $tableAlias . '.' . $columnName; - } - - // Add filters on the root class - $sqlParts[] = $this->generateFilterConditionSQL($parentClass, $tableAlias); - - $sql .= implode(' AND ', array_filter($sqlParts)); - } - - // LEFT JOIN child class tables - foreach ($class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); - $tableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); - - $sql .= ' LEFT JOIN ' . $this->quoteStrategy->getTableName($subClass, $this->platform) . ' ' . $tableAlias . ' ON '; - - $sqlParts = []; - - foreach ($this->quoteStrategy->getIdentifierColumnNames($subClass, $this->platform) as $columnName) { - $sqlParts[] = $baseTableAlias . '.' . $columnName . ' = ' . $tableAlias . '.' . $columnName; - } - - $sql .= implode(' AND ', $sqlParts); - } - - return $sql; - } - - private function generateOrderedCollectionOrderByItems(): string - { - $orderedColumns = []; - - foreach ($this->selectedClasses as $selectedClass) { - $dqlAlias = $selectedClass['dqlAlias']; - $qComp = $this->queryComponents[$dqlAlias]; - - if (! isset($qComp['relation']->orderBy)) { - continue; - } - - assert(isset($qComp['metadata'])); - $persister = $this->em->getUnitOfWork()->getEntityPersister($qComp['metadata']->name); - - foreach ($qComp['relation']->orderBy as $fieldName => $orientation) { - $columnName = $this->quoteStrategy->getColumnName($fieldName, $qComp['metadata'], $this->platform); - $tableName = $qComp['metadata']->isInheritanceTypeJoined() - ? $persister->getOwningTable($fieldName) - : $qComp['metadata']->getTableName(); - - $orderedColumn = $this->getSQLTableAlias($tableName, $dqlAlias) . '.' . $columnName; - - // OrderByClause should replace an ordered relation. see - DDC-2475 - if (isset($this->orderedColumnsMap[$orderedColumn])) { - continue; - } - - $this->orderedColumnsMap[$orderedColumn] = $orientation; - $orderedColumns[] = $orderedColumn . ' ' . $orientation; - } - } - - return implode(', ', $orderedColumns); - } - - /** - * Generates a discriminator column SQL condition for the class with the given DQL alias. - * - * @psalm-param list $dqlAliases List of root DQL aliases to inspect for discriminator restrictions. - */ - private function generateDiscriminatorColumnConditionSQL(array $dqlAliases): string - { - $sqlParts = []; - - foreach ($dqlAliases as $dqlAlias) { - $class = $this->getMetadataForDqlAlias($dqlAlias); - - if (! $class->isInheritanceTypeSingleTable()) { - continue; - } - - $sqlTableAlias = $this->useSqlTableAliases - ? $this->getSQLTableAlias($class->getTableName(), $dqlAlias) . '.' - : ''; - - $conn = $this->em->getConnection(); - $values = []; - - if ($class->discriminatorValue !== null) { // discriminators can be 0 - $values[] = $class->getDiscriminatorColumn()->type === 'integer' && is_int($class->discriminatorValue) - ? $class->discriminatorValue - : $conn->quote((string) $class->discriminatorValue); - } - - foreach ($class->subClasses as $subclassName) { - $subclassMetadata = $this->em->getClassMetadata($subclassName); - - // Abstract entity classes show up in the list of subClasses, but may be omitted - // from the discriminator map. In that case, they have a null discriminator value. - if ($subclassMetadata->discriminatorValue === null) { - continue; - } - - $values[] = $subclassMetadata->getDiscriminatorColumn()->type === 'integer' && is_int($subclassMetadata->discriminatorValue) - ? $subclassMetadata->discriminatorValue - : $conn->quote((string) $subclassMetadata->discriminatorValue); - } - - if ($values !== []) { - $sqlParts[] = $sqlTableAlias . $class->getDiscriminatorColumn()->name . ' IN (' . implode(', ', $values) . ')'; - } else { - $sqlParts[] = '1=0'; // impossible condition - } - } - - $sql = implode(' AND ', $sqlParts); - - return count($sqlParts) > 1 ? '(' . $sql . ')' : $sql; - } - - /** - * Generates the filter SQL for a given entity and table alias. - */ - private function generateFilterConditionSQL( - ClassMetadata $targetEntity, - string $targetTableAlias, - ): string { - if (! $this->em->hasFilters()) { - return ''; - } - - switch ($targetEntity->inheritanceType) { - case ClassMetadata::INHERITANCE_TYPE_NONE: - break; - case ClassMetadata::INHERITANCE_TYPE_JOINED: - // The classes in the inheritance will be added to the query one by one, - // but only the root node is getting filtered - if ($targetEntity->name !== $targetEntity->rootEntityName) { - return ''; - } - - break; - case ClassMetadata::INHERITANCE_TYPE_SINGLE_TABLE: - // With STI the table will only be queried once, make sure that the filters - // are added to the root entity - $targetEntity = $this->em->getClassMetadata($targetEntity->rootEntityName); - break; - default: - //@todo: throw exception? - return ''; - } - - $filterClauses = []; - foreach ($this->em->getFilters()->getEnabledFilters() as $filter) { - $filterExpr = $filter->addFilterConstraint($targetEntity, $targetTableAlias); - if ($filterExpr !== '') { - $filterClauses[] = '(' . $filterExpr . ')'; - } - } - - return implode(' AND ', $filterClauses); - } - - /** - * Walks down a SelectStatement AST node, thereby generating the appropriate SQL. - */ - public function walkSelectStatement(AST\SelectStatement $selectStatement): string - { - $limit = $this->query->getMaxResults(); - $offset = $this->query->getFirstResult(); - $lockMode = $this->query->getHint(Query::HINT_LOCK_MODE) ?: LockMode::NONE; - $sql = $this->walkSelectClause($selectStatement->selectClause) - . $this->walkFromClause($selectStatement->fromClause) - . $this->walkWhereClause($selectStatement->whereClause); - - if ($selectStatement->groupByClause) { - $sql .= $this->walkGroupByClause($selectStatement->groupByClause); - } - - if ($selectStatement->havingClause) { - $sql .= $this->walkHavingClause($selectStatement->havingClause); - } - - if ($selectStatement->orderByClause) { - $sql .= $this->walkOrderByClause($selectStatement->orderByClause); - } - - $orderBySql = $this->generateOrderedCollectionOrderByItems(); - if (! $selectStatement->orderByClause && $orderBySql) { - $sql .= ' ORDER BY ' . $orderBySql; - } - - $sql = $this->platform->modifyLimitQuery($sql, $limit, $offset); - - if ($lockMode === LockMode::NONE) { - return $sql; - } - - if ($lockMode === LockMode::PESSIMISTIC_READ) { - return $sql . ' ' . $this->getReadLockSQL($this->platform); - } - - if ($lockMode === LockMode::PESSIMISTIC_WRITE) { - return $sql . ' ' . $this->getWriteLockSQL($this->platform); - } - - if ($lockMode !== LockMode::OPTIMISTIC) { - throw QueryException::invalidLockMode(); - } - - foreach ($this->selectedClasses as $selectedClass) { - if (! $selectedClass['class']->isVersioned) { - throw OptimisticLockException::lockFailed($selectedClass['class']->name); - } - } - - return $sql; - } - - /** - * Walks down a UpdateStatement AST node, thereby generating the appropriate SQL. - */ - public function walkUpdateStatement(AST\UpdateStatement $updateStatement): string - { - $this->useSqlTableAliases = false; - $this->rsm->isSelect = false; - - return $this->walkUpdateClause($updateStatement->updateClause) - . $this->walkWhereClause($updateStatement->whereClause); - } - - /** - * Walks down a DeleteStatement AST node, thereby generating the appropriate SQL. - */ - public function walkDeleteStatement(AST\DeleteStatement $deleteStatement): string - { - $this->useSqlTableAliases = false; - $this->rsm->isSelect = false; - - return $this->walkDeleteClause($deleteStatement->deleteClause) - . $this->walkWhereClause($deleteStatement->whereClause); - } - - /** - * Walks down an IdentificationVariable AST node, thereby generating the appropriate SQL. - * This one differs of ->walkIdentificationVariable() because it generates the entity identifiers. - */ - public function walkEntityIdentificationVariable(string $identVariable): string - { - $class = $this->getMetadataForDqlAlias($identVariable); - $tableAlias = $this->getSQLTableAlias($class->getTableName(), $identVariable); - $sqlParts = []; - - foreach ($this->quoteStrategy->getIdentifierColumnNames($class, $this->platform) as $columnName) { - $sqlParts[] = $tableAlias . '.' . $columnName; - } - - return implode(', ', $sqlParts); - } - - /** - * Walks down an IdentificationVariable (no AST node associated), thereby generating the SQL. - */ - public function walkIdentificationVariable(string $identificationVariable, string|null $fieldName = null): string - { - $class = $this->getMetadataForDqlAlias($identificationVariable); - - if ( - $fieldName !== null && $class->isInheritanceTypeJoined() && - isset($class->fieldMappings[$fieldName]->inherited) - ) { - $class = $this->em->getClassMetadata($class->fieldMappings[$fieldName]->inherited); - } - - return $this->getSQLTableAlias($class->getTableName(), $identificationVariable); - } - - /** - * Walks down a PathExpression AST node, thereby generating the appropriate SQL. - */ - public function walkPathExpression(AST\PathExpression $pathExpr): string - { - $sql = ''; - assert($pathExpr->field !== null); - - switch ($pathExpr->type) { - case AST\PathExpression::TYPE_STATE_FIELD: - $fieldName = $pathExpr->field; - $dqlAlias = $pathExpr->identificationVariable; - $class = $this->getMetadataForDqlAlias($dqlAlias); - - if ($this->useSqlTableAliases) { - $sql .= $this->walkIdentificationVariable($dqlAlias, $fieldName) . '.'; - } - - $sql .= $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); - break; - - case AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION: - // 1- the owning side: - // Just use the foreign key, i.e. u.group_id - $fieldName = $pathExpr->field; - $dqlAlias = $pathExpr->identificationVariable; - $class = $this->getMetadataForDqlAlias($dqlAlias); - - if (isset($class->associationMappings[$fieldName]->inherited)) { - $class = $this->em->getClassMetadata($class->associationMappings[$fieldName]->inherited); - } - - $assoc = $class->associationMappings[$fieldName]; - - if (! $assoc->isOwningSide()) { - throw QueryException::associationPathInverseSideNotSupported($pathExpr); - } - - assert($assoc->isToOneOwningSide()); - - // COMPOSITE KEYS NOT (YET?) SUPPORTED - if (count($assoc->sourceToTargetKeyColumns) > 1) { - throw QueryException::associationPathCompositeKeyNotSupported(); - } - - if ($this->useSqlTableAliases) { - $sql .= $this->getSQLTableAlias($class->getTableName(), $dqlAlias) . '.'; - } - - $sql .= reset($assoc->targetToSourceKeyColumns); - break; - - default: - throw QueryException::invalidPathExpression($pathExpr); - } - - return $sql; - } - - /** - * Walks down a SelectClause AST node, thereby generating the appropriate SQL. - */ - public function walkSelectClause(AST\SelectClause $selectClause): string - { - $sql = 'SELECT ' . ($selectClause->isDistinct ? 'DISTINCT ' : ''); - $sqlSelectExpressions = array_filter(array_map($this->walkSelectExpression(...), $selectClause->selectExpressions)); - - if ($this->query->getHint(Query::HINT_INTERNAL_ITERATION) === true && $selectClause->isDistinct) { - $this->query->setHint(self::HINT_DISTINCT, true); - } - - $addMetaColumns = $this->query->getHydrationMode() === Query::HYDRATE_OBJECT - || $this->query->getHint(Query::HINT_INCLUDE_META_COLUMNS); - - foreach ($this->selectedClasses as $selectedClass) { - $class = $selectedClass['class']; - $dqlAlias = $selectedClass['dqlAlias']; - $resultAlias = $selectedClass['resultAlias']; - - // Register as entity or joined entity result - if (! isset($this->queryComponents[$dqlAlias]['relation'])) { - $this->rsm->addEntityResult($class->name, $dqlAlias, $resultAlias); - } else { - assert(isset($this->queryComponents[$dqlAlias]['parent'])); - - $this->rsm->addJoinedEntityResult( - $class->name, - $dqlAlias, - $this->queryComponents[$dqlAlias]['parent'], - $this->queryComponents[$dqlAlias]['relation']->fieldName, - ); - } - - if ($class->isInheritanceTypeSingleTable() || $class->isInheritanceTypeJoined()) { - // Add discriminator columns to SQL - $rootClass = $this->em->getClassMetadata($class->rootEntityName); - $tblAlias = $this->getSQLTableAlias($rootClass->getTableName(), $dqlAlias); - $discrColumn = $rootClass->getDiscriminatorColumn(); - $columnAlias = $this->getSQLColumnAlias($discrColumn->name); - - $sqlSelectExpressions[] = $tblAlias . '.' . $discrColumn->name . ' AS ' . $columnAlias; - - $this->rsm->setDiscriminatorColumn($dqlAlias, $columnAlias); - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $discrColumn->fieldName, false, $discrColumn->type); - if (! empty($discrColumn->enumType)) { - $this->rsm->addEnumResult($columnAlias, $discrColumn->enumType); - } - } - - // Add foreign key columns to SQL, if necessary - if (! $addMetaColumns && ! $class->containsForeignIdentifier) { - continue; - } - - // Add foreign key columns of class and also parent classes - foreach ($class->associationMappings as $assoc) { - if ( - ! $assoc->isToOneOwningSide() - || ( ! $addMetaColumns && ! isset($assoc->id)) - ) { - continue; - } - - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - $isIdentifier = (isset($assoc->id) && $assoc->id === true); - $owningClass = isset($assoc->inherited) ? $this->em->getClassMetadata($assoc->inherited) : $class; - $sqlTableAlias = $this->getSQLTableAlias($owningClass->getTableName(), $dqlAlias); - - foreach ($assoc->joinColumns as $joinColumn) { - $columnName = $joinColumn->name; - $columnAlias = $this->getSQLColumnAlias($columnName); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em); - - $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - $sqlSelectExpressions[] = $sqlTableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; - - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $isIdentifier, $columnType); - } - } - - // Add foreign key columns to SQL, if necessary - if (! $addMetaColumns) { - continue; - } - - // Add foreign key columns of subclasses - foreach ($class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); - $sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); - - foreach ($subClass->associationMappings as $assoc) { - // Skip if association is inherited - if (isset($assoc->inherited)) { - continue; - } - - if ($assoc->isToOneOwningSide()) { - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - - foreach ($assoc->joinColumns as $joinColumn) { - $columnName = $joinColumn->name; - $columnAlias = $this->getSQLColumnAlias($columnName); - $columnType = PersisterHelper::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $this->em); - - $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $subClass, $this->platform); - $sqlSelectExpressions[] = $sqlTableAlias . '.' . $quotedColumnName . ' AS ' . $columnAlias; - - $this->rsm->addMetaResult($dqlAlias, $columnAlias, $columnName, $subClass->isIdentifier($columnName), $columnType); - } - } - } - } - } - - return $sql . implode(', ', $sqlSelectExpressions); - } - - /** - * Walks down a FromClause AST node, thereby generating the appropriate SQL. - */ - public function walkFromClause(AST\FromClause $fromClause): string - { - $identificationVarDecls = $fromClause->identificationVariableDeclarations; - $sqlParts = []; - - foreach ($identificationVarDecls as $identificationVariableDecl) { - $sqlParts[] = $this->walkIdentificationVariableDeclaration($identificationVariableDecl); - } - - return ' FROM ' . implode(', ', $sqlParts); - } - - /** - * Walks down a IdentificationVariableDeclaration AST node, thereby generating the appropriate SQL. - */ - public function walkIdentificationVariableDeclaration(AST\IdentificationVariableDeclaration $identificationVariableDecl): string - { - $sql = $this->walkRangeVariableDeclaration($identificationVariableDecl->rangeVariableDeclaration); - - if ($identificationVariableDecl->indexBy) { - $this->walkIndexBy($identificationVariableDecl->indexBy); - } - - foreach ($identificationVariableDecl->joins as $join) { - $sql .= $this->walkJoin($join); - } - - return $sql; - } - - /** - * Walks down a IndexBy AST node. - */ - public function walkIndexBy(AST\IndexBy $indexBy): void - { - $pathExpression = $indexBy->singleValuedPathExpression; - $alias = $pathExpression->identificationVariable; - assert($pathExpression->field !== null); - - switch ($pathExpression->type) { - case AST\PathExpression::TYPE_STATE_FIELD: - $field = $pathExpression->field; - break; - - case AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION: - // Just use the foreign key, i.e. u.group_id - $fieldName = $pathExpression->field; - $class = $this->getMetadataForDqlAlias($alias); - - if (isset($class->associationMappings[$fieldName]->inherited)) { - $class = $this->em->getClassMetadata($class->associationMappings[$fieldName]->inherited); - } - - $association = $class->associationMappings[$fieldName]; - - if (! $association->isOwningSide()) { - throw QueryException::associationPathInverseSideNotSupported($pathExpression); - } - - assert($association->isToOneOwningSide()); - - if (count($association->sourceToTargetKeyColumns) > 1) { - throw QueryException::associationPathCompositeKeyNotSupported(); - } - - $field = reset($association->targetToSourceKeyColumns); - break; - - default: - throw QueryException::invalidPathExpression($pathExpression); - } - - if (isset($this->scalarFields[$alias][$field])) { - $this->rsm->addIndexByScalar($this->scalarFields[$alias][$field]); - - return; - } - - $this->rsm->addIndexBy($alias, $field); - } - - /** - * Walks down a RangeVariableDeclaration AST node, thereby generating the appropriate SQL. - */ - public function walkRangeVariableDeclaration(AST\RangeVariableDeclaration $rangeVariableDeclaration): string - { - return $this->generateRangeVariableDeclarationSQL($rangeVariableDeclaration, false); - } - - /** - * Generate appropriate SQL for RangeVariableDeclaration AST node - */ - private function generateRangeVariableDeclarationSQL( - AST\RangeVariableDeclaration $rangeVariableDeclaration, - bool $buildNestedJoins, - ): string { - $class = $this->em->getClassMetadata($rangeVariableDeclaration->abstractSchemaName); - $dqlAlias = $rangeVariableDeclaration->aliasIdentificationVariable; - - if ($rangeVariableDeclaration->isRoot) { - $this->rootAliases[] = $dqlAlias; - } - - $sql = $this->platform->appendLockHint( - $this->quoteStrategy->getTableName($class, $this->platform) . ' ' . - $this->getSQLTableAlias($class->getTableName(), $dqlAlias), - $this->query->getHint(Query::HINT_LOCK_MODE) ?: LockMode::NONE, - ); - - if (! $class->isInheritanceTypeJoined()) { - return $sql; - } - - $classTableInheritanceJoins = $this->generateClassTableInheritanceJoins($class, $dqlAlias); - - if (! $buildNestedJoins) { - return $sql . $classTableInheritanceJoins; - } - - return $classTableInheritanceJoins === '' ? $sql : '(' . $sql . $classTableInheritanceJoins . ')'; - } - - /** - * Walks down a JoinAssociationDeclaration AST node, thereby generating the appropriate SQL. - * - * @psalm-param AST\Join::JOIN_TYPE_* $joinType - * - * @throws QueryException - */ - public function walkJoinAssociationDeclaration( - AST\JoinAssociationDeclaration $joinAssociationDeclaration, - int $joinType = AST\Join::JOIN_TYPE_INNER, - AST\ConditionalExpression|AST\Phase2OptimizableConditional|null $condExpr = null, - ): string { - $sql = ''; - - $associationPathExpression = $joinAssociationDeclaration->joinAssociationPathExpression; - $joinedDqlAlias = $joinAssociationDeclaration->aliasIdentificationVariable; - $indexBy = $joinAssociationDeclaration->indexBy; - - $relation = $this->queryComponents[$joinedDqlAlias]['relation'] ?? null; - assert($relation !== null); - $targetClass = $this->em->getClassMetadata($relation->targetEntity); - $sourceClass = $this->em->getClassMetadata($relation->sourceEntity); - $targetTableName = $this->quoteStrategy->getTableName($targetClass, $this->platform); - - $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName(), $joinedDqlAlias); - $sourceTableAlias = $this->getSQLTableAlias($sourceClass->getTableName(), $associationPathExpression->identificationVariable); - - // Ensure we got the owning side, since it has all mapping info - $assoc = $this->em->getMetadataFactory()->getOwningSide($relation); - - if ($this->query->getHint(Query::HINT_INTERNAL_ITERATION) === true && (! $this->query->getHint(self::HINT_DISTINCT) || isset($this->selectedClasses[$joinedDqlAlias]))) { - if ($relation->isToMany()) { - throw QueryException::iterateWithFetchJoinNotAllowed($assoc); - } - } - - $fetchMode = $this->query->getHint('fetchMode')[$assoc->sourceEntity][$assoc->fieldName] ?? $relation->fetch; - - if ($fetchMode === ClassMetadata::FETCH_EAGER && $condExpr !== null) { - throw QueryException::eagerFetchJoinWithNotAllowed($assoc->sourceEntity, $assoc->fieldName); - } - - // This condition is not checking ClassMetadata::MANY_TO_ONE, because by definition it cannot - // be the owning side and previously we ensured that $assoc is always the owning side of the associations. - // The owning side is necessary at this point because only it contains the JoinColumn information. - switch (true) { - case $assoc->isToOne(): - assert($assoc->isToOneOwningSide()); - $conditions = []; - - foreach ($assoc->joinColumns as $joinColumn) { - $quotedSourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $quotedTargetColumn = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $targetClass, $this->platform); - - if ($relation->isOwningSide()) { - $conditions[] = $sourceTableAlias . '.' . $quotedSourceColumn . ' = ' . $targetTableAlias . '.' . $quotedTargetColumn; - - continue; - } - - $conditions[] = $sourceTableAlias . '.' . $quotedTargetColumn . ' = ' . $targetTableAlias . '.' . $quotedSourceColumn; - } - - // Apply remaining inheritance restrictions - $discrSql = $this->generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); - - if ($discrSql) { - $conditions[] = $discrSql; - } - - // Apply the filters - $filterExpr = $this->generateFilterConditionSQL($targetClass, $targetTableAlias); - - if ($filterExpr) { - $conditions[] = $filterExpr; - } - - $targetTableJoin = [ - 'table' => $targetTableName . ' ' . $targetTableAlias, - 'condition' => implode(' AND ', $conditions), - ]; - break; - - case $assoc->isManyToMany(): - // Join relation table - $joinTable = $assoc->joinTable; - $joinTableAlias = $this->getSQLTableAlias($joinTable->name, $joinedDqlAlias); - $joinTableName = $this->quoteStrategy->getJoinTableName($assoc, $sourceClass, $this->platform); - - $conditions = []; - $relationColumns = $relation->isOwningSide() - ? $assoc->joinTable->joinColumns - : $assoc->joinTable->inverseJoinColumns; - - foreach ($relationColumns as $joinColumn) { - $quotedSourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $quotedTargetColumn = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $targetClass, $this->platform); - - $conditions[] = $sourceTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableAlias . '.' . $quotedSourceColumn; - } - - $sql .= $joinTableName . ' ' . $joinTableAlias . ' ON ' . implode(' AND ', $conditions); - - // Join target table - $sql .= $joinType === AST\Join::JOIN_TYPE_LEFT || $joinType === AST\Join::JOIN_TYPE_LEFTOUTER ? ' LEFT JOIN ' : ' INNER JOIN '; - - $conditions = []; - $relationColumns = $relation->isOwningSide() - ? $assoc->joinTable->inverseJoinColumns - : $assoc->joinTable->joinColumns; - - foreach ($relationColumns as $joinColumn) { - $quotedSourceColumn = $this->quoteStrategy->getJoinColumnName($joinColumn, $targetClass, $this->platform); - $quotedTargetColumn = $this->quoteStrategy->getReferencedJoinColumnName($joinColumn, $targetClass, $this->platform); - - $conditions[] = $targetTableAlias . '.' . $quotedTargetColumn . ' = ' . $joinTableAlias . '.' . $quotedSourceColumn; - } - - // Apply remaining inheritance restrictions - $discrSql = $this->generateDiscriminatorColumnConditionSQL([$joinedDqlAlias]); - - if ($discrSql) { - $conditions[] = $discrSql; - } - - // Apply the filters - $filterExpr = $this->generateFilterConditionSQL($targetClass, $targetTableAlias); - - if ($filterExpr) { - $conditions[] = $filterExpr; - } - - $targetTableJoin = [ - 'table' => $targetTableName . ' ' . $targetTableAlias, - 'condition' => implode(' AND ', $conditions), - ]; - break; - - default: - throw new BadMethodCallException('Type of association must be one of *_TO_ONE or MANY_TO_MANY'); - } - - // Handle WITH clause - $withCondition = $condExpr === null ? '' : ('(' . $this->walkConditionalExpression($condExpr) . ')'); - - if ($targetClass->isInheritanceTypeJoined()) { - $ctiJoins = $this->generateClassTableInheritanceJoins($targetClass, $joinedDqlAlias); - // If we have WITH condition, we need to build nested joins for target class table and cti joins - if ($withCondition && $ctiJoins) { - $sql .= '(' . $targetTableJoin['table'] . $ctiJoins . ') ON ' . $targetTableJoin['condition']; - } else { - $sql .= $targetTableJoin['table'] . ' ON ' . $targetTableJoin['condition'] . $ctiJoins; - } - } else { - $sql .= $targetTableJoin['table'] . ' ON ' . $targetTableJoin['condition']; - } - - if ($withCondition) { - $sql .= ' AND ' . $withCondition; - } - - // Apply the indexes - if ($indexBy) { - // For Many-To-One or One-To-One associations this obviously makes no sense, but is ignored silently. - $this->walkIndexBy($indexBy); - } elseif ($relation->isIndexed()) { - $this->rsm->addIndexBy($joinedDqlAlias, $relation->indexBy()); - } - - return $sql; - } - - /** - * Walks down a FunctionNode AST node, thereby generating the appropriate SQL. - */ - public function walkFunction(AST\Functions\FunctionNode $function): string - { - return $function->getSql($this); - } - - /** - * Walks down an OrderByClause AST node, thereby generating the appropriate SQL. - */ - public function walkOrderByClause(AST\OrderByClause $orderByClause): string - { - $orderByItems = array_map($this->walkOrderByItem(...), $orderByClause->orderByItems); - - $collectionOrderByItems = $this->generateOrderedCollectionOrderByItems(); - if ($collectionOrderByItems !== '') { - $orderByItems = array_merge($orderByItems, (array) $collectionOrderByItems); - } - - return ' ORDER BY ' . implode(', ', $orderByItems); - } - - /** - * Walks down an OrderByItem AST node, thereby generating the appropriate SQL. - */ - public function walkOrderByItem(AST\OrderByItem $orderByItem): string - { - $type = strtoupper($orderByItem->type); - $expr = $orderByItem->expression; - $sql = $expr instanceof AST\Node - ? $expr->dispatch($this) - : $this->walkResultVariable($this->queryComponents[$expr]['token']->value); - - $this->orderedColumnsMap[$sql] = $type; - - if ($expr instanceof AST\Subselect) { - return '(' . $sql . ') ' . $type; - } - - return $sql . ' ' . $type; - } - - /** - * Walks down a HavingClause AST node, thereby generating the appropriate SQL. - */ - public function walkHavingClause(AST\HavingClause $havingClause): string - { - return ' HAVING ' . $this->walkConditionalExpression($havingClause->conditionalExpression); - } - - /** - * Walks down a Join AST node and creates the corresponding SQL. - */ - public function walkJoin(AST\Join $join): string - { - $joinType = $join->joinType; - $joinDeclaration = $join->joinAssociationDeclaration; - - $sql = $joinType === AST\Join::JOIN_TYPE_LEFT || $joinType === AST\Join::JOIN_TYPE_LEFTOUTER - ? ' LEFT JOIN ' - : ' INNER JOIN '; - - switch (true) { - case $joinDeclaration instanceof AST\RangeVariableDeclaration: - $class = $this->em->getClassMetadata($joinDeclaration->abstractSchemaName); - $dqlAlias = $joinDeclaration->aliasIdentificationVariable; - $tableAlias = $this->getSQLTableAlias($class->table['name'], $dqlAlias); - $conditions = []; - - if ($join->conditionalExpression) { - $conditions[] = '(' . $this->walkConditionalExpression($join->conditionalExpression) . ')'; - } - - $isUnconditionalJoin = $conditions === []; - $condExprConjunction = $class->isInheritanceTypeJoined() && $joinType !== AST\Join::JOIN_TYPE_LEFT && $joinType !== AST\Join::JOIN_TYPE_LEFTOUTER && $isUnconditionalJoin - ? ' AND ' - : ' ON '; - - $sql .= $this->generateRangeVariableDeclarationSQL($joinDeclaration, ! $isUnconditionalJoin); - - // Apply remaining inheritance restrictions - $discrSql = $this->generateDiscriminatorColumnConditionSQL([$dqlAlias]); - - if ($discrSql) { - $conditions[] = $discrSql; - } - - // Apply the filters - $filterExpr = $this->generateFilterConditionSQL($class, $tableAlias); - - if ($filterExpr) { - $conditions[] = $filterExpr; - } - - if ($conditions) { - $sql .= $condExprConjunction . implode(' AND ', $conditions); - } - - break; - - case $joinDeclaration instanceof AST\JoinAssociationDeclaration: - $sql .= $this->walkJoinAssociationDeclaration($joinDeclaration, $joinType, $join->conditionalExpression); - break; - } - - return $sql; - } - - /** - * Walks down a CoalesceExpression AST node and generates the corresponding SQL. - */ - public function walkCoalesceExpression(AST\CoalesceExpression $coalesceExpression): string - { - $sql = 'COALESCE('; - - $scalarExpressions = []; - - foreach ($coalesceExpression->scalarExpressions as $scalarExpression) { - $scalarExpressions[] = $this->walkSimpleArithmeticExpression($scalarExpression); - } - - return $sql . implode(', ', $scalarExpressions) . ')'; - } - - /** - * Walks down a NullIfExpression AST node and generates the corresponding SQL. - */ - public function walkNullIfExpression(AST\NullIfExpression $nullIfExpression): string - { - $firstExpression = is_string($nullIfExpression->firstExpression) - ? $this->conn->quote($nullIfExpression->firstExpression) - : $this->walkSimpleArithmeticExpression($nullIfExpression->firstExpression); - - $secondExpression = is_string($nullIfExpression->secondExpression) - ? $this->conn->quote($nullIfExpression->secondExpression) - : $this->walkSimpleArithmeticExpression($nullIfExpression->secondExpression); - - return 'NULLIF(' . $firstExpression . ', ' . $secondExpression . ')'; - } - - /** - * Walks down a GeneralCaseExpression AST node and generates the corresponding SQL. - */ - public function walkGeneralCaseExpression(AST\GeneralCaseExpression $generalCaseExpression): string - { - $sql = 'CASE'; - - foreach ($generalCaseExpression->whenClauses as $whenClause) { - $sql .= ' WHEN ' . $this->walkConditionalExpression($whenClause->caseConditionExpression); - $sql .= ' THEN ' . $this->walkSimpleArithmeticExpression($whenClause->thenScalarExpression); - } - - $sql .= ' ELSE ' . $this->walkSimpleArithmeticExpression($generalCaseExpression->elseScalarExpression) . ' END'; - - return $sql; - } - - /** - * Walks down a SimpleCaseExpression AST node and generates the corresponding SQL. - */ - public function walkSimpleCaseExpression(AST\SimpleCaseExpression $simpleCaseExpression): string - { - $sql = 'CASE ' . $this->walkStateFieldPathExpression($simpleCaseExpression->caseOperand); - - foreach ($simpleCaseExpression->simpleWhenClauses as $simpleWhenClause) { - $sql .= ' WHEN ' . $this->walkSimpleArithmeticExpression($simpleWhenClause->caseScalarExpression); - $sql .= ' THEN ' . $this->walkSimpleArithmeticExpression($simpleWhenClause->thenScalarExpression); - } - - $sql .= ' ELSE ' . $this->walkSimpleArithmeticExpression($simpleCaseExpression->elseScalarExpression) . ' END'; - - return $sql; - } - - /** - * Walks down a SelectExpression AST node and generates the corresponding SQL. - */ - public function walkSelectExpression(AST\SelectExpression $selectExpression): string - { - $sql = ''; - $expr = $selectExpression->expression; - $hidden = $selectExpression->hiddenAliasResultVariable; - - switch (true) { - case $expr instanceof AST\PathExpression: - if ($expr->type !== AST\PathExpression::TYPE_STATE_FIELD) { - throw QueryException::invalidPathExpression($expr); - } - - assert($expr->field !== null); - $fieldName = $expr->field; - $dqlAlias = $expr->identificationVariable; - $class = $this->getMetadataForDqlAlias($dqlAlias); - - $resultAlias = $selectExpression->fieldIdentificationVariable ?: $fieldName; - $tableName = $class->isInheritanceTypeJoined() - ? $this->em->getUnitOfWork()->getEntityPersister($class->name)->getOwningTable($fieldName) - : $class->getTableName(); - - $sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias); - $fieldMapping = $class->fieldMappings[$fieldName]; - $columnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); - $columnAlias = $this->getSQLColumnAlias($fieldMapping->columnName); - $col = $sqlTableAlias . '.' . $columnName; - - $type = Type::getType($fieldMapping->type); - $col = $type->convertToPHPValueSQL($col, $this->conn->getDatabasePlatform()); - - $sql .= $col . ' AS ' . $columnAlias; - - $this->scalarResultAliasMap[$resultAlias] = $columnAlias; - - if (! $hidden) { - $this->rsm->addScalarResult($columnAlias, $resultAlias, $fieldMapping->type); - $this->scalarFields[$dqlAlias][$fieldName] = $columnAlias; - - if (! empty($fieldMapping->enumType)) { - $this->rsm->addEnumResult($columnAlias, $fieldMapping->enumType); - } - } - - break; - - case $expr instanceof AST\AggregateExpression: - case $expr instanceof AST\Functions\FunctionNode: - case $expr instanceof AST\SimpleArithmeticExpression: - case $expr instanceof AST\ArithmeticTerm: - case $expr instanceof AST\ArithmeticFactor: - case $expr instanceof AST\ParenthesisExpression: - case $expr instanceof AST\Literal: - case $expr instanceof AST\NullIfExpression: - case $expr instanceof AST\CoalesceExpression: - case $expr instanceof AST\GeneralCaseExpression: - case $expr instanceof AST\SimpleCaseExpression: - $columnAlias = $this->getSQLColumnAlias('sclr'); - $resultAlias = $selectExpression->fieldIdentificationVariable ?: $this->scalarResultCounter++; - - $sql .= $expr->dispatch($this) . ' AS ' . $columnAlias; - - $this->scalarResultAliasMap[$resultAlias] = $columnAlias; - - if ($hidden) { - break; - } - - if (! $expr instanceof Query\AST\TypedExpression) { - // Conceptually we could resolve field type here by traverse through AST to retrieve field type, - // but this is not a feasible solution; assume 'string'. - $this->rsm->addScalarResult($columnAlias, $resultAlias, 'string'); - - break; - } - - $this->rsm->addScalarResult($columnAlias, $resultAlias, Type::getTypeRegistry()->lookupName($expr->getReturnType())); - - break; - - case $expr instanceof AST\Subselect: - $columnAlias = $this->getSQLColumnAlias('sclr'); - $resultAlias = $selectExpression->fieldIdentificationVariable ?: $this->scalarResultCounter++; - - $sql .= '(' . $this->walkSubselect($expr) . ') AS ' . $columnAlias; - - $this->scalarResultAliasMap[$resultAlias] = $columnAlias; - - if (! $hidden) { - // We cannot resolve field type here; assume 'string'. - $this->rsm->addScalarResult($columnAlias, $resultAlias, 'string'); - } - - break; - - case $expr instanceof AST\NewObjectExpression: - $sql .= $this->walkNewObject($expr, $selectExpression->fieldIdentificationVariable); - break; - - default: - $dqlAlias = $expr; - $class = $this->getMetadataForDqlAlias($dqlAlias); - $resultAlias = $selectExpression->fieldIdentificationVariable ?: null; - - if (! isset($this->selectedClasses[$dqlAlias])) { - $this->selectedClasses[$dqlAlias] = [ - 'class' => $class, - 'dqlAlias' => $dqlAlias, - 'resultAlias' => $resultAlias, - ]; - } - - $sqlParts = []; - - // Select all fields from the queried class - foreach ($class->fieldMappings as $fieldName => $mapping) { - $tableName = isset($mapping->inherited) - ? $this->em->getClassMetadata($mapping->inherited)->getTableName() - : $class->getTableName(); - - $sqlTableAlias = $this->getSQLTableAlias($tableName, $dqlAlias); - $columnAlias = $this->getSQLColumnAlias($mapping->columnName); - $quotedColumnName = $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); - - $col = $sqlTableAlias . '.' . $quotedColumnName; - - $type = Type::getType($mapping->type); - $col = $type->convertToPHPValueSQL($col, $this->platform); - - $sqlParts[] = $col . ' AS ' . $columnAlias; - - $this->scalarResultAliasMap[$resultAlias][] = $columnAlias; - - $this->rsm->addFieldResult($dqlAlias, $columnAlias, $fieldName, $class->name); - - if (! empty($mapping->enumType)) { - $this->rsm->addEnumResult($columnAlias, $mapping->enumType); - } - } - - // Add any additional fields of subclasses (excluding inherited fields) - // 1) on Single Table Inheritance: always, since its marginal overhead - // 2) on Class Table Inheritance - foreach ($class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); - $sqlTableAlias = $this->getSQLTableAlias($subClass->getTableName(), $dqlAlias); - - foreach ($subClass->fieldMappings as $fieldName => $mapping) { - if (isset($mapping->inherited)) { - continue; - } - - $columnAlias = $this->getSQLColumnAlias($mapping->columnName); - $quotedColumnName = $this->quoteStrategy->getColumnName($fieldName, $subClass, $this->platform); - - $col = $sqlTableAlias . '.' . $quotedColumnName; - - $type = Type::getType($mapping->type); - $col = $type->convertToPHPValueSQL($col, $this->platform); - - $sqlParts[] = $col . ' AS ' . $columnAlias; - - $this->scalarResultAliasMap[$resultAlias][] = $columnAlias; - - $this->rsm->addFieldResult($dqlAlias, $columnAlias, $fieldName, $subClassName); - } - } - - $sql .= implode(', ', $sqlParts); - } - - return $sql; - } - - public function walkQuantifiedExpression(AST\QuantifiedExpression $qExpr): string - { - return ' ' . strtoupper($qExpr->type) . '(' . $this->walkSubselect($qExpr->subselect) . ')'; - } - - /** - * Walks down a Subselect AST node, thereby generating the appropriate SQL. - */ - public function walkSubselect(AST\Subselect $subselect): string - { - $useAliasesBefore = $this->useSqlTableAliases; - $rootAliasesBefore = $this->rootAliases; - - $this->rootAliases = []; // reset the rootAliases for the subselect - $this->useSqlTableAliases = true; - - $sql = $this->walkSimpleSelectClause($subselect->simpleSelectClause); - $sql .= $this->walkSubselectFromClause($subselect->subselectFromClause); - $sql .= $this->walkWhereClause($subselect->whereClause); - - $sql .= $subselect->groupByClause ? $this->walkGroupByClause($subselect->groupByClause) : ''; - $sql .= $subselect->havingClause ? $this->walkHavingClause($subselect->havingClause) : ''; - $sql .= $subselect->orderByClause ? $this->walkOrderByClause($subselect->orderByClause) : ''; - - $this->rootAliases = $rootAliasesBefore; // put the main aliases back - $this->useSqlTableAliases = $useAliasesBefore; - - return $sql; - } - - /** - * Walks down a SubselectFromClause AST node, thereby generating the appropriate SQL. - */ - public function walkSubselectFromClause(AST\SubselectFromClause $subselectFromClause): string - { - $identificationVarDecls = $subselectFromClause->identificationVariableDeclarations; - $sqlParts = []; - - foreach ($identificationVarDecls as $subselectIdVarDecl) { - $sqlParts[] = $this->walkIdentificationVariableDeclaration($subselectIdVarDecl); - } - - return ' FROM ' . implode(', ', $sqlParts); - } - - /** - * Walks down a SimpleSelectClause AST node, thereby generating the appropriate SQL. - */ - public function walkSimpleSelectClause(AST\SimpleSelectClause $simpleSelectClause): string - { - return 'SELECT' . ($simpleSelectClause->isDistinct ? ' DISTINCT' : '') - . $this->walkSimpleSelectExpression($simpleSelectClause->simpleSelectExpression); - } - - public function walkParenthesisExpression(AST\ParenthesisExpression $parenthesisExpression): string - { - return sprintf('(%s)', $parenthesisExpression->expression->dispatch($this)); - } - - public function walkNewObject(AST\NewObjectExpression $newObjectExpression, string|null $newObjectResultAlias = null): string - { - $sqlSelectExpressions = []; - $objIndex = $newObjectResultAlias ?: $this->newObjectCounter++; - - foreach ($newObjectExpression->args as $argIndex => $e) { - $resultAlias = $this->scalarResultCounter++; - $columnAlias = $this->getSQLColumnAlias('sclr'); - $fieldType = 'string'; - - switch (true) { - case $e instanceof AST\NewObjectExpression: - $sqlSelectExpressions[] = $e->dispatch($this); - break; - - case $e instanceof AST\Subselect: - $sqlSelectExpressions[] = '(' . $e->dispatch($this) . ') AS ' . $columnAlias; - break; - - case $e instanceof AST\PathExpression: - assert($e->field !== null); - $dqlAlias = $e->identificationVariable; - $class = $this->getMetadataForDqlAlias($dqlAlias); - $fieldName = $e->field; - $fieldMapping = $class->fieldMappings[$fieldName]; - $fieldType = $fieldMapping->type; - $col = trim($e->dispatch($this)); - - $type = Type::getType($fieldType); - $col = $type->convertToPHPValueSQL($col, $this->platform); - - $sqlSelectExpressions[] = $col . ' AS ' . $columnAlias; - - if (! empty($fieldMapping->enumType)) { - $this->rsm->addEnumResult($columnAlias, $fieldMapping->enumType); - } - - break; - - case $e instanceof AST\Literal: - switch ($e->type) { - case AST\Literal::BOOLEAN: - $fieldType = 'boolean'; - break; - - case AST\Literal::NUMERIC: - $fieldType = is_float($e->value) ? 'float' : 'integer'; - break; - } - - $sqlSelectExpressions[] = trim($e->dispatch($this)) . ' AS ' . $columnAlias; - break; - - default: - $sqlSelectExpressions[] = trim($e->dispatch($this)) . ' AS ' . $columnAlias; - break; - } - - $this->scalarResultAliasMap[$resultAlias] = $columnAlias; - $this->rsm->addScalarResult($columnAlias, $resultAlias, $fieldType); - - $this->rsm->newObjectMappings[$columnAlias] = [ - 'className' => $newObjectExpression->className, - 'objIndex' => $objIndex, - 'argIndex' => $argIndex, - ]; - } - - return implode(', ', $sqlSelectExpressions); - } - - /** - * Walks down a SimpleSelectExpression AST node, thereby generating the appropriate SQL. - */ - public function walkSimpleSelectExpression(AST\SimpleSelectExpression $simpleSelectExpression): string - { - $expr = $simpleSelectExpression->expression; - $sql = ' '; - - switch (true) { - case $expr instanceof AST\PathExpression: - $sql .= $this->walkPathExpression($expr); - break; - - case $expr instanceof AST\Subselect: - $alias = $simpleSelectExpression->fieldIdentificationVariable ?: $this->scalarResultCounter++; - - $columnAlias = 'sclr' . $this->aliasCounter++; - $this->scalarResultAliasMap[$alias] = $columnAlias; - - $sql .= '(' . $this->walkSubselect($expr) . ') AS ' . $columnAlias; - break; - - case $expr instanceof AST\Functions\FunctionNode: - case $expr instanceof AST\SimpleArithmeticExpression: - case $expr instanceof AST\ArithmeticTerm: - case $expr instanceof AST\ArithmeticFactor: - case $expr instanceof AST\Literal: - case $expr instanceof AST\NullIfExpression: - case $expr instanceof AST\CoalesceExpression: - case $expr instanceof AST\GeneralCaseExpression: - case $expr instanceof AST\SimpleCaseExpression: - $alias = $simpleSelectExpression->fieldIdentificationVariable ?: $this->scalarResultCounter++; - - $columnAlias = $this->getSQLColumnAlias('sclr'); - $this->scalarResultAliasMap[$alias] = $columnAlias; - - $sql .= $expr->dispatch($this) . ' AS ' . $columnAlias; - break; - - case $expr instanceof AST\ParenthesisExpression: - $sql .= $this->walkParenthesisExpression($expr); - break; - - default: // IdentificationVariable - $sql .= $this->walkEntityIdentificationVariable($expr); - break; - } - - return $sql; - } - - /** - * Walks down an AggregateExpression AST node, thereby generating the appropriate SQL. - */ - public function walkAggregateExpression(AST\AggregateExpression $aggExpression): string - { - return $aggExpression->functionName . '(' . ($aggExpression->isDistinct ? 'DISTINCT ' : '') - . $this->walkSimpleArithmeticExpression($aggExpression->pathExpression) . ')'; - } - - /** - * Walks down a GroupByClause AST node, thereby generating the appropriate SQL. - */ - public function walkGroupByClause(AST\GroupByClause $groupByClause): string - { - $sqlParts = []; - - foreach ($groupByClause->groupByItems as $groupByItem) { - $sqlParts[] = $this->walkGroupByItem($groupByItem); - } - - return ' GROUP BY ' . implode(', ', $sqlParts); - } - - /** - * Walks down a GroupByItem AST node, thereby generating the appropriate SQL. - */ - public function walkGroupByItem(AST\PathExpression|string $groupByItem): string - { - // StateFieldPathExpression - if (! is_string($groupByItem)) { - return $this->walkPathExpression($groupByItem); - } - - // ResultVariable - if (isset($this->queryComponents[$groupByItem]['resultVariable'])) { - $resultVariable = $this->queryComponents[$groupByItem]['resultVariable']; - - if ($resultVariable instanceof AST\PathExpression) { - return $this->walkPathExpression($resultVariable); - } - - if ($resultVariable instanceof AST\Node && isset($resultVariable->pathExpression)) { - return $this->walkPathExpression($resultVariable->pathExpression); - } - - return $this->walkResultVariable($groupByItem); - } - - // IdentificationVariable - $sqlParts = []; - - foreach ($this->getMetadataForDqlAlias($groupByItem)->fieldNames as $field) { - $item = new AST\PathExpression(AST\PathExpression::TYPE_STATE_FIELD, $groupByItem, $field); - $item->type = AST\PathExpression::TYPE_STATE_FIELD; - - $sqlParts[] = $this->walkPathExpression($item); - } - - foreach ($this->getMetadataForDqlAlias($groupByItem)->associationMappings as $mapping) { - if ($mapping->isToOneOwningSide()) { - $item = new AST\PathExpression(AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $groupByItem, $mapping->fieldName); - $item->type = AST\PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; - - $sqlParts[] = $this->walkPathExpression($item); - } - } - - return implode(', ', $sqlParts); - } - - /** - * Walks down a DeleteClause AST node, thereby generating the appropriate SQL. - */ - public function walkDeleteClause(AST\DeleteClause $deleteClause): string - { - $class = $this->em->getClassMetadata($deleteClause->abstractSchemaName); - $tableName = $class->getTableName(); - $sql = 'DELETE FROM ' . $this->quoteStrategy->getTableName($class, $this->platform); - - $this->setSQLTableAlias($tableName, $tableName, $deleteClause->aliasIdentificationVariable); - $this->rootAliases[] = $deleteClause->aliasIdentificationVariable; - - return $sql; - } - - /** - * Walks down an UpdateClause AST node, thereby generating the appropriate SQL. - */ - public function walkUpdateClause(AST\UpdateClause $updateClause): string - { - $class = $this->em->getClassMetadata($updateClause->abstractSchemaName); - $tableName = $class->getTableName(); - $sql = 'UPDATE ' . $this->quoteStrategy->getTableName($class, $this->platform); - - $this->setSQLTableAlias($tableName, $tableName, $updateClause->aliasIdentificationVariable); - $this->rootAliases[] = $updateClause->aliasIdentificationVariable; - - return $sql . ' SET ' . implode(', ', array_map($this->walkUpdateItem(...), $updateClause->updateItems)); - } - - /** - * Walks down an UpdateItem AST node, thereby generating the appropriate SQL. - */ - public function walkUpdateItem(AST\UpdateItem $updateItem): string - { - $useTableAliasesBefore = $this->useSqlTableAliases; - $this->useSqlTableAliases = false; - - $sql = $this->walkPathExpression($updateItem->pathExpression) . ' = '; - $newValue = $updateItem->newValue; - - $sql .= match (true) { - $newValue instanceof AST\Node => $newValue->dispatch($this), - $newValue === null => 'NULL', - }; - - $this->useSqlTableAliases = $useTableAliasesBefore; - - return $sql; - } - - /** - * Walks down a WhereClause AST node, thereby generating the appropriate SQL. - * - * WhereClause or not, the appropriate discriminator sql is added. - */ - public function walkWhereClause(AST\WhereClause|null $whereClause): string - { - $condSql = $whereClause !== null ? $this->walkConditionalExpression($whereClause->conditionalExpression) : ''; - $discrSql = $this->generateDiscriminatorColumnConditionSQL($this->rootAliases); - - if ($this->em->hasFilters()) { - $filterClauses = []; - foreach ($this->rootAliases as $dqlAlias) { - $class = $this->getMetadataForDqlAlias($dqlAlias); - $tableAlias = $this->getSQLTableAlias($class->table['name'], $dqlAlias); - - $filterExpr = $this->generateFilterConditionSQL($class, $tableAlias); - if ($filterExpr) { - $filterClauses[] = $filterExpr; - } - } - - if (count($filterClauses)) { - if ($condSql) { - $condSql = '(' . $condSql . ') AND '; - } - - $condSql .= implode(' AND ', $filterClauses); - } - } - - if ($condSql) { - return ' WHERE ' . (! $discrSql ? $condSql : '(' . $condSql . ') AND ' . $discrSql); - } - - if ($discrSql) { - return ' WHERE ' . $discrSql; - } - - return ''; - } - - /** - * Walk down a ConditionalExpression AST node, thereby generating the appropriate SQL. - */ - public function walkConditionalExpression( - AST\ConditionalExpression|AST\Phase2OptimizableConditional $condExpr, - ): string { - // Phase 2 AST optimization: Skip processing of ConditionalExpression - // if only one ConditionalTerm is defined - if (! ($condExpr instanceof AST\ConditionalExpression)) { - return $this->walkConditionalTerm($condExpr); - } - - return implode(' OR ', array_map($this->walkConditionalTerm(...), $condExpr->conditionalTerms)); - } - - /** - * Walks down a ConditionalTerm AST node, thereby generating the appropriate SQL. - */ - public function walkConditionalTerm( - AST\ConditionalTerm|AST\ConditionalPrimary|AST\ConditionalFactor $condTerm, - ): string { - // Phase 2 AST optimization: Skip processing of ConditionalTerm - // if only one ConditionalFactor is defined - if (! ($condTerm instanceof AST\ConditionalTerm)) { - return $this->walkConditionalFactor($condTerm); - } - - return implode(' AND ', array_map($this->walkConditionalFactor(...), $condTerm->conditionalFactors)); - } - - /** - * Walks down a ConditionalFactor AST node, thereby generating the appropriate SQL. - */ - public function walkConditionalFactor( - AST\ConditionalFactor|AST\ConditionalPrimary $factor, - ): string { - // Phase 2 AST optimization: Skip processing of ConditionalFactor - // if only one ConditionalPrimary is defined - return ! ($factor instanceof AST\ConditionalFactor) - ? $this->walkConditionalPrimary($factor) - : ($factor->not ? 'NOT ' : '') . $this->walkConditionalPrimary($factor->conditionalPrimary); - } - - /** - * Walks down a ConditionalPrimary AST node, thereby generating the appropriate SQL. - */ - public function walkConditionalPrimary(AST\ConditionalPrimary $primary): string - { - if ($primary->isSimpleConditionalExpression()) { - return $primary->simpleConditionalExpression->dispatch($this); - } - - if ($primary->isConditionalExpression()) { - $condExpr = $primary->conditionalExpression; - - return '(' . $this->walkConditionalExpression($condExpr) . ')'; - } - - throw new LogicException('Unexpected state of ConditionalPrimary node.'); - } - - /** - * Walks down an ExistsExpression AST node, thereby generating the appropriate SQL. - */ - public function walkExistsExpression(AST\ExistsExpression $existsExpr): string - { - $sql = $existsExpr->not ? 'NOT ' : ''; - - $sql .= 'EXISTS (' . $this->walkSubselect($existsExpr->subselect) . ')'; - - return $sql; - } - - /** - * Walks down a CollectionMemberExpression AST node, thereby generating the appropriate SQL. - */ - public function walkCollectionMemberExpression(AST\CollectionMemberExpression $collMemberExpr): string - { - $sql = $collMemberExpr->not ? 'NOT ' : ''; - $sql .= 'EXISTS (SELECT 1 FROM '; - - $entityExpr = $collMemberExpr->entityExpression; - $collPathExpr = $collMemberExpr->collectionValuedPathExpression; - assert($collPathExpr->field !== null); - - $fieldName = $collPathExpr->field; - $dqlAlias = $collPathExpr->identificationVariable; - - $class = $this->getMetadataForDqlAlias($dqlAlias); - - switch (true) { - // InputParameter - case $entityExpr instanceof AST\InputParameter: - $dqlParamKey = $entityExpr->name; - $entitySql = '?'; - break; - - // SingleValuedAssociationPathExpression | IdentificationVariable - case $entityExpr instanceof AST\PathExpression: - $entitySql = $this->walkPathExpression($entityExpr); - break; - - default: - throw new BadMethodCallException('Not implemented'); - } - - $assoc = $class->associationMappings[$fieldName]; - - if ($assoc->isOneToMany()) { - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - $targetTableAlias = $this->getSQLTableAlias($targetClass->getTableName()); - $sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); - - $sql .= $this->quoteStrategy->getTableName($targetClass, $this->platform) . ' ' . $targetTableAlias . ' WHERE '; - - $owningAssoc = $targetClass->associationMappings[$assoc->mappedBy]; - assert($owningAssoc->isManyToOne()); - $sqlParts = []; - - foreach ($owningAssoc->targetToSourceKeyColumns as $targetColumn => $sourceColumn) { - $targetColumn = $this->quoteStrategy->getColumnName($class->fieldNames[$targetColumn], $class, $this->platform); - - $sqlParts[] = $sourceTableAlias . '.' . $targetColumn . ' = ' . $targetTableAlias . '.' . $sourceColumn; - } - - foreach ($this->quoteStrategy->getIdentifierColumnNames($targetClass, $this->platform) as $targetColumnName) { - if (isset($dqlParamKey)) { - $this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++); - } - - $sqlParts[] = $targetTableAlias . '.' . $targetColumnName . ' = ' . $entitySql; - } - - $sql .= implode(' AND ', $sqlParts); - } else { // many-to-many - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - - $owningAssoc = $this->em->getMetadataFactory()->getOwningSide($assoc); - assert($owningAssoc->isManyToManyOwningSide()); - $joinTable = $owningAssoc->joinTable; - - // SQL table aliases - $joinTableAlias = $this->getSQLTableAlias($joinTable->name); - $sourceTableAlias = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); - - $sql .= $this->quoteStrategy->getJoinTableName($owningAssoc, $targetClass, $this->platform) . ' ' . $joinTableAlias . ' WHERE '; - - $joinColumns = $assoc->isOwningSide() ? $joinTable->joinColumns : $joinTable->inverseJoinColumns; - $sqlParts = []; - - foreach ($joinColumns as $joinColumn) { - $targetColumn = $this->quoteStrategy->getColumnName($class->fieldNames[$joinColumn->referencedColumnName], $class, $this->platform); - - $sqlParts[] = $joinTableAlias . '.' . $joinColumn->name . ' = ' . $sourceTableAlias . '.' . $targetColumn; - } - - $joinColumns = $assoc->isOwningSide() ? $joinTable->inverseJoinColumns : $joinTable->joinColumns; - - foreach ($joinColumns as $joinColumn) { - if (isset($dqlParamKey)) { - $this->parserResult->addParameterMapping($dqlParamKey, $this->sqlParamIndex++); - } - - $sqlParts[] = $joinTableAlias . '.' . $joinColumn->name . ' IN (' . $entitySql . ')'; - } - - $sql .= implode(' AND ', $sqlParts); - } - - return $sql . ')'; - } - - /** - * Walks down an EmptyCollectionComparisonExpression AST node, thereby generating the appropriate SQL. - */ - public function walkEmptyCollectionComparisonExpression(AST\EmptyCollectionComparisonExpression $emptyCollCompExpr): string - { - $sizeFunc = new AST\Functions\SizeFunction('size'); - $sizeFunc->collectionPathExpression = $emptyCollCompExpr->expression; - - return $sizeFunc->getSql($this) . ($emptyCollCompExpr->not ? ' > 0' : ' = 0'); - } - - /** - * Walks down a NullComparisonExpression AST node, thereby generating the appropriate SQL. - */ - public function walkNullComparisonExpression(AST\NullComparisonExpression $nullCompExpr): string - { - $expression = $nullCompExpr->expression; - $comparison = ' IS' . ($nullCompExpr->not ? ' NOT' : '') . ' NULL'; - - // Handle ResultVariable - if (is_string($expression) && isset($this->queryComponents[$expression]['resultVariable'])) { - return $this->walkResultVariable($expression) . $comparison; - } - - // Handle InputParameter mapping inclusion to ParserResult - if ($expression instanceof AST\InputParameter) { - return $this->walkInputParameter($expression) . $comparison; - } - - assert(! is_string($expression)); - - return $expression->dispatch($this) . $comparison; - } - - /** - * Walks down an InExpression AST node, thereby generating the appropriate SQL. - */ - public function walkInListExpression(AST\InListExpression $inExpr): string - { - return $this->walkArithmeticExpression($inExpr->expression) - . ($inExpr->not ? ' NOT' : '') . ' IN (' - . implode(', ', array_map($this->walkInParameter(...), $inExpr->literals)) - . ')'; - } - - /** - * Walks down an InExpression AST node, thereby generating the appropriate SQL. - */ - public function walkInSubselectExpression(AST\InSubselectExpression $inExpr): string - { - return $this->walkArithmeticExpression($inExpr->expression) - . ($inExpr->not ? ' NOT' : '') . ' IN (' - . $this->walkSubselect($inExpr->subselect) - . ')'; - } - - /** - * Walks down an InstanceOfExpression AST node, thereby generating the appropriate SQL. - * - * @throws QueryException - */ - public function walkInstanceOfExpression(AST\InstanceOfExpression $instanceOfExpr): string - { - $sql = ''; - - $dqlAlias = $instanceOfExpr->identificationVariable; - $discrClass = $class = $this->getMetadataForDqlAlias($dqlAlias); - - if ($class->discriminatorColumn) { - $discrClass = $this->em->getClassMetadata($class->rootEntityName); - } - - if ($this->useSqlTableAliases) { - $sql .= $this->getSQLTableAlias($discrClass->getTableName(), $dqlAlias) . '.'; - } - - $sql .= $class->getDiscriminatorColumn()->name . ($instanceOfExpr->not ? ' NOT IN ' : ' IN '); - $sql .= $this->getChildDiscriminatorsFromClassMetadata($discrClass, $instanceOfExpr); - - return $sql; - } - - public function walkInParameter(mixed $inParam): string - { - return $inParam instanceof AST\InputParameter - ? $this->walkInputParameter($inParam) - : $this->walkArithmeticExpression($inParam); - } - - /** - * Walks down a literal that represents an AST node, thereby generating the appropriate SQL. - */ - public function walkLiteral(AST\Literal $literal): string - { - return match ($literal->type) { - AST\Literal::STRING => $this->conn->quote($literal->value), - AST\Literal::BOOLEAN => (string) $this->conn->getDatabasePlatform()->convertBooleans(strtolower($literal->value) === 'true'), - AST\Literal::NUMERIC => (string) $literal->value, - default => throw QueryException::invalidLiteral($literal), - }; - } - - /** - * Walks down a BetweenExpression AST node, thereby generating the appropriate SQL. - */ - public function walkBetweenExpression(AST\BetweenExpression $betweenExpr): string - { - $sql = $this->walkArithmeticExpression($betweenExpr->expression); - - if ($betweenExpr->not) { - $sql .= ' NOT'; - } - - $sql .= ' BETWEEN ' . $this->walkArithmeticExpression($betweenExpr->leftBetweenExpression) - . ' AND ' . $this->walkArithmeticExpression($betweenExpr->rightBetweenExpression); - - return $sql; - } - - /** - * Walks down a LikeExpression AST node, thereby generating the appropriate SQL. - */ - public function walkLikeExpression(AST\LikeExpression $likeExpr): string - { - $stringExpr = $likeExpr->stringExpression; - if (is_string($stringExpr)) { - if (! isset($this->queryComponents[$stringExpr]['resultVariable'])) { - throw new LogicException(sprintf('No result variable found for string expression "%s".', $stringExpr)); - } - - $leftExpr = $this->walkResultVariable($stringExpr); - } else { - $leftExpr = $stringExpr->dispatch($this); - } - - $sql = $leftExpr . ($likeExpr->not ? ' NOT' : '') . ' LIKE '; - - if ($likeExpr->stringPattern instanceof AST\InputParameter) { - $sql .= $this->walkInputParameter($likeExpr->stringPattern); - } elseif ($likeExpr->stringPattern instanceof AST\Functions\FunctionNode) { - $sql .= $this->walkFunction($likeExpr->stringPattern); - } elseif ($likeExpr->stringPattern instanceof AST\PathExpression) { - $sql .= $this->walkPathExpression($likeExpr->stringPattern); - } else { - $sql .= $this->walkLiteral($likeExpr->stringPattern); - } - - if ($likeExpr->escapeChar) { - $sql .= ' ESCAPE ' . $this->walkLiteral($likeExpr->escapeChar); - } - - return $sql; - } - - /** - * Walks down a StateFieldPathExpression AST node, thereby generating the appropriate SQL. - */ - public function walkStateFieldPathExpression(AST\PathExpression $stateFieldPathExpression): string - { - return $this->walkPathExpression($stateFieldPathExpression); - } - - /** - * Walks down a ComparisonExpression AST node, thereby generating the appropriate SQL. - */ - public function walkComparisonExpression(AST\ComparisonExpression $compExpr): string - { - $leftExpr = $compExpr->leftExpression; - $rightExpr = $compExpr->rightExpression; - $sql = ''; - - $sql .= $leftExpr instanceof AST\Node - ? $leftExpr->dispatch($this) - : (is_numeric($leftExpr) ? $leftExpr : $this->conn->quote($leftExpr)); - - $sql .= ' ' . $compExpr->operator . ' '; - - $sql .= $rightExpr instanceof AST\Node - ? $rightExpr->dispatch($this) - : (is_numeric($rightExpr) ? $rightExpr : $this->conn->quote($rightExpr)); - - return $sql; - } - - /** - * Walks down an InputParameter AST node, thereby generating the appropriate SQL. - */ - public function walkInputParameter(AST\InputParameter $inputParam): string - { - $this->parserResult->addParameterMapping($inputParam->name, $this->sqlParamIndex++); - - $parameter = $this->query->getParameter($inputParam->name); - - if ($parameter) { - $type = $parameter->getType(); - if (is_string($type) && Type::hasType($type)) { - return Type::getType($type)->convertToDatabaseValueSQL('?', $this->platform); - } - } - - return '?'; - } - - /** - * Walks down an ArithmeticExpression AST node, thereby generating the appropriate SQL. - */ - public function walkArithmeticExpression(AST\ArithmeticExpression $arithmeticExpr): string - { - return $arithmeticExpr->isSimpleArithmeticExpression() - ? $this->walkSimpleArithmeticExpression($arithmeticExpr->simpleArithmeticExpression) - : '(' . $this->walkSubselect($arithmeticExpr->subselect) . ')'; - } - - /** - * Walks down an SimpleArithmeticExpression AST node, thereby generating the appropriate SQL. - */ - public function walkSimpleArithmeticExpression(AST\Node|string $simpleArithmeticExpr): string - { - if (! ($simpleArithmeticExpr instanceof AST\SimpleArithmeticExpression)) { - return $this->walkArithmeticTerm($simpleArithmeticExpr); - } - - return implode(' ', array_map($this->walkArithmeticTerm(...), $simpleArithmeticExpr->arithmeticTerms)); - } - - /** - * Walks down an ArithmeticTerm AST node, thereby generating the appropriate SQL. - */ - public function walkArithmeticTerm(AST\Node|string $term): string - { - if (is_string($term)) { - return isset($this->queryComponents[$term]) - ? $this->walkResultVariable($this->queryComponents[$term]['token']->value) - : $term; - } - - // Phase 2 AST optimization: Skip processing of ArithmeticTerm - // if only one ArithmeticFactor is defined - if (! ($term instanceof AST\ArithmeticTerm)) { - return $this->walkArithmeticFactor($term); - } - - return implode(' ', array_map($this->walkArithmeticFactor(...), $term->arithmeticFactors)); - } - - /** - * Walks down an ArithmeticFactor that represents an AST node, thereby generating the appropriate SQL. - */ - public function walkArithmeticFactor(AST\Node|string $factor): string - { - if (is_string($factor)) { - return isset($this->queryComponents[$factor]) - ? $this->walkResultVariable($this->queryComponents[$factor]['token']->value) - : $factor; - } - - // Phase 2 AST optimization: Skip processing of ArithmeticFactor - // if only one ArithmeticPrimary is defined - if (! ($factor instanceof AST\ArithmeticFactor)) { - return $this->walkArithmeticPrimary($factor); - } - - $sign = $factor->isNegativeSigned() ? '-' : ($factor->isPositiveSigned() ? '+' : ''); - - return $sign . $this->walkArithmeticPrimary($factor->arithmeticPrimary); - } - - /** - * Walks down an ArithmeticPrimary that represents an AST node, thereby generating the appropriate SQL. - */ - public function walkArithmeticPrimary(AST\Node|string $primary): string - { - if ($primary instanceof AST\SimpleArithmeticExpression) { - return '(' . $this->walkSimpleArithmeticExpression($primary) . ')'; - } - - if ($primary instanceof AST\Node) { - return $primary->dispatch($this); - } - - return $this->walkEntityIdentificationVariable($primary); - } - - /** - * Walks down a StringPrimary that represents an AST node, thereby generating the appropriate SQL. - */ - public function walkStringPrimary(AST\Node|string $stringPrimary): string - { - return is_string($stringPrimary) - ? $this->conn->quote($stringPrimary) - : $stringPrimary->dispatch($this); - } - - /** - * Walks down a ResultVariable that represents an AST node, thereby generating the appropriate SQL. - */ - public function walkResultVariable(string $resultVariable): string - { - if (! isset($this->scalarResultAliasMap[$resultVariable])) { - throw new InvalidArgumentException(sprintf('Unknown result variable: %s', $resultVariable)); - } - - $resultAlias = $this->scalarResultAliasMap[$resultVariable]; - - if (is_array($resultAlias)) { - return implode(', ', $resultAlias); - } - - return $resultAlias; - } - - /** - * @return string The list in parentheses of valid child discriminators from the given class - * - * @throws QueryException - */ - private function getChildDiscriminatorsFromClassMetadata( - ClassMetadata $rootClass, - AST\InstanceOfExpression $instanceOfExpr, - ): string { - $sqlParameterList = []; - $discriminators = []; - foreach ($instanceOfExpr->value as $parameter) { - if ($parameter instanceof AST\InputParameter) { - $this->rsm->discriminatorParameters[$parameter->name] = $parameter->name; - $sqlParameterList[] = $this->walkInParameter($parameter); - continue; - } - - $metadata = $this->em->getClassMetadata($parameter); - - if ($metadata->getName() !== $rootClass->name && ! $metadata->getReflectionClass()->isSubclassOf($rootClass->name)) { - throw QueryException::instanceOfUnrelatedClass($parameter, $rootClass->name); - } - - $discriminators += HierarchyDiscriminatorResolver::resolveDiscriminatorsForClass($metadata, $this->em); - } - - foreach (array_keys($discriminators) as $discriminatorValue) { - $sqlParameterList[] = $rootClass->getDiscriminatorColumn()->type === 'integer' && is_int($discriminatorValue) - ? $discriminatorValue - : $this->conn->quote((string) $discriminatorValue); - } - - return '(' . implode(', ', $sqlParameterList) . ')'; - } -} diff --git a/vendor/doctrine/orm/src/Query/TokenType.php b/vendor/doctrine/orm/src/Query/TokenType.php deleted file mode 100644 index e745e4a..0000000 --- a/vendor/doctrine/orm/src/Query/TokenType.php +++ /dev/null @@ -1,91 +0,0 @@ -= 100 - case T_FULLY_QUALIFIED_NAME = 101; - case T_IDENTIFIER = 102; - - // All keyword tokens should be >= 200 - case T_ALL = 200; - case T_AND = 201; - case T_ANY = 202; - case T_AS = 203; - case T_ASC = 204; - case T_AVG = 205; - case T_BETWEEN = 206; - case T_BOTH = 207; - case T_BY = 208; - case T_CASE = 209; - case T_COALESCE = 210; - case T_COUNT = 211; - case T_DELETE = 212; - case T_DESC = 213; - case T_DISTINCT = 214; - case T_ELSE = 215; - case T_EMPTY = 216; - case T_END = 217; - case T_ESCAPE = 218; - case T_EXISTS = 219; - case T_FALSE = 220; - case T_FROM = 221; - case T_GROUP = 222; - case T_HAVING = 223; - case T_HIDDEN = 224; - case T_IN = 225; - case T_INDEX = 226; - case T_INNER = 227; - case T_INSTANCE = 228; - case T_IS = 229; - case T_JOIN = 230; - case T_LEADING = 231; - case T_LEFT = 232; - case T_LIKE = 233; - case T_MAX = 234; - case T_MEMBER = 235; - case T_MIN = 236; - case T_NEW = 237; - case T_NOT = 238; - case T_NULL = 239; - case T_NULLIF = 240; - case T_OF = 241; - case T_OR = 242; - case T_ORDER = 243; - case T_OUTER = 244; - case T_SELECT = 246; - case T_SET = 247; - case T_SOME = 248; - case T_SUM = 249; - case T_THEN = 250; - case T_TRAILING = 251; - case T_TRUE = 252; - case T_UPDATE = 253; - case T_WHEN = 254; - case T_WHERE = 255; - case T_WITH = 256; -} diff --git a/vendor/doctrine/orm/src/Query/TreeWalker.php b/vendor/doctrine/orm/src/Query/TreeWalker.php deleted file mode 100644 index 6c21577..0000000 --- a/vendor/doctrine/orm/src/Query/TreeWalker.php +++ /dev/null @@ -1,44 +0,0 @@ - $queryComponents The query components (symbol table). - */ - public function __construct(AbstractQuery $query, ParserResult $parserResult, array $queryComponents); - - /** - * Returns internal queryComponents array. - * - * @psalm-return array - */ - public function getQueryComponents(): array; - - /** - * Walks down a SelectStatement AST node. - */ - public function walkSelectStatement(AST\SelectStatement $selectStatement): void; - - /** - * Walks down an UpdateStatement AST node. - */ - public function walkUpdateStatement(AST\UpdateStatement $updateStatement): void; - - /** - * Walks down a DeleteStatement AST node. - */ - public function walkDeleteStatement(AST\DeleteStatement $deleteStatement): void; -} diff --git a/vendor/doctrine/orm/src/Query/TreeWalkerAdapter.php b/vendor/doctrine/orm/src/Query/TreeWalkerAdapter.php deleted file mode 100644 index a7948db..0000000 --- a/vendor/doctrine/orm/src/Query/TreeWalkerAdapter.php +++ /dev/null @@ -1,90 +0,0 @@ -queryComponents; - } - - public function walkSelectStatement(AST\SelectStatement $selectStatement): void - { - } - - public function walkUpdateStatement(AST\UpdateStatement $updateStatement): void - { - } - - public function walkDeleteStatement(AST\DeleteStatement $deleteStatement): void - { - } - - /** - * Sets or overrides a query component for a given dql alias. - * - * @psalm-param QueryComponent $queryComponent - */ - protected function setQueryComponent(string $dqlAlias, array $queryComponent): void - { - $requiredKeys = ['metadata', 'parent', 'relation', 'map', 'nestingLevel', 'token']; - - if (array_diff($requiredKeys, array_keys($queryComponent))) { - throw QueryException::invalidQueryComponent($dqlAlias); - } - - $this->queryComponents[$dqlAlias] = $queryComponent; - } - - /** - * Retrieves the Query Instance responsible for the current walkers execution. - */ - protected function _getQuery(): AbstractQuery - { - return $this->query; - } - - /** - * Retrieves the ParserResult. - */ - protected function _getParserResult(): ParserResult - { - return $this->parserResult; - } - - protected function getMetadataForDqlAlias(string $dqlAlias): ClassMetadata - { - return $this->queryComponents[$dqlAlias]['metadata'] - ?? throw new LogicException(sprintf('No metadata for DQL alias: %s', $dqlAlias)); - } -} diff --git a/vendor/doctrine/orm/src/Query/TreeWalkerChain.php b/vendor/doctrine/orm/src/Query/TreeWalkerChain.php deleted file mode 100644 index 7bb3051..0000000 --- a/vendor/doctrine/orm/src/Query/TreeWalkerChain.php +++ /dev/null @@ -1,88 +0,0 @@ -> - */ - private array $walkers = []; - - /** - * {@inheritDoc} - */ - public function __construct( - private readonly AbstractQuery $query, - private readonly ParserResult $parserResult, - private array $queryComponents, - ) { - } - - /** - * Returns the internal queryComponents array. - * - * {@inheritDoc} - */ - public function getQueryComponents(): array - { - return $this->queryComponents; - } - - /** - * Adds a tree walker to the chain. - * - * @param string $walkerClass The class of the walker to instantiate. - * @psalm-param class-string $walkerClass - */ - public function addTreeWalker(string $walkerClass): void - { - $this->walkers[] = $walkerClass; - } - - public function walkSelectStatement(AST\SelectStatement $selectStatement): void - { - foreach ($this->getWalkers() as $walker) { - $walker->walkSelectStatement($selectStatement); - - $this->queryComponents = $walker->getQueryComponents(); - } - } - - public function walkUpdateStatement(AST\UpdateStatement $updateStatement): void - { - foreach ($this->getWalkers() as $walker) { - $walker->walkUpdateStatement($updateStatement); - } - } - - public function walkDeleteStatement(AST\DeleteStatement $deleteStatement): void - { - foreach ($this->getWalkers() as $walker) { - $walker->walkDeleteStatement($deleteStatement); - } - } - - /** @psalm-return Generator */ - private function getWalkers(): Generator - { - foreach ($this->walkers as $walkerClass) { - yield new $walkerClass($this->query, $this->parserResult, $this->queryComponents); - } - } -} diff --git a/vendor/doctrine/orm/src/QueryBuilder.php b/vendor/doctrine/orm/src/QueryBuilder.php deleted file mode 100644 index a6a39a9..0000000 --- a/vendor/doctrine/orm/src/QueryBuilder.php +++ /dev/null @@ -1,1375 +0,0 @@ - - */ - private array $dqlParts = [ - 'distinct' => false, - 'select' => [], - 'from' => [], - 'join' => [], - 'set' => [], - 'where' => null, - 'groupBy' => [], - 'having' => null, - 'orderBy' => [], - ]; - - private QueryType $type = QueryType::Select; - - /** - * The complete DQL string for this query. - */ - private string|null $dql = null; - - /** - * The query parameters. - * - * @psalm-var ArrayCollection - */ - private ArrayCollection $parameters; - - /** - * The index of the first result to retrieve. - */ - private int $firstResult = 0; - - /** - * The maximum number of results to retrieve. - */ - private int|null $maxResults = null; - - /** - * Keeps root entity alias names for join entities. - * - * @psalm-var array - */ - private array $joinRootAliases = []; - - /** - * Whether to use second level cache, if available. - */ - protected bool $cacheable = false; - - /** - * Second level cache region name. - */ - protected string|null $cacheRegion = null; - - /** - * Second level query cache mode. - * - * @psalm-var Cache::MODE_*|null - */ - protected int|null $cacheMode = null; - - protected int $lifetime = 0; - - /** - * Initializes a new QueryBuilder that uses the given EntityManager. - * - * @param EntityManagerInterface $em The EntityManager to use. - */ - public function __construct( - private readonly EntityManagerInterface $em, - ) { - $this->parameters = new ArrayCollection(); - } - - /** - * Gets an ExpressionBuilder used for object-oriented construction of query expressions. - * This producer method is intended for convenient inline usage. Example: - * - * - * $qb = $em->createQueryBuilder(); - * $qb - * ->select('u') - * ->from('User', 'u') - * ->where($qb->expr()->eq('u.id', 1)); - * - * - * For more complex expression construction, consider storing the expression - * builder object in a local variable. - */ - public function expr(): Expr - { - return $this->em->getExpressionBuilder(); - } - - /** - * Enable/disable second level query (result) caching for this query. - * - * @return $this - */ - public function setCacheable(bool $cacheable): static - { - $this->cacheable = $cacheable; - - return $this; - } - - /** - * Are the query results enabled for second level cache? - */ - public function isCacheable(): bool - { - return $this->cacheable; - } - - /** @return $this */ - public function setCacheRegion(string $cacheRegion): static - { - $this->cacheRegion = $cacheRegion; - - return $this; - } - - /** - * Obtain the name of the second level query cache region in which query results will be stored - * - * @return string|null The cache region name; NULL indicates the default region. - */ - public function getCacheRegion(): string|null - { - return $this->cacheRegion; - } - - public function getLifetime(): int - { - return $this->lifetime; - } - - /** - * Sets the life-time for this query into second level cache. - * - * @return $this - */ - public function setLifetime(int $lifetime): static - { - $this->lifetime = $lifetime; - - return $this; - } - - /** @psalm-return Cache::MODE_*|null */ - public function getCacheMode(): int|null - { - return $this->cacheMode; - } - - /** - * @psalm-param Cache::MODE_* $cacheMode - * - * @return $this - */ - public function setCacheMode(int $cacheMode): static - { - $this->cacheMode = $cacheMode; - - return $this; - } - - /** - * Gets the associated EntityManager for this query builder. - */ - public function getEntityManager(): EntityManagerInterface - { - return $this->em; - } - - /** - * Gets the complete DQL string formed by the current specifications of this QueryBuilder. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u'); - * echo $qb->getDql(); // SELECT u FROM User u - * - */ - public function getDQL(): string - { - return $this->dql ??= match ($this->type) { - QueryType::Select => $this->getDQLForSelect(), - QueryType::Delete => $this->getDQLForDelete(), - QueryType::Update => $this->getDQLForUpdate(), - }; - } - - /** - * Constructs a Query instance from the current specifications of the builder. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u'); - * $q = $qb->getQuery(); - * $results = $q->execute(); - * - */ - public function getQuery(): Query - { - $parameters = clone $this->parameters; - $query = $this->em->createQuery($this->getDQL()) - ->setParameters($parameters) - ->setFirstResult($this->firstResult) - ->setMaxResults($this->maxResults); - - if ($this->lifetime) { - $query->setLifetime($this->lifetime); - } - - if ($this->cacheMode) { - $query->setCacheMode($this->cacheMode); - } - - if ($this->cacheable) { - $query->setCacheable($this->cacheable); - } - - if ($this->cacheRegion) { - $query->setCacheRegion($this->cacheRegion); - } - - return $query; - } - - /** - * Finds the root entity alias of the joined entity. - * - * @param string $alias The alias of the new join entity - * @param string $parentAlias The parent entity alias of the join relationship - */ - private function findRootAlias(string $alias, string $parentAlias): string - { - if (in_array($parentAlias, $this->getRootAliases(), true)) { - $rootAlias = $parentAlias; - } elseif (isset($this->joinRootAliases[$parentAlias])) { - $rootAlias = $this->joinRootAliases[$parentAlias]; - } else { - // Should never happen with correct joining order. Might be - // thoughtful to throw exception instead. - $rootAlias = $this->getRootAlias(); - } - - $this->joinRootAliases[$alias] = $rootAlias; - - return $rootAlias; - } - - /** - * Gets the FIRST root alias of the query. This is the first entity alias involved - * in the construction of the query. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u'); - * - * echo $qb->getRootAlias(); // u - * - * - * @deprecated Please use $qb->getRootAliases() instead. - * - * @throws RuntimeException - */ - public function getRootAlias(): string - { - $aliases = $this->getRootAliases(); - - if (! isset($aliases[0])) { - throw new RuntimeException('No alias was set before invoking getRootAlias().'); - } - - return $aliases[0]; - } - - /** - * Gets the root aliases of the query. This is the entity aliases involved - * in the construction of the query. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u'); - * - * $qb->getRootAliases(); // array('u') - * - * - * @return string[] - * @psalm-return list - */ - public function getRootAliases(): array - { - $aliases = []; - - foreach ($this->dqlParts['from'] as &$fromClause) { - if (is_string($fromClause)) { - $spacePos = strrpos($fromClause, ' '); - - /** @psalm-var class-string $from */ - $from = substr($fromClause, 0, $spacePos); - $alias = substr($fromClause, $spacePos + 1); - - $fromClause = new Query\Expr\From($from, $alias); - } - - $aliases[] = $fromClause->getAlias(); - } - - return $aliases; - } - - /** - * Gets all the aliases that have been used in the query. - * Including all select root aliases and join aliases - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->join('u.articles','a'); - * - * $qb->getAllAliases(); // array('u','a') - * - * - * @return string[] - * @psalm-return list - */ - public function getAllAliases(): array - { - return [...$this->getRootAliases(), ...array_keys($this->joinRootAliases)]; - } - - /** - * Gets the root entities of the query. This is the entity classes involved - * in the construction of the query. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u'); - * - * $qb->getRootEntities(); // array('User') - * - * - * @return string[] - * @psalm-return list - */ - public function getRootEntities(): array - { - $entities = []; - - foreach ($this->dqlParts['from'] as &$fromClause) { - if (is_string($fromClause)) { - $spacePos = strrpos($fromClause, ' '); - - /** @psalm-var class-string $from */ - $from = substr($fromClause, 0, $spacePos); - $alias = substr($fromClause, $spacePos + 1); - - $fromClause = new Query\Expr\From($from, $alias); - } - - $entities[] = $fromClause->getFrom(); - } - - return $entities; - } - - /** - * Sets a query parameter for the query being constructed. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->where('u.id = :user_id') - * ->setParameter('user_id', 1); - * - * - * @param string|int $key The parameter position or name. - * @param ParameterType|ArrayParameterType|string|int|null $type ParameterType::*, ArrayParameterType::* or \Doctrine\DBAL\Types\Type::* constant - * - * @return $this - */ - public function setParameter(string|int $key, mixed $value, ParameterType|ArrayParameterType|string|int|null $type = null): static - { - $existingParameter = $this->getParameter($key); - - if ($existingParameter !== null) { - $existingParameter->setValue($value, $type); - - return $this; - } - - $this->parameters->add(new Parameter($key, $value, $type)); - - return $this; - } - - /** - * Sets a collection of query parameters for the query being constructed. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->where('u.id = :user_id1 OR u.id = :user_id2') - * ->setParameters(new ArrayCollection(array( - * new Parameter('user_id1', 1), - * new Parameter('user_id2', 2) - * ))); - * - * - * @psalm-param ArrayCollection $parameters - * - * @return $this - */ - public function setParameters(ArrayCollection $parameters): static - { - $this->parameters = $parameters; - - return $this; - } - - /** - * Gets all defined query parameters for the query being constructed. - * - * @psalm-return ArrayCollection - */ - public function getParameters(): ArrayCollection - { - return $this->parameters; - } - - /** - * Gets a (previously set) query parameter of the query being constructed. - */ - public function getParameter(string|int $key): Parameter|null - { - $key = Parameter::normalizeName($key); - - $filteredParameters = $this->parameters->filter( - static fn (Parameter $parameter): bool => $key === $parameter->getName() - ); - - return ! $filteredParameters->isEmpty() ? $filteredParameters->first() : null; - } - - /** - * Sets the position of the first result to retrieve (the "offset"). - * - * @return $this - */ - public function setFirstResult(int|null $firstResult): static - { - $this->firstResult = (int) $firstResult; - - return $this; - } - - /** - * Gets the position of the first result the query object was set to retrieve (the "offset"). - */ - public function getFirstResult(): int - { - return $this->firstResult; - } - - /** - * Sets the maximum number of results to retrieve (the "limit"). - * - * @return $this - */ - public function setMaxResults(int|null $maxResults): static - { - $this->maxResults = $maxResults; - - return $this; - } - - /** - * Gets the maximum number of results the query object was set to retrieve (the "limit"). - * Returns NULL if {@link setMaxResults} was not applied to this query builder. - */ - public function getMaxResults(): int|null - { - return $this->maxResults; - } - - /** - * Either appends to or replaces a single, generic query part. - * - * The available parts are: 'select', 'from', 'join', 'set', 'where', - * 'groupBy', 'having' and 'orderBy'. - * - * @psalm-param string|object|list|array{join: array} $dqlPart - * - * @return $this - */ - public function add(string $dqlPartName, string|object|array $dqlPart, bool $append = false): static - { - if ($append && ($dqlPartName === 'where' || $dqlPartName === 'having')) { - throw new InvalidArgumentException( - "Using \$append = true does not have an effect with 'where' or 'having' " . - 'parts. See QueryBuilder#andWhere() for an example for correct usage.', - ); - } - - $isMultiple = is_array($this->dqlParts[$dqlPartName]) - && ! ($dqlPartName === 'join' && ! $append); - - // Allow adding any part retrieved from self::getDQLParts(). - if (is_array($dqlPart) && $dqlPartName !== 'join') { - $dqlPart = reset($dqlPart); - } - - // This is introduced for backwards compatibility reasons. - // TODO: Remove for 3.0 - if ($dqlPartName === 'join') { - $newDqlPart = []; - - foreach ($dqlPart as $k => $v) { - $k = is_numeric($k) ? $this->getRootAlias() : $k; - - $newDqlPart[$k] = $v; - } - - $dqlPart = $newDqlPart; - } - - if ($append && $isMultiple) { - if (is_array($dqlPart)) { - $key = key($dqlPart); - - $this->dqlParts[$dqlPartName][$key][] = $dqlPart[$key]; - } else { - $this->dqlParts[$dqlPartName][] = $dqlPart; - } - } else { - $this->dqlParts[$dqlPartName] = $isMultiple ? [$dqlPart] : $dqlPart; - } - - $this->dql = null; - - return $this; - } - - /** - * Specifies an item that is to be returned in the query result. - * Replaces any previously specified selections, if any. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u', 'p') - * ->from('User', 'u') - * ->leftJoin('u.Phonenumbers', 'p'); - * - * - * @return $this - */ - public function select(mixed ...$select): static - { - self::validateVariadicParameter($select); - - $this->type = QueryType::Select; - - if ($select === []) { - return $this; - } - - return $this->add('select', new Expr\Select($select), false); - } - - /** - * Adds a DISTINCT flag to this query. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->distinct() - * ->from('User', 'u'); - * - * - * @return $this - */ - public function distinct(bool $flag = true): static - { - if ($this->dqlParts['distinct'] !== $flag) { - $this->dqlParts['distinct'] = $flag; - $this->dql = null; - } - - return $this; - } - - /** - * Adds an item that is to be returned in the query result. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->addSelect('p') - * ->from('User', 'u') - * ->leftJoin('u.Phonenumbers', 'p'); - * - * - * @return $this - */ - public function addSelect(mixed ...$select): static - { - self::validateVariadicParameter($select); - - $this->type = QueryType::Select; - - if ($select === []) { - return $this; - } - - return $this->add('select', new Expr\Select($select), true); - } - - /** - * Turns the query being built into a bulk delete query that ranges over - * a certain entity type. - * - * - * $qb = $em->createQueryBuilder() - * ->delete('User', 'u') - * ->where('u.id = :user_id') - * ->setParameter('user_id', 1); - * - * - * @param class-string|null $delete The class/type whose instances are subject to the deletion. - * @param string|null $alias The class/type alias used in the constructed query. - * - * @return $this - */ - public function delete(string|null $delete = null, string|null $alias = null): static - { - $this->type = QueryType::Delete; - - if (! $delete) { - return $this; - } - - if (! $alias) { - throw new InvalidArgumentException(sprintf( - '%s(): The alias for entity %s must not be omitted.', - __METHOD__, - $delete, - )); - } - - return $this->add('from', new Expr\From($delete, $alias)); - } - - /** - * Turns the query being built into a bulk update query that ranges over - * a certain entity type. - * - * - * $qb = $em->createQueryBuilder() - * ->update('User', 'u') - * ->set('u.password', '?1') - * ->where('u.id = ?2'); - * - * - * @param class-string|null $update The class/type whose instances are subject to the update. - * @param string|null $alias The class/type alias used in the constructed query. - * - * @return $this - */ - public function update(string|null $update = null, string|null $alias = null): static - { - $this->type = QueryType::Update; - - if (! $update) { - return $this; - } - - if (! $alias) { - throw new InvalidArgumentException(sprintf( - '%s(): The alias for entity %s must not be omitted.', - __METHOD__, - $update, - )); - } - - return $this->add('from', new Expr\From($update, $alias)); - } - - /** - * Creates and adds a query root corresponding to the entity identified by the given alias, - * forming a cartesian product with any existing query roots. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u'); - * - * - * @param class-string $from The class name. - * @param string $alias The alias of the class. - * @param string|null $indexBy The index for the from. - * - * @return $this - */ - public function from(string $from, string $alias, string|null $indexBy = null): static - { - return $this->add('from', new Expr\From($from, $alias, $indexBy), true); - } - - /** - * Updates a query root corresponding to an entity setting its index by. This method is intended to be used with - * EntityRepository->createQueryBuilder(), which creates the initial FROM clause and do not allow you to update it - * setting an index by. - * - * - * $qb = $userRepository->createQueryBuilder('u') - * ->indexBy('u', 'u.id'); - * - * // Is equivalent to... - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u', 'u.id'); - * - * - * @return $this - * - * @throws Query\QueryException - */ - public function indexBy(string $alias, string $indexBy): static - { - $rootAliases = $this->getRootAliases(); - - if (! in_array($alias, $rootAliases, true)) { - throw new Query\QueryException( - sprintf('Specified root alias %s must be set before invoking indexBy().', $alias), - ); - } - - foreach ($this->dqlParts['from'] as &$fromClause) { - assert($fromClause instanceof Expr\From); - if ($fromClause->getAlias() !== $alias) { - continue; - } - - $fromClause = new Expr\From($fromClause->getFrom(), $fromClause->getAlias(), $indexBy); - } - - return $this; - } - - /** - * Creates and adds a join over an entity association to the query. - * - * The entities in the joined association will be fetched as part of the query - * result if the alias used for the joined association is placed in the select - * expressions. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->join('u.Phonenumbers', 'p', Expr\Join::WITH, 'p.is_primary = 1'); - * - * - * @psalm-param Expr\Join::ON|Expr\Join::WITH|null $conditionType - * - * @return $this - */ - public function join( - string $join, - string $alias, - string|null $conditionType = null, - string|Expr\Composite|Expr\Comparison|Expr\Func|null $condition = null, - string|null $indexBy = null, - ): static { - return $this->innerJoin($join, $alias, $conditionType, $condition, $indexBy); - } - - /** - * Creates and adds a join over an entity association to the query. - * - * The entities in the joined association will be fetched as part of the query - * result if the alias used for the joined association is placed in the select - * expressions. - * - * [php] - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->innerJoin('u.Phonenumbers', 'p', Expr\Join::WITH, 'p.is_primary = 1'); - * - * @psalm-param Expr\Join::ON|Expr\Join::WITH|null $conditionType - * - * @return $this - */ - public function innerJoin( - string $join, - string $alias, - string|null $conditionType = null, - string|Expr\Composite|Expr\Comparison|Expr\Func|null $condition = null, - string|null $indexBy = null, - ): static { - $parentAlias = substr($join, 0, (int) strpos($join, '.')); - - $rootAlias = $this->findRootAlias($alias, $parentAlias); - - $join = new Expr\Join( - Expr\Join::INNER_JOIN, - $join, - $alias, - $conditionType, - $condition, - $indexBy, - ); - - return $this->add('join', [$rootAlias => $join], true); - } - - /** - * Creates and adds a left join over an entity association to the query. - * - * The entities in the joined association will be fetched as part of the query - * result if the alias used for the joined association is placed in the select - * expressions. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->leftJoin('u.Phonenumbers', 'p', Expr\Join::WITH, 'p.is_primary = 1'); - * - * - * @psalm-param Expr\Join::ON|Expr\Join::WITH|null $conditionType - * - * @return $this - */ - public function leftJoin( - string $join, - string $alias, - string|null $conditionType = null, - string|Expr\Composite|Expr\Comparison|Expr\Func|null $condition = null, - string|null $indexBy = null, - ): static { - $parentAlias = substr($join, 0, (int) strpos($join, '.')); - - $rootAlias = $this->findRootAlias($alias, $parentAlias); - - $join = new Expr\Join( - Expr\Join::LEFT_JOIN, - $join, - $alias, - $conditionType, - $condition, - $indexBy, - ); - - return $this->add('join', [$rootAlias => $join], true); - } - - /** - * Sets a new value for a field in a bulk update query. - * - * - * $qb = $em->createQueryBuilder() - * ->update('User', 'u') - * ->set('u.password', '?1') - * ->where('u.id = ?2'); - * - * - * @return $this - */ - public function set(string $key, mixed $value): static - { - return $this->add('set', new Expr\Comparison($key, Expr\Comparison::EQ, $value), true); - } - - /** - * Specifies one or more restrictions to the query result. - * Replaces any previously specified restrictions, if any. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->where('u.id = ?'); - * - * // You can optionally programmatically build and/or expressions - * $qb = $em->createQueryBuilder(); - * - * $or = $qb->expr()->orX(); - * $or->add($qb->expr()->eq('u.id', 1)); - * $or->add($qb->expr()->eq('u.id', 2)); - * - * $qb->update('User', 'u') - * ->set('u.password', '?') - * ->where($or); - * - * - * @return $this - */ - public function where(mixed ...$predicates): static - { - self::validateVariadicParameter($predicates); - - if (! (count($predicates) === 1 && $predicates[0] instanceof Expr\Composite)) { - $predicates = new Expr\Andx($predicates); - } - - return $this->add('where', $predicates); - } - - /** - * Adds one or more restrictions to the query results, forming a logical - * conjunction with any previously specified restrictions. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->where('u.username LIKE ?') - * ->andWhere('u.is_active = 1'); - * - * - * @see where() - * - * @return $this - */ - public function andWhere(mixed ...$where): static - { - self::validateVariadicParameter($where); - - $dql = $this->getDQLPart('where'); - - if ($dql instanceof Expr\Andx) { - $dql->addMultiple($where); - } else { - array_unshift($where, $dql); - $dql = new Expr\Andx($where); - } - - return $this->add('where', $dql); - } - - /** - * Adds one or more restrictions to the query results, forming a logical - * disjunction with any previously specified restrictions. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->where('u.id = 1') - * ->orWhere('u.id = 2'); - * - * - * @see where() - * - * @return $this - */ - public function orWhere(mixed ...$where): static - { - self::validateVariadicParameter($where); - - $dql = $this->getDQLPart('where'); - - if ($dql instanceof Expr\Orx) { - $dql->addMultiple($where); - } else { - array_unshift($where, $dql); - $dql = new Expr\Orx($where); - } - - return $this->add('where', $dql); - } - - /** - * Specifies a grouping over the results of the query. - * Replaces any previously specified groupings, if any. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->groupBy('u.id'); - * - * - * @return $this - */ - public function groupBy(string ...$groupBy): static - { - self::validateVariadicParameter($groupBy); - - return $this->add('groupBy', new Expr\GroupBy($groupBy)); - } - - /** - * Adds a grouping expression to the query. - * - * - * $qb = $em->createQueryBuilder() - * ->select('u') - * ->from('User', 'u') - * ->groupBy('u.lastLogin') - * ->addGroupBy('u.createdAt'); - * - * - * @return $this - */ - public function addGroupBy(string ...$groupBy): static - { - self::validateVariadicParameter($groupBy); - - return $this->add('groupBy', new Expr\GroupBy($groupBy), true); - } - - /** - * Specifies a restriction over the groups of the query. - * Replaces any previous having restrictions, if any. - * - * @return $this - */ - public function having(mixed ...$having): static - { - self::validateVariadicParameter($having); - - if (! (count($having) === 1 && ($having[0] instanceof Expr\Andx || $having[0] instanceof Expr\Orx))) { - $having = new Expr\Andx($having); - } - - return $this->add('having', $having); - } - - /** - * Adds a restriction over the groups of the query, forming a logical - * conjunction with any existing having restrictions. - * - * @return $this - */ - public function andHaving(mixed ...$having): static - { - self::validateVariadicParameter($having); - - $dql = $this->getDQLPart('having'); - - if ($dql instanceof Expr\Andx) { - $dql->addMultiple($having); - } else { - array_unshift($having, $dql); - $dql = new Expr\Andx($having); - } - - return $this->add('having', $dql); - } - - /** - * Adds a restriction over the groups of the query, forming a logical - * disjunction with any existing having restrictions. - * - * @return $this - */ - public function orHaving(mixed ...$having): static - { - self::validateVariadicParameter($having); - - $dql = $this->getDQLPart('having'); - - if ($dql instanceof Expr\Orx) { - $dql->addMultiple($having); - } else { - array_unshift($having, $dql); - $dql = new Expr\Orx($having); - } - - return $this->add('having', $dql); - } - - /** - * Specifies an ordering for the query results. - * Replaces any previously specified orderings, if any. - * - * @return $this - */ - public function orderBy(string|Expr\OrderBy $sort, string|null $order = null): static - { - $orderBy = $sort instanceof Expr\OrderBy ? $sort : new Expr\OrderBy($sort, $order); - - return $this->add('orderBy', $orderBy); - } - - /** - * Adds an ordering to the query results. - * - * @return $this - */ - public function addOrderBy(string|Expr\OrderBy $sort, string|null $order = null): static - { - $orderBy = $sort instanceof Expr\OrderBy ? $sort : new Expr\OrderBy($sort, $order); - - return $this->add('orderBy', $orderBy, true); - } - - /** - * Adds criteria to the query. - * - * Adds where expressions with AND operator. - * Adds orderings. - * Overrides firstResult and maxResults if they're set. - * - * @return $this - * - * @throws Query\QueryException - */ - public function addCriteria(Criteria $criteria): static - { - $allAliases = $this->getAllAliases(); - if (! isset($allAliases[0])) { - throw new Query\QueryException('No aliases are set before invoking addCriteria().'); - } - - $visitor = new QueryExpressionVisitor($this->getAllAliases()); - - $whereExpression = $criteria->getWhereExpression(); - if ($whereExpression) { - $this->andWhere($visitor->dispatch($whereExpression)); - foreach ($visitor->getParameters() as $parameter) { - $this->parameters->add($parameter); - } - } - - foreach ($criteria->orderings() as $sort => $order) { - $hasValidAlias = false; - foreach ($allAliases as $alias) { - if (str_starts_with($sort . '.', $alias . '.')) { - $hasValidAlias = true; - break; - } - } - - if (! $hasValidAlias) { - $sort = $allAliases[0] . '.' . $sort; - } - - $this->addOrderBy($sort, $order->value); - } - - // Overwrite limits only if they was set in criteria - $firstResult = $criteria->getFirstResult(); - if ($firstResult > 0) { - $this->setFirstResult($firstResult); - } - - $maxResults = $criteria->getMaxResults(); - if ($maxResults !== null) { - $this->setMaxResults($maxResults); - } - - return $this; - } - - /** - * Gets a query part by its name. - */ - public function getDQLPart(string $queryPartName): mixed - { - return $this->dqlParts[$queryPartName]; - } - - /** - * Gets all query parts. - * - * @psalm-return array $dqlParts - */ - public function getDQLParts(): array - { - return $this->dqlParts; - } - - private function getDQLForDelete(): string - { - return 'DELETE' - . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) - . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) - . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); - } - - private function getDQLForUpdate(): string - { - return 'UPDATE' - . $this->getReducedDQLQueryPart('from', ['pre' => ' ', 'separator' => ', ']) - . $this->getReducedDQLQueryPart('set', ['pre' => ' SET ', 'separator' => ', ']) - . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) - . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); - } - - private function getDQLForSelect(): string - { - $dql = 'SELECT' - . ($this->dqlParts['distinct'] === true ? ' DISTINCT' : '') - . $this->getReducedDQLQueryPart('select', ['pre' => ' ', 'separator' => ', ']); - - $fromParts = $this->getDQLPart('from'); - $joinParts = $this->getDQLPart('join'); - $fromClauses = []; - - // Loop through all FROM clauses - if (! empty($fromParts)) { - $dql .= ' FROM '; - - foreach ($fromParts as $from) { - $fromClause = (string) $from; - - if ($from instanceof Expr\From && isset($joinParts[$from->getAlias()])) { - foreach ($joinParts[$from->getAlias()] as $join) { - $fromClause .= ' ' . ((string) $join); - } - } - - $fromClauses[] = $fromClause; - } - } - - $dql .= implode(', ', $fromClauses) - . $this->getReducedDQLQueryPart('where', ['pre' => ' WHERE ']) - . $this->getReducedDQLQueryPart('groupBy', ['pre' => ' GROUP BY ', 'separator' => ', ']) - . $this->getReducedDQLQueryPart('having', ['pre' => ' HAVING ']) - . $this->getReducedDQLQueryPart('orderBy', ['pre' => ' ORDER BY ', 'separator' => ', ']); - - return $dql; - } - - /** @psalm-param array $options */ - private function getReducedDQLQueryPart(string $queryPartName, array $options = []): string - { - $queryPart = $this->getDQLPart($queryPartName); - - if (empty($queryPart)) { - return $options['empty'] ?? ''; - } - - return ($options['pre'] ?? '') - . (is_array($queryPart) ? implode($options['separator'], $queryPart) : $queryPart) - . ($options['post'] ?? ''); - } - - /** - * Resets DQL parts. - * - * @param string[]|null $parts - * @psalm-param list|null $parts - * - * @return $this - */ - public function resetDQLParts(array|null $parts = null): static - { - if ($parts === null) { - $parts = array_keys($this->dqlParts); - } - - foreach ($parts as $part) { - $this->resetDQLPart($part); - } - - return $this; - } - - /** - * Resets single DQL part. - * - * @return $this - */ - public function resetDQLPart(string $part): static - { - $this->dqlParts[$part] = is_array($this->dqlParts[$part]) ? [] : null; - $this->dql = null; - - return $this; - } - - /** - * Gets a string representation of this QueryBuilder which corresponds to - * the final DQL query being constructed. - */ - public function __toString(): string - { - return $this->getDQL(); - } - - /** - * Deep clones all expression objects in the DQL parts. - * - * @return void - */ - public function __clone() - { - foreach ($this->dqlParts as $part => $elements) { - if (is_array($this->dqlParts[$part])) { - foreach ($this->dqlParts[$part] as $idx => $element) { - if (is_object($element)) { - $this->dqlParts[$part][$idx] = clone $element; - } - } - } elseif (is_object($elements)) { - $this->dqlParts[$part] = clone $elements; - } - } - - $parameters = []; - - foreach ($this->parameters as $parameter) { - $parameters[] = clone $parameter; - } - - $this->parameters = new ArrayCollection($parameters); - } -} diff --git a/vendor/doctrine/orm/src/Repository/DefaultRepositoryFactory.php b/vendor/doctrine/orm/src/Repository/DefaultRepositoryFactory.php deleted file mode 100644 index 5c408fb..0000000 --- a/vendor/doctrine/orm/src/Repository/DefaultRepositoryFactory.php +++ /dev/null @@ -1,49 +0,0 @@ - - */ - private array $repositoryList = []; - - public function getRepository(EntityManagerInterface $entityManager, string $entityName): EntityRepository - { - $repositoryHash = $entityManager->getClassMetadata($entityName)->getName() . spl_object_id($entityManager); - - return $this->repositoryList[$repositoryHash] ??= $this->createRepository($entityManager, $entityName); - } - - /** - * Create a new repository instance for an entity class. - * - * @param EntityManagerInterface $entityManager The EntityManager instance. - * @param string $entityName The name of the entity. - */ - private function createRepository( - EntityManagerInterface $entityManager, - string $entityName, - ): EntityRepository { - $metadata = $entityManager->getClassMetadata($entityName); - $repositoryClassName = $metadata->customRepositoryClassName - ?: $entityManager->getConfiguration()->getDefaultRepositoryClassName(); - - return new $repositoryClassName($entityManager, $metadata); - } -} diff --git a/vendor/doctrine/orm/src/Repository/Exception/InvalidFindByCall.php b/vendor/doctrine/orm/src/Repository/Exception/InvalidFindByCall.php deleted file mode 100644 index c5dd015..0000000 --- a/vendor/doctrine/orm/src/Repository/Exception/InvalidFindByCall.php +++ /dev/null @@ -1,21 +0,0 @@ - $entityName The name of the entity. - * - * @return EntityRepository - * - * @template T of object - */ - public function getRepository(EntityManagerInterface $entityManager, string $entityName): EntityRepository; -} diff --git a/vendor/doctrine/orm/src/Tools/AttachEntityListenersListener.php b/vendor/doctrine/orm/src/Tools/AttachEntityListenersListener.php deleted file mode 100644 index 9203cfe..0000000 --- a/vendor/doctrine/orm/src/Tools/AttachEntityListenersListener.php +++ /dev/null @@ -1,69 +0,0 @@ -> - */ - private array $entityListeners = []; - - /** - * Adds an entity listener for a specific entity. - * - * @param class-string $entityClass The entity to attach the listener. - * @param class-string $listenerClass The listener class. - * @param Events::*|null $eventName The entity lifecycle event. - * @param non-falsy-string|null $listenerCallback The listener callback method or NULL to use $eventName. - */ - public function addEntityListener( - string $entityClass, - string $listenerClass, - string|null $eventName = null, - string|null $listenerCallback = null, - ): void { - $this->entityListeners[ltrim($entityClass, '\\')][] = [ - 'event' => $eventName, - 'class' => $listenerClass, - 'method' => $listenerCallback ?? $eventName, - ]; - } - - /** - * Processes event and attach the entity listener. - */ - public function loadClassMetadata(LoadClassMetadataEventArgs $event): void - { - $metadata = $event->getClassMetadata(); - - if (! isset($this->entityListeners[$metadata->name])) { - return; - } - - foreach ($this->entityListeners[$metadata->name] as $listener) { - if ($listener['event'] === null) { - EntityListenerBuilder::bindEntityListener($metadata, $listener['class']); - } else { - assert($listener['method'] !== null); - $metadata->addEntityListener($listener['event'], $listener['class'], $listener['method']); - } - } - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/AbstractEntityManagerCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/AbstractEntityManagerCommand.php deleted file mode 100644 index 370f4fb..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/AbstractEntityManagerCommand.php +++ /dev/null @@ -1,25 +0,0 @@ -getOption('em') === null - ? $this->entityManagerProvider->getDefaultManager() - : $this->entityManagerProvider->getManager($input->getOption('em')); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/CollectionRegionCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/CollectionRegionCommand.php deleted file mode 100644 index b4c6efa..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/CollectionRegionCommand.php +++ /dev/null @@ -1,119 +0,0 @@ -setName('orm:clear-cache:region:collection') - ->setDescription('Clear a second-level cache collection region') - ->addArgument('owner-class', InputArgument::OPTIONAL, 'The owner entity name.') - ->addArgument('association', InputArgument::OPTIONAL, 'The association collection name.') - ->addArgument('owner-id', InputArgument::OPTIONAL, 'The owner identifier.') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('all', null, InputOption::VALUE_NONE, 'If defined, all entity regions will be deleted/invalidated.') - ->addOption('flush', null, InputOption::VALUE_NONE, 'If defined, all cache entries will be flushed.') - ->setHelp(<<<'EOT' -The %command.name% command is meant to clear a second-level cache collection regions for an associated Entity Manager. -It is possible to delete/invalidate all collection region, a specific collection region or flushes the cache provider. - -The execution type differ on how you execute the command. -If you want to invalidate all entries for an collection region this command would do the work: - -%command.name% 'Entities\MyEntity' 'collectionName' - -To invalidate a specific entry you should use : - -%command.name% 'Entities\MyEntity' 'collectionName' 1 - -If you want to invalidate all entries for the all collection regions: - -%command.name% --all - -Alternatively, if you want to flush the configured cache provider for an collection region use this command: - -%command.name% 'Entities\MyEntity' 'collectionName' --flush - -Finally, be aware that if --flush option is passed, -not all cache providers are able to flush entries, because of a limitation of its execution nature. -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $em = $this->getEntityManager($input); - $ownerClass = $input->getArgument('owner-class'); - $assoc = $input->getArgument('association'); - $ownerId = $input->getArgument('owner-id'); - $cache = $em->getCache(); - - if (! $cache instanceof Cache) { - throw new InvalidArgumentException('No second-level cache is configured on the given EntityManager.'); - } - - if (( ! $ownerClass || ! $assoc) && ! $input->getOption('all')) { - throw new InvalidArgumentException('Missing arguments "--owner-class" "--association"'); - } - - if ($input->getOption('flush')) { - $cache->getCollectionCacheRegion($ownerClass, $assoc) - ->evictAll(); - - $ui->comment( - sprintf( - 'Flushing cache provider configured for "%s#%s"', - $ownerClass, - $assoc, - ), - ); - - return 0; - } - - if ($input->getOption('all')) { - $ui->comment('Clearing all second-level cache collection regions'); - - $cache->evictEntityRegions(); - - return 0; - } - - if ($ownerId) { - $ui->comment( - sprintf( - 'Clearing second-level cache entry for collection "%s#%s" owner entity identified by "%s"', - $ownerClass, - $assoc, - $ownerId, - ), - ); - $cache->evictCollection($ownerClass, $assoc, $ownerId); - - return 0; - } - - $ui->comment(sprintf('Clearing second-level cache for collection "%s#%s"', $ownerClass, $assoc)); - $cache->evictCollectionRegion($ownerClass, $assoc); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/EntityRegionCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/EntityRegionCommand.php deleted file mode 100644 index c5f2d65..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/EntityRegionCommand.php +++ /dev/null @@ -1,110 +0,0 @@ -setName('orm:clear-cache:region:entity') - ->setDescription('Clear a second-level cache entity region') - ->addArgument('entity-class', InputArgument::OPTIONAL, 'The entity name.') - ->addArgument('entity-id', InputArgument::OPTIONAL, 'The entity identifier.') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('all', null, InputOption::VALUE_NONE, 'If defined, all entity regions will be deleted/invalidated.') - ->addOption('flush', null, InputOption::VALUE_NONE, 'If defined, all cache entries will be flushed.') - ->setHelp(<<<'EOT' -The %command.name% command is meant to clear a second-level cache entity region for an associated Entity Manager. -It is possible to delete/invalidate all entity region, a specific entity region or flushes the cache provider. - -The execution type differ on how you execute the command. -If you want to invalidate all entries for an entity region this command would do the work: - -%command.name% 'Entities\MyEntity' - -To invalidate a specific entry you should use : - -%command.name% 'Entities\MyEntity' 1 - -If you want to invalidate all entries for the all entity regions: - -%command.name% --all - -Alternatively, if you want to flush the configured cache provider for an entity region use this command: - -%command.name% 'Entities\MyEntity' --flush - -Finally, be aware that if --flush option is passed, -not all cache providers are able to flush entries, because of a limitation of its execution nature. -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $em = $this->getEntityManager($input); - $entityClass = $input->getArgument('entity-class'); - $entityId = $input->getArgument('entity-id'); - $cache = $em->getCache(); - - if (! $cache instanceof Cache) { - throw new InvalidArgumentException('No second-level cache is configured on the given EntityManager.'); - } - - if (! $entityClass && ! $input->getOption('all')) { - throw new InvalidArgumentException('Invalid argument "--entity-class"'); - } - - if ($input->getOption('flush')) { - $cache->getEntityCacheRegion($entityClass) - ->evictAll(); - - $ui->comment(sprintf('Flushing cache provider configured for entity named "%s"', $entityClass)); - - return 0; - } - - if ($input->getOption('all')) { - $ui->comment('Clearing all second-level cache entity regions'); - - $cache->evictEntityRegions(); - - return 0; - } - - if ($entityId) { - $ui->comment( - sprintf( - 'Clearing second-level cache entry for entity "%s" identified by "%s"', - $entityClass, - $entityId, - ), - ); - $cache->evictEntity($entityClass, $entityId); - - return 0; - } - - $ui->comment(sprintf('Clearing second-level cache for entity "%s"', $entityClass)); - $cache->evictEntityRegion($entityClass); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/MetadataCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/MetadataCommand.php deleted file mode 100644 index 147795b..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/MetadataCommand.php +++ /dev/null @@ -1,52 +0,0 @@ -setName('orm:clear-cache:metadata') - ->setDescription('Clear all metadata cache of the various cache drivers') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('flush', null, InputOption::VALUE_NONE, 'If defined, cache entries will be flushed instead of deleted/invalidated.') - ->setHelp(<<<'EOT' -The %command.name% command is meant to clear the metadata cache of associated Entity Manager. -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $em = $this->getEntityManager($input); - $cacheDriver = $em->getConfiguration()->getMetadataCache(); - - if (! $cacheDriver) { - throw new InvalidArgumentException('No Metadata cache driver is configured on given EntityManager.'); - } - - $ui->comment('Clearing all Metadata cache entries'); - - $result = $cacheDriver->clear(); - $message = $result ? 'Successfully deleted cache entries.' : 'No cache entries were deleted.'; - - $ui->success($message); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/QueryCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/QueryCommand.php deleted file mode 100644 index 83edd7a..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/QueryCommand.php +++ /dev/null @@ -1,54 +0,0 @@ -setName('orm:clear-cache:query') - ->setDescription('Clear all query cache of the various cache drivers') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->setHelp('The %command.name% command is meant to clear the query cache of associated Entity Manager.'); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $em = $this->getEntityManager($input); - $cache = $em->getConfiguration()->getQueryCache(); - - if (! $cache) { - throw new InvalidArgumentException('No Query cache driver is configured on given EntityManager.'); - } - - if ($cache instanceof ApcuAdapter) { - throw new LogicException('Cannot clear APCu Cache from Console, it\'s shared in the Webserver memory and not accessible from the CLI.'); - } - - $ui->comment('Clearing all Query cache entries'); - - $message = $cache->clear() ? 'Successfully deleted cache entries.' : 'No cache entries were deleted.'; - - $ui->success($message); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/QueryRegionCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/QueryRegionCommand.php deleted file mode 100644 index e80fb90..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/QueryRegionCommand.php +++ /dev/null @@ -1,101 +0,0 @@ -setName('orm:clear-cache:region:query') - ->setDescription('Clear a second-level cache query region') - ->addArgument('region-name', InputArgument::OPTIONAL, 'The query region to clear.') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('all', null, InputOption::VALUE_NONE, 'If defined, all query regions will be deleted/invalidated.') - ->addOption('flush', null, InputOption::VALUE_NONE, 'If defined, all cache entries will be flushed.') - ->setHelp(<<<'EOT' -The %command.name% command is meant to clear a second-level cache query region for an associated Entity Manager. -It is possible to delete/invalidate all query region, a specific query region or flushes the cache provider. - -The execution type differ on how you execute the command. -If you want to invalidate all entries for the default query region this command would do the work: - -%command.name% - -To invalidate entries for a specific query region you should use : - -%command.name% my_region_name - -If you want to invalidate all entries for the all query region: - -%command.name% --all - -Alternatively, if you want to flush the configured cache provider use this command: - -%command.name% my_region_name --flush - -Finally, be aware that if --flush option is passed, -not all cache providers are able to flush entries, because of a limitation of its execution nature. -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $em = $this->getEntityManager($input); - $name = $input->getArgument('region-name'); - $cache = $em->getCache(); - - if ($name === null) { - $name = Cache::DEFAULT_QUERY_REGION_NAME; - } - - if (! $cache instanceof Cache) { - throw new InvalidArgumentException('No second-level cache is configured on the given EntityManager.'); - } - - if ($input->getOption('flush')) { - $cache->getQueryCache($name) - ->getRegion() - ->evictAll(); - - $ui->comment( - sprintf( - 'Flushing cache provider configured for second-level cache query region named "%s"', - $name, - ), - ); - - return 0; - } - - if ($input->getOption('all')) { - $ui->comment('Clearing all second-level cache query regions'); - - $cache->evictQueryRegions(); - - return 0; - } - - $ui->comment(sprintf('Clearing second-level cache query region named "%s"', $name)); - $cache->evictQueryRegion($name); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/ResultCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/ResultCommand.php deleted file mode 100644 index 4f84e0b..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/ClearCache/ResultCommand.php +++ /dev/null @@ -1,65 +0,0 @@ -setName('orm:clear-cache:result') - ->setDescription('Clear all result cache of the various cache drivers') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('flush', null, InputOption::VALUE_NONE, 'If defined, cache entries will be flushed instead of deleted/invalidated.') - ->setHelp(<<<'EOT' -The %command.name% command is meant to clear the result cache of associated Entity Manager. -It is possible to invalidate all cache entries at once - called delete -, or flushes the cache provider -instance completely. - -The execution type differ on how you execute the command. -If you want to invalidate the entries (and not delete from cache instance), this command would do the work: - -%command.name% - -Alternatively, if you want to flush the cache provider using this command: - -%command.name% --flush - -Finally, be aware that if --flush option is passed, not all cache providers are able to flush entries, -because of a limitation of its execution nature. -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $em = $this->getEntityManager($input); - $cache = $em->getConfiguration()->getResultCache(); - - if (! $cache) { - throw new InvalidArgumentException('No Result cache driver is configured on given EntityManager.'); - } - - $ui->comment('Clearing all Result cache entries'); - - $message = $cache->clear() ? 'Successfully deleted cache entries.' : 'No cache entries were deleted.'; - - $ui->success($message); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/GenerateProxiesCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/GenerateProxiesCommand.php deleted file mode 100644 index 5a407de..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/GenerateProxiesCommand.php +++ /dev/null @@ -1,96 +0,0 @@ -setName('orm:generate-proxies') - ->setAliases(['orm:generate:proxies']) - ->setDescription('Generates proxy classes for entity classes') - ->addArgument('dest-path', InputArgument::OPTIONAL, 'The path to generate your proxy classes. If none is provided, it will attempt to grab from configuration.') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('filter', null, InputOption::VALUE_REQUIRED | InputOption::VALUE_IS_ARRAY, 'A string pattern used to match entities that should be processed.') - ->setHelp('Generates proxy classes for entity classes.'); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $em = $this->getEntityManager($input); - - $metadatas = $em->getMetadataFactory()->getAllMetadata(); - $metadatas = MetadataFilter::filter($metadatas, $input->getOption('filter')); - - // Process destination directory - $destPath = $input->getArgument('dest-path'); - if ($destPath === null) { - $destPath = $em->getConfiguration()->getProxyDir(); - - if ($destPath === null) { - throw new InvalidArgumentException('Proxy directory cannot be null'); - } - } - - if (! is_dir($destPath)) { - mkdir($destPath, 0775, true); - } - - $destPath = realpath($destPath); - - if (! file_exists($destPath)) { - throw new InvalidArgumentException( - sprintf("Proxies destination directory '%s' does not exist.", $em->getConfiguration()->getProxyDir()), - ); - } - - if (! is_writable($destPath)) { - throw new InvalidArgumentException( - sprintf("Proxies destination directory '%s' does not have write permissions.", $destPath), - ); - } - - if (empty($metadatas)) { - $ui->success('No Metadata Classes to process.'); - - return 0; - } - - foreach ($metadatas as $metadata) { - $ui->text(sprintf('Processing entity "%s"', $metadata->name)); - } - - // Generating Proxies - $em->getProxyFactory()->generateProxyClasses($metadatas, $destPath); - - // Outputting information message - $ui->newLine(); - $ui->text(sprintf('Proxy classes generated to "%s"', $destPath)); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/InfoCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/InfoCommand.php deleted file mode 100644 index deebb58..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/InfoCommand.php +++ /dev/null @@ -1,80 +0,0 @@ -setName('orm:info') - ->setDescription('Show basic information about all mapped entities') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->setHelp(<<<'EOT' -The %command.name% shows basic information about which -entities exist and possibly if their mapping information contains errors or -not. -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $entityManager = $this->getEntityManager($input); - - $entityClassNames = $entityManager->getConfiguration() - ->getMetadataDriverImpl() - ->getAllClassNames(); - - if (! $entityClassNames) { - $ui->caution( - [ - 'You do not have any mapped Doctrine ORM entities according to the current configuration.', - 'If you have entities or mapping files you should check your mapping configuration for errors.', - ], - ); - - return 1; - } - - $ui->text(sprintf('Found %d mapped entities:', count($entityClassNames))); - $ui->newLine(); - - $failure = false; - - foreach ($entityClassNames as $entityClassName) { - try { - $entityManager->getClassMetadata($entityClassName); - $ui->text(sprintf('[OK] %s', $entityClassName)); - } catch (MappingException $e) { - $ui->text( - [ - sprintf('[FAIL] %s', $entityClassName), - sprintf('%s', $e->getMessage()), - '', - ], - ); - - $failure = true; - } - } - - return $failure ? 1 : 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/MappingDescribeCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/MappingDescribeCommand.php deleted file mode 100644 index 41a177d..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/MappingDescribeCommand.php +++ /dev/null @@ -1,279 +0,0 @@ -setName('orm:mapping:describe') - ->addArgument('entityName', InputArgument::REQUIRED, 'Full or partial name of entity') - ->setDescription('Display information about mapped objects') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->setHelp(<<<'EOT' -The %command.full_name% command describes the metadata for the given full or partial entity class name. - - %command.full_name% My\Namespace\Entity\MyEntity - -Or: - - %command.full_name% MyEntity -EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $entityManager = $this->getEntityManager($input); - - $this->displayEntity($input->getArgument('entityName'), $entityManager, $ui); - - return 0; - } - - /** - * Display all the mapping information for a single Entity. - * - * @param string $entityName Full or partial entity class name - */ - private function displayEntity( - string $entityName, - EntityManagerInterface $entityManager, - SymfonyStyle $ui, - ): void { - $metadata = $this->getClassMetadata($entityName, $entityManager); - - $ui->table( - ['Field', 'Value'], - array_merge( - [ - $this->formatField('Name', $metadata->name), - $this->formatField('Root entity name', $metadata->rootEntityName), - $this->formatField('Custom generator definition', $metadata->customGeneratorDefinition), - $this->formatField('Custom repository class', $metadata->customRepositoryClassName), - $this->formatField('Mapped super class?', $metadata->isMappedSuperclass), - $this->formatField('Embedded class?', $metadata->isEmbeddedClass), - $this->formatField('Parent classes', $metadata->parentClasses), - $this->formatField('Sub classes', $metadata->subClasses), - $this->formatField('Embedded classes', $metadata->subClasses), - $this->formatField('Identifier', $metadata->identifier), - $this->formatField('Inheritance type', $metadata->inheritanceType), - $this->formatField('Discriminator column', $metadata->discriminatorColumn), - $this->formatField('Discriminator value', $metadata->discriminatorValue), - $this->formatField('Discriminator map', $metadata->discriminatorMap), - $this->formatField('Generator type', $metadata->generatorType), - $this->formatField('Table', $metadata->table), - $this->formatField('Composite identifier?', $metadata->isIdentifierComposite), - $this->formatField('Foreign identifier?', $metadata->containsForeignIdentifier), - $this->formatField('Enum identifier?', $metadata->containsEnumIdentifier), - $this->formatField('Sequence generator definition', $metadata->sequenceGeneratorDefinition), - $this->formatField('Change tracking policy', $metadata->changeTrackingPolicy), - $this->formatField('Versioned?', $metadata->isVersioned), - $this->formatField('Version field', $metadata->versionField), - $this->formatField('Read only?', $metadata->isReadOnly), - - $this->formatEntityListeners($metadata->entityListeners), - ], - [$this->formatField('Association mappings:', '')], - $this->formatMappings($metadata->associationMappings), - [$this->formatField('Field mappings:', '')], - $this->formatMappings($metadata->fieldMappings), - ), - ); - } - - /** - * Return all mapped entity class names - * - * @return string[] - * @psalm-return class-string[] - */ - private function getMappedEntities(EntityManagerInterface $entityManager): array - { - $entityClassNames = $entityManager->getConfiguration() - ->getMetadataDriverImpl() - ->getAllClassNames(); - - if (! $entityClassNames) { - throw new InvalidArgumentException( - 'You do not have any mapped Doctrine ORM entities according to the current configuration. ' . - 'If you have entities or mapping files you should check your mapping configuration for errors.', - ); - } - - return $entityClassNames; - } - - /** - * Return the class metadata for the given entity - * name - * - * @param string $entityName Full or partial entity name - */ - private function getClassMetadata( - string $entityName, - EntityManagerInterface $entityManager, - ): ClassMetadata { - try { - return $entityManager->getClassMetadata($entityName); - } catch (MappingException) { - } - - $matches = array_filter( - $this->getMappedEntities($entityManager), - static fn ($mappedEntity) => preg_match('{' . preg_quote($entityName) . '}', $mappedEntity) - ); - - if (! $matches) { - throw new InvalidArgumentException(sprintf( - 'Could not find any mapped Entity classes matching "%s"', - $entityName, - )); - } - - if (count($matches) > 1) { - throw new InvalidArgumentException(sprintf( - 'Entity name "%s" is ambiguous, possible matches: "%s"', - $entityName, - implode(', ', $matches), - )); - } - - return $entityManager->getClassMetadata(current($matches)); - } - - /** - * Format the given value for console output - */ - private function formatValue(mixed $value): string - { - if ($value === '') { - return ''; - } - - if ($value === null) { - return 'Null'; - } - - if (is_bool($value)) { - return '' . ($value ? 'True' : 'False') . ''; - } - - if (empty($value)) { - return 'Empty'; - } - - if (is_array($value)) { - return json_encode( - $value, - JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT | JSON_THROW_ON_ERROR, - ); - } - - if (is_object($value)) { - return sprintf('<%s>', get_debug_type($value)); - } - - if (is_scalar($value)) { - return (string) $value; - } - - throw new InvalidArgumentException(sprintf('Do not know how to format value "%s"', print_r($value, true))); - } - - /** - * Add the given label and value to the two column table output - * - * @param string $label Label for the value - * @param mixed $value A Value to show - * - * @return string[] - * @psalm-return array{0: string, 1: string} - */ - private function formatField(string $label, mixed $value): array - { - if ($value === null) { - $value = 'None'; - } - - return [sprintf('%s', $label), $this->formatValue($value)]; - } - - /** - * Format the association mappings - * - * @psalm-param array $propertyMappings - * - * @return string[][] - * @psalm-return list - */ - private function formatMappings(array $propertyMappings): array - { - $output = []; - - foreach ($propertyMappings as $propertyName => $mapping) { - $output[] = $this->formatField(sprintf(' %s', $propertyName), ''); - - foreach ((array) $mapping as $field => $value) { - $output[] = $this->formatField(sprintf(' %s', $field), $this->formatValue($value)); - } - } - - return $output; - } - - /** - * Format the entity listeners - * - * @psalm-param list $entityListeners - * - * @return string[] - * @psalm-return array{0: string, 1: string} - */ - private function formatEntityListeners(array $entityListeners): array - { - return $this->formatField('Entity listeners', array_map('get_class', $entityListeners)); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/RunDqlCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/RunDqlCommand.php deleted file mode 100644 index 252151e..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/RunDqlCommand.php +++ /dev/null @@ -1,118 +0,0 @@ -setName('orm:run-dql') - ->setDescription('Executes arbitrary DQL directly from the command line') - ->addArgument('dql', InputArgument::REQUIRED, 'The DQL to execute.') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('hydrate', null, InputOption::VALUE_REQUIRED, 'Hydration mode of result set. Should be either: object, array, scalar or single-scalar.', 'object') - ->addOption('first-result', null, InputOption::VALUE_REQUIRED, 'The first result in the result set.') - ->addOption('max-result', null, InputOption::VALUE_REQUIRED, 'The maximum number of results in the result set.') - ->addOption('depth', null, InputOption::VALUE_REQUIRED, 'Dumping depth of Entity graph.', 7) - ->addOption('show-sql', null, InputOption::VALUE_NONE, 'Dump generated SQL instead of executing query') - ->setHelp(<<<'EOT' - The %command.name% command executes the given DQL query and - outputs the results: - - php %command.full_name% "SELECT u FROM App\Entity\User u" - - You can also optionally specify some additional options like what type of - hydration to use when executing the query: - - php %command.full_name% "SELECT u FROM App\Entity\User u" --hydrate=array - - Additionally you can specify the first result and maximum amount of results to - show: - - php %command.full_name% "SELECT u FROM App\Entity\User u" --first-result=0 --max-result=30 - EOT); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = new SymfonyStyle($input, $output); - - $em = $this->getEntityManager($input); - - $dql = $input->getArgument('dql'); - if ($dql === null) { - throw new RuntimeException("Argument 'dql' is required in order to execute this command correctly."); - } - - $depth = $input->getOption('depth'); - - if (! is_numeric($depth)) { - throw new LogicException("Option 'depth' must contain an integer value"); - } - - $hydrationModeName = (string) $input->getOption('hydrate'); - $hydrationMode = 'Doctrine\ORM\Query::HYDRATE_' . strtoupper(str_replace('-', '_', $hydrationModeName)); - - if (! defined($hydrationMode)) { - throw new RuntimeException(sprintf( - "Hydration mode '%s' does not exist. It should be either: object. array, scalar or single-scalar.", - $hydrationModeName, - )); - } - - $query = $em->createQuery($dql); - - $firstResult = $input->getOption('first-result'); - if ($firstResult !== null) { - if (! is_numeric($firstResult)) { - throw new LogicException("Option 'first-result' must contain an integer value"); - } - - $query->setFirstResult((int) $firstResult); - } - - $maxResult = $input->getOption('max-result'); - if ($maxResult !== null) { - if (! is_numeric($maxResult)) { - throw new LogicException("Option 'max-result' must contain an integer value"); - } - - $query->setMaxResults((int) $maxResult); - } - - if ($input->getOption('show-sql')) { - $ui->text($query->getSQL()); - - return 0; - } - - $resultSet = $query->execute([], constant($hydrationMode)); - - $ui->text(Debug::dump($resultSet, (int) $input->getOption('depth'))); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/AbstractCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/AbstractCommand.php deleted file mode 100644 index b1e4460..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/AbstractCommand.php +++ /dev/null @@ -1,39 +0,0 @@ -getEntityManager($input); - - $metadatas = $em->getMetadataFactory()->getAllMetadata(); - - if (empty($metadatas)) { - $ui->getErrorStyle()->success('No Metadata Classes to process.'); - - return 0; - } - - return $this->executeSchemaCommand($input, $output, new SchemaTool($em), $metadatas, $ui); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/CreateCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/CreateCommand.php deleted file mode 100644 index 69e20c6..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/CreateCommand.php +++ /dev/null @@ -1,75 +0,0 @@ -setName('orm:schema-tool:create') - ->setDescription('Processes the schema and either create it directly on EntityManager Storage Connection or generate the SQL output') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('dump-sql', null, InputOption::VALUE_NONE, 'Instead of trying to apply generated SQLs into EntityManager Storage Connection, output them.') - ->setHelp(<<<'EOT' -Processes the schema and either create it directly on EntityManager Storage Connection or generate the SQL output. - -Hint: If you have a database with tables that should not be managed -by the ORM, you can use a DBAL functionality to filter the tables and sequences down -on a global level: - - $config->setSchemaAssetsFilter(function (string|AbstractAsset $assetName): bool { - if ($assetName instanceof AbstractAsset) { - $assetName = $assetName->getName(); - } - - return !str_starts_with($assetName, 'audit_'); - }); -EOT); - } - - /** - * {@inheritDoc} - */ - protected function executeSchemaCommand(InputInterface $input, OutputInterface $output, SchemaTool $schemaTool, array $metadatas, SymfonyStyle $ui): int - { - $dumpSql = $input->getOption('dump-sql') === true; - - if ($dumpSql) { - $sqls = $schemaTool->getCreateSchemaSql($metadatas); - - foreach ($sqls as $sql) { - $ui->writeln(sprintf('%s;', $sql)); - } - - return 0; - } - - $notificationUi = $ui->getErrorStyle(); - - $notificationUi->caution('This operation should not be executed in a production environment!'); - - $notificationUi->text('Creating database schema...'); - $notificationUi->newLine(); - - $schemaTool->createSchema($metadatas); - - $notificationUi->success('Database schema created successfully!'); - - return 0; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/DropCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/DropCommand.php deleted file mode 100644 index 5c8253b..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/DropCommand.php +++ /dev/null @@ -1,116 +0,0 @@ -setName('orm:schema-tool:drop') - ->setDescription('Drop the complete database schema of EntityManager Storage Connection or generate the corresponding SQL output') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('dump-sql', null, InputOption::VALUE_NONE, 'Instead of trying to apply generated SQLs into EntityManager Storage Connection, output them.') - ->addOption('force', 'f', InputOption::VALUE_NONE, "Don't ask for the deletion of the database, but force the operation to run.") - ->addOption('full-database', null, InputOption::VALUE_NONE, 'Instead of using the Class Metadata to detect the database table schema, drop ALL assets that the database contains.') - ->setHelp(<<<'EOT' -Processes the schema and either drop the database schema of EntityManager Storage Connection or generate the SQL output. -Beware that the complete database is dropped by this command, even tables that are not relevant to your metadata model. - -Hint: If you have a database with tables that should not be managed -by the ORM, you can use a DBAL functionality to filter the tables and sequences down -on a global level: - - $config->setSchemaAssetsFilter(function (string|AbstractAsset $assetName): bool { - if ($assetName instanceof AbstractAsset) { - $assetName = $assetName->getName(); - } - - return !str_starts_with($assetName, 'audit_'); - }); -EOT); - } - - /** - * {@inheritDoc} - */ - protected function executeSchemaCommand(InputInterface $input, OutputInterface $output, SchemaTool $schemaTool, array $metadatas, SymfonyStyle $ui): int - { - $isFullDatabaseDrop = $input->getOption('full-database'); - $dumpSql = $input->getOption('dump-sql') === true; - $force = $input->getOption('force') === true; - - if ($dumpSql) { - if ($isFullDatabaseDrop) { - $sqls = $schemaTool->getDropDatabaseSQL(); - } else { - $sqls = $schemaTool->getDropSchemaSQL($metadatas); - } - - foreach ($sqls as $sql) { - $ui->writeln(sprintf('%s;', $sql)); - } - - return 0; - } - - $notificationUi = $ui->getErrorStyle(); - - if ($force) { - $notificationUi->text('Dropping database schema...'); - $notificationUi->newLine(); - - if ($isFullDatabaseDrop) { - $schemaTool->dropDatabase(); - } else { - $schemaTool->dropSchema($metadatas); - } - - $notificationUi->success('Database schema dropped successfully!'); - - return 0; - } - - $notificationUi->caution('This operation should not be executed in a production environment!'); - - if ($isFullDatabaseDrop) { - $sqls = $schemaTool->getDropDatabaseSQL(); - } else { - $sqls = $schemaTool->getDropSchemaSQL($metadatas); - } - - if (empty($sqls)) { - $notificationUi->success('Nothing to drop. The database is empty!'); - - return 0; - } - - $notificationUi->text( - [ - sprintf('The Schema-Tool would execute "%s" queries to update the database.', count($sqls)), - '', - 'Please run the operation by passing one - or both - of the following options:', - '', - sprintf(' %s --force to execute the command', $this->getName()), - sprintf(' %s --dump-sql to dump the SQL statements to the screen', $this->getName()), - ], - ); - - return 1; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/UpdateCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/UpdateCommand.php deleted file mode 100644 index f35fc38..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/SchemaTool/UpdateCommand.php +++ /dev/null @@ -1,147 +0,0 @@ -setName($this->name) - ->setDescription('Executes (or dumps) the SQL needed to update the database schema to match the current mapping metadata') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('complete', null, InputOption::VALUE_NONE, 'This option is a no-op, is deprecated and will be removed in 4.0') - ->addOption('dump-sql', null, InputOption::VALUE_NONE, 'Dumps the generated SQL statements to the screen (does not execute them).') - ->addOption('force', 'f', InputOption::VALUE_NONE, 'Causes the generated SQL statements to be physically executed against your database.') - ->setHelp(<<<'EOT' -The %command.name% command generates the SQL needed to -synchronize the database schema with the current mapping metadata of the -default entity manager. - -For example, if you add metadata for a new column to an entity, this command -would generate and output the SQL needed to add the new column to the database: - -%command.name% --dump-sql - -Alternatively, you can execute the generated queries: - -%command.name% --force - -If both options are specified, the queries are output and then executed: - -%command.name% --dump-sql --force - -Finally, be aware that this task will drop all database assets (e.g. tables, -etc) that are *not* described by the current metadata. In other words, without -this option, this task leaves untouched any "extra" tables that exist in the -database, but which aren't described by any metadata. - -Hint: If you have a database with tables that should not be managed -by the ORM, you can use a DBAL functionality to filter the tables and sequences down -on a global level: - - $config->setSchemaAssetsFilter(function (string|AbstractAsset $assetName): bool { - if ($assetName instanceof AbstractAsset) { - $assetName = $assetName->getName(); - } - - return !str_starts_with($assetName, 'audit_'); - }); -EOT); - } - - /** - * {@inheritDoc} - */ - protected function executeSchemaCommand(InputInterface $input, OutputInterface $output, SchemaTool $schemaTool, array $metadatas, SymfonyStyle $ui): int - { - $notificationUi = $ui->getErrorStyle(); - - if ($input->getOption('complete') === true) { - Deprecation::trigger( - 'doctrine/orm', - 'https://github.com/doctrine/orm/pull/11354', - 'The --complete option is a no-op, is deprecated and will be removed in Doctrine ORM 4.0.', - ); - $notificationUi->warning('The --complete option is a no-op, is deprecated and will be removed in Doctrine ORM 4.0.'); - } - - $sqls = $schemaTool->getUpdateSchemaSql($metadatas); - - if (empty($sqls)) { - $notificationUi->success('Nothing to update - your database is already in sync with the current entity metadata.'); - - return 0; - } - - $dumpSql = $input->getOption('dump-sql') === true; - $force = $input->getOption('force') === true; - - if ($dumpSql) { - foreach ($sqls as $sql) { - $ui->writeln(sprintf('%s;', $sql)); - } - } - - if ($force) { - if ($dumpSql) { - $notificationUi->newLine(); - } - - $notificationUi->text('Updating database schema...'); - $notificationUi->newLine(); - - $schemaTool->updateSchema($metadatas); - - $pluralization = count($sqls) === 1 ? 'query was' : 'queries were'; - - $notificationUi->text(sprintf(' %s %s executed', count($sqls), $pluralization)); - $notificationUi->success('Database schema updated successfully!'); - } - - if ($dumpSql || $force) { - return 0; - } - - $notificationUi->caution( - [ - 'This operation should not be executed in a production environment!', - '', - 'Use the incremental update to detect changes during development and use', - 'the SQL DDL provided to manually update your database in production.', - ], - ); - - $notificationUi->text( - [ - sprintf('The Schema-Tool would execute "%s" queries to update the database.', count($sqls)), - '', - 'Please run the operation by passing one - or both - of the following options:', - '', - sprintf(' %s --force to execute the command', $this->getName()), - sprintf(' %s --dump-sql to dump the SQL statements to the screen', $this->getName()), - ], - ); - - return 1; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/Command/ValidateSchemaCommand.php b/vendor/doctrine/orm/src/Tools/Console/Command/ValidateSchemaCommand.php deleted file mode 100644 index cffb4ce..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/Command/ValidateSchemaCommand.php +++ /dev/null @@ -1,89 +0,0 @@ -setName('orm:validate-schema') - ->setDescription('Validate the mapping files') - ->addOption('em', null, InputOption::VALUE_REQUIRED, 'Name of the entity manager to operate on') - ->addOption('skip-mapping', null, InputOption::VALUE_NONE, 'Skip the mapping validation check') - ->addOption('skip-sync', null, InputOption::VALUE_NONE, 'Skip checking if the mapping is in sync with the database') - ->addOption('skip-property-types', null, InputOption::VALUE_NONE, 'Skip checking if property types match the Doctrine types') - ->setHelp('Validate that the mapping files are correct and in sync with the database.'); - } - - protected function execute(InputInterface $input, OutputInterface $output): int - { - $ui = (new SymfonyStyle($input, $output))->getErrorStyle(); - - $em = $this->getEntityManager($input); - $validator = new SchemaValidator($em, ! $input->getOption('skip-property-types')); - $exit = 0; - - $ui->section('Mapping'); - - if ($input->getOption('skip-mapping')) { - $ui->text('[SKIPPED] The mapping was not checked.'); - } else { - $errors = $validator->validateMapping(); - if ($errors) { - foreach ($errors as $className => $errorMessages) { - $ui->text( - sprintf( - '[FAIL] The entity-class %s mapping is invalid:', - $className, - ), - ); - - $ui->listing($errorMessages); - $ui->newLine(); - } - - ++$exit; - } else { - $ui->success('The mapping files are correct.'); - } - } - - $ui->section('Database'); - - if ($input->getOption('skip-sync')) { - $ui->text('[SKIPPED] The database was not checked for synchronicity.'); - } elseif (! $validator->schemaInSyncWithMetadata()) { - $ui->error('The database schema is not in sync with the current mapping file.'); - - if ($output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) { - $sqls = $validator->getUpdateSchemaList(); - $ui->comment(sprintf('%d schema diff(s) detected:', count($sqls))); - foreach ($sqls as $sql) { - $ui->text(sprintf(' %s;', $sql)); - } - } - - $exit += 2; - } else { - $ui->success('The database schema is in sync with the mapping files.'); - } - - return $exit; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/ConsoleRunner.php b/vendor/doctrine/orm/src/Tools/Console/ConsoleRunner.php deleted file mode 100644 index 0a00483..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/ConsoleRunner.php +++ /dev/null @@ -1,88 +0,0 @@ -run(); - } - - /** - * Creates a console application with the given helperset and - * optional commands. - * - * @param SymfonyCommand[] $commands - * - * @throws OutOfBoundsException - */ - public static function createApplication( - EntityManagerProvider $entityManagerProvider, - array $commands = [], - ): Application { - $version = InstalledVersions::getVersion('doctrine/orm'); - assert($version !== null); - - $cli = new Application('Doctrine Command Line Interface', $version); - $cli->setCatchExceptions(true); - - self::addCommands($cli, $entityManagerProvider); - $cli->addCommands($commands); - - return $cli; - } - - public static function addCommands(Application $cli, EntityManagerProvider $entityManagerProvider): void - { - $connectionProvider = new ConnectionFromManagerProvider($entityManagerProvider); - - if (class_exists(DBALConsole\Command\ReservedWordsCommand::class)) { - $cli->add(new DBALConsole\Command\ReservedWordsCommand($connectionProvider)); - } - - $cli->addCommands( - [ - // DBAL Commands - new DBALConsole\Command\RunSqlCommand($connectionProvider), - - // ORM Commands - new Command\ClearCache\CollectionRegionCommand($entityManagerProvider), - new Command\ClearCache\EntityRegionCommand($entityManagerProvider), - new Command\ClearCache\MetadataCommand($entityManagerProvider), - new Command\ClearCache\QueryCommand($entityManagerProvider), - new Command\ClearCache\QueryRegionCommand($entityManagerProvider), - new Command\ClearCache\ResultCommand($entityManagerProvider), - new Command\SchemaTool\CreateCommand($entityManagerProvider), - new Command\SchemaTool\UpdateCommand($entityManagerProvider), - new Command\SchemaTool\DropCommand($entityManagerProvider), - new Command\GenerateProxiesCommand($entityManagerProvider), - new Command\RunDqlCommand($entityManagerProvider), - new Command\ValidateSchemaCommand($entityManagerProvider), - new Command\InfoCommand($entityManagerProvider), - new Command\MappingDescribeCommand($entityManagerProvider), - ], - ); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider.php b/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider.php deleted file mode 100644 index 866589b..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider.php +++ /dev/null @@ -1,14 +0,0 @@ -entityManagerProvider->getDefaultManager()->getConnection(); - } - - public function getConnection(string $name): Connection - { - return $this->entityManagerProvider->getManager($name)->getConnection(); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/SingleManagerProvider.php b/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/SingleManagerProvider.php deleted file mode 100644 index ebe60c9..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/SingleManagerProvider.php +++ /dev/null @@ -1,31 +0,0 @@ -entityManager; - } - - public function getManager(string $name): EntityManagerInterface - { - if ($name !== $this->defaultManagerName) { - throw UnknownManagerException::unknownManager($name, [$this->defaultManagerName]); - } - - return $this->entityManager; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/UnknownManagerException.php b/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/UnknownManagerException.php deleted file mode 100644 index 583d909..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/EntityManagerProvider/UnknownManagerException.php +++ /dev/null @@ -1,23 +0,0 @@ - $knownManagers */ - public static function unknownManager(string $unknownManager, array $knownManagers = []): self - { - return new self(sprintf( - 'Requested unknown entity manager: %s, known managers: %s', - $unknownManager, - implode(', ', $knownManagers), - )); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Console/MetadataFilter.php b/vendor/doctrine/orm/src/Tools/Console/MetadataFilter.php deleted file mode 100644 index 05e248c..0000000 --- a/vendor/doctrine/orm/src/Tools/Console/MetadataFilter.php +++ /dev/null @@ -1,92 +0,0 @@ -filter = (array) $filter; - - parent::__construct($metadata); - } - - public function accept(): bool - { - if (count($this->filter) === 0) { - return true; - } - - $it = $this->getInnerIterator(); - $metadata = $it->current(); - - foreach ($this->filter as $filter) { - $pregResult = preg_match('/' . $filter . '/', $metadata->getName()); - - if ($pregResult === false) { - throw new RuntimeException( - sprintf("Error while evaluating regex '/%s/'.", $filter), - ); - } - - if ($pregResult) { - return true; - } - } - - return false; - } - - /** @return ArrayIterator */ - public function getInnerIterator(): ArrayIterator - { - $innerIterator = parent::getInnerIterator(); - - assert($innerIterator instanceof ArrayIterator); - - return $innerIterator; - } - - public function count(): int - { - return count($this->getInnerIterator()); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Debug.php b/vendor/doctrine/orm/src/Tools/Debug.php deleted file mode 100644 index 8521e53..0000000 --- a/vendor/doctrine/orm/src/Tools/Debug.php +++ /dev/null @@ -1,158 +0,0 @@ -toArray(); - } - - if (! $maxDepth) { - return is_object($var) ? $var::class - : (is_array($var) ? 'Array(' . count($var) . ')' : $var); - } - - if (is_array($var)) { - $return = []; - - foreach ($var as $k => $v) { - $return[$k] = self::export($v, $maxDepth - 1); - } - - return $return; - } - - if (! is_object($var)) { - return $var; - } - - $return = new stdClass(); - if ($var instanceof DateTimeInterface) { - $return->__CLASS__ = $var::class; - $return->date = $var->format('c'); - $return->timezone = $var->getTimezone()->getName(); - - return $return; - } - - $return->__CLASS__ = DefaultProxyClassNameResolver::getClass($var); - - if ($var instanceof Proxy) { - $return->__IS_PROXY__ = true; - $return->__PROXY_INITIALIZED__ = $var->__isInitialized(); - } - - if ($var instanceof ArrayObject || $var instanceof ArrayIterator) { - $return->__STORAGE__ = self::export($var->getArrayCopy(), $maxDepth - 1); - } - - return self::fillReturnWithClassAttributes($var, $return, $maxDepth); - } - - /** - * Fill the $return variable with class attributes - * Based on obj2array function from {@see https://secure.php.net/manual/en/function.get-object-vars.php#47075} - */ - private static function fillReturnWithClassAttributes(object $var, stdClass $return, int $maxDepth): stdClass - { - $clone = (array) $var; - - foreach (array_keys($clone) as $key) { - $aux = explode("\0", (string) $key); - $name = end($aux); - if ($aux[0] === '') { - $name .= ':' . ($aux[1] === '*' ? 'protected' : $aux[1] . ':private'); - } - - $return->$name = self::export($clone[$key], $maxDepth - 1); - } - - return $return; - } -} diff --git a/vendor/doctrine/orm/src/Tools/DebugUnitOfWorkListener.php b/vendor/doctrine/orm/src/Tools/DebugUnitOfWorkListener.php deleted file mode 100644 index 71059f7..0000000 --- a/vendor/doctrine/orm/src/Tools/DebugUnitOfWorkListener.php +++ /dev/null @@ -1,144 +0,0 @@ -dumpIdentityMap($args->getObjectManager()); - } - - /** - * Dumps the contents of the identity map into a stream. - */ - public function dumpIdentityMap(EntityManagerInterface $em): void - { - $uow = $em->getUnitOfWork(); - $identityMap = $uow->getIdentityMap(); - - $fh = fopen($this->file, 'xb+'); - if (count($identityMap) === 0) { - fwrite($fh, 'Flush Operation [' . $this->context . "] - Empty identity map.\n"); - - return; - } - - fwrite($fh, 'Flush Operation [' . $this->context . "] - Dumping identity map:\n"); - foreach ($identityMap as $className => $map) { - fwrite($fh, 'Class: ' . $className . "\n"); - - foreach ($map as $entity) { - fwrite($fh, ' Entity: ' . $this->getIdString($entity, $uow) . ' ' . spl_object_id($entity) . "\n"); - fwrite($fh, " Associations:\n"); - - $cm = $em->getClassMetadata($className); - - foreach ($cm->associationMappings as $field => $assoc) { - fwrite($fh, ' ' . $field . ' '); - $value = $cm->getFieldValue($entity, $field); - - if ($assoc->isToOne()) { - if ($value === null) { - fwrite($fh, " NULL\n"); - } else { - if ($uow->isUninitializedObject($value)) { - fwrite($fh, '[PROXY] '); - } - - fwrite($fh, $this->getIdString($value, $uow) . ' ' . spl_object_id($value) . "\n"); - } - } else { - $initialized = ! ($value instanceof PersistentCollection) || $value->isInitialized(); - if ($value === null) { - fwrite($fh, " NULL\n"); - } elseif ($initialized) { - fwrite($fh, '[INITIALIZED] ' . $this->getType($value) . ' ' . count($value) . " elements\n"); - - foreach ($value as $obj) { - fwrite($fh, ' ' . $this->getIdString($obj, $uow) . ' ' . spl_object_id($obj) . "\n"); - } - } else { - fwrite($fh, '[PROXY] ' . $this->getType($value) . " unknown element size\n"); - foreach ($value->unwrap() as $obj) { - fwrite($fh, ' ' . $this->getIdString($obj, $uow) . ' ' . spl_object_id($obj) . "\n"); - } - } - } - } - } - } - - fclose($fh); - } - - private function getType(mixed $var): string - { - if (is_object($var)) { - $refl = new ReflectionObject($var); - - return $refl->getShortName(); - } - - return gettype($var); - } - - private function getIdString(object $entity, UnitOfWork $uow): string - { - if ($uow->isInIdentityMap($entity)) { - $ids = $uow->getEntityIdentifier($entity); - $idstring = ''; - - foreach ($ids as $k => $v) { - $idstring .= $k . '=' . $v; - } - } else { - $idstring = 'NEWOBJECT '; - } - - $state = $uow->getEntityState($entity); - - if ($state === UnitOfWork::STATE_NEW) { - $idstring .= ' [NEW]'; - } elseif ($state === UnitOfWork::STATE_REMOVED) { - $idstring .= ' [REMOVED]'; - } elseif ($state === UnitOfWork::STATE_MANAGED) { - $idstring .= ' [MANAGED]'; - } elseif ($state === UnitOfWork::STATE_DETACHED) { - $idstring .= ' [DETACHED]'; - } - - return $idstring; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Event/GenerateSchemaEventArgs.php b/vendor/doctrine/orm/src/Tools/Event/GenerateSchemaEventArgs.php deleted file mode 100644 index 3b0993e..0000000 --- a/vendor/doctrine/orm/src/Tools/Event/GenerateSchemaEventArgs.php +++ /dev/null @@ -1,33 +0,0 @@ -em; - } - - public function getSchema(): Schema - { - return $this->schema; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Event/GenerateSchemaTableEventArgs.php b/vendor/doctrine/orm/src/Tools/Event/GenerateSchemaTableEventArgs.php deleted file mode 100644 index a09aaae..0000000 --- a/vendor/doctrine/orm/src/Tools/Event/GenerateSchemaTableEventArgs.php +++ /dev/null @@ -1,40 +0,0 @@ -classMetadata; - } - - public function getSchema(): Schema - { - return $this->schema; - } - - public function getClassTable(): Table - { - return $this->classTable; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Exception/MissingColumnException.php b/vendor/doctrine/orm/src/Tools/Exception/MissingColumnException.php deleted file mode 100644 index 764721e..0000000 --- a/vendor/doctrine/orm/src/Tools/Exception/MissingColumnException.php +++ /dev/null @@ -1,23 +0,0 @@ - FROM ()) - * - * Works with composite keys but cannot deal with queries that have multiple - * root entities (e.g. `SELECT f, b from Foo, Bar`) - * - * Note that the ORDER BY clause is not removed. Many SQL implementations (e.g. MySQL) - * are able to cache subqueries. By keeping the ORDER BY clause intact, the limitSubQuery - * that will most likely be executed next can be read from the native SQL cache. - * - * @psalm-import-type QueryComponent from Parser - */ -class CountOutputWalker extends SqlWalker -{ - private readonly AbstractPlatform $platform; - private readonly ResultSetMapping $rsm; - - /** - * {@inheritDoc} - */ - public function __construct(Query $query, ParserResult $parserResult, array $queryComponents) - { - $this->platform = $query->getEntityManager()->getConnection()->getDatabasePlatform(); - $this->rsm = $parserResult->getResultSetMapping(); - - parent::__construct($query, $parserResult, $queryComponents); - } - - public function walkSelectStatement(SelectStatement $selectStatement): string - { - if ($this->platform instanceof SQLServerPlatform) { - $selectStatement->orderByClause = null; - } - - $sql = parent::walkSelectStatement($selectStatement); - - if ($selectStatement->groupByClause) { - return sprintf( - 'SELECT COUNT(*) AS dctrn_count FROM (%s) dctrn_table', - $sql, - ); - } - - // Find out the SQL alias of the identifier column of the root entity - // It may be possible to make this work with multiple root entities but that - // would probably require issuing multiple queries or doing a UNION SELECT - // so for now, It's not supported. - - // Get the root entity and alias from the AST fromClause - $from = $selectStatement->fromClause->identificationVariableDeclarations; - if (count($from) > 1) { - throw new RuntimeException('Cannot count query which selects two FROM components, cannot make distinction'); - } - - $fromRoot = reset($from); - $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; - $rootClass = $this->getMetadataForDqlAlias($rootAlias); - $rootIdentifier = $rootClass->identifier; - - // For every identifier, find out the SQL alias by combing through the ResultSetMapping - $sqlIdentifier = []; - foreach ($rootIdentifier as $property) { - if (isset($rootClass->fieldMappings[$property])) { - foreach (array_keys($this->rsm->fieldMappings, $property, true) as $alias) { - if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { - $sqlIdentifier[$property] = $alias; - } - } - } - - if (isset($rootClass->associationMappings[$property])) { - $association = $rootClass->associationMappings[$property]; - assert($association->isToOneOwningSide()); - $joinColumn = $association->joinColumns[0]->name; - - foreach (array_keys($this->rsm->metaMappings, $joinColumn, true) as $alias) { - if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { - $sqlIdentifier[$property] = $alias; - } - } - } - } - - if (count($rootIdentifier) !== count($sqlIdentifier)) { - throw new RuntimeException(sprintf( - 'Not all identifier properties can be found in the ResultSetMapping: %s', - implode(', ', array_diff($rootIdentifier, array_keys($sqlIdentifier))), - )); - } - - // Build the counter query - return sprintf( - 'SELECT COUNT(*) AS dctrn_count FROM (SELECT DISTINCT %s FROM (%s) dctrn_result) dctrn_table', - implode(', ', $sqlIdentifier), - $sql, - ); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Pagination/CountWalker.php b/vendor/doctrine/orm/src/Tools/Pagination/CountWalker.php deleted file mode 100644 index d212943..0000000 --- a/vendor/doctrine/orm/src/Tools/Pagination/CountWalker.php +++ /dev/null @@ -1,68 +0,0 @@ -havingClause) { - throw new RuntimeException('Cannot count query that uses a HAVING clause. Use the output walkers for pagination'); - } - - // Get the root entity and alias from the AST fromClause - $from = $selectStatement->fromClause->identificationVariableDeclarations; - - if (count($from) > 1) { - throw new RuntimeException('Cannot count query which selects two FROM components, cannot make distinction'); - } - - $fromRoot = reset($from); - $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; - $rootClass = $this->getMetadataForDqlAlias($rootAlias); - $identifierFieldName = $rootClass->getSingleIdentifierFieldName(); - - $pathType = PathExpression::TYPE_STATE_FIELD; - if (isset($rootClass->associationMappings[$identifierFieldName])) { - $pathType = PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; - } - - $pathExpression = new PathExpression( - PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, - $rootAlias, - $identifierFieldName, - ); - $pathExpression->type = $pathType; - - $distinct = $this->_getQuery()->getHint(self::HINT_DISTINCT); - $selectStatement->selectClause->selectExpressions = [ - new SelectExpression( - new AggregateExpression('count', $pathExpression, $distinct), - null, - ), - ]; - - // ORDER BY is not needed, only increases query execution through unnecessary sorting. - $selectStatement->orderByClause = null; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Pagination/Exception/RowNumberOverFunctionNotEnabled.php b/vendor/doctrine/orm/src/Tools/Pagination/Exception/RowNumberOverFunctionNotEnabled.php deleted file mode 100644 index 0e3da93..0000000 --- a/vendor/doctrine/orm/src/Tools/Pagination/Exception/RowNumberOverFunctionNotEnabled.php +++ /dev/null @@ -1,16 +0,0 @@ - FROM () LIMIT x OFFSET y - * - * Works with composite keys but cannot deal with queries that have multiple - * root entities (e.g. `SELECT f, b from Foo, Bar`) - * - * @psalm-import-type QueryComponent from Parser - */ -class LimitSubqueryOutputWalker extends SqlWalker -{ - private const ORDER_BY_PATH_EXPRESSION = '/(? */ - private array $orderByPathExpressions = []; - - /** - * We don't want to add path expressions from sub-selects into the select clause of the containing query. - * This state flag simply keeps track on whether we are walking on a subquery or not - */ - private bool $inSubSelect = false; - - /** - * Stores various parameters that are otherwise unavailable - * because Doctrine\ORM\Query\SqlWalker keeps everything private without - * accessors. - * - * {@inheritDoc} - */ - public function __construct( - Query $query, - ParserResult $parserResult, - array $queryComponents, - ) { - $this->platform = $query->getEntityManager()->getConnection()->getDatabasePlatform(); - $this->rsm = $parserResult->getResultSetMapping(); - - // Reset limit and offset - $this->firstResult = $query->getFirstResult(); - $this->maxResults = $query->getMaxResults(); - $query->setFirstResult(0)->setMaxResults(null); - - $this->em = $query->getEntityManager(); - $this->quoteStrategy = $this->em->getConfiguration()->getQuoteStrategy(); - - parent::__construct($query, $parserResult, $queryComponents); - } - - /** - * Check if the platform supports the ROW_NUMBER window function. - */ - private function platformSupportsRowNumber(): bool - { - return $this->platform instanceof PostgreSQLPlatform - || $this->platform instanceof SQLServerPlatform - || $this->platform instanceof OraclePlatform - || $this->platform instanceof DB2Platform - || (method_exists($this->platform, 'supportsRowNumberFunction') - && $this->platform->supportsRowNumberFunction()); - } - - /** - * Rebuilds a select statement's order by clause for use in a - * ROW_NUMBER() OVER() expression. - */ - private function rebuildOrderByForRowNumber(SelectStatement $AST): void - { - $orderByClause = $AST->orderByClause; - $selectAliasToExpressionMap = []; - // Get any aliases that are available for select expressions. - foreach ($AST->selectClause->selectExpressions as $selectExpression) { - $selectAliasToExpressionMap[$selectExpression->fieldIdentificationVariable] = $selectExpression->expression; - } - - // Rebuild string orderby expressions to use the select expression they're referencing - foreach ($orderByClause->orderByItems as $orderByItem) { - if (is_string($orderByItem->expression) && isset($selectAliasToExpressionMap[$orderByItem->expression])) { - $orderByItem->expression = $selectAliasToExpressionMap[$orderByItem->expression]; - } - } - - $func = new RowNumberOverFunction('dctrn_rownum'); - $func->orderByClause = $AST->orderByClause; - $AST->selectClause->selectExpressions[] = new SelectExpression($func, 'dctrn_rownum', true); - - // No need for an order by clause, we'll order by rownum in the outer query. - $AST->orderByClause = null; - } - - public function walkSelectStatement(SelectStatement $selectStatement): string - { - if ($this->platformSupportsRowNumber()) { - return $this->walkSelectStatementWithRowNumber($selectStatement); - } - - return $this->walkSelectStatementWithoutRowNumber($selectStatement); - } - - /** - * Walks down a SelectStatement AST node, wrapping it in a SELECT DISTINCT. - * This method is for use with platforms which support ROW_NUMBER. - * - * @throws RuntimeException - */ - public function walkSelectStatementWithRowNumber(SelectStatement $AST): string - { - $hasOrderBy = false; - $outerOrderBy = ' ORDER BY dctrn_minrownum ASC'; - $orderGroupBy = ''; - if ($AST->orderByClause instanceof OrderByClause) { - $hasOrderBy = true; - $this->rebuildOrderByForRowNumber($AST); - } - - $innerSql = $this->getInnerSQL($AST); - - $sqlIdentifier = $this->getSQLIdentifier($AST); - - if ($hasOrderBy) { - $orderGroupBy = ' GROUP BY ' . implode(', ', $sqlIdentifier); - $sqlIdentifier[] = 'MIN(' . $this->walkResultVariable('dctrn_rownum') . ') AS dctrn_minrownum'; - } - - // Build the counter query - $sql = sprintf( - 'SELECT DISTINCT %s FROM (%s) dctrn_result', - implode(', ', $sqlIdentifier), - $innerSql, - ); - - if ($hasOrderBy) { - $sql .= $orderGroupBy . $outerOrderBy; - } - - // Apply the limit and offset. - $sql = $this->platform->modifyLimitQuery( - $sql, - $this->maxResults, - $this->firstResult, - ); - - // Add the columns to the ResultSetMapping. It's not really nice but - // it works. Preferably I'd clear the RSM or simply create a new one - // but that is not possible from inside the output walker, so we dirty - // up the one we have. - foreach ($sqlIdentifier as $property => $alias) { - $this->rsm->addScalarResult($alias, $property); - } - - return $sql; - } - - /** - * Walks down a SelectStatement AST node, wrapping it in a SELECT DISTINCT. - * This method is for platforms which DO NOT support ROW_NUMBER. - * - * @throws RuntimeException - */ - public function walkSelectStatementWithoutRowNumber(SelectStatement $AST, bool $addMissingItemsFromOrderByToSelect = true): string - { - // We don't want to call this recursively! - if ($AST->orderByClause instanceof OrderByClause && $addMissingItemsFromOrderByToSelect) { - // In the case of ordering a query by columns from joined tables, we - // must add those columns to the select clause of the query BEFORE - // the SQL is generated. - $this->addMissingItemsFromOrderByToSelect($AST); - } - - // Remove order by clause from the inner query - // It will be re-appended in the outer select generated by this method - $orderByClause = $AST->orderByClause; - $AST->orderByClause = null; - - $innerSql = $this->getInnerSQL($AST); - - $sqlIdentifier = $this->getSQLIdentifier($AST); - - // Build the counter query - $sql = sprintf( - 'SELECT DISTINCT %s FROM (%s) dctrn_result', - implode(', ', $sqlIdentifier), - $innerSql, - ); - - // https://github.com/doctrine/orm/issues/2630 - $sql = $this->preserveSqlOrdering($sqlIdentifier, $innerSql, $sql, $orderByClause); - - // Apply the limit and offset. - $sql = $this->platform->modifyLimitQuery( - $sql, - $this->maxResults, - $this->firstResult, - ); - - // Add the columns to the ResultSetMapping. It's not really nice but - // it works. Preferably I'd clear the RSM or simply create a new one - // but that is not possible from inside the output walker, so we dirty - // up the one we have. - foreach ($sqlIdentifier as $property => $alias) { - $this->rsm->addScalarResult($alias, $property); - } - - // Restore orderByClause - $AST->orderByClause = $orderByClause; - - return $sql; - } - - /** - * Finds all PathExpressions in an AST's OrderByClause, and ensures that - * the referenced fields are present in the SelectClause of the passed AST. - */ - private function addMissingItemsFromOrderByToSelect(SelectStatement $AST): void - { - $this->orderByPathExpressions = []; - - // We need to do this in another walker because otherwise we'll end up - // polluting the state of this one. - $walker = clone $this; - - // This will populate $orderByPathExpressions via - // LimitSubqueryOutputWalker::walkPathExpression, which will be called - // as the select statement is walked. We'll end up with an array of all - // path expressions referenced in the query. - $walker->walkSelectStatementWithoutRowNumber($AST, false); - $orderByPathExpressions = $walker->getOrderByPathExpressions(); - - // Get a map of referenced identifiers to field names. - $selects = []; - foreach ($orderByPathExpressions as $pathExpression) { - assert($pathExpression->field !== null); - $idVar = $pathExpression->identificationVariable; - $field = $pathExpression->field; - if (! isset($selects[$idVar])) { - $selects[$idVar] = []; - } - - $selects[$idVar][$field] = true; - } - - // Loop the select clause of the AST and exclude items from $select - // that are already being selected in the query. - foreach ($AST->selectClause->selectExpressions as $selectExpression) { - if ($selectExpression instanceof SelectExpression) { - $idVar = $selectExpression->expression; - if (! is_string($idVar)) { - continue; - } - - $field = $selectExpression->fieldIdentificationVariable; - if ($field === null) { - // No need to add this select, as we're already fetching the whole object. - unset($selects[$idVar]); - } else { - unset($selects[$idVar][$field]); - } - } - } - - // Add select items which were not excluded to the AST's select clause. - foreach ($selects as $idVar => $fields) { - $AST->selectClause->selectExpressions[] = new SelectExpression($idVar, null, true); - } - } - - /** - * Generates new SQL for statements with an order by clause - * - * @param mixed[] $sqlIdentifier - */ - private function preserveSqlOrdering( - array $sqlIdentifier, - string $innerSql, - string $sql, - OrderByClause|null $orderByClause, - ): string { - // If the sql statement has an order by clause, we need to wrap it in a new select distinct statement - if (! $orderByClause) { - return $sql; - } - - // now only select distinct identifier - return sprintf( - 'SELECT DISTINCT %s FROM (%s) dctrn_result', - implode(', ', $sqlIdentifier), - $this->recreateInnerSql($orderByClause, $sqlIdentifier, $innerSql), - ); - } - - /** - * Generates a new SQL statement for the inner query to keep the correct sorting - * - * @param mixed[] $identifiers - */ - private function recreateInnerSql( - OrderByClause $orderByClause, - array $identifiers, - string $innerSql, - ): string { - [$searchPatterns, $replacements] = $this->generateSqlAliasReplacements(); - $orderByItems = []; - - foreach ($orderByClause->orderByItems as $orderByItem) { - // Walk order by item to get string representation of it and - // replace path expressions in the order by clause with their column alias - $orderByItemString = preg_replace( - $searchPatterns, - $replacements, - $this->walkOrderByItem($orderByItem), - ); - - $orderByItems[] = $orderByItemString; - $identifier = substr($orderByItemString, 0, strrpos($orderByItemString, ' ')); - - if (! in_array($identifier, $identifiers, true)) { - $identifiers[] = $identifier; - } - } - - return $sql = sprintf( - 'SELECT DISTINCT %s FROM (%s) dctrn_result_inner ORDER BY %s', - implode(', ', $identifiers), - $innerSql, - implode(', ', $orderByItems), - ); - } - - /** - * @return string[][] - * @psalm-return array{0: list, 1: list} - */ - private function generateSqlAliasReplacements(): array - { - $aliasMap = $searchPatterns = $replacements = $metadataList = []; - - // Generate DQL alias -> SQL table alias mapping - foreach (array_keys($this->rsm->aliasMap) as $dqlAlias) { - $metadataList[$dqlAlias] = $class = $this->getMetadataForDqlAlias($dqlAlias); - $aliasMap[$dqlAlias] = $this->getSQLTableAlias($class->getTableName(), $dqlAlias); - } - - // Generate search patterns for each field's path expression in the order by clause - foreach ($this->rsm->fieldMappings as $fieldAlias => $fieldName) { - $dqlAliasForFieldAlias = $this->rsm->columnOwnerMap[$fieldAlias]; - $class = $metadataList[$dqlAliasForFieldAlias]; - - // If the field is from a joined child table, we won't be ordering on it. - if (! isset($class->fieldMappings[$fieldName])) { - continue; - } - - $fieldMapping = $class->fieldMappings[$fieldName]; - - // Get the proper column name as will appear in the select list - $columnName = $this->quoteStrategy->getColumnName( - $fieldName, - $metadataList[$dqlAliasForFieldAlias], - $this->em->getConnection()->getDatabasePlatform(), - ); - - // Get the SQL table alias for the entity and field - $sqlTableAliasForFieldAlias = $aliasMap[$dqlAliasForFieldAlias]; - - if (isset($fieldMapping->declared) && $fieldMapping->declared !== $class->name) { - // Field was declared in a parent class, so we need to get the proper SQL table alias - // for the joined parent table. - $otherClassMetadata = $this->em->getClassMetadata($fieldMapping->declared); - - if (! $otherClassMetadata->isMappedSuperclass) { - $sqlTableAliasForFieldAlias = $this->getSQLTableAlias($otherClassMetadata->getTableName(), $dqlAliasForFieldAlias); - } - } - - // Compose search and replace patterns - $searchPatterns[] = sprintf(self::ORDER_BY_PATH_EXPRESSION, $sqlTableAliasForFieldAlias, $columnName); - $replacements[] = $fieldAlias; - } - - return [$searchPatterns, $replacements]; - } - - /** - * getter for $orderByPathExpressions - * - * @return list - */ - public function getOrderByPathExpressions(): array - { - return $this->orderByPathExpressions; - } - - /** - * @throws OptimisticLockException - * @throws QueryException - */ - private function getInnerSQL(SelectStatement $AST): string - { - // Set every select expression as visible(hidden = false) to - // make $AST have scalar mappings properly - this is relevant for referencing selected - // fields from outside the subquery, for example in the ORDER BY segment - $hiddens = []; - - foreach ($AST->selectClause->selectExpressions as $idx => $expr) { - $hiddens[$idx] = $expr->hiddenAliasResultVariable; - $expr->hiddenAliasResultVariable = false; - } - - $innerSql = parent::walkSelectStatement($AST); - - // Restore hiddens - foreach ($AST->selectClause->selectExpressions as $idx => $expr) { - $expr->hiddenAliasResultVariable = $hiddens[$idx]; - } - - return $innerSql; - } - - /** @return string[] */ - private function getSQLIdentifier(SelectStatement $AST): array - { - // Find out the SQL alias of the identifier column of the root entity. - // It may be possible to make this work with multiple root entities but that - // would probably require issuing multiple queries or doing a UNION SELECT. - // So for now, it's not supported. - - // Get the root entity and alias from the AST fromClause. - $from = $AST->fromClause->identificationVariableDeclarations; - if (count($from) !== 1) { - throw new RuntimeException('Cannot count query which selects two FROM components, cannot make distinction'); - } - - $fromRoot = reset($from); - $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; - $rootClass = $this->getMetadataForDqlAlias($rootAlias); - $rootIdentifier = $rootClass->identifier; - - // For every identifier, find out the SQL alias by combing through the ResultSetMapping - $sqlIdentifier = []; - foreach ($rootIdentifier as $property) { - if (isset($rootClass->fieldMappings[$property])) { - foreach (array_keys($this->rsm->fieldMappings, $property, true) as $alias) { - if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { - $sqlIdentifier[$property] = $alias; - } - } - } - - if (isset($rootClass->associationMappings[$property])) { - $association = $rootClass->associationMappings[$property]; - assert($association->isToOneOwningSide()); - $joinColumn = $association->joinColumns[0]->name; - - foreach (array_keys($this->rsm->metaMappings, $joinColumn, true) as $alias) { - if ($this->rsm->columnOwnerMap[$alias] === $rootAlias) { - $sqlIdentifier[$property] = $alias; - } - } - } - } - - if (count($sqlIdentifier) === 0) { - throw new RuntimeException('The Paginator does not support Queries which only yield ScalarResults.'); - } - - if (count($rootIdentifier) !== count($sqlIdentifier)) { - throw new RuntimeException(sprintf( - 'Not all identifier properties can be found in the ResultSetMapping: %s', - implode(', ', array_diff($rootIdentifier, array_keys($sqlIdentifier))), - )); - } - - return $sqlIdentifier; - } - - public function walkPathExpression(PathExpression $pathExpr): string - { - if (! $this->inSubSelect && ! $this->platformSupportsRowNumber() && ! in_array($pathExpr, $this->orderByPathExpressions, true)) { - $this->orderByPathExpressions[] = $pathExpr; - } - - return parent::walkPathExpression($pathExpr); - } - - public function walkSubSelect(Subselect $subselect): string - { - $this->inSubSelect = true; - - $sql = parent::walkSubselect($subselect); - - $this->inSubSelect = false; - - return $sql; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Pagination/LimitSubqueryWalker.php b/vendor/doctrine/orm/src/Tools/Pagination/LimitSubqueryWalker.php deleted file mode 100644 index 3fb0eee..0000000 --- a/vendor/doctrine/orm/src/Tools/Pagination/LimitSubqueryWalker.php +++ /dev/null @@ -1,155 +0,0 @@ -fromClause->identificationVariableDeclarations; - $fromRoot = reset($from); - $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; - $rootClass = $this->getMetadataForDqlAlias($rootAlias); - - $this->validate($selectStatement); - $identifier = $rootClass->getSingleIdentifierFieldName(); - - if (isset($rootClass->associationMappings[$identifier])) { - throw new RuntimeException('Paginating an entity with foreign key as identifier only works when using the Output Walkers. Call Paginator#setUseOutputWalkers(true) before iterating the paginator.'); - } - - $query = $this->_getQuery(); - - $query->setHint( - self::IDENTIFIER_TYPE, - Type::getType($rootClass->fieldMappings[$identifier]->type), - ); - - $query->setHint(self::FORCE_DBAL_TYPE_CONVERSION, true); - - $pathExpression = new PathExpression( - PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, - $rootAlias, - $identifier, - ); - - $pathExpression->type = PathExpression::TYPE_STATE_FIELD; - - $selectStatement->selectClause->selectExpressions = [new SelectExpression($pathExpression, '_dctrn_id')]; - $selectStatement->selectClause->isDistinct = ($query->getHints()[Paginator::HINT_ENABLE_DISTINCT] ?? true) === true; - - if (! isset($selectStatement->orderByClause)) { - return; - } - - $queryComponents = $this->getQueryComponents(); - foreach ($selectStatement->orderByClause->orderByItems as $item) { - if ($item->expression instanceof PathExpression) { - $selectStatement->selectClause->selectExpressions[] = new SelectExpression( - $this->createSelectExpressionItem($item->expression), - '_dctrn_ord' . $this->aliasCounter++, - ); - - continue; - } - - if (is_string($item->expression) && isset($queryComponents[$item->expression])) { - $qComp = $queryComponents[$item->expression]; - - if (isset($qComp['resultVariable'])) { - $selectStatement->selectClause->selectExpressions[] = new SelectExpression( - $qComp['resultVariable'], - $item->expression, - ); - } - } - } - } - - /** - * Validate the AST to ensure that this walker is able to properly manipulate it. - */ - private function validate(SelectStatement $AST): void - { - // Prevent LimitSubqueryWalker from being used with queries that include - // a limit, a fetched to-many join, and an order by condition that - // references a column from the fetch joined table. - $queryComponents = $this->getQueryComponents(); - $query = $this->_getQuery(); - $from = $AST->fromClause->identificationVariableDeclarations; - $fromRoot = reset($from); - - if ( - $query instanceof Query - && $query->getMaxResults() !== null - && $AST->orderByClause - && count($fromRoot->joins) - ) { - // Check each orderby item. - // TODO: check complex orderby items too... - foreach ($AST->orderByClause->orderByItems as $orderByItem) { - $expression = $orderByItem->expression; - if ( - $orderByItem->expression instanceof PathExpression - && isset($queryComponents[$expression->identificationVariable]) - ) { - $queryComponent = $queryComponents[$expression->identificationVariable]; - if ( - isset($queryComponent['parent']) - && isset($queryComponent['relation']) - && $queryComponent['relation']->isToMany() - ) { - throw new RuntimeException('Cannot select distinct identifiers from query with LIMIT and ORDER BY on a column from a fetch joined to-many association. Use output walkers.'); - } - } - } - } - } - - /** - * Retrieve either an IdentityFunction (IDENTITY(u.assoc)) or a state field (u.name). - * - * @return IdentityFunction|PathExpression - */ - private function createSelectExpressionItem(PathExpression $pathExpression): Node - { - if ($pathExpression->type === PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION) { - $identity = new IdentityFunction('identity'); - - $identity->pathExpression = clone $pathExpression; - - return $identity; - } - - return clone $pathExpression; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Pagination/Paginator.php b/vendor/doctrine/orm/src/Tools/Pagination/Paginator.php deleted file mode 100644 index db1b34d..0000000 --- a/vendor/doctrine/orm/src/Tools/Pagination/Paginator.php +++ /dev/null @@ -1,263 +0,0 @@ - - */ -class Paginator implements Countable, IteratorAggregate -{ - use SQLResultCasing; - - public const HINT_ENABLE_DISTINCT = 'paginator.distinct.enable'; - - private readonly Query $query; - private bool|null $useOutputWalkers = null; - private int|null $count = null; - - /** @param bool $fetchJoinCollection Whether the query joins a collection (true by default). */ - public function __construct( - Query|QueryBuilder $query, - private readonly bool $fetchJoinCollection = true, - ) { - if ($query instanceof QueryBuilder) { - $query = $query->getQuery(); - } - - $this->query = $query; - } - - /** - * Returns the query. - */ - public function getQuery(): Query - { - return $this->query; - } - - /** - * Returns whether the query joins a collection. - * - * @return bool Whether the query joins a collection. - */ - public function getFetchJoinCollection(): bool - { - return $this->fetchJoinCollection; - } - - /** - * Returns whether the paginator will use an output walker. - */ - public function getUseOutputWalkers(): bool|null - { - return $this->useOutputWalkers; - } - - /** - * Sets whether the paginator will use an output walker. - * - * @return $this - */ - public function setUseOutputWalkers(bool|null $useOutputWalkers): static - { - $this->useOutputWalkers = $useOutputWalkers; - - return $this; - } - - public function count(): int - { - if ($this->count === null) { - try { - $this->count = (int) array_sum(array_map('current', $this->getCountQuery()->getScalarResult())); - } catch (NoResultException) { - $this->count = 0; - } - } - - return $this->count; - } - - /** - * {@inheritDoc} - * - * @psalm-return Traversable - */ - public function getIterator(): Traversable - { - $offset = $this->query->getFirstResult(); - $length = $this->query->getMaxResults(); - - if ($this->fetchJoinCollection && $length !== null) { - $subQuery = $this->cloneQuery($this->query); - - if ($this->useOutputWalker($subQuery)) { - $subQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, LimitSubqueryOutputWalker::class); - } else { - $this->appendTreeWalker($subQuery, LimitSubqueryWalker::class); - $this->unbindUnusedQueryParams($subQuery); - } - - $subQuery->setFirstResult($offset)->setMaxResults($length); - - $foundIdRows = $subQuery->getScalarResult(); - - // don't do this for an empty id array - if ($foundIdRows === []) { - return new ArrayIterator([]); - } - - $whereInQuery = $this->cloneQuery($this->query); - $ids = array_map('current', $foundIdRows); - - $this->appendTreeWalker($whereInQuery, WhereInWalker::class); - $whereInQuery->setHint(WhereInWalker::HINT_PAGINATOR_HAS_IDS, true); - $whereInQuery->setFirstResult(0)->setMaxResults(null); - $whereInQuery->setCacheable($this->query->isCacheable()); - - $databaseIds = $this->convertWhereInIdentifiersToDatabaseValues($ids); - $whereInQuery->setParameter(WhereInWalker::PAGINATOR_ID_ALIAS, $databaseIds); - - $result = $whereInQuery->getResult($this->query->getHydrationMode()); - } else { - $result = $this->cloneQuery($this->query) - ->setMaxResults($length) - ->setFirstResult($offset) - ->setCacheable($this->query->isCacheable()) - ->getResult($this->query->getHydrationMode()); - } - - return new ArrayIterator($result); - } - - private function cloneQuery(Query $query): Query - { - $cloneQuery = clone $query; - - $cloneQuery->setParameters(clone $query->getParameters()); - $cloneQuery->setCacheable(false); - - foreach ($query->getHints() as $name => $value) { - $cloneQuery->setHint($name, $value); - } - - return $cloneQuery; - } - - /** - * Determines whether to use an output walker for the query. - */ - private function useOutputWalker(Query $query): bool - { - if ($this->useOutputWalkers === null) { - return (bool) $query->getHint(Query::HINT_CUSTOM_OUTPUT_WALKER) === false; - } - - return $this->useOutputWalkers; - } - - /** - * Appends a custom tree walker to the tree walkers hint. - * - * @psalm-param class-string $walkerClass - */ - private function appendTreeWalker(Query $query, string $walkerClass): void - { - $hints = $query->getHint(Query::HINT_CUSTOM_TREE_WALKERS); - - if ($hints === false) { - $hints = []; - } - - $hints[] = $walkerClass; - $query->setHint(Query::HINT_CUSTOM_TREE_WALKERS, $hints); - } - - /** - * Returns Query prepared to count. - */ - private function getCountQuery(): Query - { - $countQuery = $this->cloneQuery($this->query); - - if (! $countQuery->hasHint(CountWalker::HINT_DISTINCT)) { - $countQuery->setHint(CountWalker::HINT_DISTINCT, true); - } - - if ($this->useOutputWalker($countQuery)) { - $platform = $countQuery->getEntityManager()->getConnection()->getDatabasePlatform(); // law of demeter win - - $rsm = new ResultSetMapping(); - $rsm->addScalarResult($this->getSQLResultCasing($platform, 'dctrn_count'), 'count'); - - $countQuery->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, CountOutputWalker::class); - $countQuery->setResultSetMapping($rsm); - } else { - $this->appendTreeWalker($countQuery, CountWalker::class); - $this->unbindUnusedQueryParams($countQuery); - } - - $countQuery->setFirstResult(0)->setMaxResults(null); - - return $countQuery; - } - - private function unbindUnusedQueryParams(Query $query): void - { - $parser = new Parser($query); - $parameterMappings = $parser->parse()->getParameterMappings(); - /** @var Collection|Parameter[] $parameters */ - $parameters = $query->getParameters(); - - foreach ($parameters as $key => $parameter) { - $parameterName = $parameter->getName(); - - if (! (isset($parameterMappings[$parameterName]) || array_key_exists($parameterName, $parameterMappings))) { - unset($parameters[$key]); - } - } - - $query->setParameters($parameters); - } - - /** - * @param mixed[] $identifiers - * - * @return mixed[] - */ - private function convertWhereInIdentifiersToDatabaseValues(array $identifiers): array - { - $query = $this->cloneQuery($this->query); - $query->setHint(Query::HINT_CUSTOM_OUTPUT_WALKER, RootTypeWalker::class); - - $connection = $this->query->getEntityManager()->getConnection(); - $type = $query->getSQL(); - assert(is_string($type)); - - return array_map(static fn ($id): mixed => $connection->convertToDatabaseValue($id, $type), $identifiers); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Pagination/RootTypeWalker.php b/vendor/doctrine/orm/src/Tools/Pagination/RootTypeWalker.php deleted file mode 100644 index f630ee1..0000000 --- a/vendor/doctrine/orm/src/Tools/Pagination/RootTypeWalker.php +++ /dev/null @@ -1,48 +0,0 @@ - root entity id type resolution can be cached in the query cache. - */ -final class RootTypeWalker extends SqlWalker -{ - public function walkSelectStatement(AST\SelectStatement $selectStatement): string - { - // Get the root entity and alias from the AST fromClause - $from = $selectStatement->fromClause->identificationVariableDeclarations; - - if (count($from) > 1) { - throw new RuntimeException('Can only process queries that select only one FROM component'); - } - - $fromRoot = reset($from); - $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; - $rootClass = $this->getMetadataForDqlAlias($rootAlias); - $identifierFieldName = $rootClass->getSingleIdentifierFieldName(); - - return PersisterHelper::getTypeOfField( - $identifierFieldName, - $rootClass, - $this->getQuery() - ->getEntityManager(), - )[0]; - } -} diff --git a/vendor/doctrine/orm/src/Tools/Pagination/RowNumberOverFunction.php b/vendor/doctrine/orm/src/Tools/Pagination/RowNumberOverFunction.php deleted file mode 100644 index a0fdd01..0000000 --- a/vendor/doctrine/orm/src/Tools/Pagination/RowNumberOverFunction.php +++ /dev/null @@ -1,40 +0,0 @@ -walkOrderByClause( - $this->orderByClause, - )) . ')'; - } - - /** - * @throws RowNumberOverFunctionNotEnabled - * - * @inheritdoc - */ - public function parse(Parser $parser): void - { - throw RowNumberOverFunctionNotEnabled::create(); - } -} diff --git a/vendor/doctrine/orm/src/Tools/Pagination/WhereInWalker.php b/vendor/doctrine/orm/src/Tools/Pagination/WhereInWalker.php deleted file mode 100644 index 01741ca..0000000 --- a/vendor/doctrine/orm/src/Tools/Pagination/WhereInWalker.php +++ /dev/null @@ -1,116 +0,0 @@ -fromClause->identificationVariableDeclarations; - - if (count($from) > 1) { - throw new RuntimeException('Cannot count query which selects two FROM components, cannot make distinction'); - } - - $fromRoot = reset($from); - $rootAlias = $fromRoot->rangeVariableDeclaration->aliasIdentificationVariable; - $rootClass = $this->getMetadataForDqlAlias($rootAlias); - $identifierFieldName = $rootClass->getSingleIdentifierFieldName(); - - $pathType = PathExpression::TYPE_STATE_FIELD; - if (isset($rootClass->associationMappings[$identifierFieldName])) { - $pathType = PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION; - } - - $pathExpression = new PathExpression(PathExpression::TYPE_STATE_FIELD | PathExpression::TYPE_SINGLE_VALUED_ASSOCIATION, $rootAlias, $identifierFieldName); - $pathExpression->type = $pathType; - - $hasIds = $this->_getQuery()->getHint(self::HINT_PAGINATOR_HAS_IDS); - - if ($hasIds) { - $arithmeticExpression = new ArithmeticExpression(); - $arithmeticExpression->simpleArithmeticExpression = new SimpleArithmeticExpression( - [$pathExpression], - ); - $expression = new InListExpression( - $arithmeticExpression, - [new InputParameter(':' . self::PAGINATOR_ID_ALIAS)], - ); - } else { - $expression = new NullComparisonExpression($pathExpression); - } - - $conditionalPrimary = new ConditionalPrimary(); - $conditionalPrimary->simpleConditionalExpression = $expression; - if ($selectStatement->whereClause) { - if ($selectStatement->whereClause->conditionalExpression instanceof ConditionalTerm) { - $selectStatement->whereClause->conditionalExpression->conditionalFactors[] = $conditionalPrimary; - } elseif ($selectStatement->whereClause->conditionalExpression instanceof ConditionalPrimary) { - $selectStatement->whereClause->conditionalExpression = new ConditionalExpression( - [ - new ConditionalTerm( - [ - $selectStatement->whereClause->conditionalExpression, - $conditionalPrimary, - ], - ), - ], - ); - } else { - $tmpPrimary = new ConditionalPrimary(); - $tmpPrimary->conditionalExpression = $selectStatement->whereClause->conditionalExpression; - $selectStatement->whereClause->conditionalExpression = new ConditionalTerm( - [ - $tmpPrimary, - $conditionalPrimary, - ], - ); - } - } else { - $selectStatement->whereClause = new WhereClause( - new ConditionalExpression( - [new ConditionalTerm([$conditionalPrimary])], - ), - ); - } - } -} diff --git a/vendor/doctrine/orm/src/Tools/ResolveTargetEntityListener.php b/vendor/doctrine/orm/src/Tools/ResolveTargetEntityListener.php deleted file mode 100644 index 9e48521..0000000 --- a/vendor/doctrine/orm/src/Tools/ResolveTargetEntityListener.php +++ /dev/null @@ -1,117 +0,0 @@ - $mapping - */ - public function addResolveTargetEntity(string $originalEntity, string $newEntity, array $mapping): void - { - $mapping['targetEntity'] = ltrim($newEntity, '\\'); - $this->resolveTargetEntities[ltrim($originalEntity, '\\')] = $mapping; - } - - /** @internal this is an event callback, and should not be called directly */ - public function onClassMetadataNotFound(OnClassMetadataNotFoundEventArgs $args): void - { - if (array_key_exists($args->getClassName(), $this->resolveTargetEntities)) { - $args->setFoundMetadata( - $args - ->getObjectManager() - ->getClassMetadata($this->resolveTargetEntities[$args->getClassName()]['targetEntity']), - ); - } - } - - /** - * Processes event and resolves new target entity names. - * - * @internal this is an event callback, and should not be called directly - */ - public function loadClassMetadata(LoadClassMetadataEventArgs $args): void - { - $cm = $args->getClassMetadata(); - - foreach ($cm->associationMappings as $mapping) { - if (isset($this->resolveTargetEntities[$mapping->targetEntity])) { - $this->remapAssociation($cm, $mapping); - } - } - - foreach ($this->resolveTargetEntities as $interface => $data) { - if ($data['targetEntity'] === $cm->getName()) { - $args->getEntityManager()->getMetadataFactory()->setMetadataFor($interface, $cm); - } - } - - foreach ($cm->discriminatorMap as $value => $class) { - if (isset($this->resolveTargetEntities[$class])) { - $cm->addDiscriminatorMapClass($value, $this->resolveTargetEntities[$class]['targetEntity']); - } - } - } - - private function remapAssociation(ClassMetadata $classMetadata, AssociationMapping $mapping): void - { - $newMapping = $this->resolveTargetEntities[$mapping->targetEntity]; - $newMapping = array_replace_recursive( - $mapping->toArray(), - $newMapping, - ); - $newMapping['fieldName'] = $mapping->fieldName; - - unset($classMetadata->associationMappings[$mapping->fieldName]); - - switch ($mapping->type()) { - case ClassMetadata::MANY_TO_MANY: - $classMetadata->mapManyToMany($newMapping); - break; - case ClassMetadata::MANY_TO_ONE: - $classMetadata->mapManyToOne($newMapping); - break; - case ClassMetadata::ONE_TO_MANY: - $classMetadata->mapOneToMany($newMapping); - break; - case ClassMetadata::ONE_TO_ONE: - $classMetadata->mapOneToOne($newMapping); - break; - } - } -} diff --git a/vendor/doctrine/orm/src/Tools/SchemaTool.php b/vendor/doctrine/orm/src/Tools/SchemaTool.php deleted file mode 100644 index 42b52df..0000000 --- a/vendor/doctrine/orm/src/Tools/SchemaTool.php +++ /dev/null @@ -1,932 +0,0 @@ -ClassMetadata class descriptors. - * - * @link www.doctrine-project.org - */ -class SchemaTool -{ - private const KNOWN_COLUMN_OPTIONS = ['comment', 'unsigned', 'fixed', 'default']; - - private readonly AbstractPlatform $platform; - private readonly QuoteStrategy $quoteStrategy; - private readonly AbstractSchemaManager $schemaManager; - - /** - * Initializes a new SchemaTool instance that uses the connection of the - * provided EntityManager. - */ - public function __construct(private readonly EntityManagerInterface $em) - { - $this->platform = $em->getConnection()->getDatabasePlatform(); - $this->quoteStrategy = $em->getConfiguration()->getQuoteStrategy(); - $this->schemaManager = $em->getConnection()->createSchemaManager(); - } - - /** - * Creates the database schema for the given array of ClassMetadata instances. - * - * @psalm-param list $classes - * - * @throws ToolsException - */ - public function createSchema(array $classes): void - { - $createSchemaSql = $this->getCreateSchemaSql($classes); - $conn = $this->em->getConnection(); - - foreach ($createSchemaSql as $sql) { - try { - $conn->executeStatement($sql); - } catch (Throwable $e) { - throw ToolsException::schemaToolFailure($sql, $e); - } - } - } - - /** - * Gets the list of DDL statements that are required to create the database schema for - * the given list of ClassMetadata instances. - * - * @psalm-param list $classes - * - * @return list The SQL statements needed to create the schema for the classes. - */ - public function getCreateSchemaSql(array $classes): array - { - $schema = $this->getSchemaFromMetadata($classes); - - return $schema->toSql($this->platform); - } - - /** - * Detects instances of ClassMetadata that don't need to be processed in the SchemaTool context. - * - * @psalm-param array $processedClasses - */ - private function processingNotRequired( - ClassMetadata $class, - array $processedClasses, - ): bool { - return isset($processedClasses[$class->name]) || - $class->isMappedSuperclass || - $class->isEmbeddedClass || - ($class->isInheritanceTypeSingleTable() && $class->name !== $class->rootEntityName) || - in_array($class->name, $this->em->getConfiguration()->getSchemaIgnoreClasses()); - } - - /** - * Resolves fields in index mapping to column names - * - * @param mixed[] $indexData index or unique constraint data - * - * @return list Column names from combined fields and columns mappings - */ - private function getIndexColumns(ClassMetadata $class, array $indexData): array - { - $columns = []; - - if ( - isset($indexData['columns'], $indexData['fields']) - || ( - ! isset($indexData['columns']) - && ! isset($indexData['fields']) - ) - ) { - throw MappingException::invalidIndexConfiguration( - (string) $class, - $indexData['name'] ?? 'unnamed', - ); - } - - if (isset($indexData['columns'])) { - $columns = $indexData['columns']; - } - - if (isset($indexData['fields'])) { - foreach ($indexData['fields'] as $fieldName) { - if ($class->hasField($fieldName)) { - $columns[] = $this->quoteStrategy->getColumnName($fieldName, $class, $this->platform); - } elseif ($class->hasAssociation($fieldName)) { - $assoc = $class->getAssociationMapping($fieldName); - assert($assoc->isToOneOwningSide()); - foreach ($assoc->joinColumns as $joinColumn) { - $columns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - } - } - } - } - - return $columns; - } - - /** - * Creates a Schema instance from a given set of metadata classes. - * - * @psalm-param list $classes - * - * @throws NotSupported - */ - public function getSchemaFromMetadata(array $classes): Schema - { - // Reminder for processed classes, used for hierarchies - $processedClasses = []; - $eventManager = $this->em->getEventManager(); - $metadataSchemaConfig = $this->schemaManager->createSchemaConfig(); - - $schema = new Schema([], [], $metadataSchemaConfig); - - $addedFks = []; - $blacklistedFks = []; - - foreach ($classes as $class) { - if ($this->processingNotRequired($class, $processedClasses)) { - continue; - } - - $table = $schema->createTable($this->quoteStrategy->getTableName($class, $this->platform)); - - if ($class->isInheritanceTypeSingleTable()) { - $this->gatherColumns($class, $table); - $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); - - // Add the discriminator column - $this->addDiscriminatorColumnDefinition($class, $table); - - // Aggregate all the information from all classes in the hierarchy - foreach ($class->parentClasses as $parentClassName) { - // Parent class information is already contained in this class - $processedClasses[$parentClassName] = true; - } - - foreach ($class->subClasses as $subClassName) { - $subClass = $this->em->getClassMetadata($subClassName); - $this->gatherColumns($subClass, $table); - $this->gatherRelationsSql($subClass, $table, $schema, $addedFks, $blacklistedFks); - $processedClasses[$subClassName] = true; - } - } elseif ($class->isInheritanceTypeJoined()) { - // Add all non-inherited fields as columns - foreach ($class->fieldMappings as $fieldName => $mapping) { - if (! isset($mapping->inherited)) { - $this->gatherColumn($class, $mapping, $table); - } - } - - $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); - - // Add the discriminator column only to the root table - if ($class->name === $class->rootEntityName) { - $this->addDiscriminatorColumnDefinition($class, $table); - } else { - // Add an ID FK column to child tables - $pkColumns = []; - $inheritedKeyColumns = []; - - foreach ($class->identifier as $identifierField) { - if (isset($class->fieldMappings[$identifierField]->inherited)) { - $idMapping = $class->fieldMappings[$identifierField]; - $this->gatherColumn($class, $idMapping, $table); - $columnName = $this->quoteStrategy->getColumnName( - $identifierField, - $class, - $this->platform, - ); - // TODO: This seems rather hackish, can we optimize it? - $table->getColumn($columnName)->setAutoincrement(false); - - $pkColumns[] = $columnName; - $inheritedKeyColumns[] = $columnName; - - continue; - } - - if (isset($class->associationMappings[$identifierField]->inherited)) { - $idMapping = $class->associationMappings[$identifierField]; - assert($idMapping->isToOneOwningSide()); - - $targetEntity = current( - array_filter( - $classes, - static fn (ClassMetadata $class): bool => $class->name === $idMapping->targetEntity, - ), - ); - - foreach ($idMapping->joinColumns as $joinColumn) { - if (isset($targetEntity->fieldMappings[$joinColumn->referencedColumnName])) { - $columnName = $this->quoteStrategy->getJoinColumnName( - $joinColumn, - $class, - $this->platform, - ); - - $pkColumns[] = $columnName; - $inheritedKeyColumns[] = $columnName; - } - } - } - } - - if ($inheritedKeyColumns !== []) { - // Add a FK constraint on the ID column - $table->addForeignKeyConstraint( - $this->quoteStrategy->getTableName( - $this->em->getClassMetadata($class->rootEntityName), - $this->platform, - ), - $inheritedKeyColumns, - $inheritedKeyColumns, - ['onDelete' => 'CASCADE'], - ); - } - - if ($pkColumns !== []) { - $table->setPrimaryKey($pkColumns); - } - } - } else { - $this->gatherColumns($class, $table); - $this->gatherRelationsSql($class, $table, $schema, $addedFks, $blacklistedFks); - } - - $pkColumns = []; - - foreach ($class->identifier as $identifierField) { - if (isset($class->fieldMappings[$identifierField])) { - $pkColumns[] = $this->quoteStrategy->getColumnName($identifierField, $class, $this->platform); - } elseif (isset($class->associationMappings[$identifierField])) { - $assoc = $class->associationMappings[$identifierField]; - assert($assoc->isToOneOwningSide()); - - foreach ($assoc->joinColumns as $joinColumn) { - $pkColumns[] = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - } - } - } - - if (! $table->hasIndex('primary')) { - $table->setPrimaryKey($pkColumns); - } - - // there can be unique indexes automatically created for join column - // if join column is also primary key we should keep only primary key on this column - // so, remove indexes overruled by primary key - $primaryKey = $table->getIndex('primary'); - - foreach ($table->getIndexes() as $idxKey => $existingIndex) { - if ($primaryKey->overrules($existingIndex)) { - $table->dropIndex($idxKey); - } - } - - if (isset($class->table['indexes'])) { - foreach ($class->table['indexes'] as $indexName => $indexData) { - if (! isset($indexData['flags'])) { - $indexData['flags'] = []; - } - - $table->addIndex( - $this->getIndexColumns($class, $indexData), - is_numeric($indexName) ? null : $indexName, - (array) $indexData['flags'], - $indexData['options'] ?? [], - ); - } - } - - if (isset($class->table['uniqueConstraints'])) { - foreach ($class->table['uniqueConstraints'] as $indexName => $indexData) { - $uniqIndex = new Index('tmp__' . $indexName, $this->getIndexColumns($class, $indexData), true, false, [], $indexData['options'] ?? []); - - foreach ($table->getIndexes() as $tableIndexName => $tableIndex) { - if ($tableIndex->isFulfilledBy($uniqIndex)) { - $table->dropIndex($tableIndexName); - break; - } - } - - $table->addUniqueIndex($uniqIndex->getColumns(), is_numeric($indexName) ? null : $indexName, $indexData['options'] ?? []); - } - } - - if (isset($class->table['options'])) { - foreach ($class->table['options'] as $key => $val) { - $table->addOption($key, $val); - } - } - - $processedClasses[$class->name] = true; - - if ($class->isIdGeneratorSequence() && $class->name === $class->rootEntityName) { - $seqDef = $class->sequenceGeneratorDefinition; - $quotedName = $this->quoteStrategy->getSequenceName($seqDef, $class, $this->platform); - if (! $schema->hasSequence($quotedName)) { - $schema->createSequence( - $quotedName, - (int) $seqDef['allocationSize'], - (int) $seqDef['initialValue'], - ); - } - } - - if ($eventManager->hasListeners(ToolEvents::postGenerateSchemaTable)) { - $eventManager->dispatchEvent( - ToolEvents::postGenerateSchemaTable, - new GenerateSchemaTableEventArgs($class, $schema, $table), - ); - } - } - - if ($eventManager->hasListeners(ToolEvents::postGenerateSchema)) { - $eventManager->dispatchEvent( - ToolEvents::postGenerateSchema, - new GenerateSchemaEventArgs($this->em, $schema), - ); - } - - return $schema; - } - - /** - * Gets a portable column definition as required by the DBAL for the discriminator - * column of a class. - */ - private function addDiscriminatorColumnDefinition(ClassMetadata $class, Table $table): void - { - $discrColumn = $class->discriminatorColumn; - assert($discrColumn !== null); - - if (strtolower($discrColumn->type) === 'string' && ! isset($discrColumn->length)) { - $discrColumn->type = 'string'; - $discrColumn->length = 255; - } - - $options = [ - 'length' => $discrColumn->length ?? null, - 'notnull' => true, - ]; - - if (isset($discrColumn->columnDefinition)) { - $options['columnDefinition'] = $discrColumn->columnDefinition; - } - - $options = $this->gatherColumnOptions($discrColumn) + $options; - $table->addColumn($discrColumn->name, $discrColumn->type, $options); - } - - /** - * Gathers the column definitions as required by the DBAL of all field mappings - * found in the given class. - */ - private function gatherColumns(ClassMetadata $class, Table $table): void - { - $pkColumns = []; - - foreach ($class->fieldMappings as $mapping) { - if ($class->isInheritanceTypeSingleTable() && isset($mapping->inherited)) { - continue; - } - - $this->gatherColumn($class, $mapping, $table); - - if ($class->isIdentifier($mapping->fieldName)) { - $pkColumns[] = $this->quoteStrategy->getColumnName($mapping->fieldName, $class, $this->platform); - } - } - } - - /** - * Creates a column definition as required by the DBAL from an ORM field mapping definition. - * - * @param ClassMetadata $class The class that owns the field mapping. - * @psalm-param FieldMapping $mapping The field mapping. - */ - private function gatherColumn( - ClassMetadata $class, - FieldMapping $mapping, - Table $table, - ): void { - $columnName = $this->quoteStrategy->getColumnName($mapping->fieldName, $class, $this->platform); - $columnType = $mapping->type; - - $options = []; - $options['length'] = $mapping->length ?? null; - $options['notnull'] = isset($mapping->nullable) ? ! $mapping->nullable : true; - if ($class->isInheritanceTypeSingleTable() && $class->parentClasses) { - $options['notnull'] = false; - } - - $options['platformOptions'] = []; - $options['platformOptions']['version'] = $class->isVersioned && $class->versionField === $mapping->fieldName; - - if (strtolower($columnType) === 'string' && $options['length'] === null) { - $options['length'] = 255; - } - - if (isset($mapping->precision)) { - $options['precision'] = $mapping->precision; - } - - if (isset($mapping->scale)) { - $options['scale'] = $mapping->scale; - } - - if (isset($mapping->default)) { - $options['default'] = $mapping->default; - } - - if (isset($mapping->columnDefinition)) { - $options['columnDefinition'] = $mapping->columnDefinition; - } - - // the 'default' option can be overwritten here - $options = $this->gatherColumnOptions($mapping) + $options; - - if ($class->isIdGeneratorIdentity() && $class->getIdentifierFieldNames() === [$mapping->fieldName]) { - $options['autoincrement'] = true; - } - - if ($class->isInheritanceTypeJoined() && $class->name !== $class->rootEntityName) { - $options['autoincrement'] = false; - } - - if ($table->hasColumn($columnName)) { - // required in some inheritance scenarios - $table->modifyColumn($columnName, $options); - } else { - $table->addColumn($columnName, $columnType, $options); - } - - $isUnique = $mapping->unique ?? false; - if ($isUnique) { - $table->addUniqueIndex([$columnName]); - } - } - - /** - * Gathers the SQL for properly setting up the relations of the given class. - * This includes the SQL for foreign key constraints and join tables. - * - * @psalm-param array - * }> $addedFks - * @psalm-param array $blacklistedFks - * - * @throws NotSupported - */ - private function gatherRelationsSql( - ClassMetadata $class, - Table $table, - Schema $schema, - array &$addedFks, - array &$blacklistedFks, - ): void { - foreach ($class->associationMappings as $id => $mapping) { - if (isset($mapping->inherited) && ! in_array($id, $class->identifier, true)) { - continue; - } - - $foreignClass = $this->em->getClassMetadata($mapping->targetEntity); - - if ($mapping->isToOneOwningSide()) { - $primaryKeyColumns = []; // PK is unnecessary for this relation-type - - $this->gatherRelationJoinColumns( - $mapping->joinColumns, - $table, - $foreignClass, - $mapping, - $primaryKeyColumns, - $addedFks, - $blacklistedFks, - ); - } elseif ($mapping instanceof ManyToManyOwningSideMapping) { - // create join table - $joinTable = $mapping->joinTable; - - $theJoinTable = $schema->createTable( - $this->quoteStrategy->getJoinTableName($mapping, $foreignClass, $this->platform), - ); - - foreach ($joinTable->options as $key => $val) { - $theJoinTable->addOption($key, $val); - } - - $primaryKeyColumns = []; - - // Build first FK constraint (relation table => source table) - $this->gatherRelationJoinColumns( - $joinTable->joinColumns, - $theJoinTable, - $class, - $mapping, - $primaryKeyColumns, - $addedFks, - $blacklistedFks, - ); - - // Build second FK constraint (relation table => target table) - $this->gatherRelationJoinColumns( - $joinTable->inverseJoinColumns, - $theJoinTable, - $foreignClass, - $mapping, - $primaryKeyColumns, - $addedFks, - $blacklistedFks, - ); - - $theJoinTable->setPrimaryKey($primaryKeyColumns); - } - } - } - - /** - * Gets the class metadata that is responsible for the definition of the referenced column name. - * - * Previously this was a simple task, but with DDC-117 this problem is actually recursive. If its - * not a simple field, go through all identifier field names that are associations recursively and - * find that referenced column name. - * - * TODO: Is there any way to make this code more pleasing? - * - * @psalm-return array{ClassMetadata, string}|null - */ - private function getDefiningClass(ClassMetadata $class, string $referencedColumnName): array|null - { - $referencedFieldName = $class->getFieldName($referencedColumnName); - - if ($class->hasField($referencedFieldName)) { - return [$class, $referencedFieldName]; - } - - if (in_array($referencedColumnName, $class->getIdentifierColumnNames(), true)) { - // it seems to be an entity as foreign key - foreach ($class->getIdentifierFieldNames() as $fieldName) { - if ( - $class->hasAssociation($fieldName) - && $class->getSingleAssociationJoinColumnName($fieldName) === $referencedColumnName - ) { - return $this->getDefiningClass( - $this->em->getClassMetadata($class->associationMappings[$fieldName]->targetEntity), - $class->getSingleAssociationReferencedJoinColumnName($fieldName), - ); - } - } - } - - return null; - } - - /** - * Gathers columns and fk constraints that are required for one part of relationship. - * - * @psalm-param list $joinColumns - * @psalm-param list $primaryKeyColumns - * @psalm-param array - * }> $addedFks - * @psalm-param array $blacklistedFks - * - * @throws MissingColumnException - */ - private function gatherRelationJoinColumns( - array $joinColumns, - Table $theJoinTable, - ClassMetadata $class, - AssociationMapping $mapping, - array &$primaryKeyColumns, - array &$addedFks, - array &$blacklistedFks, - ): void { - $localColumns = []; - $foreignColumns = []; - $fkOptions = []; - $foreignTableName = $this->quoteStrategy->getTableName($class, $this->platform); - $uniqueConstraints = []; - - foreach ($joinColumns as $joinColumn) { - [$definingClass, $referencedFieldName] = $this->getDefiningClass( - $class, - $joinColumn->referencedColumnName, - ); - - if (! $definingClass) { - throw MissingColumnException::fromColumnSourceAndTarget( - $joinColumn->referencedColumnName, - $mapping->sourceEntity, - $mapping->targetEntity, - ); - } - - $quotedColumnName = $this->quoteStrategy->getJoinColumnName($joinColumn, $class, $this->platform); - $quotedRefColumnName = $this->quoteStrategy->getReferencedJoinColumnName( - $joinColumn, - $class, - $this->platform, - ); - - $primaryKeyColumns[] = $quotedColumnName; - $localColumns[] = $quotedColumnName; - $foreignColumns[] = $quotedRefColumnName; - - if (! $theJoinTable->hasColumn($quotedColumnName)) { - // Only add the column to the table if it does not exist already. - // It might exist already if the foreign key is mapped into a regular - // property as well. - - $fieldMapping = $definingClass->getFieldMapping($referencedFieldName); - - $columnOptions = ['notnull' => false]; - - if (isset($joinColumn->columnDefinition)) { - $columnOptions['columnDefinition'] = $joinColumn->columnDefinition; - } elseif (isset($fieldMapping->columnDefinition)) { - $columnOptions['columnDefinition'] = $fieldMapping->columnDefinition; - } - - if (isset($joinColumn->nullable)) { - $columnOptions['notnull'] = ! $joinColumn->nullable; - } - - $columnOptions += $this->gatherColumnOptions($fieldMapping); - - if (isset($fieldMapping->length)) { - $columnOptions['length'] = $fieldMapping->length; - } - - if ($fieldMapping->type === 'decimal') { - $columnOptions['scale'] = $fieldMapping->scale; - $columnOptions['precision'] = $fieldMapping->precision; - } - - $columnOptions = $this->gatherColumnOptions($joinColumn) + $columnOptions; - - $theJoinTable->addColumn($quotedColumnName, $fieldMapping->type, $columnOptions); - } - - if (isset($joinColumn->unique) && $joinColumn->unique === true) { - $uniqueConstraints[] = ['columns' => [$quotedColumnName]]; - } - - if (isset($joinColumn->onDelete)) { - $fkOptions['onDelete'] = $joinColumn->onDelete; - } - } - - // Prefer unique constraints over implicit simple indexes created for foreign keys. - // Also avoids index duplication. - foreach ($uniqueConstraints as $indexName => $unique) { - $theJoinTable->addUniqueIndex($unique['columns'], is_numeric($indexName) ? null : $indexName); - } - - $compositeName = $theJoinTable->getName() . '.' . implode('', $localColumns); - if ( - isset($addedFks[$compositeName]) - && ($foreignTableName !== $addedFks[$compositeName]['foreignTableName'] - || 0 < count(array_diff($foreignColumns, $addedFks[$compositeName]['foreignColumns']))) - ) { - foreach ($theJoinTable->getForeignKeys() as $fkName => $key) { - if ( - count(array_diff($key->getLocalColumns(), $localColumns)) === 0 - && (($key->getForeignTableName() !== $foreignTableName) - || 0 < count(array_diff($key->getForeignColumns(), $foreignColumns))) - ) { - $theJoinTable->removeForeignKey($fkName); - break; - } - } - - $blacklistedFks[$compositeName] = true; - } elseif (! isset($blacklistedFks[$compositeName])) { - $addedFks[$compositeName] = ['foreignTableName' => $foreignTableName, 'foreignColumns' => $foreignColumns]; - $theJoinTable->addForeignKeyConstraint( - $foreignTableName, - $localColumns, - $foreignColumns, - $fkOptions, - ); - } - } - - /** @return mixed[] */ - private function gatherColumnOptions(JoinColumnMapping|FieldMapping|DiscriminatorColumnMapping $mapping): array - { - $mappingOptions = $mapping->options ?? []; - - if (isset($mapping->enumType)) { - $mappingOptions['enumType'] = $mapping->enumType; - } - - if (($mappingOptions['default'] ?? null) instanceof BackedEnum) { - $mappingOptions['default'] = $mappingOptions['default']->value; - } - - if (empty($mappingOptions)) { - return []; - } - - $options = array_intersect_key($mappingOptions, array_flip(self::KNOWN_COLUMN_OPTIONS)); - $options['platformOptions'] = array_diff_key($mappingOptions, $options); - - return $options; - } - - /** - * Drops the database schema for the given classes. - * - * In any way when an exception is thrown it is suppressed since drop was - * issued for all classes of the schema and some probably just don't exist. - * - * @psalm-param list $classes - */ - public function dropSchema(array $classes): void - { - $dropSchemaSql = $this->getDropSchemaSQL($classes); - $conn = $this->em->getConnection(); - - foreach ($dropSchemaSql as $sql) { - try { - $conn->executeStatement($sql); - } catch (Throwable) { - // ignored - } - } - } - - /** - * Drops all elements in the database of the current connection. - */ - public function dropDatabase(): void - { - $dropSchemaSql = $this->getDropDatabaseSQL(); - $conn = $this->em->getConnection(); - - foreach ($dropSchemaSql as $sql) { - $conn->executeStatement($sql); - } - } - - /** - * Gets the SQL needed to drop the database schema for the connections database. - * - * @return list - */ - public function getDropDatabaseSQL(): array - { - return $this->schemaManager - ->introspectSchema() - ->toDropSql($this->platform); - } - - /** - * Gets SQL to drop the tables defined by the passed classes. - * - * @psalm-param list $classes - * - * @return list - */ - public function getDropSchemaSQL(array $classes): array - { - $schema = $this->getSchemaFromMetadata($classes); - - $deployedSchema = $this->schemaManager->introspectSchema(); - - foreach ($schema->getTables() as $table) { - if (! $deployedSchema->hasTable($table->getName())) { - $schema->dropTable($table->getName()); - } - } - - if ($this->platform->supportsSequences()) { - foreach ($schema->getSequences() as $sequence) { - if (! $deployedSchema->hasSequence($sequence->getName())) { - $schema->dropSequence($sequence->getName()); - } - } - - foreach ($schema->getTables() as $table) { - $primaryKey = $table->getPrimaryKey(); - if ($primaryKey === null) { - continue; - } - - $columns = $primaryKey->getColumns(); - if (count($columns) === 1) { - $checkSequence = $table->getName() . '_' . $columns[0] . '_seq'; - if ($deployedSchema->hasSequence($checkSequence) && ! $schema->hasSequence($checkSequence)) { - $schema->createSequence($checkSequence); - } - } - } - } - - return $schema->toDropSql($this->platform); - } - - /** - * Updates the database schema of the given classes by comparing the ClassMetadata - * instances to the current database schema that is inspected. - * - * @param mixed[] $classes - */ - public function updateSchema(array $classes): void - { - $conn = $this->em->getConnection(); - - foreach ($this->getUpdateSchemaSql($classes) as $sql) { - $conn->executeStatement($sql); - } - } - - /** - * Gets the sequence of SQL statements that need to be performed in order - * to bring the given class mappings in-synch with the relational schema. - * - * @param list $classes The classes to consider. - * - * @return list The sequence of SQL statements. - */ - public function getUpdateSchemaSql(array $classes): array - { - $toSchema = $this->getSchemaFromMetadata($classes); - $fromSchema = $this->createSchemaForComparison($toSchema); - $comparator = $this->schemaManager->createComparator(); - $schemaDiff = $comparator->compareSchemas($fromSchema, $toSchema); - - return $this->platform->getAlterSchemaSQL($schemaDiff); - } - - /** - * Creates the schema from the database, ensuring tables from the target schema are whitelisted for comparison. - */ - private function createSchemaForComparison(Schema $toSchema): Schema - { - $connection = $this->em->getConnection(); - - // backup schema assets filter - $config = $connection->getConfiguration(); - $previousFilter = $config->getSchemaAssetsFilter(); - - if ($previousFilter === null) { - return $this->schemaManager->introspectSchema(); - } - - // whitelist assets we already know about in $toSchema, use the existing filter otherwise - $config->setSchemaAssetsFilter(static function ($asset) use ($previousFilter, $toSchema): bool { - $assetName = $asset instanceof AbstractAsset ? $asset->getName() : $asset; - - return $toSchema->hasTable($assetName) || $toSchema->hasSequence($assetName) || $previousFilter($asset); - }); - - try { - return $this->schemaManager->introspectSchema(); - } finally { - // restore schema assets filter - $config->setSchemaAssetsFilter($previousFilter); - } - } -} diff --git a/vendor/doctrine/orm/src/Tools/SchemaValidator.php b/vendor/doctrine/orm/src/Tools/SchemaValidator.php deleted file mode 100644 index fdfc003..0000000 --- a/vendor/doctrine/orm/src/Tools/SchemaValidator.php +++ /dev/null @@ -1,443 +0,0 @@ - ['string'], - BigIntType::class => ['int', 'string'], - BooleanType::class => ['bool'], - DecimalType::class => ['string'], - FloatType::class => ['float'], - GuidType::class => ['string'], - IntegerType::class => ['int'], - JsonType::class => ['array'], - SimpleArrayType::class => ['array'], - SmallIntType::class => ['int'], - StringType::class => ['string'], - TextType::class => ['string'], - ]; - - public function __construct( - private readonly EntityManagerInterface $em, - private readonly bool $validatePropertyTypes = true, - ) { - } - - /** - * Checks the internal consistency of all mapping files. - * - * There are several checks that can't be done at runtime or are too expensive, which can be verified - * with this command. For example: - * - * 1. Check if a relation with "mappedBy" is actually connected to that specified field. - * 2. Check if "mappedBy" and "inversedBy" are consistent to each other. - * 3. Check if "referencedColumnName" attributes are really pointing to primary key columns. - * - * @psalm-return array> - */ - public function validateMapping(): array - { - $errors = []; - $cmf = $this->em->getMetadataFactory(); - $classes = $cmf->getAllMetadata(); - - foreach ($classes as $class) { - $ce = $this->validateClass($class); - if ($ce) { - $errors[$class->name] = $ce; - } - } - - return $errors; - } - - /** - * Validates a single class of the current. - * - * @return string[] - * @psalm-return list - */ - public function validateClass(ClassMetadata $class): array - { - $ce = []; - $cmf = $this->em->getMetadataFactory(); - - foreach ($class->fieldMappings as $fieldName => $mapping) { - if (! Type::hasType($mapping->type)) { - $ce[] = "The field '" . $class->name . '#' . $fieldName . "' uses a non-existent type '" . $mapping->type . "'."; - } - } - - if ($this->validatePropertyTypes) { - array_push($ce, ...$this->validatePropertiesTypes($class)); - } - - foreach ($class->associationMappings as $fieldName => $assoc) { - if (! class_exists($assoc->targetEntity) || $cmf->isTransient($assoc->targetEntity)) { - $ce[] = "The target entity '" . $assoc->targetEntity . "' specified on " . $class->name . '#' . $fieldName . ' is unknown or not an entity.'; - - return $ce; - } - - $targetMetadata = $cmf->getMetadataFor($assoc->targetEntity); - - if ($targetMetadata->isMappedSuperclass) { - $ce[] = "The target entity '" . $assoc->targetEntity . "' specified on " . $class->name . '#' . $fieldName . ' is a mapped superclass. This is not possible since there is no table that a foreign key could refer to.'; - - return $ce; - } - - if (isset($assoc->id) && $targetMetadata->containsForeignIdentifier) { - $ce[] = "Cannot map association '" . $class->name . '#' . $fieldName . ' as identifier, because ' . - "the target entity '" . $targetMetadata->name . "' also maps an association as identifier."; - } - - if (! $assoc->isOwningSide()) { - if ($targetMetadata->hasField($assoc->mappedBy)) { - $ce[] = 'The association ' . $class->name . '#' . $fieldName . ' refers to the owning side ' . - 'field ' . $assoc->targetEntity . '#' . $assoc->mappedBy . ' which is not defined as association, but as field.'; - } - - if (! $targetMetadata->hasAssociation($assoc->mappedBy)) { - $ce[] = 'The association ' . $class->name . '#' . $fieldName . ' refers to the owning side ' . - 'field ' . $assoc->targetEntity . '#' . $assoc->mappedBy . ' which does not exist.'; - } elseif ($targetMetadata->associationMappings[$assoc->mappedBy]->inversedBy === null) { - $ce[] = 'The field ' . $class->name . '#' . $fieldName . ' is on the inverse side of a ' . - 'bi-directional relationship, but the specified mappedBy association on the target-entity ' . - $assoc->targetEntity . '#' . $assoc->mappedBy . ' does not contain the required ' . - "'inversedBy=\"" . $fieldName . "\"' attribute."; - } elseif ($targetMetadata->associationMappings[$assoc->mappedBy]->inversedBy !== $fieldName) { - $ce[] = 'The mappings ' . $class->name . '#' . $fieldName . ' and ' . - $assoc->targetEntity . '#' . $assoc->mappedBy . ' are ' . - 'inconsistent with each other.'; - } - } - - if ($assoc->isOwningSide() && $assoc->inversedBy !== null) { - if ($targetMetadata->hasField($assoc->inversedBy)) { - $ce[] = 'The association ' . $class->name . '#' . $fieldName . ' refers to the inverse side ' . - 'field ' . $assoc->targetEntity . '#' . $assoc->inversedBy . ' which is not defined as association.'; - } - - if (! $targetMetadata->hasAssociation($assoc->inversedBy)) { - $ce[] = 'The association ' . $class->name . '#' . $fieldName . ' refers to the inverse side ' . - 'field ' . $assoc->targetEntity . '#' . $assoc->inversedBy . ' which does not exist.'; - } elseif ($targetMetadata->associationMappings[$assoc->inversedBy]->isOwningSide()) { - $ce[] = 'The field ' . $class->name . '#' . $fieldName . ' is on the owning side of a ' . - 'bi-directional relationship, but the specified inversedBy association on the target-entity ' . - $assoc->targetEntity . '#' . $assoc->inversedBy . ' does not contain the required ' . - "'mappedBy=\"" . $fieldName . "\"' attribute."; - } elseif ($targetMetadata->associationMappings[$assoc->inversedBy]->mappedBy !== $fieldName) { - $ce[] = 'The mappings ' . $class->name . '#' . $fieldName . ' and ' . - $assoc->targetEntity . '#' . $assoc->inversedBy . ' are ' . - 'inconsistent with each other.'; - } - - // Verify inverse side/owning side match each other - if (array_key_exists($assoc->inversedBy, $targetMetadata->associationMappings)) { - $targetAssoc = $targetMetadata->associationMappings[$assoc->inversedBy]; - if ($assoc->isOneToOne() && ! $targetAssoc->isOneToOne()) { - $ce[] = 'If association ' . $class->name . '#' . $fieldName . ' is one-to-one, then the inversed ' . - 'side ' . $targetMetadata->name . '#' . $assoc->inversedBy . ' has to be one-to-one as well.'; - } elseif ($assoc->isManyToOne() && ! $targetAssoc->isOneToMany()) { - $ce[] = 'If association ' . $class->name . '#' . $fieldName . ' is many-to-one, then the inversed ' . - 'side ' . $targetMetadata->name . '#' . $assoc->inversedBy . ' has to be one-to-many.'; - } elseif ($assoc->isManyToMany() && ! $targetAssoc->isManyToMany()) { - $ce[] = 'If association ' . $class->name . '#' . $fieldName . ' is many-to-many, then the inversed ' . - 'side ' . $targetMetadata->name . '#' . $assoc->inversedBy . ' has to be many-to-many as well.'; - } - } - } - - if ($assoc->isOwningSide()) { - if ($assoc->isManyToManyOwningSide()) { - $identifierColumns = $class->getIdentifierColumnNames(); - foreach ($assoc->joinTable->joinColumns as $joinColumn) { - if (! in_array($joinColumn->referencedColumnName, $identifierColumns, true)) { - $ce[] = "The referenced column name '" . $joinColumn->referencedColumnName . "' " . - "has to be a primary key column on the target entity class '" . $class->name . "'."; - break; - } - } - - $identifierColumns = $targetMetadata->getIdentifierColumnNames(); - foreach ($assoc->joinTable->inverseJoinColumns as $inverseJoinColumn) { - if (! in_array($inverseJoinColumn->referencedColumnName, $identifierColumns, true)) { - $ce[] = "The referenced column name '" . $inverseJoinColumn->referencedColumnName . "' " . - "has to be a primary key column on the target entity class '" . $targetMetadata->name . "'."; - break; - } - } - - if (count($targetMetadata->getIdentifierColumnNames()) !== count($assoc->joinTable->inverseJoinColumns)) { - $ce[] = "The inverse join columns of the many-to-many table '" . $assoc->joinTable->name . "' " . - "have to contain to ALL identifier columns of the target entity '" . $targetMetadata->name . "', " . - "however '" . implode(', ', array_diff($targetMetadata->getIdentifierColumnNames(), array_values($assoc->relationToTargetKeyColumns))) . - "' are missing."; - } - - if (count($class->getIdentifierColumnNames()) !== count($assoc->joinTable->joinColumns)) { - $ce[] = "The join columns of the many-to-many table '" . $assoc->joinTable->name . "' " . - "have to contain to ALL identifier columns of the source entity '" . $class->name . "', " . - "however '" . implode(', ', array_diff($class->getIdentifierColumnNames(), array_values($assoc->relationToSourceKeyColumns))) . - "' are missing."; - } - } elseif ($assoc->isToOneOwningSide()) { - $identifierColumns = $targetMetadata->getIdentifierColumnNames(); - foreach ($assoc->joinColumns as $joinColumn) { - if (! in_array($joinColumn->referencedColumnName, $identifierColumns, true)) { - $ce[] = "The referenced column name '" . $joinColumn->referencedColumnName . "' " . - "has to be a primary key column on the target entity class '" . $targetMetadata->name . "'."; - } - } - - if (count($identifierColumns) !== count($assoc->joinColumns)) { - $ids = []; - - foreach ($assoc->joinColumns as $joinColumn) { - $ids[] = $joinColumn->name; - } - - $ce[] = "The join columns of the association '" . $assoc->fieldName . "' " . - "have to match to ALL identifier columns of the target entity '" . $targetMetadata->name . "', " . - "however '" . implode(', ', array_diff($targetMetadata->getIdentifierColumnNames(), $ids)) . - "' are missing."; - } - } - } - - if ($assoc->isOrdered()) { - foreach ($assoc->orderBy() as $orderField => $orientation) { - if (! $targetMetadata->hasField($orderField) && ! $targetMetadata->hasAssociation($orderField)) { - $ce[] = 'The association ' . $class->name . '#' . $fieldName . ' is ordered by a foreign field ' . - $orderField . ' that is not a field on the target entity ' . $targetMetadata->name . '.'; - continue; - } - - if ($targetMetadata->isCollectionValuedAssociation($orderField)) { - $ce[] = 'The association ' . $class->name . '#' . $fieldName . ' is ordered by a field ' . - $orderField . ' on ' . $targetMetadata->name . ' that is a collection-valued association.'; - continue; - } - - if ($targetMetadata->isAssociationInverseSide($orderField)) { - $ce[] = 'The association ' . $class->name . '#' . $fieldName . ' is ordered by a field ' . - $orderField . ' on ' . $targetMetadata->name . ' that is the inverse side of an association.'; - continue; - } - } - } - } - - if ( - ! $class->isInheritanceTypeNone() - && ! $class->isRootEntity() - && ($class->reflClass !== null && ! $class->reflClass->isAbstract()) - && ! $class->isMappedSuperclass - && array_search($class->name, $class->discriminatorMap, true) === false - ) { - $ce[] = "Entity class '" . $class->name . "' is part of inheritance hierarchy, but is " . - "not mapped in the root entity '" . $class->rootEntityName . "' discriminator map. " . - 'All subclasses must be listed in the discriminator map.'; - } - - foreach ($class->subClasses as $subClass) { - if (! in_array($class->name, class_parents($subClass), true)) { - $ce[] = "According to the discriminator map class '" . $subClass . "' has to be a child " . - "of '" . $class->name . "' but these entities are not related through inheritance."; - } - } - - return $ce; - } - - /** - * Checks if the Database Schema is in sync with the current metadata state. - */ - public function schemaInSyncWithMetadata(): bool - { - return count($this->getUpdateSchemaList()) === 0; - } - - /** - * Returns the list of missing Database Schema updates. - * - * @return array - */ - public function getUpdateSchemaList(): array - { - $schemaTool = new SchemaTool($this->em); - - $allMetadata = $this->em->getMetadataFactory()->getAllMetadata(); - - return $schemaTool->getUpdateSchemaSql($allMetadata); - } - - /** @return list containing the found issues */ - private function validatePropertiesTypes(ClassMetadata $class): array - { - return array_values( - array_filter( - array_map( - function (FieldMapping $fieldMapping) use ($class): string|null { - $fieldName = $fieldMapping->fieldName; - assert(isset($class->reflFields[$fieldName])); - $propertyType = $class->reflFields[$fieldName]->getType(); - - // If the field type is not a built-in type, we cannot check it - if (! Type::hasType($fieldMapping->type)) { - return null; - } - - // If the property type is not a named type, we cannot check it - if (! ($propertyType instanceof ReflectionNamedType) || $propertyType->getName() === 'mixed') { - return null; - } - - $metadataFieldType = $this->findBuiltInType(Type::getType($fieldMapping->type)); - - //If the metadata field type is not a mapped built-in type, we cannot check it - if ($metadataFieldType === null) { - return null; - } - - $propertyType = $propertyType->getName(); - - // If the property type is the same as the metadata field type, we are ok - if (in_array($propertyType, $metadataFieldType, true)) { - return null; - } - - if (is_a($propertyType, BackedEnum::class, true)) { - $backingType = (string) (new ReflectionEnum($propertyType))->getBackingType(); - - if (! in_array($backingType, $metadataFieldType, true)) { - return sprintf( - "The field '%s#%s' has the property type '%s' with a backing type of '%s' that differs from the metadata field type '%s'.", - $class->name, - $fieldName, - $propertyType, - $backingType, - implode('|', $metadataFieldType), - ); - } - - if (! isset($fieldMapping->enumType) || $propertyType === $fieldMapping->enumType) { - return null; - } - - return sprintf( - "The field '%s#%s' has the property type '%s' that differs from the metadata enumType '%s'.", - $class->name, - $fieldName, - $propertyType, - $fieldMapping->enumType, - ); - } - - if ( - isset($fieldMapping->enumType) - && $propertyType !== $fieldMapping->enumType - && interface_exists($propertyType) - && is_a($fieldMapping->enumType, $propertyType, true) - ) { - $backingType = (string) (new ReflectionEnum($fieldMapping->enumType))->getBackingType(); - - if (in_array($backingType, $metadataFieldType, true)) { - return null; - } - - return sprintf( - "The field '%s#%s' has the metadata enumType '%s' with a backing type of '%s' that differs from the metadata field type '%s'.", - $class->name, - $fieldName, - $fieldMapping->enumType, - $backingType, - implode('|', $metadataFieldType), - ); - } - - if ( - $fieldMapping->type === 'json' - && in_array($propertyType, ['string', 'int', 'float', 'bool', 'true', 'false', 'null'], true) - ) { - return null; - } - - return sprintf( - "The field '%s#%s' has the property type '%s' that differs from the metadata field type '%s' returned by the '%s' DBAL type.", - $class->name, - $fieldName, - $propertyType, - implode('|', $metadataFieldType), - $fieldMapping->type, - ); - }, - $class->fieldMappings, - ), - ), - ); - } - - /** - * The exact DBAL type must be used (no subclasses), since consumers of doctrine/orm may have their own - * customization around field types. - * - * @return list|null - */ - private function findBuiltInType(Type $type): array|null - { - $typeName = $type::class; - - return self::BUILTIN_TYPES_MAP[$typeName] ?? null; - } -} diff --git a/vendor/doctrine/orm/src/Tools/ToolEvents.php b/vendor/doctrine/orm/src/Tools/ToolEvents.php deleted file mode 100644 index fac37fa..0000000 --- a/vendor/doctrine/orm/src/Tools/ToolEvents.php +++ /dev/null @@ -1,23 +0,0 @@ -getMessage() . "' while executing DDL: " . $sql, - 0, - $e, - ); - } -} diff --git a/vendor/doctrine/orm/src/TransactionRequiredException.php b/vendor/doctrine/orm/src/TransactionRequiredException.php deleted file mode 100644 index 6114544..0000000 --- a/vendor/doctrine/orm/src/TransactionRequiredException.php +++ /dev/null @@ -1,21 +0,0 @@ -> - */ - private array $identityMap = []; - - /** - * Map of all identifiers of managed entities. - * Keys are object ids (spl_object_id). - * - * @psalm-var array> - */ - private array $entityIdentifiers = []; - - /** - * Map of the original entity data of managed entities. - * Keys are object ids (spl_object_id). This is used for calculating changesets - * at commit time. - * - * Internal note: Note that PHPs "copy-on-write" behavior helps a lot with memory usage. - * A value will only really be copied if the value in the entity is modified - * by the user. - * - * @psalm-var array> - */ - private array $originalEntityData = []; - - /** - * Map of entity changes. Keys are object ids (spl_object_id). - * Filled at the beginning of a commit of the UnitOfWork and cleaned at the end. - * - * @psalm-var array> - */ - private array $entityChangeSets = []; - - /** - * The (cached) states of any known entities. - * Keys are object ids (spl_object_id). - * - * @psalm-var array - */ - private array $entityStates = []; - - /** - * Map of entities that are scheduled for dirty checking at commit time. - * This is only used for entities with a change tracking policy of DEFERRED_EXPLICIT. - * Keys are object ids (spl_object_id). - * - * @psalm-var array> - */ - private array $scheduledForSynchronization = []; - - /** - * A list of all pending entity insertions. - * - * @psalm-var array - */ - private array $entityInsertions = []; - - /** - * A list of all pending entity updates. - * - * @psalm-var array - */ - private array $entityUpdates = []; - - /** - * Any pending extra updates that have been scheduled by persisters. - * - * @psalm-var array}> - */ - private array $extraUpdates = []; - - /** - * A list of all pending entity deletions. - * - * @psalm-var array - */ - private array $entityDeletions = []; - - /** - * New entities that were discovered through relationships that were not - * marked as cascade-persist. During flush, this array is populated and - * then pruned of any entities that were discovered through a valid - * cascade-persist path. (Leftovers cause an error.) - * - * Keys are OIDs, payload is a two-item array describing the association - * and the entity. - * - * @var array indexed by respective object spl_object_id() - */ - private array $nonCascadedNewDetectedEntities = []; - - /** - * All pending collection deletions. - * - * @psalm-var array> - */ - private array $collectionDeletions = []; - - /** - * All pending collection updates. - * - * @psalm-var array> - */ - private array $collectionUpdates = []; - - /** - * List of collections visited during changeset calculation on a commit-phase of a UnitOfWork. - * At the end of the UnitOfWork all these collections will make new snapshots - * of their data. - * - * @psalm-var array> - */ - private array $visitedCollections = []; - - /** - * List of collections visited during the changeset calculation that contain to-be-removed - * entities and need to have keys removed post commit. - * - * Indexed by Collection object ID, which also serves as the key in self::$visitedCollections; - * values are the key names that need to be removed. - * - * @psalm-var array> - */ - private array $pendingCollectionElementRemovals = []; - - /** - * The entity persister instances used to persist entity instances. - * - * @psalm-var array - */ - private array $persisters = []; - - /** - * The collection persister instances used to persist collections. - * - * @psalm-var array - */ - private array $collectionPersisters = []; - - /** - * The EventManager used for dispatching events. - */ - private readonly EventManager $evm; - - /** - * The ListenersInvoker used for dispatching events. - */ - private readonly ListenersInvoker $listenersInvoker; - - /** - * The IdentifierFlattener used for manipulating identifiers - */ - private readonly IdentifierFlattener $identifierFlattener; - - /** - * Orphaned entities that are scheduled for removal. - * - * @psalm-var array - */ - private array $orphanRemovals = []; - - /** - * Read-Only objects are never evaluated - * - * @var array - */ - private array $readOnlyObjects = []; - - /** - * Map of Entity Class-Names and corresponding IDs that should eager loaded when requested. - * - * @psalm-var array> - */ - private array $eagerLoadingEntities = []; - - /** @var array> */ - private array $eagerLoadingCollections = []; - - protected bool $hasCache = false; - - /** - * Helper for handling completion of hydration - */ - private readonly HydrationCompleteHandler $hydrationCompleteHandler; - - /** - * Initializes a new UnitOfWork instance, bound to the given EntityManager. - * - * @param EntityManagerInterface $em The EntityManager that "owns" this UnitOfWork instance. - */ - public function __construct( - private readonly EntityManagerInterface $em, - ) { - $this->evm = $em->getEventManager(); - $this->listenersInvoker = new ListenersInvoker($em); - $this->hasCache = $em->getConfiguration()->isSecondLevelCacheEnabled(); - $this->identifierFlattener = new IdentifierFlattener($this, $em->getMetadataFactory()); - $this->hydrationCompleteHandler = new HydrationCompleteHandler($this->listenersInvoker, $em); - } - - /** - * Commits the UnitOfWork, executing all operations that have been postponed - * up to this point. The state of all managed entities will be synchronized with - * the database. - * - * The operations are executed in the following order: - * - * 1) All entity insertions - * 2) All entity updates - * 3) All collection deletions - * 4) All collection updates - * 5) All entity deletions - * - * @throws Exception - */ - public function commit(): void - { - $connection = $this->em->getConnection(); - - if ($connection instanceof PrimaryReadReplicaConnection) { - $connection->ensureConnectedToPrimary(); - } - - // Raise preFlush - if ($this->evm->hasListeners(Events::preFlush)) { - $this->evm->dispatchEvent(Events::preFlush, new PreFlushEventArgs($this->em)); - } - - // Compute changes done since last commit. - $this->computeChangeSets(); - - if ( - ! ($this->entityInsertions || - $this->entityDeletions || - $this->entityUpdates || - $this->collectionUpdates || - $this->collectionDeletions || - $this->orphanRemovals) - ) { - $this->dispatchOnFlushEvent(); - $this->dispatchPostFlushEvent(); - - $this->postCommitCleanup(); - - return; // Nothing to do. - } - - $this->assertThatThereAreNoUnintentionallyNonPersistedAssociations(); - - if ($this->orphanRemovals) { - foreach ($this->orphanRemovals as $orphan) { - $this->remove($orphan); - } - } - - $this->dispatchOnFlushEvent(); - - $conn = $this->em->getConnection(); - $conn->beginTransaction(); - - try { - // Collection deletions (deletions of complete collections) - foreach ($this->collectionDeletions as $collectionToDelete) { - // Deferred explicit tracked collections can be removed only when owning relation was persisted - $owner = $collectionToDelete->getOwner(); - - if ($this->em->getClassMetadata($owner::class)->isChangeTrackingDeferredImplicit() || $this->isScheduledForDirtyCheck($owner)) { - $this->getCollectionPersister($collectionToDelete->getMapping())->delete($collectionToDelete); - } - } - - if ($this->entityInsertions) { - // Perform entity insertions first, so that all new entities have their rows in the database - // and can be referred to by foreign keys. The commit order only needs to take new entities - // into account (new entities referring to other new entities), since all other types (entities - // with updates or scheduled deletions) are currently not a problem, since they are already - // in the database. - $this->executeInserts(); - } - - if ($this->entityUpdates) { - // Updates do not need to follow a particular order - $this->executeUpdates(); - } - - // Extra updates that were requested by persisters. - // This may include foreign keys that could not be set when an entity was inserted, - // which may happen in the case of circular foreign key relationships. - if ($this->extraUpdates) { - $this->executeExtraUpdates(); - } - - // Collection updates (deleteRows, updateRows, insertRows) - // No particular order is necessary, since all entities themselves are already - // in the database - foreach ($this->collectionUpdates as $collectionToUpdate) { - $this->getCollectionPersister($collectionToUpdate->getMapping())->update($collectionToUpdate); - } - - // Entity deletions come last. Their order only needs to take care of other deletions - // (first delete entities depending upon others, before deleting depended-upon entities). - if ($this->entityDeletions) { - $this->executeDeletions(); - } - - $commitFailed = false; - try { - if ($conn->commit() === false) { - $commitFailed = true; - } - } catch (DBAL\Exception $e) { - $commitFailed = true; - } - - if ($commitFailed) { - throw new OptimisticLockException('Commit failed', null, $e ?? null); - } - } catch (Throwable $e) { - $this->em->close(); - - if ($conn->isTransactionActive()) { - $conn->rollBack(); - } - - $this->afterTransactionRolledBack(); - - throw $e; - } - - $this->afterTransactionComplete(); - - // Unset removed entities from collections, and take new snapshots from - // all visited collections. - foreach ($this->visitedCollections as $coid => $coll) { - if (isset($this->pendingCollectionElementRemovals[$coid])) { - foreach ($this->pendingCollectionElementRemovals[$coid] as $key => $valueIgnored) { - unset($coll[$key]); - } - } - - $coll->takeSnapshot(); - } - - $this->dispatchPostFlushEvent(); - - $this->postCommitCleanup(); - } - - private function postCommitCleanup(): void - { - $this->entityInsertions = - $this->entityUpdates = - $this->entityDeletions = - $this->extraUpdates = - $this->collectionUpdates = - $this->nonCascadedNewDetectedEntities = - $this->collectionDeletions = - $this->pendingCollectionElementRemovals = - $this->visitedCollections = - $this->orphanRemovals = - $this->entityChangeSets = - $this->scheduledForSynchronization = []; - } - - /** - * Computes the changesets of all entities scheduled for insertion. - */ - private function computeScheduleInsertsChangeSets(): void - { - foreach ($this->entityInsertions as $entity) { - $class = $this->em->getClassMetadata($entity::class); - - $this->computeChangeSet($class, $entity); - } - } - - /** - * Executes any extra updates that have been scheduled. - */ - private function executeExtraUpdates(): void - { - foreach ($this->extraUpdates as $oid => $update) { - [$entity, $changeset] = $update; - - $this->entityChangeSets[$oid] = $changeset; - $this->getEntityPersister($entity::class)->update($entity); - } - - $this->extraUpdates = []; - } - - /** - * Gets the changeset for an entity. - * - * @return mixed[][] - * @psalm-return array - */ - public function & getEntityChangeSet(object $entity): array - { - $oid = spl_object_id($entity); - $data = []; - - if (! isset($this->entityChangeSets[$oid])) { - return $data; - } - - return $this->entityChangeSets[$oid]; - } - - /** - * Computes the changes that happened to a single entity. - * - * Modifies/populates the following properties: - * - * {@link _originalEntityData} - * If the entity is NEW or MANAGED but not yet fully persisted (only has an id) - * then it was not fetched from the database and therefore we have no original - * entity data yet. All of the current entity data is stored as the original entity data. - * - * {@link _entityChangeSets} - * The changes detected on all properties of the entity are stored there. - * A change is a tuple array where the first entry is the old value and the second - * entry is the new value of the property. Changesets are used by persisters - * to INSERT/UPDATE the persistent entity state. - * - * {@link _entityUpdates} - * If the entity is already fully MANAGED (has been fetched from the database before) - * and any changes to its properties are detected, then a reference to the entity is stored - * there to mark it for an update. - * - * {@link _collectionDeletions} - * If a PersistentCollection has been de-referenced in a fully MANAGED entity, - * then this collection is marked for deletion. - * - * @param ClassMetadata $class The class descriptor of the entity. - * @param object $entity The entity for which to compute the changes. - * @psalm-param ClassMetadata $class - * @psalm-param T $entity - * - * @template T of object - * - * @ignore - */ - public function computeChangeSet(ClassMetadata $class, object $entity): void - { - $oid = spl_object_id($entity); - - if (isset($this->readOnlyObjects[$oid])) { - return; - } - - if (! $class->isInheritanceTypeNone()) { - $class = $this->em->getClassMetadata($entity::class); - } - - $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::preFlush) & ~ListenersInvoker::INVOKE_MANAGER; - - if ($invoke !== ListenersInvoker::INVOKE_NONE) { - $this->listenersInvoker->invoke($class, Events::preFlush, $entity, new PreFlushEventArgs($this->em), $invoke); - } - - $actualData = []; - - foreach ($class->reflFields as $name => $refProp) { - $value = $refProp->getValue($entity); - - if ($class->isCollectionValuedAssociation($name) && $value !== null) { - if ($value instanceof PersistentCollection) { - if ($value->getOwner() === $entity) { - $actualData[$name] = $value; - continue; - } - - $value = new ArrayCollection($value->getValues()); - } - - // If $value is not a Collection then use an ArrayCollection. - if (! $value instanceof Collection) { - $value = new ArrayCollection($value); - } - - $assoc = $class->associationMappings[$name]; - assert($assoc->isToMany()); - - // Inject PersistentCollection - $value = new PersistentCollection( - $this->em, - $this->em->getClassMetadata($assoc->targetEntity), - $value, - ); - $value->setOwner($entity, $assoc); - $value->setDirty(! $value->isEmpty()); - - $refProp->setValue($entity, $value); - - $actualData[$name] = $value; - - continue; - } - - if (( ! $class->isIdentifier($name) || ! $class->isIdGeneratorIdentity()) && ($name !== $class->versionField)) { - $actualData[$name] = $value; - } - } - - if (! isset($this->originalEntityData[$oid])) { - // Entity is either NEW or MANAGED but not yet fully persisted (only has an id). - // These result in an INSERT. - $this->originalEntityData[$oid] = $actualData; - $changeSet = []; - - foreach ($actualData as $propName => $actualValue) { - if (! isset($class->associationMappings[$propName])) { - $changeSet[$propName] = [null, $actualValue]; - - continue; - } - - $assoc = $class->associationMappings[$propName]; - - if ($assoc->isToOneOwningSide()) { - $changeSet[$propName] = [null, $actualValue]; - } - } - - $this->entityChangeSets[$oid] = $changeSet; - } else { - // Entity is "fully" MANAGED: it was already fully persisted before - // and we have a copy of the original data - $originalData = $this->originalEntityData[$oid]; - $changeSet = []; - - foreach ($actualData as $propName => $actualValue) { - // skip field, its a partially omitted one! - if (! (isset($originalData[$propName]) || array_key_exists($propName, $originalData))) { - continue; - } - - $orgValue = $originalData[$propName]; - - if (! empty($class->fieldMappings[$propName]->enumType)) { - if (is_array($orgValue)) { - foreach ($orgValue as $id => $val) { - if ($val instanceof BackedEnum) { - $orgValue[$id] = $val->value; - } - } - } else { - if ($orgValue instanceof BackedEnum) { - $orgValue = $orgValue->value; - } - } - } - - // skip if value haven't changed - if ($orgValue === $actualValue) { - continue; - } - - // if regular field - if (! isset($class->associationMappings[$propName])) { - $changeSet[$propName] = [$orgValue, $actualValue]; - - continue; - } - - $assoc = $class->associationMappings[$propName]; - - // Persistent collection was exchanged with the "originally" - // created one. This can only mean it was cloned and replaced - // on another entity. - if ($actualValue instanceof PersistentCollection) { - assert($assoc->isToMany()); - $owner = $actualValue->getOwner(); - if ($owner === null) { // cloned - $actualValue->setOwner($entity, $assoc); - } elseif ($owner !== $entity) { // no clone, we have to fix - if (! $actualValue->isInitialized()) { - $actualValue->initialize(); // we have to do this otherwise the cols share state - } - - $newValue = clone $actualValue; - $newValue->setOwner($entity, $assoc); - $class->reflFields[$propName]->setValue($entity, $newValue); - } - } - - if ($orgValue instanceof PersistentCollection) { - // A PersistentCollection was de-referenced, so delete it. - $coid = spl_object_id($orgValue); - - if (isset($this->collectionDeletions[$coid])) { - continue; - } - - $this->collectionDeletions[$coid] = $orgValue; - $changeSet[$propName] = $orgValue; // Signal changeset, to-many assocs will be ignored. - - continue; - } - - if ($assoc->isToOne()) { - if ($assoc->isOwningSide()) { - $changeSet[$propName] = [$orgValue, $actualValue]; - } - - if ($orgValue !== null && $assoc->orphanRemoval) { - assert(is_object($orgValue)); - $this->scheduleOrphanRemoval($orgValue); - } - } - } - - if ($changeSet) { - $this->entityChangeSets[$oid] = $changeSet; - $this->originalEntityData[$oid] = $actualData; - $this->entityUpdates[$oid] = $entity; - } - } - - // Look for changes in associations of the entity - foreach ($class->associationMappings as $field => $assoc) { - $val = $class->reflFields[$field]->getValue($entity); - if ($val === null) { - continue; - } - - $this->computeAssociationChanges($assoc, $val); - - if ( - ! isset($this->entityChangeSets[$oid]) && - $assoc->isManyToManyOwningSide() && - $val instanceof PersistentCollection && - $val->isDirty() - ) { - $this->entityChangeSets[$oid] = []; - $this->originalEntityData[$oid] = $actualData; - $this->entityUpdates[$oid] = $entity; - } - } - } - - /** - * Computes all the changes that have been done to entities and collections - * since the last commit and stores these changes in the _entityChangeSet map - * temporarily for access by the persisters, until the UoW commit is finished. - */ - public function computeChangeSets(): void - { - // Compute changes for INSERTed entities first. This must always happen. - $this->computeScheduleInsertsChangeSets(); - - // Compute changes for other MANAGED entities. Change tracking policies take effect here. - foreach ($this->identityMap as $className => $entities) { - $class = $this->em->getClassMetadata($className); - - // Skip class if instances are read-only - if ($class->isReadOnly) { - continue; - } - - $entitiesToProcess = match (true) { - $class->isChangeTrackingDeferredImplicit() => $entities, - isset($this->scheduledForSynchronization[$className]) => $this->scheduledForSynchronization[$className], - default => [], - }; - - foreach ($entitiesToProcess as $entity) { - // Ignore uninitialized proxy objects - if ($this->isUninitializedObject($entity)) { - continue; - } - - // Only MANAGED entities that are NOT SCHEDULED FOR INSERTION OR DELETION are processed here. - $oid = spl_object_id($entity); - - if (! isset($this->entityInsertions[$oid]) && ! isset($this->entityDeletions[$oid]) && isset($this->entityStates[$oid])) { - $this->computeChangeSet($class, $entity); - } - } - } - } - - /** - * Computes the changes of an association. - * - * @param mixed $value The value of the association. - * - * @throws ORMInvalidArgumentException - * @throws ORMException - */ - private function computeAssociationChanges(AssociationMapping $assoc, mixed $value): void - { - if ($this->isUninitializedObject($value)) { - return; - } - - // If this collection is dirty, schedule it for updates - if ($value instanceof PersistentCollection && $value->isDirty()) { - $coid = spl_object_id($value); - - $this->collectionUpdates[$coid] = $value; - $this->visitedCollections[$coid] = $value; - } - - // Look through the entities, and in any of their associations, - // for transient (new) entities, recursively. ("Persistence by reachability") - // Unwrap. Uninitialized collections will simply be empty. - $unwrappedValue = $assoc->isToOne() ? [$value] : $value->unwrap(); - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - - foreach ($unwrappedValue as $key => $entry) { - if (! ($entry instanceof $targetClass->name)) { - throw ORMInvalidArgumentException::invalidAssociation($targetClass, $assoc, $entry); - } - - $state = $this->getEntityState($entry, self::STATE_NEW); - - if (! ($entry instanceof $assoc->targetEntity)) { - throw UnexpectedAssociationValue::create( - $assoc->sourceEntity, - $assoc->fieldName, - get_debug_type($entry), - $assoc->targetEntity, - ); - } - - switch ($state) { - case self::STATE_NEW: - if (! $assoc->isCascadePersist()) { - /* - * For now just record the details, because this may - * not be an issue if we later discover another pathway - * through the object-graph where cascade-persistence - * is enabled for this object. - */ - $this->nonCascadedNewDetectedEntities[spl_object_id($entry)] = [$assoc, $entry]; - - break; - } - - $this->persistNew($targetClass, $entry); - $this->computeChangeSet($targetClass, $entry); - - break; - - case self::STATE_REMOVED: - // Consume the $value as array (it's either an array or an ArrayAccess) - // and remove the element from Collection. - if (! $assoc->isToMany()) { - break; - } - - $coid = spl_object_id($value); - $this->visitedCollections[$coid] = $value; - - if (! isset($this->pendingCollectionElementRemovals[$coid])) { - $this->pendingCollectionElementRemovals[$coid] = []; - } - - $this->pendingCollectionElementRemovals[$coid][$key] = true; - break; - - case self::STATE_DETACHED: - // Can actually not happen right now as we assume STATE_NEW, - // so the exception will be raised from the DBAL layer (constraint violation). - throw ORMInvalidArgumentException::detachedEntityFoundThroughRelationship($assoc, $entry); - - default: - // MANAGED associated entities are already taken into account - // during changeset calculation anyway, since they are in the identity map. - } - } - } - - /** - * @psalm-param ClassMetadata $class - * @psalm-param T $entity - * - * @template T of object - */ - private function persistNew(ClassMetadata $class, object $entity): void - { - $oid = spl_object_id($entity); - $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::prePersist); - - if ($invoke !== ListenersInvoker::INVOKE_NONE) { - $this->listenersInvoker->invoke($class, Events::prePersist, $entity, new PrePersistEventArgs($entity, $this->em), $invoke); - } - - $idGen = $class->idGenerator; - - if (! $idGen->isPostInsertGenerator()) { - $idValue = $idGen->generateId($this->em, $entity); - - if (! $idGen instanceof AssignedGenerator) { - $idValue = [$class->getSingleIdentifierFieldName() => $this->convertSingleFieldIdentifierToPHPValue($class, $idValue)]; - - $class->setIdentifierValues($entity, $idValue); - } - - // Some identifiers may be foreign keys to new entities. - // In this case, we don't have the value yet and should treat it as if we have a post-insert generator - if (! $this->hasMissingIdsWhichAreForeignKeys($class, $idValue)) { - $this->entityIdentifiers[$oid] = $idValue; - } - } - - $this->entityStates[$oid] = self::STATE_MANAGED; - - $this->scheduleForInsert($entity); - } - - /** @param mixed[] $idValue */ - private function hasMissingIdsWhichAreForeignKeys(ClassMetadata $class, array $idValue): bool - { - foreach ($idValue as $idField => $idFieldValue) { - if ($idFieldValue === null && isset($class->associationMappings[$idField])) { - return true; - } - } - - return false; - } - - /** - * INTERNAL: - * Computes the changeset of an individual entity, independently of the - * computeChangeSets() routine that is used at the beginning of a UnitOfWork#commit(). - * - * The passed entity must be a managed entity. If the entity already has a change set - * because this method is invoked during a commit cycle then the change sets are added. - * whereby changes detected in this method prevail. - * - * @param ClassMetadata $class The class descriptor of the entity. - * @param object $entity The entity for which to (re)calculate the change set. - * @psalm-param ClassMetadata $class - * @psalm-param T $entity - * - * @throws ORMInvalidArgumentException If the passed entity is not MANAGED. - * - * @template T of object - * @ignore - */ - public function recomputeSingleEntityChangeSet(ClassMetadata $class, object $entity): void - { - $oid = spl_object_id($entity); - - if (! isset($this->entityStates[$oid]) || $this->entityStates[$oid] !== self::STATE_MANAGED) { - throw ORMInvalidArgumentException::entityNotManaged($entity); - } - - if (! $class->isInheritanceTypeNone()) { - $class = $this->em->getClassMetadata($entity::class); - } - - $actualData = []; - - foreach ($class->reflFields as $name => $refProp) { - if ( - ( ! $class->isIdentifier($name) || ! $class->isIdGeneratorIdentity()) - && ($name !== $class->versionField) - && ! $class->isCollectionValuedAssociation($name) - ) { - $actualData[$name] = $refProp->getValue($entity); - } - } - - if (! isset($this->originalEntityData[$oid])) { - throw new RuntimeException('Cannot call recomputeSingleEntityChangeSet before computeChangeSet on an entity.'); - } - - $originalData = $this->originalEntityData[$oid]; - $changeSet = []; - - foreach ($actualData as $propName => $actualValue) { - $orgValue = $originalData[$propName] ?? null; - - if (isset($class->fieldMappings[$propName]->enumType)) { - if (is_array($orgValue)) { - foreach ($orgValue as $id => $val) { - if ($val instanceof BackedEnum) { - $orgValue[$id] = $val->value; - } - } - } else { - if ($orgValue instanceof BackedEnum) { - $orgValue = $orgValue->value; - } - } - } - - if ($orgValue !== $actualValue) { - $changeSet[$propName] = [$orgValue, $actualValue]; - } - } - - if ($changeSet) { - if (isset($this->entityChangeSets[$oid])) { - $this->entityChangeSets[$oid] = [...$this->entityChangeSets[$oid], ...$changeSet]; - } elseif (! isset($this->entityInsertions[$oid])) { - $this->entityChangeSets[$oid] = $changeSet; - $this->entityUpdates[$oid] = $entity; - } - - $this->originalEntityData[$oid] = $actualData; - } - } - - /** - * Executes entity insertions - */ - private function executeInserts(): void - { - $entities = $this->computeInsertExecutionOrder(); - $eventsToDispatch = []; - - foreach ($entities as $entity) { - $oid = spl_object_id($entity); - $class = $this->em->getClassMetadata($entity::class); - $persister = $this->getEntityPersister($class->name); - - $persister->addInsert($entity); - - unset($this->entityInsertions[$oid]); - - $persister->executeInserts(); - - if (! isset($this->entityIdentifiers[$oid])) { - //entity was not added to identity map because some identifiers are foreign keys to new entities. - //add it now - $this->addToEntityIdentifiersAndEntityMap($class, $oid, $entity); - } - - $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postPersist); - - if ($invoke !== ListenersInvoker::INVOKE_NONE) { - $eventsToDispatch[] = ['class' => $class, 'entity' => $entity, 'invoke' => $invoke]; - } - } - - // Defer dispatching `postPersist` events to until all entities have been inserted and post-insert - // IDs have been assigned. - foreach ($eventsToDispatch as $event) { - $this->listenersInvoker->invoke( - $event['class'], - Events::postPersist, - $event['entity'], - new PostPersistEventArgs($event['entity'], $this->em), - $event['invoke'], - ); - } - } - - /** - * @psalm-param ClassMetadata $class - * @psalm-param T $entity - * - * @template T of object - */ - private function addToEntityIdentifiersAndEntityMap( - ClassMetadata $class, - int $oid, - object $entity, - ): void { - $identifier = []; - - foreach ($class->getIdentifierFieldNames() as $idField) { - $origValue = $class->getFieldValue($entity, $idField); - - $value = null; - if (isset($class->associationMappings[$idField])) { - // NOTE: Single Columns as associated identifiers only allowed - this constraint it is enforced. - $value = $this->getSingleIdentifierValue($origValue); - } - - $identifier[$idField] = $value ?? $origValue; - $this->originalEntityData[$oid][$idField] = $origValue; - } - - $this->entityStates[$oid] = self::STATE_MANAGED; - $this->entityIdentifiers[$oid] = $identifier; - - $this->addToIdentityMap($entity); - } - - /** - * Executes all entity updates - */ - private function executeUpdates(): void - { - foreach ($this->entityUpdates as $oid => $entity) { - $class = $this->em->getClassMetadata($entity::class); - $persister = $this->getEntityPersister($class->name); - $preUpdateInvoke = $this->listenersInvoker->getSubscribedSystems($class, Events::preUpdate); - $postUpdateInvoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postUpdate); - - if ($preUpdateInvoke !== ListenersInvoker::INVOKE_NONE) { - $this->listenersInvoker->invoke($class, Events::preUpdate, $entity, new PreUpdateEventArgs($entity, $this->em, $this->getEntityChangeSet($entity)), $preUpdateInvoke); - - $this->recomputeSingleEntityChangeSet($class, $entity); - } - - if (! empty($this->entityChangeSets[$oid])) { - $persister->update($entity); - } - - unset($this->entityUpdates[$oid]); - - if ($postUpdateInvoke !== ListenersInvoker::INVOKE_NONE) { - $this->listenersInvoker->invoke($class, Events::postUpdate, $entity, new PostUpdateEventArgs($entity, $this->em), $postUpdateInvoke); - } - } - } - - /** - * Executes all entity deletions - */ - private function executeDeletions(): void - { - $entities = $this->computeDeleteExecutionOrder(); - $eventsToDispatch = []; - - foreach ($entities as $entity) { - $this->removeFromIdentityMap($entity); - - $oid = spl_object_id($entity); - $class = $this->em->getClassMetadata($entity::class); - $persister = $this->getEntityPersister($class->name); - $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::postRemove); - - $persister->delete($entity); - - unset( - $this->entityDeletions[$oid], - $this->entityIdentifiers[$oid], - $this->originalEntityData[$oid], - $this->entityStates[$oid], - ); - - // Entity with this $oid after deletion treated as NEW, even if the $oid - // is obtained by a new entity because the old one went out of scope. - //$this->entityStates[$oid] = self::STATE_NEW; - if (! $class->isIdentifierNatural()) { - $class->reflFields[$class->identifier[0]]->setValue($entity, null); - } - - if ($invoke !== ListenersInvoker::INVOKE_NONE) { - $eventsToDispatch[] = ['class' => $class, 'entity' => $entity, 'invoke' => $invoke]; - } - } - - // Defer dispatching `postRemove` events to until all entities have been removed. - foreach ($eventsToDispatch as $event) { - $this->listenersInvoker->invoke( - $event['class'], - Events::postRemove, - $event['entity'], - new PostRemoveEventArgs($event['entity'], $this->em), - $event['invoke'], - ); - } - } - - /** @return list */ - private function computeInsertExecutionOrder(): array - { - $sort = new TopologicalSort(); - - // First make sure we have all the nodes - foreach ($this->entityInsertions as $entity) { - $sort->addNode($entity); - } - - // Now add edges - foreach ($this->entityInsertions as $entity) { - $class = $this->em->getClassMetadata($entity::class); - - foreach ($class->associationMappings as $assoc) { - // We only need to consider the owning sides of to-one associations, - // since many-to-many associations are persisted at a later step and - // have no insertion order problems (all entities already in the database - // at that time). - if (! $assoc->isToOneOwningSide()) { - continue; - } - - $targetEntity = $class->getFieldValue($entity, $assoc->fieldName); - - // If there is no entity that we need to refer to, or it is already in the - // database (i. e. does not have to be inserted), no need to consider it. - if ($targetEntity === null || ! $sort->hasNode($targetEntity)) { - continue; - } - - // An entity that references back to itself _and_ uses an application-provided ID - // (the "NONE" generator strategy) can be exempted from commit order computation. - // See https://github.com/doctrine/orm/pull/10735/ for more details on this edge case. - // A non-NULLable self-reference would be a cycle in the graph. - if ($targetEntity === $entity && $class->isIdentifierNatural()) { - continue; - } - - // According to https://www.doctrine-project.org/projects/doctrine-orm/en/2.14/reference/annotations-reference.html#annref_joincolumn, - // the default for "nullable" is true. Unfortunately, it seems this default is not applied at the metadata driver, factory or other - // level, but in fact we may have an undefined 'nullable' key here, so we must assume that default here as well. - // - // Same in \Doctrine\ORM\Tools\EntityGenerator::isAssociationIsNullable or \Doctrine\ORM\Persisters\Entity\BasicEntityPersister::getJoinSQLForJoinColumns, - // to give two examples. - $joinColumns = reset($assoc->joinColumns); - $isNullable = ! isset($joinColumns->nullable) || $joinColumns->nullable; - - // Add dependency. The dependency direction implies that "$entity depends on $targetEntity". The - // topological sort result will output the depended-upon nodes first, which means we can insert - // entities in that order. - $sort->addEdge($entity, $targetEntity, $isNullable); - } - } - - return $sort->sort(); - } - - /** @return list */ - private function computeDeleteExecutionOrder(): array - { - $stronglyConnectedComponents = new StronglyConnectedComponents(); - $sort = new TopologicalSort(); - - foreach ($this->entityDeletions as $entity) { - $stronglyConnectedComponents->addNode($entity); - $sort->addNode($entity); - } - - // First, consider only "on delete cascade" associations between entities - // and find strongly connected groups. Once we delete any one of the entities - // in such a group, _all_ of the other entities will be removed as well. So, - // we need to treat those groups like a single entity when performing delete - // order topological sorting. - foreach ($this->entityDeletions as $entity) { - $class = $this->em->getClassMetadata($entity::class); - - foreach ($class->associationMappings as $assoc) { - // We only need to consider the owning sides of to-one associations, - // since many-to-many associations can always be (and have already been) - // deleted in a preceding step. - if (! $assoc->isToOneOwningSide()) { - continue; - } - - $joinColumns = reset($assoc->joinColumns); - if (! isset($joinColumns->onDelete)) { - continue; - } - - $onDeleteOption = strtolower($joinColumns->onDelete); - if ($onDeleteOption !== 'cascade') { - continue; - } - - $targetEntity = $class->getFieldValue($entity, $assoc->fieldName); - - // If the association does not refer to another entity or that entity - // is not to be deleted, there is no ordering problem and we can - // skip this particular association. - if ($targetEntity === null || ! $stronglyConnectedComponents->hasNode($targetEntity)) { - continue; - } - - $stronglyConnectedComponents->addEdge($entity, $targetEntity); - } - } - - $stronglyConnectedComponents->findStronglyConnectedComponents(); - - // Now do the actual topological sorting to find the delete order. - foreach ($this->entityDeletions as $entity) { - $class = $this->em->getClassMetadata($entity::class); - - // Get the entities representing the SCC - $entityComponent = $stronglyConnectedComponents->getNodeRepresentingStronglyConnectedComponent($entity); - - // When $entity is part of a non-trivial strongly connected component group - // (a group containing not only those entities alone), make sure we process it _after_ the - // entity representing the group. - // The dependency direction implies that "$entity depends on $entityComponent - // being deleted first". The topological sort will output the depended-upon nodes first. - if ($entityComponent !== $entity) { - $sort->addEdge($entity, $entityComponent, false); - } - - foreach ($class->associationMappings as $assoc) { - // We only need to consider the owning sides of to-one associations, - // since many-to-many associations can always be (and have already been) - // deleted in a preceding step. - if (! $assoc->isToOneOwningSide()) { - continue; - } - - // For associations that implement a database-level set null operation, - // we do not have to follow a particular order: If the referred-to entity is - // deleted first, the DBMS will temporarily set the foreign key to NULL (SET NULL). - // So, we can skip it in the computation. - $joinColumns = reset($assoc->joinColumns); - if (isset($joinColumns->onDelete)) { - $onDeleteOption = strtolower($joinColumns->onDelete); - if ($onDeleteOption === 'set null') { - continue; - } - } - - $targetEntity = $class->getFieldValue($entity, $assoc->fieldName); - - // If the association does not refer to another entity or that entity - // is not to be deleted, there is no ordering problem and we can - // skip this particular association. - if ($targetEntity === null || ! $sort->hasNode($targetEntity)) { - continue; - } - - // Get the entities representing the SCC - $targetEntityComponent = $stronglyConnectedComponents->getNodeRepresentingStronglyConnectedComponent($targetEntity); - - // When we have a dependency between two different groups of strongly connected nodes, - // add it to the computation. - // The dependency direction implies that "$targetEntityComponent depends on $entityComponent - // being deleted first". The topological sort will output the depended-upon nodes first, - // so we can work through the result in the returned order. - if ($targetEntityComponent !== $entityComponent) { - $sort->addEdge($targetEntityComponent, $entityComponent, false); - } - } - } - - return $sort->sort(); - } - - /** - * Schedules an entity for insertion into the database. - * If the entity already has an identifier, it will be added to the identity map. - * - * @throws ORMInvalidArgumentException - * @throws InvalidArgumentException - */ - public function scheduleForInsert(object $entity): void - { - $oid = spl_object_id($entity); - - if (isset($this->entityUpdates[$oid])) { - throw new InvalidArgumentException('Dirty entity can not be scheduled for insertion.'); - } - - if (isset($this->entityDeletions[$oid])) { - throw ORMInvalidArgumentException::scheduleInsertForRemovedEntity($entity); - } - - if (isset($this->originalEntityData[$oid]) && ! isset($this->entityInsertions[$oid])) { - throw ORMInvalidArgumentException::scheduleInsertForManagedEntity($entity); - } - - if (isset($this->entityInsertions[$oid])) { - throw ORMInvalidArgumentException::scheduleInsertTwice($entity); - } - - $this->entityInsertions[$oid] = $entity; - - if (isset($this->entityIdentifiers[$oid])) { - $this->addToIdentityMap($entity); - } - } - - /** - * Checks whether an entity is scheduled for insertion. - */ - public function isScheduledForInsert(object $entity): bool - { - return isset($this->entityInsertions[spl_object_id($entity)]); - } - - /** - * Schedules an entity for being updated. - * - * @throws ORMInvalidArgumentException - */ - public function scheduleForUpdate(object $entity): void - { - $oid = spl_object_id($entity); - - if (! isset($this->entityIdentifiers[$oid])) { - throw ORMInvalidArgumentException::entityHasNoIdentity($entity, 'scheduling for update'); - } - - if (isset($this->entityDeletions[$oid])) { - throw ORMInvalidArgumentException::entityIsRemoved($entity, 'schedule for update'); - } - - if (! isset($this->entityUpdates[$oid]) && ! isset($this->entityInsertions[$oid])) { - $this->entityUpdates[$oid] = $entity; - } - } - - /** - * INTERNAL: - * Schedules an extra update that will be executed immediately after the - * regular entity updates within the currently running commit cycle. - * - * Extra updates for entities are stored as (entity, changeset) tuples. - * - * @psalm-param array $changeset The changeset of the entity (what to update). - * - * @ignore - */ - public function scheduleExtraUpdate(object $entity, array $changeset): void - { - $oid = spl_object_id($entity); - $extraUpdate = [$entity, $changeset]; - - if (isset($this->extraUpdates[$oid])) { - [, $changeset2] = $this->extraUpdates[$oid]; - - $extraUpdate = [$entity, $changeset + $changeset2]; - } - - $this->extraUpdates[$oid] = $extraUpdate; - } - - /** - * Checks whether an entity is registered as dirty in the unit of work. - * Note: Is not very useful currently as dirty entities are only registered - * at commit time. - */ - public function isScheduledForUpdate(object $entity): bool - { - return isset($this->entityUpdates[spl_object_id($entity)]); - } - - /** - * Checks whether an entity is registered to be checked in the unit of work. - */ - public function isScheduledForDirtyCheck(object $entity): bool - { - $rootEntityName = $this->em->getClassMetadata($entity::class)->rootEntityName; - - return isset($this->scheduledForSynchronization[$rootEntityName][spl_object_id($entity)]); - } - - /** - * INTERNAL: - * Schedules an entity for deletion. - */ - public function scheduleForDelete(object $entity): void - { - $oid = spl_object_id($entity); - - if (isset($this->entityInsertions[$oid])) { - if ($this->isInIdentityMap($entity)) { - $this->removeFromIdentityMap($entity); - } - - unset($this->entityInsertions[$oid], $this->entityStates[$oid]); - - return; // entity has not been persisted yet, so nothing more to do. - } - - if (! $this->isInIdentityMap($entity)) { - return; - } - - unset($this->entityUpdates[$oid]); - - if (! isset($this->entityDeletions[$oid])) { - $this->entityDeletions[$oid] = $entity; - $this->entityStates[$oid] = self::STATE_REMOVED; - } - } - - /** - * Checks whether an entity is registered as removed/deleted with the unit - * of work. - */ - public function isScheduledForDelete(object $entity): bool - { - return isset($this->entityDeletions[spl_object_id($entity)]); - } - - /** - * Checks whether an entity is scheduled for insertion, update or deletion. - */ - public function isEntityScheduled(object $entity): bool - { - $oid = spl_object_id($entity); - - return isset($this->entityInsertions[$oid]) - || isset($this->entityUpdates[$oid]) - || isset($this->entityDeletions[$oid]); - } - - /** - * INTERNAL: - * Registers an entity in the identity map. - * Note that entities in a hierarchy are registered with the class name of - * the root entity. - * - * @return bool TRUE if the registration was successful, FALSE if the identity of - * the entity in question is already managed. - * - * @throws ORMInvalidArgumentException - * @throws EntityIdentityCollisionException - * - * @ignore - */ - public function addToIdentityMap(object $entity): bool - { - $classMetadata = $this->em->getClassMetadata($entity::class); - $idHash = $this->getIdHashByEntity($entity); - $className = $classMetadata->rootEntityName; - - if (isset($this->identityMap[$className][$idHash])) { - if ($this->identityMap[$className][$idHash] !== $entity) { - throw EntityIdentityCollisionException::create($this->identityMap[$className][$idHash], $entity, $idHash); - } - - return false; - } - - $this->identityMap[$className][$idHash] = $entity; - - return true; - } - - /** - * Gets the id hash of an entity by its identifier. - * - * @param array $identifier The identifier of an entity - * - * @return string The entity id hash. - */ - final public static function getIdHashByIdentifier(array $identifier): string - { - foreach ($identifier as $k => $value) { - if ($value instanceof BackedEnum) { - $identifier[$k] = $value->value; - } - } - - return implode( - ' ', - $identifier, - ); - } - - /** - * Gets the id hash of an entity. - * - * @param object $entity The entity managed by Unit Of Work - * - * @return string The entity id hash. - */ - public function getIdHashByEntity(object $entity): string - { - $identifier = $this->entityIdentifiers[spl_object_id($entity)]; - - if (empty($identifier) || in_array(null, $identifier, true)) { - $classMetadata = $this->em->getClassMetadata($entity::class); - - throw ORMInvalidArgumentException::entityWithoutIdentity($classMetadata->name, $entity); - } - - return self::getIdHashByIdentifier($identifier); - } - - /** - * Gets the state of an entity with regard to the current unit of work. - * - * @param int|null $assume The state to assume if the state is not yet known (not MANAGED or REMOVED). - * This parameter can be set to improve performance of entity state detection - * by potentially avoiding a database lookup if the distinction between NEW and DETACHED - * is either known or does not matter for the caller of the method. - * @psalm-param self::STATE_*|null $assume - * - * @psalm-return self::STATE_* - */ - public function getEntityState(object $entity, int|null $assume = null): int - { - $oid = spl_object_id($entity); - - if (isset($this->entityStates[$oid])) { - return $this->entityStates[$oid]; - } - - if ($assume !== null) { - return $assume; - } - - // State can only be NEW or DETACHED, because MANAGED/REMOVED states are known. - // Note that you can not remember the NEW or DETACHED state in _entityStates since - // the UoW does not hold references to such objects and the object hash can be reused. - // More generally because the state may "change" between NEW/DETACHED without the UoW being aware of it. - $class = $this->em->getClassMetadata($entity::class); - $id = $class->getIdentifierValues($entity); - - if (! $id) { - return self::STATE_NEW; - } - - if ($class->containsForeignIdentifier || $class->containsEnumIdentifier) { - $id = $this->identifierFlattener->flattenIdentifier($class, $id); - } - - switch (true) { - case $class->isIdentifierNatural(): - // Check for a version field, if available, to avoid a db lookup. - if ($class->isVersioned) { - assert($class->versionField !== null); - - return $class->getFieldValue($entity, $class->versionField) - ? self::STATE_DETACHED - : self::STATE_NEW; - } - - // Last try before db lookup: check the identity map. - if ($this->tryGetById($id, $class->rootEntityName)) { - return self::STATE_DETACHED; - } - - // db lookup - if ($this->getEntityPersister($class->name)->exists($entity)) { - return self::STATE_DETACHED; - } - - return self::STATE_NEW; - - case ! $class->idGenerator->isPostInsertGenerator(): - // if we have a pre insert generator we can't be sure that having an id - // really means that the entity exists. We have to verify this through - // the last resort: a db lookup - - // Last try before db lookup: check the identity map. - if ($this->tryGetById($id, $class->rootEntityName)) { - return self::STATE_DETACHED; - } - - // db lookup - if ($this->getEntityPersister($class->name)->exists($entity)) { - return self::STATE_DETACHED; - } - - return self::STATE_NEW; - - default: - return self::STATE_DETACHED; - } - } - - /** - * INTERNAL: - * Removes an entity from the identity map. This effectively detaches the - * entity from the persistence management of Doctrine. - * - * @throws ORMInvalidArgumentException - * - * @ignore - */ - public function removeFromIdentityMap(object $entity): bool - { - $oid = spl_object_id($entity); - $classMetadata = $this->em->getClassMetadata($entity::class); - $idHash = self::getIdHashByIdentifier($this->entityIdentifiers[$oid]); - - if ($idHash === '') { - throw ORMInvalidArgumentException::entityHasNoIdentity($entity, 'remove from identity map'); - } - - $className = $classMetadata->rootEntityName; - - if (isset($this->identityMap[$className][$idHash])) { - unset($this->identityMap[$className][$idHash], $this->readOnlyObjects[$oid]); - - //$this->entityStates[$oid] = self::STATE_DETACHED; - - return true; - } - - return false; - } - - /** - * INTERNAL: - * Gets an entity in the identity map by its identifier hash. - * - * @ignore - */ - public function getByIdHash(string $idHash, string $rootClassName): object|null - { - return $this->identityMap[$rootClassName][$idHash]; - } - - /** - * INTERNAL: - * Tries to get an entity by its identifier hash. If no entity is found for - * the given hash, FALSE is returned. - * - * @param mixed $idHash (must be possible to cast it to string) - * - * @return false|object The found entity or FALSE. - * - * @ignore - */ - public function tryGetByIdHash(mixed $idHash, string $rootClassName): object|false - { - $stringIdHash = (string) $idHash; - - return $this->identityMap[$rootClassName][$stringIdHash] ?? false; - } - - /** - * Checks whether an entity is registered in the identity map of this UnitOfWork. - */ - public function isInIdentityMap(object $entity): bool - { - $oid = spl_object_id($entity); - - if (empty($this->entityIdentifiers[$oid])) { - return false; - } - - $classMetadata = $this->em->getClassMetadata($entity::class); - $idHash = self::getIdHashByIdentifier($this->entityIdentifiers[$oid]); - - return isset($this->identityMap[$classMetadata->rootEntityName][$idHash]); - } - - /** - * Persists an entity as part of the current unit of work. - */ - public function persist(object $entity): void - { - $visited = []; - - $this->doPersist($entity, $visited); - } - - /** - * Persists an entity as part of the current unit of work. - * - * This method is internally called during persist() cascades as it tracks - * the already visited entities to prevent infinite recursions. - * - * @psalm-param array $visited The already visited entities. - * - * @throws ORMInvalidArgumentException - * @throws UnexpectedValueException - */ - private function doPersist(object $entity, array &$visited): void - { - $oid = spl_object_id($entity); - - if (isset($visited[$oid])) { - return; // Prevent infinite recursion - } - - $visited[$oid] = $entity; // Mark visited - - $class = $this->em->getClassMetadata($entity::class); - - // We assume NEW, so DETACHED entities result in an exception on flush (constraint violation). - // If we would detect DETACHED here we would throw an exception anyway with the same - // consequences (not recoverable/programming error), so just assuming NEW here - // lets us avoid some database lookups for entities with natural identifiers. - $entityState = $this->getEntityState($entity, self::STATE_NEW); - - switch ($entityState) { - case self::STATE_MANAGED: - // Nothing to do, except if policy is "deferred explicit" - if ($class->isChangeTrackingDeferredExplicit()) { - $this->scheduleForDirtyCheck($entity); - } - - break; - - case self::STATE_NEW: - $this->persistNew($class, $entity); - break; - - case self::STATE_REMOVED: - // Entity becomes managed again - unset($this->entityDeletions[$oid]); - $this->addToIdentityMap($entity); - - $this->entityStates[$oid] = self::STATE_MANAGED; - - if ($class->isChangeTrackingDeferredExplicit()) { - $this->scheduleForDirtyCheck($entity); - } - - break; - - case self::STATE_DETACHED: - // Can actually not happen right now since we assume STATE_NEW. - throw ORMInvalidArgumentException::detachedEntityCannot($entity, 'persisted'); - - default: - throw new UnexpectedValueException(sprintf( - 'Unexpected entity state: %s. %s', - $entityState, - self::objToStr($entity), - )); - } - - $this->cascadePersist($entity, $visited); - } - - /** - * Deletes an entity as part of the current unit of work. - */ - public function remove(object $entity): void - { - $visited = []; - - $this->doRemove($entity, $visited); - } - - /** - * Deletes an entity as part of the current unit of work. - * - * This method is internally called during delete() cascades as it tracks - * the already visited entities to prevent infinite recursions. - * - * @psalm-param array $visited The map of the already visited entities. - * - * @throws ORMInvalidArgumentException If the instance is a detached entity. - * @throws UnexpectedValueException - */ - private function doRemove(object $entity, array &$visited): void - { - $oid = spl_object_id($entity); - - if (isset($visited[$oid])) { - return; // Prevent infinite recursion - } - - $visited[$oid] = $entity; // mark visited - - // Cascade first, because scheduleForDelete() removes the entity from the identity map, which - // can cause problems when a lazy proxy has to be initialized for the cascade operation. - $this->cascadeRemove($entity, $visited); - - $class = $this->em->getClassMetadata($entity::class); - $entityState = $this->getEntityState($entity); - - switch ($entityState) { - case self::STATE_NEW: - case self::STATE_REMOVED: - // nothing to do - break; - - case self::STATE_MANAGED: - $invoke = $this->listenersInvoker->getSubscribedSystems($class, Events::preRemove); - - if ($invoke !== ListenersInvoker::INVOKE_NONE) { - $this->listenersInvoker->invoke($class, Events::preRemove, $entity, new PreRemoveEventArgs($entity, $this->em), $invoke); - } - - $this->scheduleForDelete($entity); - break; - - case self::STATE_DETACHED: - throw ORMInvalidArgumentException::detachedEntityCannot($entity, 'removed'); - - default: - throw new UnexpectedValueException(sprintf( - 'Unexpected entity state: %s. %s', - $entityState, - self::objToStr($entity), - )); - } - } - - /** - * Detaches an entity from the persistence management. It's persistence will - * no longer be managed by Doctrine. - */ - public function detach(object $entity): void - { - $visited = []; - - $this->doDetach($entity, $visited); - } - - /** - * Executes a detach operation on the given entity. - * - * @param mixed[] $visited - * @param bool $noCascade if true, don't cascade detach operation. - */ - private function doDetach( - object $entity, - array &$visited, - bool $noCascade = false, - ): void { - $oid = spl_object_id($entity); - - if (isset($visited[$oid])) { - return; // Prevent infinite recursion - } - - $visited[$oid] = $entity; // mark visited - - switch ($this->getEntityState($entity, self::STATE_DETACHED)) { - case self::STATE_MANAGED: - if ($this->isInIdentityMap($entity)) { - $this->removeFromIdentityMap($entity); - } - - unset( - $this->entityInsertions[$oid], - $this->entityUpdates[$oid], - $this->entityDeletions[$oid], - $this->entityIdentifiers[$oid], - $this->entityStates[$oid], - $this->originalEntityData[$oid], - ); - break; - case self::STATE_NEW: - case self::STATE_DETACHED: - return; - } - - if (! $noCascade) { - $this->cascadeDetach($entity, $visited); - } - } - - /** - * Refreshes the state of the given entity from the database, overwriting - * any local, unpersisted changes. - * - * @psalm-param LockMode::*|null $lockMode - * - * @throws InvalidArgumentException If the entity is not MANAGED. - * @throws TransactionRequiredException - */ - public function refresh(object $entity, LockMode|int|null $lockMode = null): void - { - $visited = []; - - $this->doRefresh($entity, $visited, $lockMode); - } - - /** - * Executes a refresh operation on an entity. - * - * @psalm-param array $visited The already visited entities during cascades. - * @psalm-param LockMode::*|null $lockMode - * - * @throws ORMInvalidArgumentException If the entity is not MANAGED. - * @throws TransactionRequiredException - */ - private function doRefresh(object $entity, array &$visited, LockMode|int|null $lockMode = null): void - { - switch (true) { - case $lockMode === LockMode::PESSIMISTIC_READ: - case $lockMode === LockMode::PESSIMISTIC_WRITE: - if (! $this->em->getConnection()->isTransactionActive()) { - throw TransactionRequiredException::transactionRequired(); - } - } - - $oid = spl_object_id($entity); - - if (isset($visited[$oid])) { - return; // Prevent infinite recursion - } - - $visited[$oid] = $entity; // mark visited - - $class = $this->em->getClassMetadata($entity::class); - - if ($this->getEntityState($entity) !== self::STATE_MANAGED) { - throw ORMInvalidArgumentException::entityNotManaged($entity); - } - - $this->getEntityPersister($class->name)->refresh( - array_combine($class->getIdentifierFieldNames(), $this->entityIdentifiers[$oid]), - $entity, - $lockMode, - ); - - $this->cascadeRefresh($entity, $visited, $lockMode); - } - - /** - * Cascades a refresh operation to associated entities. - * - * @psalm-param array $visited - * @psalm-param LockMode::*|null $lockMode - */ - private function cascadeRefresh(object $entity, array &$visited, LockMode|int|null $lockMode = null): void - { - $class = $this->em->getClassMetadata($entity::class); - - $associationMappings = array_filter( - $class->associationMappings, - static fn (AssociationMapping $assoc): bool => $assoc->isCascadeRefresh() - ); - - foreach ($associationMappings as $assoc) { - $relatedEntities = $class->reflFields[$assoc->fieldName]->getValue($entity); - - switch (true) { - case $relatedEntities instanceof PersistentCollection: - // Unwrap so that foreach() does not initialize - $relatedEntities = $relatedEntities->unwrap(); - // break; is commented intentionally! - - case $relatedEntities instanceof Collection: - case is_array($relatedEntities): - foreach ($relatedEntities as $relatedEntity) { - $this->doRefresh($relatedEntity, $visited, $lockMode); - } - - break; - - case $relatedEntities !== null: - $this->doRefresh($relatedEntities, $visited, $lockMode); - break; - - default: - // Do nothing - } - } - } - - /** - * Cascades a detach operation to associated entities. - * - * @param array $visited - */ - private function cascadeDetach(object $entity, array &$visited): void - { - $class = $this->em->getClassMetadata($entity::class); - - $associationMappings = array_filter( - $class->associationMappings, - static fn (AssociationMapping $assoc): bool => $assoc->isCascadeDetach() - ); - - foreach ($associationMappings as $assoc) { - $relatedEntities = $class->reflFields[$assoc->fieldName]->getValue($entity); - - switch (true) { - case $relatedEntities instanceof PersistentCollection: - // Unwrap so that foreach() does not initialize - $relatedEntities = $relatedEntities->unwrap(); - // break; is commented intentionally! - - case $relatedEntities instanceof Collection: - case is_array($relatedEntities): - foreach ($relatedEntities as $relatedEntity) { - $this->doDetach($relatedEntity, $visited); - } - - break; - - case $relatedEntities !== null: - $this->doDetach($relatedEntities, $visited); - break; - - default: - // Do nothing - } - } - } - - /** - * Cascades the save operation to associated entities. - * - * @psalm-param array $visited - */ - private function cascadePersist(object $entity, array &$visited): void - { - if ($this->isUninitializedObject($entity)) { - // nothing to do - proxy is not initialized, therefore we don't do anything with it - return; - } - - $class = $this->em->getClassMetadata($entity::class); - - $associationMappings = array_filter( - $class->associationMappings, - static fn (AssociationMapping $assoc): bool => $assoc->isCascadePersist() - ); - - foreach ($associationMappings as $assoc) { - $relatedEntities = $class->reflFields[$assoc->fieldName]->getValue($entity); - - switch (true) { - case $relatedEntities instanceof PersistentCollection: - // Unwrap so that foreach() does not initialize - $relatedEntities = $relatedEntities->unwrap(); - // break; is commented intentionally! - - case $relatedEntities instanceof Collection: - case is_array($relatedEntities): - if ($assoc->isToMany() <= 0) { - throw ORMInvalidArgumentException::invalidAssociation( - $this->em->getClassMetadata($assoc->targetEntity), - $assoc, - $relatedEntities, - ); - } - - foreach ($relatedEntities as $relatedEntity) { - $this->doPersist($relatedEntity, $visited); - } - - break; - - case $relatedEntities !== null: - if (! $relatedEntities instanceof $assoc->targetEntity) { - throw ORMInvalidArgumentException::invalidAssociation( - $this->em->getClassMetadata($assoc->targetEntity), - $assoc, - $relatedEntities, - ); - } - - $this->doPersist($relatedEntities, $visited); - break; - - default: - // Do nothing - } - } - } - - /** - * Cascades the delete operation to associated entities. - * - * @psalm-param array $visited - */ - private function cascadeRemove(object $entity, array &$visited): void - { - $class = $this->em->getClassMetadata($entity::class); - - $associationMappings = array_filter( - $class->associationMappings, - static fn (AssociationMapping $assoc): bool => $assoc->isCascadeRemove() - ); - - if ($associationMappings) { - $this->initializeObject($entity); - } - - $entitiesToCascade = []; - - foreach ($associationMappings as $assoc) { - $relatedEntities = $class->reflFields[$assoc->fieldName]->getValue($entity); - - switch (true) { - case $relatedEntities instanceof Collection: - case is_array($relatedEntities): - // If its a PersistentCollection initialization is intended! No unwrap! - foreach ($relatedEntities as $relatedEntity) { - $entitiesToCascade[] = $relatedEntity; - } - - break; - - case $relatedEntities !== null: - $entitiesToCascade[] = $relatedEntities; - break; - - default: - // Do nothing - } - } - - foreach ($entitiesToCascade as $relatedEntity) { - $this->doRemove($relatedEntity, $visited); - } - } - - /** - * Acquire a lock on the given entity. - * - * @psalm-param LockMode::* $lockMode - * - * @throws ORMInvalidArgumentException - * @throws TransactionRequiredException - * @throws OptimisticLockException - */ - public function lock(object $entity, LockMode|int $lockMode, DateTimeInterface|int|null $lockVersion = null): void - { - if ($this->getEntityState($entity, self::STATE_DETACHED) !== self::STATE_MANAGED) { - throw ORMInvalidArgumentException::entityNotManaged($entity); - } - - $class = $this->em->getClassMetadata($entity::class); - - switch (true) { - case $lockMode === LockMode::OPTIMISTIC: - if (! $class->isVersioned) { - throw OptimisticLockException::notVersioned($class->name); - } - - if ($lockVersion === null) { - return; - } - - $this->initializeObject($entity); - - assert($class->versionField !== null); - $entityVersion = $class->reflFields[$class->versionField]->getValue($entity); - - // phpcs:ignore SlevomatCodingStandard.Operators.DisallowEqualOperators.DisallowedNotEqualOperator - if ($entityVersion != $lockVersion) { - throw OptimisticLockException::lockFailedVersionMismatch($entity, $lockVersion, $entityVersion); - } - - break; - - case $lockMode === LockMode::NONE: - case $lockMode === LockMode::PESSIMISTIC_READ: - case $lockMode === LockMode::PESSIMISTIC_WRITE: - if (! $this->em->getConnection()->isTransactionActive()) { - throw TransactionRequiredException::transactionRequired(); - } - - $oid = spl_object_id($entity); - - $this->getEntityPersister($class->name)->lock( - array_combine($class->getIdentifierFieldNames(), $this->entityIdentifiers[$oid]), - $lockMode, - ); - break; - - default: - // Do nothing - } - } - - /** - * Clears the UnitOfWork. - */ - public function clear(): void - { - $this->identityMap = - $this->entityIdentifiers = - $this->originalEntityData = - $this->entityChangeSets = - $this->entityStates = - $this->scheduledForSynchronization = - $this->entityInsertions = - $this->entityUpdates = - $this->entityDeletions = - $this->nonCascadedNewDetectedEntities = - $this->collectionDeletions = - $this->collectionUpdates = - $this->extraUpdates = - $this->readOnlyObjects = - $this->pendingCollectionElementRemovals = - $this->visitedCollections = - $this->eagerLoadingEntities = - $this->eagerLoadingCollections = - $this->orphanRemovals = []; - - if ($this->evm->hasListeners(Events::onClear)) { - $this->evm->dispatchEvent(Events::onClear, new OnClearEventArgs($this->em)); - } - } - - /** - * INTERNAL: - * Schedules an orphaned entity for removal. The remove() operation will be - * invoked on that entity at the beginning of the next commit of this - * UnitOfWork. - * - * @ignore - */ - public function scheduleOrphanRemoval(object $entity): void - { - $this->orphanRemovals[spl_object_id($entity)] = $entity; - } - - /** - * INTERNAL: - * Cancels a previously scheduled orphan removal. - * - * @ignore - */ - public function cancelOrphanRemoval(object $entity): void - { - unset($this->orphanRemovals[spl_object_id($entity)]); - } - - /** - * INTERNAL: - * Schedules a complete collection for removal when this UnitOfWork commits. - */ - public function scheduleCollectionDeletion(PersistentCollection $coll): void - { - $coid = spl_object_id($coll); - - // TODO: if $coll is already scheduled for recreation ... what to do? - // Just remove $coll from the scheduled recreations? - unset($this->collectionUpdates[$coid]); - - $this->collectionDeletions[$coid] = $coll; - } - - public function isCollectionScheduledForDeletion(PersistentCollection $coll): bool - { - return isset($this->collectionDeletions[spl_object_id($coll)]); - } - - /** - * INTERNAL: - * Creates an entity. Used for reconstitution of persistent entities. - * - * Internal note: Highly performance-sensitive method. - * - * @param string $className The name of the entity class. - * @param mixed[] $data The data for the entity. - * @param mixed[] $hints Any hints to account for during reconstitution/lookup of the entity. - * @psalm-param class-string $className - * @psalm-param array $hints - * - * @return object The managed entity instance. - * - * @ignore - * @todo Rename: getOrCreateEntity - */ - public function createEntity(string $className, array $data, array &$hints = []): object - { - $class = $this->em->getClassMetadata($className); - - $id = $this->identifierFlattener->flattenIdentifier($class, $data); - $idHash = self::getIdHashByIdentifier($id); - - if (isset($this->identityMap[$class->rootEntityName][$idHash])) { - $entity = $this->identityMap[$class->rootEntityName][$idHash]; - $oid = spl_object_id($entity); - - if ( - isset($hints[Query::HINT_REFRESH], $hints[Query::HINT_REFRESH_ENTITY]) - ) { - $unmanagedProxy = $hints[Query::HINT_REFRESH_ENTITY]; - if ( - $unmanagedProxy !== $entity - && $this->isIdentifierEquals($unmanagedProxy, $entity) - ) { - // We will hydrate the given un-managed proxy anyway: - // continue work, but consider it the entity from now on - $entity = $unmanagedProxy; - } - } - - if ($this->isUninitializedObject($entity)) { - $entity->__setInitialized(true); - } else { - if ( - ! isset($hints[Query::HINT_REFRESH]) - || (isset($hints[Query::HINT_REFRESH_ENTITY]) && $hints[Query::HINT_REFRESH_ENTITY] !== $entity) - ) { - return $entity; - } - } - - $this->originalEntityData[$oid] = $data; - } else { - $entity = $class->newInstance(); - $oid = spl_object_id($entity); - $this->registerManaged($entity, $id, $data); - - if (isset($hints[Query::HINT_READ_ONLY])) { - $this->readOnlyObjects[$oid] = true; - } - } - - foreach ($data as $field => $value) { - if (isset($class->fieldMappings[$field])) { - $class->reflFields[$field]->setValue($entity, $value); - } - } - - // Loading the entity right here, if its in the eager loading map get rid of it there. - unset($this->eagerLoadingEntities[$class->rootEntityName][$idHash]); - - if (isset($this->eagerLoadingEntities[$class->rootEntityName]) && ! $this->eagerLoadingEntities[$class->rootEntityName]) { - unset($this->eagerLoadingEntities[$class->rootEntityName]); - } - - foreach ($class->associationMappings as $field => $assoc) { - // Check if the association is not among the fetch-joined associations already. - if (isset($hints['fetchAlias'], $hints['fetched'][$hints['fetchAlias']][$field])) { - continue; - } - - if (! isset($hints['fetchMode'][$class->name][$field])) { - $hints['fetchMode'][$class->name][$field] = $assoc->fetch; - } - - $targetClass = $this->em->getClassMetadata($assoc->targetEntity); - - switch (true) { - case $assoc->isToOne(): - if (! $assoc->isOwningSide()) { - // use the given entity association - if (isset($data[$field]) && is_object($data[$field]) && isset($this->entityStates[spl_object_id($data[$field])])) { - $this->originalEntityData[$oid][$field] = $data[$field]; - - $class->reflFields[$field]->setValue($entity, $data[$field]); - $targetClass->reflFields[$assoc->mappedBy]->setValue($data[$field], $entity); - - continue 2; - } - - // Inverse side of x-to-one can never be lazy - $class->reflFields[$field]->setValue($entity, $this->getEntityPersister($assoc->targetEntity)->loadOneToOneEntity($assoc, $entity)); - - continue 2; - } - - // use the entity association - if (isset($data[$field]) && is_object($data[$field]) && isset($this->entityStates[spl_object_id($data[$field])])) { - $class->reflFields[$field]->setValue($entity, $data[$field]); - $this->originalEntityData[$oid][$field] = $data[$field]; - - break; - } - - $associatedId = []; - - assert($assoc->isToOneOwningSide()); - // TODO: Is this even computed right in all cases of composite keys? - foreach ($assoc->targetToSourceKeyColumns as $targetColumn => $srcColumn) { - $joinColumnValue = $data[$srcColumn] ?? null; - - if ($joinColumnValue !== null) { - if ($joinColumnValue instanceof BackedEnum) { - $joinColumnValue = $joinColumnValue->value; - } - - if ($targetClass->containsForeignIdentifier) { - $associatedId[$targetClass->getFieldForColumn($targetColumn)] = $joinColumnValue; - } else { - $associatedId[$targetClass->fieldNames[$targetColumn]] = $joinColumnValue; - } - } elseif (in_array($targetClass->getFieldForColumn($targetColumn), $targetClass->identifier, true)) { - // the missing key is part of target's entity primary key - $associatedId = []; - break; - } - } - - if (! $associatedId) { - // Foreign key is NULL - $class->reflFields[$field]->setValue($entity, null); - $this->originalEntityData[$oid][$field] = null; - - break; - } - - // Foreign key is set - // Check identity map first - // FIXME: Can break easily with composite keys if join column values are in - // wrong order. The correct order is the one in ClassMetadata#identifier. - $relatedIdHash = self::getIdHashByIdentifier($associatedId); - - switch (true) { - case isset($this->identityMap[$targetClass->rootEntityName][$relatedIdHash]): - $newValue = $this->identityMap[$targetClass->rootEntityName][$relatedIdHash]; - - // If this is an uninitialized proxy, we are deferring eager loads, - // this association is marked as eager fetch, and its an uninitialized proxy (wtf!) - // then we can append this entity for eager loading! - if ( - $hints['fetchMode'][$class->name][$field] === ClassMetadata::FETCH_EAGER && - isset($hints[self::HINT_DEFEREAGERLOAD]) && - ! $targetClass->isIdentifierComposite && - $this->isUninitializedObject($newValue) - ) { - $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($associatedId); - } - - break; - - case $targetClass->subClasses: - // If it might be a subtype, it can not be lazy. There isn't even - // a way to solve this with deferred eager loading, which means putting - // an entity with subclasses at a *-to-one location is really bad! (performance-wise) - $newValue = $this->getEntityPersister($assoc->targetEntity)->loadOneToOneEntity($assoc, $entity, $associatedId); - break; - - default: - $normalizedAssociatedId = $this->normalizeIdentifier($targetClass, $associatedId); - - switch (true) { - // We are negating the condition here. Other cases will assume it is valid! - case $hints['fetchMode'][$class->name][$field] !== ClassMetadata::FETCH_EAGER: - $newValue = $this->em->getProxyFactory()->getProxy($assoc->targetEntity, $normalizedAssociatedId); - $this->registerManaged($newValue, $associatedId, []); - break; - - // Deferred eager load only works for single identifier classes - case isset($hints[self::HINT_DEFEREAGERLOAD]) && - $hints[self::HINT_DEFEREAGERLOAD] && - ! $targetClass->isIdentifierComposite: - // TODO: Is there a faster approach? - $this->eagerLoadingEntities[$targetClass->rootEntityName][$relatedIdHash] = current($normalizedAssociatedId); - - $newValue = $this->em->getProxyFactory()->getProxy($assoc->targetEntity, $normalizedAssociatedId); - $this->registerManaged($newValue, $associatedId, []); - break; - - default: - // TODO: This is very imperformant, ignore it? - $newValue = $this->em->find($assoc->targetEntity, $normalizedAssociatedId); - break; - } - } - - $this->originalEntityData[$oid][$field] = $newValue; - $class->reflFields[$field]->setValue($entity, $newValue); - - if ($assoc->inversedBy !== null && $assoc->isOneToOne() && $newValue !== null) { - $inverseAssoc = $targetClass->associationMappings[$assoc->inversedBy]; - $targetClass->reflFields[$inverseAssoc->fieldName]->setValue($newValue, $entity); - } - - break; - - default: - assert($assoc->isToMany()); - // Ignore if its a cached collection - if (isset($hints[Query::HINT_CACHE_ENABLED]) && $class->getFieldValue($entity, $field) instanceof PersistentCollection) { - break; - } - - // use the given collection - if (isset($data[$field]) && $data[$field] instanceof PersistentCollection) { - $data[$field]->setOwner($entity, $assoc); - - $class->reflFields[$field]->setValue($entity, $data[$field]); - $this->originalEntityData[$oid][$field] = $data[$field]; - - break; - } - - // Inject collection - $pColl = new PersistentCollection($this->em, $targetClass, new ArrayCollection()); - $pColl->setOwner($entity, $assoc); - $pColl->setInitialized(false); - - $reflField = $class->reflFields[$field]; - $reflField->setValue($entity, $pColl); - - if ($hints['fetchMode'][$class->name][$field] === ClassMetadata::FETCH_EAGER) { - $isIteration = isset($hints[Query::HINT_INTERNAL_ITERATION]) && $hints[Query::HINT_INTERNAL_ITERATION]; - if (! $isIteration && $assoc->isOneToMany() && ! $targetClass->isIdentifierComposite && ! $assoc->isIndexed()) { - $this->scheduleCollectionForBatchLoading($pColl, $class); - } else { - $this->loadCollection($pColl); - $pColl->takeSnapshot(); - } - } - - $this->originalEntityData[$oid][$field] = $pColl; - break; - } - } - - // defer invoking of postLoad event to hydration complete step - $this->hydrationCompleteHandler->deferPostLoadInvoking($class, $entity); - - return $entity; - } - - public function triggerEagerLoads(): void - { - if (! $this->eagerLoadingEntities && ! $this->eagerLoadingCollections) { - return; - } - - // avoid infinite recursion - $eagerLoadingEntities = $this->eagerLoadingEntities; - $this->eagerLoadingEntities = []; - - foreach ($eagerLoadingEntities as $entityName => $ids) { - if (! $ids) { - continue; - } - - $class = $this->em->getClassMetadata($entityName); - $batches = array_chunk($ids, $this->em->getConfiguration()->getEagerFetchBatchSize()); - - foreach ($batches as $batchedIds) { - $this->getEntityPersister($entityName)->loadAll( - array_combine($class->identifier, [$batchedIds]), - ); - } - } - - $eagerLoadingCollections = $this->eagerLoadingCollections; // avoid recursion - $this->eagerLoadingCollections = []; - - foreach ($eagerLoadingCollections as $group) { - $this->eagerLoadCollections($group['items'], $group['mapping']); - } - } - - /** - * Load all data into the given collections, according to the specified mapping - * - * @param PersistentCollection[] $collections - */ - private function eagerLoadCollections(array $collections, ToManyInverseSideMapping $mapping): void - { - $targetEntity = $mapping->targetEntity; - $class = $this->em->getClassMetadata($mapping->sourceEntity); - $mappedBy = $mapping->mappedBy; - - $batches = array_chunk($collections, $this->em->getConfiguration()->getEagerFetchBatchSize(), true); - - foreach ($batches as $collectionBatch) { - $entities = []; - - foreach ($collectionBatch as $collection) { - $entities[] = $collection->getOwner(); - } - - $found = $this->getEntityPersister($targetEntity)->loadAll([$mappedBy => $entities], $mapping->orderBy); - - $targetClass = $this->em->getClassMetadata($targetEntity); - $targetProperty = $targetClass->getReflectionProperty($mappedBy); - assert($targetProperty !== null); - - foreach ($found as $targetValue) { - $sourceEntity = $targetProperty->getValue($targetValue); - - if ($sourceEntity === null && isset($targetClass->associationMappings[$mappedBy]->joinColumns)) { - // case where the hydration $targetValue itself has not yet fully completed, for example - // in case a bi-directional association is being hydrated and deferring eager loading is - // not possible due to subclassing. - $data = $this->getOriginalEntityData($targetValue); - $id = []; - foreach ($targetClass->associationMappings[$mappedBy]->joinColumns as $joinColumn) { - $id[] = $data[$joinColumn->name]; - } - } else { - $id = $this->identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($sourceEntity)); - } - - $idHash = implode(' ', $id); - - if ($mapping->indexBy !== null) { - $indexByProperty = $targetClass->getReflectionProperty($mapping->indexBy); - assert($indexByProperty !== null); - $collectionBatch[$idHash]->hydrateSet($indexByProperty->getValue($targetValue), $targetValue); - } else { - $collectionBatch[$idHash]->add($targetValue); - } - } - } - - foreach ($collections as $association) { - $association->setInitialized(true); - $association->takeSnapshot(); - } - } - - /** - * Initializes (loads) an uninitialized persistent collection of an entity. - * - * @todo Maybe later move to EntityManager#initialize($proxyOrCollection). See DDC-733. - */ - public function loadCollection(PersistentCollection $collection): void - { - $assoc = $collection->getMapping(); - $persister = $this->getEntityPersister($assoc->targetEntity); - - switch ($assoc->type()) { - case ClassMetadata::ONE_TO_MANY: - $persister->loadOneToManyCollection($assoc, $collection->getOwner(), $collection); - break; - - case ClassMetadata::MANY_TO_MANY: - $persister->loadManyToManyCollection($assoc, $collection->getOwner(), $collection); - break; - } - - $collection->setInitialized(true); - } - - /** - * Schedule this collection for batch loading at the end of the UnitOfWork - */ - private function scheduleCollectionForBatchLoading(PersistentCollection $collection, ClassMetadata $sourceClass): void - { - $mapping = $collection->getMapping(); - $name = $mapping->sourceEntity . '#' . $mapping->fieldName; - - if (! isset($this->eagerLoadingCollections[$name])) { - $this->eagerLoadingCollections[$name] = [ - 'items' => [], - 'mapping' => $mapping, - ]; - } - - $owner = $collection->getOwner(); - assert($owner !== null); - - $id = $this->identifierFlattener->flattenIdentifier( - $sourceClass, - $sourceClass->getIdentifierValues($owner), - ); - $idHash = implode(' ', $id); - - $this->eagerLoadingCollections[$name]['items'][$idHash] = $collection; - } - - /** - * Gets the identity map of the UnitOfWork. - * - * @psalm-return array> - */ - public function getIdentityMap(): array - { - return $this->identityMap; - } - - /** - * Gets the original data of an entity. The original data is the data that was - * present at the time the entity was reconstituted from the database. - * - * @psalm-return array - */ - public function getOriginalEntityData(object $entity): array - { - $oid = spl_object_id($entity); - - return $this->originalEntityData[$oid] ?? []; - } - - /** - * @param mixed[] $data - * - * @ignore - */ - public function setOriginalEntityData(object $entity, array $data): void - { - $this->originalEntityData[spl_object_id($entity)] = $data; - } - - /** - * INTERNAL: - * Sets a property value of the original data array of an entity. - * - * @ignore - */ - public function setOriginalEntityProperty(int $oid, string $property, mixed $value): void - { - $this->originalEntityData[$oid][$property] = $value; - } - - /** - * Gets the identifier of an entity. - * The returned value is always an array of identifier values. If the entity - * has a composite identifier then the identifier values are in the same - * order as the identifier field names as returned by ClassMetadata#getIdentifierFieldNames(). - * - * @return mixed[] The identifier values. - */ - public function getEntityIdentifier(object $entity): array - { - return $this->entityIdentifiers[spl_object_id($entity)] - ?? throw EntityNotFoundException::noIdentifierFound(get_debug_type($entity)); - } - - /** - * Processes an entity instance to extract their identifier values. - * - * @return mixed A scalar value. - * - * @throws ORMInvalidArgumentException - */ - public function getSingleIdentifierValue(object $entity): mixed - { - $class = $this->em->getClassMetadata($entity::class); - - if ($class->isIdentifierComposite) { - throw ORMInvalidArgumentException::invalidCompositeIdentifier(); - } - - $values = $this->isInIdentityMap($entity) - ? $this->getEntityIdentifier($entity) - : $class->getIdentifierValues($entity); - - return $values[$class->identifier[0]] ?? null; - } - - /** - * Tries to find an entity with the given identifier in the identity map of - * this UnitOfWork. - * - * @param mixed $id The entity identifier to look for. - * @param string $rootClassName The name of the root class of the mapped entity hierarchy. - * @psalm-param class-string $rootClassName - * - * @return object|false Returns the entity with the specified identifier if it exists in - * this UnitOfWork, FALSE otherwise. - */ - public function tryGetById(mixed $id, string $rootClassName): object|false - { - $idHash = self::getIdHashByIdentifier((array) $id); - - return $this->identityMap[$rootClassName][$idHash] ?? false; - } - - /** - * Schedules an entity for dirty-checking at commit-time. - * - * @todo Rename: scheduleForSynchronization - */ - public function scheduleForDirtyCheck(object $entity): void - { - $rootClassName = $this->em->getClassMetadata($entity::class)->rootEntityName; - - $this->scheduledForSynchronization[$rootClassName][spl_object_id($entity)] = $entity; - } - - /** - * Checks whether the UnitOfWork has any pending insertions. - */ - public function hasPendingInsertions(): bool - { - return ! empty($this->entityInsertions); - } - - /** - * Calculates the size of the UnitOfWork. The size of the UnitOfWork is the - * number of entities in the identity map. - */ - public function size(): int - { - return array_sum(array_map('count', $this->identityMap)); - } - - /** - * Gets the EntityPersister for an Entity. - * - * @psalm-param class-string $entityName - */ - public function getEntityPersister(string $entityName): EntityPersister - { - if (isset($this->persisters[$entityName])) { - return $this->persisters[$entityName]; - } - - $class = $this->em->getClassMetadata($entityName); - - $persister = match (true) { - $class->isInheritanceTypeNone() => new BasicEntityPersister($this->em, $class), - $class->isInheritanceTypeSingleTable() => new SingleTablePersister($this->em, $class), - $class->isInheritanceTypeJoined() => new JoinedSubclassPersister($this->em, $class), - default => throw new RuntimeException('No persister found for entity.'), - }; - - if ($this->hasCache && $class->cache !== null) { - $persister = $this->em->getConfiguration() - ->getSecondLevelCacheConfiguration() - ->getCacheFactory() - ->buildCachedEntityPersister($this->em, $persister, $class); - } - - $this->persisters[$entityName] = $persister; - - return $this->persisters[$entityName]; - } - - /** Gets a collection persister for a collection-valued association. */ - public function getCollectionPersister(AssociationMapping $association): CollectionPersister - { - $role = isset($association->cache) - ? $association->sourceEntity . '::' . $association->fieldName - : $association->type(); - - if (isset($this->collectionPersisters[$role])) { - return $this->collectionPersisters[$role]; - } - - $persister = $association->type() === ClassMetadata::ONE_TO_MANY - ? new OneToManyPersister($this->em) - : new ManyToManyPersister($this->em); - - if ($this->hasCache && isset($association->cache)) { - $persister = $this->em->getConfiguration() - ->getSecondLevelCacheConfiguration() - ->getCacheFactory() - ->buildCachedCollectionPersister($this->em, $persister, $association); - } - - $this->collectionPersisters[$role] = $persister; - - return $this->collectionPersisters[$role]; - } - - /** - * INTERNAL: - * Registers an entity as managed. - * - * @param mixed[] $id The identifier values. - * @param mixed[] $data The original entity data. - */ - public function registerManaged(object $entity, array $id, array $data): void - { - $oid = spl_object_id($entity); - - $this->entityIdentifiers[$oid] = $id; - $this->entityStates[$oid] = self::STATE_MANAGED; - $this->originalEntityData[$oid] = $data; - - $this->addToIdentityMap($entity); - } - - /* PropertyChangedListener implementation */ - - /** - * Notifies this UnitOfWork of a property change in an entity. - * - * {@inheritDoc} - */ - public function propertyChanged(object $sender, string $propertyName, mixed $oldValue, mixed $newValue): void - { - $oid = spl_object_id($sender); - $class = $this->em->getClassMetadata($sender::class); - - $isAssocField = isset($class->associationMappings[$propertyName]); - - if (! $isAssocField && ! isset($class->fieldMappings[$propertyName])) { - return; // ignore non-persistent fields - } - - // Update changeset and mark entity for synchronization - $this->entityChangeSets[$oid][$propertyName] = [$oldValue, $newValue]; - - if (! isset($this->scheduledForSynchronization[$class->rootEntityName][$oid])) { - $this->scheduleForDirtyCheck($sender); - } - } - - /** - * Gets the currently scheduled entity insertions in this UnitOfWork. - * - * @psalm-return array - */ - public function getScheduledEntityInsertions(): array - { - return $this->entityInsertions; - } - - /** - * Gets the currently scheduled entity updates in this UnitOfWork. - * - * @psalm-return array - */ - public function getScheduledEntityUpdates(): array - { - return $this->entityUpdates; - } - - /** - * Gets the currently scheduled entity deletions in this UnitOfWork. - * - * @psalm-return array - */ - public function getScheduledEntityDeletions(): array - { - return $this->entityDeletions; - } - - /** - * Gets the currently scheduled complete collection deletions - * - * @psalm-return array> - */ - public function getScheduledCollectionDeletions(): array - { - return $this->collectionDeletions; - } - - /** - * Gets the currently scheduled collection inserts, updates and deletes. - * - * @psalm-return array> - */ - public function getScheduledCollectionUpdates(): array - { - return $this->collectionUpdates; - } - - /** - * Helper method to initialize a lazy loading proxy or persistent collection. - */ - public function initializeObject(object $obj): void - { - if ($obj instanceof InternalProxy) { - $obj->__load(); - - return; - } - - if ($obj instanceof PersistentCollection) { - $obj->initialize(); - } - } - - /** - * Tests if a value is an uninitialized entity. - * - * @psalm-assert-if-true InternalProxy $obj - */ - public function isUninitializedObject(mixed $obj): bool - { - return $obj instanceof InternalProxy && ! $obj->__isInitialized(); - } - - /** - * Helper method to show an object as string. - */ - private static function objToStr(object $obj): string - { - return $obj instanceof Stringable ? (string) $obj : get_debug_type($obj) . '@' . spl_object_id($obj); - } - - /** - * Marks an entity as read-only so that it will not be considered for updates during UnitOfWork#commit(). - * - * This operation cannot be undone as some parts of the UnitOfWork now keep gathering information - * on this object that might be necessary to perform a correct update. - * - * @throws ORMInvalidArgumentException - */ - public function markReadOnly(object $object): void - { - if (! $this->isInIdentityMap($object)) { - throw ORMInvalidArgumentException::readOnlyRequiresManagedEntity($object); - } - - $this->readOnlyObjects[spl_object_id($object)] = true; - } - - /** - * Is this entity read only? - * - * @throws ORMInvalidArgumentException - */ - public function isReadOnly(object $object): bool - { - return isset($this->readOnlyObjects[spl_object_id($object)]); - } - - /** - * Perform whatever processing is encapsulated here after completion of the transaction. - */ - private function afterTransactionComplete(): void - { - $this->performCallbackOnCachedPersister(static function (CachedPersister $persister): void { - $persister->afterTransactionComplete(); - }); - } - - /** - * Perform whatever processing is encapsulated here after completion of the rolled-back. - */ - private function afterTransactionRolledBack(): void - { - $this->performCallbackOnCachedPersister(static function (CachedPersister $persister): void { - $persister->afterTransactionRolledBack(); - }); - } - - /** - * Performs an action after the transaction. - */ - private function performCallbackOnCachedPersister(callable $callback): void - { - if (! $this->hasCache) { - return; - } - - foreach ([...$this->persisters, ...$this->collectionPersisters] as $persister) { - if ($persister instanceof CachedPersister) { - $callback($persister); - } - } - } - - private function dispatchOnFlushEvent(): void - { - if ($this->evm->hasListeners(Events::onFlush)) { - $this->evm->dispatchEvent(Events::onFlush, new OnFlushEventArgs($this->em)); - } - } - - private function dispatchPostFlushEvent(): void - { - if ($this->evm->hasListeners(Events::postFlush)) { - $this->evm->dispatchEvent(Events::postFlush, new PostFlushEventArgs($this->em)); - } - } - - /** - * Verifies if two given entities actually are the same based on identifier comparison - */ - private function isIdentifierEquals(object $entity1, object $entity2): bool - { - if ($entity1 === $entity2) { - return true; - } - - $class = $this->em->getClassMetadata($entity1::class); - - if ($class !== $this->em->getClassMetadata($entity2::class)) { - return false; - } - - $oid1 = spl_object_id($entity1); - $oid2 = spl_object_id($entity2); - - $id1 = $this->entityIdentifiers[$oid1] ?? $this->identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($entity1)); - $id2 = $this->entityIdentifiers[$oid2] ?? $this->identifierFlattener->flattenIdentifier($class, $class->getIdentifierValues($entity2)); - - return $id1 === $id2 || self::getIdHashByIdentifier($id1) === self::getIdHashByIdentifier($id2); - } - - /** @throws ORMInvalidArgumentException */ - private function assertThatThereAreNoUnintentionallyNonPersistedAssociations(): void - { - $entitiesNeedingCascadePersist = array_diff_key($this->nonCascadedNewDetectedEntities, $this->entityInsertions); - - $this->nonCascadedNewDetectedEntities = []; - - if ($entitiesNeedingCascadePersist) { - throw ORMInvalidArgumentException::newEntitiesFoundThroughRelationships( - array_values($entitiesNeedingCascadePersist), - ); - } - } - - /** - * This method called by hydrators, and indicates that hydrator totally completed current hydration cycle. - * Unit of work able to fire deferred events, related to loading events here. - * - * @internal should be called internally from object hydrators - */ - public function hydrationComplete(): void - { - $this->hydrationCompleteHandler->hydrationComplete(); - } - - /** @throws MappingException if the entity has more than a single identifier. */ - private function convertSingleFieldIdentifierToPHPValue(ClassMetadata $class, mixed $identifierValue): mixed - { - return $this->em->getConnection()->convertToPHPValue( - $identifierValue, - $class->getTypeOfField($class->getSingleIdentifierFieldName()), - ); - } - - /** - * Given a flat identifier, this method will produce another flat identifier, but with all - * association fields that are mapped as identifiers replaced by entity references, recursively. - * - * @param mixed[] $flatIdentifier - * - * @return array - */ - private function normalizeIdentifier(ClassMetadata $targetClass, array $flatIdentifier): array - { - $normalizedAssociatedId = []; - - foreach ($targetClass->getIdentifierFieldNames() as $name) { - if (! array_key_exists($name, $flatIdentifier)) { - continue; - } - - if (! $targetClass->isSingleValuedAssociation($name)) { - $normalizedAssociatedId[$name] = $flatIdentifier[$name]; - continue; - } - - $targetIdMetadata = $this->em->getClassMetadata($targetClass->getAssociationTargetClass($name)); - - // Note: the ORM prevents using an entity with a composite identifier as an identifier association - // therefore, reset($targetIdMetadata->identifier) is always correct - $normalizedAssociatedId[$name] = $this->em->getReference( - $targetIdMetadata->getName(), - $this->normalizeIdentifier( - $targetIdMetadata, - [(string) reset($targetIdMetadata->identifier) => $flatIdentifier[$name]], - ), - ); - } - - return $normalizedAssociatedId; - } - - /** - * Assign a post-insert generated ID to an entity - * - * This is used by EntityPersisters after they inserted entities into the database. - * It will place the assigned ID values in the entity's fields and start tracking - * the entity in the identity map. - */ - final public function assignPostInsertId(object $entity, mixed $generatedId): void - { - $class = $this->em->getClassMetadata($entity::class); - $idField = $class->getSingleIdentifierFieldName(); - $idValue = $this->convertSingleFieldIdentifierToPHPValue($class, $generatedId); - $oid = spl_object_id($entity); - - $class->reflFields[$idField]->setValue($entity, $idValue); - - $this->entityIdentifiers[$oid] = [$idField => $idValue]; - $this->entityStates[$oid] = self::STATE_MANAGED; - $this->originalEntityData[$oid][$idField] = $idValue; - - $this->addToIdentityMap($entity); - } -} diff --git a/vendor/doctrine/orm/src/Utility/HierarchyDiscriminatorResolver.php b/vendor/doctrine/orm/src/Utility/HierarchyDiscriminatorResolver.php deleted file mode 100644 index b682125..0000000 --- a/vendor/doctrine/orm/src/Utility/HierarchyDiscriminatorResolver.php +++ /dev/null @@ -1,44 +0,0 @@ - - */ - public static function resolveDiscriminatorsForClass( - ClassMetadata $rootClassMetadata, - EntityManagerInterface $entityManager, - ): array { - $hierarchyClasses = $rootClassMetadata->subClasses; - $hierarchyClasses[] = $rootClassMetadata->name; - - $discriminators = []; - - foreach ($hierarchyClasses as $class) { - $currentMetadata = $entityManager->getClassMetadata($class); - $currentDiscriminator = $currentMetadata->discriminatorValue; - - if ($currentDiscriminator !== null) { - $discriminators[$currentDiscriminator] = null; - } - } - - return $discriminators; - } -} diff --git a/vendor/doctrine/orm/src/Utility/IdentifierFlattener.php b/vendor/doctrine/orm/src/Utility/IdentifierFlattener.php deleted file mode 100644 index 3792d33..0000000 --- a/vendor/doctrine/orm/src/Utility/IdentifierFlattener.php +++ /dev/null @@ -1,83 +0,0 @@ - - */ - public function flattenIdentifier(ClassMetadata $class, array $id): array - { - $flatId = []; - - foreach ($class->identifier as $field) { - if (isset($class->associationMappings[$field]) && isset($id[$field]) && is_a($id[$field], $class->associationMappings[$field]->targetEntity)) { - $targetClassMetadata = $this->metadataFactory->getMetadataFor( - $class->associationMappings[$field]->targetEntity, - ); - assert($targetClassMetadata instanceof ClassMetadata); - - if ($this->unitOfWork->isInIdentityMap($id[$field])) { - $associatedId = $this->flattenIdentifier($targetClassMetadata, $this->unitOfWork->getEntityIdentifier($id[$field])); - } else { - $associatedId = $this->flattenIdentifier($targetClassMetadata, $targetClassMetadata->getIdentifierValues($id[$field])); - } - - $flatId[$field] = implode(' ', $associatedId); - } elseif (isset($class->associationMappings[$field])) { - assert($class->associationMappings[$field]->isToOneOwningSide()); - $associatedId = []; - - foreach ($class->associationMappings[$field]->joinColumns as $joinColumn) { - $associatedId[] = $id[$joinColumn->name]; - } - - $flatId[$field] = implode(' ', $associatedId); - } else { - if ($id[$field] instanceof BackedEnum) { - $flatId[$field] = $id[$field]->value; - } else { - $flatId[$field] = $id[$field]; - } - } - } - - return $flatId; - } -} diff --git a/vendor/doctrine/orm/src/Utility/LockSqlHelper.php b/vendor/doctrine/orm/src/Utility/LockSqlHelper.php deleted file mode 100644 index 7d135eb..0000000 --- a/vendor/doctrine/orm/src/Utility/LockSqlHelper.php +++ /dev/null @@ -1,35 +0,0 @@ - 'LOCK IN SHARE MODE', - $platform instanceof PostgreSQLPlatform => 'FOR SHARE', - default => $this->getWriteLockSQL($platform), - }; - } - - private function getWriteLockSQL(AbstractPlatform $platform): string - { - return match (true) { - $platform instanceof DB2Platform => 'WITH RR USE AND KEEP UPDATE LOCKS', - $platform instanceof SQLitePlatform, - $platform instanceof SQLServerPlatform => '', - default => 'FOR UPDATE', - }; - } -} diff --git a/vendor/doctrine/orm/src/Utility/PersisterHelper.php b/vendor/doctrine/orm/src/Utility/PersisterHelper.php deleted file mode 100644 index 76e9242..0000000 --- a/vendor/doctrine/orm/src/Utility/PersisterHelper.php +++ /dev/null @@ -1,108 +0,0 @@ - - * - * @throws QueryException - */ - public static function getTypeOfField(string $fieldName, ClassMetadata $class, EntityManagerInterface $em): array - { - if (isset($class->fieldMappings[$fieldName])) { - return [$class->fieldMappings[$fieldName]->type]; - } - - if (! isset($class->associationMappings[$fieldName])) { - return []; - } - - $assoc = $class->associationMappings[$fieldName]; - - if (! $assoc->isOwningSide()) { - return self::getTypeOfField($assoc->mappedBy, $em->getClassMetadata($assoc->targetEntity), $em); - } - - if ($assoc->isManyToManyOwningSide()) { - $joinData = $assoc->joinTable; - } else { - $joinData = $assoc; - } - - $types = []; - $targetClass = $em->getClassMetadata($assoc->targetEntity); - - foreach ($joinData->joinColumns as $joinColumn) { - $types[] = self::getTypeOfColumn($joinColumn->referencedColumnName, $targetClass, $em); - } - - return $types; - } - - /** @throws RuntimeException */ - public static function getTypeOfColumn(string $columnName, ClassMetadata $class, EntityManagerInterface $em): string - { - if (isset($class->fieldNames[$columnName])) { - $fieldName = $class->fieldNames[$columnName]; - - if (isset($class->fieldMappings[$fieldName])) { - return $class->fieldMappings[$fieldName]->type; - } - } - - // iterate over to-one association mappings - foreach ($class->associationMappings as $assoc) { - if (! $assoc->isToOneOwningSide()) { - continue; - } - - foreach ($assoc->joinColumns as $joinColumn) { - if ($joinColumn->name === $columnName) { - $targetColumnName = $joinColumn->referencedColumnName; - $targetClass = $em->getClassMetadata($assoc->targetEntity); - - return self::getTypeOfColumn($targetColumnName, $targetClass, $em); - } - } - } - - // iterate over to-many association mappings - foreach ($class->associationMappings as $assoc) { - if (! $assoc->isManyToManyOwningSide()) { - continue; - } - - foreach ($assoc->joinTable->joinColumns as $joinColumn) { - if ($joinColumn->name === $columnName) { - $targetColumnName = $joinColumn->referencedColumnName; - $targetClass = $em->getClassMetadata($assoc->targetEntity); - - return self::getTypeOfColumn($targetColumnName, $targetClass, $em); - } - } - } - - throw new RuntimeException(sprintf( - 'Could not resolve type of column "%s" of class "%s"', - $columnName, - $class->getName(), - )); - } -} diff --git a/vendor/doctrine/persistence/CONTRIBUTING.md b/vendor/doctrine/persistence/CONTRIBUTING.md deleted file mode 100644 index 268200a..0000000 --- a/vendor/doctrine/persistence/CONTRIBUTING.md +++ /dev/null @@ -1,11 +0,0 @@ -# Circular dependency - -This package has a development dependency on `doctrine/common`, which has a -regular dependency on this package (`^2.0` at the time of writing). - -To be able to use Composer, one has to let it understand that this is version 2 -(even when developing on 3.0.x), as follows: - -```shell -COMPOSER_ROOT_VERSION=2.0 composer update -v -``` diff --git a/vendor/doctrine/persistence/README.md b/vendor/doctrine/persistence/README.md deleted file mode 100644 index aeaaad3..0000000 --- a/vendor/doctrine/persistence/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# Doctrine Persistence - -[![GitHub Actions][GA 3.3 image]][GA 3.3] -[![Code Coverage][Coverage 3.3 image]][CodeCov 3.3] - -The Doctrine Persistence project is a library that provides common abstractions for object mapper persistence. - -## More resources: - -* [Website](https://www.doctrine-project.org/) -* [Documentation](https://www.doctrine-project.org/projects/doctrine-persistence/en/latest/index.html) -* [Downloads](https://github.com/doctrine/persistence/releases) - - [Coverage 3.3 image]: https://codecov.io/gh/doctrine/persistence/branch/3.3.x/graph/badge.svg - [CodeCov 3.3]: https://codecov.io/gh/doctrine/persistence/branch/3.3.x - [GA 3.3 image]: https://github.com/doctrine/persistence/workflows/Continuous%20Integration/badge.svg?branch=3.3.x - [GA 3.3]: https://github.com/doctrine/persistence/actions?query=workflow%3A%22Continuous+Integration%22+branch%3A3.3.x diff --git a/vendor/doctrine/persistence/UPGRADE.md b/vendor/doctrine/persistence/UPGRADE.md deleted file mode 100644 index d7f5b04..0000000 --- a/vendor/doctrine/persistence/UPGRADE.md +++ /dev/null @@ -1,154 +0,0 @@ -Note about upgrading: Doctrine uses static and runtime mechanisms to raise -awareness about deprecated code. - -- Use of `@deprecated` docblock that is detected by IDEs (like PHPStorm) or - Static Analysis tools (like Psalm, phpstan) -- Use of our low-overhead runtime deprecation API, details: - https://github.com/doctrine/deprecations/ - -# Upgrade to 3.3 - -## Added method `ObjectManager::isUninitializedObject()` - -Classes implementing `Doctrine\Persistence\ObjectManager` should implement the new -method. This method will be added to the interface in 4.0. - -# Upgrade to 3.1 - -## Deprecated `RuntimePublicReflectionProperty` - -Use `RuntimeReflectionProperty` instead. - -# Upgrade to 3.0 - -## Removed `OnClearEventArgs::clearsAllEntities()` and `OnClearEventArgs::getEntityClass()` - -These methods only make sense when partially clearing the object manager, which -is no longer possible. -The second argument of the constructor of `OnClearEventArgs` is removed as well. - -## BC Break: removed `ObjectManagerAware` - -Implement active record style functionality directly in your application, by -using a `postLoad` event. - -## BC Break: removed `AnnotationDriver` - -Use `ColocatedMappingDriver` instead. - -## BC Break: Removed `MappingException::pathRequired()` - -Use `MappingException::pathRequiredForDriver()` instead. - -## BC Break: removed `LifecycleEventArgs::getEntity()` - -Use `LifecycleEventArgs::getObject()` instead. - -## BC Break: removed support for short namespace aliases - -- `AbstractClassMetadataFactory::getFqcnFromAlias()` is removed. -- `ClassMetadataFactory` methods now require their `$className` argument to be an -actual FQCN. - -## BC Break: removed `ObjectManager::merge()` - -`ObjectManagerDecorator::merge()` is removed without replacement. - -## BC Break: removed support for `doctrine/cache` - -Removed support for using doctrine/cache for metadata caching. The -`setCacheDriver` and `getCacheDriver` methods have been removed from -`Doctrine\Persistence\Mapping\AbstractMetadata`. Please use `getCache` and -`setCache` with a PSR-6 implementation instead. - -## BC Break: changed signatures - -`$objectName` has been dropped from the signature of `ObjectManager::clear()`. - -```diff -- public function clear($objectName = null) -+ public function clear(): void -``` - -Also, native parameter type declarations have been added on all public APIs. -Native return type declarations have not been added so that it is possible to -implement types compatible with both 2.x and 3.x. - -## BC Break: Removed `PersistentObject` - -Please implement this functionality directly in your application if you want -ActiveRecord style functionality. - -# Upgrade to 2.5 - -## Deprecated `OnClearEventArgs::clearsAllEntities()` and `OnClearEventArgs::getEntityClass()` - -These methods only make sense when partially clearing the object manager, which -is deprecated. -Passing a second argument to the constructor of `OnClearEventArgs` is -deprecated as well. - -## Deprecated `ObjectManagerAware` - -Along with deprecating `PersistentObject`, deprecating `ObjectManagerAware` -means deprecating support for active record, which already came with a word of -warning. Please implement this directly in your application with a `postLoad` -event if you need active record style functionality. - -## Deprecated `MappingException::pathRequired()` - -`MappingException::pathRequiredForDriver()` should be used instead. - -# Upgrade to 2.4 - -## Deprecated `AnnotationDriver` - -Since attributes were introduced in PHP 8.0, annotations are deprecated. -`AnnotationDriver` is an abstract class that is used when implementing concrete -annotation drivers in dependent packages. It is deprecated in favor of using -`ColocatedMappingDriver` to implement both annotation and attribute based -drivers. This will involve implementing `isTransient()` as well as -`__construct()` and `getReader()` to retain backward compatibility. - -# Upgrade to 2.3 - -## Deprecated using short namespace alias syntax in favor of `::class` syntax. - -Before: - -```php -$objectManager->find('MyPackage:MyClass', $id); -$objectManager->createQuery('SELECT u FROM MyPackage:MyClass'); -``` - -After: - -```php -$objectManager->find(MyClass::class, $id); -$objectManager->createQuery('SELECT u FROM '. MyClass::class); -``` - -# Upgrade to 2.2 - -## Deprecated `doctrine/cache` usage for metadata caching - -The `setCacheDriver` and `getCacheDriver` methods in -`Doctrine\Persistence\Mapping\AbstractMetadata` have been deprecated. Please -use `getCache` and `setCache` with a PSR-6 implementation instead. Note that -even after switching to PSR-6, `getCacheDriver` will return a cache instance -that wraps the PSR-6 cache. Note that if you use a custom implementation of -doctrine/cache, the library may not be able to provide a forward compatibility -layer. The cache implementation MUST extend the -`Doctrine\Common\Cache\CacheProvider` class. - -# Upgrade to 1.2 - -## Deprecated `ObjectManager::merge()` and `ObjectManager::detach()` - -Please handle merge operations in your application, and use -`ObjectManager::clear()` instead. - -## Deprecated `PersistentObject` - -Please implement this functionality directly in your application if you want -ActiveRecord style functionality. diff --git a/vendor/doctrine/persistence/composer.json b/vendor/doctrine/persistence/composer.json deleted file mode 100644 index 03d832f..0000000 --- a/vendor/doctrine/persistence/composer.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "name": "doctrine/persistence", - "type": "library", - "description": "The Doctrine Persistence project is a set of shared interfaces and functionality that the different Doctrine object mappers share.", - "keywords": [ - "persistence", - "object", - "mapper", - "orm", - "odm" - ], - "homepage": "https://www.doctrine-project.org/projects/persistence.html", - "license": "MIT", - "authors": [ - {"name": "Guilherme Blanco", "email": "guilhermeblanco@gmail.com"}, - {"name": "Roman Borschel", "email": "roman@code-factory.org"}, - {"name": "Benjamin Eberlei", "email": "kontakt@beberlei.de"}, - {"name": "Jonathan Wage", "email": "jonwage@gmail.com"}, - {"name": "Johannes Schmitt", "email": "schmittjoh@gmail.com"}, - {"name": "Marco Pivetta", "email": "ocramius@gmail.com"} - ], - "require": { - "php": "^7.2 || ^8.0", - "doctrine/event-manager": "^1 || ^2", - "psr/cache": "^1.0 || ^2.0 || ^3.0" - }, - "require-dev": { - "phpstan/phpstan": "1.11.1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "doctrine/coding-standard": "^12", - "doctrine/common": "^3.0", - "phpunit/phpunit": "^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.24.0" - }, - "conflict": { - "doctrine/common": "<2.10" - }, - "autoload": { - "psr-4": { - "Doctrine\\Persistence\\": "src/Persistence" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\Tests\\": "tests", - "Doctrine\\Tests_PHP74\\": "tests_php74", - "Doctrine\\Tests_PHP81\\": "tests_php81" - } - }, - "config": { - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true, - "composer/package-versions-deprecated": true - } - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/AbstractManagerRegistry.php b/vendor/doctrine/persistence/src/Persistence/AbstractManagerRegistry.php deleted file mode 100644 index cc245ba..0000000 --- a/vendor/doctrine/persistence/src/Persistence/AbstractManagerRegistry.php +++ /dev/null @@ -1,269 +0,0 @@ - */ - private $connections; - - /** @var array */ - private $managers; - - /** @var string */ - private $defaultConnection; - - /** @var string */ - private $defaultManager; - - /** - * @var string - * @psalm-var class-string - */ - private $proxyInterfaceName; - - /** - * @param array $connections - * @param array $managers - * @psalm-param class-string $proxyInterfaceName - */ - public function __construct( - string $name, - array $connections, - array $managers, - string $defaultConnection, - string $defaultManager, - string $proxyInterfaceName - ) { - $this->name = $name; - $this->connections = $connections; - $this->managers = $managers; - $this->defaultConnection = $defaultConnection; - $this->defaultManager = $defaultManager; - $this->proxyInterfaceName = $proxyInterfaceName; - } - - /** - * Fetches/creates the given services. - * - * A service in this context is connection or a manager instance. - * - * @param string $name The name of the service. - * - * @return object The instance of the given service. - */ - abstract protected function getService(string $name); - - /** - * Resets the given services. - * - * A service in this context is connection or a manager instance. - * - * @param string $name The name of the service. - * - * @return void - */ - abstract protected function resetService(string $name); - - /** - * Gets the name of the registry. - * - * @return string - */ - public function getName() - { - return $this->name; - } - - /** - * {@inheritDoc} - */ - public function getConnection(?string $name = null) - { - if ($name === null) { - $name = $this->defaultConnection; - } - - if (! isset($this->connections[$name])) { - throw new InvalidArgumentException( - sprintf('Doctrine %s Connection named "%s" does not exist.', $this->name, $name) - ); - } - - return $this->getService($this->connections[$name]); - } - - /** - * {@inheritDoc} - */ - public function getConnectionNames() - { - return $this->connections; - } - - /** - * {@inheritDoc} - */ - public function getConnections() - { - $connections = []; - foreach ($this->connections as $name => $id) { - $connections[$name] = $this->getService($id); - } - - return $connections; - } - - /** - * {@inheritDoc} - */ - public function getDefaultConnectionName() - { - return $this->defaultConnection; - } - - /** - * {@inheritDoc} - */ - public function getDefaultManagerName() - { - return $this->defaultManager; - } - - /** - * {@inheritDoc} - * - * @throws InvalidArgumentException - */ - public function getManager(?string $name = null) - { - if ($name === null) { - $name = $this->defaultManager; - } - - if (! isset($this->managers[$name])) { - throw new InvalidArgumentException( - sprintf('Doctrine %s Manager named "%s" does not exist.', $this->name, $name) - ); - } - - $service = $this->getService($this->managers[$name]); - assert($service instanceof ObjectManager); - - return $service; - } - - /** - * {@inheritDoc} - */ - public function getManagerForClass(string $class) - { - $proxyClass = new ReflectionClass($class); - if ($proxyClass->isAnonymous()) { - return null; - } - - if ($proxyClass->implementsInterface($this->proxyInterfaceName)) { - $parentClass = $proxyClass->getParentClass(); - - if ($parentClass === false) { - return null; - } - - $class = $parentClass->getName(); - } - - foreach ($this->managers as $id) { - $manager = $this->getService($id); - assert($manager instanceof ObjectManager); - - if (! $manager->getMetadataFactory()->isTransient($class)) { - return $manager; - } - } - - return null; - } - - /** - * {@inheritDoc} - */ - public function getManagerNames() - { - return $this->managers; - } - - /** - * {@inheritDoc} - */ - public function getManagers() - { - $managers = []; - - foreach ($this->managers as $name => $id) { - $manager = $this->getService($id); - assert($manager instanceof ObjectManager); - $managers[$name] = $manager; - } - - return $managers; - } - - /** - * {@inheritDoc} - */ - public function getRepository( - string $persistentObject, - ?string $persistentManagerName = null - ) { - return $this - ->selectManager($persistentObject, $persistentManagerName) - ->getRepository($persistentObject); - } - - /** - * {@inheritDoc} - */ - public function resetManager(?string $name = null) - { - if ($name === null) { - $name = $this->defaultManager; - } - - if (! isset($this->managers[$name])) { - throw new InvalidArgumentException(sprintf('Doctrine %s Manager named "%s" does not exist.', $this->name, $name)); - } - - // force the creation of a new document manager - // if the current one is closed - $this->resetService($this->managers[$name]); - - return $this->getManager($name); - } - - /** @psalm-param class-string $persistentObject */ - private function selectManager( - string $persistentObject, - ?string $persistentManagerName = null - ): ObjectManager { - if ($persistentManagerName !== null) { - return $this->getManager($persistentManagerName); - } - - return $this->getManagerForClass($persistentObject) ?? $this->getManager(); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/ConnectionRegistry.php b/vendor/doctrine/persistence/src/Persistence/ConnectionRegistry.php deleted file mode 100644 index 59d9a74..0000000 --- a/vendor/doctrine/persistence/src/Persistence/ConnectionRegistry.php +++ /dev/null @@ -1,41 +0,0 @@ - An array of Connection instances. - */ - public function getConnections(); - - /** - * Gets all connection names. - * - * @return array An array of connection names. - */ - public function getConnectionNames(); -} diff --git a/vendor/doctrine/persistence/src/Persistence/Event/LifecycleEventArgs.php b/vendor/doctrine/persistence/src/Persistence/Event/LifecycleEventArgs.php deleted file mode 100644 index 1654de4..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Event/LifecycleEventArgs.php +++ /dev/null @@ -1,54 +0,0 @@ -object = $object; - $this->objectManager = $objectManager; - } - - /** - * Retrieves the associated object. - * - * @return object - */ - public function getObject() - { - return $this->object; - } - - /** - * Retrieves the associated ObjectManager. - * - * @return ObjectManager - * @psalm-return TObjectManager - */ - public function getObjectManager() - { - return $this->objectManager; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Event/LoadClassMetadataEventArgs.php b/vendor/doctrine/persistence/src/Persistence/Event/LoadClassMetadataEventArgs.php deleted file mode 100644 index aa92d5d..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Event/LoadClassMetadataEventArgs.php +++ /dev/null @@ -1,61 +0,0 @@ - - * @template-covariant TObjectManager of ObjectManager - */ -class LoadClassMetadataEventArgs extends EventArgs -{ - /** - * @var ClassMetadata - * @psalm-var TClassMetadata - */ - private $classMetadata; - - /** - * @var ObjectManager - * @psalm-var TObjectManager - */ - private $objectManager; - - /** - * @psalm-param TClassMetadata $classMetadata - * @psalm-param TObjectManager $objectManager - */ - public function __construct(ClassMetadata $classMetadata, ObjectManager $objectManager) - { - $this->classMetadata = $classMetadata; - $this->objectManager = $objectManager; - } - - /** - * Retrieves the associated ClassMetadata. - * - * @return ClassMetadata - * @psalm-return TClassMetadata - */ - public function getClassMetadata() - { - return $this->classMetadata; - } - - /** - * Retrieves the associated ObjectManager. - * - * @return TObjectManager - */ - public function getObjectManager() - { - return $this->objectManager; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Event/ManagerEventArgs.php b/vendor/doctrine/persistence/src/Persistence/Event/ManagerEventArgs.php deleted file mode 100644 index 5156013..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Event/ManagerEventArgs.php +++ /dev/null @@ -1,39 +0,0 @@ -objectManager = $objectManager; - } - - /** - * Retrieves the associated ObjectManager. - * - * @return ObjectManager - * @psalm-return TObjectManager - */ - public function getObjectManager() - { - return $this->objectManager; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Event/OnClearEventArgs.php b/vendor/doctrine/persistence/src/Persistence/Event/OnClearEventArgs.php deleted file mode 100644 index 519a887..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Event/OnClearEventArgs.php +++ /dev/null @@ -1,42 +0,0 @@ -objectManager = $objectManager; - } - - /** - * Retrieves the associated ObjectManager. - * - * @return ObjectManager - * @psalm-return TObjectManager - */ - public function getObjectManager() - { - return $this->objectManager; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Event/PreUpdateEventArgs.php b/vendor/doctrine/persistence/src/Persistence/Event/PreUpdateEventArgs.php deleted file mode 100644 index 95ecbd4..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Event/PreUpdateEventArgs.php +++ /dev/null @@ -1,110 +0,0 @@ - - */ -class PreUpdateEventArgs extends LifecycleEventArgs -{ - /** @var array> */ - private $entityChangeSet; - - /** - * @param array> $changeSet - * @psalm-param TObjectManager $objectManager - */ - public function __construct(object $entity, ObjectManager $objectManager, array &$changeSet) - { - parent::__construct($entity, $objectManager); - - $this->entityChangeSet = &$changeSet; - } - - /** - * Retrieves the entity changeset. - * - * @return array> - */ - public function getEntityChangeSet() - { - return $this->entityChangeSet; - } - - /** - * Checks if field has a changeset. - * - * @return bool - */ - public function hasChangedField(string $field) - { - return isset($this->entityChangeSet[$field]); - } - - /** - * Gets the old value of the changeset of the changed field. - * - * @return mixed - */ - public function getOldValue(string $field) - { - $this->assertValidField($field); - - return $this->entityChangeSet[$field][0]; - } - - /** - * Gets the new value of the changeset of the changed field. - * - * @return mixed - */ - public function getNewValue(string $field) - { - $this->assertValidField($field); - - return $this->entityChangeSet[$field][1]; - } - - /** - * Sets the new value of this field. - * - * @param mixed $value - * - * @return void - */ - public function setNewValue(string $field, $value) - { - $this->assertValidField($field); - - $this->entityChangeSet[$field][1] = $value; - } - - /** - * Asserts the field exists in changeset. - * - * @return void - * - * @throws InvalidArgumentException - */ - private function assertValidField(string $field) - { - if (! isset($this->entityChangeSet[$field])) { - throw new InvalidArgumentException(sprintf( - 'Field "%s" is not a valid field of the entity "%s" in PreUpdateEventArgs.', - $field, - get_class($this->getObject()) - )); - } - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/ManagerRegistry.php b/vendor/doctrine/persistence/src/Persistence/ManagerRegistry.php deleted file mode 100644 index 46599a5..0000000 --- a/vendor/doctrine/persistence/src/Persistence/ManagerRegistry.php +++ /dev/null @@ -1,89 +0,0 @@ - An array of ObjectManager instances - */ - public function getManagers(); - - /** - * Resets a named object manager. - * - * This method is useful when an object manager has been closed - * because of a rollbacked transaction AND when you think that - * it makes sense to get a new one to replace the closed one. - * - * Be warned that you will get a brand new object manager as - * the existing one is not useable anymore. This means that any - * other object with a dependency on this object manager will - * hold an obsolete reference. You can inject the registry instead - * to avoid this problem. - * - * @param string|null $name The object manager name (null for the default one). - * - * @return ObjectManager - */ - public function resetManager(?string $name = null); - - /** - * Gets all object manager names and associated service IDs. A service ID - * is a string that allows to obtain an object manager, typically from a - * PSR-11 container. - * - * @return array An array with object manager names as keys, - * and service IDs as values. - */ - public function getManagerNames(); - - /** - * Gets the ObjectRepository for a persistent object. - * - * @param string $persistentObject The name of the persistent object. - * @param string|null $persistentManagerName The object manager name (null for the default one). - * @psalm-param class-string $persistentObject - * - * @return ObjectRepository - * @psalm-return ObjectRepository - * - * @template T of object - */ - public function getRepository( - string $persistentObject, - ?string $persistentManagerName = null - ); - - /** - * Gets the object manager associated with a given class. - * - * @param class-string $class A persistent object class name. - * - * @return ObjectManager|null - */ - public function getManagerForClass(string $class); -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php b/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php deleted file mode 100644 index e8f6aca..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/AbstractClassMetadataFactory.php +++ /dev/null @@ -1,499 +0,0 @@ - - */ -abstract class AbstractClassMetadataFactory implements ClassMetadataFactory -{ - /** - * Salt used by specific Object Manager implementation. - * - * @var string - */ - protected $cacheSalt = '__CLASSMETADATA__'; - - /** @var CacheItemPoolInterface|null */ - private $cache; - - /** - * @var array - * @psalm-var CMTemplate[] - */ - private $loadedMetadata = []; - - /** @var bool */ - protected $initialized = false; - - /** @var ReflectionService|null */ - private $reflectionService = null; - - /** @var ProxyClassNameResolver|null */ - private $proxyClassNameResolver = null; - - public function setCache(CacheItemPoolInterface $cache): void - { - $this->cache = $cache; - } - - final protected function getCache(): ?CacheItemPoolInterface - { - return $this->cache; - } - - /** - * Returns an array of all the loaded metadata currently in memory. - * - * @return ClassMetadata[] - * @psalm-return CMTemplate[] - */ - public function getLoadedMetadata() - { - return $this->loadedMetadata; - } - - /** - * {@inheritDoc} - */ - public function getAllMetadata() - { - if (! $this->initialized) { - $this->initialize(); - } - - $driver = $this->getDriver(); - $metadata = []; - foreach ($driver->getAllClassNames() as $className) { - $metadata[] = $this->getMetadataFor($className); - } - - return $metadata; - } - - public function setProxyClassNameResolver(ProxyClassNameResolver $resolver): void - { - $this->proxyClassNameResolver = $resolver; - } - - /** - * Lazy initialization of this stuff, especially the metadata driver, - * since these are not needed at all when a metadata cache is active. - * - * @return void - */ - abstract protected function initialize(); - - /** - * Returns the mapping driver implementation. - * - * @return MappingDriver - */ - abstract protected function getDriver(); - - /** - * Wakes up reflection after ClassMetadata gets unserialized from cache. - * - * @psalm-param CMTemplate $class - * - * @return void - */ - abstract protected function wakeupReflection( - ClassMetadata $class, - ReflectionService $reflService - ); - - /** - * Initializes Reflection after ClassMetadata was constructed. - * - * @psalm-param CMTemplate $class - * - * @return void - */ - abstract protected function initializeReflection( - ClassMetadata $class, - ReflectionService $reflService - ); - - /** - * Checks whether the class metadata is an entity. - * - * This method should return false for mapped superclasses or embedded classes. - * - * @psalm-param CMTemplate $class - * - * @return bool - */ - abstract protected function isEntity(ClassMetadata $class); - - /** - * Removes the prepended backslash of a class string to conform with how php outputs class names - * - * @psalm-param class-string $className - * - * @psalm-return class-string - */ - private function normalizeClassName(string $className): string - { - return ltrim($className, '\\'); - } - - /** - * {@inheritDoc} - * - * @throws ReflectionException - * @throws MappingException - */ - public function getMetadataFor(string $className) - { - $className = $this->normalizeClassName($className); - - if (isset($this->loadedMetadata[$className])) { - return $this->loadedMetadata[$className]; - } - - if (class_exists($className, false) && (new ReflectionClass($className))->isAnonymous()) { - throw MappingException::classIsAnonymous($className); - } - - if (! class_exists($className, false) && strpos($className, ':') !== false) { - throw MappingException::nonExistingClass($className); - } - - $realClassName = $this->getRealClass($className); - - if (isset($this->loadedMetadata[$realClassName])) { - // We do not have the alias name in the map, include it - return $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; - } - - try { - if ($this->cache !== null) { - $cached = $this->cache->getItem($this->getCacheKey($realClassName))->get(); - if ($cached instanceof ClassMetadata) { - /** @psalm-var CMTemplate $cached */ - $this->loadedMetadata[$realClassName] = $cached; - - $this->wakeupReflection($cached, $this->getReflectionService()); - } else { - $loadedMetadata = $this->loadMetadata($realClassName); - $classNames = array_combine( - array_map([$this, 'getCacheKey'], $loadedMetadata), - $loadedMetadata - ); - - foreach ($this->cache->getItems(array_keys($classNames)) as $item) { - if (! isset($classNames[$item->getKey()])) { - continue; - } - - $item->set($this->loadedMetadata[$classNames[$item->getKey()]]); - $this->cache->saveDeferred($item); - } - - $this->cache->commit(); - } - } else { - $this->loadMetadata($realClassName); - } - } catch (MappingException $loadingException) { - $fallbackMetadataResponse = $this->onNotFoundMetadata($realClassName); - - if ($fallbackMetadataResponse === null) { - throw $loadingException; - } - - $this->loadedMetadata[$realClassName] = $fallbackMetadataResponse; - } - - if ($className !== $realClassName) { - // We do not have the alias name in the map, include it - $this->loadedMetadata[$className] = $this->loadedMetadata[$realClassName]; - } - - return $this->loadedMetadata[$className]; - } - - /** - * {@inheritDoc} - */ - public function hasMetadataFor(string $className) - { - $className = $this->normalizeClassName($className); - - return isset($this->loadedMetadata[$className]); - } - - /** - * Sets the metadata descriptor for a specific class. - * - * NOTE: This is only useful in very special cases, like when generating proxy classes. - * - * @psalm-param class-string $className - * @psalm-param CMTemplate $class - * - * @return void - */ - public function setMetadataFor(string $className, ClassMetadata $class) - { - $this->loadedMetadata[$this->normalizeClassName($className)] = $class; - } - - /** - * Gets an array of parent classes for the given entity class. - * - * @psalm-param class-string $name - * - * @return string[] - * @psalm-return list - */ - protected function getParentClasses(string $name) - { - // Collect parent classes, ignoring transient (not-mapped) classes. - $parentClasses = []; - - foreach (array_reverse($this->getReflectionService()->getParentClasses($name)) as $parentClass) { - if ($this->getDriver()->isTransient($parentClass)) { - continue; - } - - $parentClasses[] = $parentClass; - } - - return $parentClasses; - } - - /** - * Loads the metadata of the class in question and all it's ancestors whose metadata - * is still not loaded. - * - * Important: The class $name does not necessarily exist at this point here. - * Scenarios in a code-generation setup might have access to XML/YAML - * Mapping files without the actual PHP code existing here. That is why the - * {@see \Doctrine\Persistence\Mapping\ReflectionService} interface - * should be used for reflection. - * - * @param string $name The name of the class for which the metadata should get loaded. - * @psalm-param class-string $name - * - * @return array - * @psalm-return list - */ - protected function loadMetadata(string $name) - { - if (! $this->initialized) { - $this->initialize(); - } - - $loaded = []; - - $parentClasses = $this->getParentClasses($name); - $parentClasses[] = $name; - - // Move down the hierarchy of parent classes, starting from the topmost class - $parent = null; - $rootEntityFound = false; - $visited = []; - $reflService = $this->getReflectionService(); - - foreach ($parentClasses as $className) { - if (isset($this->loadedMetadata[$className])) { - $parent = $this->loadedMetadata[$className]; - - if ($this->isEntity($parent)) { - $rootEntityFound = true; - - array_unshift($visited, $className); - } - - continue; - } - - $class = $this->newClassMetadataInstance($className); - $this->initializeReflection($class, $reflService); - - $this->doLoadMetadata($class, $parent, $rootEntityFound, $visited); - - $this->loadedMetadata[$className] = $class; - - $parent = $class; - - if ($this->isEntity($class)) { - $rootEntityFound = true; - - array_unshift($visited, $className); - } - - $this->wakeupReflection($class, $reflService); - - $loaded[] = $className; - } - - return $loaded; - } - - /** - * Provides a fallback hook for loading metadata when loading failed due to reflection/mapping exceptions - * - * Override this method to implement a fallback strategy for failed metadata loading - * - * @return ClassMetadata|null - * @psalm-return CMTemplate|null - */ - protected function onNotFoundMetadata(string $className) - { - return null; - } - - /** - * Actually loads the metadata from the underlying metadata. - * - * @param bool $rootEntityFound True when there is another entity (non-mapped superclass) class above the current class in the PHP class hierarchy. - * @param list $nonSuperclassParents All parent class names that are not marked as mapped superclasses, with the direct parent class being the first and the root entity class the last element. - * @psalm-param CMTemplate $class - * @psalm-param CMTemplate|null $parent - * - * @return void - */ - abstract protected function doLoadMetadata( - ClassMetadata $class, - ?ClassMetadata $parent, - bool $rootEntityFound, - array $nonSuperclassParents - ); - - /** - * Creates a new ClassMetadata instance for the given class name. - * - * @psalm-param class-string $className - * - * @return ClassMetadata - * @psalm-return CMTemplate - * - * @template T of object - */ - abstract protected function newClassMetadataInstance(string $className); - - /** - * {@inheritDoc} - */ - public function isTransient(string $className) - { - if (! $this->initialized) { - $this->initialize(); - } - - if (class_exists($className, false) && (new ReflectionClass($className))->isAnonymous()) { - return false; - } - - if (! class_exists($className, false) && strpos($className, ':') !== false) { - throw MappingException::nonExistingClass($className); - } - - /** @psalm-var class-string $className */ - return $this->getDriver()->isTransient($className); - } - - /** - * Sets the reflectionService. - * - * @return void - */ - public function setReflectionService(ReflectionService $reflectionService) - { - $this->reflectionService = $reflectionService; - } - - /** - * Gets the reflection service associated with this metadata factory. - * - * @return ReflectionService - */ - public function getReflectionService() - { - if ($this->reflectionService === null) { - $this->reflectionService = new RuntimeReflectionService(); - } - - return $this->reflectionService; - } - - protected function getCacheKey(string $realClassName): string - { - return str_replace('\\', '__', $realClassName) . $this->cacheSalt; - } - - /** - * Gets the real class name of a class name that could be a proxy. - * - * @psalm-param class-string>|class-string $class - * - * @psalm-return class-string - * - * @template T of object - */ - private function getRealClass(string $class): string - { - if ($this->proxyClassNameResolver === null) { - $this->createDefaultProxyClassNameResolver(); - } - - assert($this->proxyClassNameResolver !== null); - - return $this->proxyClassNameResolver->resolveClassName($class); - } - - private function createDefaultProxyClassNameResolver(): void - { - $this->proxyClassNameResolver = new class implements ProxyClassNameResolver { - /** - * @psalm-param class-string>|class-string $className - * - * @psalm-return class-string - * - * @template T of object - */ - public function resolveClassName(string $className): string - { - $pos = strrpos($className, '\\' . Proxy::MARKER . '\\'); - - if ($pos === false) { - /** @psalm-var class-string */ - return $className; - } - - /** @psalm-var class-string */ - return substr($className, $pos + Proxy::MARKER_LENGTH + 2); - } - }; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/ClassMetadata.php b/vendor/doctrine/persistence/src/Persistence/Mapping/ClassMetadata.php deleted file mode 100644 index f407ba3..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/ClassMetadata.php +++ /dev/null @@ -1,141 +0,0 @@ - - */ - public function getName(); - - /** - * Gets the mapped identifier field name. - * - * The returned structure is an array of the identifier field names. - * - * @return array - * @psalm-return list - */ - public function getIdentifier(); - - /** - * Gets the ReflectionClass instance for this mapped class. - * - * @return ReflectionClass - */ - public function getReflectionClass(); - - /** - * Checks if the given field name is a mapped identifier for this class. - * - * @return bool - */ - public function isIdentifier(string $fieldName); - - /** - * Checks if the given field is a mapped property for this class. - * - * @return bool - */ - public function hasField(string $fieldName); - - /** - * Checks if the given field is a mapped association for this class. - * - * @return bool - */ - public function hasAssociation(string $fieldName); - - /** - * Checks if the given field is a mapped single valued association for this class. - * - * @return bool - */ - public function isSingleValuedAssociation(string $fieldName); - - /** - * Checks if the given field is a mapped collection valued association for this class. - * - * @return bool - */ - public function isCollectionValuedAssociation(string $fieldName); - - /** - * A numerically indexed list of field names of this persistent class. - * - * This array includes identifier fields if present on this class. - * - * @return array - */ - public function getFieldNames(); - - /** - * Returns an array of identifier field names numerically indexed. - * - * @return array - */ - public function getIdentifierFieldNames(); - - /** - * Returns a numerically indexed list of association names of this persistent class. - * - * This array includes identifier associations if present on this class. - * - * @return array - */ - public function getAssociationNames(); - - /** - * Returns a type name of this field. - * - * This type names can be implementation specific but should at least include the php types: - * integer, string, boolean, float/double, datetime. - * - * @return string|null - */ - public function getTypeOfField(string $fieldName); - - /** - * Returns the target class name of the given association. - * - * @return string|null - * @psalm-return class-string|null - */ - public function getAssociationTargetClass(string $assocName); - - /** - * Checks if the association is the inverse side of a bidirectional association. - * - * @return bool - */ - public function isAssociationInverseSide(string $assocName); - - /** - * Returns the target field of the owning side of the association. - * - * @return string - */ - public function getAssociationMappedByTargetField(string $assocName); - - /** - * Returns the identifier of this object as an array with field name as key. - * - * Has to return an empty array if no identifier isset. - * - * @return array - */ - public function getIdentifierValues(object $object); -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/ClassMetadataFactory.php b/vendor/doctrine/persistence/src/Persistence/Mapping/ClassMetadataFactory.php deleted file mode 100644 index 28b8303..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/ClassMetadataFactory.php +++ /dev/null @@ -1,61 +0,0 @@ - - */ - public function getAllMetadata(); - - /** - * Gets the class metadata descriptor for a class. - * - * @param class-string $className The name of the class. - * - * @return ClassMetadata - * @psalm-return T - */ - public function getMetadataFor(string $className); - - /** - * Checks whether the factory has the metadata for a class loaded already. - * - * @param class-string $className - * - * @return bool TRUE if the metadata of the class in question is already loaded, FALSE otherwise. - */ - public function hasMetadataFor(string $className); - - /** - * Sets the metadata descriptor for a specific class. - * - * @param class-string $className - * @psalm-param T $class - * - * @return void - */ - public function setMetadataFor(string $className, ClassMetadata $class); - - /** - * Returns whether the class with the specified name should have its metadata loaded. - * This is only the case if it is either mapped directly or as a MappedSuperclass. - * - * @psalm-param class-string $className - * - * @return bool - */ - public function isTransient(string $className); -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/ColocatedMappingDriver.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/ColocatedMappingDriver.php deleted file mode 100644 index e85ba70..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/ColocatedMappingDriver.php +++ /dev/null @@ -1,212 +0,0 @@ - - */ - protected $paths = []; - - /** - * The paths excluded from path where to look for mapping files. - * - * @var array - */ - protected $excludePaths = []; - - /** - * The file extension of mapping documents. - * - * @var string - */ - protected $fileExtension = '.php'; - - /** - * Cache for getAllClassNames(). - * - * @var array|null - * @psalm-var list|null - */ - protected $classNames; - - /** - * Appends lookup paths to metadata driver. - * - * @param array $paths - * - * @return void - */ - public function addPaths(array $paths) - { - $this->paths = array_unique(array_merge($this->paths, $paths)); - } - - /** - * Retrieves the defined metadata lookup paths. - * - * @return array - */ - public function getPaths() - { - return $this->paths; - } - - /** - * Append exclude lookup paths to metadata driver. - * - * @param string[] $paths - * - * @return void - */ - public function addExcludePaths(array $paths) - { - $this->excludePaths = array_unique(array_merge($this->excludePaths, $paths)); - } - - /** - * Retrieve the defined metadata lookup exclude paths. - * - * @return array - */ - public function getExcludePaths() - { - return $this->excludePaths; - } - - /** - * Gets the file extension used to look for mapping files under. - * - * @return string - */ - public function getFileExtension() - { - return $this->fileExtension; - } - - /** - * Sets the file extension used to look for mapping files under. - * - * @return void - */ - public function setFileExtension(string $fileExtension) - { - $this->fileExtension = $fileExtension; - } - - /** - * {@inheritDoc} - * - * Returns whether the class with the specified name is transient. Only non-transient - * classes, that is entities and mapped superclasses, should have their metadata loaded. - * - * @psalm-param class-string $className - * - * @return bool - */ - abstract public function isTransient(string $className); - - /** - * Gets the names of all mapped classes known to this driver. - * - * @return string[] The names of all mapped classes known to this driver. - * @psalm-return list - */ - public function getAllClassNames() - { - if ($this->classNames !== null) { - return $this->classNames; - } - - if ($this->paths === []) { - throw MappingException::pathRequiredForDriver(static::class); - } - - $classes = []; - $includedFiles = []; - - foreach ($this->paths as $path) { - if (! is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new RegexIterator( - new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), - RecursiveIteratorIterator::LEAVES_ONLY - ), - '/^.+' . preg_quote($this->fileExtension) . '$/i', - RecursiveRegexIterator::GET_MATCH - ); - - foreach ($iterator as $file) { - $sourceFile = $file[0]; - - if (preg_match('(^phar:)i', $sourceFile) === 0) { - $sourceFile = realpath($sourceFile); - } - - foreach ($this->excludePaths as $excludePath) { - $realExcludePath = realpath($excludePath); - assert($realExcludePath !== false); - $exclude = str_replace('\\', '/', $realExcludePath); - $current = str_replace('\\', '/', $sourceFile); - - if (strpos($current, $exclude) !== false) { - continue 2; - } - } - - require_once $sourceFile; - - $includedFiles[] = $sourceFile; - } - } - - $declared = get_declared_classes(); - - foreach ($declared as $className) { - $rc = new ReflectionClass($className); - - $sourceFile = $rc->getFileName(); - - if (! in_array($sourceFile, $includedFiles, true) || $this->isTransient($className)) { - continue; - } - - $classes[] = $className; - } - - $this->classNames = $classes; - - return $classes; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/DefaultFileLocator.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/DefaultFileLocator.php deleted file mode 100644 index 9b00e74..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/DefaultFileLocator.php +++ /dev/null @@ -1,175 +0,0 @@ - - */ - protected $paths = []; - - /** - * The file extension of mapping documents. - * - * @var string|null - */ - protected $fileExtension; - - /** - * Initializes a new FileDriver that looks in the given path(s) for mapping - * documents and operates in the specified operating mode. - * - * @param string|array $paths One or multiple paths where mapping documents - * can be found. - * @param string|null $fileExtension The file extension of mapping documents, - * usually prefixed with a dot. - */ - public function __construct($paths, ?string $fileExtension = null) - { - $this->addPaths((array) $paths); - $this->fileExtension = $fileExtension; - } - - /** - * Appends lookup paths to metadata driver. - * - * @param array $paths - * - * @return void - */ - public function addPaths(array $paths) - { - $this->paths = array_unique(array_merge($this->paths, $paths)); - } - - /** - * Retrieves the defined metadata lookup paths. - * - * @return array - */ - public function getPaths() - { - return $this->paths; - } - - /** - * Gets the file extension used to look for mapping files under. - * - * @return string|null - */ - public function getFileExtension() - { - return $this->fileExtension; - } - - /** - * Sets the file extension used to look for mapping files under. - * - * @param string|null $fileExtension The file extension to set. - * - * @return void - */ - public function setFileExtension(?string $fileExtension) - { - $this->fileExtension = $fileExtension; - } - - /** - * {@inheritDoc} - */ - public function findMappingFile(string $className) - { - $fileName = str_replace('\\', '.', $className) . $this->fileExtension; - - // Check whether file exists - foreach ($this->paths as $path) { - if (is_file($path . DIRECTORY_SEPARATOR . $fileName)) { - return $path . DIRECTORY_SEPARATOR . $fileName; - } - } - - throw MappingException::mappingFileNotFound($className, $fileName); - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames(string $globalBasename) - { - if ($this->paths === []) { - return []; - } - - $classes = []; - - foreach ($this->paths as $path) { - if (! is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($path), - RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($iterator as $file) { - $fileName = $file->getBasename($this->fileExtension); - - if ($fileName === $file->getBasename() || $fileName === $globalBasename) { - continue; - } - - // NOTE: All files found here means classes are not transient! - - assert(is_string($fileName)); - /** @psalm-var class-string */ - $class = str_replace('.', '\\', $fileName); - $classes[] = $class; - } - } - - return $classes; - } - - /** - * {@inheritDoc} - */ - public function fileExists(string $className) - { - $fileName = str_replace('\\', '.', $className) . $this->fileExtension; - - // Check whether file exists - foreach ($this->paths as $path) { - if (is_file($path . DIRECTORY_SEPARATOR . $fileName)) { - return true; - } - } - - return false; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/FileDriver.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/FileDriver.php deleted file mode 100644 index c116233..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/FileDriver.php +++ /dev/null @@ -1,213 +0,0 @@ -|null - */ - protected $classCache; - - /** @var string */ - protected $globalBasename = ''; - - /** - * Initializes a new FileDriver that looks in the given path(s) for mapping - * documents and operates in the specified operating mode. - * - * @param string|array|FileLocator $locator A FileLocator or one/multiple paths - * where mapping documents can be found. - */ - public function __construct($locator, ?string $fileExtension = null) - { - if ($locator instanceof FileLocator) { - $this->locator = $locator; - } else { - $this->locator = new DefaultFileLocator((array) $locator, $fileExtension); - } - } - - /** - * Sets the global basename. - * - * @return void - */ - public function setGlobalBasename(string $file) - { - $this->globalBasename = $file; - } - - /** - * Retrieves the global basename. - * - * @return string|null - */ - public function getGlobalBasename() - { - return $this->globalBasename; - } - - /** - * Gets the element of schema meta data for the class from the mapping file. - * This will lazily load the mapping file if it is not loaded yet. - * - * @psalm-param class-string $className - * - * @return T The element of schema meta data. - * - * @throws MappingException - */ - public function getElement(string $className) - { - if ($this->classCache === null) { - $this->initialize(); - } - - if (isset($this->classCache[$className])) { - return $this->classCache[$className]; - } - - $result = $this->loadMappingFile($this->locator->findMappingFile($className)); - - if (! isset($result[$className])) { - throw MappingException::invalidMappingFile( - $className, - str_replace('\\', '.', $className) . $this->locator->getFileExtension() - ); - } - - $this->classCache[$className] = $result[$className]; - - return $result[$className]; - } - - /** - * {@inheritDoc} - */ - public function isTransient(string $className) - { - if ($this->classCache === null) { - $this->initialize(); - } - - if (isset($this->classCache[$className])) { - return false; - } - - return ! $this->locator->fileExists($className); - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames() - { - if ($this->classCache === null) { - $this->initialize(); - } - - if ($this->classCache === []) { - return $this->locator->getAllClassNames($this->globalBasename); - } - - /** @psalm-var array> $classCache */ - $classCache = $this->classCache; - - /** @var list $keys */ - $keys = array_keys($classCache); - - return array_values(array_unique(array_merge( - $keys, - $this->locator->getAllClassNames($this->globalBasename) - ))); - } - - /** - * Loads a mapping file with the given name and returns a map - * from class/entity names to their corresponding file driver elements. - * - * @param string $file The mapping file to load. - * - * @return mixed[] - * @psalm-return array - */ - abstract protected function loadMappingFile(string $file); - - /** - * Initializes the class cache from all the global files. - * - * Using this feature adds a substantial performance hit to file drivers as - * more metadata has to be loaded into memory than might actually be - * necessary. This may not be relevant to scenarios where caching of - * metadata is in place, however hits very hard in scenarios where no - * caching is used. - * - * @return void - */ - protected function initialize() - { - $this->classCache = []; - if ($this->globalBasename === '') { - return; - } - - foreach ($this->locator->getPaths() as $path) { - $file = $path . '/' . $this->globalBasename . $this->locator->getFileExtension(); - if (! is_file($file)) { - continue; - } - - $this->classCache = array_merge( - $this->classCache, - $this->loadMappingFile($file) - ); - } - } - - /** - * Retrieves the locator used to discover mapping files by className. - * - * @return FileLocator - */ - public function getLocator() - { - return $this->locator; - } - - /** - * Sets the locator used to discover mapping files by className. - * - * @return void - */ - public function setLocator(FileLocator $locator) - { - $this->locator = $locator; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/FileLocator.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/FileLocator.php deleted file mode 100644 index e57d539..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/FileLocator.php +++ /dev/null @@ -1,52 +0,0 @@ - - * @psalm-return list - */ - public function getAllClassNames(string $globalBasename); - - /** - * Checks if a file can be found for this class name. - * - * @return bool - */ - public function fileExists(string $className); - - /** - * Gets all the paths that this file locator looks for mapping files. - * - * @return array - */ - public function getPaths(); - - /** - * Gets the file extension that mapping files are suffixed with. - * - * @return string|null - */ - public function getFileExtension(); -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriver.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriver.php deleted file mode 100644 index 9b6f0c8..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriver.php +++ /dev/null @@ -1,43 +0,0 @@ - $className - * @psalm-param ClassMetadata $metadata - * - * @return void - * - * @template T of object - */ - public function loadMetadataForClass(string $className, ClassMetadata $metadata); - - /** - * Gets the names of all mapped classes known to this driver. - * - * @return array The names of all mapped classes known to this driver. - * @psalm-return list - */ - public function getAllClassNames(); - - /** - * Returns whether the class with the specified name should have its metadata loaded. - * This is only the case if it is either mapped as an Entity or a MappedSuperclass. - * - * @psalm-param class-string $className - * - * @return bool - */ - public function isTransient(string $className); -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriverChain.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriverChain.php deleted file mode 100644 index 8563dd2..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/MappingDriverChain.php +++ /dev/null @@ -1,142 +0,0 @@ - */ - private $drivers = []; - - /** - * Gets the default driver. - * - * @return MappingDriver|null - */ - public function getDefaultDriver() - { - return $this->defaultDriver; - } - - /** - * Set the default driver. - * - * @return void - */ - public function setDefaultDriver(MappingDriver $driver) - { - $this->defaultDriver = $driver; - } - - /** - * Adds a nested driver. - * - * @return void - */ - public function addDriver(MappingDriver $nestedDriver, string $namespace) - { - $this->drivers[$namespace] = $nestedDriver; - } - - /** - * Gets the array of nested drivers. - * - * @return array $drivers - */ - public function getDrivers() - { - return $this->drivers; - } - - /** - * {@inheritDoc} - */ - public function loadMetadataForClass(string $className, ClassMetadata $metadata) - { - foreach ($this->drivers as $namespace => $driver) { - if (strpos($className, $namespace) === 0) { - $driver->loadMetadataForClass($className, $metadata); - - return; - } - } - - if ($this->defaultDriver !== null) { - $this->defaultDriver->loadMetadataForClass($className, $metadata); - - return; - } - - throw MappingException::classNotFoundInNamespaces($className, array_keys($this->drivers)); - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames() - { - $classNames = []; - $driverClasses = []; - - foreach ($this->drivers as $namespace => $driver) { - $oid = spl_object_hash($driver); - - if (! isset($driverClasses[$oid])) { - $driverClasses[$oid] = $driver->getAllClassNames(); - } - - foreach ($driverClasses[$oid] as $className) { - if (strpos($className, $namespace) !== 0) { - continue; - } - - $classNames[$className] = true; - } - } - - if ($this->defaultDriver !== null) { - foreach ($this->defaultDriver->getAllClassNames() as $className) { - $classNames[$className] = true; - } - } - - return array_keys($classNames); - } - - /** - * {@inheritDoc} - */ - public function isTransient(string $className) - { - foreach ($this->drivers as $namespace => $driver) { - if (strpos($className, $namespace) === 0) { - return $driver->isTransient($className); - } - } - - if ($this->defaultDriver !== null) { - return $this->defaultDriver->isTransient($className); - } - - return true; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/PHPDriver.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/PHPDriver.php deleted file mode 100644 index 1c1ab9c..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/PHPDriver.php +++ /dev/null @@ -1,49 +0,0 @@ -> - */ -class PHPDriver extends FileDriver -{ - /** - * @var ClassMetadata - * @psalm-var ClassMetadata - */ - protected $metadata; - - /** @param string|array|FileLocator $locator */ - public function __construct($locator) - { - parent::__construct($locator, '.php'); - } - - /** - * {@inheritDoc} - */ - public function loadMetadataForClass(string $className, ClassMetadata $metadata) - { - $this->metadata = $metadata; - - $this->loadMappingFile($this->locator->findMappingFile($className)); - } - - /** - * {@inheritDoc} - */ - protected function loadMappingFile(string $file) - { - $metadata = $this->metadata; - include $file; - - return [$metadata->getName() => $metadata]; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/StaticPHPDriver.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/StaticPHPDriver.php deleted file mode 100644 index bbcff75..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/StaticPHPDriver.php +++ /dev/null @@ -1,132 +0,0 @@ - - */ - private $paths = []; - - /** - * Map of all class names. - * - * @var array - * @psalm-var list - */ - private $classNames; - - /** @param array|string $paths */ - public function __construct($paths) - { - $this->addPaths((array) $paths); - } - - /** - * @param array $paths - * - * @return void - */ - public function addPaths(array $paths) - { - $this->paths = array_unique(array_merge($this->paths, $paths)); - } - - /** - * {@inheritDoc} - */ - public function loadMetadataForClass(string $className, ClassMetadata $metadata) - { - $className::loadMetadata($metadata); - } - - /** - * {@inheritDoc} - * - * @todo Same code exists in ColocatedMappingDriver, should we re-use it - * somehow or not worry about it? - */ - public function getAllClassNames() - { - if ($this->classNames !== null) { - return $this->classNames; - } - - if ($this->paths === []) { - throw MappingException::pathRequiredForDriver(static::class); - } - - $classes = []; - $includedFiles = []; - - foreach ($this->paths as $path) { - if (! is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($path), - RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($iterator as $file) { - if ($file->getBasename('.php') === $file->getBasename()) { - continue; - } - - $sourceFile = realpath($file->getPathName()); - require_once $sourceFile; - $includedFiles[] = $sourceFile; - } - } - - $declared = get_declared_classes(); - - foreach ($declared as $className) { - $rc = new ReflectionClass($className); - - $sourceFile = $rc->getFileName(); - - if (! in_array($sourceFile, $includedFiles, true) || $this->isTransient($className)) { - continue; - } - - $classes[] = $className; - } - - $this->classNames = $classes; - - return $classes; - } - - /** - * {@inheritDoc} - */ - public function isTransient(string $className) - { - return ! method_exists($className, 'loadMetadata'); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/SymfonyFileLocator.php b/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/SymfonyFileLocator.php deleted file mode 100644 index 428d5fb..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/Driver/SymfonyFileLocator.php +++ /dev/null @@ -1,265 +0,0 @@ - - */ - protected $paths = []; - - /** - * A map of mapping directory path to namespace prefix used to expand class shortnames. - * - * @var array - */ - protected $prefixes = []; - - /** - * File extension that is searched for. - * - * @var string|null - */ - protected $fileExtension; - - /** - * Represents PHP namespace delimiters when looking for files - * - * @var string - */ - private $nsSeparator; - - /** - * @param array $prefixes - * @param string $nsSeparator String which would be used when converting FQCN - * to filename and vice versa. Should not be empty - */ - public function __construct( - array $prefixes, - string $fileExtension = '', - string $nsSeparator = '.' - ) { - $this->addNamespacePrefixes($prefixes); - $this->fileExtension = $fileExtension; - - if ($nsSeparator === '') { - throw new InvalidArgumentException('Namespace separator should not be empty'); - } - - $this->nsSeparator = $nsSeparator; - } - - /** - * Adds Namespace Prefixes. - * - * @param array $prefixes - * - * @return void - */ - public function addNamespacePrefixes(array $prefixes) - { - $this->prefixes = array_merge($this->prefixes, $prefixes); - $this->paths = array_merge($this->paths, array_keys($prefixes)); - } - - /** - * Gets Namespace Prefixes. - * - * @return string[] - */ - public function getNamespacePrefixes() - { - return $this->prefixes; - } - - /** - * {@inheritDoc} - */ - public function getPaths() - { - return $this->paths; - } - - /** - * {@inheritDoc} - */ - public function getFileExtension() - { - return $this->fileExtension; - } - - /** - * Sets the file extension used to look for mapping files under. - * - * @param string $fileExtension The file extension to set. - * - * @return void - */ - public function setFileExtension(string $fileExtension) - { - $this->fileExtension = $fileExtension; - } - - /** - * {@inheritDoc} - */ - public function fileExists(string $className) - { - $defaultFileName = str_replace('\\', $this->nsSeparator, $className) . $this->fileExtension; - foreach ($this->paths as $path) { - if (! isset($this->prefixes[$path])) { - // global namespace class - if (is_file($path . DIRECTORY_SEPARATOR . $defaultFileName)) { - return true; - } - - continue; - } - - $prefix = $this->prefixes[$path]; - - if (strpos($className, $prefix . '\\') !== 0) { - continue; - } - - $filename = $path . '/' . strtr(substr($className, strlen($prefix) + 1), '\\', $this->nsSeparator) . $this->fileExtension; - - if (is_file($filename)) { - return true; - } - } - - return false; - } - - /** - * {@inheritDoc} - */ - public function getAllClassNames(?string $globalBasename = null) - { - if ($this->paths === []) { - return []; - } - - $classes = []; - - foreach ($this->paths as $path) { - if (! is_dir($path)) { - throw MappingException::fileMappingDriversRequireConfiguredDirectoryPath($path); - } - - $iterator = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($path), - RecursiveIteratorIterator::LEAVES_ONLY - ); - - foreach ($iterator as $file) { - $fileName = $file->getBasename($this->fileExtension); - - if ($fileName === $file->getBasename() || $fileName === $globalBasename) { - continue; - } - - // NOTE: All files found here means classes are not transient! - if (isset($this->prefixes[$path])) { - // Calculate namespace suffix for given prefix as a relative path from basepath to file path - $nsSuffix = strtr( - substr($this->realpath($file->getPath()), strlen($this->realpath($path))), - $this->nsSeparator, - '\\' - ); - - /** @psalm-var class-string */ - $class = $this->prefixes[$path] . str_replace(DIRECTORY_SEPARATOR, '\\', $nsSuffix) . '\\' . str_replace($this->nsSeparator, '\\', $fileName); - } else { - /** @psalm-var class-string */ - $class = str_replace($this->nsSeparator, '\\', $fileName); - } - - $classes[] = $class; - } - } - - return $classes; - } - - /** - * {@inheritDoc} - */ - public function findMappingFile(string $className) - { - $defaultFileName = str_replace('\\', $this->nsSeparator, $className) . $this->fileExtension; - foreach ($this->paths as $path) { - if (! isset($this->prefixes[$path])) { - if (is_file($path . DIRECTORY_SEPARATOR . $defaultFileName)) { - return $path . DIRECTORY_SEPARATOR . $defaultFileName; - } - - continue; - } - - $prefix = $this->prefixes[$path]; - - if (strpos($className, $prefix . '\\') !== 0) { - continue; - } - - $filename = $path . '/' . strtr(substr($className, strlen($prefix) + 1), '\\', $this->nsSeparator) . $this->fileExtension; - if (is_file($filename)) { - return $filename; - } - } - - $pos = strrpos($className, '\\'); - assert(is_int($pos)); - - throw MappingException::mappingFileNotFound( - $className, - substr($className, $pos + 1) . $this->fileExtension - ); - } - - private function realpath(string $path): string - { - $realpath = realpath($path); - - if ($realpath === false) { - throw new RuntimeException(sprintf('Could not get realpath for %s', $path)); - } - - return $realpath; - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/MappingException.php b/vendor/doctrine/persistence/src/Persistence/Mapping/MappingException.php deleted file mode 100644 index f0bc4eb..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/MappingException.php +++ /dev/null @@ -1,88 +0,0 @@ - $namespaces - * - * @return self - */ - public static function classNotFoundInNamespaces( - string $className, - array $namespaces - ) { - return new self(sprintf( - "The class '%s' was not found in the chain configured namespaces %s", - $className, - implode(', ', $namespaces) - )); - } - - /** @param class-string $driverClassName */ - public static function pathRequiredForDriver(string $driverClassName): self - { - return new self(sprintf( - 'Specifying the paths to your entities is required when using %s to retrieve all class names.', - $driverClassName - )); - } - - /** @return self */ - public static function fileMappingDriversRequireConfiguredDirectoryPath( - ?string $path = null - ) { - if ($path !== null) { - $path = '[' . $path . ']'; - } - - return new self(sprintf( - 'File mapping drivers must have a valid directory path, ' . - 'however the given path %s seems to be incorrect!', - (string) $path - )); - } - - /** @return self */ - public static function mappingFileNotFound(string $entityName, string $fileName) - { - return new self(sprintf( - "No mapping file found named '%s' for class '%s'.", - $fileName, - $entityName - )); - } - - /** @return self */ - public static function invalidMappingFile(string $entityName, string $fileName) - { - return new self(sprintf( - "Invalid mapping file '%s' for class '%s'.", - $fileName, - $entityName - )); - } - - /** @return self */ - public static function nonExistingClass(string $className) - { - return new self(sprintf("Class '%s' does not exist", $className)); - } - - /** @param class-string $className */ - public static function classIsAnonymous(string $className): self - { - return new self(sprintf('Class "%s" is anonymous', $className)); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/ProxyClassNameResolver.php b/vendor/doctrine/persistence/src/Persistence/Mapping/ProxyClassNameResolver.php deleted file mode 100644 index 2801d90..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/ProxyClassNameResolver.php +++ /dev/null @@ -1,19 +0,0 @@ ->|class-string $className - * - * @psalm-return class-string - * - * @template T of object - */ - public function resolveClassName(string $className): string; -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/ReflectionService.php b/vendor/doctrine/persistence/src/Persistence/Mapping/ReflectionService.php deleted file mode 100644 index 9484e1f..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/ReflectionService.php +++ /dev/null @@ -1,75 +0,0 @@ - $class - * - * @return ReflectionClass|null - * @psalm-return ReflectionClass|null - * - * @template T of object - */ - public function getClass(string $class); - - /** - * Returns an accessible property (setAccessible(true)) or null. - * - * @psalm-param class-string $class - * - * @return ReflectionProperty|null - */ - public function getAccessibleProperty(string $class, string $property); - - /** - * Checks if the class have a public method with the given name. - * - * @psalm-param class-string $class - * - * @return bool - */ - public function hasPublicMethod(string $class, string $method); -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/RuntimeReflectionService.php b/vendor/doctrine/persistence/src/Persistence/Mapping/RuntimeReflectionService.php deleted file mode 100644 index 399e057..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/RuntimeReflectionService.php +++ /dev/null @@ -1,111 +0,0 @@ -supportsTypedPropertiesWorkaround = version_compare(phpversion(), '7.4.0') >= 0; - } - - /** - * {@inheritDoc} - */ - public function getParentClasses(string $class) - { - if (! class_exists($class)) { - throw MappingException::nonExistingClass($class); - } - - $parents = class_parents($class); - - assert($parents !== false); - - return $parents; - } - - /** - * {@inheritDoc} - */ - public function getClassShortName(string $class) - { - $reflectionClass = new ReflectionClass($class); - - return $reflectionClass->getShortName(); - } - - /** - * {@inheritDoc} - */ - public function getClassNamespace(string $class) - { - $reflectionClass = new ReflectionClass($class); - - return $reflectionClass->getNamespaceName(); - } - - /** - * @psalm-param class-string $class - * - * @return ReflectionClass - * @psalm-return ReflectionClass - * - * @template T of object - */ - public function getClass(string $class) - { - return new ReflectionClass($class); - } - - /** - * {@inheritDoc} - */ - public function getAccessibleProperty(string $class, string $property) - { - $reflectionProperty = new RuntimeReflectionProperty($class, $property); - - if ($this->supportsTypedPropertiesWorkaround && ! array_key_exists($property, $this->getClass($class)->getDefaultProperties())) { - $reflectionProperty = new TypedNoDefaultReflectionProperty($class, $property); - } - - $reflectionProperty->setAccessible(true); - - return $reflectionProperty; - } - - /** - * {@inheritDoc} - */ - public function hasPublicMethod(string $class, string $method) - { - try { - $reflectionMethod = new ReflectionMethod($class, $method); - } catch (ReflectionException $e) { - return false; - } - - return $reflectionMethod->isPublic(); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Mapping/StaticReflectionService.php b/vendor/doctrine/persistence/src/Persistence/Mapping/StaticReflectionService.php deleted file mode 100644 index c9f2147..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Mapping/StaticReflectionService.php +++ /dev/null @@ -1,78 +0,0 @@ -find($id). - * - * @param string $className The class name of the object to find. - * @param mixed $id The identity of the object to find. - * @psalm-param class-string $className - * - * @return object|null The found object. - * @psalm-return T|null - * - * @template T of object - */ - public function find(string $className, $id); - - /** - * Tells the ObjectManager to make an instance managed and persistent. - * - * The object will be entered into the database as a result of the flush operation. - * - * NOTE: The persist operation always considers objects that are not yet known to - * this ObjectManager as NEW. Do not pass detached objects to the persist operation. - * - * @param object $object The instance to make managed and persistent. - * - * @return void - */ - public function persist(object $object); - - /** - * Removes an object instance. - * - * A removed object will be removed from the database as a result of the flush operation. - * - * @param object $object The object instance to remove. - * - * @return void - */ - public function remove(object $object); - - /** - * Clears the ObjectManager. All objects that are currently managed - * by this ObjectManager become detached. - * - * @return void - */ - public function clear(); - - /** - * Detaches an object from the ObjectManager, causing a managed object to - * become detached. Unflushed changes made to the object if any - * (including removal of the object), will not be synchronized to the database. - * Objects which previously referenced the detached object will continue to - * reference it. - * - * @param object $object The object to detach. - * - * @return void - */ - public function detach(object $object); - - /** - * Refreshes the persistent state of an object from the database, - * overriding any local changes that have not yet been persisted. - * - * @param object $object The object to refresh. - * - * @return void - */ - public function refresh(object $object); - - /** - * Flushes all changes to objects that have been queued up to now to the database. - * This effectively synchronizes the in-memory state of managed objects with the - * database. - * - * @return void - */ - public function flush(); - - /** - * Gets the repository for a class. - * - * @psalm-param class-string $className - * - * @psalm-return ObjectRepository - * - * @template T of object - */ - public function getRepository(string $className); - - /** - * Returns the ClassMetadata descriptor for a class. - * - * The class name must be the fully-qualified class name without a leading backslash - * (as it is returned by get_class($obj)). - * - * @psalm-param class-string $className - * - * @psalm-return ClassMetadata - * - * @template T of object - */ - public function getClassMetadata(string $className); - - /** - * Gets the metadata factory used to gather the metadata of classes. - * - * @psalm-return ClassMetadataFactory> - */ - public function getMetadataFactory(); - - /** - * Helper method to initialize a lazy loading proxy or persistent collection. - * - * This method is a no-op for other objects. - * - * @return void - */ - public function initializeObject(object $obj); - - /** - * Checks if the object is part of the current UnitOfWork and therefore managed. - * - * @return bool - */ - public function contains(object $object); -} diff --git a/vendor/doctrine/persistence/src/Persistence/ObjectManagerDecorator.php b/vendor/doctrine/persistence/src/Persistence/ObjectManagerDecorator.php deleted file mode 100644 index 8c038b8..0000000 --- a/vendor/doctrine/persistence/src/Persistence/ObjectManagerDecorator.php +++ /dev/null @@ -1,92 +0,0 @@ -wrapped->find($className, $id); - } - - public function persist(object $object) - { - $this->wrapped->persist($object); - } - - public function remove(object $object) - { - $this->wrapped->remove($object); - } - - public function clear(): void - { - $this->wrapped->clear(); - } - - public function detach(object $object) - { - $this->wrapped->detach($object); - } - - public function refresh(object $object) - { - $this->wrapped->refresh($object); - } - - public function flush() - { - $this->wrapped->flush(); - } - - /** - * {@inheritDoc} - */ - public function getRepository(string $className) - { - return $this->wrapped->getRepository($className); - } - - /** - * {@inheritDoc} - */ - public function getClassMetadata(string $className) - { - return $this->wrapped->getClassMetadata($className); - } - - /** @psalm-return ClassMetadataFactory> */ - public function getMetadataFactory() - { - return $this->wrapped->getMetadataFactory(); - } - - public function initializeObject(object $obj) - { - $this->wrapped->initializeObject($obj); - } - - /** - * {@inheritDoc} - */ - public function contains(object $object) - { - return $this->wrapped->contains($object); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/ObjectRepository.php b/vendor/doctrine/persistence/src/Persistence/ObjectRepository.php deleted file mode 100644 index a714731..0000000 --- a/vendor/doctrine/persistence/src/Persistence/ObjectRepository.php +++ /dev/null @@ -1,73 +0,0 @@ - The objects. - * @psalm-return T[] - */ - public function findAll(); - - /** - * Finds objects by a set of criteria. - * - * Optionally sorting and limiting details can be passed. An implementation may throw - * an UnexpectedValueException if certain values of the sorting or limiting details are - * not supported. - * - * @param array $criteria - * @param array|null $orderBy - * @psalm-param array|null $orderBy - * - * @return array The objects. - * @psalm-return T[] - * - * @throws UnexpectedValueException - */ - public function findBy( - array $criteria, - ?array $orderBy = null, - ?int $limit = null, - ?int $offset = null - ); - - /** - * Finds a single object by a set of criteria. - * - * @param array $criteria The criteria. - * - * @return object|null The object. - * @psalm-return T|null - */ - public function findOneBy(array $criteria); - - /** - * Returns the class name of the object managed by the repository. - * - * @psalm-return class-string - */ - public function getClassName(); -} diff --git a/vendor/doctrine/persistence/src/Persistence/PropertyChangedListener.php b/vendor/doctrine/persistence/src/Persistence/PropertyChangedListener.php deleted file mode 100644 index 6b50707..0000000 --- a/vendor/doctrine/persistence/src/Persistence/PropertyChangedListener.php +++ /dev/null @@ -1,24 +0,0 @@ - */ - private $enumType; - - /** @param class-string $enumType */ - public function __construct(ReflectionProperty $originalReflectionProperty, string $enumType) - { - $this->originalReflectionProperty = $originalReflectionProperty; - $this->enumType = $enumType; - } - - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ - public function getDeclaringClass(): ReflectionClass - { - return $this->originalReflectionProperty->getDeclaringClass(); - } - - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ - public function getName(): string - { - return $this->originalReflectionProperty->getName(); - } - - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ - public function getType(): ?ReflectionType - { - return $this->originalReflectionProperty->getType(); - } - - /** - * {@inheritDoc} - */ - public function getAttributes(?string $name = null, int $flags = 0): array - { - return $this->originalReflectionProperty->getAttributes($name, $flags); - } - - /** - * {@inheritDoc} - * - * Converts enum instance to its value. - * - * @param object|null $object - * - * @return int|string|int[]|string[]|null - */ - #[ReturnTypeWillChange] - public function getValue($object = null) - { - if ($object === null) { - return null; - } - - $enum = $this->originalReflectionProperty->getValue($object); - - if ($enum === null) { - return null; - } - - return $this->fromEnum($enum); - } - - /** - * Converts enum value to enum instance. - * - * @param object $object - * @param mixed $value - */ - public function setValue($object, $value = null): void - { - if ($value !== null) { - $value = $this->toEnum($value); - } - - $this->originalReflectionProperty->setValue($object, $value); - } - - /** - * @param BackedEnum|BackedEnum[] $enum - * - * @return ($enum is BackedEnum ? (string|int) : (string[]|int[])) - */ - private function fromEnum($enum) - { - if (is_array($enum)) { - return array_map(static function (BackedEnum $enum) { - return $enum->value; - }, $enum); - } - - return $enum->value; - } - - /** - * @param int|string|int[]|string[]|BackedEnum|BackedEnum[] $value - * - * @return ($value is int|string|BackedEnum ? BackedEnum : BackedEnum[]) - */ - private function toEnum($value) - { - if ($value instanceof BackedEnum) { - return $value; - } - - if (is_array($value)) { - $v = reset($value); - if ($v instanceof BackedEnum) { - return $value; - } - - return array_map([$this->enumType, 'from'], $value); - } - - return $this->enumType::from($value); - } - - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ - public function getModifiers(): int - { - return $this->originalReflectionProperty->getModifiers(); - } - - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ - public function getDocComment(): string|false - { - return $this->originalReflectionProperty->getDocComment(); - } - - /** - * {@inheritDoc} - * - * @psalm-external-mutation-free - */ - public function isPrivate(): bool - { - return $this->originalReflectionProperty->isPrivate(); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Reflection/RuntimePublicReflectionProperty.php b/vendor/doctrine/persistence/src/Persistence/Reflection/RuntimePublicReflectionProperty.php deleted file mode 100644 index e2367ec..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Reflection/RuntimePublicReflectionProperty.php +++ /dev/null @@ -1,61 +0,0 @@ -getName()] ?? null : parent::getValue(); - } - - /** - * {@inheritDoc} - * - * Avoids triggering lazy loading via `__set` if the provided object - * is a {@see \Doctrine\Common\Proxy\Proxy}. - * - * @link https://bugs.php.net/bug.php?id=63463 - * - * @param object|null $object - * @param mixed $value - * - * @return void - */ - #[ReturnTypeWillChange] - public function setValue($object, $value = null) - { - if (! ($object instanceof Proxy && ! $object->__isInitialized())) { - parent::setValue($object, $value); - - return; - } - - $originalInitializer = $object->__getInitializer(); - $object->__setInitializer(null); - - parent::setValue($object, $value); - - $object->__setInitializer($originalInitializer); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Reflection/RuntimeReflectionProperty.php b/vendor/doctrine/persistence/src/Persistence/Reflection/RuntimeReflectionProperty.php deleted file mode 100644 index 5f52056..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Reflection/RuntimeReflectionProperty.php +++ /dev/null @@ -1,87 +0,0 @@ -key = $this->isPrivate() ? "\0" . ltrim($class, '\\') . "\0" . $name : ($this->isProtected() ? "\0*\0" . $name : $name); - } - - /** - * {@inheritDoc} - * - * @return mixed - */ - #[ReturnTypeWillChange] - public function getValue($object = null) - { - if ($object === null) { - return parent::getValue($object); - } - - return ((array) $object)[$this->key] ?? null; - } - - /** - * {@inheritDoc} - * - * @param object|null $object - * @param mixed $value - * - * @return void - */ - #[ReturnTypeWillChange] - public function setValue($object, $value = null) - { - if (! ($object instanceof Proxy && ! $object->__isInitialized())) { - parent::setValue($object, $value); - - return; - } - - if ($object instanceof CommonProxy) { - $originalInitializer = $object->__getInitializer(); - $object->__setInitializer(null); - - parent::setValue($object, $value); - - $object->__setInitializer($originalInitializer); - - return; - } - - if (! method_exists($object, '__setInitialized')) { - return; - } - - $object->__setInitialized(true); - - parent::setValue($object, $value); - - $object->__setInitialized(false); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultReflectionProperty.php b/vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultReflectionProperty.php deleted file mode 100644 index 5e70620..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultReflectionProperty.php +++ /dev/null @@ -1,13 +0,0 @@ -isInitialized($object) ? parent::getValue($object) : null; - } - - /** - * {@inheritDoc} - * - * Works around the problem with setting typed no default properties to - * NULL which is not supported, instead unset() to uninitialize. - * - * @link https://github.com/doctrine/orm/issues/7999 - * - * @param object|null $object - * - * @return void - */ - #[ReturnTypeWillChange] - public function setValue($object, $value = null) - { - if ($value === null && $this->hasType() && ! $this->getType()->allowsNull()) { - $propertyName = $this->getName(); - - $unsetter = function () use ($propertyName): void { - unset($this->$propertyName); - }; - $unsetter = $unsetter->bindTo($object, $this->getDeclaringClass()->getName()); - - assert($unsetter instanceof Closure); - - $unsetter(); - - return; - } - - parent::setValue($object, $value); - } -} diff --git a/vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultRuntimePublicReflectionProperty.php b/vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultRuntimePublicReflectionProperty.php deleted file mode 100644 index 181172f..0000000 --- a/vendor/doctrine/persistence/src/Persistence/Reflection/TypedNoDefaultRuntimePublicReflectionProperty.php +++ /dev/null @@ -1,15 +0,0 @@ - - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/doctrine/sql-formatter/README.md b/vendor/doctrine/sql-formatter/README.md deleted file mode 100644 index 62b42e4..0000000 --- a/vendor/doctrine/sql-formatter/README.md +++ /dev/null @@ -1,137 +0,0 @@ -# SqlFormatter - -A lightweight php package for formatting sql statements. - -It can automatically indent and add line breaks in addition to syntax -highlighting. - -## History - -This package is a fork from https://github.com/jdorn/sql-formatter -Here is what the original History section says: - -> I found myself having to debug auto-generated SQL statements all the time and -> wanted some way to easily output formatted HTML without having to include a -> huge library or copy and paste into online formatters. - -> I was originally planning to extract the formatting code from PhpMyAdmin, -> but that was 10,000+ lines of code and used global variables. - -> I saw that other people had the same problem and used Stack Overflow user -> losif's answer as a starting point. http://stackoverflow.com/a/3924147 - -― @jdorn - -## Usage - -The `SqlFormatter` class has a method `format` which takes an SQL string as -input and returns a formatted block. - -Sample usage: - -```php -= NOW()) ) - GROUP BY Column1 ORDER BY Column3 DESC LIMIT 5,10"; - -echo (new SqlFormatter())->format($query); -``` - -Output: - -formatted output with HTML Highlight - -When you run php under cli and instantiated `SqlFormatter` without argument, highlighted with `CliHighlighter`. - -SqlFormatter constructor takes `Highlighter` implementations. `HtmlHighlighter` etc. - - -### Formatting Only - -If you don't want syntax highlighting and only want the indentations and -line breaks, pass in a `NullHighlighter` instance as the second parameter. - -This is useful for outputting to error logs or other non-html formats. - -```php -format($query); -``` - -Output: - -``` -SELECT - count(*), - `Column1`, - `Testing`, - `Testing Three` -FROM - `Table1` -WHERE - Column1 = 'testing' - AND ( - ( - `Column2` = `Column3` - OR Column4 >= NOW() - ) - ) -GROUP BY - Column1 -ORDER BY - Column3 DESC -LIMIT - 5, 10 -``` - -### Syntax Highlighting Only - -There is a separate method `highlight` that preserves all original whitespace -and just adds syntax highlighting. - -This is useful for sql that is already well formatted and just needs to be a -little easier to read. - -```php -highlight($query); -``` - -Output: - -HTML Highlight output - -### Compress Query - -The `compress` method removes all comments and compresses whitespace. - -This is useful for outputting queries that can be copy pasted to the command -line easily. - -```sql --- This is a comment - SELECT - /* This is another comment - On more than one line */ - Id #This is one final comment - as temp, DateCreated as Created FROM MyTable; -``` - -```php -echo (new SqlFormatter())->compress($query); -``` - -Output: - -```sql -SELECT Id as temp, DateCreated as Created FROM MyTable; -``` diff --git a/vendor/doctrine/sql-formatter/composer.json b/vendor/doctrine/sql-formatter/composer.json deleted file mode 100644 index 9f8b3e8..0000000 --- a/vendor/doctrine/sql-formatter/composer.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "name": "doctrine/sql-formatter", - "description": "a PHP SQL highlighting library", - "homepage": "https://github.com/doctrine/sql-formatter/", - "keywords": ["sql", "highlight"], - "license": "MIT", - "type": "library", - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^12", - "phpstan/phpstan": "^1.10", - "phpunit/phpunit": "^10.5", - "vimeo/psalm": "^5.24" - }, - "authors": [ - { - "name": "Jeremy Dorn", - "email": "jeremy@jeremydorn.com", - "homepage": "https://jeremydorn.com/" - } - ], - "autoload": { - "psr-4": { - "Doctrine\\SqlFormatter\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "Doctrine\\SqlFormatter\\Tests\\": "tests" - } - }, - "config": { - "sort-packages": true, - "allow-plugins": { - "dealerdirect/phpcodesniffer-composer-installer": true - } - }, - "bin": ["bin/sql-formatter"] -} diff --git a/vendor/doctrine/sql-formatter/src/CliHighlighter.php b/vendor/doctrine/sql-formatter/src/CliHighlighter.php deleted file mode 100644 index 31f84ba..0000000 --- a/vendor/doctrine/sql-formatter/src/CliHighlighter.php +++ /dev/null @@ -1,76 +0,0 @@ - */ - private array $escapeSequences; - - /** @param array $escapeSequences */ - public function __construct(array $escapeSequences = []) - { - $this->escapeSequences = $escapeSequences + [ - self::HIGHLIGHT_QUOTE => "\x1b[34;1m", - self::HIGHLIGHT_BACKTICK_QUOTE => "\x1b[35;1m", - self::HIGHLIGHT_RESERVED => "\x1b[37m", - self::HIGHLIGHT_BOUNDARY => '', - self::HIGHLIGHT_NUMBER => "\x1b[32;1m", - self::HIGHLIGHT_WORD => '', - self::HIGHLIGHT_ERROR => "\x1b[31;1;7m", - self::HIGHLIGHT_COMMENT => "\x1b[30;1m", - self::HIGHLIGHT_VARIABLE => "\x1b[36;1m", - self::HIGHLIGHT_FUNCTIONS => "\x1b[37m", - ]; - } - - public function highlightToken(int $type, string $value): string - { - if ($type === Token::TOKEN_TYPE_BOUNDARY && ($value === '(' || $value === ')')) { - return $value; - } - - $prefix = $this->prefix($type); - if ($prefix === null) { - return $value; - } - - return $prefix . $value . "\x1b[0m"; - } - - private function prefix(int $type): string|null - { - if (! isset(self::TOKEN_TYPE_TO_HIGHLIGHT[$type])) { - return null; - } - - return $this->escapeSequences[self::TOKEN_TYPE_TO_HIGHLIGHT[$type]]; - } - - public function highlightError(string $value): string - { - return sprintf( - '%s%s%s%s', - "\n", - $this->escapeSequences[self::HIGHLIGHT_ERROR], - $value, - "\x1b[0m", - ); - } - - public function highlightErrorMessage(string $value): string - { - return $this->highlightError($value); - } - - public function output(string $string): string - { - return $string . "\n"; - } -} diff --git a/vendor/doctrine/sql-formatter/src/Cursor.php b/vendor/doctrine/sql-formatter/src/Cursor.php deleted file mode 100644 index 5f70013..0000000 --- a/vendor/doctrine/sql-formatter/src/Cursor.php +++ /dev/null @@ -1,50 +0,0 @@ -tokens[++$this->position] ?? null) { - if ($exceptTokenType !== null && $token->isOfType($exceptTokenType)) { - continue; - } - - return $token; - } - - return null; - } - - public function previous(int|null $exceptTokenType = null): Token|null - { - while ($token = $this->tokens[--$this->position] ?? null) { - if ($exceptTokenType !== null && $token->isOfType($exceptTokenType)) { - continue; - } - - return $token; - } - - return null; - } - - public function subCursor(): self - { - $cursor = new self($this->tokens); - $cursor->position = $this->position; - - return $cursor; - } -} diff --git a/vendor/doctrine/sql-formatter/src/Highlighter.php b/vendor/doctrine/sql-formatter/src/Highlighter.php deleted file mode 100644 index 02c5c97..0000000 --- a/vendor/doctrine/sql-formatter/src/Highlighter.php +++ /dev/null @@ -1,56 +0,0 @@ - self::HIGHLIGHT_BOUNDARY, - Token::TOKEN_TYPE_WORD => self::HIGHLIGHT_WORD, - Token::TOKEN_TYPE_BACKTICK_QUOTE => self::HIGHLIGHT_BACKTICK_QUOTE, - Token::TOKEN_TYPE_QUOTE => self::HIGHLIGHT_QUOTE, - Token::TOKEN_TYPE_RESERVED => self::HIGHLIGHT_RESERVED, - Token::TOKEN_TYPE_RESERVED_TOPLEVEL => self::HIGHLIGHT_RESERVED, - Token::TOKEN_TYPE_RESERVED_NEWLINE => self::HIGHLIGHT_RESERVED, - Token::TOKEN_TYPE_NUMBER => self::HIGHLIGHT_NUMBER, - Token::TOKEN_TYPE_VARIABLE => self::HIGHLIGHT_VARIABLE, - Token::TOKEN_TYPE_COMMENT => self::HIGHLIGHT_COMMENT, - Token::TOKEN_TYPE_BLOCK_COMMENT => self::HIGHLIGHT_COMMENT, - ]; - - public const HIGHLIGHT_BOUNDARY = 'boundary'; - public const HIGHLIGHT_WORD = 'word'; - public const HIGHLIGHT_BACKTICK_QUOTE = 'backtickQuote'; - public const HIGHLIGHT_QUOTE = 'quote'; - public const HIGHLIGHT_RESERVED = 'reserved'; - public const HIGHLIGHT_NUMBER = 'number'; - public const HIGHLIGHT_VARIABLE = 'variable'; - public const HIGHLIGHT_COMMENT = 'comment'; - public const HIGHLIGHT_ERROR = 'error'; - - /** - * Highlights a token depending on its type. - */ - public function highlightToken(int $type, string $value): string; - - /** - * Highlights a token which causes an issue - */ - public function highlightError(string $value): string; - - /** - * Highlights an error message - */ - public function highlightErrorMessage(string $value): string; - - /** - * Helper function for building string output - * - * @param string $string The string to be quoted - * - * @return string The quoted string - */ - public function output(string $string): string; -} diff --git a/vendor/doctrine/sql-formatter/src/HtmlHighlighter.php b/vendor/doctrine/sql-formatter/src/HtmlHighlighter.php deleted file mode 100644 index 595e0e4..0000000 --- a/vendor/doctrine/sql-formatter/src/HtmlHighlighter.php +++ /dev/null @@ -1,92 +0,0 @@ - */ - private readonly array $htmlAttributes; - - /** - * @param array $htmlAttributes - * @param bool $usePre This flag tells us if queries need to be enclosed in
 tags
-     */
-    public function __construct(
-        array $htmlAttributes = [],
-        private readonly bool $usePre = true,
-    ) {
-        $this->htmlAttributes = $htmlAttributes + [
-            self::HIGHLIGHT_QUOTE => 'style="color: blue;"',
-            self::HIGHLIGHT_BACKTICK_QUOTE => 'style="color: purple;"',
-            self::HIGHLIGHT_RESERVED => 'style="font-weight:bold;"',
-            self::HIGHLIGHT_BOUNDARY => '',
-            self::HIGHLIGHT_NUMBER => 'style="color: green;"',
-            self::HIGHLIGHT_WORD => 'style="color: #333;"',
-            self::HIGHLIGHT_ERROR => 'style="background-color: red;"',
-            self::HIGHLIGHT_COMMENT => 'style="color: #aaa;"',
-            self::HIGHLIGHT_VARIABLE => 'style="color: orange;"',
-            self::HIGHLIGHT_PRE => 'style="color: black; background-color: white;"',
-        ];
-    }
-
-    public function highlightToken(int $type, string $value): string
-    {
-        $value = htmlentities($value, ENT_COMPAT | ENT_IGNORE, 'UTF-8');
-
-        if ($type === Token::TOKEN_TYPE_BOUNDARY && ($value === '(' || $value === ')')) {
-            return $value;
-        }
-
-        $attributes = $this->attributes($type);
-        if ($attributes === null) {
-            return $value;
-        }
-
-        return '' . $value . '';
-    }
-
-    public function attributes(int $type): string|null
-    {
-        if (! isset(self::TOKEN_TYPE_TO_HIGHLIGHT[$type])) {
-            return null;
-        }
-
-        return $this->htmlAttributes[self::TOKEN_TYPE_TO_HIGHLIGHT[$type]];
-    }
-
-    public function highlightError(string $value): string
-    {
-        return sprintf(
-            '%s%s',
-            "\n",
-            $this->htmlAttributes[self::HIGHLIGHT_ERROR],
-            $value,
-        );
-    }
-
-    public function highlightErrorMessage(string $value): string
-    {
-        return $this->highlightError($value);
-    }
-
-    public function output(string $string): string
-    {
-        $string = trim($string);
-        if (! $this->usePre) {
-            return $string;
-        }
-
-        return '
htmlAttributes[self::HIGHLIGHT_PRE] . '>' . $string . '
'; - } -} diff --git a/vendor/doctrine/sql-formatter/src/NullHighlighter.php b/vendor/doctrine/sql-formatter/src/NullHighlighter.php deleted file mode 100644 index b62c998..0000000 --- a/vendor/doctrine/sql-formatter/src/NullHighlighter.php +++ /dev/null @@ -1,28 +0,0 @@ -tokenizer = new Tokenizer(); - $this->highlighter = $highlighter ?? (PHP_SAPI === 'cli' ? new CliHighlighter() : new HtmlHighlighter()); - } - - /** - * Format the whitespace in a SQL string to make it easier to read. - * - * @param string $string The SQL string - * - * @return string The SQL string with HTML styles and formatting wrapped in a
 tag
-     */
-    public function format(string $string, string $indentString = '  '): string
-    {
-        // This variable will be populated with formatted html
-        $return = '';
-
-        // Use an actual tab while formatting and then switch out with $indentString at the end
-        $tab = "\t";
-
-        $indentLevel           = 0;
-        $newline               = false;
-        $inlineParentheses     = false;
-        $increaseSpecialIndent = false;
-        $increaseBlockIndent   = false;
-        $indentTypes           = [];
-        $addedNewline          = false;
-        $inlineCount           = 0;
-        $inlineIndented        = false;
-        $clauseLimit           = false;
-
-        // Tokenize String
-        $cursor = $this->tokenizer->tokenize($string);
-
-        // Format token by token
-        while ($token = $cursor->next(Token::TOKEN_TYPE_WHITESPACE)) {
-            $highlighted = $this->highlighter->highlightToken(
-                $token->type(),
-                $token->value(),
-            );
-
-            // If we are increasing the special indent level now
-            if ($increaseSpecialIndent) {
-                $indentLevel++;
-                $increaseSpecialIndent = false;
-                array_unshift($indentTypes, 'special');
-            }
-
-            // If we are increasing the block indent level now
-            if ($increaseBlockIndent) {
-                $indentLevel++;
-                $increaseBlockIndent = false;
-                array_unshift($indentTypes, 'block');
-            }
-
-            // If we need a new line before the token
-            if ($newline) {
-                $return       = rtrim($return, ' ');
-                $return      .= "\n" . str_repeat($tab, $indentLevel);
-                $newline      = false;
-                $addedNewline = true;
-            } else {
-                $addedNewline = false;
-            }
-
-            // Display comments directly where they appear in the source
-            if ($token->isOfType(Token::TOKEN_TYPE_COMMENT, Token::TOKEN_TYPE_BLOCK_COMMENT)) {
-                if ($token->isOfType(Token::TOKEN_TYPE_BLOCK_COMMENT)) {
-                    $indent      = str_repeat($tab, $indentLevel);
-                    $return      = rtrim($return, " \t");
-                    $return     .= "\n" . $indent;
-                    $highlighted = str_replace("\n", "\n" . $indent, $highlighted);
-                }
-
-                $return .= $highlighted;
-                $newline = true;
-                continue;
-            }
-
-            if ($inlineParentheses) {
-                // End of inline parentheses
-                if ($token->value() === ')') {
-                    $return = rtrim($return, ' ');
-
-                    if ($inlineIndented) {
-                        array_shift($indentTypes);
-                        $indentLevel--;
-                        $return  = rtrim($return, ' ');
-                        $return .= "\n" . str_repeat($tab, $indentLevel);
-                    }
-
-                    $inlineParentheses = false;
-
-                    $return .= $highlighted . ' ';
-                    continue;
-                }
-
-                if ($token->value() === ',') {
-                    if ($inlineCount >= 30) {
-                        $inlineCount = 0;
-                        $newline     = true;
-                    }
-                }
-
-                $inlineCount += strlen($token->value());
-            }
-
-            // Opening parentheses increase the block indent level and start a new line
-            if ($token->value() === '(') {
-                // First check if this should be an inline parentheses block
-                // Examples are "NOW()", "COUNT(*)", "int(10)", key(`somecolumn`), DECIMAL(7,2)
-                // Allow up to 3 non-whitespace tokens inside inline parentheses
-                $length    = 0;
-                $subCursor = $cursor->subCursor();
-                for ($j = 1; $j <= 250; $j++) {
-                    // Reached end of string
-                    $next = $subCursor->next(Token::TOKEN_TYPE_WHITESPACE);
-                    if (! $next) {
-                        break;
-                    }
-
-                    // Reached closing parentheses, able to inline it
-                    if ($next->value() === ')') {
-                        $inlineParentheses = true;
-                        $inlineCount       = 0;
-                        $inlineIndented    = false;
-                        break;
-                    }
-
-                    // Reached an invalid token for inline parentheses
-                    if ($next->value() === ';' || $next->value() === '(') {
-                        break;
-                    }
-
-                    // Reached an invalid token type for inline parentheses
-                    if (
-                        $next->isOfType(
-                            Token::TOKEN_TYPE_RESERVED_TOPLEVEL,
-                            Token::TOKEN_TYPE_RESERVED_NEWLINE,
-                            Token::TOKEN_TYPE_COMMENT,
-                            Token::TOKEN_TYPE_BLOCK_COMMENT,
-                        )
-                    ) {
-                        break;
-                    }
-
-                    $length += strlen($next->value());
-                }
-
-                if ($inlineParentheses && $length > 30) {
-                    $increaseBlockIndent = true;
-                    $inlineIndented      = true;
-                    $newline             = true;
-                }
-
-                // Take out the preceding space unless there was whitespace there in the original query
-                $prevToken = $cursor->subCursor()->previous();
-                if ($prevToken && ! $prevToken->isOfType(Token::TOKEN_TYPE_WHITESPACE)) {
-                    $return = rtrim($return, ' ');
-                }
-
-                if (! $inlineParentheses) {
-                    $increaseBlockIndent = true;
-                    // Add a newline after the parentheses
-                    $newline = true;
-                }
-            } elseif ($token->value() === ')') {
-                // Closing parentheses decrease the block indent level
-                // Remove whitespace before the closing parentheses
-                $return = rtrim($return, ' ');
-
-                $indentLevel--;
-
-                // Reset indent level
-                while ($j = array_shift($indentTypes)) {
-                    if ($j !== 'special') {
-                        break;
-                    }
-
-                    $indentLevel--;
-                }
-
-                if ($indentLevel < 0) {
-                    // This is an error
-                    $indentLevel = 0;
-
-                    $return .= $this->highlighter->highlightError($token->value());
-                    continue;
-                }
-
-                // Add a newline before the closing parentheses (if not already added)
-                if (! $addedNewline) {
-                    $return .= "\n" . str_repeat($tab, $indentLevel);
-                }
-            } elseif ($token->isOfType(Token::TOKEN_TYPE_RESERVED_TOPLEVEL)) {
-                // Top level reserved words start a new line and increase the special indent level
-                $increaseSpecialIndent = true;
-
-                // If the last indent type was 'special', decrease the special indent for this round
-                reset($indentTypes);
-                if (current($indentTypes) === 'special') {
-                    $indentLevel--;
-                    array_shift($indentTypes);
-                }
-
-                // Add a newline after the top level reserved word
-                $newline = true;
-                // Add a newline before the top level reserved word (if not already added)
-                if (! $addedNewline) {
-                    $return  = rtrim($return, ' ');
-                    $return .= "\n" . str_repeat($tab, $indentLevel);
-                } else {
-                    // If we already added a newline, redo the indentation since it may be different now
-                    $return = rtrim($return, $tab) . str_repeat($tab, $indentLevel);
-                }
-
-                if ($token->hasExtraWhitespace()) {
-                    $highlighted = preg_replace('/\s+/', ' ', $highlighted);
-                }
-
-                //if SQL 'LIMIT' clause, start variable to reset newline
-                if ($token->value() === 'LIMIT' && ! $inlineParentheses) {
-                    $clauseLimit = true;
-                }
-            } elseif ($token->value() === ';') {
-                // If the last indent type was 'special', decrease the special indent for this round
-                reset($indentTypes);
-                if (current($indentTypes) === 'special') {
-                    $indentLevel--;
-                    array_shift($indentTypes);
-                }
-
-                $newline = true;
-            } elseif (
-                $clauseLimit &&
-                $token->value() !== ',' &&
-                ! $token->isOfType(Token::TOKEN_TYPE_NUMBER, Token::TOKEN_TYPE_WHITESPACE)
-            ) {
-                // Checks if we are out of the limit clause
-                $clauseLimit = false;
-            } elseif ($token->value() === ',' && ! $inlineParentheses) {
-                // Commas start a new line (unless within inline parentheses or SQL 'LIMIT' clause)
-                //If the previous TOKEN_VALUE is 'LIMIT', resets new line
-                if ($clauseLimit === true) {
-                    $newline     = false;
-                    $clauseLimit = false;
-                } else {
-                    // All other cases of commas
-                    $newline = true;
-                }
-            } elseif ($token->isOfType(Token::TOKEN_TYPE_RESERVED_NEWLINE)) {
-            // Newline reserved words start a new line
-                // Add a newline before the reserved word (if not already added)
-                if (! $addedNewline) {
-                    $return  = rtrim($return, ' ');
-                    $return .= "\n" . str_repeat($tab, $indentLevel);
-                }
-
-                if ($token->hasExtraWhitespace()) {
-                    $highlighted = preg_replace('/\s+/', ' ', $highlighted);
-                }
-            } elseif ($token->isOfType(Token::TOKEN_TYPE_BOUNDARY)) {
-                // Multiple boundary characters in a row should not have spaces between them (not including parentheses)
-                $prevNotWhitespaceToken = $cursor->subCursor()->previous(Token::TOKEN_TYPE_WHITESPACE);
-                if ($prevNotWhitespaceToken && $prevNotWhitespaceToken->isOfType(Token::TOKEN_TYPE_BOUNDARY)) {
-                    $prevToken = $cursor->subCursor()->previous();
-                    if ($prevToken && ! $prevToken->isOfType(Token::TOKEN_TYPE_WHITESPACE)) {
-                        $return = rtrim($return, ' ');
-                    }
-                }
-            }
-
-            // If the token shouldn't have a space before it
-            if (
-                $token->value() === '.' ||
-                $token->value() === ',' ||
-                $token->value() === ';'
-            ) {
-                $return = rtrim($return, ' ');
-            }
-
-            $return .= $highlighted . ' ';
-
-            // If the token shouldn't have a space after it
-            if ($token->value() === '(' || $token->value() === '.') {
-                $return = rtrim($return, ' ');
-            }
-
-            // If this is the "-" of a negative number, it shouldn't have a space after it
-            if ($token->value() !== '-') {
-                continue;
-            }
-
-            $nextNotWhitespace = $cursor->subCursor()->next(Token::TOKEN_TYPE_WHITESPACE);
-            if (! $nextNotWhitespace || ! $nextNotWhitespace->isOfType(Token::TOKEN_TYPE_NUMBER)) {
-                continue;
-            }
-
-            $prev = $cursor->subCursor()->previous(Token::TOKEN_TYPE_WHITESPACE);
-            if (! $prev) {
-                continue;
-            }
-
-            if (
-                $prev->isOfType(
-                    Token::TOKEN_TYPE_QUOTE,
-                    Token::TOKEN_TYPE_BACKTICK_QUOTE,
-                    Token::TOKEN_TYPE_WORD,
-                    Token::TOKEN_TYPE_NUMBER,
-                )
-            ) {
-                continue;
-            }
-
-            $return = rtrim($return, ' ');
-        }
-
-        // If there are unmatched parentheses
-        if (array_search('block', $indentTypes) !== false) {
-            $return  = rtrim($return, ' ');
-            $return .= $this->highlighter->highlightErrorMessage(
-                'WARNING: unclosed parentheses or section',
-            );
-        }
-
-        // Replace tab characters with the configuration tab character
-        $return = trim(str_replace("\t", $indentString, $return));
-
-        return $this->highlighter->output($return);
-    }
-
-    /**
-     * Add syntax highlighting to a SQL string
-     *
-     * @param string $string The SQL string
-     *
-     * @return string The SQL string with HTML styles applied
-     */
-    public function highlight(string $string): string
-    {
-        $cursor = $this->tokenizer->tokenize($string);
-
-        $return = '';
-
-        while ($token = $cursor->next()) {
-            $return .= $this->highlighter->highlightToken(
-                $token->type(),
-                $token->value(),
-            );
-        }
-
-        return $this->highlighter->output($return);
-    }
-
-    /**
-     * Compress a query by collapsing white space and removing comments
-     *
-     * @param string $string The SQL string
-     *
-     * @return string The SQL string without comments
-     */
-    public function compress(string $string): string
-    {
-        $result = '';
-        $cursor = $this->tokenizer->tokenize($string);
-
-        $whitespace = true;
-        while ($token = $cursor->next()) {
-            // Skip comment tokens
-            if ($token->isOfType(Token::TOKEN_TYPE_COMMENT, Token::TOKEN_TYPE_BLOCK_COMMENT)) {
-                continue;
-            }
-
-            // Remove extra whitespace in reserved words (e.g "OUTER     JOIN" becomes "OUTER JOIN")
-
-            if (
-                $token->isOfType(
-                    Token::TOKEN_TYPE_RESERVED,
-                    Token::TOKEN_TYPE_RESERVED_NEWLINE,
-                    Token::TOKEN_TYPE_RESERVED_TOPLEVEL,
-                )
-            ) {
-                $newValue = preg_replace('/\s+/', ' ', $token->value());
-                assert($newValue !== null);
-                $token = $token->withValue($newValue);
-            }
-
-            if ($token->isOfType(Token::TOKEN_TYPE_WHITESPACE)) {
-                // If the last token was whitespace, don't add another one
-                if ($whitespace) {
-                    continue;
-                }
-
-                $whitespace = true;
-                // Convert all whitespace to a single space
-                $token = $token->withValue(' ');
-            } else {
-                $whitespace = false;
-            }
-
-            $result .= $token->value();
-        }
-
-        return rtrim($result);
-    }
-}
diff --git a/vendor/doctrine/sql-formatter/src/Token.php b/vendor/doctrine/sql-formatter/src/Token.php
deleted file mode 100644
index 0d13dc6..0000000
--- a/vendor/doctrine/sql-formatter/src/Token.php
+++ /dev/null
@@ -1,63 +0,0 @@
-value;
-    }
-
-    public function type(): int
-    {
-        return $this->type;
-    }
-
-    public function isOfType(int ...$types): bool
-    {
-        return in_array($this->type, $types, true);
-    }
-
-    public function hasExtraWhitespace(): bool
-    {
-        return str_contains($this->value(), ' ') ||
-            str_contains($this->value(), "\n") ||
-            str_contains($this->value(), "\t");
-    }
-
-    public function withValue(string $value): self
-    {
-        return new self($this->type(), $value);
-    }
-}
diff --git a/vendor/doctrine/sql-formatter/src/Tokenizer.php b/vendor/doctrine/sql-formatter/src/Tokenizer.php
deleted file mode 100644
index d0fdf74..0000000
--- a/vendor/doctrine/sql-formatter/src/Tokenizer.php
+++ /dev/null
@@ -1,1027 +0,0 @@
-
-     */
-    private array $reserved = [
-        'ACCESSIBLE',
-        'ACTION',
-        'ADD',
-        'AFTER',
-        'AGAINST',
-        'AGGREGATE',
-        'ALGORITHM',
-        'ALL',
-        'ALTER',
-        'ANALYSE',
-        'ANALYZE',
-        'AND',
-        'AS',
-        'ASC',
-        'AUTOCOMMIT',
-        'AUTO_INCREMENT',
-        'BACKUP',
-        'BEGIN',
-        'BETWEEN',
-        'BIGINT',
-        'BINARY',
-        'BINLOG',
-        'BLOB',
-        'BOTH',
-        'BY',
-        'CASCADE',
-        'CASE',
-        'CHANGE',
-        'CHANGED',
-        'CHAR',
-        'CHARACTER',
-        'CHARSET',
-        'CHECK',
-        'CHECKSUM',
-        'COLLATE',
-        'COLLATION',
-        'COLUMN',
-        'COLUMNS',
-        'COMMENT',
-        'COMMIT',
-        'COMMITTED',
-        'COMPRESSED',
-        'CONCURRENT',
-        'CONSTRAINT',
-        'CONTAINS',
-        'CONVERT',
-        'CREATE',
-        'CROSS',
-        'CURRENT',
-        'CURRENT_TIMESTAMP',
-        'DATABASE',
-        'DATABASES',
-        'DAY',
-        'DAY_HOUR',
-        'DAY_MINUTE',
-        'DAY_SECOND',
-        'DECIMAL',
-        'DEFAULT',
-        'DEFINER',
-        'DELAYED',
-        'DELETE',
-        'DESC',
-        'DESCRIBE',
-        'DETERMINISTIC',
-        'DISTINCT',
-        'DISTINCTROW',
-        'DIV',
-        'DO',
-        'DOUBLE',
-        'DROP',
-        'DUMPFILE',
-        'DUPLICATE',
-        'DYNAMIC',
-        'ELSE',
-        'ENCLOSED',
-        'END',
-        'ENGINE',
-        'ENGINES',
-        'ENGINE_TYPE',
-        'ESCAPE',
-        'ESCAPED',
-        'EVENTS',
-        'EXCEPT',
-        'EXCLUDE',
-        'EXEC',
-        'EXECUTE',
-        'EXISTS',
-        'EXPLAIN',
-        'EXTENDED',
-        'FALSE',
-        'FAST',
-        'FIELDS',
-        'FILE',
-        'FILTER',
-        'FIRST',
-        'FIXED',
-        'FLOAT',
-        'FLOAT4',
-        'FLOAT8',
-        'FLUSH',
-        'FOLLOWING',
-        'FOR',
-        'FORCE',
-        'FOREIGN',
-        'FROM',
-        'FULL',
-        'FULLTEXT',
-        'FUNCTION',
-        'GLOBAL',
-        'GRANT',
-        'GRANTS',
-        'GROUP',
-        'GROUPS',
-        'HAVING',
-        'HEAP',
-        'HIGH_PRIORITY',
-        'HOSTS',
-        'HOUR',
-        'HOUR_MINUTE',
-        'HOUR_SECOND',
-        'IDENTIFIED',
-        'IF',
-        'IFNULL',
-        'IGNORE',
-        'IN',
-        'INDEX',
-        'INDEXES',
-        'INFILE',
-        'INNER',
-        'INSERT',
-        'INSERT_ID',
-        'INSERT_METHOD',
-        'INT',
-        'INT1',
-        'INT2',
-        'INT3',
-        'INT4',
-        'INT8',
-        'INTEGER',
-        'INTERSECT',
-        'INTERVAL',
-        'INTO',
-        'INVOKER',
-        'IS',
-        'ISOLATION',
-        'JOIN',
-        'KEY',
-        'KEYS',
-        'KILL',
-        'LAST_INSERT_ID',
-        'LEADING',
-        'LEFT',
-        'LEVEL',
-        'LIKE',
-        'LIMIT',
-        'LINEAR',
-        'LINES',
-        'LOAD',
-        'LOCAL',
-        'LOCK',
-        'LOCKS',
-        'LOGS',
-        'LONG',
-        'LONGBLOB',
-        'LONGTEXT',
-        'LOW_PRIORITY',
-        'MARIA',
-        'MASTER',
-        'MASTER_CONNECT_RETRY',
-        'MASTER_HOST',
-        'MASTER_LOG_FILE',
-        'MATCH',
-        'MAX_CONNECTIONS_PER_HOUR',
-        'MAX_QUERIES_PER_HOUR',
-        'MAX_ROWS',
-        'MAX_UPDATES_PER_HOUR',
-        'MAX_USER_CONNECTIONS',
-        'MEDIUM',
-        'MEDIUMBLOB',
-        'MEDIUMINT',
-        'MEDIUMTEXT',
-        'MERGE',
-        'MINUTE',
-        'MINUTE_SECOND',
-        'MIN_ROWS',
-        'MODE',
-        'MODIFY',
-        'MONTH',
-        'MRG_MYISAM',
-        'MYISAM',
-        'NAMES',
-        'NATURAL',
-        'NOT',
-        'NULL',
-        'NUMERIC',
-        'OFFSET',
-        'ON',
-        'OPEN',
-        'OPTIMIZE',
-        'OPTION',
-        'OPTIONALLY',
-        'OR',
-        'ORDER',
-        'OUTER',
-        'OUTFILE',
-        'OVER',
-        'PACK_KEYS',
-        'PAGE',
-        'PARTIAL',
-        'PARTITION',
-        'PARTITIONS',
-        'PASSWORD',
-        'PRECEDING',
-        'PRIMARY',
-        'PRIVILEGES',
-        'PROCEDURE',
-        'PROCESS',
-        'PROCESSLIST',
-        'PURGE',
-        'QUICK',
-        'RAID0',
-        'RAID_CHUNKS',
-        'RAID_CHUNKSIZE',
-        'RAID_TYPE',
-        'RANGE',
-        'READ',
-        'READ_ONLY',
-        'READ_WRITE',
-        'REAL',
-        'RECURSIVE',
-        'REFERENCES',
-        'REGEXP',
-        'RELOAD',
-        'RENAME',
-        'REPAIR',
-        'REPEATABLE',
-        'REPLACE',
-        'REPLICATION',
-        'RESET',
-        'RESTORE',
-        'RESTRICT',
-        'RETURN',
-        'RETURNS',
-        'REVOKE',
-        'RIGHT',
-        'RLIKE',
-        'ROLLBACK',
-        'ROW',
-        'ROWS',
-        'ROW_FORMAT',
-        'SECOND',
-        'SECURITY',
-        'SELECT',
-        'SEPARATOR',
-        'SERIALIZABLE',
-        'SESSION',
-        'SET',
-        'SHARE',
-        'SHOW',
-        'SHUTDOWN',
-        'SLAVE',
-        'SMALLINT',
-        'SONAME',
-        'SOUNDS',
-        'SQL',
-        'SQL_AUTO_IS_NULL',
-        'SQL_BIG_RESULT',
-        'SQL_BIG_SELECTS',
-        'SQL_BIG_TABLES',
-        'SQL_BUFFER_RESULT',
-        'SQL_CACHE',
-        'SQL_CALC_FOUND_ROWS',
-        'SQL_LOG_BIN',
-        'SQL_LOG_OFF',
-        'SQL_LOG_UPDATE',
-        'SQL_LOW_PRIORITY_UPDATES',
-        'SQL_MAX_JOIN_SIZE',
-        'SQL_NO_CACHE',
-        'SQL_QUOTE_SHOW_CREATE',
-        'SQL_SAFE_UPDATES',
-        'SQL_SELECT_LIMIT',
-        'SQL_SLAVE_SKIP_COUNTER',
-        'SQL_SMALL_RESULT',
-        'SQL_WARNINGS',
-        'START',
-        'STARTING',
-        'STATUS',
-        'STOP',
-        'STORAGE',
-        'STRAIGHT_JOIN',
-        'STRING',
-        'STRIPED',
-        'SUPER',
-        'TABLE',
-        'TABLES',
-        'TEMPORARY',
-        'TERMINATED',
-        'THEN',
-        'TIES',
-        'TINYBLOB',
-        'TINYINT',
-        'TINYTEXT',
-        'TO',
-        'TRAILING',
-        'TRANSACTIONAL',
-        'TRUE',
-        'TRUNCATE',
-        'TYPE',
-        'TYPES',
-        'UNBOUNDED',
-        'UNCOMMITTED',
-        'UNION',
-        'UNIQUE',
-        'UNLOCK',
-        'UNSIGNED',
-        'UPDATE',
-        'USAGE',
-        'USE',
-        'USING',
-        'VALUES',
-        'VARBINARY',
-        'VARCHAR',
-        'VARCHARACTER',
-        'VARIABLES',
-        'VIEW',
-        'WHEN',
-        'WHERE',
-        'WINDOW',
-        'WITH',
-        'WORK',
-        'WRITE',
-        'XOR',
-        'YEAR_MONTH',
-    ];
-
-    /**
-     * For SQL formatting
-     * These keywords will all be on their own line
-     *
-     * @var list
-     */
-    private array $reservedToplevel = [
-        'ADD',
-        'ALTER TABLE',
-        'CHANGE',
-        'DELETE FROM',
-        'DROP',
-        'EXCEPT',
-        'FROM',
-        'GROUP BY',
-        'GROUPS',
-        'HAVING',
-        'INTERSECT',
-        'LIMIT',
-        'MODIFY',
-        'ORDER BY',
-        'PARTITION BY',
-        'RANGE',
-        'ROWS',
-        'SELECT',
-        'SET',
-        'UNION',
-        'UNION ALL',
-        'UPDATE',
-        'VALUES',
-        'WHERE',
-        'WINDOW',
-        'WITH',
-    ];
-
-    /** @var list */
-    private array $reservedNewline = [
-        'AND',
-        'EXCLUDE',
-        'INNER JOIN',
-        'JOIN',
-        'LEFT JOIN',
-        'LEFT OUTER JOIN',
-        'OR',
-        'OUTER JOIN',
-        'RIGHT JOIN',
-        'RIGHT OUTER JOIN',
-        'STRAIGHT_JOIN',
-        'XOR',
-    ];
-
-    /** @var list */
-    private array $functions = [
-        'ABS',
-        'ACOS',
-        'ADDDATE',
-        'ADDTIME',
-        'AES_DECRYPT',
-        'AES_ENCRYPT',
-        'APPROX_COUNT_DISTINCT',
-        'AREA',
-        'ASBINARY',
-        'ASCII',
-        'ASIN',
-        'ASTEXT',
-        'ATAN',
-        'ATAN2',
-        'AVG',
-        'BDMPOLYFROMTEXT',
-        'BDMPOLYFROMWKB',
-        'BDPOLYFROMTEXT',
-        'BDPOLYFROMWKB',
-        'BENCHMARK',
-        'BIN',
-        'BIT_AND',
-        'BIT_COUNT',
-        'BIT_LENGTH',
-        'BIT_OR',
-        'BIT_XOR',
-        'BOUNDARY',
-        'BUFFER',
-        'CAST',
-        'CEIL',
-        'CEILING',
-        'CENTROID',
-        'CHARACTER_LENGTH',
-        'CHAR_LENGTH',
-        'CHECKSUM_AGG',
-        'COALESCE',
-        'COERCIBILITY',
-        'COMPRESS',
-        'CONCAT',
-        'CONCAT_WS',
-        'CONNECTION_ID',
-        'CONV',
-        'CONVERT_TZ',
-        'CONVEXHULL',
-        'COS',
-        'COT',
-        'COUNT',
-        'COUNT_BIG',
-        'CRC32',
-        'CROSSES',
-        'CUME_DIST',
-        'CURDATE',
-        'CURRENT_DATE',
-        'CURRENT_TIME',
-        'CURRENT_USER',
-        'CURTIME',
-        'DATE',
-        'DATEDIFF',
-        'DATE_ADD',
-        'DATE_DIFF',
-        'DATE_FORMAT',
-        'DATE_SUB',
-        'DAYNAME',
-        'DAYOFMONTH',
-        'DAYOFWEEK',
-        'DAYOFYEAR',
-        'DECODE',
-        'DEGREES',
-        'DENSE_RANK',
-        'DES_DECRYPT',
-        'DES_ENCRYPT',
-        'DIFFERENCE',
-        'DIMENSION',
-        'DISJOINT',
-        'DISTANCE',
-        'ELT',
-        'ENCODE',
-        'ENCRYPT',
-        'ENDPOINT',
-        'ENVELOPE',
-        'EQUALS',
-        'EXP',
-        'EXPORT_SET',
-        'EXTERIORRING',
-        'EXTRACT',
-        'EXTRACTVALUE',
-        'FIELD',
-        'FIND_IN_SET',
-        'FIRST_VALUE',
-        'FLOOR',
-        'FORMAT',
-        'FOUND_ROWS',
-        'FROM_DAYS',
-        'FROM_UNIXTIME',
-        'GEOMCOLLFROMTEXT',
-        'GEOMCOLLFROMWKB',
-        'GEOMETRYCOLLECTION',
-        'GEOMETRYCOLLECTIONFROMTEXT',
-        'GEOMETRYCOLLECTIONFROMWKB',
-        'GEOMETRYFROMTEXT',
-        'GEOMETRYFROMWKB',
-        'GEOMETRYN',
-        'GEOMETRYTYPE',
-        'GEOMFROMTEXT',
-        'GEOMFROMWKB',
-        'GET_FORMAT',
-        'GET_LOCK',
-        'GLENGTH',
-        'GREATEST',
-        'GROUPING',
-        'GROUPING_ID',
-        'GROUP_CONCAT',
-        'GROUP_UNIQUE_USERS',
-        'HEX',
-        'INET_ATON',
-        'INET_NTOA',
-        'INSTR',
-        'INTERIORRINGN',
-        'INTERSECTION',
-        'INTERSECTS',
-        'ISCLOSED',
-        'ISEMPTY',
-        'ISNULL',
-        'ISRING',
-        'ISSIMPLE',
-        'IS_FREE_LOCK',
-        'IS_USED_LOCK',
-        'LAG',
-        'LAST_DAY',
-        'LAST_VALUE',
-        'LCASE',
-        'LEAD',
-        'LEAST',
-        'LENGTH',
-        'LINEFROMTEXT',
-        'LINEFROMWKB',
-        'LINESTRING',
-        'LINESTRINGFROMTEXT',
-        'LINESTRINGFROMWKB',
-        'LISTAGG',
-        'LN',
-        'LOAD_FILE',
-        'LOCALTIME',
-        'LOCALTIMESTAMP',
-        'LOCATE',
-        'LOG',
-        'LOG10',
-        'LOG2',
-        'LOWER',
-        'LPAD',
-        'LTRIM',
-        'MAKEDATE',
-        'MAKETIME',
-        'MAKE_SET',
-        'MASTER_POS_WAIT',
-        'MAX',
-        'MBRCONTAINS',
-        'MBRDISJOINT',
-        'MBREQUAL',
-        'MBRINTERSECTS',
-        'MBROVERLAPS',
-        'MBRTOUCHES',
-        'MBRWITHIN',
-        'MD5',
-        'MICROSECOND',
-        'MID',
-        'MIN',
-        'MLINEFROMTEXT',
-        'MLINEFROMWKB',
-        'MOD',
-        'MONTHNAME',
-        'MPOINTFROMTEXT',
-        'MPOINTFROMWKB',
-        'MPOLYFROMTEXT',
-        'MPOLYFROMWKB',
-        'MULTILINESTRING',
-        'MULTILINESTRINGFROMTEXT',
-        'MULTILINESTRINGFROMWKB',
-        'MULTIPOINT',
-        'MULTIPOINTFROMTEXT',
-        'MULTIPOINTFROMWKB',
-        'MULTIPOLYGON',
-        'MULTIPOLYGONFROMTEXT',
-        'MULTIPOLYGONFROMWKB',
-        'NAME_CONST',
-        'NOW',
-        'NTH_VALUE',
-        'NTILE',
-        'NULLIF',
-        'NUMGEOMETRIES',
-        'NUMINTERIORRINGS',
-        'NUMPOINTS',
-        'OCT',
-        'OCTET_LENGTH',
-        'OLD_PASSWORD',
-        'ORD',
-        'OVERLAPS',
-        'PERCENTILE_CONT',
-        'PERCENTILE_DISC',
-        'PERCENT_RANK',
-        'PERIOD_ADD',
-        'PERIOD_DIFF',
-        'PI',
-        'POINT',
-        'POINTFROMTEXT',
-        'POINTFROMWKB',
-        'POINTN',
-        'POINTONSURFACE',
-        'POLYFROMTEXT',
-        'POLYFROMWKB',
-        'POLYGON',
-        'POLYGONFROMTEXT',
-        'POLYGONFROMWKB',
-        'POSITION',
-        'POW',
-        'POWER',
-        'QUARTER',
-        'QUOTE',
-        'RADIANS',
-        'RAND',
-        'RANK',
-        'RELATED',
-        'RELEASE_LOCK',
-        'REPEAT',
-        'REVERSE',
-        'ROUND',
-        'ROW_COUNT',
-        'ROW_NUMBER',
-        'RPAD',
-        'RTRIM',
-        'SCHEMA',
-        'SEC_TO_TIME',
-        'SESSION_USER',
-        'SHA',
-        'SHA1',
-        'SIGN',
-        'SIN',
-        'SLEEP',
-        'SOUNDEX',
-        'SPACE',
-        'SQRT',
-        'SRID',
-        'STARTPOINT',
-        'STD',
-        'STDDEV',
-        'STDDEV_POP',
-        'STDDEV_SAMP',
-        'STDEV',
-        'STDEVP',
-        'STRCMP',
-        'STRING_AGG',
-        'STR_TO_DATE',
-        'SUBDATE',
-        'SUBSTR',
-        'SUBSTRING',
-        'SUBSTRING_INDEX',
-        'SUBTIME',
-        'SUM',
-        'SYMDIFFERENCE',
-        'SYSDATE',
-        'SYSTEM_USER',
-        'TAN',
-        'TIME',
-        'TIMEDIFF',
-        'TIMESTAMP',
-        'TIMESTAMPADD',
-        'TIMESTAMPDIFF',
-        'TIME_FORMAT',
-        'TIME_TO_SEC',
-        'TOUCHES',
-        'TO_DAYS',
-        'TRIM',
-        'UCASE',
-        'UNCOMPRESS',
-        'UNCOMPRESSED_LENGTH',
-        'UNHEX',
-        'UNIQUE_USERS',
-        'UNIX_TIMESTAMP',
-        'UPDATEXML',
-        'UPPER',
-        'USER',
-        'UTC_DATE',
-        'UTC_TIME',
-        'UTC_TIMESTAMP',
-        'UUID',
-        'VAR',
-        'VARIANCE',
-        'VARP',
-        'VAR_POP',
-        'VAR_SAMP',
-        'VERSION',
-        'WEEK',
-        'WEEKDAY',
-        'WEEKOFYEAR',
-        'WITHIN',
-        'X',
-        'Y',
-        'YEAR',
-        'YEARWEEK',
-    ];
-
-    // Regular expressions for tokenizing
-
-    private readonly string $regexBoundaries;
-    private readonly string $regexReserved;
-    private readonly string $regexReservedNewline;
-    private readonly string $regexReservedToplevel;
-    private readonly string $regexFunction;
-
-    /**
-     * Punctuation that can be used as a boundary between other tokens
-     *
-     * @var list
-     */
-    private array $boundaries = [
-        ',',
-        ';',
-        '::', // PostgreSQL cast operator
-        ':',
-        ')',
-        '(',
-        '.',
-        '=',
-        '<',
-        '>',
-        '+',
-        '-',
-        '*',
-        '/',
-        '!',
-        '^',
-        '%',
-        '|',
-        '&',
-        '#',
-    ];
-
-    /**
-     * Stuff that only needs to be done once. Builds regular expressions and
-     * sorts the reserved words.
-     */
-    public function __construct()
-    {
-        // Sort list from longest word to shortest, 3x faster than usort
-        $sortByLengthFx = static function ($values) {
-            $valuesMap = array_combine($values, array_map(strlen(...), $values));
-            assert($valuesMap !== false);
-            arsort($valuesMap);
-
-            return array_keys($valuesMap);
-        };
-
-        // Set up regular expressions
-        $this->regexBoundaries       = '(' . implode(
-            '|',
-            $this->quoteRegex($this->boundaries),
-        ) . ')';
-        $this->regexReserved         = '(' . implode(
-            '|',
-            $this->quoteRegex($sortByLengthFx($this->reserved)),
-        ) . ')';
-        $this->regexReservedToplevel = str_replace(' ', '\\s+', '(' . implode(
-            '|',
-            $this->quoteRegex($sortByLengthFx($this->reservedToplevel)),
-        ) . ')');
-        $this->regexReservedNewline  = str_replace(' ', '\\s+', '(' . implode(
-            '|',
-            $this->quoteRegex($sortByLengthFx($this->reservedNewline)),
-        ) . ')');
-
-        $this->regexFunction = '(' . implode('|', $this->quoteRegex($sortByLengthFx($this->functions))) . ')';
-    }
-
-    /**
-     * Takes a SQL string and breaks it into tokens.
-     * Each token is an associative array with type and value.
-     *
-     * @param string $string The SQL string
-     */
-    public function tokenize(string $string): Cursor
-    {
-        $tokens = [];
-
-        // Used to make sure the string keeps shrinking on each iteration
-        $oldStringLen = strlen($string) + 1;
-
-        $token = null;
-
-        $currentLength = strlen($string);
-
-        // Keep processing the string until it is empty
-        while ($currentLength) {
-            // If the string stopped shrinking, there was a problem
-            if ($oldStringLen <= $currentLength) {
-                $tokens[] = new Token(Token::TOKEN_TYPE_ERROR, $string);
-
-                return new Cursor($tokens);
-            }
-
-            $oldStringLen =  $currentLength;
-
-            // Get the next token and the token type
-            $token       = $this->createNextToken($string, $token);
-            $tokenLength = strlen($token->value());
-
-            $tokens[] = $token;
-
-            // Advance the string
-            $string = substr($string, $tokenLength);
-
-            $currentLength -= $tokenLength;
-        }
-
-        return new Cursor($tokens);
-    }
-
-    /**
-     * Return the next token and token type in a SQL string.
-     * Quoted strings, comments, reserved words, whitespace, and punctuation
-     * are all their own tokens.
-     *
-     * @param string     $string   The SQL string
-     * @param Token|null $previous The result of the previous createNextToken() call
-     *
-     * @return Token An associative array containing the type and value of the token.
-     */
-    private function createNextToken(string $string, Token|null $previous = null): Token
-    {
-        $matches = [];
-        // Whitespace
-        if (preg_match('/^\s+/', $string, $matches)) {
-            return new Token(Token::TOKEN_TYPE_WHITESPACE, $matches[0]);
-        }
-
-        // Comment
-        if (
-            $string[0] === '#' ||
-            (isset($string[1]) && ($string[0] === '-' && $string[1] === '-') ||
-            (isset($string[1]) && $string[0] === '/' && $string[1] === '*'))
-        ) {
-            // Comment until end of line
-            if ($string[0] === '-' || $string[0] === '#') {
-                $last = strpos($string, "\n");
-                $type = Token::TOKEN_TYPE_COMMENT;
-            } else { // Comment until closing comment tag
-                $pos  = strpos($string, '*/', 2);
-                $last = $pos !== false
-                    ? $pos + 2
-                    : false;
-                $type = Token::TOKEN_TYPE_BLOCK_COMMENT;
-            }
-
-            if ($last === false) {
-                $last = strlen($string);
-            }
-
-            return new Token($type, substr($string, 0, $last));
-        }
-
-        // Quoted String
-        if ($string[0] === '"' || $string[0] === '\'' || $string[0] === '`' || $string[0] === '[') {
-            return new Token(
-                ($string[0] === '`' || $string[0] === '['
-                    ? Token::TOKEN_TYPE_BACKTICK_QUOTE
-                    : Token::TOKEN_TYPE_QUOTE),
-                $this->getQuotedString($string),
-            );
-        }
-
-        // User-defined Variable
-        if (($string[0] === '@' || $string[0] === ':') && isset($string[1])) {
-            $value = null;
-            $type  = Token::TOKEN_TYPE_VARIABLE;
-
-            // If the variable name is quoted
-            if ($string[1] === '"' || $string[1] === '\'' || $string[1] === '`') {
-                $value = $string[0] . $this->getQuotedString(substr($string, 1));
-            } else {
-                // Non-quoted variable name
-                preg_match('/^(' . $string[0] . '[a-zA-Z0-9\._\$]+)/', $string, $matches);
-                if ($matches) {
-                    $value = $matches[1];
-                }
-            }
-
-            if ($value !== null) {
-                return new Token($type, $value);
-            }
-        }
-
-        // Number (decimal, binary, or hex)
-        if (
-            preg_match(
-                '/^([0-9]+(\.[0-9]+)?|0x[0-9a-fA-F]+|0b[01]+)($|\s|"\'`|' . $this->regexBoundaries . ')/',
-                $string,
-                $matches,
-            )
-        ) {
-            return new Token(Token::TOKEN_TYPE_NUMBER, $matches[1]);
-        }
-
-        // Boundary Character (punctuation and symbols)
-        if (preg_match('/^(' . $this->regexBoundaries . ')/', $string, $matches)) {
-            return new Token(Token::TOKEN_TYPE_BOUNDARY, $matches[1]);
-        }
-
-        // A reserved word cannot be preceded by a '.'
-        // this makes it so in "mytable.from", "from" is not considered a reserved word
-        if (! $previous || $previous->value() !== '.') {
-            $upper = strtoupper($string);
-            // Top Level Reserved Word
-            if (
-                preg_match(
-                    '/^(' . $this->regexReservedToplevel . ')($|\s|' . $this->regexBoundaries . ')/',
-                    $upper,
-                    $matches,
-                )
-            ) {
-                return new Token(
-                    Token::TOKEN_TYPE_RESERVED_TOPLEVEL,
-                    substr($string, 0, strlen($matches[1])),
-                );
-            }
-
-            // Newline Reserved Word
-            if (
-                preg_match(
-                    '/^(' . $this->regexReservedNewline . ')($|\s|' . $this->regexBoundaries . ')/',
-                    $upper,
-                    $matches,
-                )
-            ) {
-                return new Token(
-                    Token::TOKEN_TYPE_RESERVED_NEWLINE,
-                    substr($string, 0, strlen($matches[1])),
-                );
-            }
-
-            // Other Reserved Word
-            if (
-                preg_match(
-                    '/^(' . $this->regexReserved . ')($|\s|' . $this->regexBoundaries . ')/',
-                    $upper,
-                    $matches,
-                )
-            ) {
-                return new Token(
-                    Token::TOKEN_TYPE_RESERVED,
-                    substr($string, 0, strlen($matches[1])),
-                );
-            }
-        }
-
-        // A function must be succeeded by '('
-        // this makes it so "count(" is considered a function, but "count" alone is not
-        $upper = strtoupper($string);
-        // function
-        if (preg_match('/^(' . $this->regexFunction . '[(]|\s|[)])/', $upper, $matches)) {
-            return new Token(
-                Token::TOKEN_TYPE_RESERVED,
-                substr($string, 0, strlen($matches[1]) - 1),
-            );
-        }
-
-        // Non reserved word
-        preg_match('/^(.*?)($|\s|["\'`]|' . $this->regexBoundaries . ')/', $string, $matches);
-
-        return new Token(Token::TOKEN_TYPE_WORD, $matches[1]);
-    }
-
-    /**
-     * Helper function for building regular expressions for reserved words and boundary characters
-     *
-     * @param string[] $strings The strings to be quoted
-     *
-     * @return string[] The quoted strings
-     */
-    private function quoteRegex(array $strings): array
-    {
-        return array_map(
-            static fn (string $string): string => preg_quote($string, '/'),
-            $strings,
-        );
-    }
-
-    private function getQuotedString(string $string): string
-    {
-        $ret = '';
-
-        // This checks for the following patterns:
-        // 1. backtick quoted string using `` to escape
-        // 2. square bracket quoted string (SQL Server) using ]] to escape
-        // 3. double quoted string using "" or \" to escape
-        // 4. single quoted string using '' or \' to escape
-        if (
-            preg_match(
-                '/^(((`[^`]*($|`))+)|
-            ((\[[^\]]*($|\]))(\][^\]]*($|\]))*)|
-            (("[^"\\\\]*(?:\\\\.[^"\\\\]*)*("|$))+)|
-            ((\'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*(\'|$))+))/sx',
-                $string,
-                $matches,
-            )
-        ) {
-            $ret = $matches[1];
-        }
-
-        return $ret;
-    }
-}
diff --git a/vendor/egulias/email-validator/CHANGELOG.md b/vendor/egulias/email-validator/CHANGELOG.md
deleted file mode 100644
index 39f5a8a..0000000
--- a/vendor/egulias/email-validator/CHANGELOG.md
+++ /dev/null
@@ -1,32 +0,0 @@
-# EmailValidator Changelog
-
-## New Features
-
-* Access to local part and domain part from EmailParser
-* Validations outside of the scope of the RFC will be considered "extra" validations, thus opening the door for adding new; will live in their own folder "extra" (as requested in #248, #195, #183). 
-
-## Breaking changes
-
-* PHP version upgraded to match Symfony's (as of 12/2020).
-* DNSCheckValidation now fails for missing MX records. While the RFC argues that the existence of only A records to be valid, starting in v3 they will be considered invalid.
-* Emails domain part are now intenteded to be RFC 1035 compliant, rendering previous valid emails (e.g example@examp&) invalid.
-
-## PHP versions upgrade policy
-PHP version upgrade requirement will happen via MINOR (3.x) version upgrades of the library, following the adoption level by major frameworks.
-
-## Changes
-* #235
-* #215
-* #130
-* #258
-* #188
-* #181
-* #217
-* #214
-* #249
-* #236
-* #257
-* #210
-
-## Thanks
-To contributors, be it with PRs, reporting issues or supporting otherwise.
diff --git a/vendor/egulias/email-validator/CONTRIBUTING.md b/vendor/egulias/email-validator/CONTRIBUTING.md
deleted file mode 100644
index 907bc2c..0000000
--- a/vendor/egulias/email-validator/CONTRIBUTING.md
+++ /dev/null
@@ -1,153 +0,0 @@
-# Contributing
-
-When contributing to this repository make sure to follow the Pull request process below.
-Reduce to the minimum 3rd party dependencies.
-
-Please note we have a [code of conduct](#Code of Conduct), please follow it in all your interactions with the project.
-
-## Pull Request Process
-
-When doing a PR to v2 remember that you also have to do the PR port to v3, or tests confirming the bug is not reproducible.
-
-1. Supported version is v3. If you are fixing a bug in v2, please port to v3
-2. Use the title as a brief description of the changes
-3. Describe the changes you are proposing
-    1. If adding an extra validation state the benefits of adding it and the problem is solving
-    2. Document in the readme, by adding it to the list
-4. Provide appropriate tests for the code you are submitting: aim to keep the existing coverage percentage.
-5. Add your Twitter handle (if you have) so we can thank you there.
-
-## License
-By contributing, you agree that your contributions will be licensed under its MIT License.
-
-## Code of Conduct
-
-### Our Pledge
-
-We as members, contributors, and leaders pledge to make participation in our
-community a harassment-free experience for everyone, regardless of age, body
-size, visible or invisible disability, ethnicity, sex characteristics, gender
-identity and expression, level of experience, education, socio-economic status,
-nationality, personal appearance, race, religion, or sexual identity
-and orientation.
-
-We pledge to act and interact in ways that contribute to an open, welcoming,
-diverse, inclusive, and healthy community.
-
-### Our Standards
-
-Examples of behavior that contributes to a positive environment for our
-community include:
-
-* Demonstrating empathy and kindness toward other people
-* Being respectful of differing opinions, viewpoints, and experiences
-* Giving and gracefully accepting constructive feedback
-* Accepting responsibility and apologizing to those affected by our mistakes,
-  and learning from the experience
-* Focusing on what is best not just for us as individuals, but for the
-  overall community
-
-Examples of unacceptable behavior include:
-
-* The use of sexualized language or imagery, and sexual attention or
-  advances of any kind
-* Trolling, insulting or derogatory comments, and personal or political attacks
-* Public or private harassment
-* Publishing others' private information, such as a physical or email
-  address, without their explicit permission
-* Other conduct which could reasonably be considered inappropriate in a
-  professional setting
-
-### Enforcement Responsibilities
-
-Community leaders are responsible for clarifying and enforcing our standards of
-acceptable behavior and will take appropriate and fair corrective action in
-response to any behavior that they deem inappropriate, threatening, offensive,
-or harmful.
-
-Community leaders have the right and responsibility to remove, edit, or reject
-comments, commits, code, wiki edits, issues, and other contributions that are
-not aligned to this Code of Conduct, and will communicate reasons for moderation
-decisions when appropriate.
-
-### Scope
-
-This Code of Conduct applies within all community spaces, and also applies when
-an individual is officially representing the community in public spaces.
-Examples of representing our community include using an official e-mail address,
-posting via an official social media account, or acting as an appointed
-representative at an online or offline event.
-
-### Enforcement
-
-Instances of abusive, harassing, or otherwise unacceptable behavior may be
-reported to the community leaders responsible for enforcement at .
-All complaints will be reviewed and investigated promptly and fairly.
-
-All community leaders are obligated to respect the privacy and security of the
-reporter of any incident.
-
-#### Enforcement Guidelines
-
-Community leaders will follow these Community Impact Guidelines in determining
-the consequences for any action they deem in violation of this Code of Conduct:
-
-#### 1. Correction
-
-**Community Impact**: Use of inappropriate language or other behavior deemed
-unprofessional or unwelcome in the community.
-
-**Consequence**: A private, written warning from community leaders, providing
-clarity around the nature of the violation and an explanation of why the
-behavior was inappropriate. A public apology may be requested.
-
-#### 2. Warning
-
-**Community Impact**: A violation through a single incident or series
-of actions.
-
-**Consequence**: A warning with consequences for continued behavior. No
-interaction with the people involved, including unsolicited interaction with
-those enforcing the Code of Conduct, for a specified period of time. This
-includes avoiding interactions in community spaces as well as external channels
-like social media. Violating these terms may lead to a temporary or
-permanent ban.
-
-#### 3. Temporary Ban
-
-**Community Impact**: A serious violation of community standards, including
-sustained inappropriate behavior.
-
-**Consequence**: A temporary ban from any sort of interaction or public
-communication with the community for a specified period of time. No public or
-private interaction with the people involved, including unsolicited interaction
-with those enforcing the Code of Conduct, is allowed during this period.
-Violating these terms may lead to a permanent ban.
-
-#### 4. Permanent Ban
-
-**Community Impact**: Demonstrating a pattern of violation of community
-standards, including sustained inappropriate behavior,  harassment of an
-individual, or aggression toward or disparagement of classes of individuals.
-
-**Consequence**: A permanent ban from any sort of public interaction within
-the community.
-
-### Attribution
-
-This Code of Conduct is adapted from the [Contributor Covenant][homepage],
-version 2.0, available at
-[https://www.contributor-covenant.org/version/2/0/code_of_conduct.html][v2.0].
-
-Community Impact Guidelines were inspired by
-[Mozilla's code of conduct enforcement ladder][Mozilla CoC].
-
-For answers to common questions about this code of conduct, see the FAQ at
-[https://www.contributor-covenant.org/faq][FAQ]. Translations are available
-at [https://www.contributor-covenant.org/translations][translations].
-
-[homepage]: https://www.contributor-covenant.org
-[v2.0]: https://www.contributor-covenant.org/version/2/0/code_of_conduct.html
-[Mozilla CoC]: https://github.com/mozilla/diversity
-[FAQ]: https://www.contributor-covenant.org/faq
-[translations]: https://www.contributor-covenant.org/translations
diff --git a/vendor/egulias/email-validator/composer.json b/vendor/egulias/email-validator/composer.json
deleted file mode 100644
index bf1b3f4..0000000
--- a/vendor/egulias/email-validator/composer.json
+++ /dev/null
@@ -1,37 +0,0 @@
-{
-  "name":        "egulias/email-validator",
-  "description": "A library for validating emails against several RFCs",
-  "homepage":    "https://github.com/egulias/EmailValidator",
-  "keywords":    ["email", "validation", "validator", "emailvalidation", "emailvalidator"],
-  "license":     "MIT",
-  "authors": [
-    {"name": "Eduardo Gulias Davis"}
-  ],
-  "extra": {
-    "branch-alias": {
-      "dev-master": "4.0.x-dev"
-    }
-  },
-  "require": {
-    "php": ">=8.1",
-    "doctrine/lexer": "^2.0 || ^3.0",
-    "symfony/polyfill-intl-idn": "^1.26"
-  },
-  "require-dev": {
-    "phpunit/phpunit": "^10.2",
-    "vimeo/psalm": "^5.12"
-  },
-  "suggest": {
-    "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation"
-  },
-  "autoload": {
-    "psr-4": {
-      "Egulias\\EmailValidator\\": "src"
-    }
-  },
-  "autoload-dev": {
-    "psr-4": {
-      "Egulias\\EmailValidator\\Tests\\": "tests"
-    }
-  }
-}
diff --git a/vendor/egulias/email-validator/src/EmailLexer.php b/vendor/egulias/email-validator/src/EmailLexer.php
deleted file mode 100644
index 969c049..0000000
--- a/vendor/egulias/email-validator/src/EmailLexer.php
+++ /dev/null
@@ -1,330 +0,0 @@
- */
-class EmailLexer extends AbstractLexer
-{
-    //ASCII values
-    public const S_EMPTY            = -1;
-    public const C_NUL              = 0;
-    public const S_HTAB             = 9;
-    public const S_LF               = 10;
-    public const S_CR               = 13;
-    public const S_SP               = 32;
-    public const EXCLAMATION        = 33;
-    public const S_DQUOTE           = 34;
-    public const NUMBER_SIGN        = 35;
-    public const DOLLAR             = 36;
-    public const PERCENTAGE         = 37;
-    public const AMPERSAND          = 38;
-    public const S_SQUOTE           = 39;
-    public const S_OPENPARENTHESIS  = 40;
-    public const S_CLOSEPARENTHESIS = 41;
-    public const ASTERISK           = 42;
-    public const S_PLUS             = 43;
-    public const S_COMMA            = 44;
-    public const S_HYPHEN           = 45;
-    public const S_DOT              = 46;
-    public const S_SLASH            = 47;
-    public const S_COLON            = 58;
-    public const S_SEMICOLON        = 59;
-    public const S_LOWERTHAN        = 60;
-    public const S_EQUAL            = 61;
-    public const S_GREATERTHAN      = 62;
-    public const QUESTIONMARK       = 63;
-    public const S_AT               = 64;
-    public const S_OPENBRACKET      = 91;
-    public const S_BACKSLASH        = 92;
-    public const S_CLOSEBRACKET     = 93;
-    public const CARET              = 94;
-    public const S_UNDERSCORE       = 95;
-    public const S_BACKTICK         = 96;
-    public const S_OPENCURLYBRACES  = 123;
-    public const S_PIPE             = 124;
-    public const S_CLOSECURLYBRACES = 125;
-    public const S_TILDE            = 126;
-    public const C_DEL              = 127;
-    public const INVERT_QUESTIONMARK = 168;
-    public const INVERT_EXCLAMATION = 173;
-    public const GENERIC            = 300;
-    public const S_IPV6TAG          = 301;
-    public const INVALID            = 302;
-    public const CRLF               = 1310;
-    public const S_DOUBLECOLON      = 5858;
-    public const ASCII_INVALID_FROM = 127;
-    public const ASCII_INVALID_TO   = 199;
-
-    /**
-     * US-ASCII visible characters not valid for atext (@link http://tools.ietf.org/html/rfc5322#section-3.2.3)
-     *
-     * @var array
-     */
-    protected $charValue = [
-        '{'    => self::S_OPENCURLYBRACES,
-        '}'    => self::S_CLOSECURLYBRACES,
-        '('    => self::S_OPENPARENTHESIS,
-        ')'    => self::S_CLOSEPARENTHESIS,
-        '<'    => self::S_LOWERTHAN,
-        '>'    => self::S_GREATERTHAN,
-        '['    => self::S_OPENBRACKET,
-        ']'    => self::S_CLOSEBRACKET,
-        ':'    => self::S_COLON,
-        ';'    => self::S_SEMICOLON,
-        '@'    => self::S_AT,
-        '\\'   => self::S_BACKSLASH,
-        '/'    => self::S_SLASH,
-        ','    => self::S_COMMA,
-        '.'    => self::S_DOT,
-        "'"    => self::S_SQUOTE,
-        "`"    => self::S_BACKTICK,
-        '"'    => self::S_DQUOTE,
-        '-'    => self::S_HYPHEN,
-        '::'   => self::S_DOUBLECOLON,
-        ' '    => self::S_SP,
-        "\t"   => self::S_HTAB,
-        "\r"   => self::S_CR,
-        "\n"   => self::S_LF,
-        "\r\n" => self::CRLF,
-        'IPv6' => self::S_IPV6TAG,
-        ''     => self::S_EMPTY,
-        '\0'   => self::C_NUL,
-        '*'    => self::ASTERISK,
-        '!'    => self::EXCLAMATION,
-        '&'    => self::AMPERSAND,
-        '^'    => self::CARET,
-        '$'    => self::DOLLAR,
-        '%'    => self::PERCENTAGE,
-        '~'    => self::S_TILDE,
-        '|'    => self::S_PIPE,
-        '_'    => self::S_UNDERSCORE,
-        '='    => self::S_EQUAL,
-        '+'    => self::S_PLUS,
-        '¿'    => self::INVERT_QUESTIONMARK,
-        '?'    => self::QUESTIONMARK,
-        '#'    => self::NUMBER_SIGN,
-        '¡'    => self::INVERT_EXCLAMATION,
-    ];
-
-    public const INVALID_CHARS_REGEX = "/[^\p{S}\p{C}\p{Cc}]+/iu";
-
-    public const VALID_UTF8_REGEX = '/\p{Cc}+/u';
-
-    public const CATCHABLE_PATTERNS = [
-        '[a-zA-Z]+[46]?', //ASCII and domain literal
-        '[^\x00-\x7F]',  //UTF-8
-        '[0-9]+',
-        '\r\n',
-        '::',
-        '\s+?',
-        '.',
-    ];
-
-    public const NON_CATCHABLE_PATTERNS = [
-        '[\xA0-\xff]+',
-    ];
-
-    public const MODIFIERS = 'iu';
-
-    /** @var bool */
-    protected $hasInvalidTokens = false;
-
-    /**
-     * @var Token
-     */
-    protected Token $previous;
-
-    /**
-     * The last matched/seen token.
-     *
-     * @var Token
-     */
-    public Token $current;
-
-    /**
-     * @var Token
-     */
-    private Token $nullToken;
-
-    /** @var string */
-    private $accumulator = '';
-
-    /** @var bool */
-    private $hasToRecord = false;
-
-    public function __construct()
-    {
-        /** @var Token $nullToken */
-        $nullToken = new Token('', self::S_EMPTY, 0);
-        $this->nullToken = $nullToken;
-
-        $this->current = $this->previous = $this->nullToken;
-        $this->lookahead = null;
-    }
-
-    public function reset(): void
-    {
-        $this->hasInvalidTokens = false;
-        parent::reset();
-        $this->current = $this->previous = $this->nullToken;
-    }
-
-    /**
-     * @param int $type
-     * @throws \UnexpectedValueException
-     * @return boolean
-     *
-     * @psalm-suppress InvalidScalarArgument
-     */
-    public function find($type): bool
-    {
-        $search = clone $this;
-        $search->skipUntil($type);
-
-        if (!$search->lookahead) {
-            throw new \UnexpectedValueException($type . ' not found');
-        }
-        return true;
-    }
-
-    /**
-     * moveNext
-     *
-     * @return boolean
-     */
-    public function moveNext(): bool
-    {
-        if ($this->hasToRecord && $this->previous === $this->nullToken) {
-            $this->accumulator .= $this->current->value;
-        }
-
-        $this->previous = $this->current;
-
-        if ($this->lookahead === null) {
-            $this->lookahead = $this->nullToken;
-        }
-
-        $hasNext = parent::moveNext();
-        $this->current = $this->token ?? $this->nullToken;
-
-        if ($this->hasToRecord) {
-            $this->accumulator .= $this->current->value;
-        }
-
-        return $hasNext;
-    }
-
-    /**
-     * Retrieve token type. Also processes the token value if necessary.
-     *
-     * @param string $value
-     * @throws \InvalidArgumentException
-     * @return integer
-     */
-    protected function getType(&$value): int
-    {
-        $encoded = $value;
-
-        if (mb_detect_encoding($value, 'auto', true) !== 'UTF-8') {
-            $encoded = mb_convert_encoding($value, 'UTF-8', 'Windows-1252');
-        }
-
-        if ($this->isValid($encoded)) {
-            return $this->charValue[$encoded];
-        }
-
-        if ($this->isNullType($encoded)) {
-            return self::C_NUL;
-        }
-
-        if ($this->isInvalidChar($encoded)) {
-            $this->hasInvalidTokens = true;
-            return self::INVALID;
-        }
-
-        return self::GENERIC;
-    }
-
-    protected function isValid(string $value): bool
-    {
-        return isset($this->charValue[$value]);
-    }
-
-    protected function isNullType(string $value): bool
-    {
-        return $value === "\0";
-    }
-
-    protected function isInvalidChar(string $value): bool
-    {
-        return !preg_match(self::INVALID_CHARS_REGEX, $value);
-    }
-
-    protected function isUTF8Invalid(string $value): bool
-    {
-        return preg_match(self::VALID_UTF8_REGEX, $value) !== false;
-    }
-
-    public function hasInvalidTokens(): bool
-    {
-        return $this->hasInvalidTokens;
-    }
-
-    /**
-     * getPrevious
-     *
-     * @return Token
-     */
-    public function getPrevious(): Token
-    {
-        return $this->previous;
-    }
-
-    /**
-     * Lexical catchable patterns.
-     *
-     * @return string[]
-     */
-    protected function getCatchablePatterns(): array
-    {
-        return self::CATCHABLE_PATTERNS;
-    }
-
-    /**
-     * Lexical non-catchable patterns.
-     *
-     * @return string[]
-     */
-    protected function getNonCatchablePatterns(): array
-    {
-        return self::NON_CATCHABLE_PATTERNS;
-    }
-
-    protected function getModifiers(): string
-    {
-        return self::MODIFIERS;
-    }
-
-    public function getAccumulatedValues(): string
-    {
-        return $this->accumulator;
-    }
-
-    public function startRecording(): void
-    {
-        $this->hasToRecord = true;
-    }
-
-    public function stopRecording(): void
-    {
-        $this->hasToRecord = false;
-    }
-
-    public function clearRecorded(): void
-    {
-        $this->accumulator = '';
-    }
-}
diff --git a/vendor/egulias/email-validator/src/EmailParser.php b/vendor/egulias/email-validator/src/EmailParser.php
deleted file mode 100644
index fc449c7..0000000
--- a/vendor/egulias/email-validator/src/EmailParser.php
+++ /dev/null
@@ -1,90 +0,0 @@
-addLongEmailWarning($this->localPart, $this->domainPart);
-
-        return $result;
-    }
-
-    protected function preLeftParsing(): Result
-    {
-        if (!$this->hasAtToken()) {
-            return new InvalidEmail(new NoLocalPart(), $this->lexer->current->value);
-        }
-        return new ValidEmail();
-    }
-
-    protected function parseLeftFromAt(): Result
-    {
-        return $this->processLocalPart();
-    }
-
-    protected function parseRightFromAt(): Result
-    {
-        return $this->processDomainPart();
-    }
-
-    private function processLocalPart(): Result
-    {
-        $localPartParser = new LocalPart($this->lexer);
-        $localPartResult = $localPartParser->parse();
-        $this->localPart = $localPartParser->localPart();
-        $this->warnings = [...$localPartParser->getWarnings(), ...$this->warnings];
-
-        return $localPartResult;
-    }
-
-    private function processDomainPart(): Result
-    {
-        $domainPartParser = new DomainPart($this->lexer);
-        $domainPartResult = $domainPartParser->parse();
-        $this->domainPart = $domainPartParser->domainPart();
-        $this->warnings = [...$domainPartParser->getWarnings(), ...$this->warnings];
-
-        return $domainPartResult;
-    }
-
-    public function getDomainPart(): string
-    {
-        return $this->domainPart;
-    }
-
-    public function getLocalPart(): string
-    {
-        return $this->localPart;
-    }
-
-    private function addLongEmailWarning(string $localPart, string $parsedDomainPart): void
-    {
-        if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAIL_MAX_LENGTH) {
-            $this->warnings[EmailTooLong::CODE] = new EmailTooLong();
-        }
-    }
-}
diff --git a/vendor/egulias/email-validator/src/EmailValidator.php b/vendor/egulias/email-validator/src/EmailValidator.php
deleted file mode 100644
index 5a2e5c8..0000000
--- a/vendor/egulias/email-validator/src/EmailValidator.php
+++ /dev/null
@@ -1,67 +0,0 @@
-lexer = new EmailLexer();
-    }
-
-    /**
-     * @param string          $email
-     * @param EmailValidation $emailValidation
-     * @return bool
-     */
-    public function isValid(string $email, EmailValidation $emailValidation)
-    {
-        $isValid = $emailValidation->isValid($email, $this->lexer);
-        $this->warnings = $emailValidation->getWarnings();
-        $this->error = $emailValidation->getError();
-
-        return $isValid;
-    }
-
-    /**
-     * @return boolean
-     */
-    public function hasWarnings()
-    {
-        return !empty($this->warnings);
-    }
-
-    /**
-     * @return array
-     */
-    public function getWarnings()
-    {
-        return $this->warnings;
-    }
-
-    /**
-     * @return InvalidEmail|null
-     */
-    public function getError()
-    {
-        return $this->error;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/MessageIDParser.php b/vendor/egulias/email-validator/src/MessageIDParser.php
deleted file mode 100644
index 35bd0a7..0000000
--- a/vendor/egulias/email-validator/src/MessageIDParser.php
+++ /dev/null
@@ -1,91 +0,0 @@
-addLongEmailWarning($this->idLeft, $this->idRight);
-
-        return $result;
-    }
-
-    protected function preLeftParsing(): Result
-    {
-        if (!$this->hasAtToken()) {
-            return new InvalidEmail(new NoLocalPart(), $this->lexer->current->value);
-        }
-        return new ValidEmail();
-    }
-
-    protected function parseLeftFromAt(): Result
-    {
-        return $this->processIDLeft();
-    }
-
-    protected function parseRightFromAt(): Result
-    {
-        return $this->processIDRight();
-    }
-
-    private function processIDLeft(): Result
-    {
-        $localPartParser = new IDLeftPart($this->lexer);
-        $localPartResult = $localPartParser->parse();
-        $this->idLeft = $localPartParser->localPart();
-        $this->warnings = [...$localPartParser->getWarnings(), ...$this->warnings];
-
-        return $localPartResult;
-    }
-
-    private function processIDRight(): Result
-    {
-        $domainPartParser = new IDRightPart($this->lexer);
-        $domainPartResult = $domainPartParser->parse();
-        $this->idRight = $domainPartParser->domainPart();
-        $this->warnings = [...$domainPartParser->getWarnings(), ...$this->warnings];
-
-        return $domainPartResult;
-    }
-
-    public function getLeftPart(): string
-    {
-        return $this->idLeft;
-    }
-
-    public function getRightPart(): string
-    {
-        return $this->idRight;
-    }
-
-    private function addLongEmailWarning(string $localPart, string $parsedDomainPart): void
-    {
-        if (strlen($localPart . '@' . $parsedDomainPart) > self::EMAILID_MAX_LENGTH) {
-            $this->warnings[EmailTooLong::CODE] = new EmailTooLong();
-        }
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser.php b/vendor/egulias/email-validator/src/Parser.php
deleted file mode 100644
index d577e3e..0000000
--- a/vendor/egulias/email-validator/src/Parser.php
+++ /dev/null
@@ -1,78 +0,0 @@
-lexer = $lexer;
-    }
-
-    public function parse(string $str): Result
-    {
-        $this->lexer->setInput($str);
-
-        if ($this->lexer->hasInvalidTokens()) {
-            return new InvalidEmail(new ExpectingATEXT("Invalid tokens found"), $this->lexer->current->value);
-        }
-
-        $preParsingResult = $this->preLeftParsing();
-        if ($preParsingResult->isInvalid()) {
-            return $preParsingResult;
-        }
-
-        $localPartResult = $this->parseLeftFromAt();
-
-        if ($localPartResult->isInvalid()) {
-            return $localPartResult;
-        }
-
-        $domainPartResult = $this->parseRightFromAt();
-
-        if ($domainPartResult->isInvalid()) {
-            return $domainPartResult;
-        }
-
-        return new ValidEmail();
-    }
-
-    /**
-     * @return Warning\Warning[]
-     */
-    public function getWarnings(): array
-    {
-        return $this->warnings;
-    }
-
-    protected function hasAtToken(): bool
-    {
-        $this->lexer->moveNext();
-        $this->lexer->moveNext();
-
-        return !$this->lexer->current->isA(EmailLexer::S_AT);
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/Comment.php b/vendor/egulias/email-validator/src/Parser/Comment.php
deleted file mode 100644
index 7b5b47e..0000000
--- a/vendor/egulias/email-validator/src/Parser/Comment.php
+++ /dev/null
@@ -1,102 +0,0 @@
-lexer = $lexer;
-        $this->commentStrategy = $commentStrategy;
-    }
-
-    public function parse(): Result
-    {
-        if ($this->lexer->current->isA(EmailLexer::S_OPENPARENTHESIS)) {
-            $this->openedParenthesis++;
-            if ($this->noClosingParenthesis()) {
-                return new InvalidEmail(new UnclosedComment(), $this->lexer->current->value);
-            }
-        }
-
-        if ($this->lexer->current->isA(EmailLexer::S_CLOSEPARENTHESIS)) {
-            return new InvalidEmail(new UnOpenedComment(), $this->lexer->current->value);
-        }
-
-        $this->warnings[WarningComment::CODE] = new WarningComment();
-
-        $moreTokens = true;
-        while ($this->commentStrategy->exitCondition($this->lexer, $this->openedParenthesis) && $moreTokens) {
-
-            if ($this->lexer->isNextToken(EmailLexer::S_OPENPARENTHESIS)) {
-                $this->openedParenthesis++;
-            }
-            $this->warnEscaping();
-            if ($this->lexer->isNextToken(EmailLexer::S_CLOSEPARENTHESIS)) {
-                $this->openedParenthesis--;
-            }
-            $moreTokens = $this->lexer->moveNext();
-        }
-
-        if ($this->openedParenthesis >= 1) {
-            return new InvalidEmail(new UnclosedComment(), $this->lexer->current->value);
-        }
-        if ($this->openedParenthesis < 0) {
-            return new InvalidEmail(new UnOpenedComment(), $this->lexer->current->value);
-        }
-
-        $finalValidations = $this->commentStrategy->endOfLoopValidations($this->lexer);
-
-        $this->warnings = [...$this->warnings, ...$this->commentStrategy->getWarnings()];
-
-        return $finalValidations;
-    }
-
-
-    /**
-     * @return void
-     */
-    private function warnEscaping(): void
-    {
-        //Backslash found
-        if (!$this->lexer->current->isA(EmailLexer::S_BACKSLASH)) {
-            return;
-        }
-
-        if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB, EmailLexer::C_DEL))) {
-            return;
-        }
-
-        $this->warnings[QuotedPart::CODE] =
-            new QuotedPart($this->lexer->getPrevious()->type, $this->lexer->current->type);
-    }
-
-    private function noClosingParenthesis(): bool
-    {
-        try {
-            $this->lexer->find(EmailLexer::S_CLOSEPARENTHESIS);
-            return false;
-        } catch (\RuntimeException $e) {
-            return true;
-        }
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php b/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php
deleted file mode 100644
index 8834db0..0000000
--- a/vendor/egulias/email-validator/src/Parser/CommentStrategy/CommentStrategy.php
+++ /dev/null
@@ -1,22 +0,0 @@
-isNextToken(EmailLexer::S_DOT));
-    }
-
-    public function endOfLoopValidations(EmailLexer $lexer): Result
-    {
-        //test for end of string
-        if (!$lexer->isNextToken(EmailLexer::S_DOT)) {
-            return new InvalidEmail(new ExpectingATEXT('DOT not found near CLOSEPARENTHESIS'), $lexer->current->value);
-        }
-        //add warning
-        //Address is valid within the message but cannot be used unmodified for the envelope
-        return new ValidEmail();
-    }
-
-    public function getWarnings(): array
-    {
-        return [];
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php b/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php
deleted file mode 100644
index 5c18b44..0000000
--- a/vendor/egulias/email-validator/src/Parser/CommentStrategy/LocalComment.php
+++ /dev/null
@@ -1,37 +0,0 @@
-isNextToken(EmailLexer::S_AT);
-    }
-
-    public function endOfLoopValidations(EmailLexer $lexer): Result
-    {
-        if (!$lexer->isNextToken(EmailLexer::S_AT)) {
-            return new InvalidEmail(new ExpectingATEXT('ATEX is not expected after closing comments'), $lexer->current->value);
-        }
-        $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt();
-        return new ValidEmail();
-    }
-
-    public function getWarnings(): array
-    {
-        return $this->warnings;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/DomainLiteral.php b/vendor/egulias/email-validator/src/Parser/DomainLiteral.php
deleted file mode 100644
index 5093e50..0000000
--- a/vendor/egulias/email-validator/src/Parser/DomainLiteral.php
+++ /dev/null
@@ -1,210 +0,0 @@
-addTagWarnings();
-
-        $IPv6TAG = false;
-        $addressLiteral = '';
-
-        do {
-            if ($this->lexer->current->isA(EmailLexer::C_NUL)) {
-                return new InvalidEmail(new ExpectingDTEXT(), $this->lexer->current->value);
-            }
-
-            $this->addObsoleteWarnings();
-
-            if ($this->lexer->isNextTokenAny(array(EmailLexer::S_OPENBRACKET, EmailLexer::S_OPENBRACKET))) {
-                return new InvalidEmail(new ExpectingDTEXT(), $this->lexer->current->value);
-            }
-
-            if ($this->lexer->isNextTokenAny(
-                array(EmailLexer::S_HTAB, EmailLexer::S_SP, EmailLexer::CRLF)
-            )) {
-                $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
-                $this->parseFWS();
-            }
-
-            if ($this->lexer->isNextToken(EmailLexer::S_CR)) {
-                return new InvalidEmail(new CRNoLF(), $this->lexer->current->value);
-            }
-
-            if ($this->lexer->current->isA(EmailLexer::S_BACKSLASH)) {
-                return new InvalidEmail(new UnusualElements($this->lexer->current->value), $this->lexer->current->value);
-            }
-            if ($this->lexer->current->isA(EmailLexer::S_IPV6TAG)) {
-                $IPv6TAG = true;
-            }
-
-            if ($this->lexer->current->isA(EmailLexer::S_CLOSEBRACKET)) {
-                break;
-            }
-
-            $addressLiteral .= $this->lexer->current->value;
-        } while ($this->lexer->moveNext());
-
-
-        //Encapsulate
-        $addressLiteral = str_replace('[', '', $addressLiteral);
-        $isAddressLiteralIPv4 = $this->checkIPV4Tag($addressLiteral);
-
-        if (!$isAddressLiteralIPv4) {
-            return new ValidEmail();
-        }
-
-        $addressLiteral = $this->convertIPv4ToIPv6($addressLiteral);
-
-        if (!$IPv6TAG) {
-            $this->warnings[WarningDomainLiteral::CODE] = new WarningDomainLiteral();
-            return new ValidEmail();
-        }
-
-        $this->warnings[AddressLiteral::CODE] = new AddressLiteral();
-
-        $this->checkIPV6Tag($addressLiteral);
-
-        return new ValidEmail();
-    }
-
-    /**
-     * @param string $addressLiteral
-     * @param int $maxGroups
-     */
-    public function checkIPV6Tag($addressLiteral, $maxGroups = 8): void
-    {
-        $prev = $this->lexer->getPrevious();
-        if ($prev->isA(EmailLexer::S_COLON)) {
-            $this->warnings[IPV6ColonEnd::CODE] = new IPV6ColonEnd();
-        }
-
-        $IPv6       = substr($addressLiteral, 5);
-        //Daniel Marschall's new IPv6 testing strategy
-        $matchesIP  = explode(':', $IPv6);
-        $groupCount = count($matchesIP);
-        $colons     = strpos($IPv6, '::');
-
-        if (count(preg_grep('/^[0-9A-Fa-f]{0,4}$/', $matchesIP, PREG_GREP_INVERT)) !== 0) {
-            $this->warnings[IPV6BadChar::CODE] = new IPV6BadChar();
-        }
-
-        if ($colons === false) {
-            // We need exactly the right number of groups
-            if ($groupCount !== $maxGroups) {
-                $this->warnings[IPV6GroupCount::CODE] = new IPV6GroupCount();
-            }
-            return;
-        }
-
-        if ($colons !== strrpos($IPv6, '::')) {
-            $this->warnings[IPV6DoubleColon::CODE] = new IPV6DoubleColon();
-            return;
-        }
-
-        if ($colons === 0 || $colons === (strlen($IPv6) - 2)) {
-            // RFC 4291 allows :: at the start or end of an address
-            //with 7 other groups in addition
-            ++$maxGroups;
-        }
-
-        if ($groupCount > $maxGroups) {
-            $this->warnings[IPV6MaxGroups::CODE] = new IPV6MaxGroups();
-        } elseif ($groupCount === $maxGroups) {
-            $this->warnings[IPV6Deprecated::CODE] = new IPV6Deprecated();
-        }
-    }
-
-    public function convertIPv4ToIPv6(string $addressLiteralIPv4): string
-    {
-        $matchesIP  = [];
-        $IPv4Match = preg_match(self::IPV4_REGEX, $addressLiteralIPv4, $matchesIP);
-
-        // Extract IPv4 part from the end of the address-literal (if there is one)
-        if ($IPv4Match > 0) {
-            $index = (int) strrpos($addressLiteralIPv4, $matchesIP[0]);
-            //There's a match but it is at the start
-            if ($index > 0) {
-                // Convert IPv4 part to IPv6 format for further testing
-                return substr($addressLiteralIPv4, 0, $index) . '0:0';
-            }
-        }
-
-        return $addressLiteralIPv4;
-    }
-
-    /**
-     * @param string $addressLiteral
-     *
-     * @return bool
-     */
-    protected function checkIPV4Tag($addressLiteral): bool
-    {
-        $matchesIP  = [];
-        $IPv4Match = preg_match(self::IPV4_REGEX, $addressLiteral, $matchesIP);
-
-        // Extract IPv4 part from the end of the address-literal (if there is one)
-
-        if ($IPv4Match > 0) {
-            $index = strrpos($addressLiteral, $matchesIP[0]);
-            //There's a match but it is at the start
-            if ($index === 0) {
-                $this->warnings[AddressLiteral::CODE] = new AddressLiteral();
-                return false;
-            }
-        }
-
-        return true;
-    }
-
-    private function addObsoleteWarnings(): void
-    {
-        if (in_array($this->lexer->current->type, self::OBSOLETE_WARNINGS)) {
-            $this->warnings[ObsoleteDTEXT::CODE] = new ObsoleteDTEXT();
-        }
-    }
-
-    private function addTagWarnings(): void
-    {
-        if ($this->lexer->isNextToken(EmailLexer::S_COLON)) {
-            $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart();
-        }
-        if ($this->lexer->isNextToken(EmailLexer::S_IPV6TAG)) {
-            $lexer = clone $this->lexer;
-            $lexer->moveNext();
-            if ($lexer->isNextToken(EmailLexer::S_DOUBLECOLON)) {
-                $this->warnings[IPV6ColonStart::CODE] = new IPV6ColonStart();
-            }
-        }
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/DomainPart.php b/vendor/egulias/email-validator/src/Parser/DomainPart.php
deleted file mode 100644
index a1a56cf..0000000
--- a/vendor/egulias/email-validator/src/Parser/DomainPart.php
+++ /dev/null
@@ -1,326 +0,0 @@
-lexer->clearRecorded();
-        $this->lexer->startRecording();
-
-        $this->lexer->moveNext();
-
-        $domainChecks = $this->performDomainStartChecks();
-        if ($domainChecks->isInvalid()) {
-            return $domainChecks;
-        }
-
-        if ($this->lexer->current->isA(EmailLexer::S_AT)) {
-            return new InvalidEmail(new ConsecutiveAt(), $this->lexer->current->value);
-        }
-
-        $result = $this->doParseDomainPart();
-        if ($result->isInvalid()) {
-            return $result;
-        }
-
-        $end = $this->checkEndOfDomain();
-        if ($end->isInvalid()) {
-            return $end;
-        }
-
-        $this->lexer->stopRecording();
-        $this->domainPart = $this->lexer->getAccumulatedValues();
-
-        $length = strlen($this->domainPart);
-        if ($length > self::DOMAIN_MAX_LENGTH) {
-            return new InvalidEmail(new DomainTooLong(), $this->lexer->current->value);
-        }
-
-        return new ValidEmail();
-    }
-
-    private function checkEndOfDomain(): Result
-    {
-        $prev = $this->lexer->getPrevious();
-        if ($prev->isA(EmailLexer::S_DOT)) {
-            return new InvalidEmail(new DotAtEnd(), $this->lexer->current->value);
-        }
-        if ($prev->isA(EmailLexer::S_HYPHEN)) {
-            return new InvalidEmail(new DomainHyphened('Hypen found at the end of the domain'), $prev->value);
-        }
-
-        if ($this->lexer->current->isA(EmailLexer::S_SP)) {
-            return new InvalidEmail(new CRLFAtTheEnd(), $prev->value);
-        }
-        return new ValidEmail();
-    }
-
-    private function performDomainStartChecks(): Result
-    {
-        $invalidTokens = $this->checkInvalidTokensAfterAT();
-        if ($invalidTokens->isInvalid()) {
-            return $invalidTokens;
-        }
-
-        $missingDomain = $this->checkEmptyDomain();
-        if ($missingDomain->isInvalid()) {
-            return $missingDomain;
-        }
-
-        if ($this->lexer->current->isA(EmailLexer::S_OPENPARENTHESIS)) {
-            $this->warnings[DeprecatedComment::CODE] = new DeprecatedComment();
-        }
-        return new ValidEmail();
-    }
-
-    private function checkEmptyDomain(): Result
-    {
-        $thereIsNoDomain = $this->lexer->current->isA(EmailLexer::S_EMPTY) ||
-            ($this->lexer->current->isA(EmailLexer::S_SP) &&
-                !$this->lexer->isNextToken(EmailLexer::GENERIC));
-
-        if ($thereIsNoDomain) {
-            return new InvalidEmail(new NoDomainPart(), $this->lexer->current->value);
-        }
-
-        return new ValidEmail();
-    }
-
-    private function checkInvalidTokensAfterAT(): Result
-    {
-        if ($this->lexer->current->isA(EmailLexer::S_DOT)) {
-            return new InvalidEmail(new DotAtStart(), $this->lexer->current->value);
-        }
-        if ($this->lexer->current->isA(EmailLexer::S_HYPHEN)) {
-            return new InvalidEmail(new DomainHyphened('After AT'), $this->lexer->current->value);
-        }
-        return new ValidEmail();
-    }
-
-    protected function parseComments(): Result
-    {
-        $commentParser = new Comment($this->lexer, new DomainComment());
-        $result = $commentParser->parse();
-        $this->warnings = [...$this->warnings, ...$commentParser->getWarnings()];
-
-        return $result;
-    }
-
-    protected function doParseDomainPart(): Result
-    {
-        $tldMissing = true;
-        $hasComments = false;
-        $domain = '';
-        do {
-            $prev = $this->lexer->getPrevious();
-
-            $notAllowedChars = $this->checkNotAllowedChars($this->lexer->current);
-            if ($notAllowedChars->isInvalid()) {
-                return $notAllowedChars;
-            }
-
-            if (
-                $this->lexer->current->isA(EmailLexer::S_OPENPARENTHESIS) ||
-                $this->lexer->current->isA(EmailLexer::S_CLOSEPARENTHESIS)
-            ) {
-                $hasComments = true;
-                $commentsResult = $this->parseComments();
-
-                //Invalid comment parsing
-                if ($commentsResult->isInvalid()) {
-                    return $commentsResult;
-                }
-            }
-
-            $dotsResult = $this->checkConsecutiveDots();
-            if ($dotsResult->isInvalid()) {
-                return $dotsResult;
-            }
-
-            if ($this->lexer->current->isA(EmailLexer::S_OPENBRACKET)) {
-                $literalResult = $this->parseDomainLiteral();
-
-                $this->addTLDWarnings($tldMissing);
-                return $literalResult;
-            }
-
-            $labelCheck = $this->checkLabelLength();
-            if ($labelCheck->isInvalid()) {
-                return $labelCheck;
-            }
-
-            $FwsResult = $this->parseFWS();
-            if ($FwsResult->isInvalid()) {
-                return $FwsResult;
-            }
-
-            $domain .= $this->lexer->current->value;
-
-            if ($this->lexer->current->isA(EmailLexer::S_DOT) && $this->lexer->isNextToken(EmailLexer::GENERIC)) {
-                $tldMissing = false;
-            }
-
-            $exceptionsResult = $this->checkDomainPartExceptions($prev, $hasComments);
-            if ($exceptionsResult->isInvalid()) {
-                return $exceptionsResult;
-            }
-            $this->lexer->moveNext();
-        } while (!$this->lexer->current->isA(EmailLexer::S_EMPTY));
-
-        $labelCheck = $this->checkLabelLength(true);
-        if ($labelCheck->isInvalid()) {
-            return $labelCheck;
-        }
-        $this->addTLDWarnings($tldMissing);
-
-        $this->domainPart = $domain;
-        return new ValidEmail();
-    }
-
-     /**
-     * @param Token $token
-     *
-     * @return Result
-     */
-    private function checkNotAllowedChars(Token $token): Result
-    {
-        $notAllowed = [EmailLexer::S_BACKSLASH => true, EmailLexer::S_SLASH => true];
-        if (isset($notAllowed[$token->type])) {
-            return new InvalidEmail(new CharNotAllowed(), $token->value);
-        }
-        return new ValidEmail();
-    }
-
-    /**
-     * @return Result
-     */
-    protected function parseDomainLiteral(): Result
-    {
-        try {
-            $this->lexer->find(EmailLexer::S_CLOSEBRACKET);
-        } catch (\RuntimeException $e) {
-            return new InvalidEmail(new ExpectingDomainLiteralClose(), $this->lexer->current->value);
-        }
-
-        $domainLiteralParser = new DomainLiteralParser($this->lexer);
-        $result = $domainLiteralParser->parse();
-        $this->warnings = [...$this->warnings, ...$domainLiteralParser->getWarnings()];
-        return $result;
-    }
-
-    /**
-     * @param Token $prev
-     * @param bool $hasComments
-     *
-     * @return Result
-     */
-    protected function checkDomainPartExceptions(Token $prev, bool $hasComments): Result
-    {
-        if ($this->lexer->current->isA(EmailLexer::S_OPENBRACKET) && $prev->type !== EmailLexer::S_AT) {
-            return new InvalidEmail(new ExpectingATEXT('OPENBRACKET not after AT'), $this->lexer->current->value);
-        }
-
-        if ($this->lexer->current->isA(EmailLexer::S_HYPHEN) && $this->lexer->isNextToken(EmailLexer::S_DOT)) {
-            return new InvalidEmail(new DomainHyphened('Hypen found near DOT'), $this->lexer->current->value);
-        }
-
-        if (
-            $this->lexer->current->isA(EmailLexer::S_BACKSLASH)
-            && $this->lexer->isNextToken(EmailLexer::GENERIC)
-        ) {
-            return new InvalidEmail(new ExpectingATEXT('Escaping following "ATOM"'), $this->lexer->current->value);
-        }
-
-        return $this->validateTokens($hasComments);
-    }
-
-    protected function validateTokens(bool $hasComments): Result
-    {
-        $validDomainTokens = array(
-            EmailLexer::GENERIC => true,
-            EmailLexer::S_HYPHEN => true,
-            EmailLexer::S_DOT => true,
-        );
-
-        if ($hasComments) {
-            $validDomainTokens[EmailLexer::S_OPENPARENTHESIS] = true;
-            $validDomainTokens[EmailLexer::S_CLOSEPARENTHESIS] = true;
-        }
-
-        if (!isset($validDomainTokens[$this->lexer->current->type])) {
-            return new InvalidEmail(new ExpectingATEXT('Invalid token in domain: ' . $this->lexer->current->value), $this->lexer->current->value);
-        }
-
-        return new ValidEmail();
-    }
-
-    private function checkLabelLength(bool $isEndOfDomain = false): Result
-    {
-        if ($this->lexer->current->isA(EmailLexer::S_DOT) || $isEndOfDomain) {
-            if ($this->isLabelTooLong($this->label)) {
-                return new InvalidEmail(new LabelTooLong(), $this->lexer->current->value);
-            }
-            $this->label = '';
-        }
-        $this->label .= $this->lexer->current->value;
-        return new ValidEmail();
-    }
-
-
-    private function isLabelTooLong(string $label): bool
-    {
-        if (preg_match('/[^\x00-\x7F]/', $label)) {
-            idn_to_ascii($label, IDNA_DEFAULT, INTL_IDNA_VARIANT_UTS46, $idnaInfo);
-            return (bool) ($idnaInfo['errors'] & IDNA_ERROR_LABEL_TOO_LONG);
-        }
-        return strlen($label) > self::LABEL_MAX_LENGTH;
-    }
-
-    private function addTLDWarnings(bool $isTLDMissing): void
-    {
-        if ($isTLDMissing) {
-            $this->warnings[TLD::CODE] = new TLD();
-        }
-    }
-
-    public function domainPart(): string
-    {
-        return $this->domainPart;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/DoubleQuote.php b/vendor/egulias/email-validator/src/Parser/DoubleQuote.php
deleted file mode 100644
index b5335d3..0000000
--- a/vendor/egulias/email-validator/src/Parser/DoubleQuote.php
+++ /dev/null
@@ -1,91 +0,0 @@
-checkDQUOTE();
-        if ($validQuotedString->isInvalid()) {
-            return $validQuotedString;
-        }
-
-        $special = [
-            EmailLexer::S_CR => true,
-            EmailLexer::S_HTAB => true,
-            EmailLexer::S_LF => true
-        ];
-
-        $invalid = [
-            EmailLexer::C_NUL => true,
-            EmailLexer::S_HTAB => true,
-            EmailLexer::S_CR => true,
-            EmailLexer::S_LF => true
-        ];
-
-        $setSpecialsWarning = true;
-
-        $this->lexer->moveNext();
-
-        while (!$this->lexer->current->isA(EmailLexer::S_DQUOTE) && !$this->lexer->current->isA(EmailLexer::S_EMPTY)) {
-            if (isset($special[$this->lexer->current->type]) && $setSpecialsWarning) {
-                $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
-                $setSpecialsWarning = false;
-            }
-            if ($this->lexer->current->isA(EmailLexer::S_BACKSLASH) && $this->lexer->isNextToken(EmailLexer::S_DQUOTE)) {
-                $this->lexer->moveNext();
-            }
-
-            $this->lexer->moveNext();
-
-            if (!$this->escaped() && isset($invalid[$this->lexer->current->type])) {
-                return new InvalidEmail(new ExpectingATEXT("Expecting ATEXT between DQUOTE"), $this->lexer->current->value);
-            }
-        }
-
-        $prev = $this->lexer->getPrevious();
-
-        if ($prev->isA(EmailLexer::S_BACKSLASH)) {
-            $validQuotedString = $this->checkDQUOTE();
-            if ($validQuotedString->isInvalid()) {
-                return $validQuotedString;
-            }
-        }
-
-        if (!$this->lexer->isNextToken(EmailLexer::S_AT) && !$prev->isA(EmailLexer::S_BACKSLASH)) {
-            return new InvalidEmail(new ExpectingATEXT("Expecting ATEXT between DQUOTE"), $this->lexer->current->value);
-        }
-
-        return new ValidEmail();
-    }
-
-    protected function checkDQUOTE(): Result
-    {
-        $previous = $this->lexer->getPrevious();
-
-        if ($this->lexer->isNextToken(EmailLexer::GENERIC) && $previous->isA(EmailLexer::GENERIC)) {
-            $description = 'https://tools.ietf.org/html/rfc5322#section-3.2.4 - quoted string should be a unit';
-            return new InvalidEmail(new ExpectingATEXT($description), $this->lexer->current->value);
-        }
-
-        try {
-            $this->lexer->find(EmailLexer::S_DQUOTE);
-        } catch (\Exception $e) {
-            return new InvalidEmail(new UnclosedQuotedString(), $this->lexer->current->value);
-        }
-        $this->warnings[QuotedString::CODE] = new QuotedString($previous->value, $this->lexer->current->value);
-
-        return new ValidEmail();
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php b/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php
deleted file mode 100644
index 348a7af..0000000
--- a/vendor/egulias/email-validator/src/Parser/FoldingWhiteSpace.php
+++ /dev/null
@@ -1,87 +0,0 @@
-isFWS()) {
-            return new ValidEmail();
-        }
-
-        $previous = $this->lexer->getPrevious();
-
-        $resultCRLF = $this->checkCRLFInFWS();
-        if ($resultCRLF->isInvalid()) {
-            return $resultCRLF;
-        }
-
-        if ($this->lexer->current->isA(EmailLexer::S_CR)) {
-            return new InvalidEmail(new CRNoLF(), $this->lexer->current->value);
-        }
-
-        if ($this->lexer->isNextToken(EmailLexer::GENERIC) && !$previous->isA(EmailLexer::S_AT)) {
-            return new InvalidEmail(new AtextAfterCFWS(), $this->lexer->current->value);
-        }
-
-        if ($this->lexer->current->isA(EmailLexer::S_LF) || $this->lexer->current->isA(EmailLexer::C_NUL)) {
-            return new InvalidEmail(new ExpectingCTEXT(), $this->lexer->current->value);
-        }
-
-        if ($this->lexer->isNextToken(EmailLexer::S_AT) || $previous->isA(EmailLexer::S_AT)) {
-            $this->warnings[CFWSNearAt::CODE] = new CFWSNearAt();
-        } else {
-            $this->warnings[CFWSWithFWS::CODE] = new CFWSWithFWS();
-        }
-
-        return new ValidEmail();
-    }
-
-    protected function checkCRLFInFWS(): Result
-    {
-        if (!$this->lexer->current->isA(EmailLexer::CRLF)) {
-            return new ValidEmail();
-        }
-
-        if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) {
-            return new InvalidEmail(new CRLFX2(), $this->lexer->current->value);
-        }
-
-        //this has no coverage. Condition is repeated from above one
-        if (!$this->lexer->isNextTokenAny(array(EmailLexer::S_SP, EmailLexer::S_HTAB))) {
-            return new InvalidEmail(new CRLFAtTheEnd(), $this->lexer->current->value);
-        }
-
-        return new ValidEmail();
-    }
-
-    protected function isFWS(): bool
-    {
-        if ($this->escaped()) {
-            return false;
-        }
-
-        return in_array($this->lexer->current->type, self::FWS_TYPES);
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/IDLeftPart.php b/vendor/egulias/email-validator/src/Parser/IDLeftPart.php
deleted file mode 100644
index bedcf7b..0000000
--- a/vendor/egulias/email-validator/src/Parser/IDLeftPart.php
+++ /dev/null
@@ -1,15 +0,0 @@
-lexer->current->value);
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/IDRightPart.php b/vendor/egulias/email-validator/src/Parser/IDRightPart.php
deleted file mode 100644
index d2fc1d7..0000000
--- a/vendor/egulias/email-validator/src/Parser/IDRightPart.php
+++ /dev/null
@@ -1,29 +0,0 @@
- true,
-            EmailLexer::S_SQUOTE => true,
-            EmailLexer::S_BACKTICK => true,
-            EmailLexer::S_SEMICOLON => true,
-            EmailLexer::S_GREATERTHAN => true,
-            EmailLexer::S_LOWERTHAN => true,
-        ];
-
-        if (isset($invalidDomainTokens[$this->lexer->current->type])) {
-            return new InvalidEmail(new ExpectingATEXT('Invalid token in domain: ' . $this->lexer->current->value), $this->lexer->current->value);
-        }
-        return new ValidEmail();
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/LocalPart.php b/vendor/egulias/email-validator/src/Parser/LocalPart.php
deleted file mode 100644
index 5ed29d6..0000000
--- a/vendor/egulias/email-validator/src/Parser/LocalPart.php
+++ /dev/null
@@ -1,162 +0,0 @@
- EmailLexer::S_COMMA,
-        EmailLexer::S_CLOSEBRACKET => EmailLexer::S_CLOSEBRACKET,
-        EmailLexer::S_OPENBRACKET => EmailLexer::S_OPENBRACKET,
-        EmailLexer::S_GREATERTHAN => EmailLexer::S_GREATERTHAN,
-        EmailLexer::S_LOWERTHAN => EmailLexer::S_LOWERTHAN,
-        EmailLexer::S_COLON => EmailLexer::S_COLON,
-        EmailLexer::S_SEMICOLON => EmailLexer::S_SEMICOLON,
-        EmailLexer::INVALID => EmailLexer::INVALID
-    ];
-
-    /**
-     * @var string
-     */
-    private $localPart = '';
-
-
-    public function parse(): Result
-    {
-        $this->lexer->startRecording();
-
-        while (!$this->lexer->current->isA(EmailLexer::S_AT) && !$this->lexer->current->isA(EmailLexer::S_EMPTY)) {
-            if ($this->hasDotAtStart()) {
-                return new InvalidEmail(new DotAtStart(), $this->lexer->current->value);
-            }
-
-            if ($this->lexer->current->isA(EmailLexer::S_DQUOTE)) {
-                $dquoteParsingResult = $this->parseDoubleQuote();
-
-                //Invalid double quote parsing
-                if ($dquoteParsingResult->isInvalid()) {
-                    return $dquoteParsingResult;
-                }
-            }
-
-            if (
-                $this->lexer->current->isA(EmailLexer::S_OPENPARENTHESIS) ||
-                $this->lexer->current->isA(EmailLexer::S_CLOSEPARENTHESIS)
-            ) {
-                $commentsResult = $this->parseComments();
-
-                //Invalid comment parsing
-                if ($commentsResult->isInvalid()) {
-                    return $commentsResult;
-                }
-            }
-
-            if ($this->lexer->current->isA(EmailLexer::S_DOT) && $this->lexer->isNextToken(EmailLexer::S_DOT)) {
-                return new InvalidEmail(new ConsecutiveDot(), $this->lexer->current->value);
-            }
-
-            if (
-                $this->lexer->current->isA(EmailLexer::S_DOT) &&
-                $this->lexer->isNextToken(EmailLexer::S_AT)
-            ) {
-                return new InvalidEmail(new DotAtEnd(), $this->lexer->current->value);
-            }
-
-            $resultEscaping = $this->validateEscaping();
-            if ($resultEscaping->isInvalid()) {
-                return $resultEscaping;
-            }
-
-            $resultToken = $this->validateTokens(false);
-            if ($resultToken->isInvalid()) {
-                return $resultToken;
-            }
-
-            $resultFWS = $this->parseLocalFWS();
-            if ($resultFWS->isInvalid()) {
-                return $resultFWS;
-            }
-
-            $this->lexer->moveNext();
-        }
-
-        $this->lexer->stopRecording();
-        $this->localPart = rtrim($this->lexer->getAccumulatedValues(), '@');
-        if (strlen($this->localPart) > LocalTooLong::LOCAL_PART_LENGTH) {
-            $this->warnings[LocalTooLong::CODE] = new LocalTooLong();
-        }
-
-        return new ValidEmail();
-    }
-
-    protected function validateTokens(bool $hasComments): Result
-    {
-        if (isset(self::INVALID_TOKENS[$this->lexer->current->type])) {
-            return new InvalidEmail(new ExpectingATEXT('Invalid token found'), $this->lexer->current->value);
-        }
-        return new ValidEmail();
-    }
-
-    public function localPart(): string
-    {
-        return $this->localPart;
-    }
-
-    private function parseLocalFWS(): Result
-    {
-        $foldingWS = new FoldingWhiteSpace($this->lexer);
-        $resultFWS = $foldingWS->parse();
-        if ($resultFWS->isValid()) {
-            $this->warnings = [...$this->warnings, ...$foldingWS->getWarnings()];
-        }
-        return $resultFWS;
-    }
-
-    private function hasDotAtStart(): bool
-    {
-        return $this->lexer->current->isA(EmailLexer::S_DOT) && $this->lexer->getPrevious()->isA(EmailLexer::S_EMPTY);
-    }
-
-    private function parseDoubleQuote(): Result
-    {
-        $dquoteParser = new DoubleQuote($this->lexer);
-        $parseAgain = $dquoteParser->parse();
-        $this->warnings = [...$this->warnings, ...$dquoteParser->getWarnings()];
-
-        return $parseAgain;
-    }
-
-    protected function parseComments(): Result
-    {
-        $commentParser = new Comment($this->lexer, new LocalComment());
-        $result = $commentParser->parse();
-        $this->warnings = [...$this->warnings, ...$commentParser->getWarnings()];
-
-        return $result;
-    }
-
-    private function validateEscaping(): Result
-    {
-        //Backslash found
-        if (!$this->lexer->current->isA(EmailLexer::S_BACKSLASH)) {
-            return new ValidEmail();
-        }
-
-        if ($this->lexer->isNextToken(EmailLexer::GENERIC)) {
-            return new InvalidEmail(new ExpectingATEXT('Found ATOM after escaping'), $this->lexer->current->value);
-        }
-
-        return new ValidEmail();
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Parser/PartParser.php b/vendor/egulias/email-validator/src/Parser/PartParser.php
deleted file mode 100644
index 53afb25..0000000
--- a/vendor/egulias/email-validator/src/Parser/PartParser.php
+++ /dev/null
@@ -1,63 +0,0 @@
-lexer = $lexer;
-    }
-
-    abstract public function parse(): Result;
-
-    /**
-     * @return Warning[]
-     */
-    public function getWarnings()
-    {
-        return $this->warnings;
-    }
-
-    protected function parseFWS(): Result
-    {
-        $foldingWS = new FoldingWhiteSpace($this->lexer);
-        $resultFWS = $foldingWS->parse();
-        $this->warnings = [...$this->warnings, ...$foldingWS->getWarnings()];
-        return $resultFWS;
-    }
-
-    protected function checkConsecutiveDots(): Result
-    {
-        if ($this->lexer->current->isA(EmailLexer::S_DOT) && $this->lexer->isNextToken(EmailLexer::S_DOT)) {
-            return new InvalidEmail(new ConsecutiveDot(), $this->lexer->current->value);
-        }
-
-        return new ValidEmail();
-    }
-
-    protected function escaped(): bool
-    {
-        $previous = $this->lexer->getPrevious();
-
-        return $previous->isA(EmailLexer::S_BACKSLASH)
-            && !$this->lexer->current->isA(EmailLexer::GENERIC);
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Result/InvalidEmail.php b/vendor/egulias/email-validator/src/Result/InvalidEmail.php
deleted file mode 100644
index 82699ac..0000000
--- a/vendor/egulias/email-validator/src/Result/InvalidEmail.php
+++ /dev/null
@@ -1,49 +0,0 @@
-token = $token;
-        $this->reason = $reason;
-    }
-
-    public function isValid(): bool
-    {
-        return false;
-    }
-
-    public function isInvalid(): bool
-    {
-        return true;
-    }
-
-    public function description(): string
-    {
-        return $this->reason->description() . " in char " . $this->token;
-    }
-
-    public function code(): int
-    {
-        return $this->reason->code();
-    }
-
-    public function reason(): Reason
-    {
-        return $this->reason;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Result/MultipleErrors.php b/vendor/egulias/email-validator/src/Result/MultipleErrors.php
deleted file mode 100644
index 5fa85af..0000000
--- a/vendor/egulias/email-validator/src/Result/MultipleErrors.php
+++ /dev/null
@@ -1,56 +0,0 @@
-reasons[$reason->code()] = $reason;
-    }
-
-    /**
-     * @return Reason[]
-     */
-    public function getReasons() : array
-    {
-        return $this->reasons;
-    }
-
-    public function reason() : Reason
-    {
-        return 0 !== count($this->reasons)
-            ? current($this->reasons)
-            : new EmptyReason();
-    }
-
-    public function description() : string
-    {
-        $description = '';
-        foreach($this->reasons as $reason) {
-            $description .= $reason->description() . PHP_EOL;
-        }
-
-        return $description;
-    }
-
-    public function code() : int
-    {
-        return 0;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php b/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php
deleted file mode 100644
index 96e2284..0000000
--- a/vendor/egulias/email-validator/src/Result/Reason/AtextAfterCFWS.php
+++ /dev/null
@@ -1,16 +0,0 @@
-detailedDescription = $details;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php b/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php
deleted file mode 100644
index bcaefb6..0000000
--- a/vendor/egulias/email-validator/src/Result/Reason/DomainAcceptsNoMail.php
+++ /dev/null
@@ -1,16 +0,0 @@
-exception = $exception;
-        
-    }
-    public function code() : int
-    {
-        return 999;
-    }
-
-    public function description() : string
-    {
-        return $this->exception->getMessage();
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php b/vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php
deleted file mode 100644
index 07ea8d2..0000000
--- a/vendor/egulias/email-validator/src/Result/Reason/ExpectingATEXT.php
+++ /dev/null
@@ -1,16 +0,0 @@
-detailedDescription;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php b/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php
deleted file mode 100644
index 64f5f7c..0000000
--- a/vendor/egulias/email-validator/src/Result/Reason/ExpectingCTEXT.php
+++ /dev/null
@@ -1,16 +0,0 @@
-element = $element;
-    }
-
-    public function code() : int
-    {
-        return 201;
-    }
-
-    public function description() : string
-    {
-        return 'Unusual element found, wourld render invalid in majority of cases. Element found: ' . $this->element;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Result/Result.php b/vendor/egulias/email-validator/src/Result/Result.php
deleted file mode 100644
index fd13e6c..0000000
--- a/vendor/egulias/email-validator/src/Result/Result.php
+++ /dev/null
@@ -1,27 +0,0 @@
-reason = new ReasonSpoofEmail();
-        parent::__construct($this->reason, '');
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Result/ValidEmail.php b/vendor/egulias/email-validator/src/Result/ValidEmail.php
deleted file mode 100644
index fdc882f..0000000
--- a/vendor/egulias/email-validator/src/Result/ValidEmail.php
+++ /dev/null
@@ -1,27 +0,0 @@
-dnsGetRecord = $dnsGetRecord;
-    }
-
-    public function isValid(string $email, EmailLexer $emailLexer): bool
-    {
-        // use the input to check DNS if we cannot extract something similar to a domain
-        $host = $email;
-
-        // Arguable pattern to extract the domain. Not aiming to validate the domain nor the email
-        if (false !== $lastAtPos = strrpos($email, '@')) {
-            $host = substr($email, $lastAtPos + 1);
-        }
-
-        // Get the domain parts
-        $hostParts = explode('.', $host);
-
-        $isLocalDomain = count($hostParts) <= 1;
-        $isReservedTopLevel = in_array($hostParts[(count($hostParts) - 1)], self::RESERVED_DNS_TOP_LEVEL_NAMES, true);
-
-        // Exclude reserved top level DNS names
-        if ($isLocalDomain || $isReservedTopLevel) {
-            $this->error = new InvalidEmail(new LocalOrReservedDomain(), $host);
-            return false;
-        }
-
-        return $this->checkDns($host);
-    }
-
-    public function getError(): ?InvalidEmail
-    {
-        return $this->error;
-    }
-
-    /**
-     * @return Warning[]
-     */
-    public function getWarnings(): array
-    {
-        return $this->warnings;
-    }
-
-    /**
-     * @param string $host
-     *
-     * @return bool
-     */
-    protected function checkDns($host)
-    {
-        $variant = INTL_IDNA_VARIANT_UTS46;
-
-        $host = rtrim(idn_to_ascii($host, IDNA_DEFAULT, $variant), '.');
-
-        $hostParts = explode('.', $host);
-        $host = array_pop($hostParts);
-
-        while (count($hostParts) > 0) {
-            $host = array_pop($hostParts) . '.' . $host;
-
-            if ($this->validateDnsRecords($host)) {
-                return true;
-            }
-        }
-
-        return false;
-    }
-
-
-    /**
-     * Validate the DNS records for given host.
-     *
-     * @param string $host A set of DNS records in the format returned by dns_get_record.
-     *
-     * @return bool True on success.
-     */
-    private function validateDnsRecords($host): bool
-    {
-        $dnsRecordsResult = $this->dnsGetRecord->getRecords($host, DNS_A + DNS_MX);
-
-        if ($dnsRecordsResult->withError()) {
-            $this->error = new InvalidEmail(new UnableToGetDNSRecord(), '');
-            return false;
-        }
-
-        $dnsRecords = $dnsRecordsResult->getRecords();
-
-        // Combined check for A+MX+AAAA can fail with SERVFAIL, even in the presence of valid A/MX records
-        $aaaaRecordsResult = $this->dnsGetRecord->getRecords($host, DNS_AAAA);
-
-        if (! $aaaaRecordsResult->withError()) {
-            $dnsRecords = array_merge($dnsRecords, $aaaaRecordsResult->getRecords());
-        }
-
-        // No MX, A or AAAA DNS records
-        if ($dnsRecords === []) {
-            $this->error = new InvalidEmail(new ReasonNoDNSRecord(), '');
-            return false;
-        }
-
-        // For each DNS record
-        foreach ($dnsRecords as $dnsRecord) {
-            if (!$this->validateMXRecord($dnsRecord)) {
-                // No MX records (fallback to A or AAAA records)
-                if (empty($this->mxRecords)) {
-                    $this->warnings[NoDNSMXRecord::CODE] = new NoDNSMXRecord();
-                }
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Validate an MX record
-     *
-     * @param array $dnsRecord Given DNS record.
-     *
-     * @return bool True if valid.
-     */
-    private function validateMxRecord($dnsRecord): bool
-    {
-        if (!isset($dnsRecord['type'])) {
-            $this->error = new InvalidEmail(new ReasonNoDNSRecord(), '');
-            return false;
-        }
-
-        if ($dnsRecord['type'] !== 'MX') {
-            return true;
-        }
-
-        // "Null MX" record indicates the domain accepts no mail (https://tools.ietf.org/html/rfc7505)
-        if (empty($dnsRecord['target']) || $dnsRecord['target'] === '.') {
-            $this->error = new InvalidEmail(new DomainAcceptsNoMail(), "");
-            return false;
-        }
-
-        $this->mxRecords[] = $dnsRecord;
-
-        return true;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php b/vendor/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php
deleted file mode 100644
index 25e2fa0..0000000
--- a/vendor/egulias/email-validator/src/Validation/DNSGetRecordWrapper.php
+++ /dev/null
@@ -1,31 +0,0 @@
-records;
-    }
-
-    public function withError(): bool
-    {
-        return $this->error;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Validation/EmailValidation.php b/vendor/egulias/email-validator/src/Validation/EmailValidation.php
deleted file mode 100644
index 1bcc0a7..0000000
--- a/vendor/egulias/email-validator/src/Validation/EmailValidation.php
+++ /dev/null
@@ -1,34 +0,0 @@
-setChecks(Spoofchecker::SINGLE_SCRIPT);
-
-        if ($checker->isSuspicious($email)) {
-            $this->error = new SpoofEmail();
-        }
-
-        return $this->error === null;
-    }
-
-    public function getError() : ?InvalidEmail
-    {
-        return $this->error;
-    }
-
-    public function getWarnings() : array
-    {
-        return [];
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Validation/MessageIDValidation.php b/vendor/egulias/email-validator/src/Validation/MessageIDValidation.php
deleted file mode 100644
index 97d1ea7..0000000
--- a/vendor/egulias/email-validator/src/Validation/MessageIDValidation.php
+++ /dev/null
@@ -1,55 +0,0 @@
-parse($email);
-            $this->warnings = $parser->getWarnings();
-            if ($result->isInvalid()) {
-                /** @psalm-suppress PropertyTypeCoercion */
-                $this->error = $result;
-                return false;
-            }
-        } catch (\Exception $invalid) {
-            $this->error = new InvalidEmail(new ExceptionFound($invalid), '');
-            return false;
-        }
-
-        return true;
-    }
-
-    /**
-     * @return Warning[]
-     */
-    public function getWarnings(): array
-    {
-        return $this->warnings;
-    }
-
-    public function getError(): ?InvalidEmail
-    {
-        return $this->error;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php b/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php
deleted file mode 100644
index c908053..0000000
--- a/vendor/egulias/email-validator/src/Validation/MultipleValidationWithAnd.php
+++ /dev/null
@@ -1,105 +0,0 @@
-validations as $validation) {
-            $emailLexer->reset();
-            $validationResult = $validation->isValid($email, $emailLexer);
-            $result = $result && $validationResult;
-            $this->warnings = [...$this->warnings, ...$validation->getWarnings()];
-            if (!$validationResult) {
-                $this->processError($validation);
-            }
-
-            if ($this->shouldStop($result)) {
-                break;
-            }
-        }
-
-        return $result;
-    }
-
-    private function initErrorStorage(): void
-    {
-        if (null === $this->error) {
-            $this->error = new MultipleErrors();
-        }
-    }
-
-    private function processError(EmailValidation $validation): void
-    {
-        if (null !== $validation->getError()) {
-            $this->initErrorStorage();
-            /** @psalm-suppress PossiblyNullReference */
-            $this->error->addReason($validation->getError()->reason());
-        }
-    }
-
-    private function shouldStop(bool $result): bool
-    {
-        return !$result && $this->mode === self::STOP_ON_ERROR;
-    }
-
-    /**
-     * Returns the validation errors.
-     */
-    public function getError(): ?InvalidEmail
-    {
-        return $this->error;
-    }
-
-    /**
-     * @return Warning[]
-     */
-    public function getWarnings(): array
-    {
-        return $this->warnings;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php b/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php
deleted file mode 100644
index 06885ed..0000000
--- a/vendor/egulias/email-validator/src/Validation/NoRFCWarningsValidation.php
+++ /dev/null
@@ -1,41 +0,0 @@
-getWarnings())) {
-            return true;
-        }
-
-        $this->error = new InvalidEmail(new RFCWarnings(), '');
-
-        return false;
-    }
-
-    /**
-     * {@inheritdoc}
-     */
-    public function getError() : ?InvalidEmail
-    {
-        return $this->error ?: parent::getError();
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Validation/RFCValidation.php b/vendor/egulias/email-validator/src/Validation/RFCValidation.php
deleted file mode 100644
index f59cbfc..0000000
--- a/vendor/egulias/email-validator/src/Validation/RFCValidation.php
+++ /dev/null
@@ -1,54 +0,0 @@
-parse($email);
-            $this->warnings = $parser->getWarnings();
-            if ($result->isInvalid()) {
-                /** @psalm-suppress PropertyTypeCoercion */
-                $this->error = $result;
-                return false;
-            }
-        } catch (\Exception $invalid) {
-            $this->error = new InvalidEmail(new ExceptionFound($invalid), '');
-            return false;
-        }
-
-        return true;
-    }
-
-    public function getError(): ?InvalidEmail
-    {
-        return $this->error;
-    }
-
-    /**
-     * @return Warning[]
-     */
-    public function getWarnings(): array
-    {
-        return $this->warnings;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/AddressLiteral.php b/vendor/egulias/email-validator/src/Warning/AddressLiteral.php
deleted file mode 100644
index 474ff0e..0000000
--- a/vendor/egulias/email-validator/src/Warning/AddressLiteral.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Address literal in domain part';
-        $this->rfcNumber = 5321;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php b/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php
deleted file mode 100644
index 8bac12b..0000000
--- a/vendor/egulias/email-validator/src/Warning/CFWSNearAt.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = "Deprecated folding white space near @";
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php b/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php
deleted file mode 100644
index ba57601..0000000
--- a/vendor/egulias/email-validator/src/Warning/CFWSWithFWS.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = 'Folding whites space followed by folding white space';
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/Comment.php b/vendor/egulias/email-validator/src/Warning/Comment.php
deleted file mode 100644
index 6508295..0000000
--- a/vendor/egulias/email-validator/src/Warning/Comment.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = "Comments found in this email";
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php b/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php
deleted file mode 100644
index a257807..0000000
--- a/vendor/egulias/email-validator/src/Warning/DeprecatedComment.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = 'Deprecated comments';
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/DomainLiteral.php b/vendor/egulias/email-validator/src/Warning/DomainLiteral.php
deleted file mode 100644
index 034388c..0000000
--- a/vendor/egulias/email-validator/src/Warning/DomainLiteral.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Domain Literal';
-        $this->rfcNumber = 5322;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/EmailTooLong.php b/vendor/egulias/email-validator/src/Warning/EmailTooLong.php
deleted file mode 100644
index d25ad12..0000000
--- a/vendor/egulias/email-validator/src/Warning/EmailTooLong.php
+++ /dev/null
@@ -1,15 +0,0 @@
-message = 'Email is too long, exceeds ' . EmailParser::EMAIL_MAX_LENGTH;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php b/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php
deleted file mode 100644
index 3ecd5bc..0000000
--- a/vendor/egulias/email-validator/src/Warning/IPV6BadChar.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Bad char in IPV6 domain literal';
-        $this->rfcNumber = 5322;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php b/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php
deleted file mode 100644
index 3f0c2f2..0000000
--- a/vendor/egulias/email-validator/src/Warning/IPV6ColonEnd.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = ':: found at the end of the domain literal';
-        $this->rfcNumber = 5322;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php b/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php
deleted file mode 100644
index 742fb3b..0000000
--- a/vendor/egulias/email-validator/src/Warning/IPV6ColonStart.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = ':: found at the start of the domain literal';
-        $this->rfcNumber = 5322;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php b/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php
deleted file mode 100644
index 59c3037..0000000
--- a/vendor/egulias/email-validator/src/Warning/IPV6Deprecated.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Deprecated form of IPV6';
-        $this->rfcNumber = 5321;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php b/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php
deleted file mode 100644
index d406602..0000000
--- a/vendor/egulias/email-validator/src/Warning/IPV6DoubleColon.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Double colon found after IPV6 tag';
-        $this->rfcNumber = 5322;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php b/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php
deleted file mode 100644
index 551bc3a..0000000
--- a/vendor/egulias/email-validator/src/Warning/IPV6GroupCount.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Group count is not IPV6 valid';
-        $this->rfcNumber = 5322;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php b/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php
deleted file mode 100644
index 7f8a410..0000000
--- a/vendor/egulias/email-validator/src/Warning/IPV6MaxGroups.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'Reached the maximum number of IPV6 groups allowed';
-        $this->rfcNumber = 5321;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/LocalTooLong.php b/vendor/egulias/email-validator/src/Warning/LocalTooLong.php
deleted file mode 100644
index b46b874..0000000
--- a/vendor/egulias/email-validator/src/Warning/LocalTooLong.php
+++ /dev/null
@@ -1,15 +0,0 @@
-message = 'Local part is too long, exceeds 64 chars (octets)';
-        $this->rfcNumber = 5322;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php b/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php
deleted file mode 100644
index bddb96b..0000000
--- a/vendor/egulias/email-validator/src/Warning/NoDNSMXRecord.php
+++ /dev/null
@@ -1,14 +0,0 @@
-message = 'No MX DSN record was found for this email';
-        $this->rfcNumber = 5321;
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php b/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php
deleted file mode 100644
index 412fd49..0000000
--- a/vendor/egulias/email-validator/src/Warning/ObsoleteDTEXT.php
+++ /dev/null
@@ -1,14 +0,0 @@
-rfcNumber = 5322;
-        $this->message = 'Obsolete DTEXT in domain literal';
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/QuotedPart.php b/vendor/egulias/email-validator/src/Warning/QuotedPart.php
deleted file mode 100644
index c3e017d..0000000
--- a/vendor/egulias/email-validator/src/Warning/QuotedPart.php
+++ /dev/null
@@ -1,17 +0,0 @@
-message = "Deprecated Quoted String found between $prevToken and $postToken";
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/QuotedString.php b/vendor/egulias/email-validator/src/Warning/QuotedString.php
deleted file mode 100644
index c152ec2..0000000
--- a/vendor/egulias/email-validator/src/Warning/QuotedString.php
+++ /dev/null
@@ -1,17 +0,0 @@
-message = "Quoted String found between $prevToken and $postToken";
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/TLD.php b/vendor/egulias/email-validator/src/Warning/TLD.php
deleted file mode 100644
index 10cec28..0000000
--- a/vendor/egulias/email-validator/src/Warning/TLD.php
+++ /dev/null
@@ -1,13 +0,0 @@
-message = "RFC5321, TLD";
-    }
-}
diff --git a/vendor/egulias/email-validator/src/Warning/Warning.php b/vendor/egulias/email-validator/src/Warning/Warning.php
deleted file mode 100644
index 7adb3b8..0000000
--- a/vendor/egulias/email-validator/src/Warning/Warning.php
+++ /dev/null
@@ -1,53 +0,0 @@
-message;
-    }
-
-    /**
-     * @return int
-     */
-    public function code()
-    {
-        return self::CODE;
-    }
-
-    /**
-     * @return int
-     */
-    public function RFCNumber()
-    {
-        return $this->rfcNumber;
-    }
-
-    /**
-     * @return string
-     */
-    public function __toString(): string
-    {
-        return $this->message() . " rfc: " .  $this->rfcNumber . "internal code: " . static::CODE;
-    }
-}
diff --git a/vendor/masterminds/html5/LICENSE.txt b/vendor/masterminds/html5/LICENSE.txt
deleted file mode 100644
index 3c275b5..0000000
--- a/vendor/masterminds/html5/LICENSE.txt
+++ /dev/null
@@ -1,66 +0,0 @@
-## HTML5-PHP License
-
-Copyright (c) 2013 The Authors of HTML5-PHP
-
-Matt Butcher - mattbutcher@google.com
-Matt Farina - matt@mattfarina.com
-Asmir Mustafic - goetas@gmail.com
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in 
-the Software without restriction, including without limitation the rights to 
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-## HTML5Lib License
-
-Portions of this are based on html5lib's PHP version, which was a
-sub-project of html5lib. The following is the list of contributors from
-html5lib:
-
-html5lib:
-
-Copyright (c) 2006-2009 The Authors
-
-Contributors:
-James Graham - jg307@cam.ac.uk
-Anne van Kesteren - annevankesteren@gmail.com
-Lachlan Hunt - lachlan.hunt@lachy.id.au
-Matt McDonald - kanashii@kanashii.ca
-Sam Ruby - rubys@intertwingly.net
-Ian Hickson (Google) - ian@hixie.ch
-Thomas Broyer - t.broyer@ltgt.net
-Jacques Distler - distler@golem.ph.utexas.edu
-Henri Sivonen - hsivonen@iki.fi
-Adam Barth - abarth@webkit.org
-Eric Seidel - eric@webkit.org
-The Mozilla Foundation (contributions from Henri Sivonen since 2008)
-David Flanagan (Mozilla) - dflanagan@mozilla.com
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in 
-the Software without restriction, including without limitation the rights to 
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
-the Software, and to permit persons to whom the Software is furnished to do so,
-subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
-FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
-COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
-IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/vendor/masterminds/html5/README.md b/vendor/masterminds/html5/README.md
deleted file mode 100644
index fb6e562..0000000
--- a/vendor/masterminds/html5/README.md
+++ /dev/null
@@ -1,270 +0,0 @@
-> # UKRAINE NEEDS YOUR HELP NOW!
->
-> On 24 February 2022, Russian [President Vladimir Putin ordered an invasion of Ukraine by Russian Armed Forces](https://www.bbc.com/news/world-europe-60504334).
->
-> Your support is urgently needed.
->
-> - Donate to the volunteers. Here is the volunteer fund helping the Ukrainian army to provide all the necessary equipment:
->  https://bank.gov.ua/en/news/all/natsionalniy-bank-vidkriv-spetsrahunok-dlya-zboru-koshtiv-na-potrebi-armiyi or https://savelife.in.ua/en/donate/
-> - Triple-check social media sources. Russian disinformation is attempting to coverup and distort the reality in Ukraine.
-> - Help Ukrainian refugees who are fleeing Russian attacks and shellings: https://www.globalcitizen.org/en/content/ways-to-help-ukraine-conflict/
-> -  Put pressure on your political representatives to provide help to Ukraine.
-> -  Believe in the Ukrainian people, they will not surrender, they don't have another Ukraine.
->
-> THANK YOU!
-----
-
-# HTML5-PHP
-
-HTML5 is a standards-compliant HTML5 parser and writer written entirely in PHP.
-It is stable and used in many production websites, and has
-well over [five million downloads](https://packagist.org/packages/masterminds/html5).
-
-HTML5 provides the following features.
-
-- An HTML5 serializer
-- Support for PHP namespaces
-- Composer support
-- Event-based (SAX-like) parser
-- A DOM tree builder
-- Interoperability with [QueryPath](https://github.com/technosophos/querypath)
-- Runs on **PHP** 5.3.0 or newer
-
-[![CI](https://github.com/Masterminds/html5-php/actions/workflows/ci.yaml/badge.svg)](https://github.com/Masterminds/html5-php/actions/workflows/ci.yaml)
-[![Latest Stable Version](https://poser.pugx.org/masterminds/html5/v/stable.png)](https://packagist.org/packages/masterminds/html5)
-[![Code Coverage](https://scrutinizer-ci.com/g/Masterminds/html5-php/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/Masterminds/html5-php/?branch=master)
-[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/Masterminds/html5-php/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/Masterminds/html5-php/?branch=master)
-[![Stability: Sustained](https://masterminds.github.io/stability/sustained.svg)](https://masterminds.github.io/stability/sustained.html)
-
-## Installation
-
-Install HTML5-PHP using [composer](http://getcomposer.org/).
-
-By adding the `masterminds/html5` dependency to your `composer.json` file:
-
-```json
-{
-  "require" : {
-    "masterminds/html5": "^2.0"
-  },
-}
-```
-
-By invoking require command via composer executable:
-
-```bash
-composer require masterminds/html5
-```
-
-## Basic Usage
-
-HTML5-PHP has a high-level API and a low-level API.
-
-Here is how you use the high-level `HTML5` library API:
-
-```php
-
-  
-    TEST
-  
-  
-    

Hello World

-

This is a test of the HTML5 parser.

- - -HERE; - -// Parse the document. $dom is a DOMDocument. -$html5 = new HTML5(); -$dom = $html5->loadHTML($html); - -// Render it as HTML5: -print $html5->saveHTML($dom); - -// Or save it to a file: -$html5->save($dom, 'out.html'); -``` - -The `$dom` created by the parser is a full `DOMDocument` object. And the -`save()` and `saveHTML()` methods will take any DOMDocument. - -### Options - -It is possible to pass in an array of configuration options when loading -an HTML5 document. - -```php -// An associative array of options -$options = array( - 'option_name' => 'option_value', -); - -// Provide the options to the constructor -$html5 = new HTML5($options); - -$dom = $html5->loadHTML($html); -``` - -The following options are supported: - -* `encode_entities` (boolean): Indicates that the serializer should aggressively - encode characters as entities. Without this, it only encodes the bare - minimum. -* `disable_html_ns` (boolean): Prevents the parser from automatically - assigning the HTML5 namespace to the DOM document. This is for - non-namespace aware DOM tools. -* `target_document` (\DOMDocument): A DOM document that will be used as the - destination for the parsed nodes. -* `implicit_namespaces` (array): An assoc array of namespaces that should be - used by the parser. Name is tag prefix, value is NS URI. - -## The Low-Level API - -This library provides the following low-level APIs that you can use to -create more customized HTML5 tools: - -- A SAX-like event-based parser that you can hook into for special kinds -of parsing. -- A flexible error-reporting mechanism that can be tuned to document -syntax checking. -- A DOM implementation that uses PHP's built-in DOM library. - -The unit tests exercise each piece of the API, and every public function -is well-documented. - -### Parser Design - -The parser is designed as follows: - -- The `Scanner` handles scanning on behalf of the parser. -- The `Tokenizer` requests data off of the scanner, parses it, clasifies -it, and sends it to an `EventHandler`. It is a *recursive descent parser.* -- The `EventHandler` receives notifications and data for each specific -semantic event that occurs during tokenization. -- The `DOMBuilder` is an `EventHandler` that listens for tokenizing -events and builds a document tree (`DOMDocument`) based on the events. - -### Serializer Design - -The serializer takes a data structure (the `DOMDocument`) and transforms -it into a character representation -- an HTML5 document. - -The serializer is broken into three parts: - -- The `OutputRules` contain the rules to turn DOM elements into strings. The -rules are an implementation of the interface `RulesInterface` allowing for -different rule sets to be used. -- The `Traverser`, which is a special-purpose tree walker. It visits -each node node in the tree and uses the `OutputRules` to transform the node -into a string. -- `HTML5` manages the `Traverser` and stores the resultant data -in the correct place. - -The serializer (`save()`, `saveHTML()`) follows the -[section 8.9 of the HTML 5.0 spec](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments). -So tags are serialized according to these rules: - -- A tag with children: <foo>CHILDREN</foo> -- A tag that cannot have content: <foo> (no closing tag) -- A tag that could have content, but doesn't: <foo></foo> - -## Known Issues (Or, Things We Designed Against the Spec) - -Please check the issue queue for a full list, but the following are -issues known issues that are not presently on the roadmap: - -- Namespaces: HTML5 only [supports a selected list of namespaces](http://www.w3.org/TR/html5/infrastructure.html#namespaces) - and they do not operate in the same way as XML namespaces. A `:` has no special - meaning. - By default the parser does not support XML style namespaces via `:`; - to enable the XML namespaces see the [XML Namespaces section](#xml-namespaces) -- Scripts: This parser does not contain a JavaScript or a CSS - interpreter. While one may be supplied, not all features will be - supported. -- Reentrance: The current parser is not re-entrant. (Thus you can't pause - the parser to modify the HTML string mid-parse.) -- Validation: The current tree builder is **not** a validating parser. - While it will correct some HTML, it does not check that the HTML - conforms to the standard. (Should you wish, you can build a validating - parser by extending DOMTree or building your own EventHandler - implementation.) - * There is limited support for insertion modes. - * Some autocorrection is done automatically. - * Per the spec, many legacy tags are admitted and correctly handled, - even though they are technically not part of HTML5. -- Attribute names and values: Due to the implementation details of the - PHP implementation of DOM, attribute names that do not follow the - XML 1.0 standard are not inserted into the DOM. (Effectively, they - are ignored.) If you've got a clever fix for this, jump in! -- Processor Instructions: The HTML5 spec does not allow processor - instructions. We do. Since this is a server-side library, we think - this is useful. And that means, dear reader, that in some cases you - can parse the HTML from a mixed PHP/HTML document. This, however, - is an incidental feature, not a core feature. -- HTML manifests: Unsupported. -- PLAINTEXT: Unsupported. -- Adoption Agency Algorithm: Not yet implemented. (8.2.5.4.7) - -## XML Namespaces - -To use XML style namespaces you have to configure well the main `HTML5` instance. - -```php -use Masterminds\HTML5; -$html = new HTML5(array( - "xmlNamespaces" => true -)); - -$dom = $html->loadHTML(''); - -$dom->documentElement->namespaceURI; // http://www.example.com - -``` - -You can also add some default prefixes that will not require the namespace declaration, -but its elements will be namespaced. - -```php -use Masterminds\HTML5; -$html = new HTML5(array( - "implicitNamespaces"=>array( - "t"=>"http://www.example.com" - ) -)); - -$dom = $html->loadHTML(''); - -$dom->documentElement->namespaceURI; // http://www.example.com - -``` - -## Thanks to... - -The dedicated (and patient) contributors of patches small and large, -who have already made this library better.See the CREDITS file for -a list of contributors. - -We owe a huge debt of gratitude to the original authors of html5lib. - -While not much of the original parser remains, we learned a lot from -reading the html5lib library. And some pieces remain here. In -particular, much of the UTF-8 and Unicode handling is derived from the -html5lib project. - -## License - -This software is released under the MIT license. The original html5lib -library was also released under the MIT license. - -See LICENSE.txt - -Certain files contain copyright assertions by specific individuals -involved with html5lib. Those have been retained where appropriate. diff --git a/vendor/masterminds/html5/RELEASE.md b/vendor/masterminds/html5/RELEASE.md deleted file mode 100644 index 33007ed..0000000 --- a/vendor/masterminds/html5/RELEASE.md +++ /dev/null @@ -1,157 +0,0 @@ -# Release Notes - -2.7.6 (2021-08-18) - -- #218: Address comment handling issues - -2.7.5 (2021-07-01) - -- #204: Travis: Enable tests on PHP 8.0 -- #207: Fix PHP 8.1 deprecations - -2.7.4 (2020-10-01) - -- #191: Fix travisci build -- #195: Add .gitattributes file with export-ignore rules -- #194: Fix query parameter parsed as character entity - -2.7.3 (2020-07-05) - -- #190: mitigate cyclic reference between output rules and the traverser objects - -2.7.2 (2020-07-01) - -- #187: Fixed memory leak in HTML5::saveHTML() -- #186: Add special case for end tag
- -2.7.1 (2020-06-14) - -- #171: add PHP 7.4 job -- #178: Prevent infinite loop on un-terminated entity declaration at EOF - -2.7.0 (2019-07-25) - -- #164: Drop HHVM support -- #168: Set default encoding in the DOMDocument object - -2.6.0 (2019-03-10) - -- #163: Allow to pass a charset to the Scanner - -2.5.0 (2018-12-27) - -- #162, #161, #155, #154, #153, #151: big performance improvements -- #156: fixed typos -- #160: adopt and enforce code style -- #159: remove deprecated php unit base test case -- #150: backport changes from old master branch - -2.4.0 (2018-11-17) - -- #148: Improve performance by moving sequence matching -- #147: Improve the Tokenizer performance -- #146: Improve performance by relying on a native string instead of InputStream -- #144: Add DOM extension in composer.json -- #145: Add more extensions on composer.json, improve phpdocs and remove dead code -- #143: Remove experimental comment - -2.3.1 (2018-10-18) - -- #121: Audio is not a block tag (fixed by #141) -- #136: Handle illegal self-closing according to spec (fixed by #137) -- #141: Minor fixes in the README - -2.3.0 (2017-09-04) - -- #129: image within inline svg breaks system (fixed by #133) -- #131: ² does not work (fixed by #132) -- #134: Improve tokenizer performance by 20% (alternative version of #130 thanks to @MichaelHeerklotz) -- #135: Raw & in attributes - -2.2.2 (2016-09-22) - -- #116: In XML mode, tags are case sensitive -- #115: Fix PHP Notice in OutputRules -- #112: fix parsing of options of an optgroup -- #111: Adding test for the address tag - -2.2.1 (2016-05-10) - -- #109: Fixed issue where address tag could be written without closing tag (thanks sylus) - -2.2.0 (2016-04-11) - -- #105: Enable composer cache (for CI/CD) -- #100: Use mb_substitute_character inset of ini_set for environments where ini_set is disable (e.g., shared hosting) -- #98: Allow link, meta, style tags in noscript tags -- #96: Fixed xml:href on svgs that use the "use" breaking -- #94: Counting UTF8 characters performance improvement -- #93: Use newer version of coveralls package -- #90: Remove duplicate test -- #87: Allow multiple root nodes - -2.1.2 (2015-06-07) -- #82: Support for PHP7 -- #84: Improved boolean attribute handling - -2.1.1 (2015-03-23) -- #78: Fixes bug where unmatched entity like string drops everything after &. - -2.1.0 (2015-02-01) -- #74: Added `disable_html_ns` and `target_doc` dom parsing options -- Unified option names -- #73: Fixed alphabet, ß now can be detected -- #75 and #76: Allow whitespace in RCDATA tags -- #77: Fixed parsing blunder for json embeds -- #72: Add options to HTML methods - -2.0.2 (2014-12-17) -- #50: empty document handling -- #63: tags with strange capitalization -- #65: dashes and underscores as allowed characters in tag names -- #68: Fixed issue with non-inline elements inside inline containers - -2.0.1 (2014-09-23) -- #59: Fixed issue parsing some fragments. -- #56: Incorrectly saw 0 as empty string -- Sami as new documentation generator - -2.0.0 (2014-07-28) -- #53: Improved boolean attributes handling -- #52: Facebook HHVM compatibility -- #48: Adopted PSR-2 as coding standard -- #47: Moved everything to Masterminds namespace -- #45: Added custom namespaces -- #44: Added support to XML-style namespaces -- #37: Refactored HTML5 class removing static methods - -1.0.5 (2014-06-10) -- #38: Set the dev-master branch as the 1.0.x branch for composer (goetas) -- #34: Tests use PSR-4 for autoloading. (goetas) -- #40, #41: Fix entity handling in RCDATA sections. (KitaitiMakoto) -- #32: Fixed issue where wharacter references were being incorrectly encoded in style tags. - -1.0.4 (2014-04-29) -- #30/#31 Don't throw an exception for invalid tag names. - -1.0.3 (2014-02-28) -- #23 and #29: Ignore attributes with illegal chars in name for the PHP DOM. - -1.0.2 (2014-02-12) -- #23: Handle missing tag close in attribute list. -- #25: Fixed text escaping in the serializer (HTML% 8.3). -- #27: Fixed tests on Windows: changed "\n" -> PHP_EOL. -- #28: Fixed infinite loop for char "&" in unquoted attribute in parser. -- #26: Updated tag name case handling to deal with uppercase usage. -- #24: Newlines and tabs are allowed inside quoted attributes (HTML5 8.2.4). -- Fixed Travis CI testing. - -1.0.1 (2013-11-07) -- CDATA encoding is improved. (Non-standard; Issue #19) -- Some parser rules were not returning the new current element. (Issue #20) -- Added, to the README, details on code test coverage and to packagist version. -- Fixed processor instructions. -- Improved test coverage and documentation coverage. - -1.0.0 (2013-10-02) -- Initial release. diff --git a/vendor/masterminds/html5/UPGRADING.md b/vendor/masterminds/html5/UPGRADING.md deleted file mode 100644 index 76e3a19..0000000 --- a/vendor/masterminds/html5/UPGRADING.md +++ /dev/null @@ -1,21 +0,0 @@ -From 1.x to 2.x -================= - -- All classes uses `Masterminds` namespace. -- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed. - - Before: - - $dom = \HTML5::loadHTML('....'); - \HTML5::saveHTML($dom); - - After: - - use Masterminds\HTML5; - - $html5 = new HTML5(); - - $dom = $html5->loadHTML('....'); - echo $html5->saveHTML($dom); - - diff --git a/vendor/masterminds/html5/bin/entities.php b/vendor/masterminds/html5/bin/entities.php deleted file mode 100644 index 56323a3..0000000 --- a/vendor/masterminds/html5/bin/entities.php +++ /dev/null @@ -1,26 +0,0 @@ - $obj) { - $sname = substr($name, 1, -1); - $table[$sname] = $obj->characters; -} - -echo '=5.3.0" - }, - "require-dev": { - "phpunit/phpunit" : "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8 || ^9" - }, - "autoload": { - "psr-4": {"Masterminds\\": "src"} - }, - "autoload-dev": { - "psr-4": {"Masterminds\\HTML5\\Tests\\": "test/HTML5"} - }, - "extra": { - "branch-alias": { - "dev-master": "2.7-dev" - } - } -} diff --git a/vendor/masterminds/html5/src/HTML5.php b/vendor/masterminds/html5/src/HTML5.php deleted file mode 100644 index c857145..0000000 --- a/vendor/masterminds/html5/src/HTML5.php +++ /dev/null @@ -1,246 +0,0 @@ - false, - - // Prevents the parser from automatically assigning the HTML5 namespace to the DOM document. - 'disable_html_ns' => false, - ); - - protected $errors = array(); - - public function __construct(array $defaultOptions = array()) - { - $this->defaultOptions = array_merge($this->defaultOptions, $defaultOptions); - } - - /** - * Get the current default options. - * - * @return array - */ - public function getOptions() - { - return $this->defaultOptions; - } - - /** - * Load and parse an HTML file. - * - * This will apply the HTML5 parser, which is tolerant of many - * varieties of HTML, including XHTML 1, HTML 4, and well-formed HTML - * 3. Note that in these cases, not all of the old data will be - * preserved. For example, XHTML's XML declaration will be removed. - * - * The rules governing parsing are set out in the HTML 5 spec. - * - * @param string|resource $file The path to the file to parse. If this is a resource, it is - * assumed to be an open stream whose pointer is set to the first - * byte of input. - * @param array $options Configuration options when parsing the HTML. - * - * @return \DOMDocument A DOM document. These object type is defined by the libxml - * library, and should have been included with your version of PHP. - */ - public function load($file, array $options = array()) - { - // Handle the case where file is a resource. - if (is_resource($file)) { - return $this->parse(stream_get_contents($file), $options); - } - - return $this->parse(file_get_contents($file), $options); - } - - /** - * Parse a HTML Document from a string. - * - * Take a string of HTML 5 (or earlier) and parse it into a - * DOMDocument. - * - * @param string $string A html5 document as a string. - * @param array $options Configuration options when parsing the HTML. - * - * @return \DOMDocument A DOM document. DOM is part of libxml, which is included with - * almost all distribtions of PHP. - */ - public function loadHTML($string, array $options = array()) - { - return $this->parse($string, $options); - } - - /** - * Convenience function to load an HTML file. - * - * This is here to provide backwards compatibility with the - * PHP DOM implementation. It simply calls load(). - * - * @param string $file The path to the file to parse. If this is a resource, it is - * assumed to be an open stream whose pointer is set to the first - * byte of input. - * @param array $options Configuration options when parsing the HTML. - * - * @return \DOMDocument A DOM document. These object type is defined by the libxml - * library, and should have been included with your version of PHP. - */ - public function loadHTMLFile($file, array $options = array()) - { - return $this->load($file, $options); - } - - /** - * Parse a HTML fragment from a string. - * - * @param string $string the HTML5 fragment as a string - * @param array $options Configuration options when parsing the HTML - * - * @return \DOMDocumentFragment A DOM fragment. The DOM is part of libxml, which is included with - * almost all distributions of PHP. - */ - public function loadHTMLFragment($string, array $options = array()) - { - return $this->parseFragment($string, $options); - } - - /** - * Return all errors encountered into parsing phase. - * - * @return array - */ - public function getErrors() - { - return $this->errors; - } - - /** - * Return true it some errors were encountered into parsing phase. - * - * @return bool - */ - public function hasErrors() - { - return count($this->errors) > 0; - } - - /** - * Parse an input string. - * - * @param string $input - * @param array $options - * - * @return \DOMDocument - */ - public function parse($input, array $options = array()) - { - $this->errors = array(); - $options = array_merge($this->defaultOptions, $options); - $events = new DOMTreeBuilder(false, $options); - $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8'); - $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML); - - $parser->parse(); - $this->errors = $events->getErrors(); - - return $events->document(); - } - - /** - * Parse an input stream where the stream is a fragment. - * - * Lower-level loading function. This requires an input stream instead - * of a string, file, or resource. - * - * @param string $input The input data to parse in the form of a string. - * @param array $options An array of options. - * - * @return \DOMDocumentFragment - */ - public function parseFragment($input, array $options = array()) - { - $options = array_merge($this->defaultOptions, $options); - $events = new DOMTreeBuilder(true, $options); - $scanner = new Scanner($input, !empty($options['encoding']) ? $options['encoding'] : 'UTF-8'); - $parser = new Tokenizer($scanner, $events, !empty($options['xmlNamespaces']) ? Tokenizer::CONFORMANT_XML : Tokenizer::CONFORMANT_HTML); - - $parser->parse(); - $this->errors = $events->getErrors(); - - return $events->fragment(); - } - - /** - * Save a DOM into a given file as HTML5. - * - * @param mixed $dom The DOM to be serialized. - * @param string|resource $file The filename to be written or resource to write to. - * @param array $options Configuration options when serializing the DOM. These include: - * - encode_entities: Text written to the output is escaped by default and not all - * entities are encoded. If this is set to true all entities will be encoded. - * Defaults to false. - */ - public function save($dom, $file, $options = array()) - { - $close = true; - if (is_resource($file)) { - $stream = $file; - $close = false; - } else { - $stream = fopen($file, 'wb'); - } - $options = array_merge($this->defaultOptions, $options); - $rules = new OutputRules($stream, $options); - $trav = new Traverser($dom, $stream, $rules, $options); - - $trav->walk(); - /* - * release the traverser to avoid cyclic references and allow PHP to free memory without waiting for gc_collect_cycles - */ - $rules->unsetTraverser(); - if ($close) { - fclose($stream); - } - } - - /** - * Convert a DOM into an HTML5 string. - * - * @param mixed $dom The DOM to be serialized. - * @param array $options Configuration options when serializing the DOM. These include: - * - encode_entities: Text written to the output is escaped by default and not all - * entities are encoded. If this is set to true all entities will be encoded. - * Defaults to false. - * - * @return string A HTML5 documented generated from the DOM. - */ - public function saveHTML($dom, $options = array()) - { - $stream = fopen('php://temp', 'wb'); - $this->save($dom, $stream, array_merge($this->defaultOptions, $options)); - - $html = stream_get_contents($stream, -1, 0); - - fclose($stream); - - return $html; - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Elements.php b/vendor/masterminds/html5/src/HTML5/Elements.php deleted file mode 100644 index 5d8cfd4..0000000 --- a/vendor/masterminds/html5/src/HTML5/Elements.php +++ /dev/null @@ -1,637 +0,0 @@ - [PARENT-TAG-NAME-TO-CLOSE1, PARENT-TAG-NAME-TO-CLOSE2, ...]. - * - * Order is important, after auto-closing one parent with might have to close also their parent. - * - * @var array - */ - public static $optionalEndElementsParentsToClose = array( - 'tr' => array('td', 'tr'), - 'td' => array('td', 'th'), - 'th' => array('td', 'th'), - 'tfoot' => array('td', 'th', 'tr', 'tbody', 'thead'), - 'tbody' => array('td', 'th', 'tr', 'thead'), - ); - - /** - * The HTML5 elements as defined in http://dev.w3.org/html5/markup/elements.html. - * - * @var array - */ - public static $html5 = array( - 'a' => 1, - 'abbr' => 1, - 'address' => 65, // NORMAL | BLOCK_TAG - 'area' => 9, // NORMAL | VOID_TAG - 'article' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'aside' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'audio' => 1, // NORMAL - 'b' => 1, - 'base' => 9, // NORMAL | VOID_TAG - 'bdi' => 1, - 'bdo' => 1, - 'blockquote' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'body' => 1, - 'br' => 9, // NORMAL | VOID_TAG - 'button' => 1, - 'canvas' => 65, // NORMAL | BLOCK_TAG - 'caption' => 1, - 'cite' => 1, - 'code' => 1, - 'col' => 9, // NORMAL | VOID_TAG - 'colgroup' => 1, - 'command' => 9, // NORMAL | VOID_TAG - // "data" => 1, // This is highly experimental and only part of the whatwg spec (not w3c). See https://developer.mozilla.org/en-US/docs/HTML/Element/data - 'datalist' => 1, - 'dd' => 65, // NORMAL | BLOCK_TAG - 'del' => 1, - 'details' => 17, // NORMAL | AUTOCLOSE_P, - 'dfn' => 1, - 'dialog' => 17, // NORMAL | AUTOCLOSE_P, - 'div' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'dl' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'dt' => 1, - 'em' => 1, - 'embed' => 9, // NORMAL | VOID_TAG - 'fieldset' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'figcaption' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'figure' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'footer' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'form' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h1' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h2' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h3' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h4' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h5' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'h6' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'head' => 1, - 'header' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'hgroup' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'hr' => 73, // NORMAL | VOID_TAG - 'html' => 1, - 'i' => 1, - 'iframe' => 3, // NORMAL | TEXT_RAW - 'img' => 9, // NORMAL | VOID_TAG - 'input' => 9, // NORMAL | VOID_TAG - 'kbd' => 1, - 'ins' => 1, - 'keygen' => 9, // NORMAL | VOID_TAG - 'label' => 1, - 'legend' => 1, - 'li' => 1, - 'link' => 9, // NORMAL | VOID_TAG - 'map' => 1, - 'mark' => 1, - 'menu' => 17, // NORMAL | AUTOCLOSE_P, - 'meta' => 9, // NORMAL | VOID_TAG - 'meter' => 1, - 'nav' => 17, // NORMAL | AUTOCLOSE_P, - 'noscript' => 65, // NORMAL | BLOCK_TAG - 'object' => 1, - 'ol' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'optgroup' => 1, - 'option' => 1, - 'output' => 65, // NORMAL | BLOCK_TAG - 'p' => 209, // NORMAL | AUTOCLOSE_P | BLOCK_TAG | BLOCK_ONLY_INLINE - 'param' => 9, // NORMAL | VOID_TAG - 'pre' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'progress' => 1, - 'q' => 1, - 'rp' => 1, - 'rt' => 1, - 'ruby' => 1, - 's' => 1, - 'samp' => 1, - 'script' => 3, // NORMAL | TEXT_RAW - 'section' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'select' => 1, - 'small' => 1, - 'source' => 9, // NORMAL | VOID_TAG - 'span' => 1, - 'strong' => 1, - 'style' => 3, // NORMAL | TEXT_RAW - 'sub' => 1, - 'summary' => 17, // NORMAL | AUTOCLOSE_P, - 'sup' => 1, - 'table' => 65, // NORMAL | BLOCK_TAG - 'tbody' => 1, - 'td' => 1, - 'textarea' => 5, // NORMAL | TEXT_RCDATA - 'tfoot' => 65, // NORMAL | BLOCK_TAG - 'th' => 1, - 'thead' => 1, - 'time' => 1, - 'title' => 5, // NORMAL | TEXT_RCDATA - 'tr' => 1, - 'track' => 9, // NORMAL | VOID_TAG - 'u' => 1, - 'ul' => 81, // NORMAL | AUTOCLOSE_P | BLOCK_TAG - 'var' => 1, - 'video' => 1, - 'wbr' => 9, // NORMAL | VOID_TAG - - // Legacy? - 'basefont' => 8, // VOID_TAG - 'bgsound' => 8, // VOID_TAG - 'noframes' => 2, // RAW_TEXT - 'frame' => 9, // NORMAL | VOID_TAG - 'frameset' => 1, - 'center' => 16, - 'dir' => 16, - 'listing' => 16, // AUTOCLOSE_P - 'plaintext' => 48, // AUTOCLOSE_P | TEXT_PLAINTEXT - 'applet' => 0, - 'marquee' => 0, - 'isindex' => 8, // VOID_TAG - 'xmp' => 20, // AUTOCLOSE_P | VOID_TAG | RAW_TEXT - 'noembed' => 2, // RAW_TEXT - ); - - /** - * The MathML elements. - * See http://www.w3.org/wiki/MathML/Elements. - * - * In our case we are only concerned with presentation MathML and not content - * MathML. There is a nice list of this subset at https://developer.mozilla.org/en-US/docs/MathML/Element. - * - * @var array - */ - public static $mathml = array( - 'maction' => 1, - 'maligngroup' => 1, - 'malignmark' => 1, - 'math' => 1, - 'menclose' => 1, - 'merror' => 1, - 'mfenced' => 1, - 'mfrac' => 1, - 'mglyph' => 1, - 'mi' => 1, - 'mlabeledtr' => 1, - 'mlongdiv' => 1, - 'mmultiscripts' => 1, - 'mn' => 1, - 'mo' => 1, - 'mover' => 1, - 'mpadded' => 1, - 'mphantom' => 1, - 'mroot' => 1, - 'mrow' => 1, - 'ms' => 1, - 'mscarries' => 1, - 'mscarry' => 1, - 'msgroup' => 1, - 'msline' => 1, - 'mspace' => 1, - 'msqrt' => 1, - 'msrow' => 1, - 'mstack' => 1, - 'mstyle' => 1, - 'msub' => 1, - 'msup' => 1, - 'msubsup' => 1, - 'mtable' => 1, - 'mtd' => 1, - 'mtext' => 1, - 'mtr' => 1, - 'munder' => 1, - 'munderover' => 1, - ); - - /** - * The svg elements. - * - * The Mozilla documentation has a good list at https://developer.mozilla.org/en-US/docs/SVG/Element. - * The w3c list appears to be lacking in some areas like filter effect elements. - * That list can be found at http://www.w3.org/wiki/SVG/Elements. - * - * Note, FireFox appears to do a better job rendering filter effects than chrome. - * While they are in the spec I'm not sure how widely implemented they are. - * - * @var array - */ - public static $svg = array( - 'a' => 1, - 'altGlyph' => 1, - 'altGlyphDef' => 1, - 'altGlyphItem' => 1, - 'animate' => 1, - 'animateColor' => 1, - 'animateMotion' => 1, - 'animateTransform' => 1, - 'circle' => 1, - 'clipPath' => 1, - 'color-profile' => 1, - 'cursor' => 1, - 'defs' => 1, - 'desc' => 1, - 'ellipse' => 1, - 'feBlend' => 1, - 'feColorMatrix' => 1, - 'feComponentTransfer' => 1, - 'feComposite' => 1, - 'feConvolveMatrix' => 1, - 'feDiffuseLighting' => 1, - 'feDisplacementMap' => 1, - 'feDistantLight' => 1, - 'feFlood' => 1, - 'feFuncA' => 1, - 'feFuncB' => 1, - 'feFuncG' => 1, - 'feFuncR' => 1, - 'feGaussianBlur' => 1, - 'feImage' => 1, - 'feMerge' => 1, - 'feMergeNode' => 1, - 'feMorphology' => 1, - 'feOffset' => 1, - 'fePointLight' => 1, - 'feSpecularLighting' => 1, - 'feSpotLight' => 1, - 'feTile' => 1, - 'feTurbulence' => 1, - 'filter' => 1, - 'font' => 1, - 'font-face' => 1, - 'font-face-format' => 1, - 'font-face-name' => 1, - 'font-face-src' => 1, - 'font-face-uri' => 1, - 'foreignObject' => 1, - 'g' => 1, - 'glyph' => 1, - 'glyphRef' => 1, - 'hkern' => 1, - 'image' => 1, - 'line' => 1, - 'linearGradient' => 1, - 'marker' => 1, - 'mask' => 1, - 'metadata' => 1, - 'missing-glyph' => 1, - 'mpath' => 1, - 'path' => 1, - 'pattern' => 1, - 'polygon' => 1, - 'polyline' => 1, - 'radialGradient' => 1, - 'rect' => 1, - 'script' => 3, // NORMAL | RAW_TEXT - 'set' => 1, - 'stop' => 1, - 'style' => 3, // NORMAL | RAW_TEXT - 'svg' => 1, - 'switch' => 1, - 'symbol' => 1, - 'text' => 1, - 'textPath' => 1, - 'title' => 1, - 'tref' => 1, - 'tspan' => 1, - 'use' => 1, - 'view' => 1, - 'vkern' => 1, - ); - - /** - * Some attributes in SVG are case sensitive. - * - * This map contains key/value pairs with the key as the lowercase attribute - * name and the value with the correct casing. - */ - public static $svgCaseSensitiveAttributeMap = array( - 'attributename' => 'attributeName', - 'attributetype' => 'attributeType', - 'basefrequency' => 'baseFrequency', - 'baseprofile' => 'baseProfile', - 'calcmode' => 'calcMode', - 'clippathunits' => 'clipPathUnits', - 'contentscripttype' => 'contentScriptType', - 'contentstyletype' => 'contentStyleType', - 'diffuseconstant' => 'diffuseConstant', - 'edgemode' => 'edgeMode', - 'externalresourcesrequired' => 'externalResourcesRequired', - 'filterres' => 'filterRes', - 'filterunits' => 'filterUnits', - 'glyphref' => 'glyphRef', - 'gradienttransform' => 'gradientTransform', - 'gradientunits' => 'gradientUnits', - 'kernelmatrix' => 'kernelMatrix', - 'kernelunitlength' => 'kernelUnitLength', - 'keypoints' => 'keyPoints', - 'keysplines' => 'keySplines', - 'keytimes' => 'keyTimes', - 'lengthadjust' => 'lengthAdjust', - 'limitingconeangle' => 'limitingConeAngle', - 'markerheight' => 'markerHeight', - 'markerunits' => 'markerUnits', - 'markerwidth' => 'markerWidth', - 'maskcontentunits' => 'maskContentUnits', - 'maskunits' => 'maskUnits', - 'numoctaves' => 'numOctaves', - 'pathlength' => 'pathLength', - 'patterncontentunits' => 'patternContentUnits', - 'patterntransform' => 'patternTransform', - 'patternunits' => 'patternUnits', - 'pointsatx' => 'pointsAtX', - 'pointsaty' => 'pointsAtY', - 'pointsatz' => 'pointsAtZ', - 'preservealpha' => 'preserveAlpha', - 'preserveaspectratio' => 'preserveAspectRatio', - 'primitiveunits' => 'primitiveUnits', - 'refx' => 'refX', - 'refy' => 'refY', - 'repeatcount' => 'repeatCount', - 'repeatdur' => 'repeatDur', - 'requiredextensions' => 'requiredExtensions', - 'requiredfeatures' => 'requiredFeatures', - 'specularconstant' => 'specularConstant', - 'specularexponent' => 'specularExponent', - 'spreadmethod' => 'spreadMethod', - 'startoffset' => 'startOffset', - 'stddeviation' => 'stdDeviation', - 'stitchtiles' => 'stitchTiles', - 'surfacescale' => 'surfaceScale', - 'systemlanguage' => 'systemLanguage', - 'tablevalues' => 'tableValues', - 'targetx' => 'targetX', - 'targety' => 'targetY', - 'textlength' => 'textLength', - 'viewbox' => 'viewBox', - 'viewtarget' => 'viewTarget', - 'xchannelselector' => 'xChannelSelector', - 'ychannelselector' => 'yChannelSelector', - 'zoomandpan' => 'zoomAndPan', - ); - - /** - * Some SVG elements are case sensitive. - * This map contains these. - * - * The map contains key/value store of the name is lowercase as the keys and - * the correct casing as the value. - */ - public static $svgCaseSensitiveElementMap = array( - 'altglyph' => 'altGlyph', - 'altglyphdef' => 'altGlyphDef', - 'altglyphitem' => 'altGlyphItem', - 'animatecolor' => 'animateColor', - 'animatemotion' => 'animateMotion', - 'animatetransform' => 'animateTransform', - 'clippath' => 'clipPath', - 'feblend' => 'feBlend', - 'fecolormatrix' => 'feColorMatrix', - 'fecomponenttransfer' => 'feComponentTransfer', - 'fecomposite' => 'feComposite', - 'feconvolvematrix' => 'feConvolveMatrix', - 'fediffuselighting' => 'feDiffuseLighting', - 'fedisplacementmap' => 'feDisplacementMap', - 'fedistantlight' => 'feDistantLight', - 'feflood' => 'feFlood', - 'fefunca' => 'feFuncA', - 'fefuncb' => 'feFuncB', - 'fefuncg' => 'feFuncG', - 'fefuncr' => 'feFuncR', - 'fegaussianblur' => 'feGaussianBlur', - 'feimage' => 'feImage', - 'femerge' => 'feMerge', - 'femergenode' => 'feMergeNode', - 'femorphology' => 'feMorphology', - 'feoffset' => 'feOffset', - 'fepointlight' => 'fePointLight', - 'fespecularlighting' => 'feSpecularLighting', - 'fespotlight' => 'feSpotLight', - 'fetile' => 'feTile', - 'feturbulence' => 'feTurbulence', - 'foreignobject' => 'foreignObject', - 'glyphref' => 'glyphRef', - 'lineargradient' => 'linearGradient', - 'radialgradient' => 'radialGradient', - 'textpath' => 'textPath', - ); - - /** - * Check whether the given element meets the given criterion. - * - * Example: - * - * Elements::isA('script', Elements::TEXT_RAW); // Returns true. - * - * Elements::isA('script', Elements::TEXT_RCDATA); // Returns false. - * - * @param string $name The element name. - * @param int $mask One of the constants on this class. - * - * @return bool true if the element matches the mask, false otherwise. - */ - public static function isA($name, $mask) - { - return (static::element($name) & $mask) === $mask; - } - - /** - * Test if an element is a valid html5 element. - * - * @param string $name The name of the element. - * - * @return bool true if a html5 element and false otherwise. - */ - public static function isHtml5Element($name) - { - // html5 element names are case insensitive. Forcing lowercase for the check. - // Do we need this check or will all data passed here already be lowercase? - return isset(static::$html5[strtolower($name)]); - } - - /** - * Test if an element name is a valid MathML presentation element. - * - * @param string $name The name of the element. - * - * @return bool true if a MathML name and false otherwise. - */ - public static function isMathMLElement($name) - { - // MathML is case-sensitive unlike html5 elements. - return isset(static::$mathml[$name]); - } - - /** - * Test if an element is a valid SVG element. - * - * @param string $name The name of the element. - * - * @return bool true if a SVG element and false otherise. - */ - public static function isSvgElement($name) - { - // SVG is case-sensitive unlike html5 elements. - return isset(static::$svg[$name]); - } - - /** - * Is an element name valid in an html5 document. - * This includes html5 elements along with other allowed embedded content - * such as svg and mathml. - * - * @param string $name The name of the element. - * - * @return bool true if valid and false otherwise. - */ - public static function isElement($name) - { - return static::isHtml5Element($name) || static::isMathMLElement($name) || static::isSvgElement($name); - } - - /** - * Get the element mask for the given element name. - * - * @param string $name The name of the element. - * - * @return int the element mask. - */ - public static function element($name) - { - if (isset(static::$html5[$name])) { - return static::$html5[$name]; - } - if (isset(static::$svg[$name])) { - return static::$svg[$name]; - } - if (isset(static::$mathml[$name])) { - return static::$mathml[$name]; - } - - return 0; - } - - /** - * Normalize a SVG element name to its proper case and form. - * - * @param string $name The name of the element. - * - * @return string the normalized form of the element name. - */ - public static function normalizeSvgElement($name) - { - $name = strtolower($name); - if (isset(static::$svgCaseSensitiveElementMap[$name])) { - $name = static::$svgCaseSensitiveElementMap[$name]; - } - - return $name; - } - - /** - * Normalize a SVG attribute name to its proper case and form. - * - * @param string $name The name of the attribute. - * - * @return string The normalized form of the attribute name. - */ - public static function normalizeSvgAttribute($name) - { - $name = strtolower($name); - if (isset(static::$svgCaseSensitiveAttributeMap[$name])) { - $name = static::$svgCaseSensitiveAttributeMap[$name]; - } - - return $name; - } - - /** - * Normalize a MathML attribute name to its proper case and form. - * Note, all MathML element names are lowercase. - * - * @param string $name The name of the attribute. - * - * @return string The normalized form of the attribute name. - */ - public static function normalizeMathMlAttribute($name) - { - $name = strtolower($name); - - // Only one attribute has a mixed case form for MathML. - if ('definitionurl' === $name) { - $name = 'definitionURL'; - } - - return $name; - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Entities.php b/vendor/masterminds/html5/src/HTML5/Entities.php deleted file mode 100644 index 0e7227d..0000000 --- a/vendor/masterminds/html5/src/HTML5/Entities.php +++ /dev/null @@ -1,2236 +0,0 @@ - 'Ã', - 'Aacut' => 'Ã', - 'aacute' => 'á', - 'aacut' => 'á', - 'Abreve' => 'Ä‚', - 'abreve' => 'ă', - 'ac' => '∾', - 'acd' => '∿', - 'acE' => '∾̳', - 'Acirc' => 'Â', - 'Acir' => 'Â', - 'acirc' => 'â', - 'acir' => 'â', - 'acute' => '´', - 'acut' => '´', - 'Acy' => 'Ð', - 'acy' => 'а', - 'AElig' => 'Æ', - 'AEli' => 'Æ', - 'aelig' => 'æ', - 'aeli' => 'æ', - 'af' => 'â¡', - 'Afr' => 'ð”„', - 'afr' => 'ð”ž', - 'Agrave' => 'À', - 'Agrav' => 'À', - 'agrave' => 'à', - 'agrav' => 'à', - 'alefsym' => 'ℵ', - 'aleph' => 'ℵ', - 'Alpha' => 'Α', - 'alpha' => 'α', - 'Amacr' => 'Ä€', - 'amacr' => 'Ä', - 'amalg' => '⨿', - 'AMP' => '&', - 'AM' => '&', - 'amp' => '&', - 'am' => '&', - 'And' => 'â©“', - 'and' => '∧', - 'andand' => 'â©•', - 'andd' => 'â©œ', - 'andslope' => '⩘', - 'andv' => 'â©š', - 'ang' => '∠', - 'ange' => '⦤', - 'angle' => '∠', - 'angmsd' => '∡', - 'angmsdaa' => '⦨', - 'angmsdab' => '⦩', - 'angmsdac' => '⦪', - 'angmsdad' => '⦫', - 'angmsdae' => '⦬', - 'angmsdaf' => '⦭', - 'angmsdag' => '⦮', - 'angmsdah' => '⦯', - 'angrt' => '∟', - 'angrtvb' => '⊾', - 'angrtvbd' => 'â¦', - 'angsph' => '∢', - 'angst' => 'Ã…', - 'angzarr' => 'â¼', - 'Aogon' => 'Ä„', - 'aogon' => 'Ä…', - 'Aopf' => 'ð”¸', - 'aopf' => 'ð•’', - 'ap' => '≈', - 'apacir' => '⩯', - 'apE' => 'â©°', - 'ape' => '≊', - 'apid' => '≋', - 'apos' => '\'', - 'ApplyFunction' => 'â¡', - 'approx' => '≈', - 'approxeq' => '≊', - 'Aring' => 'Ã…', - 'Arin' => 'Ã…', - 'aring' => 'Ã¥', - 'arin' => 'Ã¥', - 'Ascr' => 'ð’œ', - 'ascr' => 'ð’¶', - 'Assign' => '≔', - 'ast' => '*', - 'asymp' => '≈', - 'asympeq' => 'â‰', - 'Atilde' => 'Ã', - 'Atild' => 'Ã', - 'atilde' => 'ã', - 'atild' => 'ã', - 'Auml' => 'Ä', - 'Aum' => 'Ä', - 'auml' => 'ä', - 'aum' => 'ä', - 'awconint' => '∳', - 'awint' => '⨑', - 'backcong' => '≌', - 'backepsilon' => '϶', - 'backprime' => '‵', - 'backsim' => '∽', - 'backsimeq' => 'â‹', - 'Backslash' => '∖', - 'Barv' => '⫧', - 'barvee' => '⊽', - 'Barwed' => '⌆', - 'barwed' => '⌅', - 'barwedge' => '⌅', - 'bbrk' => '⎵', - 'bbrktbrk' => '⎶', - 'bcong' => '≌', - 'Bcy' => 'Б', - 'bcy' => 'б', - 'bdquo' => '„', - 'becaus' => '∵', - 'Because' => '∵', - 'because' => '∵', - 'bemptyv' => '⦰', - 'bepsi' => '϶', - 'bernou' => 'ℬ', - 'Bernoullis' => 'ℬ', - 'Beta' => 'Î’', - 'beta' => 'β', - 'beth' => 'ℶ', - 'between' => '≬', - 'Bfr' => 'ð”…', - 'bfr' => 'ð”Ÿ', - 'bigcap' => 'â‹‚', - 'bigcirc' => 'â—¯', - 'bigcup' => '⋃', - 'bigodot' => '⨀', - 'bigoplus' => 'â¨', - 'bigotimes' => '⨂', - 'bigsqcup' => '⨆', - 'bigstar' => '★', - 'bigtriangledown' => 'â–½', - 'bigtriangleup' => 'â–³', - 'biguplus' => '⨄', - 'bigvee' => 'â‹', - 'bigwedge' => 'â‹€', - 'bkarow' => 'â¤', - 'blacklozenge' => '⧫', - 'blacksquare' => 'â–ª', - 'blacktriangle' => 'â–´', - 'blacktriangledown' => 'â–¾', - 'blacktriangleleft' => 'â—‚', - 'blacktriangleright' => 'â–¸', - 'blank' => 'â£', - 'blk12' => 'â–’', - 'blk14' => 'â–‘', - 'blk34' => 'â–“', - 'block' => 'â–ˆ', - 'bne' => '=⃥', - 'bnequiv' => '≡⃥', - 'bNot' => 'â«­', - 'bnot' => 'âŒ', - 'Bopf' => 'ð”¹', - 'bopf' => 'ð•“', - 'bot' => '⊥', - 'bottom' => '⊥', - 'bowtie' => '⋈', - 'boxbox' => '⧉', - 'boxDL' => 'â•—', - 'boxDl' => 'â•–', - 'boxdL' => 'â••', - 'boxdl' => 'â”', - 'boxDR' => 'â•”', - 'boxDr' => 'â•“', - 'boxdR' => 'â•’', - 'boxdr' => '┌', - 'boxH' => 'â•', - 'boxh' => '─', - 'boxHD' => '╦', - 'boxHd' => '╤', - 'boxhD' => 'â•¥', - 'boxhd' => '┬', - 'boxHU' => 'â•©', - 'boxHu' => '╧', - 'boxhU' => '╨', - 'boxhu' => 'â”´', - 'boxminus' => '⊟', - 'boxplus' => '⊞', - 'boxtimes' => '⊠', - 'boxUL' => 'â•', - 'boxUl' => 'â•œ', - 'boxuL' => 'â•›', - 'boxul' => '┘', - 'boxUR' => 'â•š', - 'boxUr' => 'â•™', - 'boxuR' => '╘', - 'boxur' => 'â””', - 'boxV' => 'â•‘', - 'boxv' => '│', - 'boxVH' => '╬', - 'boxVh' => 'â•«', - 'boxvH' => '╪', - 'boxvh' => '┼', - 'boxVL' => 'â•£', - 'boxVl' => 'â•¢', - 'boxvL' => 'â•¡', - 'boxvl' => '┤', - 'boxVR' => 'â• ', - 'boxVr' => 'â•Ÿ', - 'boxvR' => 'â•ž', - 'boxvr' => '├', - 'bprime' => '‵', - 'Breve' => '˘', - 'breve' => '˘', - 'brvbar' => '¦', - 'brvba' => '¦', - 'Bscr' => 'ℬ', - 'bscr' => 'ð’·', - 'bsemi' => 'â', - 'bsim' => '∽', - 'bsime' => 'â‹', - 'bsol' => '\\', - 'bsolb' => '⧅', - 'bsolhsub' => '⟈', - 'bull' => '•', - 'bullet' => '•', - 'bump' => '≎', - 'bumpE' => '⪮', - 'bumpe' => 'â‰', - 'Bumpeq' => '≎', - 'bumpeq' => 'â‰', - 'Cacute' => 'Ć', - 'cacute' => 'ć', - 'Cap' => 'â‹’', - 'cap' => '∩', - 'capand' => 'â©„', - 'capbrcup' => '⩉', - 'capcap' => 'â©‹', - 'capcup' => '⩇', - 'capdot' => 'â©€', - 'CapitalDifferentialD' => 'â……', - 'caps' => '∩︀', - 'caret' => 'â', - 'caron' => 'ˇ', - 'Cayleys' => 'â„­', - 'ccaps' => 'â©', - 'Ccaron' => 'ÄŒ', - 'ccaron' => 'Ä', - 'Ccedil' => 'Ç', - 'Ccedi' => 'Ç', - 'ccedil' => 'ç', - 'ccedi' => 'ç', - 'Ccirc' => 'Ĉ', - 'ccirc' => 'ĉ', - 'Cconint' => '∰', - 'ccups' => 'â©Œ', - 'ccupssm' => 'â©', - 'Cdot' => 'ÄŠ', - 'cdot' => 'Ä‹', - 'cedil' => '¸', - 'cedi' => '¸', - 'Cedilla' => '¸', - 'cemptyv' => '⦲', - 'cent' => '¢', - 'cen' => '¢', - 'CenterDot' => '·', - 'centerdot' => '·', - 'Cfr' => 'â„­', - 'cfr' => 'ð” ', - 'CHcy' => 'Ч', - 'chcy' => 'ч', - 'check' => '✓', - 'checkmark' => '✓', - 'Chi' => 'Χ', - 'chi' => 'χ', - 'cir' => 'â—‹', - 'circ' => 'ˆ', - 'circeq' => '≗', - 'circlearrowleft' => '↺', - 'circlearrowright' => '↻', - 'circledast' => '⊛', - 'circledcirc' => '⊚', - 'circleddash' => 'âŠ', - 'CircleDot' => '⊙', - 'circledR' => '®', - 'circledS' => 'Ⓢ', - 'CircleMinus' => '⊖', - 'CirclePlus' => '⊕', - 'CircleTimes' => '⊗', - 'cirE' => '⧃', - 'cire' => '≗', - 'cirfnint' => 'â¨', - 'cirmid' => '⫯', - 'cirscir' => '⧂', - 'ClockwiseContourIntegral' => '∲', - 'CloseCurlyDoubleQuote' => 'â€', - 'CloseCurlyQuote' => '’', - 'clubs' => '♣', - 'clubsuit' => '♣', - 'Colon' => '∷', - 'colon' => ':', - 'Colone' => 'â©´', - 'colone' => '≔', - 'coloneq' => '≔', - 'comma' => ',', - 'commat' => '@', - 'comp' => 'âˆ', - 'compfn' => '∘', - 'complement' => 'âˆ', - 'complexes' => 'â„‚', - 'cong' => '≅', - 'congdot' => 'â©­', - 'Congruent' => '≡', - 'Conint' => '∯', - 'conint' => '∮', - 'ContourIntegral' => '∮', - 'Copf' => 'â„‚', - 'copf' => 'ð•”', - 'coprod' => 'âˆ', - 'Coproduct' => 'âˆ', - 'COPY' => '©', - 'COP' => '©', - 'copy' => '©', - 'cop' => '©', - 'copysr' => 'â„—', - 'CounterClockwiseContourIntegral' => '∳', - 'crarr' => '↵', - 'Cross' => '⨯', - 'cross' => '✗', - 'Cscr' => 'ð’ž', - 'cscr' => 'ð’¸', - 'csub' => 'â«', - 'csube' => 'â«‘', - 'csup' => 'â«', - 'csupe' => 'â«’', - 'ctdot' => '⋯', - 'cudarrl' => '⤸', - 'cudarrr' => '⤵', - 'cuepr' => 'â‹ž', - 'cuesc' => 'â‹Ÿ', - 'cularr' => '↶', - 'cularrp' => '⤽', - 'Cup' => 'â‹“', - 'cup' => '∪', - 'cupbrcap' => '⩈', - 'CupCap' => 'â‰', - 'cupcap' => '⩆', - 'cupcup' => 'â©Š', - 'cupdot' => 'âŠ', - 'cupor' => 'â©…', - 'cups' => '∪︀', - 'curarr' => '↷', - 'curarrm' => '⤼', - 'curlyeqprec' => 'â‹ž', - 'curlyeqsucc' => 'â‹Ÿ', - 'curlyvee' => 'â‹Ž', - 'curlywedge' => 'â‹', - 'curren' => '¤', - 'curre' => '¤', - 'curvearrowleft' => '↶', - 'curvearrowright' => '↷', - 'cuvee' => 'â‹Ž', - 'cuwed' => 'â‹', - 'cwconint' => '∲', - 'cwint' => '∱', - 'cylcty' => '⌭', - 'Dagger' => '‡', - 'dagger' => '†', - 'daleth' => 'ℸ', - 'Darr' => '↡', - 'dArr' => '⇓', - 'darr' => '↓', - 'dash' => 'â€', - 'Dashv' => '⫤', - 'dashv' => '⊣', - 'dbkarow' => 'â¤', - 'dblac' => 'Ë', - 'Dcaron' => 'ÄŽ', - 'dcaron' => 'Ä', - 'Dcy' => 'Д', - 'dcy' => 'д', - 'DD' => 'â……', - 'dd' => 'â…†', - 'ddagger' => '‡', - 'ddarr' => '⇊', - 'DDotrahd' => '⤑', - 'ddotseq' => 'â©·', - 'deg' => '°', - 'de' => '°', - 'Del' => '∇', - 'Delta' => 'Δ', - 'delta' => 'δ', - 'demptyv' => '⦱', - 'dfisht' => '⥿', - 'Dfr' => 'ð”‡', - 'dfr' => 'ð”¡', - 'dHar' => '⥥', - 'dharl' => '⇃', - 'dharr' => '⇂', - 'DiacriticalAcute' => '´', - 'DiacriticalDot' => 'Ë™', - 'DiacriticalDoubleAcute' => 'Ë', - 'DiacriticalGrave' => '`', - 'DiacriticalTilde' => 'Ëœ', - 'diam' => 'â‹„', - 'Diamond' => 'â‹„', - 'diamond' => 'â‹„', - 'diamondsuit' => '♦', - 'diams' => '♦', - 'die' => '¨', - 'DifferentialD' => 'â…†', - 'digamma' => 'Ï', - 'disin' => '⋲', - 'div' => '÷', - 'divide' => '÷', - 'divid' => '÷', - 'divideontimes' => '⋇', - 'divonx' => '⋇', - 'DJcy' => 'Ђ', - 'djcy' => 'Ñ’', - 'dlcorn' => '⌞', - 'dlcrop' => 'âŒ', - 'dollar' => '$', - 'Dopf' => 'ð”»', - 'dopf' => 'ð••', - 'Dot' => '¨', - 'dot' => 'Ë™', - 'DotDot' => '⃜', - 'doteq' => 'â‰', - 'doteqdot' => '≑', - 'DotEqual' => 'â‰', - 'dotminus' => '∸', - 'dotplus' => '∔', - 'dotsquare' => '⊡', - 'doublebarwedge' => '⌆', - 'DoubleContourIntegral' => '∯', - 'DoubleDot' => '¨', - 'DoubleDownArrow' => '⇓', - 'DoubleLeftArrow' => 'â‡', - 'DoubleLeftRightArrow' => '⇔', - 'DoubleLeftTee' => '⫤', - 'DoubleLongLeftArrow' => '⟸', - 'DoubleLongLeftRightArrow' => '⟺', - 'DoubleLongRightArrow' => '⟹', - 'DoubleRightArrow' => '⇒', - 'DoubleRightTee' => '⊨', - 'DoubleUpArrow' => '⇑', - 'DoubleUpDownArrow' => '⇕', - 'DoubleVerticalBar' => '∥', - 'DownArrow' => '↓', - 'Downarrow' => '⇓', - 'downarrow' => '↓', - 'DownArrowBar' => '⤓', - 'DownArrowUpArrow' => '⇵', - 'DownBreve' => 'Ì‘', - 'downdownarrows' => '⇊', - 'downharpoonleft' => '⇃', - 'downharpoonright' => '⇂', - 'DownLeftRightVector' => 'â¥', - 'DownLeftTeeVector' => '⥞', - 'DownLeftVector' => '↽', - 'DownLeftVectorBar' => '⥖', - 'DownRightTeeVector' => '⥟', - 'DownRightVector' => 'â‡', - 'DownRightVectorBar' => '⥗', - 'DownTee' => '⊤', - 'DownTeeArrow' => '↧', - 'drbkarow' => 'â¤', - 'drcorn' => '⌟', - 'drcrop' => '⌌', - 'Dscr' => 'ð’Ÿ', - 'dscr' => 'ð’¹', - 'DScy' => 'Ð…', - 'dscy' => 'Ñ•', - 'dsol' => '⧶', - 'Dstrok' => 'Ä', - 'dstrok' => 'Ä‘', - 'dtdot' => '⋱', - 'dtri' => 'â–¿', - 'dtrif' => 'â–¾', - 'duarr' => '⇵', - 'duhar' => '⥯', - 'dwangle' => '⦦', - 'DZcy' => 'Ð', - 'dzcy' => 'ÑŸ', - 'dzigrarr' => '⟿', - 'Eacute' => 'É', - 'Eacut' => 'É', - 'eacute' => 'é', - 'eacut' => 'é', - 'easter' => 'â©®', - 'Ecaron' => 'Äš', - 'ecaron' => 'Ä›', - 'ecir' => 'ê', - 'Ecirc' => 'Ê', - 'Ecir' => 'Ê', - 'ecirc' => 'ê', - 'ecolon' => '≕', - 'Ecy' => 'Э', - 'ecy' => 'Ñ', - 'eDDot' => 'â©·', - 'Edot' => 'Ä–', - 'eDot' => '≑', - 'edot' => 'Ä—', - 'ee' => 'â…‡', - 'efDot' => '≒', - 'Efr' => 'ð”ˆ', - 'efr' => 'ð”¢', - 'eg' => '⪚', - 'Egrave' => 'È', - 'Egrav' => 'È', - 'egrave' => 'è', - 'egrav' => 'è', - 'egs' => '⪖', - 'egsdot' => '⪘', - 'el' => '⪙', - 'Element' => '∈', - 'elinters' => 'â§', - 'ell' => 'â„“', - 'els' => '⪕', - 'elsdot' => '⪗', - 'Emacr' => 'Ä’', - 'emacr' => 'Ä“', - 'empty' => '∅', - 'emptyset' => '∅', - 'EmptySmallSquare' => 'â—»', - 'emptyv' => '∅', - 'EmptyVerySmallSquare' => 'â–«', - 'emsp' => ' ', - 'emsp13' => ' ', - 'emsp14' => ' ', - 'ENG' => 'ÅŠ', - 'eng' => 'Å‹', - 'ensp' => ' ', - 'Eogon' => 'Ę', - 'eogon' => 'Ä™', - 'Eopf' => 'ð”¼', - 'eopf' => 'ð•–', - 'epar' => 'â‹•', - 'eparsl' => '⧣', - 'eplus' => '⩱', - 'epsi' => 'ε', - 'Epsilon' => 'Ε', - 'epsilon' => 'ε', - 'epsiv' => 'ϵ', - 'eqcirc' => '≖', - 'eqcolon' => '≕', - 'eqsim' => '≂', - 'eqslantgtr' => '⪖', - 'eqslantless' => '⪕', - 'Equal' => '⩵', - 'equals' => '=', - 'EqualTilde' => '≂', - 'equest' => '≟', - 'Equilibrium' => '⇌', - 'equiv' => '≡', - 'equivDD' => '⩸', - 'eqvparsl' => '⧥', - 'erarr' => '⥱', - 'erDot' => '≓', - 'Escr' => 'â„°', - 'escr' => 'ℯ', - 'esdot' => 'â‰', - 'Esim' => '⩳', - 'esim' => '≂', - 'Eta' => 'Η', - 'eta' => 'η', - 'ETH' => 'Ã', - 'ET' => 'Ã', - 'eth' => 'ð', - 'et' => 'ð', - 'Euml' => 'Ë', - 'Eum' => 'Ë', - 'euml' => 'ë', - 'eum' => 'ë', - 'euro' => '€', - 'excl' => '!', - 'exist' => '∃', - 'Exists' => '∃', - 'expectation' => 'â„°', - 'ExponentialE' => 'â…‡', - 'exponentiale' => 'â…‡', - 'fallingdotseq' => '≒', - 'Fcy' => 'Ф', - 'fcy' => 'Ñ„', - 'female' => '♀', - 'ffilig' => 'ffi', - 'fflig' => 'ff', - 'ffllig' => 'ffl', - 'Ffr' => 'ð”‰', - 'ffr' => 'ð”£', - 'filig' => 'ï¬', - 'FilledSmallSquare' => 'â—¼', - 'FilledVerySmallSquare' => 'â–ª', - 'fjlig' => 'fj', - 'flat' => 'â™­', - 'fllig' => 'fl', - 'fltns' => 'â–±', - 'fnof' => 'Æ’', - 'Fopf' => 'ð”½', - 'fopf' => 'ð•—', - 'ForAll' => '∀', - 'forall' => '∀', - 'fork' => 'â‹”', - 'forkv' => 'â«™', - 'Fouriertrf' => 'ℱ', - 'fpartint' => 'â¨', - 'frac12' => '½', - 'frac1' => '¼', - 'frac13' => 'â…“', - 'frac14' => '¼', - 'frac15' => 'â…•', - 'frac16' => 'â…™', - 'frac18' => 'â…›', - 'frac23' => 'â…”', - 'frac25' => 'â…–', - 'frac34' => '¾', - 'frac3' => '¾', - 'frac35' => 'â…—', - 'frac38' => 'â…œ', - 'frac45' => 'â…˜', - 'frac56' => 'â…š', - 'frac58' => 'â…', - 'frac78' => 'â…ž', - 'frasl' => 'â„', - 'frown' => '⌢', - 'Fscr' => 'ℱ', - 'fscr' => 'ð’»', - 'gacute' => 'ǵ', - 'Gamma' => 'Γ', - 'gamma' => 'γ', - 'Gammad' => 'Ïœ', - 'gammad' => 'Ï', - 'gap' => '⪆', - 'Gbreve' => 'Äž', - 'gbreve' => 'ÄŸ', - 'Gcedil' => 'Ä¢', - 'Gcirc' => 'Äœ', - 'gcirc' => 'Ä', - 'Gcy' => 'Г', - 'gcy' => 'г', - 'Gdot' => 'Ä ', - 'gdot' => 'Ä¡', - 'gE' => '≧', - 'ge' => '≥', - 'gEl' => '⪌', - 'gel' => 'â‹›', - 'geq' => '≥', - 'geqq' => '≧', - 'geqslant' => '⩾', - 'ges' => '⩾', - 'gescc' => '⪩', - 'gesdot' => '⪀', - 'gesdoto' => '⪂', - 'gesdotol' => '⪄', - 'gesl' => '⋛︀', - 'gesles' => '⪔', - 'Gfr' => 'ð”Š', - 'gfr' => 'ð”¤', - 'Gg' => 'â‹™', - 'gg' => '≫', - 'ggg' => 'â‹™', - 'gimel' => 'â„·', - 'GJcy' => 'Ѓ', - 'gjcy' => 'Ñ“', - 'gl' => '≷', - 'gla' => '⪥', - 'glE' => '⪒', - 'glj' => '⪤', - 'gnap' => '⪊', - 'gnapprox' => '⪊', - 'gnE' => '≩', - 'gne' => '⪈', - 'gneq' => '⪈', - 'gneqq' => '≩', - 'gnsim' => '⋧', - 'Gopf' => 'ð”¾', - 'gopf' => 'ð•˜', - 'grave' => '`', - 'GreaterEqual' => '≥', - 'GreaterEqualLess' => 'â‹›', - 'GreaterFullEqual' => '≧', - 'GreaterGreater' => '⪢', - 'GreaterLess' => '≷', - 'GreaterSlantEqual' => '⩾', - 'GreaterTilde' => '≳', - 'Gscr' => 'ð’¢', - 'gscr' => 'â„Š', - 'gsim' => '≳', - 'gsime' => '⪎', - 'gsiml' => 'âª', - 'GT' => '>', - 'G' => '>', - 'Gt' => '≫', - 'gt' => '>', - 'g' => '>', - 'gtcc' => '⪧', - 'gtcir' => '⩺', - 'gtdot' => 'â‹—', - 'gtlPar' => '⦕', - 'gtquest' => '⩼', - 'gtrapprox' => '⪆', - 'gtrarr' => '⥸', - 'gtrdot' => 'â‹—', - 'gtreqless' => 'â‹›', - 'gtreqqless' => '⪌', - 'gtrless' => '≷', - 'gtrsim' => '≳', - 'gvertneqq' => '≩︀', - 'gvnE' => '≩︀', - 'Hacek' => 'ˇ', - 'hairsp' => ' ', - 'half' => '½', - 'hamilt' => 'â„‹', - 'HARDcy' => 'Ъ', - 'hardcy' => 'ÑŠ', - 'hArr' => '⇔', - 'harr' => '↔', - 'harrcir' => '⥈', - 'harrw' => '↭', - 'Hat' => '^', - 'hbar' => 'â„', - 'Hcirc' => 'Ĥ', - 'hcirc' => 'Ä¥', - 'hearts' => '♥', - 'heartsuit' => '♥', - 'hellip' => '…', - 'hercon' => '⊹', - 'Hfr' => 'â„Œ', - 'hfr' => 'ð”¥', - 'HilbertSpace' => 'â„‹', - 'hksearow' => '⤥', - 'hkswarow' => '⤦', - 'hoarr' => '⇿', - 'homtht' => '∻', - 'hookleftarrow' => '↩', - 'hookrightarrow' => '↪', - 'Hopf' => 'â„', - 'hopf' => 'ð•™', - 'horbar' => '―', - 'HorizontalLine' => '─', - 'Hscr' => 'â„‹', - 'hscr' => 'ð’½', - 'hslash' => 'â„', - 'Hstrok' => 'Ħ', - 'hstrok' => 'ħ', - 'HumpDownHump' => '≎', - 'HumpEqual' => 'â‰', - 'hybull' => 'âƒ', - 'hyphen' => 'â€', - 'Iacute' => 'Ã', - 'Iacut' => 'Ã', - 'iacute' => 'í', - 'iacut' => 'í', - 'ic' => 'â£', - 'Icirc' => 'ÃŽ', - 'Icir' => 'ÃŽ', - 'icirc' => 'î', - 'icir' => 'î', - 'Icy' => 'И', - 'icy' => 'и', - 'Idot' => 'Ä°', - 'IEcy' => 'Е', - 'iecy' => 'е', - 'iexcl' => '¡', - 'iexc' => '¡', - 'iff' => '⇔', - 'Ifr' => 'â„‘', - 'ifr' => 'ð”¦', - 'Igrave' => 'ÃŒ', - 'Igrav' => 'ÃŒ', - 'igrave' => 'ì', - 'igrav' => 'ì', - 'ii' => 'â…ˆ', - 'iiiint' => '⨌', - 'iiint' => '∭', - 'iinfin' => '⧜', - 'iiota' => 'â„©', - 'IJlig' => 'IJ', - 'ijlig' => 'ij', - 'Im' => 'â„‘', - 'Imacr' => 'Ī', - 'imacr' => 'Ä«', - 'image' => 'â„‘', - 'ImaginaryI' => 'â…ˆ', - 'imagline' => 'â„', - 'imagpart' => 'â„‘', - 'imath' => 'ı', - 'imof' => '⊷', - 'imped' => 'Ƶ', - 'Implies' => '⇒', - 'in' => '∈', - 'incare' => 'â„…', - 'infin' => '∞', - 'infintie' => 'â§', - 'inodot' => 'ı', - 'Int' => '∬', - 'int' => '∫', - 'intcal' => '⊺', - 'integers' => 'ℤ', - 'Integral' => '∫', - 'intercal' => '⊺', - 'Intersection' => 'â‹‚', - 'intlarhk' => '⨗', - 'intprod' => '⨼', - 'InvisibleComma' => 'â£', - 'InvisibleTimes' => 'â¢', - 'IOcy' => 'Ð', - 'iocy' => 'Ñ‘', - 'Iogon' => 'Ä®', - 'iogon' => 'į', - 'Iopf' => 'ð•€', - 'iopf' => 'ð•š', - 'Iota' => 'Ι', - 'iota' => 'ι', - 'iprod' => '⨼', - 'iquest' => '¿', - 'iques' => '¿', - 'Iscr' => 'â„', - 'iscr' => 'ð’¾', - 'isin' => '∈', - 'isindot' => '⋵', - 'isinE' => '⋹', - 'isins' => 'â‹´', - 'isinsv' => '⋳', - 'isinv' => '∈', - 'it' => 'â¢', - 'Itilde' => 'Ĩ', - 'itilde' => 'Ä©', - 'Iukcy' => 'І', - 'iukcy' => 'Ñ–', - 'Iuml' => 'Ã', - 'Ium' => 'Ã', - 'iuml' => 'ï', - 'ium' => 'ï', - 'Jcirc' => 'Ä´', - 'jcirc' => 'ĵ', - 'Jcy' => 'Й', - 'jcy' => 'й', - 'Jfr' => 'ð”', - 'jfr' => 'ð”§', - 'jmath' => 'È·', - 'Jopf' => 'ð•', - 'jopf' => 'ð•›', - 'Jscr' => 'ð’¥', - 'jscr' => 'ð’¿', - 'Jsercy' => 'Ј', - 'jsercy' => 'ј', - 'Jukcy' => 'Є', - 'jukcy' => 'Ñ”', - 'Kappa' => 'Κ', - 'kappa' => 'κ', - 'kappav' => 'Ï°', - 'Kcedil' => 'Ķ', - 'kcedil' => 'Ä·', - 'Kcy' => 'К', - 'kcy' => 'к', - 'Kfr' => 'ð”Ž', - 'kfr' => 'ð”¨', - 'kgreen' => 'ĸ', - 'KHcy' => 'Ð¥', - 'khcy' => 'Ñ…', - 'KJcy' => 'ÐŒ', - 'kjcy' => 'Ñœ', - 'Kopf' => 'ð•‚', - 'kopf' => 'ð•œ', - 'Kscr' => 'ð’¦', - 'kscr' => 'ð“€', - 'lAarr' => '⇚', - 'Lacute' => 'Ĺ', - 'lacute' => 'ĺ', - 'laemptyv' => '⦴', - 'lagran' => 'â„’', - 'Lambda' => 'Λ', - 'lambda' => 'λ', - 'Lang' => '⟪', - 'lang' => '⟨', - 'langd' => '⦑', - 'langle' => '⟨', - 'lap' => '⪅', - 'Laplacetrf' => 'â„’', - 'laquo' => '«', - 'laqu' => '«', - 'Larr' => '↞', - 'lArr' => 'â‡', - 'larr' => 'â†', - 'larrb' => '⇤', - 'larrbfs' => '⤟', - 'larrfs' => 'â¤', - 'larrhk' => '↩', - 'larrlp' => '↫', - 'larrpl' => '⤹', - 'larrsim' => '⥳', - 'larrtl' => '↢', - 'lat' => '⪫', - 'lAtail' => '⤛', - 'latail' => '⤙', - 'late' => '⪭', - 'lates' => '⪭︀', - 'lBarr' => '⤎', - 'lbarr' => '⤌', - 'lbbrk' => 'â²', - 'lbrace' => '{', - 'lbrack' => '[', - 'lbrke' => '⦋', - 'lbrksld' => 'â¦', - 'lbrkslu' => 'â¦', - 'Lcaron' => 'Ľ', - 'lcaron' => 'ľ', - 'Lcedil' => 'Ä»', - 'lcedil' => 'ļ', - 'lceil' => '⌈', - 'lcub' => '{', - 'Lcy' => 'Л', - 'lcy' => 'л', - 'ldca' => '⤶', - 'ldquo' => '“', - 'ldquor' => '„', - 'ldrdhar' => '⥧', - 'ldrushar' => '⥋', - 'ldsh' => '↲', - 'lE' => '≦', - 'le' => '≤', - 'LeftAngleBracket' => '⟨', - 'LeftArrow' => 'â†', - 'Leftarrow' => 'â‡', - 'leftarrow' => 'â†', - 'LeftArrowBar' => '⇤', - 'LeftArrowRightArrow' => '⇆', - 'leftarrowtail' => '↢', - 'LeftCeiling' => '⌈', - 'LeftDoubleBracket' => '⟦', - 'LeftDownTeeVector' => '⥡', - 'LeftDownVector' => '⇃', - 'LeftDownVectorBar' => '⥙', - 'LeftFloor' => '⌊', - 'leftharpoondown' => '↽', - 'leftharpoonup' => '↼', - 'leftleftarrows' => '⇇', - 'LeftRightArrow' => '↔', - 'Leftrightarrow' => '⇔', - 'leftrightarrow' => '↔', - 'leftrightarrows' => '⇆', - 'leftrightharpoons' => '⇋', - 'leftrightsquigarrow' => '↭', - 'LeftRightVector' => '⥎', - 'LeftTee' => '⊣', - 'LeftTeeArrow' => '↤', - 'LeftTeeVector' => '⥚', - 'leftthreetimes' => 'â‹‹', - 'LeftTriangle' => '⊲', - 'LeftTriangleBar' => 'â§', - 'LeftTriangleEqual' => '⊴', - 'LeftUpDownVector' => '⥑', - 'LeftUpTeeVector' => '⥠', - 'LeftUpVector' => '↿', - 'LeftUpVectorBar' => '⥘', - 'LeftVector' => '↼', - 'LeftVectorBar' => '⥒', - 'lEg' => '⪋', - 'leg' => 'â‹š', - 'leq' => '≤', - 'leqq' => '≦', - 'leqslant' => '⩽', - 'les' => '⩽', - 'lescc' => '⪨', - 'lesdot' => 'â©¿', - 'lesdoto' => 'âª', - 'lesdotor' => '⪃', - 'lesg' => '⋚︀', - 'lesges' => '⪓', - 'lessapprox' => '⪅', - 'lessdot' => 'â‹–', - 'lesseqgtr' => 'â‹š', - 'lesseqqgtr' => '⪋', - 'LessEqualGreater' => 'â‹š', - 'LessFullEqual' => '≦', - 'LessGreater' => '≶', - 'lessgtr' => '≶', - 'LessLess' => '⪡', - 'lesssim' => '≲', - 'LessSlantEqual' => '⩽', - 'LessTilde' => '≲', - 'lfisht' => '⥼', - 'lfloor' => '⌊', - 'Lfr' => 'ð”', - 'lfr' => 'ð”©', - 'lg' => '≶', - 'lgE' => '⪑', - 'lHar' => '⥢', - 'lhard' => '↽', - 'lharu' => '↼', - 'lharul' => '⥪', - 'lhblk' => 'â–„', - 'LJcy' => 'Љ', - 'ljcy' => 'Ñ™', - 'Ll' => '⋘', - 'll' => '≪', - 'llarr' => '⇇', - 'llcorner' => '⌞', - 'Lleftarrow' => '⇚', - 'llhard' => '⥫', - 'lltri' => 'â—º', - 'Lmidot' => 'Ä¿', - 'lmidot' => 'Å€', - 'lmoust' => '⎰', - 'lmoustache' => '⎰', - 'lnap' => '⪉', - 'lnapprox' => '⪉', - 'lnE' => '≨', - 'lne' => '⪇', - 'lneq' => '⪇', - 'lneqq' => '≨', - 'lnsim' => '⋦', - 'loang' => '⟬', - 'loarr' => '⇽', - 'lobrk' => '⟦', - 'LongLeftArrow' => '⟵', - 'Longleftarrow' => '⟸', - 'longleftarrow' => '⟵', - 'LongLeftRightArrow' => '⟷', - 'Longleftrightarrow' => '⟺', - 'longleftrightarrow' => '⟷', - 'longmapsto' => '⟼', - 'LongRightArrow' => '⟶', - 'Longrightarrow' => '⟹', - 'longrightarrow' => '⟶', - 'looparrowleft' => '↫', - 'looparrowright' => '↬', - 'lopar' => '⦅', - 'Lopf' => 'ð•ƒ', - 'lopf' => 'ð•', - 'loplus' => '⨭', - 'lotimes' => '⨴', - 'lowast' => '∗', - 'lowbar' => '_', - 'LowerLeftArrow' => '↙', - 'LowerRightArrow' => '↘', - 'loz' => 'â—Š', - 'lozenge' => 'â—Š', - 'lozf' => '⧫', - 'lpar' => '(', - 'lparlt' => '⦓', - 'lrarr' => '⇆', - 'lrcorner' => '⌟', - 'lrhar' => '⇋', - 'lrhard' => '⥭', - 'lrm' => '‎', - 'lrtri' => '⊿', - 'lsaquo' => '‹', - 'Lscr' => 'â„’', - 'lscr' => 'ð“', - 'Lsh' => '↰', - 'lsh' => '↰', - 'lsim' => '≲', - 'lsime' => 'âª', - 'lsimg' => 'âª', - 'lsqb' => '[', - 'lsquo' => '‘', - 'lsquor' => '‚', - 'Lstrok' => 'Å', - 'lstrok' => 'Å‚', - 'LT' => '<', - 'L' => '<', - 'Lt' => '≪', - 'lt' => '<', - 'l' => '<', - 'ltcc' => '⪦', - 'ltcir' => '⩹', - 'ltdot' => 'â‹–', - 'lthree' => 'â‹‹', - 'ltimes' => '⋉', - 'ltlarr' => '⥶', - 'ltquest' => 'â©»', - 'ltri' => 'â—ƒ', - 'ltrie' => '⊴', - 'ltrif' => 'â—‚', - 'ltrPar' => '⦖', - 'lurdshar' => '⥊', - 'luruhar' => '⥦', - 'lvertneqq' => '≨︀', - 'lvnE' => '≨︀', - 'macr' => '¯', - 'mac' => '¯', - 'male' => '♂', - 'malt' => '✠', - 'maltese' => '✠', - 'Map' => '⤅', - 'map' => '↦', - 'mapsto' => '↦', - 'mapstodown' => '↧', - 'mapstoleft' => '↤', - 'mapstoup' => '↥', - 'marker' => 'â–®', - 'mcomma' => '⨩', - 'Mcy' => 'Ðœ', - 'mcy' => 'м', - 'mdash' => '—', - 'mDDot' => '∺', - 'measuredangle' => '∡', - 'MediumSpace' => 'âŸ', - 'Mellintrf' => 'ℳ', - 'Mfr' => 'ð”', - 'mfr' => 'ð”ª', - 'mho' => '℧', - 'micro' => 'µ', - 'micr' => 'µ', - 'mid' => '∣', - 'midast' => '*', - 'midcir' => 'â«°', - 'middot' => '·', - 'middo' => '·', - 'minus' => '−', - 'minusb' => '⊟', - 'minusd' => '∸', - 'minusdu' => '⨪', - 'MinusPlus' => '∓', - 'mlcp' => 'â«›', - 'mldr' => '…', - 'mnplus' => '∓', - 'models' => '⊧', - 'Mopf' => 'ð•„', - 'mopf' => 'ð•ž', - 'mp' => '∓', - 'Mscr' => 'ℳ', - 'mscr' => 'ð“‚', - 'mstpos' => '∾', - 'Mu' => 'Îœ', - 'mu' => 'μ', - 'multimap' => '⊸', - 'mumap' => '⊸', - 'nabla' => '∇', - 'Nacute' => 'Ń', - 'nacute' => 'Å„', - 'nang' => '∠⃒', - 'nap' => '≉', - 'napE' => '⩰̸', - 'napid' => '≋̸', - 'napos' => 'ʼn', - 'napprox' => '≉', - 'natur' => 'â™®', - 'natural' => 'â™®', - 'naturals' => 'â„•', - 'nbsp' => ' ', - 'nbs' => ' ', - 'nbump' => '≎̸', - 'nbumpe' => 'â‰Ì¸', - 'ncap' => '⩃', - 'Ncaron' => 'Ň', - 'ncaron' => 'ň', - 'Ncedil' => 'Å…', - 'ncedil' => 'ņ', - 'ncong' => '≇', - 'ncongdot' => '⩭̸', - 'ncup' => 'â©‚', - 'Ncy' => 'Ð', - 'ncy' => 'н', - 'ndash' => '–', - 'ne' => '≠', - 'nearhk' => '⤤', - 'neArr' => '⇗', - 'nearr' => '↗', - 'nearrow' => '↗', - 'nedot' => 'â‰Ì¸', - 'NegativeMediumSpace' => '​', - 'NegativeThickSpace' => '​', - 'NegativeThinSpace' => '​', - 'NegativeVeryThinSpace' => '​', - 'nequiv' => '≢', - 'nesear' => '⤨', - 'nesim' => '≂̸', - 'NestedGreaterGreater' => '≫', - 'NestedLessLess' => '≪', - 'NewLine' => ' -', - 'nexist' => '∄', - 'nexists' => '∄', - 'Nfr' => 'ð”‘', - 'nfr' => 'ð”«', - 'ngE' => '≧̸', - 'nge' => '≱', - 'ngeq' => '≱', - 'ngeqq' => '≧̸', - 'ngeqslant' => '⩾̸', - 'nges' => '⩾̸', - 'nGg' => '⋙̸', - 'ngsim' => '≵', - 'nGt' => '≫⃒', - 'ngt' => '≯', - 'ngtr' => '≯', - 'nGtv' => '≫̸', - 'nhArr' => '⇎', - 'nharr' => '↮', - 'nhpar' => '⫲', - 'ni' => '∋', - 'nis' => '⋼', - 'nisd' => '⋺', - 'niv' => '∋', - 'NJcy' => 'Њ', - 'njcy' => 'Ñš', - 'nlArr' => 'â‡', - 'nlarr' => '↚', - 'nldr' => '‥', - 'nlE' => '≦̸', - 'nle' => '≰', - 'nLeftarrow' => 'â‡', - 'nleftarrow' => '↚', - 'nLeftrightarrow' => '⇎', - 'nleftrightarrow' => '↮', - 'nleq' => '≰', - 'nleqq' => '≦̸', - 'nleqslant' => '⩽̸', - 'nles' => '⩽̸', - 'nless' => '≮', - 'nLl' => '⋘̸', - 'nlsim' => '≴', - 'nLt' => '≪⃒', - 'nlt' => '≮', - 'nltri' => '⋪', - 'nltrie' => '⋬', - 'nLtv' => '≪̸', - 'nmid' => '∤', - 'NoBreak' => 'â ', - 'NonBreakingSpace' => ' ', - 'Nopf' => 'â„•', - 'nopf' => 'ð•Ÿ', - 'Not' => '⫬', - 'not' => '¬', - 'no' => '¬', - 'NotCongruent' => '≢', - 'NotCupCap' => '≭', - 'NotDoubleVerticalBar' => '∦', - 'NotElement' => '∉', - 'NotEqual' => '≠', - 'NotEqualTilde' => '≂̸', - 'NotExists' => '∄', - 'NotGreater' => '≯', - 'NotGreaterEqual' => '≱', - 'NotGreaterFullEqual' => '≧̸', - 'NotGreaterGreater' => '≫̸', - 'NotGreaterLess' => '≹', - 'NotGreaterSlantEqual' => '⩾̸', - 'NotGreaterTilde' => '≵', - 'NotHumpDownHump' => '≎̸', - 'NotHumpEqual' => 'â‰Ì¸', - 'notin' => '∉', - 'notindot' => '⋵̸', - 'notinE' => '⋹̸', - 'notinva' => '∉', - 'notinvb' => 'â‹·', - 'notinvc' => '⋶', - 'NotLeftTriangle' => '⋪', - 'NotLeftTriangleBar' => 'â§Ì¸', - 'NotLeftTriangleEqual' => '⋬', - 'NotLess' => '≮', - 'NotLessEqual' => '≰', - 'NotLessGreater' => '≸', - 'NotLessLess' => '≪̸', - 'NotLessSlantEqual' => '⩽̸', - 'NotLessTilde' => '≴', - 'NotNestedGreaterGreater' => '⪢̸', - 'NotNestedLessLess' => '⪡̸', - 'notni' => '∌', - 'notniva' => '∌', - 'notnivb' => '⋾', - 'notnivc' => '⋽', - 'NotPrecedes' => '⊀', - 'NotPrecedesEqual' => '⪯̸', - 'NotPrecedesSlantEqual' => 'â‹ ', - 'NotReverseElement' => '∌', - 'NotRightTriangle' => 'â‹«', - 'NotRightTriangleBar' => 'â§Ì¸', - 'NotRightTriangleEqual' => 'â‹­', - 'NotSquareSubset' => 'âŠÌ¸', - 'NotSquareSubsetEqual' => 'â‹¢', - 'NotSquareSuperset' => 'âŠÌ¸', - 'NotSquareSupersetEqual' => 'â‹£', - 'NotSubset' => '⊂⃒', - 'NotSubsetEqual' => '⊈', - 'NotSucceeds' => 'âŠ', - 'NotSucceedsEqual' => '⪰̸', - 'NotSucceedsSlantEqual' => 'â‹¡', - 'NotSucceedsTilde' => '≿̸', - 'NotSuperset' => '⊃⃒', - 'NotSupersetEqual' => '⊉', - 'NotTilde' => 'â‰', - 'NotTildeEqual' => '≄', - 'NotTildeFullEqual' => '≇', - 'NotTildeTilde' => '≉', - 'NotVerticalBar' => '∤', - 'npar' => '∦', - 'nparallel' => '∦', - 'nparsl' => '⫽⃥', - 'npart' => '∂̸', - 'npolint' => '⨔', - 'npr' => '⊀', - 'nprcue' => 'â‹ ', - 'npre' => '⪯̸', - 'nprec' => '⊀', - 'npreceq' => '⪯̸', - 'nrArr' => 'â‡', - 'nrarr' => '↛', - 'nrarrc' => '⤳̸', - 'nrarrw' => 'â†Ì¸', - 'nRightarrow' => 'â‡', - 'nrightarrow' => '↛', - 'nrtri' => 'â‹«', - 'nrtrie' => 'â‹­', - 'nsc' => 'âŠ', - 'nsccue' => 'â‹¡', - 'nsce' => '⪰̸', - 'Nscr' => 'ð’©', - 'nscr' => 'ð“ƒ', - 'nshortmid' => '∤', - 'nshortparallel' => '∦', - 'nsim' => 'â‰', - 'nsime' => '≄', - 'nsimeq' => '≄', - 'nsmid' => '∤', - 'nspar' => '∦', - 'nsqsube' => 'â‹¢', - 'nsqsupe' => 'â‹£', - 'nsub' => '⊄', - 'nsubE' => '⫅̸', - 'nsube' => '⊈', - 'nsubset' => '⊂⃒', - 'nsubseteq' => '⊈', - 'nsubseteqq' => '⫅̸', - 'nsucc' => 'âŠ', - 'nsucceq' => '⪰̸', - 'nsup' => '⊅', - 'nsupE' => '⫆̸', - 'nsupe' => '⊉', - 'nsupset' => '⊃⃒', - 'nsupseteq' => '⊉', - 'nsupseteqq' => '⫆̸', - 'ntgl' => '≹', - 'Ntilde' => 'Ñ', - 'Ntild' => 'Ñ', - 'ntilde' => 'ñ', - 'ntild' => 'ñ', - 'ntlg' => '≸', - 'ntriangleleft' => '⋪', - 'ntrianglelefteq' => '⋬', - 'ntriangleright' => 'â‹«', - 'ntrianglerighteq' => 'â‹­', - 'Nu' => 'Î', - 'nu' => 'ν', - 'num' => '#', - 'numero' => 'â„–', - 'numsp' => ' ', - 'nvap' => 'â‰âƒ’', - 'nVDash' => '⊯', - 'nVdash' => '⊮', - 'nvDash' => '⊭', - 'nvdash' => '⊬', - 'nvge' => '≥⃒', - 'nvgt' => '>⃒', - 'nvHarr' => '⤄', - 'nvinfin' => '⧞', - 'nvlArr' => '⤂', - 'nvle' => '≤⃒', - 'nvlt' => '<⃒', - 'nvltrie' => '⊴⃒', - 'nvrArr' => '⤃', - 'nvrtrie' => '⊵⃒', - 'nvsim' => '∼⃒', - 'nwarhk' => '⤣', - 'nwArr' => '⇖', - 'nwarr' => '↖', - 'nwarrow' => '↖', - 'nwnear' => '⤧', - 'Oacute' => 'Ó', - 'Oacut' => 'Ó', - 'oacute' => 'ó', - 'oacut' => 'ó', - 'oast' => '⊛', - 'ocir' => 'ô', - 'Ocirc' => 'Ô', - 'Ocir' => 'Ô', - 'ocirc' => 'ô', - 'Ocy' => 'О', - 'ocy' => 'о', - 'odash' => 'âŠ', - 'Odblac' => 'Å', - 'odblac' => 'Å‘', - 'odiv' => '⨸', - 'odot' => '⊙', - 'odsold' => '⦼', - 'OElig' => 'Å’', - 'oelig' => 'Å“', - 'ofcir' => '⦿', - 'Ofr' => 'ð”’', - 'ofr' => 'ð”¬', - 'ogon' => 'Ë›', - 'Ograve' => 'Ã’', - 'Ograv' => 'Ã’', - 'ograve' => 'ò', - 'ograv' => 'ò', - 'ogt' => 'â§', - 'ohbar' => '⦵', - 'ohm' => 'Ω', - 'oint' => '∮', - 'olarr' => '↺', - 'olcir' => '⦾', - 'olcross' => '⦻', - 'oline' => '‾', - 'olt' => '⧀', - 'Omacr' => 'ÅŒ', - 'omacr' => 'Å', - 'Omega' => 'Ω', - 'omega' => 'ω', - 'Omicron' => 'Ο', - 'omicron' => 'ο', - 'omid' => '⦶', - 'ominus' => '⊖', - 'Oopf' => 'ð•†', - 'oopf' => 'ð• ', - 'opar' => '⦷', - 'OpenCurlyDoubleQuote' => '“', - 'OpenCurlyQuote' => '‘', - 'operp' => '⦹', - 'oplus' => '⊕', - 'Or' => 'â©”', - 'or' => '∨', - 'orarr' => '↻', - 'ord' => 'º', - 'order' => 'â„´', - 'orderof' => 'â„´', - 'ordf' => 'ª', - 'ordm' => 'º', - 'origof' => '⊶', - 'oror' => 'â©–', - 'orslope' => 'â©—', - 'orv' => 'â©›', - 'oS' => 'Ⓢ', - 'Oscr' => 'ð’ª', - 'oscr' => 'â„´', - 'Oslash' => 'Ø', - 'Oslas' => 'Ø', - 'oslash' => 'ø', - 'oslas' => 'ø', - 'osol' => '⊘', - 'Otilde' => 'Õ', - 'Otild' => 'Õ', - 'otilde' => 'õ', - 'otild' => 'õ', - 'Otimes' => '⨷', - 'otimes' => '⊗', - 'otimesas' => '⨶', - 'Ouml' => 'Ö', - 'Oum' => 'Ö', - 'ouml' => 'ö', - 'oum' => 'ö', - 'ovbar' => '⌽', - 'OverBar' => '‾', - 'OverBrace' => 'âž', - 'OverBracket' => '⎴', - 'OverParenthesis' => 'âœ', - 'par' => '¶', - 'para' => '¶', - 'parallel' => '∥', - 'parsim' => '⫳', - 'parsl' => '⫽', - 'part' => '∂', - 'PartialD' => '∂', - 'Pcy' => 'П', - 'pcy' => 'п', - 'percnt' => '%', - 'period' => '.', - 'permil' => '‰', - 'perp' => '⊥', - 'pertenk' => '‱', - 'Pfr' => 'ð”“', - 'pfr' => 'ð”­', - 'Phi' => 'Φ', - 'phi' => 'φ', - 'phiv' => 'Ï•', - 'phmmat' => 'ℳ', - 'phone' => '☎', - 'Pi' => 'Π', - 'pi' => 'Ï€', - 'pitchfork' => 'â‹”', - 'piv' => 'Ï–', - 'planck' => 'â„', - 'planckh' => 'â„Ž', - 'plankv' => 'â„', - 'plus' => '+', - 'plusacir' => '⨣', - 'plusb' => '⊞', - 'pluscir' => '⨢', - 'plusdo' => '∔', - 'plusdu' => '⨥', - 'pluse' => '⩲', - 'PlusMinus' => '±', - 'plusmn' => '±', - 'plusm' => '±', - 'plussim' => '⨦', - 'plustwo' => '⨧', - 'pm' => '±', - 'Poincareplane' => 'â„Œ', - 'pointint' => '⨕', - 'Popf' => 'â„™', - 'popf' => 'ð•¡', - 'pound' => '£', - 'poun' => '£', - 'Pr' => '⪻', - 'pr' => '≺', - 'prap' => '⪷', - 'prcue' => '≼', - 'prE' => '⪳', - 'pre' => '⪯', - 'prec' => '≺', - 'precapprox' => '⪷', - 'preccurlyeq' => '≼', - 'Precedes' => '≺', - 'PrecedesEqual' => '⪯', - 'PrecedesSlantEqual' => '≼', - 'PrecedesTilde' => '≾', - 'preceq' => '⪯', - 'precnapprox' => '⪹', - 'precneqq' => '⪵', - 'precnsim' => '⋨', - 'precsim' => '≾', - 'Prime' => '″', - 'prime' => '′', - 'primes' => 'â„™', - 'prnap' => '⪹', - 'prnE' => '⪵', - 'prnsim' => '⋨', - 'prod' => 'âˆ', - 'Product' => 'âˆ', - 'profalar' => '⌮', - 'profline' => '⌒', - 'profsurf' => '⌓', - 'prop' => 'âˆ', - 'Proportion' => '∷', - 'Proportional' => 'âˆ', - 'propto' => 'âˆ', - 'prsim' => '≾', - 'prurel' => '⊰', - 'Pscr' => 'ð’«', - 'pscr' => 'ð“…', - 'Psi' => 'Ψ', - 'psi' => 'ψ', - 'puncsp' => ' ', - 'Qfr' => 'ð””', - 'qfr' => 'ð”®', - 'qint' => '⨌', - 'Qopf' => 'â„š', - 'qopf' => 'ð•¢', - 'qprime' => 'â—', - 'Qscr' => 'ð’¬', - 'qscr' => 'ð“†', - 'quaternions' => 'â„', - 'quatint' => '⨖', - 'quest' => '?', - 'questeq' => '≟', - 'QUOT' => '"', - 'QUO' => '"', - 'quot' => '"', - 'quo' => '"', - 'rAarr' => '⇛', - 'race' => '∽̱', - 'Racute' => 'Å”', - 'racute' => 'Å•', - 'radic' => '√', - 'raemptyv' => '⦳', - 'Rang' => '⟫', - 'rang' => '⟩', - 'rangd' => '⦒', - 'range' => '⦥', - 'rangle' => '⟩', - 'raquo' => '»', - 'raqu' => '»', - 'Rarr' => '↠', - 'rArr' => '⇒', - 'rarr' => '→', - 'rarrap' => '⥵', - 'rarrb' => '⇥', - 'rarrbfs' => '⤠', - 'rarrc' => '⤳', - 'rarrfs' => '⤞', - 'rarrhk' => '↪', - 'rarrlp' => '↬', - 'rarrpl' => '⥅', - 'rarrsim' => '⥴', - 'Rarrtl' => '⤖', - 'rarrtl' => '↣', - 'rarrw' => 'â†', - 'rAtail' => '⤜', - 'ratail' => '⤚', - 'ratio' => '∶', - 'rationals' => 'â„š', - 'RBarr' => 'â¤', - 'rBarr' => 'â¤', - 'rbarr' => 'â¤', - 'rbbrk' => 'â³', - 'rbrace' => '}', - 'rbrack' => ']', - 'rbrke' => '⦌', - 'rbrksld' => '⦎', - 'rbrkslu' => 'â¦', - 'Rcaron' => 'Ř', - 'rcaron' => 'Å™', - 'Rcedil' => 'Å–', - 'rcedil' => 'Å—', - 'rceil' => '⌉', - 'rcub' => '}', - 'Rcy' => 'Р', - 'rcy' => 'Ñ€', - 'rdca' => '⤷', - 'rdldhar' => '⥩', - 'rdquo' => 'â€', - 'rdquor' => 'â€', - 'rdsh' => '↳', - 'Re' => 'â„œ', - 'real' => 'â„œ', - 'realine' => 'â„›', - 'realpart' => 'â„œ', - 'reals' => 'â„', - 'rect' => 'â–­', - 'REG' => '®', - 'RE' => '®', - 'reg' => '®', - 're' => '®', - 'ReverseElement' => '∋', - 'ReverseEquilibrium' => '⇋', - 'ReverseUpEquilibrium' => '⥯', - 'rfisht' => '⥽', - 'rfloor' => '⌋', - 'Rfr' => 'â„œ', - 'rfr' => 'ð”¯', - 'rHar' => '⥤', - 'rhard' => 'â‡', - 'rharu' => '⇀', - 'rharul' => '⥬', - 'Rho' => 'Ρ', - 'rho' => 'Ï', - 'rhov' => 'ϱ', - 'RightAngleBracket' => '⟩', - 'RightArrow' => '→', - 'Rightarrow' => '⇒', - 'rightarrow' => '→', - 'RightArrowBar' => '⇥', - 'RightArrowLeftArrow' => '⇄', - 'rightarrowtail' => '↣', - 'RightCeiling' => '⌉', - 'RightDoubleBracket' => '⟧', - 'RightDownTeeVector' => 'â¥', - 'RightDownVector' => '⇂', - 'RightDownVectorBar' => '⥕', - 'RightFloor' => '⌋', - 'rightharpoondown' => 'â‡', - 'rightharpoonup' => '⇀', - 'rightleftarrows' => '⇄', - 'rightleftharpoons' => '⇌', - 'rightrightarrows' => '⇉', - 'rightsquigarrow' => 'â†', - 'RightTee' => '⊢', - 'RightTeeArrow' => '↦', - 'RightTeeVector' => '⥛', - 'rightthreetimes' => 'â‹Œ', - 'RightTriangle' => '⊳', - 'RightTriangleBar' => 'â§', - 'RightTriangleEqual' => '⊵', - 'RightUpDownVector' => 'â¥', - 'RightUpTeeVector' => '⥜', - 'RightUpVector' => '↾', - 'RightUpVectorBar' => '⥔', - 'RightVector' => '⇀', - 'RightVectorBar' => '⥓', - 'ring' => 'Ëš', - 'risingdotseq' => '≓', - 'rlarr' => '⇄', - 'rlhar' => '⇌', - 'rlm' => 'â€', - 'rmoust' => '⎱', - 'rmoustache' => '⎱', - 'rnmid' => 'â«®', - 'roang' => '⟭', - 'roarr' => '⇾', - 'robrk' => '⟧', - 'ropar' => '⦆', - 'Ropf' => 'â„', - 'ropf' => 'ð•£', - 'roplus' => '⨮', - 'rotimes' => '⨵', - 'RoundImplies' => '⥰', - 'rpar' => ')', - 'rpargt' => '⦔', - 'rppolint' => '⨒', - 'rrarr' => '⇉', - 'Rrightarrow' => '⇛', - 'rsaquo' => '›', - 'Rscr' => 'â„›', - 'rscr' => 'ð“‡', - 'Rsh' => '↱', - 'rsh' => '↱', - 'rsqb' => ']', - 'rsquo' => '’', - 'rsquor' => '’', - 'rthree' => 'â‹Œ', - 'rtimes' => 'â‹Š', - 'rtri' => 'â–¹', - 'rtrie' => '⊵', - 'rtrif' => 'â–¸', - 'rtriltri' => '⧎', - 'RuleDelayed' => '⧴', - 'ruluhar' => '⥨', - 'rx' => 'â„ž', - 'Sacute' => 'Åš', - 'sacute' => 'Å›', - 'sbquo' => '‚', - 'Sc' => '⪼', - 'sc' => '≻', - 'scap' => '⪸', - 'Scaron' => 'Å ', - 'scaron' => 'Å¡', - 'sccue' => '≽', - 'scE' => '⪴', - 'sce' => '⪰', - 'Scedil' => 'Åž', - 'scedil' => 'ÅŸ', - 'Scirc' => 'Åœ', - 'scirc' => 'Å', - 'scnap' => '⪺', - 'scnE' => '⪶', - 'scnsim' => 'â‹©', - 'scpolint' => '⨓', - 'scsim' => '≿', - 'Scy' => 'С', - 'scy' => 'Ñ', - 'sdot' => 'â‹…', - 'sdotb' => '⊡', - 'sdote' => '⩦', - 'searhk' => '⤥', - 'seArr' => '⇘', - 'searr' => '↘', - 'searrow' => '↘', - 'sect' => '§', - 'sec' => '§', - 'semi' => ';', - 'seswar' => '⤩', - 'setminus' => '∖', - 'setmn' => '∖', - 'sext' => '✶', - 'Sfr' => 'ð”–', - 'sfr' => 'ð”°', - 'sfrown' => '⌢', - 'sharp' => '♯', - 'SHCHcy' => 'Щ', - 'shchcy' => 'щ', - 'SHcy' => 'Ш', - 'shcy' => 'ш', - 'ShortDownArrow' => '↓', - 'ShortLeftArrow' => 'â†', - 'shortmid' => '∣', - 'shortparallel' => '∥', - 'ShortRightArrow' => '→', - 'ShortUpArrow' => '↑', - 'shy' => '­', - 'sh' => '­', - 'Sigma' => 'Σ', - 'sigma' => 'σ', - 'sigmaf' => 'Ï‚', - 'sigmav' => 'Ï‚', - 'sim' => '∼', - 'simdot' => '⩪', - 'sime' => '≃', - 'simeq' => '≃', - 'simg' => '⪞', - 'simgE' => '⪠', - 'siml' => 'âª', - 'simlE' => '⪟', - 'simne' => '≆', - 'simplus' => '⨤', - 'simrarr' => '⥲', - 'slarr' => 'â†', - 'SmallCircle' => '∘', - 'smallsetminus' => '∖', - 'smashp' => '⨳', - 'smeparsl' => '⧤', - 'smid' => '∣', - 'smile' => '⌣', - 'smt' => '⪪', - 'smte' => '⪬', - 'smtes' => '⪬︀', - 'SOFTcy' => 'Ь', - 'softcy' => 'ÑŒ', - 'sol' => '/', - 'solb' => '⧄', - 'solbar' => '⌿', - 'Sopf' => 'ð•Š', - 'sopf' => 'ð•¤', - 'spades' => 'â™ ', - 'spadesuit' => 'â™ ', - 'spar' => '∥', - 'sqcap' => '⊓', - 'sqcaps' => '⊓︀', - 'sqcup' => '⊔', - 'sqcups' => '⊔︀', - 'Sqrt' => '√', - 'sqsub' => 'âŠ', - 'sqsube' => '⊑', - 'sqsubset' => 'âŠ', - 'sqsubseteq' => '⊑', - 'sqsup' => 'âŠ', - 'sqsupe' => '⊒', - 'sqsupset' => 'âŠ', - 'sqsupseteq' => '⊒', - 'squ' => 'â–¡', - 'Square' => 'â–¡', - 'square' => 'â–¡', - 'SquareIntersection' => '⊓', - 'SquareSubset' => 'âŠ', - 'SquareSubsetEqual' => '⊑', - 'SquareSuperset' => 'âŠ', - 'SquareSupersetEqual' => '⊒', - 'SquareUnion' => '⊔', - 'squarf' => 'â–ª', - 'squf' => 'â–ª', - 'srarr' => '→', - 'Sscr' => 'ð’®', - 'sscr' => 'ð“ˆ', - 'ssetmn' => '∖', - 'ssmile' => '⌣', - 'sstarf' => '⋆', - 'Star' => '⋆', - 'star' => '☆', - 'starf' => '★', - 'straightepsilon' => 'ϵ', - 'straightphi' => 'Ï•', - 'strns' => '¯', - 'Sub' => 'â‹', - 'sub' => '⊂', - 'subdot' => '⪽', - 'subE' => 'â«…', - 'sube' => '⊆', - 'subedot' => '⫃', - 'submult' => 'â«', - 'subnE' => 'â«‹', - 'subne' => '⊊', - 'subplus' => '⪿', - 'subrarr' => '⥹', - 'Subset' => 'â‹', - 'subset' => '⊂', - 'subseteq' => '⊆', - 'subseteqq' => 'â«…', - 'SubsetEqual' => '⊆', - 'subsetneq' => '⊊', - 'subsetneqq' => 'â«‹', - 'subsim' => '⫇', - 'subsub' => 'â«•', - 'subsup' => 'â«“', - 'succ' => '≻', - 'succapprox' => '⪸', - 'succcurlyeq' => '≽', - 'Succeeds' => '≻', - 'SucceedsEqual' => '⪰', - 'SucceedsSlantEqual' => '≽', - 'SucceedsTilde' => '≿', - 'succeq' => '⪰', - 'succnapprox' => '⪺', - 'succneqq' => '⪶', - 'succnsim' => 'â‹©', - 'succsim' => '≿', - 'SuchThat' => '∋', - 'Sum' => '∑', - 'sum' => '∑', - 'sung' => '♪', - 'Sup' => 'â‹‘', - 'sup' => '³', - 'sup1' => '¹', - 'sup2' => '²', - 'sup3' => '³', - 'supdot' => '⪾', - 'supdsub' => '⫘', - 'supE' => '⫆', - 'supe' => '⊇', - 'supedot' => 'â«„', - 'Superset' => '⊃', - 'SupersetEqual' => '⊇', - 'suphsol' => '⟉', - 'suphsub' => 'â«—', - 'suplarr' => '⥻', - 'supmult' => 'â«‚', - 'supnE' => 'â«Œ', - 'supne' => '⊋', - 'supplus' => 'â«€', - 'Supset' => 'â‹‘', - 'supset' => '⊃', - 'supseteq' => '⊇', - 'supseteqq' => '⫆', - 'supsetneq' => '⊋', - 'supsetneqq' => 'â«Œ', - 'supsim' => '⫈', - 'supsub' => 'â«”', - 'supsup' => 'â«–', - 'swarhk' => '⤦', - 'swArr' => '⇙', - 'swarr' => '↙', - 'swarrow' => '↙', - 'swnwar' => '⤪', - 'szlig' => 'ß', - 'szli' => 'ß', - 'Tab' => ' ', - 'target' => '⌖', - 'Tau' => 'Τ', - 'tau' => 'Ï„', - 'tbrk' => '⎴', - 'Tcaron' => 'Ť', - 'tcaron' => 'Å¥', - 'Tcedil' => 'Å¢', - 'tcedil' => 'Å£', - 'Tcy' => 'Т', - 'tcy' => 'Ñ‚', - 'tdot' => '⃛', - 'telrec' => '⌕', - 'Tfr' => 'ð”—', - 'tfr' => 'ð”±', - 'there4' => '∴', - 'Therefore' => '∴', - 'therefore' => '∴', - 'Theta' => 'Θ', - 'theta' => 'θ', - 'thetasym' => 'Ï‘', - 'thetav' => 'Ï‘', - 'thickapprox' => '≈', - 'thicksim' => '∼', - 'ThickSpace' => 'âŸâ€Š', - 'thinsp' => ' ', - 'ThinSpace' => ' ', - 'thkap' => '≈', - 'thksim' => '∼', - 'THORN' => 'Þ', - 'THOR' => 'Þ', - 'thorn' => 'þ', - 'thor' => 'þ', - 'Tilde' => '∼', - 'tilde' => 'Ëœ', - 'TildeEqual' => '≃', - 'TildeFullEqual' => '≅', - 'TildeTilde' => '≈', - 'times' => '×', - 'time' => '×', - 'timesb' => '⊠', - 'timesbar' => '⨱', - 'timesd' => '⨰', - 'tint' => '∭', - 'toea' => '⤨', - 'top' => '⊤', - 'topbot' => '⌶', - 'topcir' => '⫱', - 'Topf' => 'ð•‹', - 'topf' => 'ð•¥', - 'topfork' => 'â«š', - 'tosa' => '⤩', - 'tprime' => '‴', - 'TRADE' => 'â„¢', - 'trade' => 'â„¢', - 'triangle' => 'â–µ', - 'triangledown' => 'â–¿', - 'triangleleft' => 'â—ƒ', - 'trianglelefteq' => '⊴', - 'triangleq' => '≜', - 'triangleright' => 'â–¹', - 'trianglerighteq' => '⊵', - 'tridot' => 'â—¬', - 'trie' => '≜', - 'triminus' => '⨺', - 'TripleDot' => '⃛', - 'triplus' => '⨹', - 'trisb' => 'â§', - 'tritime' => '⨻', - 'trpezium' => 'â¢', - 'Tscr' => 'ð’¯', - 'tscr' => 'ð“‰', - 'TScy' => 'Ц', - 'tscy' => 'ц', - 'TSHcy' => 'Ћ', - 'tshcy' => 'Ñ›', - 'Tstrok' => 'Ŧ', - 'tstrok' => 'ŧ', - 'twixt' => '≬', - 'twoheadleftarrow' => '↞', - 'twoheadrightarrow' => '↠', - 'Uacute' => 'Ú', - 'Uacut' => 'Ú', - 'uacute' => 'ú', - 'uacut' => 'ú', - 'Uarr' => '↟', - 'uArr' => '⇑', - 'uarr' => '↑', - 'Uarrocir' => '⥉', - 'Ubrcy' => 'ÐŽ', - 'ubrcy' => 'Ñž', - 'Ubreve' => 'Ŭ', - 'ubreve' => 'Å­', - 'Ucirc' => 'Û', - 'Ucir' => 'Û', - 'ucirc' => 'û', - 'ucir' => 'û', - 'Ucy' => 'У', - 'ucy' => 'у', - 'udarr' => '⇅', - 'Udblac' => 'Å°', - 'udblac' => 'ű', - 'udhar' => '⥮', - 'ufisht' => '⥾', - 'Ufr' => 'ð”˜', - 'ufr' => 'ð”²', - 'Ugrave' => 'Ù', - 'Ugrav' => 'Ù', - 'ugrave' => 'ù', - 'ugrav' => 'ù', - 'uHar' => '⥣', - 'uharl' => '↿', - 'uharr' => '↾', - 'uhblk' => 'â–€', - 'ulcorn' => '⌜', - 'ulcorner' => '⌜', - 'ulcrop' => 'âŒ', - 'ultri' => 'â—¸', - 'Umacr' => 'Ū', - 'umacr' => 'Å«', - 'uml' => '¨', - 'um' => '¨', - 'UnderBar' => '_', - 'UnderBrace' => 'âŸ', - 'UnderBracket' => '⎵', - 'UnderParenthesis' => 'â', - 'Union' => '⋃', - 'UnionPlus' => '⊎', - 'Uogon' => 'Ų', - 'uogon' => 'ų', - 'Uopf' => 'ð•Œ', - 'uopf' => 'ð•¦', - 'UpArrow' => '↑', - 'Uparrow' => '⇑', - 'uparrow' => '↑', - 'UpArrowBar' => '⤒', - 'UpArrowDownArrow' => '⇅', - 'UpDownArrow' => '↕', - 'Updownarrow' => '⇕', - 'updownarrow' => '↕', - 'UpEquilibrium' => '⥮', - 'upharpoonleft' => '↿', - 'upharpoonright' => '↾', - 'uplus' => '⊎', - 'UpperLeftArrow' => '↖', - 'UpperRightArrow' => '↗', - 'Upsi' => 'Ï’', - 'upsi' => 'Ï…', - 'upsih' => 'Ï’', - 'Upsilon' => 'Î¥', - 'upsilon' => 'Ï…', - 'UpTee' => '⊥', - 'UpTeeArrow' => '↥', - 'upuparrows' => '⇈', - 'urcorn' => 'âŒ', - 'urcorner' => 'âŒ', - 'urcrop' => '⌎', - 'Uring' => 'Å®', - 'uring' => 'ů', - 'urtri' => 'â—¹', - 'Uscr' => 'ð’°', - 'uscr' => 'ð“Š', - 'utdot' => 'â‹°', - 'Utilde' => 'Ũ', - 'utilde' => 'Å©', - 'utri' => 'â–µ', - 'utrif' => 'â–´', - 'uuarr' => '⇈', - 'Uuml' => 'Ãœ', - 'Uum' => 'Ãœ', - 'uuml' => 'ü', - 'uum' => 'ü', - 'uwangle' => '⦧', - 'vangrt' => '⦜', - 'varepsilon' => 'ϵ', - 'varkappa' => 'Ï°', - 'varnothing' => '∅', - 'varphi' => 'Ï•', - 'varpi' => 'Ï–', - 'varpropto' => 'âˆ', - 'vArr' => '⇕', - 'varr' => '↕', - 'varrho' => 'ϱ', - 'varsigma' => 'Ï‚', - 'varsubsetneq' => '⊊︀', - 'varsubsetneqq' => '⫋︀', - 'varsupsetneq' => '⊋︀', - 'varsupsetneqq' => '⫌︀', - 'vartheta' => 'Ï‘', - 'vartriangleleft' => '⊲', - 'vartriangleright' => '⊳', - 'Vbar' => 'â««', - 'vBar' => '⫨', - 'vBarv' => 'â«©', - 'Vcy' => 'Ð’', - 'vcy' => 'в', - 'VDash' => '⊫', - 'Vdash' => '⊩', - 'vDash' => '⊨', - 'vdash' => '⊢', - 'Vdashl' => '⫦', - 'Vee' => 'â‹', - 'vee' => '∨', - 'veebar' => '⊻', - 'veeeq' => '≚', - 'vellip' => 'â‹®', - 'Verbar' => '‖', - 'verbar' => '|', - 'Vert' => '‖', - 'vert' => '|', - 'VerticalBar' => '∣', - 'VerticalLine' => '|', - 'VerticalSeparator' => 'â˜', - 'VerticalTilde' => '≀', - 'VeryThinSpace' => ' ', - 'Vfr' => 'ð”™', - 'vfr' => 'ð”³', - 'vltri' => '⊲', - 'vnsub' => '⊂⃒', - 'vnsup' => '⊃⃒', - 'Vopf' => 'ð•', - 'vopf' => 'ð•§', - 'vprop' => 'âˆ', - 'vrtri' => '⊳', - 'Vscr' => 'ð’±', - 'vscr' => 'ð“‹', - 'vsubnE' => '⫋︀', - 'vsubne' => '⊊︀', - 'vsupnE' => '⫌︀', - 'vsupne' => '⊋︀', - 'Vvdash' => '⊪', - 'vzigzag' => '⦚', - 'Wcirc' => 'Å´', - 'wcirc' => 'ŵ', - 'wedbar' => 'â©Ÿ', - 'Wedge' => 'â‹€', - 'wedge' => '∧', - 'wedgeq' => '≙', - 'weierp' => '℘', - 'Wfr' => 'ð”š', - 'wfr' => 'ð”´', - 'Wopf' => 'ð•Ž', - 'wopf' => 'ð•¨', - 'wp' => '℘', - 'wr' => '≀', - 'wreath' => '≀', - 'Wscr' => 'ð’²', - 'wscr' => 'ð“Œ', - 'xcap' => 'â‹‚', - 'xcirc' => 'â—¯', - 'xcup' => '⋃', - 'xdtri' => 'â–½', - 'Xfr' => 'ð”›', - 'xfr' => 'ð”µ', - 'xhArr' => '⟺', - 'xharr' => '⟷', - 'Xi' => 'Ξ', - 'xi' => 'ξ', - 'xlArr' => '⟸', - 'xlarr' => '⟵', - 'xmap' => '⟼', - 'xnis' => 'â‹»', - 'xodot' => '⨀', - 'Xopf' => 'ð•', - 'xopf' => 'ð•©', - 'xoplus' => 'â¨', - 'xotime' => '⨂', - 'xrArr' => '⟹', - 'xrarr' => '⟶', - 'Xscr' => 'ð’³', - 'xscr' => 'ð“', - 'xsqcup' => '⨆', - 'xuplus' => '⨄', - 'xutri' => 'â–³', - 'xvee' => 'â‹', - 'xwedge' => 'â‹€', - 'Yacute' => 'Ã', - 'Yacut' => 'Ã', - 'yacute' => 'ý', - 'yacut' => 'ý', - 'YAcy' => 'Я', - 'yacy' => 'Ñ', - 'Ycirc' => 'Ŷ', - 'ycirc' => 'Å·', - 'Ycy' => 'Ы', - 'ycy' => 'Ñ‹', - 'yen' => 'Â¥', - 'ye' => 'Â¥', - 'Yfr' => 'ð”œ', - 'yfr' => 'ð”¶', - 'YIcy' => 'Ї', - 'yicy' => 'Ñ—', - 'Yopf' => 'ð•', - 'yopf' => 'ð•ª', - 'Yscr' => 'ð’´', - 'yscr' => 'ð“Ž', - 'YUcy' => 'Ю', - 'yucy' => 'ÑŽ', - 'Yuml' => 'Ÿ', - 'yuml' => 'ÿ', - 'yum' => 'ÿ', - 'Zacute' => 'Ź', - 'zacute' => 'ź', - 'Zcaron' => 'Ž', - 'zcaron' => 'ž', - 'Zcy' => 'З', - 'zcy' => 'з', - 'Zdot' => 'Å»', - 'zdot' => 'ż', - 'zeetrf' => 'ℨ', - 'ZeroWidthSpace' => '​', - 'Zeta' => 'Ζ', - 'zeta' => 'ζ', - 'Zfr' => 'ℨ', - 'zfr' => 'ð”·', - 'ZHcy' => 'Ж', - 'zhcy' => 'ж', - 'zigrarr' => 'â‡', - 'Zopf' => 'ℤ', - 'zopf' => 'ð•«', - 'Zscr' => 'ð’µ', - 'zscr' => 'ð“', - 'zwj' => 'â€', - 'zwnj' => '‌', - ); -} diff --git a/vendor/masterminds/html5/src/HTML5/Exception.php b/vendor/masterminds/html5/src/HTML5/Exception.php deleted file mode 100644 index 64e97e6..0000000 --- a/vendor/masterminds/html5/src/HTML5/Exception.php +++ /dev/null @@ -1,10 +0,0 @@ - self::NAMESPACE_HTML, - 'svg' => self::NAMESPACE_SVG, - 'math' => self::NAMESPACE_MATHML, - ); - - /** - * Holds the always available namespaces (which does not require the XMLNS declaration). - * - * @var array - */ - protected $implicitNamespaces = array( - 'xml' => self::NAMESPACE_XML, - 'xmlns' => self::NAMESPACE_XMLNS, - 'xlink' => self::NAMESPACE_XLINK, - ); - - /** - * Holds a stack of currently active namespaces. - * - * @var array - */ - protected $nsStack = array(); - - /** - * Holds the number of namespaces declared by a node. - * - * @var array - */ - protected $pushes = array(); - - /** - * Defined in 8.2.5. - */ - const IM_INITIAL = 0; - - const IM_BEFORE_HTML = 1; - - const IM_BEFORE_HEAD = 2; - - const IM_IN_HEAD = 3; - - const IM_IN_HEAD_NOSCRIPT = 4; - - const IM_AFTER_HEAD = 5; - - const IM_IN_BODY = 6; - - const IM_TEXT = 7; - - const IM_IN_TABLE = 8; - - const IM_IN_TABLE_TEXT = 9; - - const IM_IN_CAPTION = 10; - - const IM_IN_COLUMN_GROUP = 11; - - const IM_IN_TABLE_BODY = 12; - - const IM_IN_ROW = 13; - - const IM_IN_CELL = 14; - - const IM_IN_SELECT = 15; - - const IM_IN_SELECT_IN_TABLE = 16; - - const IM_AFTER_BODY = 17; - - const IM_IN_FRAMESET = 18; - - const IM_AFTER_FRAMESET = 19; - - const IM_AFTER_AFTER_BODY = 20; - - const IM_AFTER_AFTER_FRAMESET = 21; - - const IM_IN_SVG = 22; - - const IM_IN_MATHML = 23; - - protected $options = array(); - - protected $stack = array(); - - protected $current; // Pointer in the tag hierarchy. - protected $rules; - protected $doc; - - protected $frag; - - protected $processor; - - protected $insertMode = 0; - - /** - * Track if we are in an element that allows only inline child nodes. - * - * @var string|null - */ - protected $onlyInline; - - /** - * Quirks mode is enabled by default. - * Any document that is missing the DT will be considered to be in quirks mode. - */ - protected $quirks = true; - - protected $errors = array(); - - public function __construct($isFragment = false, array $options = array()) - { - $this->options = $options; - - if (isset($options[self::OPT_TARGET_DOC])) { - $this->doc = $options[self::OPT_TARGET_DOC]; - } else { - $impl = new \DOMImplementation(); - // XXX: - // Create the doctype. For now, we are always creating HTML5 - // documents, and attempting to up-convert any older DTDs to HTML5. - $dt = $impl->createDocumentType('html'); - // $this->doc = \DOMImplementation::createDocument(NULL, 'html', $dt); - $this->doc = $impl->createDocument(null, '', $dt); - $this->doc->encoding = !empty($options['encoding']) ? $options['encoding'] : 'UTF-8'; - } - - $this->errors = array(); - - $this->current = $this->doc; // ->documentElement; - - // Create a rules engine for tags. - $this->rules = new TreeBuildingRules(); - - $implicitNS = array(); - if (isset($this->options[self::OPT_IMPLICIT_NS])) { - $implicitNS = $this->options[self::OPT_IMPLICIT_NS]; - } elseif (isset($this->options['implicitNamespaces'])) { - $implicitNS = $this->options['implicitNamespaces']; - } - - // Fill $nsStack with the defalut HTML5 namespaces, plus the "implicitNamespaces" array taken form $options - array_unshift($this->nsStack, $implicitNS + array('' => self::NAMESPACE_HTML) + $this->implicitNamespaces); - - if ($isFragment) { - $this->insertMode = static::IM_IN_BODY; - $this->frag = $this->doc->createDocumentFragment(); - $this->current = $this->frag; - } - } - - /** - * Get the document. - */ - public function document() - { - return $this->doc; - } - - /** - * Get the DOM fragment for the body. - * - * This returns a DOMNodeList because a fragment may have zero or more - * DOMNodes at its root. - * - * @see http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#concept-frag-parse-context - * - * @return \DOMDocumentFragment - */ - public function fragment() - { - return $this->frag; - } - - /** - * Provide an instruction processor. - * - * This is used for handling Processor Instructions as they are - * inserted. If omitted, PI's are inserted directly into the DOM tree. - * - * @param InstructionProcessor $proc - */ - public function setInstructionProcessor(InstructionProcessor $proc) - { - $this->processor = $proc; - } - - public function doctype($name, $idType = 0, $id = null, $quirks = false) - { - // This is used solely for setting quirks mode. Currently we don't - // try to preserve the inbound DT. We convert it to HTML5. - $this->quirks = $quirks; - - if ($this->insertMode > static::IM_INITIAL) { - $this->parseError('Illegal placement of DOCTYPE tag. Ignoring: ' . $name); - - return; - } - - $this->insertMode = static::IM_BEFORE_HTML; - } - - /** - * Process the start tag. - * - * @todo - XMLNS namespace handling (we need to parse, even if it's not valid) - * - XLink, MathML and SVG namespace handling - * - Omission rules: 8.1.2.4 Optional tags - * - * @param string $name - * @param array $attributes - * @param bool $selfClosing - * - * @return int - */ - public function startTag($name, $attributes = array(), $selfClosing = false) - { - $lname = $this->normalizeTagName($name); - - // Make sure we have an html element. - if (!$this->doc->documentElement && 'html' !== $name && !$this->frag) { - $this->startTag('html'); - } - - // Set quirks mode if we're at IM_INITIAL with no doctype. - if ($this->insertMode === static::IM_INITIAL) { - $this->quirks = true; - $this->parseError('No DOCTYPE specified.'); - } - - // SPECIAL TAG HANDLING: - // Spec says do this, and "don't ask." - // find the spec where this is defined... looks problematic - if ('image' === $name && !($this->insertMode === static::IM_IN_SVG || $this->insertMode === static::IM_IN_MATHML)) { - $name = 'img'; - } - - // Autoclose p tags where appropriate. - if ($this->insertMode >= static::IM_IN_BODY && Elements::isA($name, Elements::AUTOCLOSE_P)) { - $this->autoclose('p'); - } - - // Set insert mode: - switch ($name) { - case 'html': - $this->insertMode = static::IM_BEFORE_HEAD; - break; - case 'head': - if ($this->insertMode > static::IM_BEFORE_HEAD) { - $this->parseError('Unexpected head tag outside of head context.'); - } else { - $this->insertMode = static::IM_IN_HEAD; - } - break; - case 'body': - $this->insertMode = static::IM_IN_BODY; - break; - case 'svg': - $this->insertMode = static::IM_IN_SVG; - break; - case 'math': - $this->insertMode = static::IM_IN_MATHML; - break; - case 'noscript': - if ($this->insertMode === static::IM_IN_HEAD) { - $this->insertMode = static::IM_IN_HEAD_NOSCRIPT; - } - break; - } - - // Special case handling for SVG. - if ($this->insertMode === static::IM_IN_SVG) { - $lname = Elements::normalizeSvgElement($lname); - } - - $pushes = 0; - // when we found a tag thats appears inside $nsRoots, we have to switch the defalut namespace - if (isset($this->nsRoots[$lname]) && $this->nsStack[0][''] !== $this->nsRoots[$lname]) { - array_unshift($this->nsStack, array( - '' => $this->nsRoots[$lname], - ) + $this->nsStack[0]); - ++$pushes; - } - $needsWorkaround = false; - if (isset($this->options['xmlNamespaces']) && $this->options['xmlNamespaces']) { - // when xmlNamespaces is true a and we found a 'xmlns' or 'xmlns:*' attribute, we should add a new item to the $nsStack - foreach ($attributes as $aName => $aVal) { - if ('xmlns' === $aName) { - $needsWorkaround = $aVal; - array_unshift($this->nsStack, array( - '' => $aVal, - ) + $this->nsStack[0]); - ++$pushes; - } elseif ('xmlns' === (($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : '')) { - array_unshift($this->nsStack, array( - substr($aName, $pos + 1) => $aVal, - ) + $this->nsStack[0]); - ++$pushes; - } - } - } - - if ($this->onlyInline && Elements::isA($lname, Elements::BLOCK_TAG)) { - $this->autoclose($this->onlyInline); - $this->onlyInline = null; - } - - // some elements as table related tags might have optional end tags that force us to auto close multiple tags - // https://www.w3.org/TR/html401/struct/tables.html - if ($this->current instanceof \DOMElement && isset(Elements::$optionalEndElementsParentsToClose[$lname])) { - foreach (Elements::$optionalEndElementsParentsToClose[$lname] as $parentElName) { - if ($this->current instanceof \DOMElement && $this->current->tagName === $parentElName) { - $this->autoclose($parentElName); - } - } - } - - try { - $prefix = ($pos = strpos($lname, ':')) ? substr($lname, 0, $pos) : ''; - - if (false !== $needsWorkaround) { - $xml = "<$lname xmlns=\"$needsWorkaround\" " . (strlen($prefix) && isset($this->nsStack[0][$prefix]) ? ("xmlns:$prefix=\"" . $this->nsStack[0][$prefix] . '"') : '') . '/>'; - - $frag = new \DOMDocument('1.0', 'UTF-8'); - $frag->loadXML($xml); - - $ele = $this->doc->importNode($frag->documentElement, true); - } else { - if (!isset($this->nsStack[0][$prefix]) || ('' === $prefix && isset($this->options[self::OPT_DISABLE_HTML_NS]) && $this->options[self::OPT_DISABLE_HTML_NS])) { - $ele = $this->doc->createElement($lname); - } else { - $ele = $this->doc->createElementNS($this->nsStack[0][$prefix], $lname); - } - } - } catch (\DOMException $e) { - $this->parseError("Illegal tag name: <$lname>. Replaced with ."); - $ele = $this->doc->createElement('invalid'); - } - - if (Elements::isA($lname, Elements::BLOCK_ONLY_INLINE)) { - $this->onlyInline = $lname; - } - - // When we add some namespacess, we have to track them. Later, when "endElement" is invoked, we have to remove them. - // When we are on a void tag, we do not need to care about namesapce nesting. - if ($pushes > 0 && !Elements::isA($name, Elements::VOID_TAG)) { - // PHP tends to free the memory used by DOM, - // to avoid spl_object_hash collisions whe have to avoid garbage collection of $ele storing it into $pushes - // see https://bugs.php.net/bug.php?id=67459 - $this->pushes[spl_object_hash($ele)] = array($pushes, $ele); - } - - foreach ($attributes as $aName => $aVal) { - // xmlns attributes can't be set - if ('xmlns' === $aName) { - continue; - } - - if ($this->insertMode === static::IM_IN_SVG) { - $aName = Elements::normalizeSvgAttribute($aName); - } elseif ($this->insertMode === static::IM_IN_MATHML) { - $aName = Elements::normalizeMathMlAttribute($aName); - } - - $aVal = (string) $aVal; - - try { - $prefix = ($pos = strpos($aName, ':')) ? substr($aName, 0, $pos) : false; - - if ('xmlns' === $prefix) { - $ele->setAttributeNS(self::NAMESPACE_XMLNS, $aName, $aVal); - } elseif (false !== $prefix && isset($this->nsStack[0][$prefix])) { - $ele->setAttributeNS($this->nsStack[0][$prefix], $aName, $aVal); - } else { - $ele->setAttribute($aName, $aVal); - } - } catch (\DOMException $e) { - $this->parseError("Illegal attribute name for tag $name. Ignoring: $aName"); - continue; - } - - // This is necessary on a non-DTD schema, like HTML5. - if ('id' === $aName) { - $ele->setIdAttribute('id', true); - } - } - - if ($this->frag !== $this->current && $this->rules->hasRules($name)) { - // Some elements have special processing rules. Handle those separately. - $this->current = $this->rules->evaluate($ele, $this->current); - } else { - // Otherwise, it's a standard element. - $this->current->appendChild($ele); - - if (!Elements::isA($name, Elements::VOID_TAG)) { - $this->current = $ele; - } - - // Self-closing tags should only be respected on foreign elements - // (and are implied on void elements) - // See: https://www.w3.org/TR/html5/syntax.html#start-tags - if (Elements::isHtml5Element($name)) { - $selfClosing = false; - } - } - - // This is sort of a last-ditch attempt to correct for cases where no head/body - // elements are provided. - if ($this->insertMode <= static::IM_BEFORE_HEAD && 'head' !== $name && 'html' !== $name) { - $this->insertMode = static::IM_IN_BODY; - } - - // When we are on a void tag, we do not need to care about namesapce nesting, - // but we have to remove the namespaces pushed to $nsStack. - if ($pushes > 0 && Elements::isA($name, Elements::VOID_TAG)) { - // remove the namespaced definded by current node - for ($i = 0; $i < $pushes; ++$i) { - array_shift($this->nsStack); - } - } - - if ($selfClosing) { - $this->endTag($name); - } - - // Return the element mask, which the tokenizer can then use to set - // various processing rules. - return Elements::element($name); - } - - public function endTag($name) - { - $lname = $this->normalizeTagName($name); - - // Special case within 12.2.6.4.7: An end tag whose tag name is "br" should be treated as an opening tag - if ('br' === $name) { - $this->parseError('Closing tag encountered for void element br.'); - - $this->startTag('br'); - } - // Ignore closing tags for other unary elements. - elseif (Elements::isA($name, Elements::VOID_TAG)) { - return; - } - - if ($this->insertMode <= static::IM_BEFORE_HTML) { - // 8.2.5.4.2 - if (in_array($name, array( - 'html', - 'br', - 'head', - 'title', - ))) { - $this->startTag('html'); - $this->endTag($name); - $this->insertMode = static::IM_BEFORE_HEAD; - - return; - } - - // Ignore the tag. - $this->parseError('Illegal closing tag at global scope.'); - - return; - } - - // Special case handling for SVG. - if ($this->insertMode === static::IM_IN_SVG) { - $lname = Elements::normalizeSvgElement($lname); - } - - $cid = spl_object_hash($this->current); - - // XXX: HTML has no parent. What do we do, though, - // if this element appears in the wrong place? - if ('html' === $lname) { - return; - } - - // remove the namespaced definded by current node - if (isset($this->pushes[$cid])) { - for ($i = 0; $i < $this->pushes[$cid][0]; ++$i) { - array_shift($this->nsStack); - } - unset($this->pushes[$cid]); - } - - if (!$this->autoclose($lname)) { - $this->parseError('Could not find closing tag for ' . $lname); - } - - switch ($lname) { - case 'head': - $this->insertMode = static::IM_AFTER_HEAD; - break; - case 'body': - $this->insertMode = static::IM_AFTER_BODY; - break; - case 'svg': - case 'mathml': - $this->insertMode = static::IM_IN_BODY; - break; - } - } - - public function comment($cdata) - { - // TODO: Need to handle case where comment appears outside of the HTML tag. - $node = $this->doc->createComment($cdata); - $this->current->appendChild($node); - } - - public function text($data) - { - // XXX: Hmmm.... should we really be this strict? - if ($this->insertMode < static::IM_IN_HEAD) { - // Per '8.2.5.4.3 The "before head" insertion mode' the characters - // " \t\n\r\f" should be ignored but no mention of a parse error. This is - // practical as most documents contain these characters. Other text is not - // expected here so recording a parse error is necessary. - $dataTmp = trim($data, " \t\n\r\f"); - if (!empty($dataTmp)) { - // fprintf(STDOUT, "Unexpected insert mode: %d", $this->insertMode); - $this->parseError('Unexpected text. Ignoring: ' . $dataTmp); - } - - return; - } - // fprintf(STDOUT, "Appending text %s.", $data); - $node = $this->doc->createTextNode($data); - $this->current->appendChild($node); - } - - public function eof() - { - // If the $current isn't the $root, do we need to do anything? - } - - public function parseError($msg, $line = 0, $col = 0) - { - $this->errors[] = sprintf('Line %d, Col %d: %s', $line, $col, $msg); - } - - public function getErrors() - { - return $this->errors; - } - - public function cdata($data) - { - $node = $this->doc->createCDATASection($data); - $this->current->appendChild($node); - } - - public function processingInstruction($name, $data = null) - { - // XXX: Ignore initial XML declaration, per the spec. - if ($this->insertMode === static::IM_INITIAL && 'xml' === strtolower($name)) { - return; - } - - // Important: The processor may modify the current DOM tree however it sees fit. - if ($this->processor instanceof InstructionProcessor) { - $res = $this->processor->process($this->current, $name, $data); - if (!empty($res)) { - $this->current = $res; - } - - return; - } - - // Otherwise, this is just a dumb PI element. - $node = $this->doc->createProcessingInstruction($name, $data); - - $this->current->appendChild($node); - } - - // ========================================================================== - // UTILITIES - // ========================================================================== - - /** - * Apply normalization rules to a tag name. - * See sections 2.9 and 8.1.2. - * - * @param string $tagName - * - * @return string The normalized tag name. - */ - protected function normalizeTagName($tagName) - { - /* - * Section 2.9 suggests that we should not do this. if (strpos($name, ':') !== false) { // We know from the grammar that there must be at least one other // char besides :, since : is not a legal tag start. $parts = explode(':', $name); return array_pop($parts); } - */ - return $tagName; - } - - protected function quirksTreeResolver($name) - { - throw new \Exception('Not implemented.'); - } - - /** - * Automatically climb the tree and close the closest node with the matching $tag. - * - * @param string $tagName - * - * @return bool - */ - protected function autoclose($tagName) - { - $working = $this->current; - do { - if (XML_ELEMENT_NODE !== $working->nodeType) { - return false; - } - if ($working->tagName === $tagName) { - $this->current = $working->parentNode; - - return true; - } - } while ($working = $working->parentNode); - - return false; - } - - /** - * Checks if the given tagname is an ancestor of the present candidate. - * - * If $this->current or anything above $this->current matches the given tag - * name, this returns true. - * - * @param string $tagName - * - * @return bool - */ - protected function isAncestor($tagName) - { - $candidate = $this->current; - while (XML_ELEMENT_NODE === $candidate->nodeType) { - if ($candidate->tagName === $tagName) { - return true; - } - $candidate = $candidate->parentNode; - } - - return false; - } - - /** - * Returns true if the immediate parent element is of the given tagname. - * - * @param string $tagName - * - * @return bool - */ - protected function isParent($tagName) - { - return $this->current->tagName === $tagName; - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php b/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php deleted file mode 100644 index 9893a71..0000000 --- a/vendor/masterminds/html5/src/HTML5/Parser/EventHandler.php +++ /dev/null @@ -1,114 +0,0 @@ -). - * - * @return int one of the Tokenizer::TEXTMODE_* constants - */ - public function startTag($name, $attributes = array(), $selfClosing = false); - - /** - * An end-tag. - */ - public function endTag($name); - - /** - * A comment section (unparsed character data). - */ - public function comment($cdata); - - /** - * A unit of parsed character data. - * - * Entities in this text are *already decoded*. - */ - public function text($cdata); - - /** - * Indicates that the document has been entirely processed. - */ - public function eof(); - - /** - * Emitted when the parser encounters an error condition. - */ - public function parseError($msg, $line, $col); - - /** - * A CDATA section. - * - * @param string $data - * The unparsed character data - */ - public function cdata($data); - - /** - * This is a holdover from the XML spec. - * - * While user agents don't get PIs, server-side does. - * - * @param string $name The name of the processor (e.g. 'php'). - * @param string $data The unparsed data. - */ - public function processingInstruction($name, $data = null); -} diff --git a/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php b/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php deleted file mode 100644 index b081ed9..0000000 --- a/vendor/masterminds/html5/src/HTML5/Parser/FileInputStream.php +++ /dev/null @@ -1,33 +0,0 @@ -errors = UTF8Utils::checkForIllegalCodepoints($data); - - $data = $this->replaceLinefeeds($data); - - $this->data = $data; - $this->char = 0; - $this->EOF = strlen($data); - } - - /** - * Check if upcomming chars match the given sequence. - * - * This will read the stream for the $sequence. If it's - * found, this will return true. If not, return false. - * Since this unconsumes any chars it reads, the caller - * will still need to read the next sequence, even if - * this returns true. - * - * Example: $this->scanner->sequenceMatches('') will - * see if the input stream is at the start of a - * '' string. - * - * @param string $sequence - * @param bool $caseSensitive - * - * @return bool - */ - public function sequenceMatches($sequence, $caseSensitive = true) - { - $portion = substr($this->data, $this->char, strlen($sequence)); - - return $caseSensitive ? $portion === $sequence : 0 === strcasecmp($portion, $sequence); - } - - /** - * Get the current position. - * - * @return int The current intiger byte position. - */ - public function position() - { - return $this->char; - } - - /** - * Take a peek at the next character in the data. - * - * @return string The next character. - */ - public function peek() - { - if (($this->char + 1) < $this->EOF) { - return $this->data[$this->char + 1]; - } - - return false; - } - - /** - * Get the next character. - * Note: This advances the pointer. - * - * @return string The next character. - */ - public function next() - { - ++$this->char; - - if ($this->char < $this->EOF) { - return $this->data[$this->char]; - } - - return false; - } - - /** - * Get the current character. - * Note, this does not advance the pointer. - * - * @return string The current character. - */ - public function current() - { - if ($this->char < $this->EOF) { - return $this->data[$this->char]; - } - - return false; - } - - /** - * Silently consume N chars. - * - * @param int $count - */ - public function consume($count = 1) - { - $this->char += $count; - } - - /** - * Unconsume some of the data. - * This moves the data pointer backwards. - * - * @param int $howMany The number of characters to move the pointer back. - */ - public function unconsume($howMany = 1) - { - if (($this->char - $howMany) >= 0) { - $this->char -= $howMany; - } - } - - /** - * Get the next group of that contains hex characters. - * Note, along with getting the characters the pointer in the data will be - * moved as well. - * - * @return string The next group that is hex characters. - */ - public function getHex() - { - return $this->doCharsWhile(static::CHARS_HEX); - } - - /** - * Get the next group of characters that are ASCII Alpha characters. - * Note, along with getting the characters the pointer in the data will be - * moved as well. - * - * @return string The next group of ASCII alpha characters. - */ - public function getAsciiAlpha() - { - return $this->doCharsWhile(static::CHARS_ALPHA); - } - - /** - * Get the next group of characters that are ASCII Alpha characters and numbers. - * Note, along with getting the characters the pointer in the data will be - * moved as well. - * - * @return string The next group of ASCII alpha characters and numbers. - */ - public function getAsciiAlphaNum() - { - return $this->doCharsWhile(static::CHARS_ALNUM); - } - - /** - * Get the next group of numbers. - * Note, along with getting the characters the pointer in the data will be - * moved as well. - * - * @return string The next group of numbers. - */ - public function getNumeric() - { - return $this->doCharsWhile('0123456789'); - } - - /** - * Consume whitespace. - * Whitespace in HTML5 is: formfeed, tab, newline, space. - * - * @return int The length of the matched whitespaces. - */ - public function whitespace() - { - if ($this->char >= $this->EOF) { - return false; - } - - $len = strspn($this->data, "\n\t\f ", $this->char); - - $this->char += $len; - - return $len; - } - - /** - * Returns the current line that is being consumed. - * - * @return int The current line number. - */ - public function currentLine() - { - if (empty($this->EOF) || 0 === $this->char) { - return 1; - } - - // Add one to $this->char because we want the number for the next - // byte to be processed. - return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1; - } - - /** - * Read chars until something in the mask is encountered. - * - * @param string $mask - * - * @return mixed - */ - public function charsUntil($mask) - { - return $this->doCharsUntil($mask); - } - - /** - * Read chars as long as the mask matches. - * - * @param string $mask - * - * @return int - */ - public function charsWhile($mask) - { - return $this->doCharsWhile($mask); - } - - /** - * Returns the current column of the current line that the tokenizer is at. - * - * Newlines are column 0. The first char after a newline is column 1. - * - * @return int The column number. - */ - public function columnOffset() - { - // Short circuit for the first char. - if (0 === $this->char) { - return 0; - } - - // strrpos is weird, and the offset needs to be negative for what we - // want (i.e., the last \n before $this->char). This needs to not have - // one (to make it point to the next character, the one we want the - // position of) added to it because strrpos's behaviour includes the - // final offset byte. - $backwardFrom = $this->char - 1 - strlen($this->data); - $lastLine = strrpos($this->data, "\n", $backwardFrom); - - // However, for here we want the length up until the next byte to be - // processed, so add one to the current byte ($this->char). - if (false !== $lastLine) { - $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine); - } else { - // After a newline. - $findLengthOf = substr($this->data, 0, $this->char); - } - - return UTF8Utils::countChars($findLengthOf); - } - - /** - * Get all characters until EOF. - * - * This consumes characters until the EOF. - * - * @return int The number of characters remaining. - */ - public function remainingChars() - { - if ($this->char < $this->EOF) { - $data = substr($this->data, $this->char); - $this->char = $this->EOF; - - return $data; - } - - return ''; // false; - } - - /** - * Replace linefeed characters according to the spec. - * - * @param $data - * - * @return string - */ - private function replaceLinefeeds($data) - { - /* - * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially. - * Any CR characters that are followed by LF characters must be removed, and any CR characters not - * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are - * represented by LF characters, and there are never any CR characters in the input to the tokenization - * stage. - */ - $crlfTable = array( - "\0" => "\xEF\xBF\xBD", - "\r\n" => "\n", - "\r" => "\n", - ); - - return strtr($data, $crlfTable); - } - - /** - * Read to a particular match (or until $max bytes are consumed). - * - * This operates on byte sequences, not characters. - * - * Matches as far as possible until we reach a certain set of bytes - * and returns the matched substring. - * - * @param string $bytes Bytes to match. - * @param int $max Maximum number of bytes to scan. - * - * @return mixed Index or false if no match is found. You should use strong - * equality when checking the result, since index could be 0. - */ - private function doCharsUntil($bytes, $max = null) - { - if ($this->char >= $this->EOF) { - return false; - } - - if (0 === $max || $max) { - $len = strcspn($this->data, $bytes, $this->char, $max); - } else { - $len = strcspn($this->data, $bytes, $this->char); - } - - $string = (string) substr($this->data, $this->char, $len); - $this->char += $len; - - return $string; - } - - /** - * Returns the string so long as $bytes matches. - * - * Matches as far as possible with a certain set of bytes - * and returns the matched substring. - * - * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the - * current char, the pointer advances and the char is part of the - * substring. - * @param int $max The max number of chars to read. - * - * @return string - */ - private function doCharsWhile($bytes, $max = null) - { - if ($this->char >= $this->EOF) { - return false; - } - - if (0 === $max || $max) { - $len = strspn($this->data, $bytes, $this->char, $max); - } else { - $len = strspn($this->data, $bytes, $this->char); - } - - $string = (string) substr($this->data, $this->char, $len); - $this->char += $len; - - return $string; - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php b/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php deleted file mode 100644 index 75b0886..0000000 --- a/vendor/masterminds/html5/src/HTML5/Parser/StringInputStream.php +++ /dev/null @@ -1,336 +0,0 @@ - - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -*/ - -// Some conventions: -// - /* */ indicates verbatim text from the HTML 5 specification -// MPB: Not sure which version of the spec. Moving from HTML5lib to -// HTML5-PHP, I have been using this version: -// http://www.w3.org/TR/2012/CR-html5-20121217/Overview.html#contents -// -// - // indicates regular comments - -/** - * @deprecated since 2.4, to remove in 3.0. Use a string in the scanner instead. - */ -class StringInputStream implements InputStream -{ - /** - * The string data we're parsing. - */ - private $data; - - /** - * The current integer byte position we are in $data. - */ - private $char; - - /** - * Length of $data; when $char === $data, we are at the end-of-file. - */ - private $EOF; - - /** - * Parse errors. - */ - public $errors = array(); - - /** - * Create a new InputStream wrapper. - * - * @param string $data Data to parse. - * @param string $encoding The encoding to use for the data. - * @param string $debug A fprintf format to use to echo the data on stdout. - */ - public function __construct($data, $encoding = 'UTF-8', $debug = '') - { - $data = UTF8Utils::convertToUTF8($data, $encoding); - if ($debug) { - fprintf(STDOUT, $debug, $data, strlen($data)); - } - - // There is good reason to question whether it makes sense to - // do this here, since most of these checks are done during - // parsing, and since this check doesn't actually *do* anything. - $this->errors = UTF8Utils::checkForIllegalCodepoints($data); - - $data = $this->replaceLinefeeds($data); - - $this->data = $data; - $this->char = 0; - $this->EOF = strlen($data); - } - - public function __toString() - { - return $this->data; - } - - /** - * Replace linefeed characters according to the spec. - */ - protected function replaceLinefeeds($data) - { - /* - * U+000D CARRIAGE RETURN (CR) characters and U+000A LINE FEED (LF) characters are treated specially. - * Any CR characters that are followed by LF characters must be removed, and any CR characters not - * followed by LF characters must be converted to LF characters. Thus, newlines in HTML DOMs are - * represented by LF characters, and there are never any CR characters in the input to the tokenization - * stage. - */ - $crlfTable = array( - "\0" => "\xEF\xBF\xBD", - "\r\n" => "\n", - "\r" => "\n", - ); - - return strtr($data, $crlfTable); - } - - /** - * Returns the current line that the tokenizer is at. - */ - public function currentLine() - { - if (empty($this->EOF) || 0 === $this->char) { - return 1; - } - // Add one to $this->char because we want the number for the next - // byte to be processed. - return substr_count($this->data, "\n", 0, min($this->char, $this->EOF)) + 1; - } - - /** - * @deprecated - */ - public function getCurrentLine() - { - return $this->currentLine(); - } - - /** - * Returns the current column of the current line that the tokenizer is at. - * Newlines are column 0. The first char after a newline is column 1. - * - * @return int The column number. - */ - public function columnOffset() - { - // Short circuit for the first char. - if (0 === $this->char) { - return 0; - } - // strrpos is weird, and the offset needs to be negative for what we - // want (i.e., the last \n before $this->char). This needs to not have - // one (to make it point to the next character, the one we want the - // position of) added to it because strrpos's behaviour includes the - // final offset byte. - $backwardFrom = $this->char - 1 - strlen($this->data); - $lastLine = strrpos($this->data, "\n", $backwardFrom); - - // However, for here we want the length up until the next byte to be - // processed, so add one to the current byte ($this->char). - if (false !== $lastLine) { - $findLengthOf = substr($this->data, $lastLine + 1, $this->char - 1 - $lastLine); - } else { - // After a newline. - $findLengthOf = substr($this->data, 0, $this->char); - } - - return UTF8Utils::countChars($findLengthOf); - } - - /** - * @deprecated - */ - public function getColumnOffset() - { - return $this->columnOffset(); - } - - /** - * Get the current character. - * - * @return string The current character. - */ - #[\ReturnTypeWillChange] - public function current() - { - return $this->data[$this->char]; - } - - /** - * Advance the pointer. - * This is part of the Iterator interface. - */ - #[\ReturnTypeWillChange] - public function next() - { - ++$this->char; - } - - /** - * Rewind to the start of the string. - */ - #[\ReturnTypeWillChange] - public function rewind() - { - $this->char = 0; - } - - /** - * Is the current pointer location valid. - * - * @return bool Whether the current pointer location is valid. - */ - #[\ReturnTypeWillChange] - public function valid() - { - return $this->char < $this->EOF; - } - - /** - * Get all characters until EOF. - * - * This reads to the end of the file, and sets the read marker at the - * end of the file. - * - * Note this performs bounds checking. - * - * @return string Returns the remaining text. If called when the InputStream is - * already exhausted, it returns an empty string. - */ - public function remainingChars() - { - if ($this->char < $this->EOF) { - $data = substr($this->data, $this->char); - $this->char = $this->EOF; - - return $data; - } - - return ''; // false; - } - - /** - * Read to a particular match (or until $max bytes are consumed). - * - * This operates on byte sequences, not characters. - * - * Matches as far as possible until we reach a certain set of bytes - * and returns the matched substring. - * - * @param string $bytes Bytes to match. - * @param int $max Maximum number of bytes to scan. - * - * @return mixed Index or false if no match is found. You should use strong - * equality when checking the result, since index could be 0. - */ - public function charsUntil($bytes, $max = null) - { - if ($this->char >= $this->EOF) { - return false; - } - - if (0 === $max || $max) { - $len = strcspn($this->data, $bytes, $this->char, $max); - } else { - $len = strcspn($this->data, $bytes, $this->char); - } - - $string = (string) substr($this->data, $this->char, $len); - $this->char += $len; - - return $string; - } - - /** - * Returns the string so long as $bytes matches. - * - * Matches as far as possible with a certain set of bytes - * and returns the matched substring. - * - * @param string $bytes A mask of bytes to match. If ANY byte in this mask matches the - * current char, the pointer advances and the char is part of the - * substring. - * @param int $max The max number of chars to read. - * - * @return string - */ - public function charsWhile($bytes, $max = null) - { - if ($this->char >= $this->EOF) { - return false; - } - - if (0 === $max || $max) { - $len = strspn($this->data, $bytes, $this->char, $max); - } else { - $len = strspn($this->data, $bytes, $this->char); - } - $string = (string) substr($this->data, $this->char, $len); - $this->char += $len; - - return $string; - } - - /** - * Unconsume characters. - * - * @param int $howMany The number of characters to unconsume. - */ - public function unconsume($howMany = 1) - { - if (($this->char - $howMany) >= 0) { - $this->char -= $howMany; - } - } - - /** - * Look ahead without moving cursor. - */ - public function peek() - { - if (($this->char + 1) <= $this->EOF) { - return $this->data[$this->char + 1]; - } - - return false; - } - - #[\ReturnTypeWillChange] - public function key() - { - return $this->char; - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php b/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php deleted file mode 100644 index e8b4aa0..0000000 --- a/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php +++ /dev/null @@ -1,1214 +0,0 @@ -scanner = $scanner; - $this->events = $eventHandler; - $this->mode = $mode; - } - - /** - * Begin parsing. - * - * This will begin scanning the document, tokenizing as it goes. - * Tokens are emitted into the event handler. - * - * Tokenizing will continue until the document is completely - * read. Errors are emitted into the event handler, but - * the parser will attempt to continue parsing until the - * entire input stream is read. - */ - public function parse() - { - do { - $this->consumeData(); - // FIXME: Add infinite loop protection. - } while ($this->carryOn); - } - - /** - * Set the text mode for the character data reader. - * - * HTML5 defines three different modes for reading text: - * - Normal: Read until a tag is encountered. - * - RCDATA: Read until a tag is encountered, but skip a few otherwise- - * special characters. - * - Raw: Read until a special closing tag is encountered (viz. pre, script) - * - * This allows those modes to be set. - * - * Normally, setting is done by the event handler via a special return code on - * startTag(), but it can also be set manually using this function. - * - * @param int $textmode One of Elements::TEXT_*. - * @param string $untilTag The tag that should stop RAW or RCDATA mode. Normal mode does not - * use this indicator. - */ - public function setTextMode($textmode, $untilTag = null) - { - $this->textMode = $textmode & (Elements::TEXT_RAW | Elements::TEXT_RCDATA); - $this->untilTag = $untilTag; - } - - /** - * Consume a character and make a move. - * HTML5 8.2.4.1. - */ - protected function consumeData() - { - $tok = $this->scanner->current(); - - if ('&' === $tok) { - // Character reference - $ref = $this->decodeCharacterReference(); - $this->buffer($ref); - - $tok = $this->scanner->current(); - } - - // Parse tag - if ('<' === $tok) { - // Any buffered text data can go out now. - $this->flushBuffer(); - - $tok = $this->scanner->next(); - - if (false === $tok) { - // end of string - $this->parseError('Illegal tag opening'); - } elseif ('!' === $tok) { - $this->markupDeclaration(); - } elseif ('/' === $tok) { - $this->endTag(); - } elseif ('?' === $tok) { - $this->processingInstruction(); - } elseif ($this->is_alpha($tok)) { - $this->tagName(); - } else { - $this->parseError('Illegal tag opening'); - // TODO is this necessary ? - $this->characterData(); - } - - $tok = $this->scanner->current(); - } - - if (false === $tok) { - // Handle end of document - $this->eof(); - } else { - // Parse character - switch ($this->textMode) { - case Elements::TEXT_RAW: - $this->rawText($tok); - break; - - case Elements::TEXT_RCDATA: - $this->rcdata($tok); - break; - - default: - if ('<' === $tok || '&' === $tok) { - break; - } - - // NULL character - if ("\00" === $tok) { - $this->parseError('Received null character.'); - - $this->text .= $tok; - $this->scanner->consume(); - - break; - } - - $this->text .= $this->scanner->charsUntil("<&\0"); - } - } - - return $this->carryOn; - } - - /** - * Parse anything that looks like character data. - * - * Different rules apply based on the current text mode. - * - * @see Elements::TEXT_RAW Elements::TEXT_RCDATA. - */ - protected function characterData() - { - $tok = $this->scanner->current(); - if (false === $tok) { - return false; - } - switch ($this->textMode) { - case Elements::TEXT_RAW: - return $this->rawText($tok); - case Elements::TEXT_RCDATA: - return $this->rcdata($tok); - default: - if ('<' === $tok || '&' === $tok) { - return false; - } - - return $this->text($tok); - } - } - - /** - * This buffers the current token as character data. - * - * @param string $tok The current token. - * - * @return bool - */ - protected function text($tok) - { - // This should never happen... - if (false === $tok) { - return false; - } - - // NULL character - if ("\00" === $tok) { - $this->parseError('Received null character.'); - } - - $this->buffer($tok); - $this->scanner->consume(); - - return true; - } - - /** - * Read text in RAW mode. - * - * @param string $tok The current token. - * - * @return bool - */ - protected function rawText($tok) - { - if (is_null($this->untilTag)) { - return $this->text($tok); - } - - $sequence = 'untilTag . '>'; - $txt = $this->readUntilSequence($sequence); - $this->events->text($txt); - $this->setTextMode(0); - - return $this->endTag(); - } - - /** - * Read text in RCDATA mode. - * - * @param string $tok The current token. - * - * @return bool - */ - protected function rcdata($tok) - { - if (is_null($this->untilTag)) { - return $this->text($tok); - } - - $sequence = 'untilTag; - $txt = ''; - - $caseSensitive = !Elements::isHtml5Element($this->untilTag); - while (false !== $tok && !('<' == $tok && ($this->scanner->sequenceMatches($sequence, $caseSensitive)))) { - if ('&' == $tok) { - $txt .= $this->decodeCharacterReference(); - $tok = $this->scanner->current(); - } else { - $txt .= $tok; - $tok = $this->scanner->next(); - } - } - $len = strlen($sequence); - $this->scanner->consume($len); - $len += $this->scanner->whitespace(); - if ('>' !== $this->scanner->current()) { - $this->parseError('Unclosed RCDATA end tag'); - } - - $this->scanner->unconsume($len); - $this->events->text($txt); - $this->setTextMode(0); - - return $this->endTag(); - } - - /** - * If the document is read, emit an EOF event. - */ - protected function eof() - { - // fprintf(STDOUT, "EOF"); - $this->flushBuffer(); - $this->events->eof(); - $this->carryOn = false; - } - - /** - * Look for markup. - */ - protected function markupDeclaration() - { - $tok = $this->scanner->next(); - - // Comment: - if ('-' == $tok && '-' == $this->scanner->peek()) { - $this->scanner->consume(2); - - return $this->comment(); - } elseif ('D' == $tok || 'd' == $tok) { // Doctype - return $this->doctype(); - } elseif ('[' == $tok) { // CDATA section - return $this->cdataSection(); - } - - // FINISH - $this->parseError('Expected . Emit an empty comment because 8.2.4.46 says to. - if ('>' == $tok) { - // Parse error. Emit the comment token. - $this->parseError("Expected comment data, got '>'"); - $this->events->comment(''); - $this->scanner->consume(); - - return true; - } - - // Replace NULL with the replacement char. - if ("\0" == $tok) { - $tok = UTF8Utils::FFFD; - } - while (!$this->isCommentEnd()) { - $comment .= $tok; - $tok = $this->scanner->next(); - } - - $this->events->comment($comment); - $this->scanner->consume(); - - return true; - } - - /** - * Check if the scanner has reached the end of a comment. - * - * @return bool - */ - protected function isCommentEnd() - { - $tok = $this->scanner->current(); - - // EOF - if (false === $tok) { - // Hit the end. - $this->parseError('Unexpected EOF in a comment.'); - - return true; - } - - // If next two tokens are not '--', not the end. - if ('-' != $tok || '-' != $this->scanner->peek()) { - return false; - } - - $this->scanner->consume(2); // Consume '-' and one of '!' or '>' - - // Test for '>' - if ('>' == $this->scanner->current()) { - return true; - } - // Test for '!>' - if ('!' == $this->scanner->current() && '>' == $this->scanner->peek()) { - $this->scanner->consume(); // Consume the last '>' - return true; - } - // Unread '-' and one of '!' or '>'; - $this->scanner->unconsume(2); - - return false; - } - - /** - * Parse a DOCTYPE. - * - * Parse a DOCTYPE declaration. This method has strong bearing on whether or - * not Quirksmode is enabled on the event handler. - * - * @todo This method is a little long. Should probably refactor. - * - * @return bool - */ - protected function doctype() - { - // Check that string is DOCTYPE. - if ($this->scanner->sequenceMatches('DOCTYPE', false)) { - $this->scanner->consume(7); - } else { - $chars = $this->scanner->charsWhile('DOCTYPEdoctype'); - $this->parseError('Expected DOCTYPE, got %s', $chars); - - return $this->bogusComment('scanner->whitespace(); - $tok = $this->scanner->current(); - - // EOF: die. - if (false === $tok) { - $this->events->doctype('html5', EventHandler::DOCTYPE_NONE, '', true); - $this->eof(); - - return true; - } - - // NULL char: convert. - if ("\0" === $tok) { - $this->parseError('Unexpected null character in DOCTYPE.'); - } - - $stop = " \n\f>"; - $doctypeName = $this->scanner->charsUntil($stop); - // Lowercase ASCII, replace \0 with FFFD - $doctypeName = strtolower(strtr($doctypeName, "\0", UTF8Utils::FFFD)); - - $tok = $this->scanner->current(); - - // If false, emit a parse error, DOCTYPE, and return. - if (false === $tok) { - $this->parseError('Unexpected EOF in DOCTYPE declaration.'); - $this->events->doctype($doctypeName, EventHandler::DOCTYPE_NONE, null, true); - - return true; - } - - // Short DOCTYPE, like - if ('>' == $tok) { - // DOCTYPE without a name. - if (0 == strlen($doctypeName)) { - $this->parseError('Expected a DOCTYPE name. Got nothing.'); - $this->events->doctype($doctypeName, 0, null, true); - $this->scanner->consume(); - - return true; - } - $this->events->doctype($doctypeName); - $this->scanner->consume(); - - return true; - } - $this->scanner->whitespace(); - - $pub = strtoupper($this->scanner->getAsciiAlpha()); - $white = $this->scanner->whitespace(); - - // Get ID, and flag it as pub or system. - if (('PUBLIC' == $pub || 'SYSTEM' == $pub) && $white > 0) { - // Get the sys ID. - $type = 'PUBLIC' == $pub ? EventHandler::DOCTYPE_PUBLIC : EventHandler::DOCTYPE_SYSTEM; - $id = $this->quotedString("\0>"); - if (false === $id) { - $this->events->doctype($doctypeName, $type, $pub, false); - - return true; - } - - // Premature EOF. - if (false === $this->scanner->current()) { - $this->parseError('Unexpected EOF in DOCTYPE'); - $this->events->doctype($doctypeName, $type, $id, true); - - return true; - } - - // Well-formed complete DOCTYPE. - $this->scanner->whitespace(); - if ('>' == $this->scanner->current()) { - $this->events->doctype($doctypeName, $type, $id, false); - $this->scanner->consume(); - - return true; - } - - // If we get here, we have scanner->charsUntil('>'); - $this->parseError('Malformed DOCTYPE.'); - $this->events->doctype($doctypeName, $type, $id, true); - $this->scanner->consume(); - - return true; - } - - // Else it's a bogus DOCTYPE. - // Consume to > and trash. - $this->scanner->charsUntil('>'); - - $this->parseError('Expected PUBLIC or SYSTEM. Got %s.', $pub); - $this->events->doctype($doctypeName, 0, null, true); - $this->scanner->consume(); - - return true; - } - - /** - * Utility for reading a quoted string. - * - * @param string $stopchars Characters (in addition to a close-quote) that should stop the string. - * E.g. sometimes '>' is higher precedence than '"' or "'". - * - * @return mixed String if one is found (quotations omitted). - */ - protected function quotedString($stopchars) - { - $tok = $this->scanner->current(); - if ('"' == $tok || "'" == $tok) { - $this->scanner->consume(); - $ret = $this->scanner->charsUntil($tok . $stopchars); - if ($this->scanner->current() == $tok) { - $this->scanner->consume(); - } else { - // Parse error because no close quote. - $this->parseError('Expected %s, got %s', $tok, $this->scanner->current()); - } - - return $ret; - } - - return false; - } - - /** - * Handle a CDATA section. - * - * @return bool - */ - protected function cdataSection() - { - $cdata = ''; - $this->scanner->consume(); - - $chars = $this->scanner->charsWhile('CDAT'); - if ('CDATA' != $chars || '[' != $this->scanner->current()) { - $this->parseError('Expected [CDATA[, got %s', $chars); - - return $this->bogusComment('scanner->next(); - do { - if (false === $tok) { - $this->parseError('Unexpected EOF inside CDATA.'); - $this->bogusComment('scanner->next(); - } while (!$this->scanner->sequenceMatches(']]>')); - - // Consume ]]> - $this->scanner->consume(3); - - $this->events->cdata($cdata); - - return true; - } - - // ================================================================ - // Non-HTML5 - // ================================================================ - - /** - * Handle a processing instruction. - * - * XML processing instructions are supposed to be ignored in HTML5, - * treated as "bogus comments". However, since we're not a user - * agent, we allow them. We consume until ?> and then issue a - * EventListener::processingInstruction() event. - * - * @return bool - */ - protected function processingInstruction() - { - if ('?' != $this->scanner->current()) { - return false; - } - - $tok = $this->scanner->next(); - $procName = $this->scanner->getAsciiAlpha(); - $white = $this->scanner->whitespace(); - - // If not a PI, send to bogusComment. - if (0 == strlen($procName) || 0 == $white || false == $this->scanner->current()) { - $this->parseError("Expected processing instruction name, got $tok"); - $this->bogusComment('. - while (!('?' == $this->scanner->current() && '>' == $this->scanner->peek())) { - $data .= $this->scanner->current(); - - $tok = $this->scanner->next(); - if (false === $tok) { - $this->parseError('Unexpected EOF in processing instruction.'); - $this->events->processingInstruction($procName, $data); - - return true; - } - } - - $this->scanner->consume(2); // Consume the closing tag - $this->events->processingInstruction($procName, $data); - - return true; - } - - // ================================================================ - // UTILITY FUNCTIONS - // ================================================================ - - /** - * Read from the input stream until we get to the desired sequene - * or hit the end of the input stream. - * - * @param string $sequence - * - * @return string - */ - protected function readUntilSequence($sequence) - { - $buffer = ''; - - // Optimization for reading larger blocks faster. - $first = substr($sequence, 0, 1); - while (false !== $this->scanner->current()) { - $buffer .= $this->scanner->charsUntil($first); - - // Stop as soon as we hit the stopping condition. - if ($this->scanner->sequenceMatches($sequence, false)) { - return $buffer; - } - $buffer .= $this->scanner->current(); - $this->scanner->consume(); - } - - // If we get here, we hit the EOF. - $this->parseError('Unexpected EOF during text read.'); - - return $buffer; - } - - /** - * Check if upcomming chars match the given sequence. - * - * This will read the stream for the $sequence. If it's - * found, this will return true. If not, return false. - * Since this unconsumes any chars it reads, the caller - * will still need to read the next sequence, even if - * this returns true. - * - * Example: $this->scanner->sequenceMatches('') will - * see if the input stream is at the start of a - * '' string. - * - * @param string $sequence - * @param bool $caseSensitive - * - * @return bool - */ - protected function sequenceMatches($sequence, $caseSensitive = true) - { - @trigger_error(__METHOD__ . ' method is deprecated since version 2.4 and will be removed in 3.0. Use Scanner::sequenceMatches() instead.', E_USER_DEPRECATED); - - return $this->scanner->sequenceMatches($sequence, $caseSensitive); - } - - /** - * Send a TEXT event with the contents of the text buffer. - * - * This emits an EventHandler::text() event with the current contents of the - * temporary text buffer. (The buffer is used to group as much PCDATA - * as we can instead of emitting lots and lots of TEXT events.) - */ - protected function flushBuffer() - { - if ('' === $this->text) { - return; - } - $this->events->text($this->text); - $this->text = ''; - } - - /** - * Add text to the temporary buffer. - * - * @see flushBuffer() - * - * @param string $str - */ - protected function buffer($str) - { - $this->text .= $str; - } - - /** - * Emit a parse error. - * - * A parse error always returns false because it never consumes any - * characters. - * - * @param string $msg - * - * @return string - */ - protected function parseError($msg) - { - $args = func_get_args(); - - if (count($args) > 1) { - array_shift($args); - $msg = vsprintf($msg, $args); - } - - $line = $this->scanner->currentLine(); - $col = $this->scanner->columnOffset(); - $this->events->parseError($msg, $line, $col); - - return false; - } - - /** - * Decode a character reference and return the string. - * - * If $inAttribute is set to true, a bare & will be returned as-is. - * - * @param bool $inAttribute Set to true if the text is inside of an attribute value. - * false otherwise. - * - * @return string - */ - protected function decodeCharacterReference($inAttribute = false) - { - // Next char after &. - $tok = $this->scanner->next(); - $start = $this->scanner->position(); - - if (false === $tok) { - return '&'; - } - - // These indicate not an entity. We return just - // the &. - if ("\t" === $tok || "\n" === $tok || "\f" === $tok || ' ' === $tok || '&' === $tok || '<' === $tok) { - // $this->scanner->next(); - return '&'; - } - - // Numeric entity - if ('#' === $tok) { - $tok = $this->scanner->next(); - - if (false === $tok) { - $this->parseError('Expected &#DEC; &#HEX;, got EOF'); - $this->scanner->unconsume(1); - - return '&'; - } - - // Hexidecimal encoding. - // X[0-9a-fA-F]+; - // x[0-9a-fA-F]+; - if ('x' === $tok || 'X' === $tok) { - $tok = $this->scanner->next(); // Consume x - - // Convert from hex code to char. - $hex = $this->scanner->getHex(); - if (empty($hex)) { - $this->parseError('Expected &#xHEX;, got &#x%s', $tok); - // We unconsume because we don't know what parser rules might - // be in effect for the remaining chars. For example. '&#>' - // might result in a specific parsing rule inside of tag - // contexts, while not inside of pcdata context. - $this->scanner->unconsume(2); - - return '&'; - } - $entity = CharacterReference::lookupHex($hex); - } // Decimal encoding. - // [0-9]+; - else { - // Convert from decimal to char. - $numeric = $this->scanner->getNumeric(); - if (false === $numeric) { - $this->parseError('Expected &#DIGITS;, got &#%s', $tok); - $this->scanner->unconsume(2); - - return '&'; - } - $entity = CharacterReference::lookupDecimal($numeric); - } - } elseif ('=' === $tok && $inAttribute) { - return '&'; - } else { // String entity. - // Attempt to consume a string up to a ';'. - // [a-zA-Z0-9]+; - $cname = $this->scanner->getAsciiAlphaNum(); - $entity = CharacterReference::lookupName($cname); - - // When no entity is found provide the name of the unmatched string - // and continue on as the & is not part of an entity. The & will - // be converted to & elsewhere. - if (null === $entity) { - if (!$inAttribute || '' === $cname) { - $this->parseError("No match in entity table for '%s'", $cname); - } - $this->scanner->unconsume($this->scanner->position() - $start); - - return '&'; - } - } - - // The scanner has advanced the cursor for us. - $tok = $this->scanner->current(); - - // We have an entity. We're done here. - if (';' === $tok) { - $this->scanner->consume(); - - return $entity; - } - - // Failing to match ; means unconsume the entire string. - $this->scanner->unconsume($this->scanner->position() - $start); - - $this->parseError('Expected &ENTITY;, got &ENTITY%s (no trailing ;) ', $tok); - - return '&'; - } - - /** - * Checks whether a (single-byte) character is an ASCII letter or not. - * - * @param string $input A single-byte string - * - * @return bool True if it is a letter, False otherwise - */ - protected function is_alpha($input) - { - $code = ord($input); - - return ($code >= 97 && $code <= 122) || ($code >= 65 && $code <= 90); - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php b/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php deleted file mode 100644 index 00d3951..0000000 --- a/vendor/masterminds/html5/src/HTML5/Parser/TreeBuildingRules.php +++ /dev/null @@ -1,127 +0,0 @@ - 1, - 'dd' => 1, - 'dt' => 1, - 'rt' => 1, - 'rp' => 1, - 'tr' => 1, - 'th' => 1, - 'td' => 1, - 'thead' => 1, - 'tfoot' => 1, - 'tbody' => 1, - 'table' => 1, - 'optgroup' => 1, - 'option' => 1, - ); - - /** - * Returns true if the given tagname has special processing rules. - */ - public function hasRules($tagname) - { - return isset(static::$tags[$tagname]); - } - - /** - * Evaluate the rule for the current tag name. - * - * This may modify the existing DOM. - * - * @return \DOMElement The new Current DOM element. - */ - public function evaluate($new, $current) - { - switch ($new->tagName) { - case 'li': - return $this->handleLI($new, $current); - case 'dt': - case 'dd': - return $this->handleDT($new, $current); - case 'rt': - case 'rp': - return $this->handleRT($new, $current); - case 'optgroup': - return $this->closeIfCurrentMatches($new, $current, array( - 'optgroup', - )); - case 'option': - return $this->closeIfCurrentMatches($new, $current, array( - 'option', - )); - case 'tr': - return $this->closeIfCurrentMatches($new, $current, array( - 'tr', - )); - case 'td': - case 'th': - return $this->closeIfCurrentMatches($new, $current, array( - 'th', - 'td', - )); - case 'tbody': - case 'thead': - case 'tfoot': - case 'table': // Spec isn't explicit about this, but it's necessary. - - return $this->closeIfCurrentMatches($new, $current, array( - 'thead', - 'tfoot', - 'tbody', - )); - } - - return $current; - } - - protected function handleLI($ele, $current) - { - return $this->closeIfCurrentMatches($ele, $current, array( - 'li', - )); - } - - protected function handleDT($ele, $current) - { - return $this->closeIfCurrentMatches($ele, $current, array( - 'dt', - 'dd', - )); - } - - protected function handleRT($ele, $current) - { - return $this->closeIfCurrentMatches($ele, $current, array( - 'rt', - 'rp', - )); - } - - protected function closeIfCurrentMatches($ele, $current, $match) - { - if (in_array($current->tagName, $match, true)) { - $current->parentNode->appendChild($ele); - } else { - $current->appendChild($ele); - } - - return $ele; - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php b/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php deleted file mode 100644 index 4405e4c..0000000 --- a/vendor/masterminds/html5/src/HTML5/Parser/UTF8Utils.php +++ /dev/null @@ -1,177 +0,0 @@ - - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the - "Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -*/ - -use Masterminds\HTML5\Exception; - -class UTF8Utils -{ - /** - * The Unicode replacement character. - */ - const FFFD = "\xEF\xBF\xBD"; - - /** - * Count the number of characters in a string. - * UTF-8 aware. This will try (in order) iconv, MB, and finally a custom counter. - * - * @param string $string - * - * @return int - */ - public static function countChars($string) - { - // Get the length for the string we need. - if (function_exists('mb_strlen')) { - return mb_strlen($string, 'utf-8'); - } - - if (function_exists('iconv_strlen')) { - return iconv_strlen($string, 'utf-8'); - } - - $count = count_chars($string); - - // 0x80 = 0x7F - 0 + 1 (one added to get inclusive range) - // 0x33 = 0xF4 - 0x2C + 1 (one added to get inclusive range) - return array_sum(array_slice($count, 0, 0x80)) + array_sum(array_slice($count, 0xC2, 0x33)); - } - - /** - * Convert data from the given encoding to UTF-8. - * - * This has not yet been tested with charactersets other than UTF-8. - * It should work with ISO-8859-1/-13 and standard Latin Win charsets. - * - * @param string $data The data to convert - * @param string $encoding A valid encoding. Examples: http://www.php.net/manual/en/mbstring.supported-encodings.php - * - * @return string - */ - public static function convertToUTF8($data, $encoding = 'UTF-8') - { - /* - * From the HTML5 spec: Given an encoding, the bytes in the input stream must be converted - * to Unicode characters for the tokeniser, as described by the rules for that encoding, - * except that the leading U+FEFF BYTE ORDER MARK character, if any, must not be stripped - * by the encoding layer (it is stripped by the rule below). Bytes or sequences of bytes - * in the original byte stream that could not be converted to Unicode characters must be - * converted to U+FFFD REPLACEMENT CHARACTER code points. - */ - - // mb_convert_encoding is chosen over iconv because of a bug. The best - // details for the bug are on http://us1.php.net/manual/en/function.iconv.php#108643 - // which contains links to the actual but reports as well as work around - // details. - if (function_exists('mb_convert_encoding')) { - // mb library has the following behaviors: - // - UTF-16 surrogates result in false. - // - Overlongs and outside Plane 16 result in empty strings. - - // Before we run mb_convert_encoding we need to tell it what to do with - // characters it does not know. This could be different than the parent - // application executing this library so we store the value, change it - // to our needs, and then change it back when we are done. This feels - // a little excessive and it would be great if there was a better way. - $save = mb_substitute_character(); - mb_substitute_character('none'); - $data = mb_convert_encoding($data, 'UTF-8', $encoding); - mb_substitute_character($save); - } - // @todo Get iconv running in at least some environments if that is possible. - elseif (function_exists('iconv') && 'auto' !== $encoding) { - // fprintf(STDOUT, "iconv found\n"); - // iconv has the following behaviors: - // - Overlong representations are ignored. - // - Beyond Plane 16 is replaced with a lower char. - // - Incomplete sequences generate a warning. - $data = @iconv($encoding, 'UTF-8//IGNORE', $data); - } else { - throw new Exception('Not implemented, please install mbstring or iconv'); - } - - /* - * One leading U+FEFF BYTE ORDER MARK character must be ignored if any are present. - */ - if ("\xEF\xBB\xBF" === substr($data, 0, 3)) { - $data = substr($data, 3); - } - - return $data; - } - - /** - * Checks for Unicode code points that are not valid in a document. - * - * @param string $data A string to analyze - * - * @return array An array of (string) error messages produced by the scanning - */ - public static function checkForIllegalCodepoints($data) - { - // Vestigal error handling. - $errors = array(); - - /* - * All U+0000 null characters in the input must be replaced by U+FFFD REPLACEMENT CHARACTERs. - * Any occurrences of such characters is a parse error. - */ - for ($i = 0, $count = substr_count($data, "\0"); $i < $count; ++$i) { - $errors[] = 'null-character'; - } - - /* - * Any occurrences of any characters in the ranges U+0001 to U+0008, U+000B, U+000E to U+001F, U+007F - * to U+009F, U+D800 to U+DFFF , U+FDD0 to U+FDEF, and characters U+FFFE, U+FFFF, U+1FFFE, U+1FFFF, - * U+2FFFE, U+2FFFF, U+3FFFE, U+3FFFF, U+4FFFE, U+4FFFF, U+5FFFE, U+5FFFF, U+6FFFE, U+6FFFF, U+7FFFE, - * U+7FFFF, U+8FFFE, U+8FFFF, U+9FFFE, U+9FFFF, U+AFFFE, U+AFFFF, U+BFFFE, U+BFFFF, U+CFFFE, U+CFFFF, - * U+DFFFE, U+DFFFF, U+EFFFE, U+EFFFF, U+FFFFE, U+FFFFF, U+10FFFE, and U+10FFFF are parse errors. - * (These are all control characters or permanently undefined Unicode characters.) - */ - // Check PCRE is loaded. - $count = preg_match_all( - '/(?: - [\x01-\x08\x0B\x0E-\x1F\x7F] # U+0001 to U+0008, U+000B, U+000E to U+001F and U+007F - | - \xC2[\x80-\x9F] # U+0080 to U+009F - | - \xED(?:\xA0[\x80-\xFF]|[\xA1-\xBE][\x00-\xFF]|\xBF[\x00-\xBF]) # U+D800 to U+DFFFF - | - \xEF\xB7[\x90-\xAF] # U+FDD0 to U+FDEF - | - \xEF\xBF[\xBE\xBF] # U+FFFE and U+FFFF - | - [\xF0-\xF4][\x8F-\xBF]\xBF[\xBE\xBF] # U+nFFFE and U+nFFFF (1 <= n <= 10_{16}) - )/x', $data, $matches); - for ($i = 0; $i < $count; ++$i) { - $errors[] = 'invalid-codepoint'; - } - - return $errors; - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php b/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php deleted file mode 100644 index e9421a1..0000000 --- a/vendor/masterminds/html5/src/HTML5/Serializer/HTML5Entities.php +++ /dev/null @@ -1,1533 +0,0 @@ - ' ', - "\n" => ' ', - '!' => '!', - '"' => '"', - '#' => '#', - '$' => '$', - '%' => '%', - '&' => '&', - '\'' => ''', - '(' => '(', - ')' => ')', - '*' => '*', - '+' => '+', - ',' => ',', - '.' => '.', - '/' => '/', - ':' => ':', - ';' => ';', - '<' => '<', - '<⃒' => '&nvlt', - '=' => '=', - '=⃥' => '&bne', - '>' => '>', - '>⃒' => '&nvgt', - '?' => '?', - '@' => '@', - '[' => '[', - '\\' => '\', - ']' => ']', - '^' => '^', - '_' => '_', - '`' => '`', - 'fj' => '&fjlig', - '{' => '{', - '|' => '|', - '}' => '}', - ' ' => ' ', - '¡' => '¡', - '¢' => '¢', - '£' => '£', - '¤' => '¤', - 'Â¥' => '¥', - '¦' => '¦', - '§' => '§', - '¨' => '¨', - '©' => '©', - 'ª' => 'ª', - '«' => '«', - '¬' => '¬', - '­' => '­', - '®' => '®', - '¯' => '¯', - '°' => '°', - '±' => '±', - '²' => '²', - '³' => '³', - '´' => '´', - 'µ' => 'µ', - '¶' => '¶', - '·' => '·', - '¸' => '¸', - '¹' => '¹', - 'º' => 'º', - '»' => '»', - '¼' => '¼', - '½' => '½', - '¾' => '¾', - '¿' => '¿', - 'À' => 'À', - 'Ã' => 'Á', - 'Â' => 'Â', - 'Ã' => 'Ã', - 'Ä' => 'Ä', - 'Ã…' => 'Å', - 'Æ' => 'Æ', - 'Ç' => 'Ç', - 'È' => 'È', - 'É' => 'É', - 'Ê' => 'Ê', - 'Ë' => 'Ë', - 'ÃŒ' => 'Ì', - 'Ã' => 'Í', - 'ÃŽ' => 'Î', - 'Ã' => 'Ï', - 'Ã' => 'Ð', - 'Ñ' => 'Ñ', - 'Ã’' => 'Ò', - 'Ó' => 'Ó', - 'Ô' => 'Ô', - 'Õ' => 'Õ', - 'Ö' => 'Ö', - '×' => '×', - 'Ø' => 'Ø', - 'Ù' => 'Ù', - 'Ú' => 'Ú', - 'Û' => 'Û', - 'Ãœ' => 'Ü', - 'Ã' => 'Ý', - 'Þ' => 'Þ', - 'ß' => 'ß', - 'à' => 'à', - 'á' => 'á', - 'â' => 'â', - 'ã' => 'ã', - 'ä' => 'ä', - 'Ã¥' => 'å', - 'æ' => 'æ', - 'ç' => 'ç', - 'è' => 'è', - 'é' => 'é', - 'ê' => 'ê', - 'ë' => 'ë', - 'ì' => 'ì', - 'í' => 'í', - 'î' => 'î', - 'ï' => 'ï', - 'ð' => 'ð', - 'ñ' => 'ñ', - 'ò' => 'ò', - 'ó' => 'ó', - 'ô' => 'ô', - 'õ' => 'õ', - 'ö' => 'ö', - '÷' => '÷', - 'ø' => 'ø', - 'ù' => 'ù', - 'ú' => 'ú', - 'û' => 'û', - 'ü' => 'ü', - 'ý' => 'ý', - 'þ' => 'þ', - 'ÿ' => 'ÿ', - 'Ä€' => 'Ā', - 'Ä' => 'ā', - 'Ä‚' => 'Ă', - 'ă' => 'ă', - 'Ä„' => 'Ą', - 'Ä…' => 'ą', - 'Ć' => 'Ć', - 'ć' => 'ć', - 'Ĉ' => 'Ĉ', - 'ĉ' => 'ĉ', - 'ÄŠ' => 'Ċ', - 'Ä‹' => 'ċ', - 'ÄŒ' => 'Č', - 'Ä' => 'č', - 'ÄŽ' => 'Ď', - 'Ä' => 'ď', - 'Ä' => 'Đ', - 'Ä‘' => 'đ', - 'Ä’' => 'Ē', - 'Ä“' => 'ē', - 'Ä–' => 'Ė', - 'Ä—' => 'ė', - 'Ę' => 'Ę', - 'Ä™' => 'ę', - 'Äš' => 'Ě', - 'Ä›' => 'ě', - 'Äœ' => 'Ĝ', - 'Ä' => 'ĝ', - 'Äž' => 'Ğ', - 'ÄŸ' => 'ğ', - 'Ä ' => 'Ġ', - 'Ä¡' => 'ġ', - 'Ä¢' => 'Ģ', - 'Ĥ' => 'Ĥ', - 'Ä¥' => 'ĥ', - 'Ħ' => 'Ħ', - 'ħ' => 'ħ', - 'Ĩ' => 'Ĩ', - 'Ä©' => 'ĩ', - 'Ī' => 'Ī', - 'Ä«' => 'ī', - 'Ä®' => 'Į', - 'į' => 'į', - 'Ä°' => 'İ', - 'ı' => 'ı', - 'IJ' => 'IJ', - 'ij' => 'ij', - 'Ä´' => 'Ĵ', - 'ĵ' => 'ĵ', - 'Ķ' => 'Ķ', - 'Ä·' => 'ķ', - 'ĸ' => 'ĸ', - 'Ĺ' => 'Ĺ', - 'ĺ' => 'ĺ', - 'Ä»' => 'Ļ', - 'ļ' => 'ļ', - 'Ľ' => 'Ľ', - 'ľ' => 'ľ', - 'Ä¿' => 'Ŀ', - 'Å€' => 'ŀ', - 'Å' => 'Ł', - 'Å‚' => 'ł', - 'Ń' => 'Ń', - 'Å„' => 'ń', - 'Å…' => 'Ņ', - 'ņ' => 'ņ', - 'Ň' => 'Ň', - 'ň' => 'ň', - 'ʼn' => 'ʼn', - 'ÅŠ' => 'Ŋ', - 'Å‹' => 'ŋ', - 'ÅŒ' => 'Ō', - 'Å' => 'ō', - 'Å' => 'Ő', - 'Å‘' => 'ő', - 'Å’' => 'Œ', - 'Å“' => 'œ', - 'Å”' => 'Ŕ', - 'Å•' => 'ŕ', - 'Å–' => 'Ŗ', - 'Å—' => 'ŗ', - 'Ř' => 'Ř', - 'Å™' => 'ř', - 'Åš' => 'Ś', - 'Å›' => 'ś', - 'Åœ' => 'Ŝ', - 'Å' => 'ŝ', - 'Åž' => 'Ş', - 'ÅŸ' => 'ş', - 'Å ' => 'Š', - 'Å¡' => 'š', - 'Å¢' => 'Ţ', - 'Å£' => 'ţ', - 'Ť' => 'Ť', - 'Å¥' => 'ť', - 'Ŧ' => 'Ŧ', - 'ŧ' => 'ŧ', - 'Ũ' => 'Ũ', - 'Å©' => 'ũ', - 'Ū' => 'Ū', - 'Å«' => 'ū', - 'Ŭ' => 'Ŭ', - 'Å­' => 'ŭ', - 'Å®' => 'Ů', - 'ů' => 'ů', - 'Å°' => 'Ű', - 'ű' => 'ű', - 'Ų' => 'Ų', - 'ų' => 'ų', - 'Å´' => 'Ŵ', - 'ŵ' => 'ŵ', - 'Ŷ' => 'Ŷ', - 'Å·' => 'ŷ', - 'Ÿ' => 'Ÿ', - 'Ź' => 'Ź', - 'ź' => 'ź', - 'Å»' => 'Ż', - 'ż' => 'ż', - 'Ž' => 'Ž', - 'ž' => 'ž', - 'Æ’' => 'ƒ', - 'Ƶ' => 'Ƶ', - 'ǵ' => 'ǵ', - 'È·' => 'ȷ', - 'ˆ' => 'ˆ', - 'ˇ' => 'ˇ', - '˘' => '˘', - 'Ë™' => '˙', - 'Ëš' => '˚', - 'Ë›' => '˛', - 'Ëœ' => '˜', - 'Ë' => '˝', - 'Ì‘' => '̑', - 'Α' => 'Α', - 'Î’' => 'Β', - 'Γ' => 'Γ', - 'Δ' => 'Δ', - 'Ε' => 'Ε', - 'Ζ' => 'Ζ', - 'Η' => 'Η', - 'Θ' => 'Θ', - 'Ι' => 'Ι', - 'Κ' => 'Κ', - 'Λ' => 'Λ', - 'Îœ' => 'Μ', - 'Î' => 'Ν', - 'Ξ' => 'Ξ', - 'Ο' => 'Ο', - 'Π' => 'Π', - 'Ρ' => 'Ρ', - 'Σ' => 'Σ', - 'Τ' => 'Τ', - 'Î¥' => 'Υ', - 'Φ' => 'Φ', - 'Χ' => 'Χ', - 'Ψ' => 'Ψ', - 'Ω' => 'Ω', - 'α' => 'α', - 'β' => 'β', - 'γ' => 'γ', - 'δ' => 'δ', - 'ε' => 'ε', - 'ζ' => 'ζ', - 'η' => 'η', - 'θ' => 'θ', - 'ι' => 'ι', - 'κ' => 'κ', - 'λ' => 'λ', - 'μ' => 'μ', - 'ν' => 'ν', - 'ξ' => 'ξ', - 'ο' => 'ο', - 'Ï€' => 'π', - 'Ï' => 'ρ', - 'Ï‚' => 'ς', - 'σ' => 'σ', - 'Ï„' => 'τ', - 'Ï…' => 'υ', - 'φ' => 'φ', - 'χ' => 'χ', - 'ψ' => 'ψ', - 'ω' => 'ω', - 'Ï‘' => 'ϑ', - 'Ï’' => 'ϒ', - 'Ï•' => 'ϕ', - 'Ï–' => 'ϖ', - 'Ïœ' => 'Ϝ', - 'Ï' => 'ϝ', - 'Ï°' => 'ϰ', - 'ϱ' => 'ϱ', - 'ϵ' => 'ϵ', - '϶' => '϶', - 'Ð' => 'Ё', - 'Ђ' => 'Ђ', - 'Ѓ' => 'Ѓ', - 'Є' => 'Є', - 'Ð…' => 'Ѕ', - 'І' => 'І', - 'Ї' => 'Ї', - 'Ј' => 'Ј', - 'Љ' => 'Љ', - 'Њ' => 'Њ', - 'Ћ' => 'Ћ', - 'ÐŒ' => 'Ќ', - 'ÐŽ' => 'Ў', - 'Ð' => 'Џ', - 'Ð' => 'А', - 'Б' => 'Б', - 'Ð’' => 'В', - 'Г' => 'Г', - 'Д' => 'Д', - 'Е' => 'Е', - 'Ж' => 'Ж', - 'З' => 'З', - 'И' => 'И', - 'Й' => 'Й', - 'К' => 'К', - 'Л' => 'Л', - 'Ðœ' => 'М', - 'Ð' => 'Н', - 'О' => 'О', - 'П' => 'П', - 'Р' => 'Р', - 'С' => 'С', - 'Т' => 'Т', - 'У' => 'У', - 'Ф' => 'Ф', - 'Ð¥' => 'Х', - 'Ц' => 'Ц', - 'Ч' => 'Ч', - 'Ш' => 'Ш', - 'Щ' => 'Щ', - 'Ъ' => 'Ъ', - 'Ы' => 'Ы', - 'Ь' => 'Ь', - 'Э' => 'Э', - 'Ю' => 'Ю', - 'Я' => 'Я', - 'а' => 'а', - 'б' => 'б', - 'в' => 'в', - 'г' => 'г', - 'д' => 'д', - 'е' => 'е', - 'ж' => 'ж', - 'з' => 'з', - 'и' => 'и', - 'й' => 'й', - 'к' => 'к', - 'л' => 'л', - 'м' => 'м', - 'н' => 'н', - 'о' => 'о', - 'п' => 'п', - 'Ñ€' => 'р', - 'Ñ' => 'с', - 'Ñ‚' => 'т', - 'у' => 'у', - 'Ñ„' => 'ф', - 'Ñ…' => 'х', - 'ц' => 'ц', - 'ч' => 'ч', - 'ш' => 'ш', - 'щ' => 'щ', - 'ÑŠ' => 'ъ', - 'Ñ‹' => 'ы', - 'ÑŒ' => 'ь', - 'Ñ' => 'э', - 'ÑŽ' => 'ю', - 'Ñ' => 'я', - 'Ñ‘' => 'ё', - 'Ñ’' => 'ђ', - 'Ñ“' => 'ѓ', - 'Ñ”' => 'є', - 'Ñ•' => 'ѕ', - 'Ñ–' => 'і', - 'Ñ—' => 'ї', - 'ј' => 'ј', - 'Ñ™' => 'љ', - 'Ñš' => 'њ', - 'Ñ›' => 'ћ', - 'Ñœ' => 'ќ', - 'Ñž' => 'ў', - 'ÑŸ' => 'џ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - ' ' => ' ', - '​' => '​', - '‌' => '‌', - 'â€' => '‍', - '‎' => '‎', - 'â€' => '‏', - 'â€' => '‐', - '–' => '–', - '—' => '—', - '―' => '―', - '‖' => '‖', - '‘' => '‘', - '’' => '’', - '‚' => '‚', - '“' => '“', - 'â€' => '”', - '„' => '„', - '†' => '†', - '‡' => '‡', - '•' => '•', - '‥' => '‥', - '…' => '…', - '‰' => '‰', - '‱' => '‱', - '′' => '′', - '″' => '″', - '‴' => '‴', - '‵' => '‵', - '‹' => '‹', - '›' => '›', - '‾' => '‾', - 'â' => '⁁', - 'âƒ' => '⁃', - 'â„' => '⁄', - 'â' => '⁏', - 'â—' => '⁗', - 'âŸ' => ' ', - 'âŸâ€Š' => '&ThickSpace', - 'â ' => '⁠', - 'â¡' => '⁡', - 'â¢' => '⁢', - 'â£' => '⁣', - '€' => '€', - '⃛' => '⃛', - '⃜' => '⃜', - 'â„‚' => 'ℂ', - 'â„…' => '℅', - 'â„Š' => 'ℊ', - 'â„‹' => 'ℋ', - 'â„Œ' => 'ℌ', - 'â„' => 'ℍ', - 'â„Ž' => 'ℎ', - 'â„' => 'ℏ', - 'â„' => 'ℐ', - 'â„‘' => 'ℑ', - 'â„’' => 'ℒ', - 'â„“' => 'ℓ', - 'â„•' => 'ℕ', - 'â„–' => '№', - 'â„—' => '℗', - '℘' => '℘', - 'â„™' => 'ℙ', - 'â„š' => 'ℚ', - 'â„›' => 'ℛ', - 'â„œ' => 'ℜ', - 'â„' => 'ℝ', - 'â„ž' => '℞', - 'â„¢' => '™', - 'ℤ' => 'ℤ', - '℧' => '℧', - 'ℨ' => 'ℨ', - 'â„©' => '℩', - 'ℬ' => 'ℬ', - 'â„­' => 'ℭ', - 'ℯ' => 'ℯ', - 'â„°' => 'ℰ', - 'ℱ' => 'ℱ', - 'ℳ' => 'ℳ', - 'â„´' => 'ℴ', - 'ℵ' => 'ℵ', - 'ℶ' => 'ℶ', - 'â„·' => 'ℷ', - 'ℸ' => 'ℸ', - 'â……' => 'ⅅ', - 'â…†' => 'ⅆ', - 'â…‡' => 'ⅇ', - 'â…ˆ' => 'ⅈ', - 'â…“' => '⅓', - 'â…”' => '⅔', - 'â…•' => '⅕', - 'â…–' => '⅖', - 'â…—' => '⅗', - 'â…˜' => '⅘', - 'â…™' => '⅙', - 'â…š' => '⅚', - 'â…›' => '⅛', - 'â…œ' => '⅜', - 'â…' => '⅝', - 'â…ž' => '⅞', - 'â†' => '←', - '↑' => '↑', - '→' => '→', - '↓' => '↓', - '↔' => '↔', - '↕' => '↕', - '↖' => '↖', - '↗' => '↗', - '↘' => '↘', - '↙' => '↙', - '↚' => '↚', - '↛' => '↛', - 'â†' => '↝', - 'â†Ì¸' => '&nrarrw', - '↞' => '↞', - '↟' => '↟', - '↠' => '↠', - '↡' => '↡', - '↢' => '↢', - '↣' => '↣', - '↤' => '↤', - '↥' => '↥', - '↦' => '↦', - '↧' => '↧', - '↩' => '↩', - '↪' => '↪', - '↫' => '↫', - '↬' => '↬', - '↭' => '↭', - '↮' => '↮', - '↰' => '↰', - '↱' => '↱', - '↲' => '↲', - '↳' => '↳', - '↵' => '↵', - '↶' => '↶', - '↷' => '↷', - '↺' => '↺', - '↻' => '↻', - '↼' => '↼', - '↽' => '↽', - '↾' => '↾', - '↿' => '↿', - '⇀' => '⇀', - 'â‡' => '⇁', - '⇂' => '⇂', - '⇃' => '⇃', - '⇄' => '⇄', - '⇅' => '⇅', - '⇆' => '⇆', - '⇇' => '⇇', - '⇈' => '⇈', - '⇉' => '⇉', - '⇊' => '⇊', - '⇋' => '⇋', - '⇌' => '⇌', - 'â‡' => '⇍', - '⇎' => '⇎', - 'â‡' => '⇏', - 'â‡' => '⇐', - '⇑' => '⇑', - '⇒' => '⇒', - '⇓' => '⇓', - '⇔' => '⇔', - '⇕' => '⇕', - '⇖' => '⇖', - '⇗' => '⇗', - '⇘' => '⇘', - '⇙' => '⇙', - '⇚' => '⇚', - '⇛' => '⇛', - 'â‡' => '⇝', - '⇤' => '⇤', - '⇥' => '⇥', - '⇵' => '⇵', - '⇽' => '⇽', - '⇾' => '⇾', - '⇿' => '⇿', - '∀' => '∀', - 'âˆ' => '∁', - '∂' => '∂', - '∂̸' => '&npart', - '∃' => '∃', - '∄' => '∄', - '∅' => '∅', - '∇' => '∇', - '∈' => '∈', - '∉' => '∉', - '∋' => '∋', - '∌' => '∌', - 'âˆ' => '∏', - 'âˆ' => '∐', - '∑' => '∑', - '−' => '−', - '∓' => '∓', - '∔' => '∔', - '∖' => '∖', - '∗' => '∗', - '∘' => '∘', - '√' => '√', - 'âˆ' => '∝', - '∞' => '∞', - '∟' => '∟', - '∠' => '∠', - '∠⃒' => '&nang', - '∡' => '∡', - '∢' => '∢', - '∣' => '∣', - '∤' => '∤', - '∥' => '∥', - '∦' => '∦', - '∧' => '∧', - '∨' => '∨', - '∩' => '∩', - '∩︀' => '&caps', - '∪' => '∪', - '∪︀' => '&cups', - '∫' => '∫', - '∬' => '∬', - '∭' => '∭', - '∮' => '∮', - '∯' => '∯', - '∰' => '∰', - '∱' => '∱', - '∲' => '∲', - '∳' => '∳', - '∴' => '∴', - '∵' => '∵', - '∶' => '∶', - '∷' => '∷', - '∸' => '∸', - '∺' => '∺', - '∻' => '∻', - '∼' => '∼', - '∼⃒' => '&nvsim', - '∽' => '∽', - '∽̱' => '&race', - '∾' => '∾', - '∾̳' => '&acE', - '∿' => '∿', - '≀' => '≀', - 'â‰' => '≁', - '≂' => '≂', - '≂̸' => '&nesim', - '≃' => '≃', - '≄' => '≄', - '≅' => '≅', - '≆' => '≆', - '≇' => '≇', - '≈' => '≈', - '≉' => '≉', - '≊' => '≊', - '≋' => '≋', - '≋̸' => '&napid', - '≌' => '≌', - 'â‰' => '≍', - 'â‰âƒ’' => '&nvap', - '≎' => '≎', - '≎̸' => '&nbump', - 'â‰' => '≏', - 'â‰Ì¸' => '&nbumpe', - 'â‰' => '≐', - 'â‰Ì¸' => '&nedot', - '≑' => '≑', - '≒' => '≒', - '≓' => '≓', - '≔' => '≔', - '≕' => '≕', - '≖' => '≖', - '≗' => '≗', - '≙' => '≙', - '≚' => '≚', - '≜' => '≜', - '≟' => '≟', - '≠' => '≠', - '≡' => '≡', - '≡⃥' => '&bnequiv', - '≢' => '≢', - '≤' => '≤', - '≤⃒' => '&nvle', - '≥' => '≥', - '≥⃒' => '&nvge', - '≦' => '≦', - '≦̸' => '&nlE', - '≧' => '≧', - '≧̸' => '&NotGreaterFullEqual', - '≨' => '≨', - '≨︀' => '&lvertneqq', - '≩' => '≩', - '≩︀' => '&gvertneqq', - '≪' => '≪', - '≪̸' => '&nLtv', - '≪⃒' => '&nLt', - '≫' => '≫', - '≫̸' => '&NotGreaterGreater', - '≫⃒' => '&nGt', - '≬' => '≬', - '≭' => '≭', - '≮' => '≮', - '≯' => '≯', - '≰' => '≰', - '≱' => '≱', - '≲' => '≲', - '≳' => '≳', - '≴' => '≴', - '≵' => '≵', - '≶' => '≶', - '≷' => '≷', - '≸' => '≸', - '≹' => '≹', - '≺' => '≺', - '≻' => '≻', - '≼' => '≼', - '≽' => '≽', - '≾' => '≾', - '≿' => '≿', - '≿̸' => '&NotSucceedsTilde', - '⊀' => '⊀', - 'âŠ' => '⊁', - '⊂' => '⊂', - '⊂⃒' => '&vnsub', - '⊃' => '⊃', - '⊃⃒' => '&nsupset', - '⊄' => '⊄', - '⊅' => '⊅', - '⊆' => '⊆', - '⊇' => '⊇', - '⊈' => '⊈', - '⊉' => '⊉', - '⊊' => '⊊', - '⊊︀' => '&vsubne', - '⊋' => '⊋', - '⊋︀' => '&vsupne', - 'âŠ' => '⊍', - '⊎' => '⊎', - 'âŠ' => '⊏', - 'âŠÌ¸' => '&NotSquareSubset', - 'âŠ' => '⊐', - 'âŠÌ¸' => '&NotSquareSuperset', - '⊑' => '⊑', - '⊒' => '⊒', - '⊓' => '⊓', - '⊓︀' => '&sqcaps', - '⊔' => '⊔', - '⊔︀' => '&sqcups', - '⊕' => '⊕', - '⊖' => '⊖', - '⊗' => '⊗', - '⊘' => '⊘', - '⊙' => '⊙', - '⊚' => '⊚', - '⊛' => '⊛', - 'âŠ' => '⊝', - '⊞' => '⊞', - '⊟' => '⊟', - '⊠' => '⊠', - '⊡' => '⊡', - '⊢' => '⊢', - '⊣' => '⊣', - '⊤' => '⊤', - '⊥' => '⊥', - '⊧' => '⊧', - '⊨' => '⊨', - '⊩' => '⊩', - '⊪' => '⊪', - '⊫' => '⊫', - '⊬' => '⊬', - '⊭' => '⊭', - '⊮' => '⊮', - '⊯' => '⊯', - '⊰' => '⊰', - '⊲' => '⊲', - '⊳' => '⊳', - '⊴' => '⊴', - '⊴⃒' => '&nvltrie', - '⊵' => '⊵', - '⊵⃒' => '&nvrtrie', - '⊶' => '⊶', - '⊷' => '⊷', - '⊸' => '⊸', - '⊹' => '⊹', - '⊺' => '⊺', - '⊻' => '⊻', - '⊽' => '⊽', - '⊾' => '⊾', - '⊿' => '⊿', - 'â‹€' => '⋀', - 'â‹' => '⋁', - 'â‹‚' => '⋂', - '⋃' => '⋃', - 'â‹„' => '⋄', - 'â‹…' => '⋅', - '⋆' => '⋆', - '⋇' => '⋇', - '⋈' => '⋈', - '⋉' => '⋉', - 'â‹Š' => '⋊', - 'â‹‹' => '⋋', - 'â‹Œ' => '⋌', - 'â‹' => '⋍', - 'â‹Ž' => '⋎', - 'â‹' => '⋏', - 'â‹' => '⋐', - 'â‹‘' => '⋑', - 'â‹’' => '⋒', - 'â‹“' => '⋓', - 'â‹”' => '⋔', - 'â‹•' => '⋕', - 'â‹–' => '⋖', - 'â‹—' => '⋗', - '⋘' => '⋘', - '⋘̸' => '&nLl', - 'â‹™' => '⋙', - '⋙̸' => '&nGg', - 'â‹š' => '⋚', - '⋚︀' => '&lesg', - 'â‹›' => '⋛', - '⋛︀' => '&gesl', - 'â‹ž' => '⋞', - 'â‹Ÿ' => '⋟', - 'â‹ ' => '⋠', - 'â‹¡' => '⋡', - 'â‹¢' => '⋢', - 'â‹£' => '⋣', - '⋦' => '⋦', - '⋧' => '⋧', - '⋨' => '⋨', - 'â‹©' => '⋩', - '⋪' => '⋪', - 'â‹«' => '⋫', - '⋬' => '⋬', - 'â‹­' => '⋭', - 'â‹®' => '⋮', - '⋯' => '⋯', - 'â‹°' => '⋰', - '⋱' => '⋱', - '⋲' => '⋲', - '⋳' => '⋳', - 'â‹´' => '⋴', - '⋵' => '⋵', - '⋵̸' => '¬indot', - '⋶' => '⋶', - 'â‹·' => '⋷', - '⋹' => '⋹', - '⋹̸' => '¬inE', - '⋺' => '⋺', - 'â‹»' => '⋻', - '⋼' => '⋼', - '⋽' => '⋽', - '⋾' => '⋾', - '⌅' => '⌅', - '⌆' => '⌆', - '⌈' => '⌈', - '⌉' => '⌉', - '⌊' => '⌊', - '⌋' => '⌋', - '⌌' => '⌌', - 'âŒ' => '⌍', - '⌎' => '⌎', - 'âŒ' => '⌏', - 'âŒ' => '⌐', - '⌒' => '⌒', - '⌓' => '⌓', - '⌕' => '⌕', - '⌖' => '⌖', - '⌜' => '⌜', - 'âŒ' => '⌝', - '⌞' => '⌞', - '⌟' => '⌟', - '⌢' => '⌢', - '⌣' => '⌣', - '⌭' => '⌭', - '⌮' => '⌮', - '⌶' => '⌶', - '⌽' => '⌽', - '⌿' => '⌿', - 'â¼' => '⍼', - '⎰' => '⎰', - '⎱' => '⎱', - '⎴' => '⎴', - '⎵' => '⎵', - '⎶' => '⎶', - 'âœ' => '⏜', - 'â' => '⏝', - 'âž' => '⏞', - 'âŸ' => '⏟', - 'â¢' => '⏢', - 'â§' => '⏧', - 'â£' => '␣', - 'Ⓢ' => 'Ⓢ', - '─' => '─', - '│' => '│', - '┌' => '┌', - 'â”' => '┐', - 'â””' => '└', - '┘' => '┘', - '├' => '├', - '┤' => '┤', - '┬' => '┬', - 'â”´' => '┴', - '┼' => '┼', - 'â•' => '═', - 'â•‘' => '║', - 'â•’' => '╒', - 'â•“' => '╓', - 'â•”' => '╔', - 'â••' => '╕', - 'â•–' => '╖', - 'â•—' => '╗', - '╘' => '╘', - 'â•™' => '╙', - 'â•š' => '╚', - 'â•›' => '╛', - 'â•œ' => '╜', - 'â•' => '╝', - 'â•ž' => '╞', - 'â•Ÿ' => '╟', - 'â• ' => '╠', - 'â•¡' => '╡', - 'â•¢' => '╢', - 'â•£' => '╣', - '╤' => '╤', - 'â•¥' => '╥', - '╦' => '╦', - '╧' => '╧', - '╨' => '╨', - 'â•©' => '╩', - '╪' => '╪', - 'â•«' => '╫', - '╬' => '╬', - 'â–€' => '▀', - 'â–„' => '▄', - 'â–ˆ' => '█', - 'â–‘' => '░', - 'â–’' => '▒', - 'â–“' => '▓', - 'â–¡' => '□', - 'â–ª' => '▪', - 'â–«' => '▫', - 'â–­' => '▭', - 'â–®' => '▮', - 'â–±' => '▱', - 'â–³' => '△', - 'â–´' => '▴', - 'â–µ' => '▵', - 'â–¸' => '▸', - 'â–¹' => '▹', - 'â–½' => '▽', - 'â–¾' => '▾', - 'â–¿' => '▿', - 'â—‚' => '◂', - 'â—ƒ' => '◃', - 'â—Š' => '◊', - 'â—‹' => '○', - 'â—¬' => '◬', - 'â—¯' => '◯', - 'â—¸' => '◸', - 'â—¹' => '◹', - 'â—º' => '◺', - 'â—»' => '◻', - 'â—¼' => '◼', - '★' => '★', - '☆' => '☆', - '☎' => '☎', - '♀' => '♀', - '♂' => '♂', - 'â™ ' => '♠', - '♣' => '♣', - '♥' => '♥', - '♦' => '♦', - '♪' => '♪', - 'â™­' => '♭', - 'â™®' => '♮', - '♯' => '♯', - '✓' => '✓', - '✗' => '✗', - '✠' => '✠', - '✶' => '✶', - 'â˜' => '❘', - 'â²' => '❲', - 'â³' => '❳', - '⟈' => '⟈', - '⟉' => '⟉', - '⟦' => '⟦', - '⟧' => '⟧', - '⟨' => '⟨', - '⟩' => '⟩', - '⟪' => '⟪', - '⟫' => '⟫', - '⟬' => '⟬', - '⟭' => '⟭', - '⟵' => '⟵', - '⟶' => '⟶', - '⟷' => '⟷', - '⟸' => '⟸', - '⟹' => '⟹', - '⟺' => '⟺', - '⟼' => '⟼', - '⟿' => '⟿', - '⤂' => '⤂', - '⤃' => '⤃', - '⤄' => '⤄', - '⤅' => '⤅', - '⤌' => '⤌', - 'â¤' => '⤍', - '⤎' => '⤎', - 'â¤' => '⤏', - 'â¤' => '⤐', - '⤑' => '⤑', - '⤒' => '⤒', - '⤓' => '⤓', - '⤖' => '⤖', - '⤙' => '⤙', - '⤚' => '⤚', - '⤛' => '⤛', - '⤜' => '⤜', - 'â¤' => '⤝', - '⤞' => '⤞', - '⤟' => '⤟', - '⤠' => '⤠', - '⤣' => '⤣', - '⤤' => '⤤', - '⤥' => '⤥', - '⤦' => '⤦', - '⤧' => '⤧', - '⤨' => '⤨', - '⤩' => '⤩', - '⤪' => '⤪', - '⤳' => '⤳', - '⤳̸' => '&nrarrc', - '⤵' => '⤵', - '⤶' => '⤶', - '⤷' => '⤷', - '⤸' => '⤸', - '⤹' => '⤹', - '⤼' => '⤼', - '⤽' => '⤽', - '⥅' => '⥅', - '⥈' => '⥈', - '⥉' => '⥉', - '⥊' => '⥊', - '⥋' => '⥋', - '⥎' => '⥎', - 'â¥' => '⥏', - 'â¥' => '⥐', - '⥑' => '⥑', - '⥒' => '⥒', - '⥓' => '⥓', - '⥔' => '⥔', - '⥕' => '⥕', - '⥖' => '⥖', - '⥗' => '⥗', - '⥘' => '⥘', - '⥙' => '⥙', - '⥚' => '⥚', - '⥛' => '⥛', - '⥜' => '⥜', - 'â¥' => '⥝', - '⥞' => '⥞', - '⥟' => '⥟', - '⥠' => '⥠', - '⥡' => '⥡', - '⥢' => '⥢', - '⥣' => '⥣', - '⥤' => '⥤', - '⥥' => '⥥', - '⥦' => '⥦', - '⥧' => '⥧', - '⥨' => '⥨', - '⥩' => '⥩', - '⥪' => '⥪', - '⥫' => '⥫', - '⥬' => '⥬', - '⥭' => '⥭', - '⥮' => '⥮', - '⥯' => '⥯', - '⥰' => '⥰', - '⥱' => '⥱', - '⥲' => '⥲', - '⥳' => '⥳', - '⥴' => '⥴', - '⥵' => '⥵', - '⥶' => '⥶', - '⥸' => '⥸', - '⥹' => '⥹', - '⥻' => '⥻', - '⥼' => '⥼', - '⥽' => '⥽', - '⥾' => '⥾', - '⥿' => '⥿', - '⦅' => '⦅', - '⦆' => '⦆', - '⦋' => '⦋', - '⦌' => '⦌', - 'â¦' => '⦍', - '⦎' => '⦎', - 'â¦' => '⦏', - 'â¦' => '⦐', - '⦑' => '⦑', - '⦒' => '⦒', - '⦓' => '⦓', - '⦔' => '⦔', - '⦕' => '⦕', - '⦖' => '⦖', - '⦚' => '⦚', - '⦜' => '⦜', - 'â¦' => '⦝', - '⦤' => '⦤', - '⦥' => '⦥', - '⦦' => '⦦', - '⦧' => '⦧', - '⦨' => '⦨', - '⦩' => '⦩', - '⦪' => '⦪', - '⦫' => '⦫', - '⦬' => '⦬', - '⦭' => '⦭', - '⦮' => '⦮', - '⦯' => '⦯', - '⦰' => '⦰', - '⦱' => '⦱', - '⦲' => '⦲', - '⦳' => '⦳', - '⦴' => '⦴', - '⦵' => '⦵', - '⦶' => '⦶', - '⦷' => '⦷', - '⦹' => '⦹', - '⦻' => '⦻', - '⦼' => '⦼', - '⦾' => '⦾', - '⦿' => '⦿', - '⧀' => '⧀', - 'â§' => '⧁', - '⧂' => '⧂', - '⧃' => '⧃', - '⧄' => '⧄', - '⧅' => '⧅', - '⧉' => '⧉', - 'â§' => '⧍', - '⧎' => '⧎', - 'â§' => '⧏', - 'â§Ì¸' => '&NotLeftTriangleBar', - 'â§' => '⧐', - 'â§Ì¸' => '&NotRightTriangleBar', - '⧜' => '⧜', - 'â§' => '⧝', - '⧞' => '⧞', - '⧣' => '⧣', - '⧤' => '⧤', - '⧥' => '⧥', - '⧫' => '⧫', - '⧴' => '⧴', - '⧶' => '⧶', - '⨀' => '⨀', - 'â¨' => '⨁', - '⨂' => '⨂', - '⨄' => '⨄', - '⨆' => '⨆', - '⨌' => '⨌', - 'â¨' => '⨍', - 'â¨' => '⨐', - '⨑' => '⨑', - '⨒' => '⨒', - '⨓' => '⨓', - '⨔' => '⨔', - '⨕' => '⨕', - '⨖' => '⨖', - '⨗' => '⨗', - '⨢' => '⨢', - '⨣' => '⨣', - '⨤' => '⨤', - '⨥' => '⨥', - '⨦' => '⨦', - '⨧' => '⨧', - '⨩' => '⨩', - '⨪' => '⨪', - '⨭' => '⨭', - '⨮' => '⨮', - '⨯' => '⨯', - '⨰' => '⨰', - '⨱' => '⨱', - '⨳' => '⨳', - '⨴' => '⨴', - '⨵' => '⨵', - '⨶' => '⨶', - '⨷' => '⨷', - '⨸' => '⨸', - '⨹' => '⨹', - '⨺' => '⨺', - '⨻' => '⨻', - '⨼' => '⨼', - '⨿' => '⨿', - 'â©€' => '⩀', - 'â©‚' => '⩂', - '⩃' => '⩃', - 'â©„' => '⩄', - 'â©…' => '⩅', - '⩆' => '⩆', - '⩇' => '⩇', - '⩈' => '⩈', - '⩉' => '⩉', - 'â©Š' => '⩊', - 'â©‹' => '⩋', - 'â©Œ' => '⩌', - 'â©' => '⩍', - 'â©' => '⩐', - 'â©“' => '⩓', - 'â©”' => '⩔', - 'â©•' => '⩕', - 'â©–' => '⩖', - 'â©—' => '⩗', - '⩘' => '⩘', - 'â©š' => '⩚', - 'â©›' => '⩛', - 'â©œ' => '⩜', - 'â©' => '⩝', - 'â©Ÿ' => '⩟', - '⩦' => '⩦', - '⩪' => '⩪', - 'â©­' => '⩭', - '⩭̸' => '&ncongdot', - 'â©®' => '⩮', - '⩯' => '⩯', - 'â©°' => '⩰', - '⩰̸' => '&napE', - '⩱' => '⩱', - '⩲' => '⩲', - '⩳' => '⩳', - 'â©´' => '⩴', - '⩵' => '⩵', - 'â©·' => '⩷', - '⩸' => '⩸', - '⩹' => '⩹', - '⩺' => '⩺', - 'â©»' => '⩻', - '⩼' => '⩼', - '⩽' => '⩽', - '⩽̸' => '&nles', - '⩾' => '⩾', - '⩾̸' => '&nges', - 'â©¿' => '⩿', - '⪀' => '⪀', - 'âª' => '⪁', - '⪂' => '⪂', - '⪃' => '⪃', - '⪄' => '⪄', - '⪅' => '⪅', - '⪆' => '⪆', - '⪇' => '⪇', - '⪈' => '⪈', - '⪉' => '⪉', - '⪊' => '⪊', - '⪋' => '⪋', - '⪌' => '⪌', - 'âª' => '⪍', - '⪎' => '⪎', - 'âª' => '⪏', - 'âª' => '⪐', - '⪑' => '⪑', - '⪒' => '⪒', - '⪓' => '⪓', - '⪔' => '⪔', - '⪕' => '⪕', - '⪖' => '⪖', - '⪗' => '⪗', - '⪘' => '⪘', - '⪙' => '⪙', - '⪚' => '⪚', - 'âª' => '⪝', - '⪞' => '⪞', - '⪟' => '⪟', - '⪠' => '⪠', - '⪡' => '⪡', - '⪡̸' => '&NotNestedLessLess', - '⪢' => '⪢', - '⪢̸' => '&NotNestedGreaterGreater', - '⪤' => '⪤', - '⪥' => '⪥', - '⪦' => '⪦', - '⪧' => '⪧', - '⪨' => '⪨', - '⪩' => '⪩', - '⪪' => '⪪', - '⪫' => '⪫', - '⪬' => '⪬', - '⪬︀' => '&smtes', - '⪭' => '⪭', - '⪭︀' => '&lates', - '⪮' => '⪮', - '⪯' => '⪯', - '⪯̸' => '&NotPrecedesEqual', - '⪰' => '⪰', - '⪰̸' => '&NotSucceedsEqual', - '⪳' => '⪳', - '⪴' => '⪴', - '⪵' => '⪵', - '⪶' => '⪶', - '⪷' => '⪷', - '⪸' => '⪸', - '⪹' => '⪹', - '⪺' => '⪺', - '⪻' => '⪻', - '⪼' => '⪼', - '⪽' => '⪽', - '⪾' => '⪾', - '⪿' => '⪿', - 'â«€' => '⫀', - 'â«' => '⫁', - 'â«‚' => '⫂', - '⫃' => '⫃', - 'â«„' => '⫄', - 'â«…' => '⫅', - '⫅̸' => '&nsubE', - '⫆' => '⫆', - '⫆̸' => '&nsupseteqq', - '⫇' => '⫇', - '⫈' => '⫈', - 'â«‹' => '⫋', - '⫋︀' => '&vsubnE', - 'â«Œ' => '⫌', - '⫌︀' => '&varsupsetneqq', - 'â«' => '⫏', - 'â«' => '⫐', - 'â«‘' => '⫑', - 'â«’' => '⫒', - 'â«“' => '⫓', - 'â«”' => '⫔', - 'â«•' => '⫕', - 'â«–' => '⫖', - 'â«—' => '⫗', - '⫘' => '⫘', - 'â«™' => '⫙', - 'â«š' => '⫚', - 'â«›' => '⫛', - '⫤' => '⫤', - '⫦' => '⫦', - '⫧' => '⫧', - '⫨' => '⫨', - 'â«©' => '⫩', - 'â««' => '⫫', - '⫬' => '⫬', - 'â«­' => '⫭', - 'â«®' => '⫮', - '⫯' => '⫯', - 'â«°' => '⫰', - '⫱' => '⫱', - '⫲' => '⫲', - '⫳' => '⫳', - '⫽︀' => '&varsupsetneqq', - 'ff' => 'ff', - 'ï¬' => 'fi', - 'fl' => 'fl', - 'ffi' => 'ffi', - 'ffl' => 'ffl', - 'ð’œ' => '𝒜', - 'ð’ž' => '𝒞', - 'ð’Ÿ' => '𝒟', - 'ð’¢' => '𝒢', - 'ð’¥' => '𝒥', - 'ð’¦' => '𝒦', - 'ð’©' => '𝒩', - 'ð’ª' => '𝒪', - 'ð’«' => '𝒫', - 'ð’¬' => '𝒬', - 'ð’®' => '𝒮', - 'ð’¯' => '𝒯', - 'ð’°' => '𝒰', - 'ð’±' => '𝒱', - 'ð’²' => '𝒲', - 'ð’³' => '𝒳', - 'ð’´' => '𝒴', - 'ð’µ' => '𝒵', - 'ð’¶' => '𝒶', - 'ð’·' => '𝒷', - 'ð’¸' => '𝒸', - 'ð’¹' => '𝒹', - 'ð’»' => '𝒻', - 'ð’½' => '𝒽', - 'ð’¾' => '𝒾', - 'ð’¿' => '𝒿', - 'ð“€' => '𝓀', - 'ð“' => '𝓁', - 'ð“‚' => '𝓂', - 'ð“ƒ' => '𝓃', - 'ð“…' => '𝓅', - 'ð“†' => '𝓆', - 'ð“‡' => '𝓇', - 'ð“ˆ' => '𝓈', - 'ð“‰' => '𝓉', - 'ð“Š' => '𝓊', - 'ð“‹' => '𝓋', - 'ð“Œ' => '𝓌', - 'ð“' => '𝓍', - 'ð“Ž' => '𝓎', - 'ð“' => '𝓏', - 'ð”„' => '𝔄', - 'ð”…' => '𝔅', - 'ð”‡' => '𝔇', - 'ð”ˆ' => '𝔈', - 'ð”‰' => '𝔉', - 'ð”Š' => '𝔊', - 'ð”' => '𝔍', - 'ð”Ž' => '𝔎', - 'ð”' => '𝔏', - 'ð”' => '𝔐', - 'ð”‘' => '𝔑', - 'ð”’' => '𝔒', - 'ð”“' => '𝔓', - 'ð””' => '𝔔', - 'ð”–' => '𝔖', - 'ð”—' => '𝔗', - 'ð”˜' => '𝔘', - 'ð”™' => '𝔙', - 'ð”š' => '𝔚', - 'ð”›' => '𝔛', - 'ð”œ' => '𝔜', - 'ð”ž' => '𝔞', - 'ð”Ÿ' => '𝔟', - 'ð” ' => '𝔠', - 'ð”¡' => '𝔡', - 'ð”¢' => '𝔢', - 'ð”£' => '𝔣', - 'ð”¤' => '𝔤', - 'ð”¥' => '𝔥', - 'ð”¦' => '𝔦', - 'ð”§' => '𝔧', - 'ð”¨' => '𝔨', - 'ð”©' => '𝔩', - 'ð”ª' => '𝔪', - 'ð”«' => '𝔫', - 'ð”¬' => '𝔬', - 'ð”­' => '𝔭', - 'ð”®' => '𝔮', - 'ð”¯' => '𝔯', - 'ð”°' => '𝔰', - 'ð”±' => '𝔱', - 'ð”²' => '𝔲', - 'ð”³' => '𝔳', - 'ð”´' => '𝔴', - 'ð”µ' => '𝔵', - 'ð”¶' => '𝔶', - 'ð”·' => '𝔷', - 'ð”¸' => '𝔸', - 'ð”¹' => '𝔹', - 'ð”»' => '𝔻', - 'ð”¼' => '𝔼', - 'ð”½' => '𝔽', - 'ð”¾' => '𝔾', - 'ð•€' => '𝕀', - 'ð•' => '𝕁', - 'ð•‚' => '𝕂', - 'ð•ƒ' => '𝕃', - 'ð•„' => '𝕄', - 'ð•†' => '𝕆', - 'ð•Š' => '𝕊', - 'ð•‹' => '𝕋', - 'ð•Œ' => '𝕌', - 'ð•' => '𝕍', - 'ð•Ž' => '𝕎', - 'ð•' => '𝕏', - 'ð•' => '𝕐', - 'ð•’' => '𝕒', - 'ð•“' => '𝕓', - 'ð•”' => '𝕔', - 'ð••' => '𝕕', - 'ð•–' => '𝕖', - 'ð•—' => '𝕗', - 'ð•˜' => '𝕘', - 'ð•™' => '𝕙', - 'ð•š' => '𝕚', - 'ð•›' => '𝕛', - 'ð•œ' => '𝕜', - 'ð•' => '𝕝', - 'ð•ž' => '𝕞', - 'ð•Ÿ' => '𝕟', - 'ð• ' => '𝕠', - 'ð•¡' => '𝕡', - 'ð•¢' => '𝕢', - 'ð•£' => '𝕣', - 'ð•¤' => '𝕤', - 'ð•¥' => '𝕥', - 'ð•¦' => '𝕦', - 'ð•§' => '𝕧', - 'ð•¨' => '𝕨', - 'ð•©' => '𝕩', - 'ð•ª' => '𝕪', - 'ð•«' => '𝕫', - ); -} diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php b/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php deleted file mode 100644 index ec467f2..0000000 --- a/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php +++ /dev/null @@ -1,553 +0,0 @@ -'http://www.w3.org/1999/xhtml', - 'attrNamespace'=>'http://www.w3.org/1999/xhtml', - - 'nodeName'=>'img', 'nodeName'=>array('img', 'a'), - 'attrName'=>'alt', 'attrName'=>array('title', 'alt'), - ), - */ - array( - 'nodeNamespace' => 'http://www.w3.org/1999/xhtml', - 'attrName' => array('href', - 'hreflang', - 'http-equiv', - 'icon', - 'id', - 'keytype', - 'kind', - 'label', - 'lang', - 'language', - 'list', - 'maxlength', - 'media', - 'method', - 'name', - 'placeholder', - 'rel', - 'rows', - 'rowspan', - 'sandbox', - 'spellcheck', - 'scope', - 'seamless', - 'shape', - 'size', - 'sizes', - 'span', - 'src', - 'srcdoc', - 'srclang', - 'srcset', - 'start', - 'step', - 'style', - 'summary', - 'tabindex', - 'target', - 'title', - 'type', - 'value', - 'width', - 'border', - 'charset', - 'cite', - 'class', - 'code', - 'codebase', - 'color', - 'cols', - 'colspan', - 'content', - 'coords', - 'data', - 'datetime', - 'default', - 'dir', - 'dirname', - 'enctype', - 'for', - 'form', - 'formaction', - 'headers', - 'height', - 'accept', - 'accept-charset', - 'accesskey', - 'action', - 'align', - 'alt', - 'bgcolor', - ), - ), - array( - 'nodeNamespace' => 'http://www.w3.org/1999/xhtml', - 'xpath' => 'starts-with(local-name(), \'data-\')', - ), - ); - - const DOCTYPE = ''; - - public function __construct($output, $options = array()) - { - if (isset($options['encode_entities'])) { - $this->encode = $options['encode_entities']; - } - - $this->outputMode = static::IM_IN_HTML; - $this->out = $output; - $this->hasHTML5 = defined('ENT_HTML5'); - } - - public function addRule(array $rule) - { - $this->nonBooleanAttributes[] = $rule; - } - - public function setTraverser(Traverser $traverser) - { - $this->traverser = $traverser; - - return $this; - } - - public function unsetTraverser() - { - $this->traverser = null; - - return $this; - } - - public function document($dom) - { - $this->doctype(); - if ($dom->documentElement) { - foreach ($dom->childNodes as $node) { - $this->traverser->node($node); - } - $this->nl(); - } - } - - protected function doctype() - { - $this->wr(static::DOCTYPE); - $this->nl(); - } - - public function element($ele) - { - $name = $ele->tagName; - - // Per spec: - // If the element has a declared namespace in the HTML, MathML or - // SVG namespaces, we use the lname instead of the tagName. - if ($this->traverser->isLocalElement($ele)) { - $name = $ele->localName; - } - - // If we are in SVG or MathML there is special handling. - // Using if/elseif instead of switch because it's faster in PHP. - if ('svg' == $name) { - $this->outputMode = static::IM_IN_SVG; - $name = Elements::normalizeSvgElement($name); - } elseif ('math' == $name) { - $this->outputMode = static::IM_IN_MATHML; - } - - $this->openTag($ele); - if (Elements::isA($name, Elements::TEXT_RAW)) { - foreach ($ele->childNodes as $child) { - if ($child instanceof \DOMCharacterData) { - $this->wr($child->data); - } elseif ($child instanceof \DOMElement) { - $this->element($child); - } - } - } else { - // Handle children. - if ($ele->hasChildNodes()) { - $this->traverser->children($ele->childNodes); - } - - // Close out the SVG or MathML special handling. - if ('svg' == $name || 'math' == $name) { - $this->outputMode = static::IM_IN_HTML; - } - } - - // If not unary, add a closing tag. - if (!Elements::isA($name, Elements::VOID_TAG)) { - $this->closeTag($ele); - } - } - - /** - * Write a text node. - * - * @param \DOMText $ele The text node to write. - */ - public function text($ele) - { - if (isset($ele->parentNode) && isset($ele->parentNode->tagName) && Elements::isA($ele->parentNode->localName, Elements::TEXT_RAW)) { - $this->wr($ele->data); - - return; - } - - // FIXME: This probably needs some flags set. - $this->wr($this->enc($ele->data)); - } - - public function cdata($ele) - { - // This encodes CDATA. - $this->wr($ele->ownerDocument->saveXML($ele)); - } - - public function comment($ele) - { - // These produce identical output. - // $this->wr(''); - $this->wr($ele->ownerDocument->saveXML($ele)); - } - - public function processorInstruction($ele) - { - $this->wr('wr($ele->target) - ->wr(' ') - ->wr($ele->data) - ->wr('?>'); - } - - /** - * Write the namespace attributes. - * - * @param \DOMNode $ele The element being written. - */ - protected function namespaceAttrs($ele) - { - if (!$this->xpath || $this->xpath->document !== $ele->ownerDocument) { - $this->xpath = new \DOMXPath($ele->ownerDocument); - } - - foreach ($this->xpath->query('namespace::*[not(.=../../namespace::*)]', $ele) as $nsNode) { - if (!in_array($nsNode->nodeValue, $this->implicitNamespaces)) { - $this->wr(' ')->wr($nsNode->nodeName)->wr('="')->wr($nsNode->nodeValue)->wr('"'); - } - } - } - - /** - * Write the opening tag. - * - * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the - * qualified name (8.3). - * - * @param \DOMNode $ele The element being written. - */ - protected function openTag($ele) - { - $this->wr('<')->wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName); - - $this->attrs($ele); - $this->namespaceAttrs($ele); - - if ($this->outputMode == static::IM_IN_HTML) { - $this->wr('>'); - } // If we are not in html mode we are in SVG, MathML, or XML embedded content. - else { - if ($ele->hasChildNodes()) { - $this->wr('>'); - } // If there are no children this is self closing. - else { - $this->wr(' />'); - } - } - } - - protected function attrs($ele) - { - // FIXME: Needs support for xml, xmlns, xlink, and namespaced elements. - if (!$ele->hasAttributes()) { - return $this; - } - - // TODO: Currently, this always writes name="value", and does not do - // value-less attributes. - $map = $ele->attributes; - $len = $map->length; - for ($i = 0; $i < $len; ++$i) { - $node = $map->item($i); - $val = $this->enc($node->value, true); - - // XXX: The spec says that we need to ensure that anything in - // the XML, XMLNS, or XLink NS's should use the canonical - // prefix. It seems that DOM does this for us already, but there - // may be exceptions. - $name = $node->nodeName; - - // Special handling for attributes in SVG and MathML. - // Using if/elseif instead of switch because it's faster in PHP. - if ($this->outputMode == static::IM_IN_SVG) { - $name = Elements::normalizeSvgAttribute($name); - } elseif ($this->outputMode == static::IM_IN_MATHML) { - $name = Elements::normalizeMathMlAttribute($name); - } - - $this->wr(' ')->wr($name); - - if ((isset($val) && '' !== $val) || $this->nonBooleanAttribute($node)) { - $this->wr('="')->wr($val)->wr('"'); - } - } - } - - protected function nonBooleanAttribute(\DOMAttr $attr) - { - $ele = $attr->ownerElement; - foreach ($this->nonBooleanAttributes as $rule) { - if (isset($rule['nodeNamespace']) && $rule['nodeNamespace'] !== $ele->namespaceURI) { - continue; - } - if (isset($rule['attNamespace']) && $rule['attNamespace'] !== $attr->namespaceURI) { - continue; - } - if (isset($rule['nodeName']) && !is_array($rule['nodeName']) && $rule['nodeName'] !== $ele->localName) { - continue; - } - if (isset($rule['nodeName']) && is_array($rule['nodeName']) && !in_array($ele->localName, $rule['nodeName'], true)) { - continue; - } - if (isset($rule['attrName']) && !is_array($rule['attrName']) && $rule['attrName'] !== $attr->localName) { - continue; - } - if (isset($rule['attrName']) && is_array($rule['attrName']) && !in_array($attr->localName, $rule['attrName'], true)) { - continue; - } - if (isset($rule['xpath'])) { - $xp = $this->getXPath($attr); - if (isset($rule['prefixes'])) { - foreach ($rule['prefixes'] as $nsPrefix => $ns) { - $xp->registerNamespace($nsPrefix, $ns); - } - } - if (!$xp->evaluate($rule['xpath'], $attr)) { - continue; - } - } - - return true; - } - - return false; - } - - private function getXPath(\DOMNode $node) - { - if (!$this->xpath) { - $this->xpath = new \DOMXPath($node->ownerDocument); - } - - return $this->xpath; - } - - /** - * Write the closing tag. - * - * Tags for HTML, MathML, and SVG are in the local name. Otherwise, use the - * qualified name (8.3). - * - * @param \DOMNode $ele The element being written. - */ - protected function closeTag($ele) - { - if ($this->outputMode == static::IM_IN_HTML || $ele->hasChildNodes()) { - $this->wr('wr($this->traverser->isLocalElement($ele) ? $ele->localName : $ele->tagName)->wr('>'); - } - } - - /** - * Write to the output. - * - * @param string $text The string to put into the output - * - * @return $this - */ - protected function wr($text) - { - fwrite($this->out, $text); - - return $this; - } - - /** - * Write a new line character. - * - * @return $this - */ - protected function nl() - { - fwrite($this->out, PHP_EOL); - - return $this; - } - - /** - * Encode text. - * - * When encode is set to false, the default value, the text passed in is - * escaped per section 8.3 of the html5 spec. For details on how text is - * escaped see the escape() method. - * - * When encoding is set to true the text is converted to named character - * references where appropriate. Section 8.1.4 Character references of the - * html5 spec refers to using named character references. This is useful for - * characters that can't otherwise legally be used in the text. - * - * The named character references are listed in section 8.5. - * - * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#named-character-references True encoding will turn all named character references into their entities. - * This includes such characters as +.# and many other common ones. By default - * encoding here will just escape &'<>". - * - * Note, PHP 5.4+ has better html5 encoding. - * - * @todo Use the Entities class in php 5.3 to have html5 entities. - * - * @param string $text Text to encode. - * @param bool $attribute True if we are encoding an attrubute, false otherwise. - * - * @return string The encoded text. - */ - protected function enc($text, $attribute = false) - { - // Escape the text rather than convert to named character references. - if (!$this->encode) { - return $this->escape($text, $attribute); - } - - // If we are in PHP 5.4+ we can use the native html5 entity functionality to - // convert the named character references. - - if ($this->hasHTML5) { - return htmlentities($text, ENT_HTML5 | ENT_SUBSTITUTE | ENT_QUOTES, 'UTF-8', false); - } // If a version earlier than 5.4 html5 entities are not entirely handled. - // This manually handles them. - else { - return strtr($text, HTML5Entities::$map); - } - } - - /** - * Escape test. - * - * According to the html5 spec section 8.3 Serializing HTML fragments, text - * within tags that are not style, script, xmp, iframe, noembed, and noframes - * need to be properly escaped. - * - * The & should be converted to &, no breaking space unicode characters - * converted to  , when in attribute mode the " should be converted to - * ", and when not in attribute mode the < and > should be converted to - * < and >. - * - * @see http://www.w3.org/TR/2013/CR-html5-20130806/syntax.html#escapingString - * - * @param string $text Text to escape. - * @param bool $attribute True if we are escaping an attrubute, false otherwise. - */ - protected function escape($text, $attribute = false) - { - // Not using htmlspecialchars because, while it does escaping, it doesn't - // match the requirements of section 8.5. For example, it doesn't handle - // non-breaking spaces. - if ($attribute) { - $replace = array( - '"' => '"', - '&' => '&', - "\xc2\xa0" => ' ', - ); - } else { - $replace = array( - '<' => '<', - '>' => '>', - '&' => '&', - "\xc2\xa0" => ' ', - ); - } - - return strtr($text, $replace); - } -} diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/README.md b/vendor/masterminds/html5/src/HTML5/Serializer/README.md deleted file mode 100644 index 849a47f..0000000 --- a/vendor/masterminds/html5/src/HTML5/Serializer/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# The Serializer (Writer) Model - -The serializer roughly follows sections _8.1 Writing HTML documents_ and section -_8.3 Serializing HTML fragments_ by converting DOMDocument, DOMDocumentFragment, -and DOMNodeList into HTML5. - - [ HTML5 ] // Interface for saving. - || - [ Traverser ] // Walk the DOM - || - [ Rules ] // Convert DOM elements into strings. - || - [ HTML5 ] // HTML5 document or fragment in text. - - -## HTML5 Class - -Provides the top level interface for saving. - -## The Traverser - -Walks the DOM finding each element and passing it off to the output rules to -convert to HTML5. - -## Output Rules - -The output rules are defined in the RulesInterface which can have multiple -implementations. Currently, the OutputRules is the default implementation that -converts a DOM as is into HTML5. - -## HTML5 String - -The output of the process it HTML5 as a string or saved to a file. \ No newline at end of file diff --git a/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php b/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php deleted file mode 100644 index 69a6ecd..0000000 --- a/vendor/masterminds/html5/src/HTML5/Serializer/RulesInterface.php +++ /dev/null @@ -1,99 +0,0 @@ - 'html', - 'http://www.w3.org/1998/Math/MathML' => 'math', - 'http://www.w3.org/2000/svg' => 'svg', - ); - - protected $dom; - - protected $options; - - protected $encode = false; - - protected $rules; - - protected $out; - - /** - * Create a traverser. - * - * @param \DOMNode|\DOMNodeList $dom The document or node to traverse. - * @param resource $out A stream that allows writing. The traverser will output into this - * stream. - * @param array $options An array of options for the traverser as key/value pairs. These include: - * - encode_entities: A bool to specify if full encding should happen for all named - * charachter references. Defaults to false which escapes &'<>". - * - output_rules: The path to the class handling the output rules. - */ - public function __construct($dom, $out, RulesInterface $rules, $options = array()) - { - $this->dom = $dom; - $this->out = $out; - $this->rules = $rules; - $this->options = $options; - - $this->rules->setTraverser($this); - } - - /** - * Tell the traverser to walk the DOM. - * - * @return resource $out Returns the output stream. - */ - public function walk() - { - if ($this->dom instanceof \DOMDocument) { - $this->rules->document($this->dom); - } elseif ($this->dom instanceof \DOMDocumentFragment) { - // Document fragments are a special case. Only the children need to - // be serialized. - if ($this->dom->hasChildNodes()) { - $this->children($this->dom->childNodes); - } - } // If NodeList, loop - elseif ($this->dom instanceof \DOMNodeList) { - // If this is a NodeList of DOMDocuments this will not work. - $this->children($this->dom); - } // Else assume this is a DOMNode-like datastructure. - else { - $this->node($this->dom); - } - - return $this->out; - } - - /** - * Process a node in the DOM. - * - * @param mixed $node A node implementing \DOMNode. - */ - public function node($node) - { - // A listing of types is at http://php.net/manual/en/dom.constants.php - switch ($node->nodeType) { - case XML_ELEMENT_NODE: - $this->rules->element($node); - break; - case XML_TEXT_NODE: - $this->rules->text($node); - break; - case XML_CDATA_SECTION_NODE: - $this->rules->cdata($node); - break; - case XML_PI_NODE: - $this->rules->processorInstruction($node); - break; - case XML_COMMENT_NODE: - $this->rules->comment($node); - break; - // Currently we don't support embedding DTDs. - default: - //print ''; - break; - } - } - - /** - * Walk through all the nodes on a node list. - * - * @param \DOMNodeList $nl A list of child elements to walk through. - */ - public function children($nl) - { - foreach ($nl as $node) { - $this->node($node); - } - } - - /** - * Is an element local? - * - * @param mixed $ele An element that implement \DOMNode. - * - * @return bool true if local and false otherwise. - */ - public function isLocalElement($ele) - { - $uri = $ele->namespaceURI; - if (empty($uri)) { - return false; - } - - return isset(static::$local_ns[$uri]); - } -} diff --git a/vendor/monolog/monolog/CHANGELOG.md b/vendor/monolog/monolog/CHANGELOG.md deleted file mode 100644 index ec35556..0000000 --- a/vendor/monolog/monolog/CHANGELOG.md +++ /dev/null @@ -1,757 +0,0 @@ -### 3.7.0 (2024-06-28) - - * Added `NormalizerFormatter->setBasePath(...)` (and `JsonFormatter` by extension) that allows removing the project's path from the stack trace output (47e301d3e) - * Fixed JsonFormatter handling of incomplete classes (#1834) - * Fixed private error handlers causing problems with custom StreamHandler implementations (#1866) - -### 3.6.0 (2024-04-12) - - * Added `LineFormatter->setBasePath(...)` that allows removing the project's path from the stack trace output (#1873) - * Added `$includeExtra` option in `PsrHandler` to also use extra data to replace placeholder values in the message (#1852) - * Added ability to customize what is a duplicated message by extending the `DeduplicationHandler` (#1879) - * Added handling for using `GelfMessageFormatter` together with the `AmqpHandler` (#1869) - * Added ability to extend `GoogleCloudLoggingFormatter` (#1859) - * Fixed `__toString` failures in context data crashing the normalization process (#1868) - * Fixed PHP 8.4 deprecation warnings (#1874) - -### 3.5.0 (2023-10-27) - - * Added ability to indent stack traces in LineFormatter via e.g. `indentStacktraces(' ')` (#1835) - * Added ability to configure a max level name length in LineFormatter via e.g. `setMaxLevelNameLength(3)` (#1850) - * Added support for indexed arrays (i.e. `[]` and not `{}` arrays once json serialized) containing inline linebreaks in LineFormatter (#1818) - * Added `WithMonologChannel` attribute for integrators to use to configure autowiring (#1847) - * Fixed log record `extra` data leaking between handlers that have handler-specific processors set (#1819) - * Fixed LogglyHandler issue with record level filtering (#1841) - * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804) - * Fixed bug where the previous error handler would not be restored in some cases where StreamHandler fails (#1815) - * Fixed normalization error when normalizing incomplete classes (#1833) - -### 3.4.0 (2023-06-21) - - * Added `LoadAverageProcessor` to track one of the 1, 5 or 15min load averages (#1803) - * Added support for priority to the `AsMonologProcessor` attribute (#1797) - * Added `TelegramBotHandler` `topic`/`message_thread_id` support (#1802) - * Fixed `FingersCrossedHandler` passthruLevel checking (#1801) - * Fixed support of yearly and monthly rotation log file to rotate only once a month/year (#1805) - * Fixed `TestHandler` method docs (#1794) - * Fixed handling of falsey `display_errors` string values (#1804) - -### 3.3.1 (2023-02-06) - - * Fixed Logger not being serializable anymore (#1792) - -### 3.3.0 (2023-02-06) - - * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748) - * Added `ClosureContextProcessor` to allow delaying the creation of context data by setting a Closure in context which is called when the log record is used (#1745) - * Added an ElasticsearchHandler option to set the `op_type` to `create` instead of the default `index` (#1766) - * Added support for enum context values in PsrLogMessageProcessor (#1773) - * Added graylog2/gelf-php 2.x support (#1747) - * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739) - * Fixed GitProcessor not filtering correctly based on Level (#1749) - * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791) - * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758) - * Fixed infinite loop detection within Fibers (#1753) - * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781) - -### 3.2.0 (2022-07-24) - - * Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734) - * Marked `Logger` `@final` as it should not be extended, prefer composition or talk to us if you are missing something - * Added RFC 5424 level (`7` to `0`) support to `Logger::log` and `Logger::addRecord` to increase interoperability (#1723) - * Added `SyslogFormatter` to output syslog-like files which can be consumed by tools like [lnav](https://lnav.org/) (#1689) - * Added support for `__toString` for objects which are not json serializable in `JsonFormatter` (#1733) - * Added `GoogleCloudLoggingFormatter` (#1719) - * Added support for Predis 2.x (#1732) - * Added `AmqpHandler->setExtraAttributes` to allow configuring attributes when using an AMQPExchange (#1724) - * Fixed serialization/unserialization of handlers to make sure private properties are included (#1727) - * Fixed allowInlineLineBreaks in LineFormatter causing issues with windows paths containing `\n` or `\r` sequences (#1720) - * Fixed max normalization depth not being taken into account when formatting exceptions with a deep chain of previous exceptions (#1726) - * Fixed PHP 8.2 deprecation warnings (#1722) - * Fixed rare race condition or filesystem issue where StreamHandler is unable to create the directory the log should go into yet it exists already (#1678) - -### 3.1.0 (2022-06-09) - - * Added `$datetime` parameter to `Logger::addRecord` as low level API to allow logging into the past or future (#1682) - * Added `Logger::useLoggingLoopDetection` to allow disabling cyclic logging detection in concurrent frameworks (#1681) - * Fixed handling of fatal errors if callPrevious is disabled in ErrorHandler (#1670) - * Fixed interop issue by removing the need for a return type in ProcessorInterface (#1680) - * Marked the reusable `Monolog\Test\TestCase` class as `@internal` to make sure PHPStorm does not show it above PHPUnit, you may still use it to test your own handlers/etc though (#1677) - * Fixed RotatingFileHandler issue when the date format contained slashes (#1671) - -### 3.0.0 (2022-05-10) - -Changes from RC1 - -- The `Monolog\LevelName` enum does not exist anymore, use `Monolog\Level->getName()` instead. - -### 3.0.0-RC1 (2022-05-08) - -This is mostly a cleanup release offering stronger type guarantees for integrators with the -array->object/enum changes, but there is no big new feature for end users. - -See [UPGRADE notes](UPGRADE.md#300) for details on all breaking changes especially if you are extending/implementing Monolog classes/interfaces. - -Noteworthy BC Breaks: - -- The minimum supported PHP version is now `8.1.0`. -- Log records have been converted from an array to a [`Monolog\LogRecord` object](src/Monolog/LogRecord.php) - with public (and mostly readonly) properties. e.g. instead of doing - `$record['context']` use `$record->context`. - In formatters or handlers if you rather need an array to work with you can use `$record->toArray()` - to get back a Monolog 1/2 style record array. This will contain the enum values instead of enum cases - in the `level` and `level_name` keys to be more backwards compatible and use simpler data types. -- `FormatterInterface`, `HandlerInterface`, `ProcessorInterface`, etc. changed to contain `LogRecord $record` - instead of `array $record` parameter types. If you want to support multiple Monolog versions this should - be possible by type-hinting nothing, or `array|LogRecord` if you support PHP 8.0+. You can then code - against the $record using Monolog 2 style as LogRecord implements ArrayAccess for BC. - The interfaces do not require a `LogRecord` return type even where it would be applicable, but if you only - support Monolog 3 in integration code I would recommend you use `LogRecord` return types wherever fitting - to ensure forward compatibility as it may be added in Monolog 4. -- Log levels are now enums [`Monolog\Level`](src/Monolog/Level.php) and [`Monolog\LevelName`](src/Monolog/LevelName.php) -- Removed deprecated SwiftMailerHandler, migrate to SymfonyMailerHandler instead. -- `ResettableInterface::reset()` now requires a void return type. -- All properties have had types added, which may require you to do so as well if you extended - a Monolog class and declared the same property. - -New deprecations: - -- `Logger::DEBUG`, `Logger::ERROR`, etc. are now deprecated in favor of the `Monolog\Level` enum. - e.g. instead of `Logger::WARNING` use `Level::Warning` if you need to pass the enum case - to Monolog or one of its handlers, or `Level::Warning->value` if you need the integer - value equal to what `Logger::WARNING` was giving you. -- `Logger::getLevelName()` is now deprecated. - -### 2.9.3 (2024-04-12) - - * Fixed PHP 8.4 deprecation warnings (#1874) - -### 2.9.2 (2023-10-27) - - * Fixed display_errors parsing in ErrorHandler which did not support string values (#1804) - * Fixed bug where the previous error handler would not be restored in some cases where StreamHandler fails (#1815) - * Fixed normalization error when normalizing incomplete classes (#1833) - -### 2.9.1 (2023-02-06) - - * Fixed Logger not being serializable anymore (#1792) - -### 2.9.0 (2023-02-05) - - * Deprecated FlowdockHandler & Formatter as the flowdock service was shutdown (#1748) - * Added support for enum context values in PsrLogMessageProcessor (#1773) - * Added graylog2/gelf-php 2.x support (#1747) - * Improved `BrowserConsoleHandler` logging to use more appropriate methods than just console.log in the browser (#1739) - * Fixed `WhatFailureGroupHandler` not catching errors happening inside `close()` (#1791) - * Fixed datetime field in `GoogleCloudLoggingFormatter` (#1758) - * Fixed infinite loop detection within Fibers (#1753) - * Fixed `AmqpHandler->setExtraAttributes` not working with buffering handler wrappers (#1781) - -### 2.8.0 (2022-07-24) - - * Deprecated `CubeHandler` and `PHPConsoleHandler` as both projects are abandoned and those should not be used anymore (#1734) - * Added RFC 5424 level (`7` to `0`) support to `Logger::log` and `Logger::addRecord` to increase interoperability (#1723) - * Added support for `__toString` for objects which are not json serializable in `JsonFormatter` (#1733) - * Added `GoogleCloudLoggingFormatter` (#1719) - * Added support for Predis 2.x (#1732) - * Added `AmqpHandler->setExtraAttributes` to allow configuring attributes when using an AMQPExchange (#1724) - * Fixed serialization/unserialization of handlers to make sure private properties are included (#1727) - * Fixed allowInlineLineBreaks in LineFormatter causing issues with windows paths containing `\n` or `\r` sequences (#1720) - * Fixed max normalization depth not being taken into account when formatting exceptions with a deep chain of previous exceptions (#1726) - * Fixed PHP 8.2 deprecation warnings (#1722) - * Fixed rare race condition or filesystem issue where StreamHandler is unable to create the directory the log should go into yet it exists already (#1678) - -### 2.7.0 (2022-06-09) - - * Added `$datetime` parameter to `Logger::addRecord` as low level API to allow logging into the past or future (#1682) - * Added `Logger::useLoggingLoopDetection` to allow disabling cyclic logging detection in concurrent frameworks (#1681) - * Fixed handling of fatal errors if callPrevious is disabled in ErrorHandler (#1670) - * Marked the reusable `Monolog\Test\TestCase` class as `@internal` to make sure PHPStorm does not show it above PHPUnit, you may still use it to test your own handlers/etc though (#1677) - * Fixed RotatingFileHandler issue when the date format contained slashes (#1671) - -### 2.6.0 (2022-05-10) - - * Deprecated `SwiftMailerHandler`, use `SymfonyMailerHandler` instead - * Added `SymfonyMailerHandler` (#1663) - * Added ElasticSearch 8.x support to the ElasticsearchHandler (#1662) - * Added a way to filter/modify stack traces in LineFormatter (#1665) - * Fixed UdpSocket not being able to reopen/reconnect after close() - * Fixed infinite loops if a Handler is triggering logging while handling log records - -### 2.5.0 (2022-04-08) - - * Added `callType` to IntrospectionProcessor (#1612) - * Fixed AsMonologProcessor syntax to be compatible with PHP 7.2 (#1651) - -### 2.4.0 (2022-03-14) - - * Added [`Monolog\LogRecord`](src/Monolog/LogRecord.php) interface that can be used to type-hint records like `array|\Monolog\LogRecord $record` to be forward compatible with the upcoming Monolog 3 changes - * Added `includeStacktraces` constructor params to LineFormatter & JsonFormatter (#1603) - * Added `persistent`, `timeout`, `writingTimeout`, `connectionTimeout`, `chunkSize` constructor params to SocketHandler and derivatives (#1600) - * Added `AsMonologProcessor` PHP attribute which can help autowiring / autoconfiguration of processors if frameworks / integrations decide to make use of it. This is useless when used purely with Monolog (#1637) - * Added support for keeping native BSON types as is in MongoDBFormatter (#1620) - * Added support for a `user_agent` key in WebProcessor, disabled by default but you can use it by configuring the $extraFields you want (#1613) - * Added support for username/userIcon in SlackWebhookHandler (#1617) - * Added extension points to BrowserConsoleHandler (#1593) - * Added record message/context/extra info to exceptions thrown when a StreamHandler cannot open its stream to avoid completely losing the data logged (#1630) - * Fixed error handler signature to accept a null $context which happens with internal PHP errors (#1614) - * Fixed a few setter methods not returning `self` (#1609) - * Fixed handling of records going over the max Telegram message length (#1616) - -### 2.3.5 (2021-10-01) - - * Fixed regression in StreamHandler since 2.3.3 on systems with the memory_limit set to >=20GB (#1592) - -### 2.3.4 (2021-09-15) - - * Fixed support for psr/log 3.x (#1589) - -### 2.3.3 (2021-09-14) - - * Fixed memory usage when using StreamHandler and calling stream_get_contents on the resource you passed to it (#1578, #1577) - * Fixed support for psr/log 2.x (#1587) - * Fixed some type annotations - -### 2.3.2 (2021-07-23) - - * Fixed compatibility with PHP 7.2 - 7.4 when experiencing PCRE errors (#1568) - -### 2.3.1 (2021-07-14) - - * Fixed Utils::getClass handling of anonymous classes not being fully compatible with PHP 8 (#1563) - * Fixed some `@inheritDoc` annotations having the wrong case - -### 2.3.0 (2021-07-05) - - * Added a ton of PHPStan type annotations as well as type aliases on Monolog\Logger for Record, Level and LevelName that you can import (#1557) - * Added ability to customize date format when using JsonFormatter (#1561) - * Fixed FilterHandler not calling reset on its internal handler when reset() is called on it (#1531) - * Fixed SyslogUdpHandler not setting the timezone correctly on DateTimeImmutable instances (#1540) - * Fixed StreamHandler thread safety - chunk size set to 2GB now to avoid interlacing when doing concurrent writes (#1553) - -### 2.2.0 (2020-12-14) - - * Added JSON_PARTIAL_OUTPUT_ON_ERROR to default json encoding flags, to avoid dropping entire context data or even records due to an invalid subset of it somewhere - * Added setDateFormat to NormalizerFormatter (and Line/Json formatters by extension) to allow changing this after object creation - * Added RedisPubSubHandler to log records to a Redis channel using PUBLISH - * Added support for Elastica 7, and deprecated the $type argument of ElasticaFormatter which is not in use anymore as of Elastica 7 - * Added support for millisecond write timeouts in SocketHandler, you can now pass floats to setWritingTimeout, e.g. 0.2 is 200ms - * Added support for unix sockets in SyslogUdpHandler (set $port to 0 to make the $host a unix socket) - * Added handleBatch support for TelegramBotHandler - * Added RFC5424e extended date format including milliseconds to SyslogUdpHandler - * Added support for configuring handlers with numeric level values in strings (coming from e.g. env vars) - * Fixed Wildfire/FirePHP/ChromePHP handling of unicode characters - * Fixed PHP 8 issues in SyslogUdpHandler - * Fixed internal type error when mbstring is missing - -### 2.1.1 (2020-07-23) - - * Fixed removing of json encoding options - * Fixed type hint of $level not accepting strings in SendGridHandler and OverflowHandler - * Fixed SwiftMailerHandler not accepting email templates with an empty subject - * Fixed array access on null in RavenHandler - * Fixed unique_id in WebProcessor not being disableable - -### 2.1.0 (2020-05-22) - - * Added `JSON_INVALID_UTF8_SUBSTITUTE` to default json flags, so that invalid UTF8 characters now get converted to [�](https://en.wikipedia.org/wiki/Specials_(Unicode_block)#Replacement_character) instead of being converted from ISO-8859-15 to UTF8 as it was before, which was hardly a comprehensive solution - * Added `$ignoreEmptyContextAndExtra` option to JsonFormatter to skip empty context/extra entirely from the output - * Added `$parseMode`, `$disableWebPagePreview` and `$disableNotification` options to TelegramBotHandler - * Added tentative support for PHP 8 - * NormalizerFormatter::addJsonEncodeOption and removeJsonEncodeOption are now public to allow modifying default json flags - * Fixed GitProcessor type error when there is no git repo present - * Fixed normalization of SoapFault objects containing deeply nested objects as "detail" - * Fixed support for relative paths in RotatingFileHandler - -### 2.0.2 (2019-12-20) - - * Fixed ElasticsearchHandler swallowing exceptions details when failing to index log records - * Fixed normalization of SoapFault objects containing non-strings as "detail" in LineFormatter - * Fixed formatting of resources in JsonFormatter - * Fixed RedisHandler failing to use MULTI properly when passed a proxied Redis instance (e.g. in Symfony with lazy services) - * Fixed FilterHandler triggering a notice when handleBatch was filtering all records passed to it - * Fixed Turkish locale messing up the conversion of level names to their constant values - -### 2.0.1 (2019-11-13) - - * Fixed normalization of Traversables to avoid traversing them as not all of them are rewindable - * Fixed setFormatter/getFormatter to forward to the nested handler in FilterHandler, FingersCrossedHandler, BufferHandler, OverflowHandler and SamplingHandler - * Fixed BrowserConsoleHandler formatting when using multiple styles - * Fixed normalization of exception codes to be always integers even for PDOException which have them as numeric strings - * Fixed normalization of SoapFault objects containing non-strings as "detail" - * Fixed json encoding across all handlers to always attempt recovery of non-UTF-8 strings instead of failing the whole encoding - * Fixed ChromePHPHandler to avoid sending more data than latest Chrome versions allow in headers (4KB down from 256KB). - * Fixed type error in BrowserConsoleHandler when the context array of log records was not associative. - -### 2.0.0 (2019-08-30) - - * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release - * BC Break: Logger methods log/debug/info/notice/warning/error/critical/alert/emergency now have explicit void return types - * Added FallbackGroupHandler which works like the WhatFailureGroupHandler but stops dispatching log records as soon as one handler accepted it - * Fixed support for UTF-8 when cutting strings to avoid cutting a multibyte-character in half - * Fixed normalizers handling of exception backtraces to avoid serializing arguments in some cases - * Fixed date timezone handling in SyslogUdpHandler - -### 2.0.0-beta2 (2019-07-06) - - * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release - * BC Break: PHP 7.2 is now the minimum required PHP version. - * BC Break: Removed SlackbotHandler, RavenHandler and HipChatHandler, see [UPGRADE.md](UPGRADE.md) for details - * Added OverflowHandler which will only flush log records to its nested handler when reaching a certain amount of logs (i.e. only pass through when things go really bad) - * Added TelegramBotHandler to log records to a [Telegram](https://core.telegram.org/bots/api) bot account - * Added support for JsonSerializable when normalizing exceptions - * Added support for RFC3164 (outdated BSD syslog protocol) to SyslogUdpHandler - * Added SoapFault details to formatted exceptions - * Fixed DeduplicationHandler silently failing to start when file could not be opened - * Fixed issue in GroupHandler and WhatFailureGroupHandler where setting multiple processors would duplicate records - * Fixed GelfFormatter losing some data when one attachment was too long - * Fixed issue in SignalHandler restarting syscalls functionality - * Improved performance of LogglyHandler when sending multiple logs in a single request - -### 2.0.0-beta1 (2018-12-08) - - * BC Break: This is a major release, see [UPGRADE.md](UPGRADE.md) for details if you are coming from a 1.x release - * BC Break: PHP 7.1 is now the minimum required PHP version. - * BC Break: Quite a few interface changes, only relevant if you implemented your own handlers/processors/formatters - * BC Break: Removed non-PSR-3 methods to add records, all the `add*` (e.g. `addWarning`) methods as well as `emerg`, `crit`, `err` and `warn` - * BC Break: The record timezone is now set per Logger instance and not statically anymore - * BC Break: There is no more default handler configured on empty Logger instances - * BC Break: ElasticSearchHandler renamed to ElasticaHandler - * BC Break: Various handler-specific breaks, see [UPGRADE.md](UPGRADE.md) for details - * Added scalar type hints and return hints in all the places it was possible. Switched strict_types on for more reliability. - * Added DateTimeImmutable support, all record datetime are now immutable, and will toString/json serialize with the correct date format, including microseconds (unless disabled) - * Added timezone and microseconds to the default date format - * Added SendGridHandler to use the SendGrid API to send emails - * Added LogmaticHandler to use the Logmatic.io API to store log records - * Added SqsHandler to send log records to an AWS SQS queue - * Added ElasticsearchHandler to send records via the official ES library. Elastica users should now use ElasticaHandler instead of ElasticSearchHandler - * Added NoopHandler which is similar to the NullHandle but does not prevent the bubbling of log records to handlers further down the configuration, useful for temporarily disabling a handler in configuration files - * Added ProcessHandler to write log output to the STDIN of a given process - * Added HostnameProcessor that adds the machine's hostname to log records - * Added a `$dateFormat` option to the PsrLogMessageProcessor which lets you format DateTime instances nicely - * Added support for the PHP 7.x `mongodb` extension in the MongoDBHandler - * Fixed many minor issues in various handlers, and probably added a few regressions too - -### 1.26.1 (2021-05-28) - - * Fixed PHP 8.1 deprecation warning - -### 1.26.0 (2020-12-14) - - * Added $dateFormat and $removeUsedContextFields arguments to PsrLogMessageProcessor (backport from 2.x) - -### 1.25.5 (2020-07-23) - - * Fixed array access on null in RavenHandler - * Fixed unique_id in WebProcessor not being disableable - -### 1.25.4 (2020-05-22) - - * Fixed GitProcessor type error when there is no git repo present - * Fixed normalization of SoapFault objects containing deeply nested objects as "detail" - * Fixed support for relative paths in RotatingFileHandler - -### 1.25.3 (2019-12-20) - - * Fixed formatting of resources in JsonFormatter - * Fixed RedisHandler failing to use MULTI properly when passed a proxied Redis instance (e.g. in Symfony with lazy services) - * Fixed FilterHandler triggering a notice when handleBatch was filtering all records passed to it - * Fixed Turkish locale messing up the conversion of level names to their constant values - -### 1.25.2 (2019-11-13) - - * Fixed normalization of Traversables to avoid traversing them as not all of them are rewindable - * Fixed setFormatter/getFormatter to forward to the nested handler in FilterHandler, FingersCrossedHandler, BufferHandler and SamplingHandler - * Fixed BrowserConsoleHandler formatting when using multiple styles - * Fixed normalization of exception codes to be always integers even for PDOException which have them as numeric strings - * Fixed normalization of SoapFault objects containing non-strings as "detail" - * Fixed json encoding across all handlers to always attempt recovery of non-UTF-8 strings instead of failing the whole encoding - -### 1.25.1 (2019-09-06) - - * Fixed forward-compatible interfaces to be compatible with Monolog 1.x too. - -### 1.25.0 (2019-09-06) - - * Deprecated SlackbotHandler, use SlackWebhookHandler or SlackHandler instead - * Deprecated RavenHandler, use sentry/sentry 2.x and their Sentry\Monolog\Handler instead - * Deprecated HipChatHandler, migrate to Slack and use SlackWebhookHandler or SlackHandler instead - * Added forward-compatible interfaces and traits FormattableHandlerInterface, FormattableHandlerTrait, ProcessableHandlerInterface, ProcessableHandlerTrait. If you use modern PHP and want to make code compatible with Monolog 1 and 2 this can help. You will have to require at least Monolog 1.25 though. - * Added support for RFC3164 (outdated BSD syslog protocol) to SyslogUdpHandler - * Fixed issue in GroupHandler and WhatFailureGroupHandler where setting multiple processors would duplicate records - * Fixed issue in SignalHandler restarting syscalls functionality - * Fixed normalizers handling of exception backtraces to avoid serializing arguments in some cases - * Fixed ZendMonitorHandler to work with the latest Zend Server versions - * Fixed ChromePHPHandler to avoid sending more data than latest Chrome versions allow in headers (4KB down from 256KB). - -### 1.24.0 (2018-11-05) - - * BC Notice: If you are extending any of the Monolog's Formatters' `normalize` method, make sure you add the new `$depth = 0` argument to your function signature to avoid strict PHP warnings. - * Added a `ResettableInterface` in order to reset/reset/clear/flush handlers and processors - * Added a `ProcessorInterface` as an optional way to label a class as being a processor (mostly useful for autowiring dependency containers) - * Added a way to log signals being received using Monolog\SignalHandler - * Added ability to customize error handling at the Logger level using Logger::setExceptionHandler - * Added InsightOpsHandler to migrate users of the LogEntriesHandler - * Added protection to NormalizerFormatter against circular and very deep structures, it now stops normalizing at a depth of 9 - * Added capture of stack traces to ErrorHandler when logging PHP errors - * Added RavenHandler support for a `contexts` context or extra key to forward that to Sentry's contexts - * Added forwarding of context info to FluentdFormatter - * Added SocketHandler::setChunkSize to override the default chunk size in case you must send large log lines to rsyslog for example - * Added ability to extend/override BrowserConsoleHandler - * Added SlackWebhookHandler::getWebhookUrl and SlackHandler::getToken to enable class extensibility - * Added SwiftMailerHandler::getSubjectFormatter to enable class extensibility - * Dropped official support for HHVM in test builds - * Fixed normalization of exception traces when call_user_func is used to avoid serializing objects and the data they contain - * Fixed naming of fields in Slack handler, all field names are now capitalized in all cases - * Fixed HipChatHandler bug where slack dropped messages randomly - * Fixed normalization of objects in Slack handlers - * Fixed support for PHP7's Throwable in NewRelicHandler - * Fixed race bug when StreamHandler sometimes incorrectly reported it failed to create a directory - * Fixed table row styling issues in HtmlFormatter - * Fixed RavenHandler dropping the message when logging exception - * Fixed WhatFailureGroupHandler skipping processors when using handleBatch - and implement it where possible - * Fixed display of anonymous class names - -### 1.23.0 (2017-06-19) - - * Improved SyslogUdpHandler's support for RFC5424 and added optional `$ident` argument - * Fixed GelfHandler truncation to be per field and not per message - * Fixed compatibility issue with PHP <5.3.6 - * Fixed support for headless Chrome in ChromePHPHandler - * Fixed support for latest Aws SDK in DynamoDbHandler - * Fixed support for SwiftMailer 6.0+ in SwiftMailerHandler - -### 1.22.1 (2017-03-13) - - * Fixed lots of minor issues in the new Slack integrations - * Fixed support for allowInlineLineBreaks in LineFormatter when formatting exception backtraces - -### 1.22.0 (2016-11-26) - - * Added SlackbotHandler and SlackWebhookHandler to set up Slack integration more easily - * Added MercurialProcessor to add mercurial revision and branch names to log records - * Added support for AWS SDK v3 in DynamoDbHandler - * Fixed fatal errors occurring when normalizing generators that have been fully consumed - * Fixed RollbarHandler to include a level (rollbar level), monolog_level (original name), channel and datetime (unix) - * Fixed RollbarHandler not flushing records automatically, calling close() explicitly is not necessary anymore - * Fixed SyslogUdpHandler to avoid sending empty frames - * Fixed a few PHP 7.0 and 7.1 compatibility issues - -### 1.21.0 (2016-07-29) - - * Break: Reverted the addition of $context when the ErrorHandler handles regular php errors from 1.20.0 as it was causing issues - * Added support for more formats in RotatingFileHandler::setFilenameFormat as long as they have Y, m and d in order - * Added ability to format the main line of text the SlackHandler sends by explicitly setting a formatter on the handler - * Added information about SoapFault instances in NormalizerFormatter - * Added $handleOnlyReportedErrors option on ErrorHandler::registerErrorHandler (default true) to allow logging of all errors no matter the error_reporting level - -### 1.20.0 (2016-07-02) - - * Added FingersCrossedHandler::activate() to manually trigger the handler regardless of the activation policy - * Added StreamHandler::getUrl to retrieve the stream's URL - * Added ability to override addRow/addTitle in HtmlFormatter - * Added the $context to context information when the ErrorHandler handles a regular php error - * Deprecated RotatingFileHandler::setFilenameFormat to only support 3 formats: Y, Y-m and Y-m-d - * Fixed WhatFailureGroupHandler to work with PHP7 throwables - * Fixed a few minor bugs - -### 1.19.0 (2016-04-12) - - * Break: StreamHandler will not close streams automatically that it does not own. If you pass in a stream (not a path/url), then it will not close it for you. You can retrieve those using getStream() if needed - * Added DeduplicationHandler to remove duplicate records from notifications across multiple requests, useful for email or other notifications on errors - * Added ability to use `%message%` and other LineFormatter replacements in the subject line of emails sent with NativeMailHandler and SwiftMailerHandler - * Fixed HipChatHandler handling of long messages - -### 1.18.2 (2016-04-02) - - * Fixed ElasticaFormatter to use more precise dates - * Fixed GelfMessageFormatter sending too long messages - -### 1.18.1 (2016-03-13) - - * Fixed SlackHandler bug where slack dropped messages randomly - * Fixed RedisHandler issue when using with the PHPRedis extension - * Fixed AmqpHandler content-type being incorrectly set when using with the AMQP extension - * Fixed BrowserConsoleHandler regression - -### 1.18.0 (2016-03-01) - - * Added optional reduction of timestamp precision via `Logger->useMicrosecondTimestamps(false)`, disabling it gets you a bit of performance boost but reduces the precision to the second instead of microsecond - * Added possibility to skip some extra stack frames in IntrospectionProcessor if you have some library wrapping Monolog that is always adding frames - * Added `Logger->withName` to clone a logger (keeping all handlers) with a new name - * Added FluentdFormatter for the Fluentd unix socket protocol - * Added HandlerWrapper base class to ease the creation of handler wrappers, just extend it and override as needed - * Added support for replacing context sub-keys using `%context.*%` in LineFormatter - * Added support for `payload` context value in RollbarHandler - * Added setRelease to RavenHandler to describe the application version, sent with every log - * Added support for `fingerprint` context value in RavenHandler - * Fixed JSON encoding errors that would gobble up the whole log record, we now handle those more gracefully by dropping chars as needed - * Fixed write timeouts in SocketHandler and derivatives, set to 10sec by default, lower it with `setWritingTimeout()` - * Fixed PHP7 compatibility with regard to Exception/Throwable handling in a few places - -### 1.17.2 (2015-10-14) - - * Fixed ErrorHandler compatibility with non-Monolog PSR-3 loggers - * Fixed SlackHandler handling to use slack functionalities better - * Fixed SwiftMailerHandler bug when sending multiple emails they all had the same id - * Fixed 5.3 compatibility regression - -### 1.17.1 (2015-08-31) - - * Fixed RollbarHandler triggering PHP notices - -### 1.17.0 (2015-08-30) - - * Added support for `checksum` and `release` context/extra values in RavenHandler - * Added better support for exceptions in RollbarHandler - * Added UidProcessor::getUid - * Added support for showing the resource type in NormalizedFormatter - * Fixed IntrospectionProcessor triggering PHP notices - -### 1.16.0 (2015-08-09) - - * Added IFTTTHandler to notify ifttt.com triggers - * Added Logger::setHandlers() to allow setting/replacing all handlers - * Added $capSize in RedisHandler to cap the log size - * Fixed StreamHandler creation of directory to only trigger when the first log write happens - * Fixed bug in the handling of curl failures - * Fixed duplicate logging of fatal errors when both error and fatal error handlers are registered in monolog's ErrorHandler - * Fixed missing fatal errors records with handlers that need to be closed to flush log records - * Fixed TagProcessor::addTags support for associative arrays - -### 1.15.0 (2015-07-12) - - * Added addTags and setTags methods to change a TagProcessor - * Added automatic creation of directories if they are missing for a StreamHandler to open a log file - * Added retry functionality to Loggly, Cube and Mandrill handlers so they retry up to 5 times in case of network failure - * Fixed process exit code being incorrectly reset to 0 if ErrorHandler::registerExceptionHandler was used - * Fixed HTML/JS escaping in BrowserConsoleHandler - * Fixed JSON encoding errors being silently suppressed (PHP 5.5+ only) - -### 1.14.0 (2015-06-19) - - * Added PHPConsoleHandler to send record to Chrome's PHP Console extension and library - * Added support for objects implementing __toString in the NormalizerFormatter - * Added support for HipChat's v2 API in HipChatHandler - * Added Logger::setTimezone() to initialize the timezone monolog should use in case date.timezone isn't correct for your app - * Added an option to send formatted message instead of the raw record on PushoverHandler via ->useFormattedMessage(true) - * Fixed curl errors being silently suppressed - -### 1.13.1 (2015-03-09) - - * Fixed regression in HipChat requiring a new token to be created - -### 1.13.0 (2015-03-05) - - * Added Registry::hasLogger to check for the presence of a logger instance - * Added context.user support to RavenHandler - * Added HipChat API v2 support in the HipChatHandler - * Added NativeMailerHandler::addParameter to pass params to the mail() process - * Added context data to SlackHandler when $includeContextAndExtra is true - * Added ability to customize the Swift_Message per-email in SwiftMailerHandler - * Fixed SwiftMailerHandler to lazily create message instances if a callback is provided - * Fixed serialization of INF and NaN values in Normalizer and LineFormatter - -### 1.12.0 (2014-12-29) - - * Break: HandlerInterface::isHandling now receives a partial record containing only a level key. This was always the intent and does not break any Monolog handler but is strictly speaking a BC break and you should check if you relied on any other field in your own handlers. - * Added PsrHandler to forward records to another PSR-3 logger - * Added SamplingHandler to wrap around a handler and include only every Nth record - * Added MongoDBFormatter to support better storage with MongoDBHandler (it must be enabled manually for now) - * Added exception codes in the output of most formatters - * Added LineFormatter::includeStacktraces to enable exception stack traces in logs (uses more than one line) - * Added $useShortAttachment to SlackHandler to minify attachment size and $includeExtra to append extra data - * Added $host to HipChatHandler for users of private instances - * Added $transactionName to NewRelicHandler and support for a transaction_name context value - * Fixed MandrillHandler to avoid outputting API call responses - * Fixed some non-standard behaviors in SyslogUdpHandler - -### 1.11.0 (2014-09-30) - - * Break: The NewRelicHandler extra and context data are now prefixed with extra_ and context_ to avoid clashes. Watch out if you have scripts reading those from the API and rely on names - * Added WhatFailureGroupHandler to suppress any exception coming from the wrapped handlers and avoid chain failures if a logging service fails - * Added MandrillHandler to send emails via the Mandrillapp.com API - * Added SlackHandler to log records to a Slack.com account - * Added FleepHookHandler to log records to a Fleep.io account - * Added LogglyHandler::addTag to allow adding tags to an existing handler - * Added $ignoreEmptyContextAndExtra to LineFormatter to avoid empty [] at the end - * Added $useLocking to StreamHandler and RotatingFileHandler to enable flock() while writing - * Added support for PhpAmqpLib in the AmqpHandler - * Added FingersCrossedHandler::clear and BufferHandler::clear to reset them between batches in long running jobs - * Added support for adding extra fields from $_SERVER in the WebProcessor - * Fixed support for non-string values in PrsLogMessageProcessor - * Fixed SwiftMailer messages being sent with the wrong date in long running scripts - * Fixed minor PHP 5.6 compatibility issues - * Fixed BufferHandler::close being called twice - -### 1.10.0 (2014-06-04) - - * Added Logger::getHandlers() and Logger::getProcessors() methods - * Added $passthruLevel argument to FingersCrossedHandler to let it always pass some records through even if the trigger level is not reached - * Added support for extra data in NewRelicHandler - * Added $expandNewlines flag to the ErrorLogHandler to create multiple log entries when a message has multiple lines - -### 1.9.1 (2014-04-24) - - * Fixed regression in RotatingFileHandler file permissions - * Fixed initialization of the BufferHandler to make sure it gets flushed after receiving records - * Fixed ChromePHPHandler and FirePHPHandler's activation strategies to be more conservative - -### 1.9.0 (2014-04-20) - - * Added LogEntriesHandler to send logs to a LogEntries account - * Added $filePermissions to tweak file mode on StreamHandler and RotatingFileHandler - * Added $useFormatting flag to MemoryProcessor to make it send raw data in bytes - * Added support for table formatting in FirePHPHandler via the table context key - * Added a TagProcessor to add tags to records, and support for tags in RavenHandler - * Added $appendNewline flag to the JsonFormatter to enable using it when logging to files - * Added sound support to the PushoverHandler - * Fixed multi-threading support in StreamHandler - * Fixed empty headers issue when ChromePHPHandler received no records - * Fixed default format of the ErrorLogHandler - -### 1.8.0 (2014-03-23) - - * Break: the LineFormatter now strips newlines by default because this was a bug, set $allowInlineLineBreaks to true if you need them - * Added BrowserConsoleHandler to send logs to any browser's console via console.log() injection in the output - * Added FilterHandler to filter records and only allow those of a given list of levels through to the wrapped handler - * Added FlowdockHandler to send logs to a Flowdock account - * Added RollbarHandler to send logs to a Rollbar account - * Added HtmlFormatter to send prettier log emails with colors for each log level - * Added GitProcessor to add the current branch/commit to extra record data - * Added a Monolog\Registry class to allow easier global access to pre-configured loggers - * Added support for the new official graylog2/gelf-php lib for GelfHandler, upgrade if you can by replacing the mlehner/gelf-php requirement - * Added support for HHVM - * Added support for Loggly batch uploads - * Added support for tweaking the content type and encoding in NativeMailerHandler - * Added $skipClassesPartials to tweak the ignored classes in the IntrospectionProcessor - * Fixed batch request support in GelfHandler - -### 1.7.0 (2013-11-14) - - * Added ElasticSearchHandler to send logs to an Elastic Search server - * Added DynamoDbHandler and ScalarFormatter to send logs to Amazon's Dynamo DB - * Added SyslogUdpHandler to send logs to a remote syslogd server - * Added LogglyHandler to send logs to a Loggly account - * Added $level to IntrospectionProcessor so it only adds backtraces when needed - * Added $version to LogstashFormatter to allow using the new v1 Logstash format - * Added $appName to NewRelicHandler - * Added configuration of Pushover notification retries/expiry - * Added $maxColumnWidth to NativeMailerHandler to change the 70 chars default - * Added chainability to most setters for all handlers - * Fixed RavenHandler batch processing so it takes the message from the record with highest priority - * Fixed HipChatHandler batch processing so it sends all messages at once - * Fixed issues with eAccelerator - * Fixed and improved many small things - -### 1.6.0 (2013-07-29) - - * Added HipChatHandler to send logs to a HipChat chat room - * Added ErrorLogHandler to send logs to PHP's error_log function - * Added NewRelicHandler to send logs to NewRelic's service - * Added Monolog\ErrorHandler helper class to register a Logger as exception/error/fatal handler - * Added ChannelLevelActivationStrategy for the FingersCrossedHandler to customize levels by channel - * Added stack traces output when normalizing exceptions (json output & co) - * Added Monolog\Logger::API constant (currently 1) - * Added support for ChromePHP's v4.0 extension - * Added support for message priorities in PushoverHandler, see $highPriorityLevel and $emergencyLevel - * Added support for sending messages to multiple users at once with the PushoverHandler - * Fixed RavenHandler's support for batch sending of messages (when behind a Buffer or FingersCrossedHandler) - * Fixed normalization of Traversables with very large data sets, only the first 1000 items are shown now - * Fixed issue in RotatingFileHandler when an open_basedir restriction is active - * Fixed minor issues in RavenHandler and bumped the API to Raven 0.5.0 - * Fixed SyslogHandler issue when many were used concurrently with different facilities - -### 1.5.0 (2013-04-23) - - * Added ProcessIdProcessor to inject the PID in log records - * Added UidProcessor to inject a unique identifier to all log records of one request/run - * Added support for previous exceptions in the LineFormatter exception serialization - * Added Monolog\Logger::getLevels() to get all available levels - * Fixed ChromePHPHandler so it avoids sending headers larger than Chrome can handle - -### 1.4.1 (2013-04-01) - - * Fixed exception formatting in the LineFormatter to be more minimalistic - * Fixed RavenHandler's handling of context/extra data, requires Raven client >0.1.0 - * Fixed log rotation in RotatingFileHandler to work with long running scripts spanning multiple days - * Fixed WebProcessor array access so it checks for data presence - * Fixed Buffer, Group and FingersCrossed handlers to make use of their processors - -### 1.4.0 (2013-02-13) - - * Added RedisHandler to log to Redis via the Predis library or the phpredis extension - * Added ZendMonitorHandler to log to the Zend Server monitor - * Added the possibility to pass arrays of handlers and processors directly in the Logger constructor - * Added `$useSSL` option to the PushoverHandler which is enabled by default - * Fixed ChromePHPHandler and FirePHPHandler issue when multiple instances are used simultaneously - * Fixed header injection capability in the NativeMailHandler - -### 1.3.1 (2013-01-11) - - * Fixed LogstashFormatter to be usable with stream handlers - * Fixed GelfMessageFormatter levels on Windows - -### 1.3.0 (2013-01-08) - - * Added PSR-3 compliance, the `Monolog\Logger` class is now an instance of `Psr\Log\LoggerInterface` - * Added PsrLogMessageProcessor that you can selectively enable for full PSR-3 compliance - * Added LogstashFormatter (combine with SocketHandler or StreamHandler to send logs to Logstash) - * Added PushoverHandler to send mobile notifications - * Added CouchDBHandler and DoctrineCouchDBHandler - * Added RavenHandler to send data to Sentry servers - * Added support for the new MongoClient class in MongoDBHandler - * Added microsecond precision to log records' timestamps - * Added `$flushOnOverflow` param to BufferHandler to flush by batches instead of losing - the oldest entries - * Fixed normalization of objects with cyclic references - -### 1.2.1 (2012-08-29) - - * Added new $logopts arg to SyslogHandler to provide custom openlog options - * Fixed fatal error in SyslogHandler - -### 1.2.0 (2012-08-18) - - * Added AmqpHandler (for use with AMQP servers) - * Added CubeHandler - * Added NativeMailerHandler::addHeader() to send custom headers in mails - * Added the possibility to specify more than one recipient in NativeMailerHandler - * Added the possibility to specify float timeouts in SocketHandler - * Added NOTICE and EMERGENCY levels to conform with RFC 5424 - * Fixed the log records to use the php default timezone instead of UTC - * Fixed BufferHandler not being flushed properly on PHP fatal errors - * Fixed normalization of exotic resource types - * Fixed the default format of the SyslogHandler to avoid duplicating datetimes in syslog - -### 1.1.0 (2012-04-23) - - * Added Monolog\Logger::isHandling() to check if a handler will - handle the given log level - * Added ChromePHPHandler - * Added MongoDBHandler - * Added GelfHandler (for use with Graylog2 servers) - * Added SocketHandler (for use with syslog-ng for example) - * Added NormalizerFormatter - * Added the possibility to change the activation strategy of the FingersCrossedHandler - * Added possibility to show microseconds in logs - * Added `server` and `referer` to WebProcessor output - -### 1.0.2 (2011-10-24) - - * Fixed bug in IE with large response headers and FirePHPHandler - -### 1.0.1 (2011-08-25) - - * Added MemoryPeakUsageProcessor and MemoryUsageProcessor - * Added Monolog\Logger::getName() to get a logger's channel name - -### 1.0.0 (2011-07-06) - - * Added IntrospectionProcessor to get info from where the logger was called - * Fixed WebProcessor in CLI - -### 1.0.0-RC1 (2011-07-01) - - * Initial release diff --git a/vendor/monolog/monolog/README.md b/vendor/monolog/monolog/README.md deleted file mode 100644 index c54d83c..0000000 --- a/vendor/monolog/monolog/README.md +++ /dev/null @@ -1,136 +0,0 @@ -![Monolog](logo.jpg) - -# Monolog - Logging for PHP [![Continuous Integration](https://github.com/Seldaek/monolog/workflows/Continuous%20Integration/badge.svg?branch=main)](https://github.com/Seldaek/monolog/actions) - -[![Total Downloads](https://img.shields.io/packagist/dt/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog) -[![Latest Stable Version](https://img.shields.io/packagist/v/monolog/monolog.svg)](https://packagist.org/packages/monolog/monolog) - ->**Note** This is the **documentation for Monolog 3.x**, if you are using older releases ->see the documentation for [Monolog 2.x](https://github.com/Seldaek/monolog/blob/2.x/README.md) or [Monolog 1.x](https://github.com/Seldaek/monolog/blob/1.x/README.md) - -Monolog sends your logs to files, sockets, inboxes, databases and various -web services. See the complete list of handlers below. Special handlers -allow you to build advanced logging strategies. - -This library implements the [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) -interface that you can type-hint against in your own libraries to keep -a maximum of interoperability. You can also use it in your applications to -make sure you can always use another compatible logger at a later time. -As of 1.11.0 Monolog public APIs will also accept PSR-3 log levels. -Internally Monolog still uses its own level scheme since it predates PSR-3. - - - -## Installation - -Install the latest version with - -```bash -composer require monolog/monolog -``` - -## Basic Usage - -```php -pushHandler(new StreamHandler('path/to/your.log', Level::Warning)); - -// add records to the log -$log->warning('Foo'); -$log->error('Bar'); -``` - -## Documentation - -- [Usage Instructions](doc/01-usage.md) -- [Handlers, Formatters and Processors](doc/02-handlers-formatters-processors.md) -- [Utility Classes](doc/03-utilities.md) -- [Extending Monolog](doc/04-extending.md) -- [Log Record Structure](doc/message-structure.md) - -## Support Monolog Financially - -Get supported Monolog and help fund the project with the [Tidelift Subscription](https://tidelift.com/subscription/pkg/packagist-monolog-monolog?utm_source=packagist-monolog-monolog&utm_medium=referral&utm_campaign=enterprise) or via [GitHub sponsorship](https://github.com/sponsors/Seldaek). - -Tidelift delivers commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. - -## Third Party Packages - -Third party handlers, formatters and processors are -[listed in the wiki](https://github.com/Seldaek/monolog/wiki/Third-Party-Packages). You -can also add your own there if you publish one. - -## About - -### Requirements - -- Monolog `^3.0` works with PHP 8.1 or above. -- Monolog `^2.5` works with PHP 7.2 or above. -- Monolog `^1.25` works with PHP 5.3 up to 8.1, but is not very maintained anymore and will not receive PHP support fixes anymore. - -### Support - -Monolog 1.x support is somewhat limited at this point and only important fixes will be done. You should migrate to Monolog 2 or 3 where possible to benefit from all the latest features and fixes. - -### Submitting bugs and feature requests - -Bugs and feature request are tracked on [GitHub](https://github.com/Seldaek/monolog/issues) - -### Framework Integrations - -- Frameworks and libraries using [PSR-3](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-3-logger-interface.md) - can be used very easily with Monolog since it implements the interface. -- [Symfony](http://symfony.com) comes out of the box with Monolog. -- [Laravel](http://laravel.com/) comes out of the box with Monolog. -- [Lumen](http://lumen.laravel.com/) comes out of the box with Monolog. -- [PPI](https://github.com/ppi/framework) comes out of the box with Monolog. -- [CakePHP](http://cakephp.org/) is usable with Monolog via the [cakephp-monolog](https://github.com/jadb/cakephp-monolog) plugin. -- [Slim](http://www.slimframework.com/) is usable with Monolog via the [Slim-Monolog](https://github.com/Flynsarmy/Slim-Monolog) log writer. -- [XOOPS 2.6](http://xoops.org/) comes out of the box with Monolog. -- [Aura.Web_Project](https://github.com/auraphp/Aura.Web_Project) comes out of the box with Monolog. -- [Nette Framework](http://nette.org/en/) is usable with Monolog via the [contributte/monolog](https://github.com/contributte/monolog) or [orisai/nette-monolog](https://github.com/orisai/nette-monolog) extensions. -- [Proton Micro Framework](https://github.com/alexbilbie/Proton) comes out of the box with Monolog. -- [FuelPHP](http://fuelphp.com/) comes out of the box with Monolog. -- [Equip Framework](https://github.com/equip/framework) comes out of the box with Monolog. -- [Yii 2](http://www.yiiframework.com/) is usable with Monolog via the [yii2-monolog](https://github.com/merorafael/yii2-monolog) or [yii2-psr-log-target](https://github.com/samdark/yii2-psr-log-target) plugins. -- [Hawkbit Micro Framework](https://github.com/HawkBitPhp/hawkbit) comes out of the box with Monolog. -- [SilverStripe 4](https://www.silverstripe.org/) comes out of the box with Monolog. -- [Drupal](https://www.drupal.org/) is usable with Monolog via the [monolog](https://www.drupal.org/project/monolog) module. -- [Aimeos ecommerce framework](https://aimeos.org/) is usable with Monolog via the [ai-monolog](https://github.com/aimeos/ai-monolog) extension. -- [Magento](https://magento.com/) comes out of the box with Monolog. -- [Spiral Framework](https://spiral.dev) comes out of the box with Monolog bridge. - -### Author - -Jordi Boggiano - -
-See also the list of [contributors](https://github.com/Seldaek/monolog/contributors) who participated in this project. - -### License - -Monolog is licensed under the MIT License - see the [LICENSE](LICENSE) file for details - -### Acknowledgements - -This library is heavily inspired by Python's [Logbook](https://logbook.readthedocs.io/en/stable/) -library, although most concepts have been adjusted to fit to the PHP world. diff --git a/vendor/monolog/monolog/composer.json b/vendor/monolog/monolog/composer.json deleted file mode 100644 index 30a99d7..0000000 --- a/vendor/monolog/monolog/composer.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "name": "monolog/monolog", - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "keywords": ["log", "logging", "psr-3"], - "homepage": "https://github.com/Seldaek/monolog", - "type": "library", - "license": "MIT", - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" - }, - "require-dev": { - "ext-json": "*", - "aws/aws-sdk-php": "^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "graylog2/gelf-php": "^1.4.2 || ^2.0", - "guzzlehttp/guzzle": "^7.4.5", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^10.5.17", - "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-openssl": "Required to send log messages using SSL" - }, - "autoload": { - "psr-4": {"Monolog\\": "src/Monolog"} - }, - "autoload-dev": { - "psr-4": {"Monolog\\": "tests/Monolog"} - }, - "provide": { - "psr/log-implementation": "3.0.0" - }, - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "scripts": { - "test": "@php vendor/bin/phpunit", - "phpstan": "@php vendor/bin/phpstan analyse" - }, - "config": { - "lock": false, - "sort-packages": true, - "platform-check": false - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php b/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php deleted file mode 100644 index c519e05..0000000 --- a/vendor/monolog/monolog/src/Monolog/Attribute/AsMonologProcessor.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Attribute; - -/** - * A reusable attribute to help configure a class or a method as a processor. - * - * Using it offers no guarantee: it needs to be leveraged by a Monolog third-party consumer. - * - * Using it with the Monolog library only has no effect at all: processors should still be turned into a callable if - * needed and manually pushed to the loggers and to the processable handlers. - */ -#[\Attribute(\Attribute::TARGET_CLASS | \Attribute::TARGET_METHOD | \Attribute::IS_REPEATABLE)] -class AsMonologProcessor -{ - /** - * @param string|null $channel The logging channel the processor should be pushed to. - * @param string|null $handler The handler the processor should be pushed to. - * @param string|null $method The method that processes the records (if the attribute is used at the class level). - * @param int|null $priority The priority of the processor so the order can be determined. - */ - public function __construct( - public readonly ?string $channel = null, - public readonly ?string $handler = null, - public readonly ?string $method = null, - public readonly ?int $priority = null - ) { - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php b/vendor/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php deleted file mode 100644 index 862e05b..0000000 --- a/vendor/monolog/monolog/src/Monolog/Attribute/WithMonologChannel.php +++ /dev/null @@ -1,29 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Attribute; - -/** - * A reusable attribute to help configure a class as expecting a given logger channel. - * - * Using it offers no guarantee: it needs to be leveraged by a Monolog third-party consumer. - * - * Using it with the Monolog library only has no effect at all: wiring the logger instance into - * other classes is not managed by Monolog. - */ -#[\Attribute(\Attribute::TARGET_CLASS)] -final class WithMonologChannel -{ - public function __construct( - public readonly string $channel - ) { - } -} diff --git a/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php b/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php deleted file mode 100644 index 3d9477f..0000000 --- a/vendor/monolog/monolog/src/Monolog/DateTimeImmutable.php +++ /dev/null @@ -1,48 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -use DateTimeZone; - -/** - * Overrides default json encoding of date time objects - * - * @author Menno Holtkamp - * @author Jordi Boggiano - */ -class DateTimeImmutable extends \DateTimeImmutable implements \JsonSerializable -{ - private bool $useMicroseconds; - - public function __construct(bool $useMicroseconds, ?DateTimeZone $timezone = null) - { - $this->useMicroseconds = $useMicroseconds; - - // if you like to use a custom time to pass to Logger::addRecord directly, - // call modify() or setTimestamp() on this instance to change the date after creating it - parent::__construct('now', $timezone); - } - - public function jsonSerialize(): string - { - if ($this->useMicroseconds) { - return $this->format('Y-m-d\TH:i:s.uP'); - } - - return $this->format('Y-m-d\TH:i:sP'); - } - - public function __toString(): string - { - return $this->jsonSerialize(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/ErrorHandler.php b/vendor/monolog/monolog/src/Monolog/ErrorHandler.php deleted file mode 100644 index 452778b..0000000 --- a/vendor/monolog/monolog/src/Monolog/ErrorHandler.php +++ /dev/null @@ -1,279 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -use Closure; -use Psr\Log\LoggerInterface; -use Psr\Log\LogLevel; - -/** - * Monolog error handler - * - * A facility to enable logging of runtime errors, exceptions and fatal errors. - * - * Quick setup: ErrorHandler::register($logger); - * - * @author Jordi Boggiano - */ -class ErrorHandler -{ - private Closure|null $previousExceptionHandler = null; - - /** @var array an array of class name to LogLevel::* constant mapping */ - private array $uncaughtExceptionLevelMap = []; - - /** @var Closure|true|null */ - private Closure|bool|null $previousErrorHandler = null; - - /** @var array an array of E_* constant to LogLevel::* constant mapping */ - private array $errorLevelMap = []; - - private bool $handleOnlyReportedErrors = true; - - private bool $hasFatalErrorHandler = false; - - private string $fatalLevel = LogLevel::ALERT; - - private string|null $reservedMemory = null; - - /** @var ?array{type: int, message: string, file: string, line: int, trace: mixed} */ - private array|null $lastFatalData = null; - - private const FATAL_ERRORS = [E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR]; - - public function __construct( - private LoggerInterface $logger - ) { - } - - /** - * Registers a new ErrorHandler for a given Logger - * - * By default it will handle errors, exceptions and fatal errors - * - * @param array|false $errorLevelMap an array of E_* constant to LogLevel::* constant mapping, or false to disable error handling - * @param array|false $exceptionLevelMap an array of class name to LogLevel::* constant mapping, or false to disable exception handling - * @param LogLevel::*|null|false $fatalLevel a LogLevel::* constant, null to use the default LogLevel::ALERT or false to disable fatal error handling - * @return static - */ - public static function register(LoggerInterface $logger, $errorLevelMap = [], $exceptionLevelMap = [], $fatalLevel = null): self - { - /** @phpstan-ignore-next-line */ - $handler = new static($logger); - if ($errorLevelMap !== false) { - $handler->registerErrorHandler($errorLevelMap); - } - if ($exceptionLevelMap !== false) { - $handler->registerExceptionHandler($exceptionLevelMap); - } - if ($fatalLevel !== false) { - $handler->registerFatalHandler($fatalLevel); - } - - return $handler; - } - - /** - * @param array $levelMap an array of class name to LogLevel::* constant mapping - * @return $this - */ - public function registerExceptionHandler(array $levelMap = [], bool $callPrevious = true): self - { - $prev = set_exception_handler(function (\Throwable $e): void { - $this->handleException($e); - }); - $this->uncaughtExceptionLevelMap = $levelMap; - foreach ($this->defaultExceptionLevelMap() as $class => $level) { - if (!isset($this->uncaughtExceptionLevelMap[$class])) { - $this->uncaughtExceptionLevelMap[$class] = $level; - } - } - if ($callPrevious && null !== $prev) { - $this->previousExceptionHandler = $prev(...); - } - - return $this; - } - - /** - * @param array $levelMap an array of E_* constant to LogLevel::* constant mapping - * @return $this - */ - public function registerErrorHandler(array $levelMap = [], bool $callPrevious = true, int $errorTypes = -1, bool $handleOnlyReportedErrors = true): self - { - $prev = set_error_handler($this->handleError(...), $errorTypes); - $this->errorLevelMap = array_replace($this->defaultErrorLevelMap(), $levelMap); - if ($callPrevious) { - $this->previousErrorHandler = $prev !== null ? $prev(...) : true; - } else { - $this->previousErrorHandler = null; - } - - $this->handleOnlyReportedErrors = $handleOnlyReportedErrors; - - return $this; - } - - /** - * @param LogLevel::*|null $level a LogLevel::* constant, null to use the default LogLevel::ALERT - * @param int $reservedMemorySize Amount of KBs to reserve in memory so that it can be freed when handling fatal errors giving Monolog some room in memory to get its job done - * @return $this - */ - public function registerFatalHandler($level = null, int $reservedMemorySize = 20): self - { - register_shutdown_function($this->handleFatalError(...)); - - $this->reservedMemory = str_repeat(' ', 1024 * $reservedMemorySize); - $this->fatalLevel = null === $level ? LogLevel::ALERT : $level; - $this->hasFatalErrorHandler = true; - - return $this; - } - - /** - * @return array - */ - protected function defaultExceptionLevelMap(): array - { - return [ - 'ParseError' => LogLevel::CRITICAL, - 'Throwable' => LogLevel::ERROR, - ]; - } - - /** - * @return array - */ - protected function defaultErrorLevelMap(): array - { - return [ - E_ERROR => LogLevel::CRITICAL, - E_WARNING => LogLevel::WARNING, - E_PARSE => LogLevel::ALERT, - E_NOTICE => LogLevel::NOTICE, - E_CORE_ERROR => LogLevel::CRITICAL, - E_CORE_WARNING => LogLevel::WARNING, - E_COMPILE_ERROR => LogLevel::ALERT, - E_COMPILE_WARNING => LogLevel::WARNING, - E_USER_ERROR => LogLevel::ERROR, - E_USER_WARNING => LogLevel::WARNING, - E_USER_NOTICE => LogLevel::NOTICE, - E_STRICT => LogLevel::NOTICE, - E_RECOVERABLE_ERROR => LogLevel::ERROR, - E_DEPRECATED => LogLevel::NOTICE, - E_USER_DEPRECATED => LogLevel::NOTICE, - ]; - } - - private function handleException(\Throwable $e): never - { - $level = LogLevel::ERROR; - foreach ($this->uncaughtExceptionLevelMap as $class => $candidate) { - if ($e instanceof $class) { - $level = $candidate; - break; - } - } - - $this->logger->log( - $level, - sprintf('Uncaught Exception %s: "%s" at %s line %s', Utils::getClass($e), $e->getMessage(), $e->getFile(), $e->getLine()), - ['exception' => $e] - ); - - if (null !== $this->previousExceptionHandler) { - ($this->previousExceptionHandler)($e); - } - - if (!headers_sent() && \in_array(strtolower((string) \ini_get('display_errors')), ['0', '', 'false', 'off', 'none', 'no'], true)) { - http_response_code(500); - } - - exit(255); - } - - private function handleError(int $code, string $message, string $file = '', int $line = 0): bool - { - if ($this->handleOnlyReportedErrors && 0 === (error_reporting() & $code)) { - return false; - } - - // fatal error codes are ignored if a fatal error handler is present as well to avoid duplicate log entries - if (!$this->hasFatalErrorHandler || !\in_array($code, self::FATAL_ERRORS, true)) { - $level = $this->errorLevelMap[$code] ?? LogLevel::CRITICAL; - $this->logger->log($level, self::codeToString($code).': '.$message, ['code' => $code, 'message' => $message, 'file' => $file, 'line' => $line]); - } else { - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - array_shift($trace); // Exclude handleError from trace - $this->lastFatalData = ['type' => $code, 'message' => $message, 'file' => $file, 'line' => $line, 'trace' => $trace]; - } - - if ($this->previousErrorHandler === true) { - return false; - } - if ($this->previousErrorHandler instanceof Closure) { - return (bool) ($this->previousErrorHandler)($code, $message, $file, $line); - } - - return true; - } - - /** - * @private - */ - public function handleFatalError(): void - { - $this->reservedMemory = ''; - - if (\is_array($this->lastFatalData)) { - $lastError = $this->lastFatalData; - } else { - $lastError = error_get_last(); - } - if (\is_array($lastError) && \in_array($lastError['type'], self::FATAL_ERRORS, true)) { - $trace = $lastError['trace'] ?? null; - $this->logger->log( - $this->fatalLevel, - 'Fatal Error ('.self::codeToString($lastError['type']).'): '.$lastError['message'], - ['code' => $lastError['type'], 'message' => $lastError['message'], 'file' => $lastError['file'], 'line' => $lastError['line'], 'trace' => $trace] - ); - - if ($this->logger instanceof Logger) { - foreach ($this->logger->getHandlers() as $handler) { - $handler->close(); - } - } - } - } - - private static function codeToString(int $code): string - { - return match ($code) { - E_ERROR => 'E_ERROR', - E_WARNING => 'E_WARNING', - E_PARSE => 'E_PARSE', - E_NOTICE => 'E_NOTICE', - E_CORE_ERROR => 'E_CORE_ERROR', - E_CORE_WARNING => 'E_CORE_WARNING', - E_COMPILE_ERROR => 'E_COMPILE_ERROR', - E_COMPILE_WARNING => 'E_COMPILE_WARNING', - E_USER_ERROR => 'E_USER_ERROR', - E_USER_WARNING => 'E_USER_WARNING', - E_USER_NOTICE => 'E_USER_NOTICE', - E_STRICT => 'E_STRICT', - E_RECOVERABLE_ERROR => 'E_RECOVERABLE_ERROR', - E_DEPRECATED => 'E_DEPRECATED', - E_USER_DEPRECATED => 'E_USER_DEPRECATED', - default => 'Unknown PHP error', - }; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php deleted file mode 100644 index beb5106..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/ChromePHPFormatter.php +++ /dev/null @@ -1,87 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Formats a log message according to the ChromePHP array format - * - * @author Christophe Coevoet - */ -class ChromePHPFormatter implements FormatterInterface -{ - /** - * Translates Monolog log levels to Wildfire levels. - * - * @return 'log'|'info'|'warn'|'error' - */ - private function toWildfireLevel(Level $level): string - { - return match ($level) { - Level::Debug => 'log', - Level::Info => 'info', - Level::Notice => 'info', - Level::Warning => 'warn', - Level::Error => 'error', - Level::Critical => 'error', - Level::Alert => 'error', - Level::Emergency => 'error', - }; - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record) - { - // Retrieve the line and file if set and remove them from the formatted extra - $backtrace = 'unknown'; - if (isset($record->extra['file'], $record->extra['line'])) { - $backtrace = $record->extra['file'].' : '.$record->extra['line']; - unset($record->extra['file'], $record->extra['line']); - } - - $message = ['message' => $record->message]; - if (\count($record->context) > 0) { - $message['context'] = $record->context; - } - if (\count($record->extra) > 0) { - $message['extra'] = $record->extra; - } - if (\count($message) === 1) { - $message = reset($message); - } - - return [ - $record->channel, - $message, - $backtrace, - $this->toWildfireLevel($record->level), - ]; - } - - /** - * @inheritDoc - */ - public function formatBatch(array $records) - { - $formatted = []; - - foreach ($records as $record) { - $formatted[] = $this->format($record); - } - - return $formatted; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php deleted file mode 100644 index 8c92eff..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/ElasticaFormatter.php +++ /dev/null @@ -1,89 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Elastica\Document; -use Monolog\LogRecord; - -/** - * Format a log message into an Elastica Document - * - * @author Jelle Vink - */ -class ElasticaFormatter extends NormalizerFormatter -{ - /** - * @var string Elastic search index name - */ - protected string $index; - - /** - * @var string|null Elastic search document type - */ - protected string|null $type; - - /** - * @param string $index Elastic Search index name - * @param ?string $type Elastic Search document type, deprecated as of Elastica 7 - * - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(string $index, ?string $type) - { - // elasticsearch requires a ISO 8601 format date with optional millisecond precision. - parent::__construct('Y-m-d\TH:i:s.uP'); - - $this->index = $index; - $this->type = $type; - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record) - { - $record = parent::format($record); - - return $this->getDocument($record); - } - - public function getIndex(): string - { - return $this->index; - } - - /** - * @deprecated since Elastica 7 type has no effect - */ - public function getType(): string - { - /** @phpstan-ignore-next-line */ - return $this->type; - } - - /** - * Convert a log message into an Elastica Document - * - * @param mixed[] $record - */ - protected function getDocument(array $record): Document - { - $document = new Document(); - $document->setData($record); - if (method_exists($document, 'setType')) { - $document->setType($this->type); - } - $document->setIndex($this->index); - - return $document; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php deleted file mode 100644 index b38aca0..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/ElasticsearchFormatter.php +++ /dev/null @@ -1,88 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use DateTimeInterface; -use Monolog\LogRecord; - -/** - * Format a log message into an Elasticsearch record - * - * @author Avtandil Kikabidze - */ -class ElasticsearchFormatter extends NormalizerFormatter -{ - /** - * @var string Elasticsearch index name - */ - protected string $index; - - /** - * @var string Elasticsearch record type - */ - protected string $type; - - /** - * @param string $index Elasticsearch index name - * @param string $type Elasticsearch record type - * - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(string $index, string $type) - { - // Elasticsearch requires an ISO 8601 format date with optional millisecond precision. - parent::__construct(DateTimeInterface::ISO8601); - - $this->index = $index; - $this->type = $type; - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record) - { - $record = parent::format($record); - - return $this->getDocument($record); - } - - /** - * Getter index - */ - public function getIndex(): string - { - return $this->index; - } - - /** - * Getter type - */ - public function getType(): string - { - return $this->type; - } - - /** - * Convert a log message into an Elasticsearch record - * - * @param mixed[] $record Log message - * @return mixed[] - */ - protected function getDocument(array $record): array - { - $record['_index'] = $this->index; - $record['_type'] = $this->type; - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php deleted file mode 100644 index cc805c8..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/FlowdockFormatter.php +++ /dev/null @@ -1,106 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\LogRecord; - -/** - * formats the record to be used in the FlowdockHandler - * - * @author Dominik Liebler - * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4 - */ -class FlowdockFormatter implements FormatterInterface -{ - private string $source; - - private string $sourceEmail; - - public function __construct(string $source, string $sourceEmail) - { - $this->source = $source; - $this->sourceEmail = $sourceEmail; - } - - /** - * @inheritDoc - * - * @return mixed[] - */ - public function format(LogRecord $record): array - { - $tags = [ - '#logs', - '#' . $record->level->toPsrLogLevel(), - '#' . $record->channel, - ]; - - foreach ($record->extra as $value) { - $tags[] = '#' . $value; - } - - $subject = sprintf( - 'in %s: %s - %s', - $this->source, - $record->level->getName(), - $this->getShortMessage($record->message) - ); - - return [ - 'source' => $this->source, - 'from_address' => $this->sourceEmail, - 'subject' => $subject, - 'content' => $record->message, - 'tags' => $tags, - 'project' => $this->source, - ]; - } - - /** - * @inheritDoc - * - * @return mixed[][] - */ - public function formatBatch(array $records): array - { - $formatted = []; - - foreach ($records as $record) { - $formatted[] = $this->format($record); - } - - return $formatted; - } - - public function getShortMessage(string $message): string - { - static $hasMbString; - - if (null === $hasMbString) { - $hasMbString = \function_exists('mb_strlen'); - } - - $maxLength = 45; - - if ($hasMbString) { - if (mb_strlen($message, 'UTF-8') > $maxLength) { - $message = mb_substr($message, 0, $maxLength - 4, 'UTF-8') . ' ...'; - } - } else { - if (\strlen($message) > $maxLength) { - $message = substr($message, 0, $maxLength - 4) . ' ...'; - } - } - - return $message; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php deleted file mode 100644 index 0c9f3e1..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/FluentdFormatter.php +++ /dev/null @@ -1,92 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Class FluentdFormatter - * - * Serializes a log message to Fluentd unix socket protocol - * - * Fluentd config: - * - * - * type unix - * path /var/run/td-agent/td-agent.sock - * - * - * Monolog setup: - * - * $logger = new Monolog\Logger('fluent.tag'); - * $fluentHandler = new Monolog\Handler\SocketHandler('unix:///var/run/td-agent/td-agent.sock'); - * $fluentHandler->setFormatter(new Monolog\Formatter\FluentdFormatter()); - * $logger->pushHandler($fluentHandler); - * - * @author Andrius Putna - */ -class FluentdFormatter implements FormatterInterface -{ - /** - * @var bool $levelTag should message level be a part of the fluentd tag - */ - protected bool $levelTag = false; - - /** - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(bool $levelTag = false) - { - if (!\function_exists('json_encode')) { - throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s FluentdUnixFormatter'); - } - - $this->levelTag = $levelTag; - } - - public function isUsingLevelsInTag(): bool - { - return $this->levelTag; - } - - public function format(LogRecord $record): string - { - $tag = $record->channel; - if ($this->levelTag) { - $tag .= '.' . $record->level->toPsrLogLevel(); - } - - $message = [ - 'message' => $record->message, - 'context' => $record->context, - 'extra' => $record->extra, - ]; - - if (!$this->levelTag) { - $message['level'] = $record->level->value; - $message['level_name'] = $record->level->getName(); - } - - return Utils::jsonEncode([$tag, $record->datetime->getTimestamp(), $message]); - } - - public function formatBatch(array $records): string - { - $message = ''; - foreach ($records as $record) { - $message .= $this->format($record); - } - - return $message; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php b/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php deleted file mode 100644 index 3413a4b..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/FormatterInterface.php +++ /dev/null @@ -1,38 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\LogRecord; - -/** - * Interface for formatters - * - * @author Jordi Boggiano - */ -interface FormatterInterface -{ - /** - * Formats a log record. - * - * @param LogRecord $record A record to format - * @return mixed The formatted record - */ - public function format(LogRecord $record); - - /** - * Formats a set of log records. - * - * @param array $records A set of records to format - * @return mixed The formatted set of records - */ - public function formatBatch(array $records); -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php deleted file mode 100644 index dd6fefb..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/GelfMessageFormatter.php +++ /dev/null @@ -1,148 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\Level; -use Gelf\Message; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Serializes a log message to GELF - * @see http://docs.graylog.org/en/latest/pages/gelf.html - * - * @author Matt Lehner - */ -class GelfMessageFormatter extends NormalizerFormatter -{ - protected const DEFAULT_MAX_LENGTH = 32766; - - /** - * @var string the name of the system for the Gelf log message - */ - protected string $systemName; - - /** - * @var string a prefix for 'extra' fields from the Monolog record (optional) - */ - protected string $extraPrefix; - - /** - * @var string a prefix for 'context' fields from the Monolog record (optional) - */ - protected string $contextPrefix; - - /** - * @var int max length per field - */ - protected int $maxLength; - - /** - * Translates Monolog log levels to Graylog2 log priorities. - */ - private function getGraylog2Priority(Level $level): int - { - return match ($level) { - Level::Debug => 7, - Level::Info => 6, - Level::Notice => 5, - Level::Warning => 4, - Level::Error => 3, - Level::Critical => 2, - Level::Alert => 1, - Level::Emergency => 0, - }; - } - - /** - * @throws \RuntimeException - */ - public function __construct(?string $systemName = null, ?string $extraPrefix = null, string $contextPrefix = 'ctxt_', ?int $maxLength = null) - { - if (!class_exists(Message::class)) { - throw new \RuntimeException('Composer package graylog2/gelf-php is required to use Monolog\'s GelfMessageFormatter'); - } - - parent::__construct('U.u'); - - $this->systemName = (null === $systemName || $systemName === '') ? (string) gethostname() : $systemName; - - $this->extraPrefix = null === $extraPrefix ? '' : $extraPrefix; - $this->contextPrefix = $contextPrefix; - $this->maxLength = null === $maxLength ? self::DEFAULT_MAX_LENGTH : $maxLength; - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record): Message - { - $context = $extra = []; - if (isset($record->context)) { - /** @var mixed[] $context */ - $context = parent::normalize($record->context); - } - if (isset($record->extra)) { - /** @var mixed[] $extra */ - $extra = parent::normalize($record->extra); - } - - $message = new Message(); - $message - ->setTimestamp($record->datetime) - ->setShortMessage($record->message) - ->setHost($this->systemName) - ->setLevel($this->getGraylog2Priority($record->level)); - - // message length + system name length + 200 for padding / metadata - $len = 200 + \strlen($record->message) + \strlen($this->systemName); - - if ($len > $this->maxLength) { - $message->setShortMessage(Utils::substr($record->message, 0, $this->maxLength)); - } - - if (isset($record->channel)) { - $message->setAdditional('facility', $record->channel); - } - - foreach ($extra as $key => $val) { - $val = \is_scalar($val) || null === $val ? $val : $this->toJson($val); - $len = \strlen($this->extraPrefix . $key . $val); - if ($len > $this->maxLength) { - $message->setAdditional($this->extraPrefix . $key, Utils::substr((string) $val, 0, $this->maxLength)); - - continue; - } - $message->setAdditional($this->extraPrefix . $key, $val); - } - - foreach ($context as $key => $val) { - $val = \is_scalar($val) || null === $val ? $val : $this->toJson($val); - $len = \strlen($this->contextPrefix . $key . $val); - if ($len > $this->maxLength) { - $message->setAdditional($this->contextPrefix . $key, Utils::substr((string) $val, 0, $this->maxLength)); - - continue; - } - $message->setAdditional($this->contextPrefix . $key, $val); - } - - if (!$message->hasAdditional('file') && isset($context['exception']['file'])) { - if (1 === preg_match("/^(.+):([0-9]+)$/", $context['exception']['file'], $matches)) { - $message->setAdditional('file', $matches[1]); - $message->setAdditional('line', $matches[2]); - } - } - - return $message; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php deleted file mode 100644 index c97b912..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/GoogleCloudLoggingFormatter.php +++ /dev/null @@ -1,40 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use DateTimeInterface; -use Monolog\LogRecord; - -/** - * Encodes message information into JSON in a format compatible with Cloud logging. - * - * @see https://cloud.google.com/logging/docs/structured-logging - * @see https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry - * - * @author Luís Cobucci - */ -class GoogleCloudLoggingFormatter extends JsonFormatter -{ - protected function normalizeRecord(LogRecord $record): array - { - $normalized = parent::normalizeRecord($record); - - // Re-key level for GCP logging - $normalized['severity'] = $normalized['level_name']; - $normalized['time'] = $record->datetime->format(DateTimeInterface::RFC3339_EXTENDED); - - // Remove keys that are not used by GCP - unset($normalized['level'], $normalized['level_name'], $normalized['datetime']); - - return $normalized; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php deleted file mode 100644 index b5d69bc..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/HtmlFormatter.php +++ /dev/null @@ -1,143 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Formats incoming records into an HTML table - * - * This is especially useful for html email logging - * - * @author Tiago Brito - */ -class HtmlFormatter extends NormalizerFormatter -{ - /** - * Translates Monolog log levels to html color priorities. - */ - protected function getLevelColor(Level $level): string - { - return match ($level) { - Level::Debug => '#CCCCCC', - Level::Info => '#28A745', - Level::Notice => '#17A2B8', - Level::Warning => '#FFC107', - Level::Error => '#FD7E14', - Level::Critical => '#DC3545', - Level::Alert => '#821722', - Level::Emergency => '#000000', - }; - } - - /** - * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(?string $dateFormat = null) - { - parent::__construct($dateFormat); - } - - /** - * Creates an HTML table row - * - * @param string $th Row header content - * @param string $td Row standard cell content - * @param bool $escapeTd false if td content must not be html escaped - */ - protected function addRow(string $th, string $td = ' ', bool $escapeTd = true): string - { - $th = htmlspecialchars($th, ENT_NOQUOTES, 'UTF-8'); - if ($escapeTd) { - $td = '
'.htmlspecialchars($td, ENT_NOQUOTES, 'UTF-8').'
'; - } - - return "
\n\n\n"; - } - - /** - * Create a HTML h1 tag - * - * @param string $title Text to be in the h1 - */ - protected function addTitle(string $title, Level $level): string - { - $title = htmlspecialchars($title, ENT_NOQUOTES, 'UTF-8'); - - return '

'.$title.'

'; - } - - /** - * Formats a log record. - * - * @return string The formatted record - */ - public function format(LogRecord $record): string - { - $output = $this->addTitle($record->level->getName(), $record->level); - $output .= '
$th:".$td."
'; - - $output .= $this->addRow('Message', $record->message); - $output .= $this->addRow('Time', $this->formatDate($record->datetime)); - $output .= $this->addRow('Channel', $record->channel); - if (\count($record->context) > 0) { - $embeddedTable = '
'; - foreach ($record->context as $key => $value) { - $embeddedTable .= $this->addRow((string) $key, $this->convertToString($value)); - } - $embeddedTable .= '
'; - $output .= $this->addRow('Context', $embeddedTable, false); - } - if (\count($record->extra) > 0) { - $embeddedTable = ''; - foreach ($record->extra as $key => $value) { - $embeddedTable .= $this->addRow((string) $key, $this->convertToString($value)); - } - $embeddedTable .= '
'; - $output .= $this->addRow('Extra', $embeddedTable, false); - } - - return $output.''; - } - - /** - * Formats a set of log records. - * - * @return string The formatted set of records - */ - public function formatBatch(array $records): string - { - $message = ''; - foreach ($records as $record) { - $message .= $this->format($record); - } - - return $message; - } - - /** - * @param mixed $data - */ - protected function convertToString($data): string - { - if (null === $data || \is_scalar($data)) { - return (string) $data; - } - - $data = $this->normalize($data); - - return Utils::jsonEncode($data, JSON_PRETTY_PRINT | Utils::DEFAULT_JSON_FLAGS, true); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php deleted file mode 100644 index 640043a..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/JsonFormatter.php +++ /dev/null @@ -1,220 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Stringable; -use Throwable; -use Monolog\LogRecord; - -/** - * Encodes whatever record data is passed to it as json - * - * This can be useful to log to databases or remote APIs - * - * @author Jordi Boggiano - */ -class JsonFormatter extends NormalizerFormatter -{ - public const BATCH_MODE_JSON = 1; - public const BATCH_MODE_NEWLINES = 2; - - /** @var self::BATCH_MODE_* */ - protected int $batchMode; - - protected bool $appendNewline; - - protected bool $ignoreEmptyContextAndExtra; - - protected bool $includeStacktraces = false; - - /** - * @param self::BATCH_MODE_* $batchMode - * - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(int $batchMode = self::BATCH_MODE_JSON, bool $appendNewline = true, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = false) - { - $this->batchMode = $batchMode; - $this->appendNewline = $appendNewline; - $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra; - $this->includeStacktraces = $includeStacktraces; - - parent::__construct(); - } - - /** - * The batch mode option configures the formatting style for - * multiple records. By default, multiple records will be - * formatted as a JSON-encoded array. However, for - * compatibility with some API endpoints, alternative styles - * are available. - */ - public function getBatchMode(): int - { - return $this->batchMode; - } - - /** - * True if newlines are appended to every formatted record - */ - public function isAppendingNewlines(): bool - { - return $this->appendNewline; - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record): string - { - $normalized = parent::format($record); - - if (isset($normalized['context']) && $normalized['context'] === []) { - if ($this->ignoreEmptyContextAndExtra) { - unset($normalized['context']); - } else { - $normalized['context'] = new \stdClass; - } - } - if (isset($normalized['extra']) && $normalized['extra'] === []) { - if ($this->ignoreEmptyContextAndExtra) { - unset($normalized['extra']); - } else { - $normalized['extra'] = new \stdClass; - } - } - - return $this->toJson($normalized, true) . ($this->appendNewline ? "\n" : ''); - } - - /** - * @inheritDoc - */ - public function formatBatch(array $records): string - { - return match ($this->batchMode) { - static::BATCH_MODE_NEWLINES => $this->formatBatchNewlines($records), - default => $this->formatBatchJson($records), - }; - } - - /** - * @return $this - */ - public function includeStacktraces(bool $include = true): self - { - $this->includeStacktraces = $include; - - return $this; - } - - /** - * Return a JSON-encoded array of records. - * - * @phpstan-param LogRecord[] $records - */ - protected function formatBatchJson(array $records): string - { - return $this->toJson($this->normalize($records), true); - } - - /** - * Use new lines to separate records instead of a - * JSON-encoded array. - * - * @phpstan-param LogRecord[] $records - */ - protected function formatBatchNewlines(array $records): string - { - $oldNewline = $this->appendNewline; - $this->appendNewline = false; - $formatted = array_map(fn (LogRecord $record) => $this->format($record), $records); - $this->appendNewline = $oldNewline; - - return implode("\n", $formatted); - } - - /** - * Normalizes given $data. - * - * @return null|scalar|array|object - */ - protected function normalize(mixed $data, int $depth = 0): mixed - { - if ($depth > $this->maxNormalizeDepth) { - return 'Over '.$this->maxNormalizeDepth.' levels deep, aborting normalization'; - } - - if (\is_array($data)) { - $normalized = []; - - $count = 1; - foreach ($data as $key => $value) { - if ($count++ > $this->maxNormalizeItemCount) { - $normalized['...'] = 'Over '.$this->maxNormalizeItemCount.' items ('.\count($data).' total), aborting normalization'; - break; - } - - $normalized[$key] = $this->normalize($value, $depth + 1); - } - - return $normalized; - } - - if (\is_object($data)) { - if ($data instanceof \DateTimeInterface) { - return $this->formatDate($data); - } - - if ($data instanceof Throwable) { - return $this->normalizeException($data, $depth); - } - - // if the object has specific json serializability we want to make sure we skip the __toString treatment below - if ($data instanceof \JsonSerializable) { - return $data; - } - - if ($data instanceof Stringable) { - return $data->__toString(); - } - - if (\get_class($data) === '__PHP_Incomplete_Class') { - return new \ArrayObject($data); - } - - return $data; - } - - if (\is_resource($data)) { - return parent::normalize($data); - } - - return $data; - } - - /** - * Normalizes given exception with or without its own stack trace based on - * `includeStacktraces` property. - * - * @inheritDoc - */ - protected function normalizeException(Throwable $e, int $depth = 0): array - { - $data = parent::normalizeException($e, $depth); - if (!$this->includeStacktraces) { - unset($data['trace']); - } - - return $data; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php deleted file mode 100644 index ba5852b..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/LineFormatter.php +++ /dev/null @@ -1,316 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Closure; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Formats incoming records into a one-line string - * - * This is especially useful for logging to files - * - * @author Jordi Boggiano - * @author Christophe Coevoet - */ -class LineFormatter extends NormalizerFormatter -{ - public const SIMPLE_FORMAT = "[%datetime%] %channel%.%level_name%: %message% %context% %extra%\n"; - - protected string $format; - protected bool $allowInlineLineBreaks; - protected bool $ignoreEmptyContextAndExtra; - protected bool $includeStacktraces; - protected ?int $maxLevelNameLength = null; - protected string $indentStacktraces = ''; - protected Closure|null $stacktracesParser = null; - protected string $basePath = ''; - - /** - * @param string|null $format The format of the message - * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format - * @param bool $allowInlineLineBreaks Whether to allow inline line breaks in log entries - * - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(?string $format = null, ?string $dateFormat = null, bool $allowInlineLineBreaks = false, bool $ignoreEmptyContextAndExtra = false, bool $includeStacktraces = false) - { - $this->format = $format === null ? static::SIMPLE_FORMAT : $format; - $this->allowInlineLineBreaks = $allowInlineLineBreaks; - $this->ignoreEmptyContextAndExtra = $ignoreEmptyContextAndExtra; - $this->includeStacktraces($includeStacktraces); - parent::__construct($dateFormat); - } - - /** - * Setting a base path will hide the base path from exception and stack trace file names to shorten them - * @return $this - */ - public function setBasePath(string $path = ''): self - { - if ($path !== '') { - $path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; - } - - $this->basePath = $path; - - return $this; - } - - /** - * @return $this - */ - public function includeStacktraces(bool $include = true, ?Closure $parser = null): self - { - $this->includeStacktraces = $include; - if ($this->includeStacktraces) { - $this->allowInlineLineBreaks = true; - $this->stacktracesParser = $parser; - } - - return $this; - } - - /** - * Indent stack traces to separate them a bit from the main log record messages - * - * @param string $indent The string used to indent, for example " " - * @return $this - */ - public function indentStacktraces(string $indent): self - { - $this->indentStacktraces = $indent; - - return $this; - } - - /** - * @return $this - */ - public function allowInlineLineBreaks(bool $allow = true): self - { - $this->allowInlineLineBreaks = $allow; - - return $this; - } - - /** - * @return $this - */ - public function ignoreEmptyContextAndExtra(bool $ignore = true): self - { - $this->ignoreEmptyContextAndExtra = $ignore; - - return $this; - } - - /** - * Allows cutting the level name to get fixed-length levels like INF for INFO, ERR for ERROR if you set this to 3 for example - * - * @param int|null $maxLevelNameLength Maximum characters for the level name. Set null for infinite length (default) - * @return $this - */ - public function setMaxLevelNameLength(?int $maxLevelNameLength = null): self - { - $this->maxLevelNameLength = $maxLevelNameLength; - - return $this; - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record): string - { - $vars = parent::format($record); - - if ($this->maxLevelNameLength !== null) { - $vars['level_name'] = substr($vars['level_name'], 0, $this->maxLevelNameLength); - } - - $output = $this->format; - foreach ($vars['extra'] as $var => $val) { - if (false !== strpos($output, '%extra.'.$var.'%')) { - $output = str_replace('%extra.'.$var.'%', $this->stringify($val), $output); - unset($vars['extra'][$var]); - } - } - - foreach ($vars['context'] as $var => $val) { - if (false !== strpos($output, '%context.'.$var.'%')) { - $output = str_replace('%context.'.$var.'%', $this->stringify($val), $output); - unset($vars['context'][$var]); - } - } - - if ($this->ignoreEmptyContextAndExtra) { - if (\count($vars['context']) === 0) { - unset($vars['context']); - $output = str_replace('%context%', '', $output); - } - - if (\count($vars['extra']) === 0) { - unset($vars['extra']); - $output = str_replace('%extra%', '', $output); - } - } - - foreach ($vars as $var => $val) { - if (false !== strpos($output, '%'.$var.'%')) { - $output = str_replace('%'.$var.'%', $this->stringify($val), $output); - } - } - - // remove leftover %extra.xxx% and %context.xxx% if any - if (false !== strpos($output, '%')) { - $output = preg_replace('/%(?:extra|context)\..+?%/', '', $output); - if (null === $output) { - $pcreErrorCode = preg_last_error(); - - throw new \RuntimeException('Failed to run preg_replace: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); - } - } - - return $output; - } - - public function formatBatch(array $records): string - { - $message = ''; - foreach ($records as $record) { - $message .= $this->format($record); - } - - return $message; - } - - /** - * @param mixed $value - */ - public function stringify($value): string - { - return $this->replaceNewlines($this->convertToString($value)); - } - - protected function normalizeException(\Throwable $e, int $depth = 0): string - { - $str = $this->formatException($e); - - if (($previous = $e->getPrevious()) instanceof \Throwable) { - do { - $depth++; - if ($depth > $this->maxNormalizeDepth) { - $str .= "\n[previous exception] Over " . $this->maxNormalizeDepth . ' levels deep, aborting normalization'; - break; - } - - $str .= "\n[previous exception] " . $this->formatException($previous); - } while ($previous = $previous->getPrevious()); - } - - return $str; - } - - /** - * @param mixed $data - */ - protected function convertToString($data): string - { - if (null === $data || \is_bool($data)) { - return var_export($data, true); - } - - if (\is_scalar($data)) { - return (string) $data; - } - - return $this->toJson($data, true); - } - - protected function replaceNewlines(string $str): string - { - if ($this->allowInlineLineBreaks) { - if (0 === strpos($str, '{') || 0 === strpos($str, '[')) { - $str = preg_replace('/(?getCode(); - if ($e instanceof \SoapFault) { - if (isset($e->faultcode)) { - $str .= ' faultcode: ' . $e->faultcode; - } - - if (isset($e->faultactor)) { - $str .= ' faultactor: ' . $e->faultactor; - } - - if (isset($e->detail)) { - if (\is_string($e->detail)) { - $str .= ' detail: ' . $e->detail; - } elseif (\is_object($e->detail) || \is_array($e->detail)) { - $str .= ' detail: ' . $this->toJson($e->detail, true); - } - } - } - - $file = $e->getFile(); - if ($this->basePath !== '') { - $file = preg_replace('{^'.preg_quote($this->basePath).'}', '', $file); - } - - $str .= '): ' . $e->getMessage() . ' at ' . $file . ':' . $e->getLine() . ')'; - - if ($this->includeStacktraces) { - $str .= $this->stacktracesParser($e); - } - - return $str; - } - - private function stacktracesParser(\Throwable $e): string - { - $trace = $e->getTraceAsString(); - - if ($this->basePath !== '') { - $trace = preg_replace('{^(#\d+ )' . preg_quote($this->basePath) . '}m', '$1', $trace) ?? $trace; - } - - if ($this->stacktracesParser !== null) { - $trace = $this->stacktracesParserCustom($trace); - } - - if ($this->indentStacktraces !== '') { - $trace = str_replace("\n", "\n{$this->indentStacktraces}", $trace); - } - - return "\n{$this->indentStacktraces}[stacktrace]\n{$this->indentStacktraces}" . $trace . "\n"; - } - - private function stacktracesParserCustom(string $trace): string - { - return implode("\n", array_filter(array_map($this->stacktracesParser, explode("\n", $trace)))); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php deleted file mode 100644 index 5f0b6a4..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/LogglyFormatter.php +++ /dev/null @@ -1,47 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\LogRecord; - -/** - * Encodes message information into JSON in a format compatible with Loggly. - * - * @author Adam Pancutt - */ -class LogglyFormatter extends JsonFormatter -{ - /** - * Overrides the default batch mode to new lines for compatibility with the - * Loggly bulk API. - */ - public function __construct(int $batchMode = self::BATCH_MODE_NEWLINES, bool $appendNewline = false) - { - parent::__construct($batchMode, $appendNewline); - } - - /** - * Appends the 'timestamp' parameter for indexing by Loggly. - * - * @see https://www.loggly.com/docs/automated-parsing/#json - * @see \Monolog\Formatter\JsonFormatter::format() - */ - protected function normalizeRecord(LogRecord $record): array - { - $recordData = parent::normalizeRecord($record); - - $recordData["timestamp"] = $record->datetime->format("Y-m-d\TH:i:s.uO"); - unset($recordData["datetime"]); - - return $recordData; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php deleted file mode 100644 index 9e44c19..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/LogmaticFormatter.php +++ /dev/null @@ -1,70 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\LogRecord; - -/** - * Encodes message information into JSON in a format compatible with Logmatic. - * - * @author Julien Breux - */ -class LogmaticFormatter extends JsonFormatter -{ - protected const MARKERS = ["sourcecode", "php"]; - - protected string $hostname = ''; - - protected string $appName = ''; - - /** - * @return $this - */ - public function setHostname(string $hostname): self - { - $this->hostname = $hostname; - - return $this; - } - - /** - * @return $this - */ - public function setAppName(string $appName): self - { - $this->appName = $appName; - - return $this; - } - - /** - * Appends the 'hostname' and 'appname' parameter for indexing by Logmatic. - * - * @see http://doc.logmatic.io/docs/basics-to-send-data - * @see \Monolog\Formatter\JsonFormatter::format() - */ - public function normalizeRecord(LogRecord $record): array - { - $record = parent::normalizeRecord($record); - - if ($this->hostname !== '') { - $record["hostname"] = $this->hostname; - } - if ($this->appName !== '') { - $record["appname"] = $this->appName; - } - - $record["@marker"] = static::MARKERS; - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php deleted file mode 100644 index abee3cd..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/LogstashFormatter.php +++ /dev/null @@ -1,102 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\LogRecord; - -/** - * Serializes a log message to Logstash Event Format - * - * @see https://www.elastic.co/products/logstash - * @see https://github.com/elastic/logstash/blob/master/logstash-core/src/main/java/org/logstash/Event.java - * - * @author Tim Mower - */ -class LogstashFormatter extends NormalizerFormatter -{ - /** - * @var string the name of the system for the Logstash log message, used to fill the @source field - */ - protected string $systemName; - - /** - * @var string an application name for the Logstash log message, used to fill the @type field - */ - protected string $applicationName; - - /** - * @var string the key for 'extra' fields from the Monolog record - */ - protected string $extraKey; - - /** - * @var string the key for 'context' fields from the Monolog record - */ - protected string $contextKey; - - /** - * @param string $applicationName The application that sends the data, used as the "type" field of logstash - * @param string|null $systemName The system/machine name, used as the "source" field of logstash, defaults to the hostname of the machine - * @param string $extraKey The key for extra keys inside logstash "fields", defaults to extra - * @param string $contextKey The key for context keys inside logstash "fields", defaults to context - * - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(string $applicationName, ?string $systemName = null, string $extraKey = 'extra', string $contextKey = 'context') - { - // logstash requires a ISO 8601 format date with optional millisecond precision. - parent::__construct('Y-m-d\TH:i:s.uP'); - - $this->systemName = $systemName === null ? (string) gethostname() : $systemName; - $this->applicationName = $applicationName; - $this->extraKey = $extraKey; - $this->contextKey = $contextKey; - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record): string - { - $recordData = parent::format($record); - - $message = [ - '@timestamp' => $recordData['datetime'], - '@version' => 1, - 'host' => $this->systemName, - ]; - if (isset($recordData['message'])) { - $message['message'] = $recordData['message']; - } - if (isset($recordData['channel'])) { - $message['type'] = $recordData['channel']; - $message['channel'] = $recordData['channel']; - } - if (isset($recordData['level_name'])) { - $message['level'] = $recordData['level_name']; - } - if (isset($recordData['level'])) { - $message['monolog_level'] = $recordData['level']; - } - if ('' !== $this->applicationName) { - $message['type'] = $this->applicationName; - } - if (\count($recordData['extra']) > 0) { - $message[$this->extraKey] = $recordData['extra']; - } - if (\count($recordData['context']) > 0) { - $message[$this->contextKey] = $recordData['context']; - } - - return $this->toJson($message) . "\n"; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php deleted file mode 100644 index 2da3e0b..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/MongoDBFormatter.php +++ /dev/null @@ -1,159 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use MongoDB\BSON\Type; -use MongoDB\BSON\UTCDateTime; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Formats a record for use with the MongoDBHandler. - * - * @author Florian Plattner - */ -class MongoDBFormatter implements FormatterInterface -{ - private bool $exceptionTraceAsString; - private int $maxNestingLevel; - private bool $isLegacyMongoExt; - - /** - * @param int $maxNestingLevel 0 means infinite nesting, the $record itself is level 1, $record->context is 2 - * @param bool $exceptionTraceAsString set to false to log exception traces as a sub documents instead of strings - */ - public function __construct(int $maxNestingLevel = 3, bool $exceptionTraceAsString = true) - { - $this->maxNestingLevel = max($maxNestingLevel, 0); - $this->exceptionTraceAsString = $exceptionTraceAsString; - - $this->isLegacyMongoExt = \extension_loaded('mongodb') && version_compare((string) phpversion('mongodb'), '1.1.9', '<='); - } - - /** - * @inheritDoc - * - * @return mixed[] - */ - public function format(LogRecord $record): array - { - /** @var mixed[] $res */ - $res = $this->formatArray($record->toArray()); - - return $res; - } - - /** - * @inheritDoc - * - * @return array - */ - public function formatBatch(array $records): array - { - $formatted = []; - foreach ($records as $key => $record) { - $formatted[$key] = $this->format($record); - } - - return $formatted; - } - - /** - * @param mixed[] $array - * @return mixed[]|string Array except when max nesting level is reached then a string "[...]" - */ - protected function formatArray(array $array, int $nestingLevel = 0) - { - if ($this->maxNestingLevel > 0 && $nestingLevel > $this->maxNestingLevel) { - return '[...]'; - } - - foreach ($array as $name => $value) { - if ($value instanceof \DateTimeInterface) { - $array[$name] = $this->formatDate($value, $nestingLevel + 1); - } elseif ($value instanceof \Throwable) { - $array[$name] = $this->formatException($value, $nestingLevel + 1); - } elseif (\is_array($value)) { - $array[$name] = $this->formatArray($value, $nestingLevel + 1); - } elseif (\is_object($value) && !$value instanceof Type) { - $array[$name] = $this->formatObject($value, $nestingLevel + 1); - } - } - - return $array; - } - - /** - * @param mixed $value - * @return mixed[]|string - */ - protected function formatObject($value, int $nestingLevel) - { - $objectVars = get_object_vars($value); - $objectVars['class'] = Utils::getClass($value); - - return $this->formatArray($objectVars, $nestingLevel); - } - - /** - * @return mixed[]|string - */ - protected function formatException(\Throwable $exception, int $nestingLevel) - { - $formattedException = [ - 'class' => Utils::getClass($exception), - 'message' => $exception->getMessage(), - 'code' => (int) $exception->getCode(), - 'file' => $exception->getFile() . ':' . $exception->getLine(), - ]; - - if ($this->exceptionTraceAsString === true) { - $formattedException['trace'] = $exception->getTraceAsString(); - } else { - $formattedException['trace'] = $exception->getTrace(); - } - - return $this->formatArray($formattedException, $nestingLevel); - } - - protected function formatDate(\DateTimeInterface $value, int $nestingLevel): UTCDateTime - { - if ($this->isLegacyMongoExt) { - return $this->legacyGetMongoDbDateTime($value); - } - - return $this->getMongoDbDateTime($value); - } - - private function getMongoDbDateTime(\DateTimeInterface $value): UTCDateTime - { - return new UTCDateTime((int) floor(((float) $value->format('U.u')) * 1000)); - } - - /** - * This is needed to support MongoDB Driver v1.19 and below - * - * See https://github.com/mongodb/mongo-php-driver/issues/426 - * - * It can probably be removed in 2.1 or later once MongoDB's 1.2 is released and widely adopted - */ - private function legacyGetMongoDbDateTime(\DateTimeInterface $value): UTCDateTime - { - $milliseconds = floor(((float) $value->format('U.u')) * 1000); - - $milliseconds = (PHP_INT_SIZE == 8) //64-bit OS? - ? (int) $milliseconds - : (string) $milliseconds; - - return new UTCDateTime($milliseconds); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php deleted file mode 100644 index e6f35be..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/NormalizerFormatter.php +++ /dev/null @@ -1,357 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\DateTimeImmutable; -use Monolog\Utils; -use Throwable; -use Monolog\LogRecord; - -/** - * Normalizes incoming records to remove objects/resources so it's easier to dump to various targets - * - * @author Jordi Boggiano - */ -class NormalizerFormatter implements FormatterInterface -{ - public const SIMPLE_DATE = "Y-m-d\TH:i:sP"; - - protected string $dateFormat; - protected int $maxNormalizeDepth = 9; - protected int $maxNormalizeItemCount = 1000; - - private int $jsonEncodeOptions = Utils::DEFAULT_JSON_FLAGS; - - protected string $basePath = ''; - - /** - * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(?string $dateFormat = null) - { - $this->dateFormat = null === $dateFormat ? static::SIMPLE_DATE : $dateFormat; - if (!\function_exists('json_encode')) { - throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s NormalizerFormatter'); - } - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record) - { - return $this->normalizeRecord($record); - } - - /** - * Normalize an arbitrary value to a scalar|array|null - * - * @return null|scalar|array - */ - public function normalizeValue(mixed $data): mixed - { - return $this->normalize($data); - } - - /** - * @inheritDoc - */ - public function formatBatch(array $records) - { - foreach ($records as $key => $record) { - $records[$key] = $this->format($record); - } - - return $records; - } - - public function getDateFormat(): string - { - return $this->dateFormat; - } - - /** - * @return $this - */ - public function setDateFormat(string $dateFormat): self - { - $this->dateFormat = $dateFormat; - - return $this; - } - - /** - * The maximum number of normalization levels to go through - */ - public function getMaxNormalizeDepth(): int - { - return $this->maxNormalizeDepth; - } - - /** - * @return $this - */ - public function setMaxNormalizeDepth(int $maxNormalizeDepth): self - { - $this->maxNormalizeDepth = $maxNormalizeDepth; - - return $this; - } - - /** - * The maximum number of items to normalize per level - */ - public function getMaxNormalizeItemCount(): int - { - return $this->maxNormalizeItemCount; - } - - /** - * @return $this - */ - public function setMaxNormalizeItemCount(int $maxNormalizeItemCount): self - { - $this->maxNormalizeItemCount = $maxNormalizeItemCount; - - return $this; - } - - /** - * Enables `json_encode` pretty print. - * - * @return $this - */ - public function setJsonPrettyPrint(bool $enable): self - { - if ($enable) { - $this->jsonEncodeOptions |= JSON_PRETTY_PRINT; - } else { - $this->jsonEncodeOptions &= ~JSON_PRETTY_PRINT; - } - - return $this; - } - - /** - * Setting a base path will hide the base path from exception and stack trace file names to shorten them - * @return $this - */ - public function setBasePath(string $path = ''): self - { - if ($path !== '') { - $path = rtrim($path, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR; - } - - $this->basePath = $path; - - return $this; - } - - /** - * Provided as extension point - * - * Because normalize is called with sub-values of context data etc, normalizeRecord can be - * extended when data needs to be appended on the record array but not to other normalized data. - * - * @return array - */ - protected function normalizeRecord(LogRecord $record): array - { - /** @var array $normalized */ - $normalized = $this->normalize($record->toArray()); - - return $normalized; - } - - /** - * @return null|scalar|array - */ - protected function normalize(mixed $data, int $depth = 0): mixed - { - if ($depth > $this->maxNormalizeDepth) { - return 'Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization'; - } - - if (null === $data || \is_scalar($data)) { - if (\is_float($data)) { - if (is_infinite($data)) { - return ($data > 0 ? '' : '-') . 'INF'; - } - if (is_nan($data)) { - return 'NaN'; - } - } - - return $data; - } - - if (\is_array($data)) { - $normalized = []; - - $count = 1; - foreach ($data as $key => $value) { - if ($count++ > $this->maxNormalizeItemCount) { - $normalized['...'] = 'Over ' . $this->maxNormalizeItemCount . ' items ('.\count($data).' total), aborting normalization'; - break; - } - - $normalized[$key] = $this->normalize($value, $depth + 1); - } - - return $normalized; - } - - if ($data instanceof \DateTimeInterface) { - return $this->formatDate($data); - } - - if (\is_object($data)) { - if ($data instanceof Throwable) { - return $this->normalizeException($data, $depth); - } - - if ($data instanceof \JsonSerializable) { - /** @var null|scalar|array $value */ - $value = $data->jsonSerialize(); - } elseif (\get_class($data) === '__PHP_Incomplete_Class') { - $accessor = new \ArrayObject($data); - $value = (string) $accessor['__PHP_Incomplete_Class_Name']; - } elseif (method_exists($data, '__toString')) { - try { - /** @var string $value */ - $value = $data->__toString(); - } catch (\Throwable) { - // if the toString method is failing, use the default behavior - /** @var null|scalar|array $value */ - $value = json_decode($this->toJson($data, true), true); - } - } else { - // the rest is normalized by json encoding and decoding it - /** @var null|scalar|array $value */ - $value = json_decode($this->toJson($data, true), true); - } - - return [Utils::getClass($data) => $value]; - } - - if (\is_resource($data)) { - return sprintf('[resource(%s)]', get_resource_type($data)); - } - - return '[unknown('.\gettype($data).')]'; - } - - /** - * @return mixed[] - */ - protected function normalizeException(Throwable $e, int $depth = 0) - { - if ($depth > $this->maxNormalizeDepth) { - return ['Over ' . $this->maxNormalizeDepth . ' levels deep, aborting normalization']; - } - - if ($e instanceof \JsonSerializable) { - return (array) $e->jsonSerialize(); - } - - $file = $e->getFile(); - if ($this->basePath !== '') { - $file = preg_replace('{^'.preg_quote($this->basePath).'}', '', $file); - } - - $data = [ - 'class' => Utils::getClass($e), - 'message' => $e->getMessage(), - 'code' => (int) $e->getCode(), - 'file' => $file.':'.$e->getLine(), - ]; - - if ($e instanceof \SoapFault) { - if (isset($e->faultcode)) { - $data['faultcode'] = $e->faultcode; - } - - if (isset($e->faultactor)) { - $data['faultactor'] = $e->faultactor; - } - - if (isset($e->detail)) { - if (\is_string($e->detail)) { - $data['detail'] = $e->detail; - } elseif (\is_object($e->detail) || \is_array($e->detail)) { - $data['detail'] = $this->toJson($e->detail, true); - } - } - } - - $trace = $e->getTrace(); - foreach ($trace as $frame) { - if (isset($frame['file'], $frame['line'])) { - $file = $frame['file']; - if ($this->basePath !== '') { - $file = preg_replace('{^'.preg_quote($this->basePath).'}', '', $file); - } - $data['trace'][] = $file.':'.$frame['line']; - } - } - - if (($previous = $e->getPrevious()) instanceof \Throwable) { - $data['previous'] = $this->normalizeException($previous, $depth + 1); - } - - return $data; - } - - /** - * Return the JSON representation of a value - * - * @param mixed $data - * @throws \RuntimeException if encoding fails and errors are not ignored - * @return string if encoding fails and ignoreErrors is true 'null' is returned - */ - protected function toJson($data, bool $ignoreErrors = false): string - { - return Utils::jsonEncode($data, $this->jsonEncodeOptions, $ignoreErrors); - } - - protected function formatDate(\DateTimeInterface $date): string - { - // in case the date format isn't custom then we defer to the custom DateTimeImmutable - // formatting logic, which will pick the right format based on whether useMicroseconds is on - if ($this->dateFormat === self::SIMPLE_DATE && $date instanceof DateTimeImmutable) { - return (string) $date; - } - - return $date->format($this->dateFormat); - } - - /** - * @return $this - */ - public function addJsonEncodeOption(int $option): self - { - $this->jsonEncodeOptions |= $option; - - return $this; - } - - /** - * @return $this - */ - public function removeJsonEncodeOption(int $option): self - { - $this->jsonEncodeOptions &= ~$option; - - return $this; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php deleted file mode 100644 index ec73a0e..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/ScalarFormatter.php +++ /dev/null @@ -1,49 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\LogRecord; - -/** - * Formats data into an associative array of scalar (+ null) values. - * Objects and arrays will be JSON encoded. - * - * @author Andrew Lawson - */ -class ScalarFormatter extends NormalizerFormatter -{ - /** - * @inheritDoc - * - * @phpstan-return array $record - */ - public function format(LogRecord $record): array - { - $result = []; - foreach ($record->toArray() as $key => $value) { - $result[$key] = $this->toScalar($value); - } - - return $result; - } - - protected function toScalar(mixed $value): string|int|float|bool|null - { - $normalized = $this->normalize($value); - - if (\is_array($normalized)) { - return $this->toJson($normalized, true); - } - - return $normalized; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php deleted file mode 100644 index ccaddf7..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/SyslogFormatter.php +++ /dev/null @@ -1,65 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Serializes a log message according to RFC 5424 - * - * @author Dalibor Karlović - * @author Renat Gabdullin - */ -class SyslogFormatter extends LineFormatter -{ - private const SYSLOG_FACILITY_USER = 1; - private const FORMAT = "<%extra.priority%>1 %datetime% %extra.hostname% %extra.app-name% %extra.procid% %channel% %extra.structured-data% %level_name%: %message% %context% %extra%\n"; - private const NILVALUE = '-'; - - private string $hostname; - private int $procid; - - public function __construct(private string $applicationName = self::NILVALUE) - { - parent::__construct(self::FORMAT, 'Y-m-d\TH:i:s.uP', true, true); - $this->hostname = (string) gethostname(); - $this->procid = (int) getmypid(); - } - - public function format(LogRecord $record): string - { - $record->extra = $this->formatExtra($record); - - return parent::format($record); - } - - /** - * @return array - */ - private function formatExtra(LogRecord $record): array - { - $extra = $record->extra; - $extra['app-name'] = $this->applicationName; - $extra['hostname'] = $this->hostname; - $extra['procid'] = $this->procid; - $extra['priority'] = self::calculatePriority($record->level); - $extra['structured-data'] = self::NILVALUE; - - return $extra; - } - - private static function calculatePriority(Level $level): int - { - return (self::SYSLOG_FACILITY_USER * 8) + $level->toRFC5424Level(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php b/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php deleted file mode 100644 index 28a1dee..0000000 --- a/vendor/monolog/monolog/src/Monolog/Formatter/WildfireFormatter.php +++ /dev/null @@ -1,139 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Formatter; - -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Serializes a log message according to Wildfire's header requirements - * - * @author Eric Clemmons (@ericclemmons) - * @author Christophe Coevoet - * @author Kirill chEbba Chebunin - */ -class WildfireFormatter extends NormalizerFormatter -{ - /** - * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format - * - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(?string $dateFormat = null) - { - parent::__construct($dateFormat); - - // http headers do not like non-ISO-8559-1 characters - $this->removeJsonEncodeOption(JSON_UNESCAPED_UNICODE); - } - - /** - * Translates Monolog log levels to Wildfire levels. - * - * @return 'LOG'|'INFO'|'WARN'|'ERROR' - */ - private function toWildfireLevel(Level $level): string - { - return match ($level) { - Level::Debug => 'LOG', - Level::Info => 'INFO', - Level::Notice => 'INFO', - Level::Warning => 'WARN', - Level::Error => 'ERROR', - Level::Critical => 'ERROR', - Level::Alert => 'ERROR', - Level::Emergency => 'ERROR', - }; - } - - /** - * @inheritDoc - */ - public function format(LogRecord $record): string - { - // Retrieve the line and file if set and remove them from the formatted extra - $file = $line = ''; - if (isset($record->extra['file'])) { - $file = $record->extra['file']; - unset($record->extra['file']); - } - if (isset($record->extra['line'])) { - $line = $record->extra['line']; - unset($record->extra['line']); - } - - $message = ['message' => $record->message]; - $handleError = false; - if (\count($record->context) > 0) { - $message['context'] = $this->normalize($record->context); - $handleError = true; - } - if (\count($record->extra) > 0) { - $message['extra'] = $this->normalize($record->extra); - $handleError = true; - } - if (\count($message) === 1) { - $message = reset($message); - } - - if (\is_array($message) && isset($message['context']['table'])) { - $type = 'TABLE'; - $label = $record->channel .': '. $record->message; - $message = $message['context']['table']; - } else { - $type = $this->toWildfireLevel($record->level); - $label = $record->channel; - } - - // Create JSON object describing the appearance of the message in the console - $json = $this->toJson([ - [ - 'Type' => $type, - 'File' => $file, - 'Line' => $line, - 'Label' => $label, - ], - $message, - ], $handleError); - - // The message itself is a serialization of the above JSON object + it's length - return sprintf( - '%d|%s|', - \strlen($json), - $json - ); - } - - /** - * @inheritDoc - * - * @phpstan-return never - */ - public function formatBatch(array $records) - { - throw new \BadMethodCallException('Batch formatting does not make sense for the WildfireFormatter'); - } - - /** - * @inheritDoc - * - * @return null|scalar|array|object - */ - protected function normalize(mixed $data, int $depth = 0): mixed - { - if (\is_object($data) && !$data instanceof \DateTimeInterface) { - return $data; - } - - return parent::normalize($data, $depth); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php deleted file mode 100644 index 61d45d5..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/AbstractHandler.php +++ /dev/null @@ -1,104 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Logger; -use Monolog\ResettableInterface; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Base Handler class providing basic level/bubble support - * - * @author Jordi Boggiano - */ -abstract class AbstractHandler extends Handler implements ResettableInterface -{ - protected Level $level = Level::Debug; - protected bool $bubble = true; - - /** - * @param int|string|Level|LogLevel::* $level The minimum logging level at which this handler will be triggered - * @param bool $bubble Whether the messages that are handled can bubble up the stack or not - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true) - { - $this->setLevel($level); - $this->bubble = $bubble; - } - - /** - * @inheritDoc - */ - public function isHandling(LogRecord $record): bool - { - return $record->level->value >= $this->level->value; - } - - /** - * Sets minimum logging level at which this handler will be triggered. - * - * @param Level|LogLevel::* $level Level or level name - * @return $this - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function setLevel(int|string|Level $level): self - { - $this->level = Logger::toMonologLevel($level); - - return $this; - } - - /** - * Gets minimum logging level at which this handler will be triggered. - */ - public function getLevel(): Level - { - return $this->level; - } - - /** - * Sets the bubbling behavior. - * - * @param bool $bubble true means that this handler allows bubbling. - * false means that bubbling is not permitted. - * @return $this - */ - public function setBubble(bool $bubble): self - { - $this->bubble = $bubble; - - return $this; - } - - /** - * Gets the bubbling behavior. - * - * @return bool true means that this handler allows bubbling. - * false means that bubbling is not permitted. - */ - public function getBubble(): bool - { - return $this->bubble; - } - - /** - * @inheritDoc - */ - public function reset(): void - { - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php deleted file mode 100644 index de13a76..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/AbstractProcessingHandler.php +++ /dev/null @@ -1,60 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\LogRecord; - -/** - * Base Handler class providing the Handler structure, including processors and formatters - * - * Classes extending it should (in most cases) only implement write($record) - * - * @author Jordi Boggiano - * @author Christophe Coevoet - */ -abstract class AbstractProcessingHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface -{ - use ProcessableHandlerTrait; - use FormattableHandlerTrait; - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if (!$this->isHandling($record)) { - return false; - } - - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - - $record->formatted = $this->getFormatter()->format($record); - - $this->write($record); - - return false === $this->bubble; - } - - /** - * Writes the (already formatted) record down to the log of the implementing handler - */ - abstract protected function write(LogRecord $record): void; - - public function reset(): void - { - parent::reset(); - - $this->resetProcessors(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php deleted file mode 100644 index 4a70317..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/AbstractSyslogHandler.php +++ /dev/null @@ -1,95 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\LineFormatter; - -/** - * Common syslog functionality - */ -abstract class AbstractSyslogHandler extends AbstractProcessingHandler -{ - protected int $facility; - - /** - * List of valid log facility names. - * @var array - */ - protected array $facilities = [ - 'auth' => \LOG_AUTH, - 'authpriv' => \LOG_AUTHPRIV, - 'cron' => \LOG_CRON, - 'daemon' => \LOG_DAEMON, - 'kern' => \LOG_KERN, - 'lpr' => \LOG_LPR, - 'mail' => \LOG_MAIL, - 'news' => \LOG_NEWS, - 'syslog' => \LOG_SYSLOG, - 'user' => \LOG_USER, - 'uucp' => \LOG_UUCP, - ]; - - /** - * Translates Monolog log levels to syslog log priorities. - */ - protected function toSyslogPriority(Level $level): int - { - return $level->toRFC5424Level(); - } - - /** - * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant - */ - public function __construct(string|int $facility = \LOG_USER, int|string|Level $level = Level::Debug, bool $bubble = true) - { - parent::__construct($level, $bubble); - - if (!\defined('PHP_WINDOWS_VERSION_BUILD')) { - $this->facilities['local0'] = \LOG_LOCAL0; - $this->facilities['local1'] = \LOG_LOCAL1; - $this->facilities['local2'] = \LOG_LOCAL2; - $this->facilities['local3'] = \LOG_LOCAL3; - $this->facilities['local4'] = \LOG_LOCAL4; - $this->facilities['local5'] = \LOG_LOCAL5; - $this->facilities['local6'] = \LOG_LOCAL6; - $this->facilities['local7'] = \LOG_LOCAL7; - } else { - $this->facilities['local0'] = 128; // LOG_LOCAL0 - $this->facilities['local1'] = 136; // LOG_LOCAL1 - $this->facilities['local2'] = 144; // LOG_LOCAL2 - $this->facilities['local3'] = 152; // LOG_LOCAL3 - $this->facilities['local4'] = 160; // LOG_LOCAL4 - $this->facilities['local5'] = 168; // LOG_LOCAL5 - $this->facilities['local6'] = 176; // LOG_LOCAL6 - $this->facilities['local7'] = 184; // LOG_LOCAL7 - } - - // convert textual description of facility to syslog constant - if (\is_string($facility) && \array_key_exists(strtolower($facility), $this->facilities)) { - $facility = $this->facilities[strtolower($facility)]; - } elseif (!\in_array($facility, array_values($this->facilities), true)) { - throw new \UnexpectedValueException('Unknown facility value "'.$facility.'" given'); - } - - $this->facility = $facility; - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new LineFormatter('%channel%.%level_name%: %message% %context% %extra%'); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php deleted file mode 100644 index 119f339..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/AmqpHandler.php +++ /dev/null @@ -1,170 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Gelf\Message as GelfMessage; -use Monolog\Level; -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\JsonFormatter; -use PhpAmqpLib\Message\AMQPMessage; -use PhpAmqpLib\Channel\AMQPChannel; -use AMQPExchange; -use Monolog\LogRecord; - -class AmqpHandler extends AbstractProcessingHandler -{ - protected AMQPExchange|AMQPChannel $exchange; - - /** @var array */ - private array $extraAttributes = []; - - protected string $exchangeName; - - /** - * @param AMQPExchange|AMQPChannel $exchange AMQPExchange (php AMQP ext) or PHP AMQP lib channel, ready for use - * @param string|null $exchangeName Optional exchange name, for AMQPChannel (PhpAmqpLib) only - */ - public function __construct(AMQPExchange|AMQPChannel $exchange, ?string $exchangeName = null, int|string|Level $level = Level::Debug, bool $bubble = true) - { - if ($exchange instanceof AMQPChannel) { - $this->exchangeName = (string) $exchangeName; - } elseif ($exchangeName !== null) { - @trigger_error('The $exchangeName parameter can only be passed when using PhpAmqpLib, if using an AMQPExchange instance configure it beforehand', E_USER_DEPRECATED); - } - $this->exchange = $exchange; - - parent::__construct($level, $bubble); - } - - /** - * @return array - */ - public function getExtraAttributes(): array - { - return $this->extraAttributes; - } - - /** - * Configure extra attributes to pass to the AMQPExchange (if you are using the amqp extension) - * - * @param array $extraAttributes One of content_type, content_encoding, - * message_id, user_id, app_id, delivery_mode, - * priority, timestamp, expiration, type - * or reply_to, headers. - * @return $this - */ - public function setExtraAttributes(array $extraAttributes): self - { - $this->extraAttributes = $extraAttributes; - - return $this; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $data = $record->formatted; - $routingKey = $this->getRoutingKey($record); - - if($data instanceof GelfMessage) { - $data = json_encode($data->toArray()); - } - - if ($this->exchange instanceof AMQPExchange) { - $attributes = [ - 'delivery_mode' => 2, - 'content_type' => 'application/json', - ]; - if (\count($this->extraAttributes) > 0) { - $attributes = array_merge($attributes, $this->extraAttributes); - } - $this->exchange->publish( - $data, - $routingKey, - 0, - $attributes - ); - } else { - $this->exchange->basic_publish( - $this->createAmqpMessage($data), - $this->exchangeName, - $routingKey - ); - } - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - if ($this->exchange instanceof AMQPExchange) { - parent::handleBatch($records); - - return; - } - - foreach ($records as $record) { - if (!$this->isHandling($record)) { - continue; - } - - $record = $this->processRecord($record); - $data = $this->getFormatter()->format($record); - - if($data instanceof GelfMessage) { - $data = json_encode($data->toArray()); - } - - $this->exchange->batch_basic_publish( - $this->createAmqpMessage($data), - $this->exchangeName, - $this->getRoutingKey($record) - ); - } - - $this->exchange->publish_batch(); - } - - /** - * Gets the routing key for the AMQP exchange - */ - protected function getRoutingKey(LogRecord $record): string - { - $routingKey = sprintf('%s.%s', $record->level->name, $record->channel); - - return strtolower($routingKey); - } - - private function createAmqpMessage(string $data): AMQPMessage - { - $attributes = [ - 'delivery_mode' => 2, - 'content_type' => 'application/json', - ]; - if (\count($this->extraAttributes) > 0) { - $attributes = array_merge($attributes, $this->extraAttributes); - } - - return new AMQPMessage($data, $attributes); - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php deleted file mode 100644 index 0d75cb3..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/BrowserConsoleHandler.php +++ /dev/null @@ -1,300 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\LineFormatter; -use Monolog\Utils; -use Monolog\LogRecord; -use Monolog\Level; - -use function headers_list; -use function stripos; - -/** - * Handler sending logs to browser's javascript console with no browser extension required - * - * @author Olivier Poitrey - */ -class BrowserConsoleHandler extends AbstractProcessingHandler -{ - protected static bool $initialized = false; - - /** @var LogRecord[] */ - protected static array $records = []; - - protected const FORMAT_HTML = 'html'; - protected const FORMAT_JS = 'js'; - protected const FORMAT_UNKNOWN = 'unknown'; - - /** - * @inheritDoc - * - * Formatted output may contain some formatting markers to be transferred to `console.log` using the %c format. - * - * Example of formatted string: - * - * You can do [[blue text]]{color: blue} or [[green background]]{background-color: green; color: white} - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new LineFormatter('[[%channel%]]{macro: autolabel} [[%level_name%]]{font-weight: bold} %message%'); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - // Accumulate records - static::$records[] = $record; - - // Register shutdown handler if not already done - if (!static::$initialized) { - static::$initialized = true; - $this->registerShutdownFunction(); - } - } - - /** - * Convert records to javascript console commands and send it to the browser. - * This method is automatically called on PHP shutdown if output is HTML or Javascript. - */ - public static function send(): void - { - $format = static::getResponseFormat(); - if ($format === self::FORMAT_UNKNOWN) { - return; - } - - if (\count(static::$records) > 0) { - if ($format === self::FORMAT_HTML) { - static::writeOutput(''); - } else { // js format - static::writeOutput(self::generateScript()); - } - static::resetStatic(); - } - } - - public function close(): void - { - self::resetStatic(); - } - - public function reset(): void - { - parent::reset(); - - self::resetStatic(); - } - - /** - * Forget all logged records - */ - public static function resetStatic(): void - { - static::$records = []; - } - - /** - * Wrapper for register_shutdown_function to allow overriding - */ - protected function registerShutdownFunction(): void - { - if (PHP_SAPI !== 'cli') { - register_shutdown_function(['Monolog\Handler\BrowserConsoleHandler', 'send']); - } - } - - /** - * Wrapper for echo to allow overriding - */ - protected static function writeOutput(string $str): void - { - echo $str; - } - - /** - * Checks the format of the response - * - * If Content-Type is set to application/javascript or text/javascript -> js - * If Content-Type is set to text/html, or is unset -> html - * If Content-Type is anything else -> unknown - * - * @return string One of 'js', 'html' or 'unknown' - * @phpstan-return self::FORMAT_* - */ - protected static function getResponseFormat(): string - { - // Check content type - foreach (headers_list() as $header) { - if (stripos($header, 'content-type:') === 0) { - return static::getResponseFormatFromContentType($header); - } - } - - return self::FORMAT_HTML; - } - - /** - * @return string One of 'js', 'html' or 'unknown' - * @phpstan-return self::FORMAT_* - */ - protected static function getResponseFormatFromContentType(string $contentType): string - { - // This handler only works with HTML and javascript outputs - // text/javascript is obsolete in favour of application/javascript, but still used - if (stripos($contentType, 'application/javascript') !== false || stripos($contentType, 'text/javascript') !== false) { - return self::FORMAT_JS; - } - - if (stripos($contentType, 'text/html') !== false) { - return self::FORMAT_HTML; - } - - return self::FORMAT_UNKNOWN; - } - - private static function generateScript(): string - { - $script = []; - foreach (static::$records as $record) { - $context = self::dump('Context', $record->context); - $extra = self::dump('Extra', $record->extra); - - if (\count($context) === 0 && \count($extra) === 0) { - $script[] = self::call_array(self::getConsoleMethodForLevel($record->level), self::handleStyles($record->formatted)); - } else { - $script = array_merge( - $script, - [self::call_array('groupCollapsed', self::handleStyles($record->formatted))], - $context, - $extra, - [self::call('groupEnd')] - ); - } - } - - return "(function (c) {if (c && c.groupCollapsed) {\n" . implode("\n", $script) . "\n}})(console);"; - } - - private static function getConsoleMethodForLevel(Level $level): string - { - return match ($level) { - Level::Debug => 'debug', - Level::Info, Level::Notice => 'info', - Level::Warning => 'warn', - Level::Error, Level::Critical, Level::Alert, Level::Emergency => 'error', - }; - } - - /** - * @return string[] - */ - private static function handleStyles(string $formatted): array - { - $args = []; - $format = '%c' . $formatted; - preg_match_all('/\[\[(.*?)\]\]\{([^}]*)\}/s', $format, $matches, PREG_OFFSET_CAPTURE | PREG_SET_ORDER); - - foreach (array_reverse($matches) as $match) { - $args[] = '"font-weight: normal"'; - $args[] = self::quote(self::handleCustomStyles($match[2][0], $match[1][0])); - - $pos = $match[0][1]; - $format = Utils::substr($format, 0, $pos) . '%c' . $match[1][0] . '%c' . Utils::substr($format, $pos + \strlen($match[0][0])); - } - - $args[] = self::quote('font-weight: normal'); - $args[] = self::quote($format); - - return array_reverse($args); - } - - private static function handleCustomStyles(string $style, string $string): string - { - static $colors = ['blue', 'green', 'red', 'magenta', 'orange', 'black', 'grey']; - static $labels = []; - - $style = preg_replace_callback('/macro\s*:(.*?)(?:;|$)/', function (array $m) use ($string, &$colors, &$labels) { - if (trim($m[1]) === 'autolabel') { - // Format the string as a label with consistent auto assigned background color - if (!isset($labels[$string])) { - $labels[$string] = $colors[\count($labels) % \count($colors)]; - } - $color = $labels[$string]; - - return "background-color: $color; color: white; border-radius: 3px; padding: 0 2px 0 2px"; - } - - return $m[1]; - }, $style); - - if (null === $style) { - $pcreErrorCode = preg_last_error(); - - throw new \RuntimeException('Failed to run preg_replace_callback: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); - } - - return $style; - } - - /** - * @param mixed[] $dict - * @return mixed[] - */ - private static function dump(string $title, array $dict): array - { - $script = []; - $dict = array_filter($dict); - if (\count($dict) === 0) { - return $script; - } - $script[] = self::call('log', self::quote('%c%s'), self::quote('font-weight: bold'), self::quote($title)); - foreach ($dict as $key => $value) { - $value = json_encode($value); - if (false === $value) { - $value = self::quote(''); - } - $script[] = self::call('log', self::quote('%s: %o'), self::quote((string) $key), $value); - } - - return $script; - } - - private static function quote(string $arg): string - { - return '"' . addcslashes($arg, "\"\n\\") . '"'; - } - - /** - * @param mixed $args - */ - private static function call(...$args): string - { - $method = array_shift($args); - if (!\is_string($method)) { - throw new \UnexpectedValueException('Expected the first arg to be a string, got: '.var_export($method, true)); - } - - return self::call_array($method, $args); - } - - /** - * @param mixed[] $args - */ - private static function call_array(string $method, array $args): string - { - return 'c.' . $method . '(' . implode(', ', $args) . ');'; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php deleted file mode 100644 index c241c32..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/BufferHandler.php +++ /dev/null @@ -1,165 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\ResettableInterface; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Buffers all records until closing the handler and then pass them as batch. - * - * This is useful for a MailHandler to send only one mail per request instead of - * sending one per log message. - * - * @author Christophe Coevoet - */ -class BufferHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface -{ - use ProcessableHandlerTrait; - - protected HandlerInterface $handler; - - protected int $bufferSize = 0; - - protected int $bufferLimit; - - protected bool $flushOnOverflow; - - /** @var LogRecord[] */ - protected array $buffer = []; - - protected bool $initialized = false; - - /** - * @param HandlerInterface $handler Handler. - * @param int $bufferLimit How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. - * @param bool $flushOnOverflow If true, the buffer is flushed when the max size has been reached, by default oldest entries are discarded - */ - public function __construct(HandlerInterface $handler, int $bufferLimit = 0, int|string|Level $level = Level::Debug, bool $bubble = true, bool $flushOnOverflow = false) - { - parent::__construct($level, $bubble); - $this->handler = $handler; - $this->bufferLimit = $bufferLimit; - $this->flushOnOverflow = $flushOnOverflow; - } - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if ($record->level->isLowerThan($this->level)) { - return false; - } - - if (!$this->initialized) { - // __destructor() doesn't get called on Fatal errors - register_shutdown_function([$this, 'close']); - $this->initialized = true; - } - - if ($this->bufferLimit > 0 && $this->bufferSize === $this->bufferLimit) { - if ($this->flushOnOverflow) { - $this->flush(); - } else { - array_shift($this->buffer); - $this->bufferSize--; - } - } - - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - - $this->buffer[] = $record; - $this->bufferSize++; - - return false === $this->bubble; - } - - public function flush(): void - { - if ($this->bufferSize === 0) { - return; - } - - $this->handler->handleBatch($this->buffer); - $this->clear(); - } - - public function __destruct() - { - // suppress the parent behavior since we already have register_shutdown_function() - // to call close(), and the reference contained there will prevent this from being - // GC'd until the end of the request - } - - /** - * @inheritDoc - */ - public function close(): void - { - $this->flush(); - - $this->handler->close(); - } - - /** - * Clears the buffer without flushing any messages down to the wrapped handler. - */ - public function clear(): void - { - $this->bufferSize = 0; - $this->buffer = []; - } - - public function reset(): void - { - $this->flush(); - - parent::reset(); - - $this->resetProcessors(); - - if ($this->handler instanceof ResettableInterface) { - $this->handler->reset(); - } - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - if ($this->handler instanceof FormattableHandlerInterface) { - $this->handler->setFormatter($formatter); - - return $this; - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($this->handler).' does not support formatters.'); - } - - /** - * @inheritDoc - */ - public function getFormatter(): FormatterInterface - { - if ($this->handler instanceof FormattableHandlerInterface) { - return $this->handler->getFormatter(); - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($this->handler).' does not support formatters.'); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php deleted file mode 100644 index 8b1cd5a..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/ChromePHPHandler.php +++ /dev/null @@ -1,192 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\ChromePHPFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; -use Monolog\DateTimeImmutable; - -/** - * Handler sending logs to the ChromePHP extension (http://www.chromephp.com/) - * - * This also works out of the box with Firefox 43+ - * - * @author Christophe Coevoet - */ -class ChromePHPHandler extends AbstractProcessingHandler -{ - use WebRequestRecognizerTrait; - - /** - * Version of the extension - */ - protected const VERSION = '4.0'; - - /** - * Header name - */ - protected const HEADER_NAME = 'X-ChromeLogger-Data'; - - /** - * Regular expression to detect supported browsers (matches any Chrome, or Firefox 43+) - */ - protected const USER_AGENT_REGEX = '{\b(?:Chrome/\d+(?:\.\d+)*|HeadlessChrome|Firefox/(?:4[3-9]|[5-9]\d|\d{3,})(?:\.\d)*)\b}'; - - protected static bool $initialized = false; - - /** - * Tracks whether we sent too much data - * - * Chrome limits the headers to 4KB, so when we sent 3KB we stop sending - */ - protected static bool $overflowed = false; - - /** @var mixed[] */ - protected static array $json = [ - 'version' => self::VERSION, - 'columns' => ['label', 'log', 'backtrace', 'type'], - 'rows' => [], - ]; - - protected static bool $sendHeaders = true; - - /** - * @throws \RuntimeException If the function json_encode does not exist - */ - public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true) - { - parent::__construct($level, $bubble); - if (!\function_exists('json_encode')) { - throw new \RuntimeException('PHP\'s json extension is required to use Monolog\'s ChromePHPHandler'); - } - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - if (!$this->isWebRequest()) { - return; - } - - $messages = []; - - foreach ($records as $record) { - if ($record->level < $this->level) { - continue; - } - - $message = $this->processRecord($record); - $messages[] = $message; - } - - if (\count($messages) > 0) { - $messages = $this->getFormatter()->formatBatch($messages); - self::$json['rows'] = array_merge(self::$json['rows'], $messages); - $this->send(); - } - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new ChromePHPFormatter(); - } - - /** - * Creates & sends header for a record - * - * @see sendHeader() - * @see send() - */ - protected function write(LogRecord $record): void - { - if (!$this->isWebRequest()) { - return; - } - - self::$json['rows'][] = $record->formatted; - - $this->send(); - } - - /** - * Sends the log header - * - * @see sendHeader() - */ - protected function send(): void - { - if (self::$overflowed || !self::$sendHeaders) { - return; - } - - if (!self::$initialized) { - self::$initialized = true; - - self::$sendHeaders = $this->headersAccepted(); - if (!self::$sendHeaders) { - return; - } - - self::$json['request_uri'] = $_SERVER['REQUEST_URI'] ?? ''; - } - - $json = Utils::jsonEncode(self::$json, Utils::DEFAULT_JSON_FLAGS & ~JSON_UNESCAPED_UNICODE, true); - $data = base64_encode($json); - if (\strlen($data) > 3 * 1024) { - self::$overflowed = true; - - $record = new LogRecord( - message: 'Incomplete logs, chrome header size limit reached', - level: Level::Warning, - channel: 'monolog', - datetime: new DateTimeImmutable(true), - ); - self::$json['rows'][\count(self::$json['rows']) - 1] = $this->getFormatter()->format($record); - $json = Utils::jsonEncode(self::$json, Utils::DEFAULT_JSON_FLAGS & ~JSON_UNESCAPED_UNICODE, true); - $data = base64_encode($json); - } - - if (trim($data) !== '') { - $this->sendHeader(static::HEADER_NAME, $data); - } - } - - /** - * Send header string to the client - */ - protected function sendHeader(string $header, string $content): void - { - if (!headers_sent() && self::$sendHeaders) { - header(sprintf('%s: %s', $header, $content)); - } - } - - /** - * Verifies if the headers are accepted by the current user agent - */ - protected function headersAccepted(): bool - { - if (!isset($_SERVER['HTTP_USER_AGENT'])) { - return false; - } - - return preg_match(static::USER_AGENT_REGEX, $_SERVER['HTTP_USER_AGENT']) === 1; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php deleted file mode 100644 index 8d9c10e..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/CouchDBHandler.php +++ /dev/null @@ -1,97 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\JsonFormatter; -use Monolog\Level; -use Monolog\LogRecord; - -/** - * CouchDB handler - * - * @author Markus Bachmann - * @phpstan-type Options array{ - * host: string, - * port: int, - * dbname: string, - * username: string|null, - * password: string|null - * } - * @phpstan-type InputOptions array{ - * host?: string, - * port?: int, - * dbname?: string, - * username?: string|null, - * password?: string|null - * } - */ -class CouchDBHandler extends AbstractProcessingHandler -{ - /** - * @var mixed[] - * @phpstan-var Options - */ - private array $options; - - /** - * @param mixed[] $options - * - * @phpstan-param InputOptions $options - */ - public function __construct(array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true) - { - $this->options = array_merge([ - 'host' => 'localhost', - 'port' => 5984, - 'dbname' => 'logger', - 'username' => null, - 'password' => null, - ], $options); - - parent::__construct($level, $bubble); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $basicAuth = null; - if (null !== $this->options['username'] && null !== $this->options['password']) { - $basicAuth = sprintf('%s:%s@', $this->options['username'], $this->options['password']); - } - - $url = 'http://'.$basicAuth.$this->options['host'].':'.$this->options['port'].'/'.$this->options['dbname']; - $context = stream_context_create([ - 'http' => [ - 'method' => 'POST', - 'content' => $record->formatted, - 'ignore_errors' => true, - 'max_redirects' => 0, - 'header' => 'Content-type: application/json', - ], - ]); - - if (false === @file_get_contents($url, false, $context)) { - throw new \RuntimeException(sprintf('Could not connect to %s', $url)); - } - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new JsonFormatter(JsonFormatter::BATCH_MODE_JSON, false); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php deleted file mode 100644 index a76bf40..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/CubeHandler.php +++ /dev/null @@ -1,167 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Logs to Cube. - * - * @link https://github.com/square/cube/wiki - * @author Wan Chen - * @deprecated Since 2.8.0 and 3.2.0, Cube appears abandoned and thus we will drop this handler in Monolog 4 - */ -class CubeHandler extends AbstractProcessingHandler -{ - private ?\Socket $udpConnection = null; - private ?\CurlHandle $httpConnection = null; - private string $scheme; - private string $host; - private int $port; - /** @var string[] */ - private array $acceptedSchemes = ['http', 'udp']; - - /** - * Create a Cube handler - * - * @throws \UnexpectedValueException when given url is not a valid url. - * A valid url must consist of three parts : protocol://host:port - * Only valid protocols used by Cube are http and udp - */ - public function __construct(string $url, int|string|Level $level = Level::Debug, bool $bubble = true) - { - $urlInfo = parse_url($url); - - if ($urlInfo === false || !isset($urlInfo['scheme'], $urlInfo['host'], $urlInfo['port'])) { - throw new \UnexpectedValueException('URL "'.$url.'" is not valid'); - } - - if (!\in_array($urlInfo['scheme'], $this->acceptedSchemes, true)) { - throw new \UnexpectedValueException( - 'Invalid protocol (' . $urlInfo['scheme'] . ').' - . ' Valid options are ' . implode(', ', $this->acceptedSchemes) - ); - } - - $this->scheme = $urlInfo['scheme']; - $this->host = $urlInfo['host']; - $this->port = $urlInfo['port']; - - parent::__construct($level, $bubble); - } - - /** - * Establish a connection to an UDP socket - * - * @throws \LogicException when unable to connect to the socket - * @throws MissingExtensionException when there is no socket extension - */ - protected function connectUdp(): void - { - if (!\extension_loaded('sockets')) { - throw new MissingExtensionException('The sockets extension is required to use udp URLs with the CubeHandler'); - } - - $udpConnection = socket_create(AF_INET, SOCK_DGRAM, 0); - if (false === $udpConnection) { - throw new \LogicException('Unable to create a socket'); - } - - $this->udpConnection = $udpConnection; - if (!socket_connect($this->udpConnection, $this->host, $this->port)) { - throw new \LogicException('Unable to connect to the socket at ' . $this->host . ':' . $this->port); - } - } - - /** - * Establish a connection to an http server - * - * @throws \LogicException when unable to connect to the socket - * @throws MissingExtensionException when no curl extension - */ - protected function connectHttp(): void - { - if (!\extension_loaded('curl')) { - throw new MissingExtensionException('The curl extension is required to use http URLs with the CubeHandler'); - } - - $httpConnection = curl_init('http://'.$this->host.':'.$this->port.'/1.0/event/put'); - if (false === $httpConnection) { - throw new \LogicException('Unable to connect to ' . $this->host . ':' . $this->port); - } - - $this->httpConnection = $httpConnection; - curl_setopt($this->httpConnection, CURLOPT_CUSTOMREQUEST, "POST"); - curl_setopt($this->httpConnection, CURLOPT_RETURNTRANSFER, true); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $date = $record->datetime; - - $data = ['time' => $date->format('Y-m-d\TH:i:s.uO')]; - $context = $record->context; - - if (isset($context['type'])) { - $data['type'] = $context['type']; - unset($context['type']); - } else { - $data['type'] = $record->channel; - } - - $data['data'] = $context; - $data['data']['level'] = $record->level; - - if ($this->scheme === 'http') { - $this->writeHttp(Utils::jsonEncode($data)); - } else { - $this->writeUdp(Utils::jsonEncode($data)); - } - } - - private function writeUdp(string $data): void - { - if (null === $this->udpConnection) { - $this->connectUdp(); - } - - if (null === $this->udpConnection) { - throw new \LogicException('No UDP socket could be opened'); - } - - socket_send($this->udpConnection, $data, \strlen($data), 0); - } - - private function writeHttp(string $data): void - { - if (null === $this->httpConnection) { - $this->connectHttp(); - } - - if (null === $this->httpConnection) { - throw new \LogicException('No connection could be established'); - } - - curl_setopt($this->httpConnection, CURLOPT_POSTFIELDS, '['.$data.']'); - curl_setopt($this->httpConnection, CURLOPT_HTTPHEADER, [ - 'Content-Type: application/json', - 'Content-Length: ' . \strlen('['.$data.']'), - ]); - - Curl\Util::execute($this->httpConnection, 5, false); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php b/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php deleted file mode 100644 index f102811..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/Curl/Util.php +++ /dev/null @@ -1,69 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler\Curl; - -use CurlHandle; - -/** - * This class is marked as internal and it is not under the BC promise of the package. - * - * @internal - */ -final class Util -{ - /** @var array */ - private static array $retriableErrorCodes = [ - CURLE_COULDNT_RESOLVE_HOST, - CURLE_COULDNT_CONNECT, - CURLE_HTTP_NOT_FOUND, - CURLE_READ_ERROR, - CURLE_OPERATION_TIMEOUTED, - CURLE_HTTP_POST_ERROR, - CURLE_SSL_CONNECT_ERROR, - ]; - - /** - * Executes a CURL request with optional retries and exception on failure - * - * @param CurlHandle $ch curl handler - * @return bool|string @see curl_exec - */ - public static function execute(CurlHandle $ch, int $retries = 5, bool $closeAfterDone = true) - { - while ($retries--) { - $curlResponse = curl_exec($ch); - if ($curlResponse === false) { - $curlErrno = curl_errno($ch); - - if (false === \in_array($curlErrno, self::$retriableErrorCodes, true) || $retries === 0) { - $curlError = curl_error($ch); - - if ($closeAfterDone) { - curl_close($ch); - } - - throw new \RuntimeException(sprintf('Curl error (code %d): %s', $curlErrno, $curlError)); - } - - continue; - } - - if ($closeAfterDone) { - curl_close($ch); - } - - return $curlResponse; - } - - return false; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php deleted file mode 100644 index 873a4b8..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/DeduplicationHandler.php +++ /dev/null @@ -1,174 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Logger; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Simple handler wrapper that deduplicates log records across multiple requests - * - * It also includes the BufferHandler functionality and will buffer - * all messages until the end of the request or flush() is called. - * - * This works by storing all log records' messages above $deduplicationLevel - * to the file specified by $deduplicationStore. When further logs come in at the end of the - * request (or when flush() is called), all those above $deduplicationLevel are checked - * against the existing stored logs. If they match and the timestamps in the stored log is - * not older than $time seconds, the new log record is discarded. If no log record is new, the - * whole data set is discarded. - * - * This is mainly useful in combination with Mail handlers or things like Slack or HipChat handlers - * that send messages to people, to avoid spamming with the same message over and over in case of - * a major component failure like a database server being down which makes all requests fail in the - * same way. - * - * @author Jordi Boggiano - */ -class DeduplicationHandler extends BufferHandler -{ - protected string $deduplicationStore; - - protected Level $deduplicationLevel; - - protected int $time; - protected bool $gc = false; - - /** - * @param HandlerInterface $handler Handler. - * @param string|null $deduplicationStore The file/path where the deduplication log should be kept - * @param int|string|Level|LogLevel::* $deduplicationLevel The minimum logging level for log records to be looked at for deduplication purposes - * @param int $time The period (in seconds) during which duplicate entries should be suppressed after a given log is sent through - * @param bool $bubble Whether the messages that are handled can bubble up the stack or not - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $deduplicationLevel - */ - public function __construct(HandlerInterface $handler, ?string $deduplicationStore = null, int|string|Level $deduplicationLevel = Level::Error, int $time = 60, bool $bubble = true) - { - parent::__construct($handler, 0, Level::Debug, $bubble, false); - - $this->deduplicationStore = $deduplicationStore === null ? sys_get_temp_dir() . '/monolog-dedup-' . substr(md5(__FILE__), 0, 20) .'.log' : $deduplicationStore; - $this->deduplicationLevel = Logger::toMonologLevel($deduplicationLevel); - $this->time = $time; - } - - public function flush(): void - { - if ($this->bufferSize === 0) { - return; - } - - $store = null; - - if (file_exists($this->deduplicationStore)) { - $store = file($this->deduplicationStore, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); - } - - $passthru = null; - - foreach ($this->buffer as $record) { - if ($record->level->value >= $this->deduplicationLevel->value) { - $passthru = $passthru === true || !\is_array($store) || !$this->isDuplicate($store, $record); - if ($passthru) { - $line = $this->buildDeduplicationStoreEntry($record); - file_put_contents($this->deduplicationStore, $line . "\n", FILE_APPEND); - if (!\is_array($store)) { - $store = []; - } - $store[] = $line; - } - } - } - - // default of null is valid as well as if no record matches duplicationLevel we just pass through - if ($passthru === true || $passthru === null) { - $this->handler->handleBatch($this->buffer); - } - - $this->clear(); - - if ($this->gc) { - $this->collectLogs(); - } - } - - /** - * If there is a store entry older than e.g. a day, this method should set `$this->gc` to `true` to trigger garbage collection. - * @param string[] $store The deduplication store - */ - protected function isDuplicate(array $store, LogRecord $record): bool - { - $timestampValidity = $record->datetime->getTimestamp() - $this->time; - $expectedMessage = preg_replace('{[\r\n].*}', '', $record->message); - $yesterday = time() - 86400; - - for ($i = \count($store) - 1; $i >= 0; $i--) { - list($timestamp, $level, $message) = explode(':', $store[$i], 3); - - if ($level === $record->level->getName() && $message === $expectedMessage && $timestamp > $timestampValidity) { - return true; - } - - if ($timestamp < $yesterday) { - $this->gc = true; - } - } - - return false; - } - - /** - * @return string The given record serialized as a single line of text - */ - protected function buildDeduplicationStoreEntry(LogRecord $record): string - { - return $record->datetime->getTimestamp() . ':' . $record->level->getName() . ':' . preg_replace('{[\r\n].*}', '', $record->message); - } - - private function collectLogs(): void - { - if (!file_exists($this->deduplicationStore)) { - return; - } - - $handle = fopen($this->deduplicationStore, 'rw+'); - - if (false === $handle) { - throw new \RuntimeException('Failed to open file for reading and writing: ' . $this->deduplicationStore); - } - - flock($handle, LOCK_EX); - $validLogs = []; - - $timestampValidity = time() - $this->time; - - while (!feof($handle)) { - $log = fgets($handle); - if (\is_string($log) && '' !== $log && substr($log, 0, 10) >= $timestampValidity) { - $validLogs[] = $log; - } - } - - ftruncate($handle, 0); - rewind($handle); - foreach ($validLogs as $log) { - fwrite($handle, $log); - } - - flock($handle, LOCK_UN); - fclose($handle); - - $this->gc = false; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php deleted file mode 100644 index eab9f10..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/DoctrineCouchDBHandler.php +++ /dev/null @@ -1,47 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Formatter\NormalizerFormatter; -use Monolog\Formatter\FormatterInterface; -use Doctrine\CouchDB\CouchDBClient; -use Monolog\LogRecord; - -/** - * CouchDB handler for Doctrine CouchDB ODM - * - * @author Markus Bachmann - */ -class DoctrineCouchDBHandler extends AbstractProcessingHandler -{ - private CouchDBClient $client; - - public function __construct(CouchDBClient $client, int|string|Level $level = Level::Debug, bool $bubble = true) - { - $this->client = $client; - parent::__construct($level, $bubble); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->client->postDocument($record->formatted); - } - - protected function getDefaultFormatter(): FormatterInterface - { - return new NormalizerFormatter; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php deleted file mode 100644 index f1c5a95..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/DynamoDbHandler.php +++ /dev/null @@ -1,80 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Aws\Sdk; -use Aws\DynamoDb\DynamoDbClient; -use Monolog\Formatter\FormatterInterface; -use Aws\DynamoDb\Marshaler; -use Monolog\Formatter\ScalarFormatter; -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Amazon DynamoDB handler (http://aws.amazon.com/dynamodb/) - * - * @link https://github.com/aws/aws-sdk-php/ - * @author Andrew Lawson - */ -class DynamoDbHandler extends AbstractProcessingHandler -{ - public const DATE_FORMAT = 'Y-m-d\TH:i:s.uO'; - - protected DynamoDbClient $client; - - protected string $table; - - protected Marshaler $marshaler; - - public function __construct(DynamoDbClient $client, string $table, int|string|Level $level = Level::Debug, bool $bubble = true) - { - $this->marshaler = new Marshaler; - - $this->client = $client; - $this->table = $table; - - parent::__construct($level, $bubble); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $filtered = $this->filterEmptyFields($record->formatted); - $formatted = $this->marshaler->marshalItem($filtered); - - $this->client->putItem([ - 'TableName' => $this->table, - 'Item' => $formatted, - ]); - } - - /** - * @param mixed[] $record - * @return mixed[] - */ - protected function filterEmptyFields(array $record): array - { - return array_filter($record, function ($value) { - return [] !== $value; - }); - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new ScalarFormatter(self::DATE_FORMAT); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php deleted file mode 100644 index d9b85b4..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/ElasticaHandler.php +++ /dev/null @@ -1,142 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Elastica\Document; -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\ElasticaFormatter; -use Monolog\Level; -use Elastica\Client; -use Elastica\Exception\ExceptionInterface; -use Monolog\LogRecord; - -/** - * Elastic Search handler - * - * Usage example: - * - * $client = new \Elastica\Client(); - * $options = array( - * 'index' => 'elastic_index_name', - * 'type' => 'elastic_doc_type', Types have been removed in Elastica 7 - * ); - * $handler = new ElasticaHandler($client, $options); - * $log = new Logger('application'); - * $log->pushHandler($handler); - * - * @author Jelle Vink - * @phpstan-type Options array{ - * index: string, - * type: string, - * ignore_error: bool - * } - * @phpstan-type InputOptions array{ - * index?: string, - * type?: string, - * ignore_error?: bool - * } - */ -class ElasticaHandler extends AbstractProcessingHandler -{ - protected Client $client; - - /** - * @var mixed[] Handler config options - * @phpstan-var Options - */ - protected array $options; - - /** - * @param Client $client Elastica Client object - * @param mixed[] $options Handler configuration - * - * @phpstan-param InputOptions $options - */ - public function __construct(Client $client, array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true) - { - parent::__construct($level, $bubble); - $this->client = $client; - $this->options = array_merge( - [ - 'index' => 'monolog', // Elastic index name - 'type' => 'record', // Elastic document type - 'ignore_error' => false, // Suppress Elastica exceptions - ], - $options - ); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->bulkSend([$record->formatted]); - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - if ($formatter instanceof ElasticaFormatter) { - return parent::setFormatter($formatter); - } - - throw new \InvalidArgumentException('ElasticaHandler is only compatible with ElasticaFormatter'); - } - - /** - * @return mixed[] - * - * @phpstan-return Options - */ - public function getOptions(): array - { - return $this->options; - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new ElasticaFormatter($this->options['index'], $this->options['type']); - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - $documents = $this->getFormatter()->formatBatch($records); - $this->bulkSend($documents); - } - - /** - * Use Elasticsearch bulk API to send list of documents - * - * @param Document[] $documents - * - * @throws \RuntimeException - */ - protected function bulkSend(array $documents): void - { - try { - $this->client->addDocuments($documents); - } catch (ExceptionInterface $e) { - if (!$this->options['ignore_error']) { - throw new \RuntimeException("Error sending messages to Elasticsearch", 0, $e); - } - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php deleted file mode 100644 index 74cc7b6..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/ElasticsearchHandler.php +++ /dev/null @@ -1,230 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Elastic\Elasticsearch\Response\Elasticsearch; -use Throwable; -use RuntimeException; -use Monolog\Level; -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\ElasticsearchFormatter; -use InvalidArgumentException; -use Elasticsearch\Common\Exceptions\RuntimeException as ElasticsearchRuntimeException; -use Elasticsearch\Client; -use Monolog\LogRecord; -use Elastic\Elasticsearch\Exception\InvalidArgumentException as ElasticInvalidArgumentException; -use Elastic\Elasticsearch\Client as Client8; - -/** - * Elasticsearch handler - * - * @link https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html - * - * Simple usage example: - * - * $client = \Elasticsearch\ClientBuilder::create() - * ->setHosts($hosts) - * ->build(); - * - * $options = array( - * 'index' => 'elastic_index_name', - * 'type' => 'elastic_doc_type', - * ); - * $handler = new ElasticsearchHandler($client, $options); - * $log = new Logger('application'); - * $log->pushHandler($handler); - * - * @author Avtandil Kikabidze - * @phpstan-type Options array{ - * index: string, - * type: string, - * ignore_error: bool, - * op_type: 'index'|'create' - * } - * @phpstan-type InputOptions array{ - * index?: string, - * type?: string, - * ignore_error?: bool, - * op_type?: 'index'|'create' - * } - */ -class ElasticsearchHandler extends AbstractProcessingHandler -{ - protected Client|Client8 $client; - - /** - * @var mixed[] Handler config options - * @phpstan-var Options - */ - protected array $options; - - /** - * @var bool - */ - private $needsType; - - /** - * @param Client|Client8 $client Elasticsearch Client object - * @param mixed[] $options Handler configuration - * - * @phpstan-param InputOptions $options - */ - public function __construct(Client|Client8 $client, array $options = [], int|string|Level $level = Level::Debug, bool $bubble = true) - { - parent::__construct($level, $bubble); - $this->client = $client; - $this->options = array_merge( - [ - 'index' => 'monolog', // Elastic index name - 'type' => '_doc', // Elastic document type - 'ignore_error' => false, // Suppress Elasticsearch exceptions - 'op_type' => 'index', // Elastic op_type (index or create) (https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html#docs-index-api-op_type) - ], - $options - ); - - if ($client instanceof Client8 || $client::VERSION[0] === '7') { - $this->needsType = false; - // force the type to _doc for ES8/ES7 - $this->options['type'] = '_doc'; - } else { - $this->needsType = true; - } - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->bulkSend([$record->formatted]); - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - if ($formatter instanceof ElasticsearchFormatter) { - return parent::setFormatter($formatter); - } - - throw new InvalidArgumentException('ElasticsearchHandler is only compatible with ElasticsearchFormatter'); - } - - /** - * Getter options - * - * @return mixed[] - * - * @phpstan-return Options - */ - public function getOptions(): array - { - return $this->options; - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new ElasticsearchFormatter($this->options['index'], $this->options['type']); - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - $documents = $this->getFormatter()->formatBatch($records); - $this->bulkSend($documents); - } - - /** - * Use Elasticsearch bulk API to send list of documents - * - * @param array> $records Records + _index/_type keys - * @throws \RuntimeException - */ - protected function bulkSend(array $records): void - { - try { - $params = [ - 'body' => [], - ]; - - foreach ($records as $record) { - $params['body'][] = [ - $this->options['op_type'] => $this->needsType ? [ - '_index' => $record['_index'], - '_type' => $record['_type'], - ] : [ - '_index' => $record['_index'], - ], - ]; - unset($record['_index'], $record['_type']); - - $params['body'][] = $record; - } - - /** @var Elasticsearch */ - $responses = $this->client->bulk($params); - - if ($responses['errors'] === true) { - throw $this->createExceptionFromResponses($responses); - } - } catch (Throwable $e) { - if (! $this->options['ignore_error']) { - throw new RuntimeException('Error sending messages to Elasticsearch', 0, $e); - } - } - } - - /** - * Creates elasticsearch exception from responses array - * - * Only the first error is converted into an exception. - * - * @param mixed[]|Elasticsearch $responses returned by $this->client->bulk() - */ - protected function createExceptionFromResponses($responses): Throwable - { - foreach ($responses['items'] ?? [] as $item) { - if (isset($item['index']['error'])) { - return $this->createExceptionFromError($item['index']['error']); - } - } - - if (class_exists(ElasticInvalidArgumentException::class)) { - return new ElasticInvalidArgumentException('Elasticsearch failed to index one or more records.'); - } - - return new ElasticsearchRuntimeException('Elasticsearch failed to index one or more records.'); - } - - /** - * Creates elasticsearch exception from error array - * - * @param mixed[] $error - */ - protected function createExceptionFromError(array $error): Throwable - { - $previous = isset($error['caused_by']) ? $this->createExceptionFromError($error['caused_by']) : null; - - if (class_exists(ElasticInvalidArgumentException::class)) { - return new ElasticInvalidArgumentException($error['type'] . ': ' . $error['reason'], 0, $previous); - } - - return new ElasticsearchRuntimeException($error['type'] . ': ' . $error['reason'], 0, $previous); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php deleted file mode 100644 index aaad9d4..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/ErrorLogHandler.php +++ /dev/null @@ -1,93 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\LineFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Stores to PHP error_log() handler. - * - * @author Elan Ruusamäe - */ -class ErrorLogHandler extends AbstractProcessingHandler -{ - public const OPERATING_SYSTEM = 0; - public const SAPI = 4; - - protected int $messageType; - protected bool $expandNewlines; - - /** - * @param int $messageType Says where the error should go. - * @param bool $expandNewlines If set to true, newlines in the message will be expanded to be take multiple log entries - * - * @throws \InvalidArgumentException If an unsupported message type is set - */ - public function __construct(int $messageType = self::OPERATING_SYSTEM, int|string|Level $level = Level::Debug, bool $bubble = true, bool $expandNewlines = false) - { - parent::__construct($level, $bubble); - - if (false === \in_array($messageType, self::getAvailableTypes(), true)) { - $message = sprintf('The given message type "%s" is not supported', print_r($messageType, true)); - - throw new \InvalidArgumentException($message); - } - - $this->messageType = $messageType; - $this->expandNewlines = $expandNewlines; - } - - /** - * @return int[] With all available types - */ - public static function getAvailableTypes(): array - { - return [ - self::OPERATING_SYSTEM, - self::SAPI, - ]; - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new LineFormatter('[%datetime%] %channel%.%level_name%: %message% %context% %extra%'); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - if (!$this->expandNewlines) { - error_log((string) $record->formatted, $this->messageType); - - return; - } - - $lines = preg_split('{[\r\n]+}', (string) $record->formatted); - if ($lines === false) { - $pcreErrorCode = preg_last_error(); - - throw new \RuntimeException('Failed to preg_split formatted string: ' . $pcreErrorCode . ' / '. Utils::pcreLastErrorMessage($pcreErrorCode)); - } - foreach ($lines as $line) { - error_log($line, $this->messageType); - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php deleted file mode 100644 index 58318be..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FallbackGroupHandler.php +++ /dev/null @@ -1,68 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Throwable; -use Monolog\LogRecord; - -/** - * Forwards records to at most one handler - * - * If a handler fails, the exception is suppressed and the record is forwarded to the next handler. - * - * As soon as one handler handles a record successfully, the handling stops there. - */ -class FallbackGroupHandler extends GroupHandler -{ - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - foreach ($this->handlers as $handler) { - try { - $handler->handle(clone $record); - break; - } catch (Throwable $e) { - // What throwable? - } - } - - return false === $this->bubble; - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - if (\count($this->processors) > 0) { - $processed = []; - foreach ($records as $record) { - $processed[] = $this->processRecord($record); - } - $records = $processed; - } - - foreach ($this->handlers as $handler) { - try { - $handler->handleBatch(array_map(fn ($record) => clone $record, $records)); - break; - } catch (Throwable $e) { - // What throwable? - } - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php deleted file mode 100644 index 6653fa1..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FilterHandler.php +++ /dev/null @@ -1,202 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Closure; -use Monolog\Level; -use Monolog\Logger; -use Monolog\ResettableInterface; -use Monolog\Formatter\FormatterInterface; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Simple handler wrapper that filters records based on a list of levels - * - * It can be configured with an exact list of levels to allow, or a min/max level. - * - * @author Hennadiy Verkh - * @author Jordi Boggiano - */ -class FilterHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface, FormattableHandlerInterface -{ - use ProcessableHandlerTrait; - - /** - * Handler or factory Closure($record, $this) - * - * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface - */ - protected Closure|HandlerInterface $handler; - - /** - * Minimum level for logs that are passed to handler - * - * @var bool[] Map of Level value => true - * @phpstan-var array, true> - */ - protected array $acceptedLevels; - - /** - * Whether the messages that are handled can bubble up the stack or not - */ - protected bool $bubble; - - /** - * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler - * - * @param Closure|HandlerInterface $handler Handler or factory Closure($record|null, $filterHandler). - * @param int|string|Level|array $minLevelOrList A list of levels to accept or a minimum level if maxLevel is provided - * @param int|string|Level|LogLevel::* $maxLevel Maximum level to accept, only used if $minLevelOrList is not an array - * @param bool $bubble Whether the messages that are handled can bubble up the stack or not - * - * @phpstan-param value-of|value-of|Level|LogLevel::*|array|value-of|Level|LogLevel::*> $minLevelOrList - * @phpstan-param value-of|value-of|Level|LogLevel::* $maxLevel - */ - public function __construct(Closure|HandlerInterface $handler, int|string|Level|array $minLevelOrList = Level::Debug, int|string|Level $maxLevel = Level::Emergency, bool $bubble = true) - { - $this->handler = $handler; - $this->bubble = $bubble; - $this->setAcceptedLevels($minLevelOrList, $maxLevel); - } - - /** - * @phpstan-return list List of levels - */ - public function getAcceptedLevels(): array - { - return array_map(fn (int $level) => Level::from($level), array_keys($this->acceptedLevels)); - } - - /** - * @param int|string|Level|LogLevel::*|array $minLevelOrList A list of levels to accept or a minimum level or level name if maxLevel is provided - * @param int|string|Level|LogLevel::* $maxLevel Maximum level or level name to accept, only used if $minLevelOrList is not an array - * @return $this - * - * @phpstan-param value-of|value-of|Level|LogLevel::*|array|value-of|Level|LogLevel::*> $minLevelOrList - * @phpstan-param value-of|value-of|Level|LogLevel::* $maxLevel - */ - public function setAcceptedLevels(int|string|Level|array $minLevelOrList = Level::Debug, int|string|Level $maxLevel = Level::Emergency): self - { - if (\is_array($minLevelOrList)) { - $acceptedLevels = array_map(Logger::toMonologLevel(...), $minLevelOrList); - } else { - $minLevelOrList = Logger::toMonologLevel($minLevelOrList); - $maxLevel = Logger::toMonologLevel($maxLevel); - $acceptedLevels = array_values(array_filter(Level::cases(), fn (Level $level) => $level->value >= $minLevelOrList->value && $level->value <= $maxLevel->value)); - } - $this->acceptedLevels = []; - foreach ($acceptedLevels as $level) { - $this->acceptedLevels[$level->value] = true; - } - - return $this; - } - - /** - * @inheritDoc - */ - public function isHandling(LogRecord $record): bool - { - return isset($this->acceptedLevels[$record->level->value]); - } - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if (!$this->isHandling($record)) { - return false; - } - - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - - $this->getHandler($record)->handle($record); - - return false === $this->bubble; - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - $filtered = []; - foreach ($records as $record) { - if ($this->isHandling($record)) { - $filtered[] = $record; - } - } - - if (\count($filtered) > 0) { - $this->getHandler($filtered[\count($filtered) - 1])->handleBatch($filtered); - } - } - - /** - * Return the nested handler - * - * If the handler was provided as a factory, this will trigger the handler's instantiation. - */ - public function getHandler(LogRecord|null $record = null): HandlerInterface - { - if (!$this->handler instanceof HandlerInterface) { - $handler = ($this->handler)($record, $this); - if (!$handler instanceof HandlerInterface) { - throw new \RuntimeException("The factory Closure should return a HandlerInterface"); - } - $this->handler = $handler; - } - - return $this->handler; - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - $handler = $this->getHandler(); - if ($handler instanceof FormattableHandlerInterface) { - $handler->setFormatter($formatter); - - return $this; - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($handler).' does not support formatters.'); - } - - /** - * @inheritDoc - */ - public function getFormatter(): FormatterInterface - { - $handler = $this->getHandler(); - if ($handler instanceof FormattableHandlerInterface) { - return $handler->getFormatter(); - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($handler).' does not support formatters.'); - } - - public function reset(): void - { - $this->resetProcessors(); - - if ($this->getHandler() instanceof ResettableInterface) { - $this->getHandler()->reset(); - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php deleted file mode 100644 index e8a1b0b..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ActivationStrategyInterface.php +++ /dev/null @@ -1,27 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler\FingersCrossed; - -use Monolog\LogRecord; - -/** - * Interface for activation strategies for the FingersCrossedHandler. - * - * @author Johannes M. Schmitt - */ -interface ActivationStrategyInterface -{ - /** - * Returns whether the given record activates the handler. - */ - public function isHandlerActivated(LogRecord $record): bool; -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php deleted file mode 100644 index 383e19a..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ChannelLevelActivationStrategy.php +++ /dev/null @@ -1,69 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler\FingersCrossed; - -use Monolog\Level; -use Monolog\Logger; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Channel and Error level based monolog activation strategy. Allows to trigger activation - * based on level per channel. e.g. trigger activation on level 'ERROR' by default, except - * for records of the 'sql' channel; those should trigger activation on level 'WARN'. - * - * Example: - * - * - * $activationStrategy = new ChannelLevelActivationStrategy( - * Level::Critical, - * array( - * 'request' => Level::Alert, - * 'sensitive' => Level::Error, - * ) - * ); - * $handler = new FingersCrossedHandler(new StreamHandler('php://stderr'), $activationStrategy); - * - * - * @author Mike Meessen - */ -class ChannelLevelActivationStrategy implements ActivationStrategyInterface -{ - private Level $defaultActionLevel; - - /** - * @var array - */ - private array $channelToActionLevel; - - /** - * @param int|string|Level|LogLevel::* $defaultActionLevel The default action level to be used if the record's category doesn't match any - * @param array $channelToActionLevel An array that maps channel names to action levels. - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $defaultActionLevel - * @phpstan-param array|value-of|Level|LogLevel::*> $channelToActionLevel - */ - public function __construct(int|string|Level $defaultActionLevel, array $channelToActionLevel = []) - { - $this->defaultActionLevel = Logger::toMonologLevel($defaultActionLevel); - $this->channelToActionLevel = array_map(Logger::toMonologLevel(...), $channelToActionLevel); - } - - public function isHandlerActivated(LogRecord $record): bool - { - if (isset($this->channelToActionLevel[$record->channel])) { - return $record->level->value >= $this->channelToActionLevel[$record->channel]->value; - } - - return $record->level->value >= $this->defaultActionLevel->value; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php deleted file mode 100644 index c3ca296..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossed/ErrorLevelActivationStrategy.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler\FingersCrossed; - -use Monolog\Level; -use Monolog\LogRecord; -use Monolog\Logger; -use Psr\Log\LogLevel; - -/** - * Error level based activation strategy. - * - * @author Johannes M. Schmitt - */ -class ErrorLevelActivationStrategy implements ActivationStrategyInterface -{ - private Level $actionLevel; - - /** - * @param int|string|Level $actionLevel Level or name or value - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $actionLevel - */ - public function __construct(int|string|Level $actionLevel) - { - $this->actionLevel = Logger::toMonologLevel($actionLevel); - } - - public function isHandlerActivated(LogRecord $record): bool - { - return $record->level->value >= $this->actionLevel->value; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php deleted file mode 100644 index 7631830..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FingersCrossedHandler.php +++ /dev/null @@ -1,242 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Closure; -use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; -use Monolog\Handler\FingersCrossed\ActivationStrategyInterface; -use Monolog\Level; -use Monolog\Logger; -use Monolog\ResettableInterface; -use Monolog\Formatter\FormatterInterface; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Buffers all records until a certain level is reached - * - * The advantage of this approach is that you don't get any clutter in your log files. - * Only requests which actually trigger an error (or whatever your actionLevel is) will be - * in the logs, but they will contain all records, not only those above the level threshold. - * - * You can then have a passthruLevel as well which means that at the end of the request, - * even if it did not get activated, it will still send through log records of e.g. at least a - * warning level. - * - * You can find the various activation strategies in the - * Monolog\Handler\FingersCrossed\ namespace. - * - * @author Jordi Boggiano - */ -class FingersCrossedHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface, FormattableHandlerInterface -{ - use ProcessableHandlerTrait; - - /** - * Handler or factory Closure($record, $this) - * - * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface - */ - protected Closure|HandlerInterface $handler; - - protected ActivationStrategyInterface $activationStrategy; - - protected bool $buffering = true; - - protected int $bufferSize; - - /** @var LogRecord[] */ - protected array $buffer = []; - - protected bool $stopBuffering; - - protected Level|null $passthruLevel = null; - - protected bool $bubble; - - /** - * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler - * - * @param Closure|HandlerInterface $handler Handler or factory Closure($record|null, $fingersCrossedHandler). - * @param int|string|Level|LogLevel::* $activationStrategy Strategy which determines when this handler takes action, or a level name/value at which the handler is activated - * @param int $bufferSize How many entries should be buffered at most, beyond that the oldest items are removed from the buffer. - * @param bool $bubble Whether the messages that are handled can bubble up the stack or not - * @param bool $stopBuffering Whether the handler should stop buffering after being triggered (default true) - * @param int|string|Level|LogLevel::*|null $passthruLevel Minimum level to always flush to handler on close, even if strategy not triggered - * - * @phpstan-param value-of|value-of|Level|LogLevel::*|ActivationStrategyInterface $activationStrategy - * @phpstan-param value-of|value-of|Level|LogLevel::* $passthruLevel - */ - public function __construct(Closure|HandlerInterface $handler, int|string|Level|ActivationStrategyInterface $activationStrategy = null, int $bufferSize = 0, bool $bubble = true, bool $stopBuffering = true, int|string|Level|null $passthruLevel = null) - { - if (null === $activationStrategy) { - $activationStrategy = new ErrorLevelActivationStrategy(Level::Warning); - } - - // convert simple int activationStrategy to an object - if (!$activationStrategy instanceof ActivationStrategyInterface) { - $activationStrategy = new ErrorLevelActivationStrategy($activationStrategy); - } - - $this->handler = $handler; - $this->activationStrategy = $activationStrategy; - $this->bufferSize = $bufferSize; - $this->bubble = $bubble; - $this->stopBuffering = $stopBuffering; - - if ($passthruLevel !== null) { - $this->passthruLevel = Logger::toMonologLevel($passthruLevel); - } - } - - /** - * @inheritDoc - */ - public function isHandling(LogRecord $record): bool - { - return true; - } - - /** - * Manually activate this logger regardless of the activation strategy - */ - public function activate(): void - { - if ($this->stopBuffering) { - $this->buffering = false; - } - - $this->getHandler(end($this->buffer) ?: null)->handleBatch($this->buffer); - $this->buffer = []; - } - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - - if ($this->buffering) { - $this->buffer[] = $record; - if ($this->bufferSize > 0 && \count($this->buffer) > $this->bufferSize) { - array_shift($this->buffer); - } - if ($this->activationStrategy->isHandlerActivated($record)) { - $this->activate(); - } - } else { - $this->getHandler($record)->handle($record); - } - - return false === $this->bubble; - } - - /** - * @inheritDoc - */ - public function close(): void - { - $this->flushBuffer(); - - $this->getHandler()->close(); - } - - public function reset(): void - { - $this->flushBuffer(); - - $this->resetProcessors(); - - if ($this->getHandler() instanceof ResettableInterface) { - $this->getHandler()->reset(); - } - } - - /** - * Clears the buffer without flushing any messages down to the wrapped handler. - * - * It also resets the handler to its initial buffering state. - */ - public function clear(): void - { - $this->buffer = []; - $this->reset(); - } - - /** - * Resets the state of the handler. Stops forwarding records to the wrapped handler. - */ - private function flushBuffer(): void - { - if (null !== $this->passthruLevel) { - $passthruLevel = $this->passthruLevel; - $this->buffer = array_filter($this->buffer, static function ($record) use ($passthruLevel) { - return $passthruLevel->includes($record->level); - }); - if (\count($this->buffer) > 0) { - $this->getHandler(end($this->buffer))->handleBatch($this->buffer); - } - } - - $this->buffer = []; - $this->buffering = true; - } - - /** - * Return the nested handler - * - * If the handler was provided as a factory, this will trigger the handler's instantiation. - */ - public function getHandler(LogRecord|null $record = null): HandlerInterface - { - if (!$this->handler instanceof HandlerInterface) { - $handler = ($this->handler)($record, $this); - if (!$handler instanceof HandlerInterface) { - throw new \RuntimeException("The factory Closure should return a HandlerInterface"); - } - $this->handler = $handler; - } - - return $this->handler; - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - $handler = $this->getHandler(); - if ($handler instanceof FormattableHandlerInterface) { - $handler->setFormatter($formatter); - - return $this; - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($handler).' does not support formatters.'); - } - - /** - * @inheritDoc - */ - public function getFormatter(): FormatterInterface - { - $handler = $this->getHandler(); - if ($handler instanceof FormattableHandlerInterface) { - return $handler->getFormatter(); - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($handler).' does not support formatters.'); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php deleted file mode 100644 index 6b9e510..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FirePHPHandler.php +++ /dev/null @@ -1,174 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\WildfireFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Simple FirePHP Handler (http://www.firephp.org/), which uses the Wildfire protocol. - * - * @author Eric Clemmons (@ericclemmons) - */ -class FirePHPHandler extends AbstractProcessingHandler -{ - use WebRequestRecognizerTrait; - - /** - * WildFire JSON header message format - */ - protected const PROTOCOL_URI = 'http://meta.wildfirehq.org/Protocol/JsonStream/0.2'; - - /** - * FirePHP structure for parsing messages & their presentation - */ - protected const STRUCTURE_URI = 'http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1'; - - /** - * Must reference a "known" plugin, otherwise headers won't display in FirePHP - */ - protected const PLUGIN_URI = 'http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3'; - - /** - * Header prefix for Wildfire to recognize & parse headers - */ - protected const HEADER_PREFIX = 'X-Wf'; - - /** - * Whether or not Wildfire vendor-specific headers have been generated & sent yet - */ - protected static bool $initialized = false; - - /** - * Shared static message index between potentially multiple handlers - */ - protected static int $messageIndex = 1; - - protected static bool $sendHeaders = true; - - /** - * Base header creation function used by init headers & record headers - * - * @param array $meta Wildfire Plugin, Protocol & Structure Indexes - * @param string $message Log message - * - * @return array Complete header string ready for the client as key and message as value - * - * @phpstan-return non-empty-array - */ - protected function createHeader(array $meta, string $message): array - { - $header = sprintf('%s-%s', static::HEADER_PREFIX, join('-', $meta)); - - return [$header => $message]; - } - - /** - * Creates message header from record - * - * @return array - * - * @phpstan-return non-empty-array - * - * @see createHeader() - */ - protected function createRecordHeader(LogRecord $record): array - { - // Wildfire is extensible to support multiple protocols & plugins in a single request, - // but we're not taking advantage of that (yet), so we're using "1" for simplicity's sake. - return $this->createHeader( - [1, 1, 1, self::$messageIndex++], - $record->formatted - ); - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new WildfireFormatter(); - } - - /** - * Wildfire initialization headers to enable message parsing - * - * @see createHeader() - * @see sendHeader() - * - * @return array - */ - protected function getInitHeaders(): array - { - // Initial payload consists of required headers for Wildfire - return array_merge( - $this->createHeader(['Protocol', 1], static::PROTOCOL_URI), - $this->createHeader([1, 'Structure', 1], static::STRUCTURE_URI), - $this->createHeader([1, 'Plugin', 1], static::PLUGIN_URI) - ); - } - - /** - * Send header string to the client - */ - protected function sendHeader(string $header, string $content): void - { - if (!headers_sent() && self::$sendHeaders) { - header(sprintf('%s: %s', $header, $content)); - } - } - - /** - * Creates & sends header for a record, ensuring init headers have been sent prior - * - * @see sendHeader() - * @see sendInitHeaders() - */ - protected function write(LogRecord $record): void - { - if (!self::$sendHeaders || !$this->isWebRequest()) { - return; - } - - // WildFire-specific headers must be sent prior to any messages - if (!self::$initialized) { - self::$initialized = true; - - self::$sendHeaders = $this->headersAccepted(); - if (!self::$sendHeaders) { - return; - } - - foreach ($this->getInitHeaders() as $header => $content) { - $this->sendHeader($header, $content); - } - } - - $header = $this->createRecordHeader($record); - if (trim(current($header)) !== '') { - $this->sendHeader(key($header), current($header)); - } - } - - /** - * Verifies if the headers are accepted by the current user agent - */ - protected function headersAccepted(): bool - { - if (isset($_SERVER['HTTP_USER_AGENT']) && 1 === preg_match('{\bFirePHP/\d+\.\d+\b}', $_SERVER['HTTP_USER_AGENT'])) { - return true; - } - - return isset($_SERVER['HTTP_X_FIREPHP_VERSION']); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php deleted file mode 100644 index 46ebfc0..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FleepHookHandler.php +++ /dev/null @@ -1,132 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\LineFormatter; -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Sends logs to Fleep.io using Webhook integrations - * - * You'll need a Fleep.io account to use this handler. - * - * @see https://fleep.io/integrations/webhooks/ Fleep Webhooks Documentation - * @author Ando Roots - */ -class FleepHookHandler extends SocketHandler -{ - protected const FLEEP_HOST = 'fleep.io'; - - protected const FLEEP_HOOK_URI = '/hook/'; - - /** - * @var string Webhook token (specifies the conversation where logs are sent) - */ - protected string $token; - - /** - * Construct a new Fleep.io Handler. - * - * For instructions on how to create a new web hook in your conversations - * see https://fleep.io/integrations/webhooks/ - * - * @param string $token Webhook token - * @throws MissingExtensionException if OpenSSL is missing - */ - public function __construct( - string $token, - $level = Level::Debug, - bool $bubble = true, - bool $persistent = false, - float $timeout = 0.0, - float $writingTimeout = 10.0, - ?float $connectionTimeout = null, - ?int $chunkSize = null - ) { - if (!\extension_loaded('openssl')) { - throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FleepHookHandler'); - } - - $this->token = $token; - - $connectionString = 'ssl://' . static::FLEEP_HOST . ':443'; - parent::__construct( - $connectionString, - $level, - $bubble, - $persistent, - $timeout, - $writingTimeout, - $connectionTimeout, - $chunkSize - ); - } - - /** - * Returns the default formatter to use with this handler - * - * Overloaded to remove empty context and extra arrays from the end of the log message. - * - * @return LineFormatter - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new LineFormatter(null, null, true, true); - } - - /** - * Handles a log record - */ - public function write(LogRecord $record): void - { - parent::write($record); - $this->closeSocket(); - } - - /** - * @inheritDoc - */ - protected function generateDataStream(LogRecord $record): string - { - $content = $this->buildContent($record); - - return $this->buildHeader($content) . $content; - } - - /** - * Builds the header of the API Call - */ - private function buildHeader(string $content): string - { - $header = "POST " . static::FLEEP_HOOK_URI . $this->token . " HTTP/1.1\r\n"; - $header .= "Host: " . static::FLEEP_HOST . "\r\n"; - $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; - $header .= "Content-Length: " . \strlen($content) . "\r\n"; - $header .= "\r\n"; - - return $header; - } - - /** - * Builds the body of API call - */ - private function buildContent(LogRecord $record): string - { - $dataArray = [ - 'message' => $record->formatted, - ]; - - return http_build_query($dataArray); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php deleted file mode 100644 index 27c6c15..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FlowdockHandler.php +++ /dev/null @@ -1,127 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Utils; -use Monolog\Formatter\FlowdockFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Sends notifications through the Flowdock push API - * - * This must be configured with a FlowdockFormatter instance via setFormatter() - * - * Notes: - * API token - Flowdock API token - * - * @author Dominik Liebler - * @see https://www.flowdock.com/api/push - * @deprecated Since 2.9.0 and 3.3.0, Flowdock was shutdown we will thus drop this handler in Monolog 4 - */ -class FlowdockHandler extends SocketHandler -{ - protected string $apiToken; - - /** - * @throws MissingExtensionException if OpenSSL is missing - */ - public function __construct( - string $apiToken, - $level = Level::Debug, - bool $bubble = true, - bool $persistent = false, - float $timeout = 0.0, - float $writingTimeout = 10.0, - ?float $connectionTimeout = null, - ?int $chunkSize = null - ) { - if (!\extension_loaded('openssl')) { - throw new MissingExtensionException('The OpenSSL PHP extension is required to use the FlowdockHandler'); - } - - parent::__construct( - 'ssl://api.flowdock.com:443', - $level, - $bubble, - $persistent, - $timeout, - $writingTimeout, - $connectionTimeout, - $chunkSize - ); - $this->apiToken = $apiToken; - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - if (!$formatter instanceof FlowdockFormatter) { - throw new \InvalidArgumentException('The FlowdockHandler requires an instance of Monolog\Formatter\FlowdockFormatter to function correctly'); - } - - return parent::setFormatter($formatter); - } - - /** - * Gets the default formatter. - */ - protected function getDefaultFormatter(): FormatterInterface - { - throw new \InvalidArgumentException('The FlowdockHandler must be configured (via setFormatter) with an instance of Monolog\Formatter\FlowdockFormatter to function correctly'); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - parent::write($record); - - $this->closeSocket(); - } - - /** - * @inheritDoc - */ - protected function generateDataStream(LogRecord $record): string - { - $content = $this->buildContent($record); - - return $this->buildHeader($content) . $content; - } - - /** - * Builds the body of API call - */ - private function buildContent(LogRecord $record): string - { - return Utils::jsonEncode($record->formatted); - } - - /** - * Builds the header of the API Call - */ - private function buildHeader(string $content): string - { - $header = "POST /v1/messages/team_inbox/" . $this->apiToken . " HTTP/1.1\r\n"; - $header .= "Host: api.flowdock.com\r\n"; - $header .= "Content-Type: application/json\r\n"; - $header .= "Content-Length: " . \strlen($content) . "\r\n"; - $header .= "\r\n"; - - return $header; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php b/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php deleted file mode 100644 index 72da59e..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerInterface.php +++ /dev/null @@ -1,34 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; - -/** - * Interface to describe loggers that have a formatter - * - * @author Jordi Boggiano - */ -interface FormattableHandlerInterface -{ - /** - * Sets the formatter. - * - * @return HandlerInterface self - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface; - - /** - * Gets the formatter. - */ - public function getFormatter(): FormatterInterface; -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php b/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php deleted file mode 100644 index c044e07..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/FormattableHandlerTrait.php +++ /dev/null @@ -1,57 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\LineFormatter; - -/** - * Helper trait for implementing FormattableInterface - * - * @author Jordi Boggiano - */ -trait FormattableHandlerTrait -{ - protected FormatterInterface|null $formatter = null; - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - $this->formatter = $formatter; - - return $this; - } - - /** - * @inheritDoc - */ - public function getFormatter(): FormatterInterface - { - if (null === $this->formatter) { - $this->formatter = $this->getDefaultFormatter(); - } - - return $this->formatter; - } - - /** - * Gets the default formatter. - * - * Overwrite this if the LineFormatter is not a good default for your handler. - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new LineFormatter(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php deleted file mode 100644 index ba5bb97..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/GelfHandler.php +++ /dev/null @@ -1,58 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Gelf\PublisherInterface; -use Monolog\Level; -use Monolog\Formatter\GelfMessageFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Handler to send messages to a Graylog2 (http://www.graylog2.org) server - * - * @author Matt Lehner - * @author Benjamin Zikarsky - */ -class GelfHandler extends AbstractProcessingHandler -{ - /** - * @var PublisherInterface the publisher object that sends the message to the server - */ - protected PublisherInterface $publisher; - - /** - * @param PublisherInterface $publisher a gelf publisher object - */ - public function __construct(PublisherInterface $publisher, int|string|Level $level = Level::Debug, bool $bubble = true) - { - parent::__construct($level, $bubble); - - $this->publisher = $publisher; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->publisher->publish($record->formatted); - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new GelfMessageFormatter(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php deleted file mode 100644 index 0423dc3..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/GroupHandler.php +++ /dev/null @@ -1,130 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\ResettableInterface; -use Monolog\LogRecord; - -/** - * Forwards records to multiple handlers - * - * @author Lenar Lõhmus - */ -class GroupHandler extends Handler implements ProcessableHandlerInterface, ResettableInterface -{ - use ProcessableHandlerTrait; - - /** @var HandlerInterface[] */ - protected array $handlers; - protected bool $bubble; - - /** - * @param HandlerInterface[] $handlers Array of Handlers. - * @param bool $bubble Whether the messages that are handled can bubble up the stack or not - * - * @throws \InvalidArgumentException if an unsupported handler is set - */ - public function __construct(array $handlers, bool $bubble = true) - { - foreach ($handlers as $handler) { - if (!$handler instanceof HandlerInterface) { - throw new \InvalidArgumentException('The first argument of the GroupHandler must be an array of HandlerInterface instances.'); - } - } - - $this->handlers = $handlers; - $this->bubble = $bubble; - } - - /** - * @inheritDoc - */ - public function isHandling(LogRecord $record): bool - { - foreach ($this->handlers as $handler) { - if ($handler->isHandling($record)) { - return true; - } - } - - return false; - } - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - - foreach ($this->handlers as $handler) { - $handler->handle(clone $record); - } - - return false === $this->bubble; - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - if (\count($this->processors) > 0) { - $processed = []; - foreach ($records as $record) { - $processed[] = $this->processRecord($record); - } - $records = $processed; - } - - foreach ($this->handlers as $handler) { - $handler->handleBatch(array_map(fn ($record) => clone $record, $records)); - } - } - - public function reset(): void - { - $this->resetProcessors(); - - foreach ($this->handlers as $handler) { - if ($handler instanceof ResettableInterface) { - $handler->reset(); - } - } - } - - public function close(): void - { - parent::close(); - - foreach ($this->handlers as $handler) { - $handler->close(); - } - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - foreach ($this->handlers as $handler) { - if ($handler instanceof FormattableHandlerInterface) { - $handler->setFormatter($formatter); - } - } - - return $this; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/Handler.php b/vendor/monolog/monolog/src/Monolog/Handler/Handler.php deleted file mode 100644 index e89f969..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/Handler.php +++ /dev/null @@ -1,62 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -/** - * Base Handler class providing basic close() support as well as handleBatch - * - * @author Jordi Boggiano - */ -abstract class Handler implements HandlerInterface -{ - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - foreach ($records as $record) { - $this->handle($record); - } - } - - /** - * @inheritDoc - */ - public function close(): void - { - } - - public function __destruct() - { - try { - $this->close(); - } catch (\Throwable $e) { - // do nothing - } - } - - public function __sleep() - { - $this->close(); - - $reflClass = new \ReflectionClass($this); - - $keys = []; - foreach ($reflClass->getProperties() as $reflProp) { - if (!$reflProp->isStatic()) { - $keys[] = $reflProp->getName(); - } - } - - return $keys; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php b/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php deleted file mode 100644 index 93306d9..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/HandlerInterface.php +++ /dev/null @@ -1,76 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\LogRecord; - -/** - * Interface that all Monolog Handlers must implement - * - * @author Jordi Boggiano - */ -interface HandlerInterface -{ - /** - * Checks whether the given record will be handled by this handler. - * - * This is mostly done for performance reasons, to avoid calling processors for nothing. - * - * Handlers should still check the record levels within handle(), returning false in isHandling() - * is no guarantee that handle() will not be called, and isHandling() might not be called - * for a given record. - * - * @param LogRecord $record Partial log record having only a level initialized - */ - public function isHandling(LogRecord $record): bool; - - /** - * Handles a record. - * - * All records may be passed to this method, and the handler should discard - * those that it does not want to handle. - * - * The return value of this function controls the bubbling process of the handler stack. - * Unless the bubbling is interrupted (by returning true), the Logger class will keep on - * calling further handlers in the stack with a given log record. - * - * @param LogRecord $record The record to handle - * @return bool true means that this handler handled the record, and that bubbling is not permitted. - * false means the record was either not processed or that this handler allows bubbling. - */ - public function handle(LogRecord $record): bool; - - /** - * Handles a set of records at once. - * - * @param array $records The records to handle - */ - public function handleBatch(array $records): void; - - /** - * Closes the handler. - * - * Ends a log cycle and frees all resources used by the handler. - * - * Closing a Handler means flushing all buffers and freeing any open resources/handles. - * - * Implementations have to be idempotent (i.e. it should be possible to call close several times without breakage) - * and ideally handlers should be able to reopen themselves on handle() after they have been closed. - * - * This is useful at the end of a request and will be called automatically when the object - * is destroyed if you extend Monolog\Handler\Handler. - * - * If you are thinking of calling this method yourself, most likely you should be - * calling ResettableInterface::reset instead. Have a look. - */ - public function close(): void; -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php b/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php deleted file mode 100644 index 541ec25..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/HandlerWrapper.php +++ /dev/null @@ -1,134 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\ResettableInterface; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * This simple wrapper class can be used to extend handlers functionality. - * - * Example: A custom filtering that can be applied to any handler. - * - * Inherit from this class and override handle() like this: - * - * public function handle(LogRecord $record) - * { - * if ($record meets certain conditions) { - * return false; - * } - * return $this->handler->handle($record); - * } - * - * @author Alexey Karapetov - */ -class HandlerWrapper implements HandlerInterface, ProcessableHandlerInterface, FormattableHandlerInterface, ResettableInterface -{ - protected HandlerInterface $handler; - - public function __construct(HandlerInterface $handler) - { - $this->handler = $handler; - } - - /** - * @inheritDoc - */ - public function isHandling(LogRecord $record): bool - { - return $this->handler->isHandling($record); - } - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - return $this->handler->handle($record); - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - $this->handler->handleBatch($records); - } - - /** - * @inheritDoc - */ - public function close(): void - { - $this->handler->close(); - } - - /** - * @inheritDoc - */ - public function pushProcessor(callable $callback): HandlerInterface - { - if ($this->handler instanceof ProcessableHandlerInterface) { - $this->handler->pushProcessor($callback); - - return $this; - } - - throw new \LogicException('The wrapped handler does not implement ' . ProcessableHandlerInterface::class); - } - - /** - * @inheritDoc - */ - public function popProcessor(): callable - { - if ($this->handler instanceof ProcessableHandlerInterface) { - return $this->handler->popProcessor(); - } - - throw new \LogicException('The wrapped handler does not implement ' . ProcessableHandlerInterface::class); - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - if ($this->handler instanceof FormattableHandlerInterface) { - $this->handler->setFormatter($formatter); - - return $this; - } - - throw new \LogicException('The wrapped handler does not implement ' . FormattableHandlerInterface::class); - } - - /** - * @inheritDoc - */ - public function getFormatter(): FormatterInterface - { - if ($this->handler instanceof FormattableHandlerInterface) { - return $this->handler->getFormatter(); - } - - throw new \LogicException('The wrapped handler does not implement ' . FormattableHandlerInterface::class); - } - - public function reset(): void - { - if ($this->handler instanceof ResettableInterface) { - $this->handler->reset(); - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php deleted file mode 100644 index b9c7ba8..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/IFTTTHandler.php +++ /dev/null @@ -1,75 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * IFTTTHandler uses cURL to trigger IFTTT Maker actions - * - * Register a secret key and trigger/event name at https://ifttt.com/maker - * - * value1 will be the channel from monolog's Logger constructor, - * value2 will be the level name (ERROR, WARNING, ..) - * value3 will be the log record's message - * - * @author Nehal Patel - */ -class IFTTTHandler extends AbstractProcessingHandler -{ - private string $eventName; - private string $secretKey; - - /** - * @param string $eventName The name of the IFTTT Maker event that should be triggered - * @param string $secretKey A valid IFTTT secret key - * - * @throws MissingExtensionException If the curl extension is missing - */ - public function __construct(string $eventName, string $secretKey, int|string|Level $level = Level::Error, bool $bubble = true) - { - if (!\extension_loaded('curl')) { - throw new MissingExtensionException('The curl extension is needed to use the IFTTTHandler'); - } - - $this->eventName = $eventName; - $this->secretKey = $secretKey; - - parent::__construct($level, $bubble); - } - - /** - * @inheritDoc - */ - public function write(LogRecord $record): void - { - $postData = [ - "value1" => $record->channel, - "value2" => $record["level_name"], - "value3" => $record->message, - ]; - $postString = Utils::jsonEncode($postData); - - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, "https://maker.ifttt.com/trigger/" . $this->eventName . "/with/key/" . $this->secretKey); - curl_setopt($ch, CURLOPT_POST, true); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_POSTFIELDS, $postString); - curl_setopt($ch, CURLOPT_HTTPHEADER, [ - "Content-Type: application/json", - ]); - - Curl\Util::execute($ch); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php deleted file mode 100644 index 4b558bd..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/InsightOpsHandler.php +++ /dev/null @@ -1,74 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Inspired on LogEntriesHandler. - * - * @author Robert Kaufmann III - * @author Gabriel Machado - */ -class InsightOpsHandler extends SocketHandler -{ - protected string $logToken; - - /** - * @param string $token Log token supplied by InsightOps - * @param string $region Region where InsightOps account is hosted. Could be 'us' or 'eu'. - * @param bool $useSSL Whether or not SSL encryption should be used - * - * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing - */ - public function __construct( - string $token, - string $region = 'us', - bool $useSSL = true, - $level = Level::Debug, - bool $bubble = true, - bool $persistent = false, - float $timeout = 0.0, - float $writingTimeout = 10.0, - ?float $connectionTimeout = null, - ?int $chunkSize = null - ) { - if ($useSSL && !\extension_loaded('openssl')) { - throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for InsightOpsHandler'); - } - - $endpoint = $useSSL - ? 'ssl://' . $region . '.data.logs.insight.rapid7.com:443' - : $region . '.data.logs.insight.rapid7.com:80'; - - parent::__construct( - $endpoint, - $level, - $bubble, - $persistent, - $timeout, - $writingTimeout, - $connectionTimeout, - $chunkSize - ); - $this->logToken = $token; - } - - /** - * @inheritDoc - */ - protected function generateDataStream(LogRecord $record): string - { - return $this->logToken . ' ' . $record->formatted; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php deleted file mode 100644 index 8c12898..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/LogEntriesHandler.php +++ /dev/null @@ -1,68 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\LogRecord; - -/** - * @author Robert Kaufmann III - */ -class LogEntriesHandler extends SocketHandler -{ - protected string $logToken; - - /** - * @param string $token Log token supplied by LogEntries - * @param bool $useSSL Whether or not SSL encryption should be used. - * @param string $host Custom hostname to send the data to if needed - * - * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing - */ - public function __construct( - string $token, - bool $useSSL = true, - $level = Level::Debug, - bool $bubble = true, - string $host = 'data.logentries.com', - bool $persistent = false, - float $timeout = 0.0, - float $writingTimeout = 10.0, - ?float $connectionTimeout = null, - ?int $chunkSize = null - ) { - if ($useSSL && !\extension_loaded('openssl')) { - throw new MissingExtensionException('The OpenSSL PHP plugin is required to use SSL encrypted connection for LogEntriesHandler'); - } - - $endpoint = $useSSL ? 'ssl://' . $host . ':443' : $host . ':80'; - parent::__construct( - $endpoint, - $level, - $bubble, - $persistent, - $timeout, - $writingTimeout, - $connectionTimeout, - $chunkSize - ); - $this->logToken = $token; - } - - /** - * @inheritDoc - */ - protected function generateDataStream(LogRecord $record): string - { - return $this->logToken . ' ' . $record->formatted; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php deleted file mode 100644 index ff298c6..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/LogglyHandler.php +++ /dev/null @@ -1,156 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\LogglyFormatter; -use CurlHandle; -use Monolog\LogRecord; - -/** - * Sends errors to Loggly. - * - * @author Przemek Sobstel - * @author Adam Pancutt - * @author Gregory Barchard - */ -class LogglyHandler extends AbstractProcessingHandler -{ - protected const HOST = 'logs-01.loggly.com'; - protected const ENDPOINT_SINGLE = 'inputs'; - protected const ENDPOINT_BATCH = 'bulk'; - - /** - * Caches the curl handlers for every given endpoint. - * - * @var CurlHandle[] - */ - protected array $curlHandlers = []; - - protected string $token; - - /** @var string[] */ - protected array $tag = []; - - /** - * @param string $token API token supplied by Loggly - * - * @throws MissingExtensionException If the curl extension is missing - */ - public function __construct(string $token, int|string|Level $level = Level::Debug, bool $bubble = true) - { - if (!\extension_loaded('curl')) { - throw new MissingExtensionException('The curl extension is needed to use the LogglyHandler'); - } - - $this->token = $token; - - parent::__construct($level, $bubble); - } - - /** - * Loads and returns the shared curl handler for the given endpoint. - */ - protected function getCurlHandler(string $endpoint): CurlHandle - { - if (!\array_key_exists($endpoint, $this->curlHandlers)) { - $this->curlHandlers[$endpoint] = $this->loadCurlHandle($endpoint); - } - - return $this->curlHandlers[$endpoint]; - } - - /** - * Starts a fresh curl session for the given endpoint and returns its handler. - */ - private function loadCurlHandle(string $endpoint): CurlHandle - { - $url = sprintf("https://%s/%s/%s/", static::HOST, $endpoint, $this->token); - - $ch = curl_init(); - - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_POST, true); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - - return $ch; - } - - /** - * @param string[]|string $tag - * @return $this - */ - public function setTag(string|array $tag): self - { - if ('' === $tag || [] === $tag) { - $this->tag = []; - } else { - $this->tag = \is_array($tag) ? $tag : [$tag]; - } - - return $this; - } - - /** - * @param string[]|string $tag - * @return $this - */ - public function addTag(string|array $tag): self - { - if ('' !== $tag) { - $tag = \is_array($tag) ? $tag : [$tag]; - $this->tag = array_unique(array_merge($this->tag, $tag)); - } - - return $this; - } - - protected function write(LogRecord $record): void - { - $this->send($record->formatted, static::ENDPOINT_SINGLE); - } - - public function handleBatch(array $records): void - { - $level = $this->level; - - $records = array_filter($records, function ($record) use ($level) { - return ($record->level->value >= $level->value); - }); - - if (\count($records) > 0) { - $this->send($this->getFormatter()->formatBatch($records), static::ENDPOINT_BATCH); - } - } - - protected function send(string $data, string $endpoint): void - { - $ch = $this->getCurlHandler($endpoint); - - $headers = ['Content-Type: application/json']; - - if (\count($this->tag) > 0) { - $headers[] = 'X-LOGGLY-TAG: '.implode(',', $this->tag); - } - - curl_setopt($ch, CURLOPT_POSTFIELDS, $data); - curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); - - Curl\Util::execute($ch, 5, false); - } - - protected function getDefaultFormatter(): FormatterInterface - { - return new LogglyFormatter(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php deleted file mode 100644 index 6aa1b31..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/LogmaticHandler.php +++ /dev/null @@ -1,98 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\LogmaticFormatter; -use Monolog\LogRecord; - -/** - * @author Julien Breux - */ -class LogmaticHandler extends SocketHandler -{ - private string $logToken; - - private string $hostname; - - private string $appName; - - /** - * @param string $token Log token supplied by Logmatic. - * @param string $hostname Host name supplied by Logmatic. - * @param string $appName Application name supplied by Logmatic. - * @param bool $useSSL Whether or not SSL encryption should be used. - * - * @throws MissingExtensionException If SSL encryption is set to true and OpenSSL is missing - */ - public function __construct( - string $token, - string $hostname = '', - string $appName = '', - bool $useSSL = true, - $level = Level::Debug, - bool $bubble = true, - bool $persistent = false, - float $timeout = 0.0, - float $writingTimeout = 10.0, - ?float $connectionTimeout = null, - ?int $chunkSize = null - ) { - if ($useSSL && !\extension_loaded('openssl')) { - throw new MissingExtensionException('The OpenSSL PHP extension is required to use SSL encrypted connection for LogmaticHandler'); - } - - $endpoint = $useSSL ? 'ssl://api.logmatic.io:10515' : 'api.logmatic.io:10514'; - $endpoint .= '/v1/'; - - parent::__construct( - $endpoint, - $level, - $bubble, - $persistent, - $timeout, - $writingTimeout, - $connectionTimeout, - $chunkSize - ); - - $this->logToken = $token; - $this->hostname = $hostname; - $this->appName = $appName; - } - - /** - * @inheritDoc - */ - protected function generateDataStream(LogRecord $record): string - { - return $this->logToken . ' ' . $record->formatted; - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - $formatter = new LogmaticFormatter(); - - if ($this->hostname !== '') { - $formatter->setHostname($this->hostname); - } - if ($this->appName !== '') { - $formatter->setAppName($this->appName); - } - - return $formatter; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php deleted file mode 100644 index b6c8227..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/MailHandler.php +++ /dev/null @@ -1,91 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\HtmlFormatter; -use Monolog\LogRecord; - -/** - * Base class for all mail handlers - * - * @author Gyula Sallai - */ -abstract class MailHandler extends AbstractProcessingHandler -{ - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - $messages = []; - - foreach ($records as $record) { - if ($record->level->isLowerThan($this->level)) { - continue; - } - - $message = $this->processRecord($record); - $messages[] = $message; - } - - if (\count($messages) > 0) { - $this->send((string) $this->getFormatter()->formatBatch($messages), $messages); - } - } - - /** - * Send a mail with the given content - * - * @param string $content formatted email body to be sent - * @param array $records the array of log records that formed this content - * - * @phpstan-param non-empty-array $records - */ - abstract protected function send(string $content, array $records): void; - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->send((string) $record->formatted, [$record]); - } - - /** - * @phpstan-param non-empty-array $records - */ - protected function getHighestRecord(array $records): LogRecord - { - $highestRecord = null; - foreach ($records as $record) { - if ($highestRecord === null || $record->level->isHigherThan($highestRecord->level)) { - $highestRecord = $record; - } - } - - return $highestRecord; - } - - protected function isHtmlBody(string $body): bool - { - return ($body[0] ?? null) === '<'; - } - - /** - * Gets the default formatter. - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new HtmlFormatter(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php deleted file mode 100644 index 64e16c9..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/MandrillHandler.php +++ /dev/null @@ -1,83 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Swift; -use Swift_Message; - -/** - * MandrillHandler uses cURL to send the emails to the Mandrill API - * - * @author Adam Nicholson - */ -class MandrillHandler extends MailHandler -{ - protected Swift_Message $message; - protected string $apiKey; - - /** - * @phpstan-param (Swift_Message|callable(): Swift_Message) $message - * - * @param string $apiKey A valid Mandrill API key - * @param callable|Swift_Message $message An example message for real messages, only the body will be replaced - * - * @throws \InvalidArgumentException if not a Swift Message is set - */ - public function __construct(string $apiKey, callable|Swift_Message $message, int|string|Level $level = Level::Error, bool $bubble = true) - { - parent::__construct($level, $bubble); - - if (!$message instanceof Swift_Message) { - $message = $message(); - } - if (!$message instanceof Swift_Message) { - throw new \InvalidArgumentException('You must provide either a Swift_Message instance or a callable returning it'); - } - $this->message = $message; - $this->apiKey = $apiKey; - } - - /** - * @inheritDoc - */ - protected function send(string $content, array $records): void - { - $mime = 'text/plain'; - if ($this->isHtmlBody($content)) { - $mime = 'text/html'; - } - - $message = clone $this->message; - $message->setBody($content, $mime); - /** @phpstan-ignore-next-line */ - if (version_compare(Swift::VERSION, '6.0.0', '>=')) { - $message->setDate(new \DateTimeImmutable()); - } else { - /** @phpstan-ignore-next-line */ - $message->setDate(time()); - } - - $ch = curl_init(); - - curl_setopt($ch, CURLOPT_URL, 'https://mandrillapp.com/api/1.0/messages/send-raw.json'); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ - 'key' => $this->apiKey, - 'raw_message' => (string) $message, - 'async' => false, - ])); - - Curl\Util::execute($ch); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php b/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php deleted file mode 100644 index 3965aee..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/MissingExtensionException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -/** - * Exception can be thrown if an extension for a handler is missing - * - * @author Christian Bergau - */ -class MissingExtensionException extends \Exception -{ -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php deleted file mode 100644 index 33ab68c..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/MongoDBHandler.php +++ /dev/null @@ -1,82 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use MongoDB\Driver\BulkWrite; -use MongoDB\Driver\Manager; -use MongoDB\Client; -use Monolog\Level; -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\MongoDBFormatter; -use Monolog\LogRecord; - -/** - * Logs to a MongoDB database. - * - * Usage example: - * - * $log = new \Monolog\Logger('application'); - * $client = new \MongoDB\Client('mongodb://localhost:27017'); - * $mongodb = new \Monolog\Handler\MongoDBHandler($client, 'logs', 'prod'); - * $log->pushHandler($mongodb); - * - * The above examples uses the MongoDB PHP library's client class; however, the - * MongoDB\Driver\Manager class from ext-mongodb is also supported. - */ -class MongoDBHandler extends AbstractProcessingHandler -{ - private \MongoDB\Collection $collection; - - private Client|Manager $manager; - - private string|null $namespace = null; - - /** - * Constructor. - * - * @param Client|Manager $mongodb MongoDB library or driver client - * @param string $database Database name - * @param string $collection Collection name - */ - public function __construct(Client|Manager $mongodb, string $database, string $collection, int|string|Level $level = Level::Debug, bool $bubble = true) - { - if ($mongodb instanceof Client) { - $this->collection = $mongodb->selectCollection($database, $collection); - } else { - $this->manager = $mongodb; - $this->namespace = $database . '.' . $collection; - } - - parent::__construct($level, $bubble); - } - - protected function write(LogRecord $record): void - { - if (isset($this->collection)) { - $this->collection->insertOne($record->formatted); - } - - if (isset($this->manager, $this->namespace)) { - $bulk = new BulkWrite; - $bulk->insert($record->formatted); - $this->manager->executeBulkWrite($this->namespace, $bulk); - } - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new MongoDBFormatter; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php deleted file mode 100644 index c68b1dd..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/NativeMailerHandler.php +++ /dev/null @@ -1,173 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Formatter\LineFormatter; - -/** - * NativeMailerHandler uses the mail() function to send the emails - * - * @author Christophe Coevoet - * @author Mark Garrett - */ -class NativeMailerHandler extends MailHandler -{ - /** - * The email addresses to which the message will be sent - * @var string[] - */ - protected array $to; - - /** - * The subject of the email - */ - protected string $subject; - - /** - * Optional headers for the message - * @var string[] - */ - protected array $headers = []; - - /** - * Optional parameters for the message - * @var string[] - */ - protected array $parameters = []; - - /** - * The wordwrap length for the message - */ - protected int $maxColumnWidth; - - /** - * The Content-type for the message - */ - protected string|null $contentType = null; - - /** - * The encoding for the message - */ - protected string $encoding = 'utf-8'; - - /** - * @param string|string[] $to The receiver of the mail - * @param string $subject The subject of the mail - * @param string $from The sender of the mail - * @param int $maxColumnWidth The maximum column width that the message lines will have - */ - public function __construct(string|array $to, string $subject, string $from, int|string|Level $level = Level::Error, bool $bubble = true, int $maxColumnWidth = 70) - { - parent::__construct($level, $bubble); - $this->to = (array) $to; - $this->subject = $subject; - $this->addHeader(sprintf('From: %s', $from)); - $this->maxColumnWidth = $maxColumnWidth; - } - - /** - * Add headers to the message - * - * @param string|string[] $headers Custom added headers - * @return $this - */ - public function addHeader($headers): self - { - foreach ((array) $headers as $header) { - if (strpos($header, "\n") !== false || strpos($header, "\r") !== false) { - throw new \InvalidArgumentException('Headers can not contain newline characters for security reasons'); - } - $this->headers[] = $header; - } - - return $this; - } - - /** - * Add parameters to the message - * - * @param string|string[] $parameters Custom added parameters - * @return $this - */ - public function addParameter($parameters): self - { - $this->parameters = array_merge($this->parameters, (array) $parameters); - - return $this; - } - - /** - * @inheritDoc - */ - protected function send(string $content, array $records): void - { - $contentType = $this->getContentType() ?? ($this->isHtmlBody($content) ? 'text/html' : 'text/plain'); - - if ($contentType !== 'text/html') { - $content = wordwrap($content, $this->maxColumnWidth); - } - - $headers = ltrim(implode("\r\n", $this->headers) . "\r\n", "\r\n"); - $headers .= 'Content-type: ' . $contentType . '; charset=' . $this->getEncoding() . "\r\n"; - if ($contentType === 'text/html' && false === strpos($headers, 'MIME-Version:')) { - $headers .= 'MIME-Version: 1.0' . "\r\n"; - } - - $subjectFormatter = new LineFormatter($this->subject); - $subject = $subjectFormatter->format($this->getHighestRecord($records)); - - $parameters = implode(' ', $this->parameters); - foreach ($this->to as $to) { - mail($to, $subject, $content, $headers, $parameters); - } - } - - public function getContentType(): ?string - { - return $this->contentType; - } - - public function getEncoding(): string - { - return $this->encoding; - } - - /** - * @param string $contentType The content type of the email - Defaults to text/plain. Use text/html for HTML messages. - * @return $this - */ - public function setContentType(string $contentType): self - { - if (strpos($contentType, "\n") !== false || strpos($contentType, "\r") !== false) { - throw new \InvalidArgumentException('The content type can not contain newline characters to prevent email header injection'); - } - - $this->contentType = $contentType; - - return $this; - } - - /** - * @return $this - */ - public function setEncoding(string $encoding): self - { - if (strpos($encoding, "\n") !== false || strpos($encoding, "\r") !== false) { - throw new \InvalidArgumentException('The encoding can not contain newline characters to prevent email header injection'); - } - - $this->encoding = $encoding; - - return $this; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php deleted file mode 100644 index 4f28dd4..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/NewRelicHandler.php +++ /dev/null @@ -1,180 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Utils; -use Monolog\Formatter\NormalizerFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Class to record a log on a NewRelic application. - * Enabling New Relic High Security mode may prevent capture of useful information. - * - * This handler requires a NormalizerFormatter to function and expects an array in $record->formatted - * - * @see https://docs.newrelic.com/docs/agents/php-agent - * @see https://docs.newrelic.com/docs/accounts-partnerships/accounts/security/high-security - */ -class NewRelicHandler extends AbstractProcessingHandler -{ - /** - * @inheritDoc - */ - public function __construct( - int|string|Level $level = Level::Error, - bool $bubble = true, - - /** - * Name of the New Relic application that will receive logs from this handler. - */ - protected string|null $appName = null, - - /** - * Some context and extra data is passed into the handler as arrays of values. Do we send them as is - * (useful if we are using the API), or explode them for display on the NewRelic RPM website? - */ - protected bool $explodeArrays = false, - - /** - * Name of the current transaction - */ - protected string|null $transactionName = null - ) { - parent::__construct($level, $bubble); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - if (!$this->isNewRelicEnabled()) { - throw new MissingExtensionException('The newrelic PHP extension is required to use the NewRelicHandler'); - } - - if (null !== ($appName = $this->getAppName($record->context))) { - $this->setNewRelicAppName($appName); - } - - if (null !== ($transactionName = $this->getTransactionName($record->context))) { - $this->setNewRelicTransactionName($transactionName); - unset($record->formatted['context']['transaction_name']); - } - - if (isset($record->context['exception']) && $record->context['exception'] instanceof \Throwable) { - newrelic_notice_error($record->message, $record->context['exception']); - unset($record->formatted['context']['exception']); - } else { - newrelic_notice_error($record->message); - } - - if (isset($record->formatted['context']) && \is_array($record->formatted['context'])) { - foreach ($record->formatted['context'] as $key => $parameter) { - if (\is_array($parameter) && $this->explodeArrays) { - foreach ($parameter as $paramKey => $paramValue) { - $this->setNewRelicParameter('context_' . $key . '_' . $paramKey, $paramValue); - } - } else { - $this->setNewRelicParameter('context_' . $key, $parameter); - } - } - } - - if (isset($record->formatted['extra']) && \is_array($record->formatted['extra'])) { - foreach ($record->formatted['extra'] as $key => $parameter) { - if (\is_array($parameter) && $this->explodeArrays) { - foreach ($parameter as $paramKey => $paramValue) { - $this->setNewRelicParameter('extra_' . $key . '_' . $paramKey, $paramValue); - } - } else { - $this->setNewRelicParameter('extra_' . $key, $parameter); - } - } - } - } - - /** - * Checks whether the NewRelic extension is enabled in the system. - */ - protected function isNewRelicEnabled(): bool - { - return \extension_loaded('newrelic'); - } - - /** - * Returns the appname where this log should be sent. Each log can override the default appname, set in this - * handler's constructor, by providing the appname in it's context. - * - * @param mixed[] $context - */ - protected function getAppName(array $context): ?string - { - if (isset($context['appname'])) { - return $context['appname']; - } - - return $this->appName; - } - - /** - * Returns the name of the current transaction. Each log can override the default transaction name, set in this - * handler's constructor, by providing the transaction_name in it's context - * - * @param mixed[] $context - */ - protected function getTransactionName(array $context): ?string - { - if (isset($context['transaction_name'])) { - return $context['transaction_name']; - } - - return $this->transactionName; - } - - /** - * Sets the NewRelic application that should receive this log. - */ - protected function setNewRelicAppName(string $appName): void - { - newrelic_set_appname($appName); - } - - /** - * Overwrites the name of the current transaction - */ - protected function setNewRelicTransactionName(string $transactionName): void - { - newrelic_name_transaction($transactionName); - } - - /** - * @param mixed $value - */ - protected function setNewRelicParameter(string $key, $value): void - { - if (null === $value || \is_scalar($value)) { - newrelic_add_custom_parameter($key, $value); - } else { - newrelic_add_custom_parameter($key, Utils::jsonEncode($value, null, true)); - } - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new NormalizerFormatter(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php deleted file mode 100644 index d9fea18..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/NoopHandler.php +++ /dev/null @@ -1,42 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\LogRecord; - -/** - * No-op - * - * This handler handles anything, but does nothing, and does not stop bubbling to the rest of the stack. - * This can be used for testing, or to disable a handler when overriding a configuration without - * influencing the rest of the stack. - * - * @author Roel Harbers - */ -class NoopHandler extends Handler -{ - /** - * @inheritDoc - */ - public function isHandling(LogRecord $record): bool - { - return true; - } - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - return false; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php deleted file mode 100644 index 1aa84e4..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/NullHandler.php +++ /dev/null @@ -1,56 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Psr\Log\LogLevel; -use Monolog\Logger; -use Monolog\LogRecord; - -/** - * Blackhole - * - * Any record it can handle will be thrown away. This can be used - * to put on top of an existing stack to override it temporarily. - * - * @author Jordi Boggiano - */ -class NullHandler extends Handler -{ - private Level $level; - - /** - * @param string|int|Level $level The minimum logging level at which this handler will be triggered - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function __construct(string|int|Level $level = Level::Debug) - { - $this->level = Logger::toMonologLevel($level); - } - - /** - * @inheritDoc - */ - public function isHandling(LogRecord $record): bool - { - return $record->level->value >= $this->level->value; - } - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - return $record->level->value >= $this->level->value; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php deleted file mode 100644 index b213a98..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/OverflowHandler.php +++ /dev/null @@ -1,139 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Handler to only pass log messages when a certain threshold of number of messages is reached. - * - * This can be useful in cases of processing a batch of data, but you're for example only interested - * in case it fails catastrophically instead of a warning for 1 or 2 events. Worse things can happen, right? - * - * Usage example: - * - * ``` - * $log = new Logger('application'); - * $handler = new SomeHandler(...) - * - * // Pass all warnings to the handler when more than 10 & all error messages when more then 5 - * $overflow = new OverflowHandler($handler, [Level::Warning->value => 10, Level::Error->value => 5]); - * - * $log->pushHandler($overflow); - *``` - * - * @author Kris Buist - */ -class OverflowHandler extends AbstractHandler implements FormattableHandlerInterface -{ - private HandlerInterface $handler; - - /** @var array */ - private array $thresholdMap = []; - - /** - * Buffer of all messages passed to the handler before the threshold was reached - * - * @var mixed[][] - */ - private array $buffer = []; - - /** - * @param array $thresholdMap Dictionary of log level value => threshold - */ - public function __construct( - HandlerInterface $handler, - array $thresholdMap = [], - $level = Level::Debug, - bool $bubble = true - ) { - $this->handler = $handler; - foreach ($thresholdMap as $thresholdLevel => $threshold) { - $this->thresholdMap[$thresholdLevel] = $threshold; - } - parent::__construct($level, $bubble); - } - - /** - * Handles a record. - * - * All records may be passed to this method, and the handler should discard - * those that it does not want to handle. - * - * The return value of this function controls the bubbling process of the handler stack. - * Unless the bubbling is interrupted (by returning true), the Logger class will keep on - * calling further handlers in the stack with a given log record. - * - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if ($record->level->isLowerThan($this->level)) { - return false; - } - - $level = $record->level->value; - - if (!isset($this->thresholdMap[$level])) { - $this->thresholdMap[$level] = 0; - } - - if ($this->thresholdMap[$level] > 0) { - // The overflow threshold is not yet reached, so we're buffering the record and lowering the threshold by 1 - $this->thresholdMap[$level]--; - $this->buffer[$level][] = $record; - - return false === $this->bubble; - } - - if ($this->thresholdMap[$level] == 0) { - // This current message is breaking the threshold. Flush the buffer and continue handling the current record - foreach ($this->buffer[$level] ?? [] as $buffered) { - $this->handler->handle($buffered); - } - $this->thresholdMap[$level]--; - unset($this->buffer[$level]); - } - - $this->handler->handle($record); - - return false === $this->bubble; - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - if ($this->handler instanceof FormattableHandlerInterface) { - $this->handler->setFormatter($formatter); - - return $this; - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($this->handler).' does not support formatters.'); - } - - /** - * @inheritDoc - */ - public function getFormatter(): FormatterInterface - { - if ($this->handler instanceof FormattableHandlerInterface) { - return $this->handler->getFormatter(); - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($this->handler).' does not support formatters.'); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php deleted file mode 100644 index 8aa78e4..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/PHPConsoleHandler.php +++ /dev/null @@ -1,303 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\LineFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\Level; -use Monolog\Utils; -use PhpConsole\Connector; -use PhpConsole\Handler as VendorPhpConsoleHandler; -use PhpConsole\Helper; -use Monolog\LogRecord; -use PhpConsole\Storage; - -/** - * Monolog handler for Google Chrome extension "PHP Console" - * - * Display PHP error/debug log messages in Google Chrome console and notification popups, executes PHP code remotely - * - * Usage: - * 1. Install Google Chrome extension [now dead and removed from the chrome store] - * 2. See overview https://github.com/barbushin/php-console#overview - * 3. Install PHP Console library https://github.com/barbushin/php-console#installation - * 4. Example (result will looks like http://i.hizliresim.com/vg3Pz4.png) - * - * $logger = new \Monolog\Logger('all', array(new \Monolog\Handler\PHPConsoleHandler())); - * \Monolog\ErrorHandler::register($logger); - * echo $undefinedVar; - * $logger->debug('SELECT * FROM users', array('db', 'time' => 0.012)); - * PC::debug($_SERVER); // PHP Console debugger for any type of vars - * - * @author Sergey Barbushin https://www.linkedin.com/in/barbushin - * @phpstan-type Options array{ - * enabled: bool, - * classesPartialsTraceIgnore: string[], - * debugTagsKeysInContext: array, - * useOwnErrorsHandler: bool, - * useOwnExceptionsHandler: bool, - * sourcesBasePath: string|null, - * registerHelper: bool, - * serverEncoding: string|null, - * headersLimit: int|null, - * password: string|null, - * enableSslOnlyMode: bool, - * ipMasks: string[], - * enableEvalListener: bool, - * dumperDetectCallbacks: bool, - * dumperLevelLimit: int, - * dumperItemsCountLimit: int, - * dumperItemSizeLimit: int, - * dumperDumpSizeLimit: int, - * detectDumpTraceAndSource: bool, - * dataStorage: Storage|null - * } - * @phpstan-type InputOptions array{ - * enabled?: bool, - * classesPartialsTraceIgnore?: string[], - * debugTagsKeysInContext?: array, - * useOwnErrorsHandler?: bool, - * useOwnExceptionsHandler?: bool, - * sourcesBasePath?: string|null, - * registerHelper?: bool, - * serverEncoding?: string|null, - * headersLimit?: int|null, - * password?: string|null, - * enableSslOnlyMode?: bool, - * ipMasks?: string[], - * enableEvalListener?: bool, - * dumperDetectCallbacks?: bool, - * dumperLevelLimit?: int, - * dumperItemsCountLimit?: int, - * dumperItemSizeLimit?: int, - * dumperDumpSizeLimit?: int, - * detectDumpTraceAndSource?: bool, - * dataStorage?: Storage|null - * } - * - * @deprecated Since 2.8.0 and 3.2.0, PHPConsole is abandoned and thus we will drop this handler in Monolog 4 - */ -class PHPConsoleHandler extends AbstractProcessingHandler -{ - /** - * @phpstan-var Options - */ - private array $options = [ - 'enabled' => true, // bool Is PHP Console server enabled - 'classesPartialsTraceIgnore' => ['Monolog\\'], // array Hide calls of classes started with... - 'debugTagsKeysInContext' => [0, 'tag'], // bool Is PHP Console server enabled - 'useOwnErrorsHandler' => false, // bool Enable errors handling - 'useOwnExceptionsHandler' => false, // bool Enable exceptions handling - 'sourcesBasePath' => null, // string Base path of all project sources to strip in errors source paths - 'registerHelper' => true, // bool Register PhpConsole\Helper that allows short debug calls like PC::debug($var, 'ta.g.s') - 'serverEncoding' => null, // string|null Server internal encoding - 'headersLimit' => null, // int|null Set headers size limit for your web-server - 'password' => null, // string|null Protect PHP Console connection by password - 'enableSslOnlyMode' => false, // bool Force connection by SSL for clients with PHP Console installed - 'ipMasks' => [], // array Set IP masks of clients that will be allowed to connect to PHP Console: array('192.168.*.*', '127.0.0.1') - 'enableEvalListener' => false, // bool Enable eval request to be handled by eval dispatcher(if enabled, 'password' option is also required) - 'dumperDetectCallbacks' => false, // bool Convert callback items in dumper vars to (callback SomeClass::someMethod) strings - 'dumperLevelLimit' => 5, // int Maximum dumped vars array or object nested dump level - 'dumperItemsCountLimit' => 100, // int Maximum dumped var same level array items or object properties number - 'dumperItemSizeLimit' => 5000, // int Maximum length of any string or dumped array item - 'dumperDumpSizeLimit' => 500000, // int Maximum approximate size of dumped vars result formatted in JSON - 'detectDumpTraceAndSource' => false, // bool Autodetect and append trace data to debug - 'dataStorage' => null, // \PhpConsole\Storage|null Fixes problem with custom $_SESSION handler(see http://goo.gl/Ne8juJ) - ]; - - private Connector $connector; - - /** - * @param array $options See \Monolog\Handler\PHPConsoleHandler::$options for more details - * @param Connector|null $connector Instance of \PhpConsole\Connector class (optional) - * @throws \RuntimeException - * @phpstan-param InputOptions $options - */ - public function __construct(array $options = [], ?Connector $connector = null, int|string|Level $level = Level::Debug, bool $bubble = true) - { - if (!class_exists('PhpConsole\Connector')) { - throw new \RuntimeException('PHP Console library not found. See https://github.com/barbushin/php-console#installation'); - } - parent::__construct($level, $bubble); - $this->options = $this->initOptions($options); - $this->connector = $this->initConnector($connector); - } - - /** - * @param array $options - * @return array - * - * @phpstan-param InputOptions $options - * @phpstan-return Options - */ - private function initOptions(array $options): array - { - $wrongOptions = array_diff(array_keys($options), array_keys($this->options)); - if (\count($wrongOptions) > 0) { - throw new \RuntimeException('Unknown options: ' . implode(', ', $wrongOptions)); - } - - return array_replace($this->options, $options); - } - - private function initConnector(?Connector $connector = null): Connector - { - if (null === $connector) { - if ($this->options['dataStorage'] instanceof Storage) { - Connector::setPostponeStorage($this->options['dataStorage']); - } - $connector = Connector::getInstance(); - } - - if ($this->options['registerHelper'] && !Helper::isRegistered()) { - Helper::register(); - } - - if ($this->options['enabled'] && $connector->isActiveClient()) { - if ($this->options['useOwnErrorsHandler'] || $this->options['useOwnExceptionsHandler']) { - $handler = VendorPhpConsoleHandler::getInstance(); - $handler->setHandleErrors($this->options['useOwnErrorsHandler']); - $handler->setHandleExceptions($this->options['useOwnExceptionsHandler']); - $handler->start(); - } - if (null !== $this->options['sourcesBasePath']) { - $connector->setSourcesBasePath($this->options['sourcesBasePath']); - } - if (null !== $this->options['serverEncoding']) { - $connector->setServerEncoding($this->options['serverEncoding']); - } - if (null !== $this->options['password']) { - $connector->setPassword($this->options['password']); - } - if ($this->options['enableSslOnlyMode']) { - $connector->enableSslOnlyMode(); - } - if (\count($this->options['ipMasks']) > 0) { - $connector->setAllowedIpMasks($this->options['ipMasks']); - } - if (null !== $this->options['headersLimit'] && $this->options['headersLimit'] > 0) { - $connector->setHeadersLimit($this->options['headersLimit']); - } - if ($this->options['detectDumpTraceAndSource']) { - $connector->getDebugDispatcher()->detectTraceAndSource = true; - } - $dumper = $connector->getDumper(); - $dumper->levelLimit = $this->options['dumperLevelLimit']; - $dumper->itemsCountLimit = $this->options['dumperItemsCountLimit']; - $dumper->itemSizeLimit = $this->options['dumperItemSizeLimit']; - $dumper->dumpSizeLimit = $this->options['dumperDumpSizeLimit']; - $dumper->detectCallbacks = $this->options['dumperDetectCallbacks']; - if ($this->options['enableEvalListener']) { - $connector->startEvalRequestsListener(); - } - } - - return $connector; - } - - public function getConnector(): Connector - { - return $this->connector; - } - - /** - * @return array - */ - public function getOptions(): array - { - return $this->options; - } - - public function handle(LogRecord $record): bool - { - if ($this->options['enabled'] && $this->connector->isActiveClient()) { - return parent::handle($record); - } - - return !$this->bubble; - } - - /** - * Writes the record down to the log of the implementing handler - */ - protected function write(LogRecord $record): void - { - if ($record->level->isLowerThan(Level::Notice)) { - $this->handleDebugRecord($record); - } elseif (isset($record->context['exception']) && $record->context['exception'] instanceof \Throwable) { - $this->handleExceptionRecord($record); - } else { - $this->handleErrorRecord($record); - } - } - - private function handleDebugRecord(LogRecord $record): void - { - [$tags, $filteredContext] = $this->getRecordTags($record); - $message = $record->message; - if (\count($filteredContext) > 0) { - $message .= ' ' . Utils::jsonEncode($this->connector->getDumper()->dump(array_filter($filteredContext)), null, true); - } - $this->connector->getDebugDispatcher()->dispatchDebug($message, $tags, $this->options['classesPartialsTraceIgnore']); - } - - private function handleExceptionRecord(LogRecord $record): void - { - $this->connector->getErrorsDispatcher()->dispatchException($record->context['exception']); - } - - private function handleErrorRecord(LogRecord $record): void - { - $context = $record->context; - - $this->connector->getErrorsDispatcher()->dispatchError( - $context['code'] ?? null, - $context['message'] ?? $record->message, - $context['file'] ?? null, - $context['line'] ?? null, - $this->options['classesPartialsTraceIgnore'] - ); - } - - /** - * @return array{string, mixed[]} - */ - private function getRecordTags(LogRecord $record): array - { - $tags = null; - $filteredContext = []; - if ($record->context !== []) { - $filteredContext = $record->context; - foreach ($this->options['debugTagsKeysInContext'] as $key) { - if (isset($filteredContext[$key])) { - $tags = $filteredContext[$key]; - if ($key === 0) { - array_shift($filteredContext); - } else { - unset($filteredContext[$key]); - } - break; - } - } - } - - return [$tags ?? $record->level->toPsrLogLevel(), $filteredContext]; - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new LineFormatter('%message%'); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php deleted file mode 100644 index 8b68e64..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/ProcessHandler.php +++ /dev/null @@ -1,186 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Stores to STDIN of any process, specified by a command. - * - * Usage example: - *
- * $log = new Logger('myLogger');
- * $log->pushHandler(new ProcessHandler('/usr/bin/php /var/www/monolog/someScript.php'));
- * 
- * - * @author Kolja Zuelsdorf - */ -class ProcessHandler extends AbstractProcessingHandler -{ - /** - * Holds the process to receive data on its STDIN. - * - * @var resource|bool|null - */ - private $process; - - private string $command; - - private ?string $cwd; - - /** - * @var resource[] - */ - private array $pipes = []; - - /** - * @var array - */ - protected const DESCRIPTOR_SPEC = [ - 0 => ['pipe', 'r'], // STDIN is a pipe that the child will read from - 1 => ['pipe', 'w'], // STDOUT is a pipe that the child will write to - 2 => ['pipe', 'w'], // STDERR is a pipe to catch the any errors - ]; - - /** - * @param string $command Command for the process to start. Absolute paths are recommended, - * especially if you do not use the $cwd parameter. - * @param string|null $cwd "Current working directory" (CWD) for the process to be executed in. - * @throws \InvalidArgumentException - */ - public function __construct(string $command, int|string|Level $level = Level::Debug, bool $bubble = true, ?string $cwd = null) - { - if ($command === '') { - throw new \InvalidArgumentException('The command argument must be a non-empty string.'); - } - if ($cwd === '') { - throw new \InvalidArgumentException('The optional CWD argument must be a non-empty string or null.'); - } - - parent::__construct($level, $bubble); - - $this->command = $command; - $this->cwd = $cwd; - } - - /** - * Writes the record down to the log of the implementing handler - * - * @throws \UnexpectedValueException - */ - protected function write(LogRecord $record): void - { - $this->ensureProcessIsStarted(); - - $this->writeProcessInput($record->formatted); - - $errors = $this->readProcessErrors(); - if ($errors !== '') { - throw new \UnexpectedValueException(sprintf('Errors while writing to process: %s', $errors)); - } - } - - /** - * Makes sure that the process is actually started, and if not, starts it, - * assigns the stream pipes, and handles startup errors, if any. - */ - private function ensureProcessIsStarted(): void - { - if (\is_resource($this->process) === false) { - $this->startProcess(); - - $this->handleStartupErrors(); - } - } - - /** - * Starts the actual process and sets all streams to non-blocking. - */ - private function startProcess(): void - { - $this->process = proc_open($this->command, static::DESCRIPTOR_SPEC, $this->pipes, $this->cwd); - - foreach ($this->pipes as $pipe) { - stream_set_blocking($pipe, false); - } - } - - /** - * Selects the STDERR stream, handles upcoming startup errors, and throws an exception, if any. - * - * @throws \UnexpectedValueException - */ - private function handleStartupErrors(): void - { - $selected = $this->selectErrorStream(); - if (false === $selected) { - throw new \UnexpectedValueException('Something went wrong while selecting a stream.'); - } - - $errors = $this->readProcessErrors(); - - if (\is_resource($this->process) === false || $errors !== '') { - throw new \UnexpectedValueException( - sprintf('The process "%s" could not be opened: ' . $errors, $this->command) - ); - } - } - - /** - * Selects the STDERR stream. - * - * @return int|bool - */ - protected function selectErrorStream() - { - $empty = []; - $errorPipes = [$this->pipes[2]]; - - return stream_select($errorPipes, $empty, $empty, 1); - } - - /** - * Reads the errors of the process, if there are any. - * - * @codeCoverageIgnore - * @return string Empty string if there are no errors. - */ - protected function readProcessErrors(): string - { - return (string) stream_get_contents($this->pipes[2]); - } - - /** - * Writes to the input stream of the opened process. - * - * @codeCoverageIgnore - */ - protected function writeProcessInput(string $string): void - { - fwrite($this->pipes[0], $string); - } - - /** - * @inheritDoc - */ - public function close(): void - { - if (\is_resource($this->process)) { - foreach ($this->pipes as $pipe) { - fclose($pipe); - } - proc_close($this->process); - $this->process = null; - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php b/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php deleted file mode 100644 index 9fb290f..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerInterface.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Processor\ProcessorInterface; -use Monolog\LogRecord; - -/** - * Interface to describe loggers that have processors - * - * @author Jordi Boggiano - */ -interface ProcessableHandlerInterface -{ - /** - * Adds a processor in the stack. - * - * @phpstan-param ProcessorInterface|(callable(LogRecord): LogRecord) $callback - * - * @param ProcessorInterface|callable $callback - * @return HandlerInterface self - */ - public function pushProcessor(callable $callback): HandlerInterface; - - /** - * Removes the processor on top of the stack and returns it. - * - * @phpstan-return ProcessorInterface|(callable(LogRecord): LogRecord) $callback - * - * @throws \LogicException In case the processor stack is empty - * @return callable|ProcessorInterface - */ - public function popProcessor(): callable; -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php b/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php deleted file mode 100644 index 74eeddd..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/ProcessableHandlerTrait.php +++ /dev/null @@ -1,70 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\ResettableInterface; -use Monolog\Processor\ProcessorInterface; -use Monolog\LogRecord; - -/** - * Helper trait for implementing ProcessableInterface - * - * @author Jordi Boggiano - */ -trait ProcessableHandlerTrait -{ - /** - * @var callable[] - * @phpstan-var array<(callable(LogRecord): LogRecord)|ProcessorInterface> - */ - protected array $processors = []; - - /** - * @inheritDoc - */ - public function pushProcessor(callable $callback): HandlerInterface - { - array_unshift($this->processors, $callback); - - return $this; - } - - /** - * @inheritDoc - */ - public function popProcessor(): callable - { - if (\count($this->processors) === 0) { - throw new \LogicException('You tried to pop from an empty processor stack.'); - } - - return array_shift($this->processors); - } - - protected function processRecord(LogRecord $record): LogRecord - { - foreach ($this->processors as $processor) { - $record = $processor($record); - } - - return $record; - } - - protected function resetProcessors(): void - { - foreach ($this->processors as $processor) { - if ($processor instanceof ResettableInterface) { - $processor->reset(); - } - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php deleted file mode 100644 index 100e8e4..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/PsrHandler.php +++ /dev/null @@ -1,92 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Psr\Log\LoggerInterface; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Proxies log messages to an existing PSR-3 compliant logger. - * - * If a formatter is configured, the formatter's output MUST be a string and the - * formatted message will be fed to the wrapped PSR logger instead of the original - * log record's message. - * - * @author Michael Moussa - */ -class PsrHandler extends AbstractHandler implements FormattableHandlerInterface -{ - /** - * PSR-3 compliant logger - */ - protected LoggerInterface $logger; - - protected FormatterInterface|null $formatter = null; - private bool $includeExtra; - - /** - * @param LoggerInterface $logger The underlying PSR-3 compliant logger to which messages will be proxied - */ - public function __construct(LoggerInterface $logger, int|string|Level $level = Level::Debug, bool $bubble = true, bool $includeExtra = false) - { - parent::__construct($level, $bubble); - - $this->logger = $logger; - $this->includeExtra = $includeExtra; - } - - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if (!$this->isHandling($record)) { - return false; - } - - $message = $this->formatter !== null - ? (string) $this->formatter->format($record) - : $record->message; - - $context = $this->includeExtra - ? [...$record->extra, ...$record->context] - : $record->context; - - $this->logger->log($record->level->toPsrLogLevel(), $message, $context); - - return false === $this->bubble; - } - - /** - * Sets the formatter. - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - $this->formatter = $formatter; - - return $this; - } - - /** - * Gets the formatter. - */ - public function getFormatter(): FormatterInterface - { - if ($this->formatter === null) { - throw new \LogicException('No formatter has been set and this handler does not have a default formatter'); - } - - return $this->formatter; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php deleted file mode 100644 index b2a7895..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/PushoverHandler.php +++ /dev/null @@ -1,246 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Logger; -use Monolog\Utils; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Sends notifications through the pushover api to mobile phones - * - * @author Sebastian Göttschkes - * @see https://www.pushover.net/api - */ -class PushoverHandler extends SocketHandler -{ - private string $token; - - /** @var array */ - private array $users; - - private string $title; - - private string|int|null $user = null; - - private int $retry; - - private int $expire; - - private Level $highPriorityLevel; - - private Level $emergencyLevel; - - private bool $useFormattedMessage = false; - - /** - * All parameters that can be sent to Pushover - * @see https://pushover.net/api - * @var array - */ - private array $parameterNames = [ - 'token' => true, - 'user' => true, - 'message' => true, - 'device' => true, - 'title' => true, - 'url' => true, - 'url_title' => true, - 'priority' => true, - 'timestamp' => true, - 'sound' => true, - 'retry' => true, - 'expire' => true, - 'callback' => true, - ]; - - /** - * Sounds the api supports by default - * @see https://pushover.net/api#sounds - * @var string[] - */ - private array $sounds = [ - 'pushover', 'bike', 'bugle', 'cashregister', 'classical', 'cosmic', 'falling', 'gamelan', 'incoming', - 'intermission', 'magic', 'mechanical', 'pianobar', 'siren', 'spacealarm', 'tugboat', 'alien', 'climb', - 'persistent', 'echo', 'updown', 'none', - ]; - - /** - * @param string $token Pushover api token - * @param string|array $users Pushover user id or array of ids the message will be sent to - * @param string|null $title Title sent to the Pushover API - * @param bool $useSSL Whether to connect via SSL. Required when pushing messages to users that are not - * the pushover.net app owner. OpenSSL is required for this option. - * @param int $retry The retry parameter specifies how often (in seconds) the Pushover servers will - * send the same notification to the user. - * @param int $expire The expire parameter specifies how many seconds your notification will continue - * to be retried for (every retry seconds). - * - * @param int|string|Level|LogLevel::* $highPriorityLevel The minimum logging level at which this handler will start - * sending "high priority" requests to the Pushover API - * @param int|string|Level|LogLevel::* $emergencyLevel The minimum logging level at which this handler will start - * sending "emergency" requests to the Pushover API - * - * - * @phpstan-param string|array $users - * @phpstan-param value-of|value-of|Level|LogLevel::* $highPriorityLevel - * @phpstan-param value-of|value-of|Level|LogLevel::* $emergencyLevel - */ - public function __construct( - string $token, - $users, - ?string $title = null, - int|string|Level $level = Level::Critical, - bool $bubble = true, - bool $useSSL = true, - int|string|Level $highPriorityLevel = Level::Critical, - int|string|Level $emergencyLevel = Level::Emergency, - int $retry = 30, - int $expire = 25200, - bool $persistent = false, - float $timeout = 0.0, - float $writingTimeout = 10.0, - ?float $connectionTimeout = null, - ?int $chunkSize = null - ) { - $connectionString = $useSSL ? 'ssl://api.pushover.net:443' : 'api.pushover.net:80'; - parent::__construct( - $connectionString, - $level, - $bubble, - $persistent, - $timeout, - $writingTimeout, - $connectionTimeout, - $chunkSize - ); - - $this->token = $token; - $this->users = (array) $users; - $this->title = $title ?? (string) gethostname(); - $this->highPriorityLevel = Logger::toMonologLevel($highPriorityLevel); - $this->emergencyLevel = Logger::toMonologLevel($emergencyLevel); - $this->retry = $retry; - $this->expire = $expire; - } - - protected function generateDataStream(LogRecord $record): string - { - $content = $this->buildContent($record); - - return $this->buildHeader($content) . $content; - } - - private function buildContent(LogRecord $record): string - { - // Pushover has a limit of 512 characters on title and message combined. - $maxMessageLength = 512 - \strlen($this->title); - - $message = ($this->useFormattedMessage) ? $record->formatted : $record->message; - $message = Utils::substr($message, 0, $maxMessageLength); - - $timestamp = $record->datetime->getTimestamp(); - - $dataArray = [ - 'token' => $this->token, - 'user' => $this->user, - 'message' => $message, - 'title' => $this->title, - 'timestamp' => $timestamp, - ]; - - if ($record->level->value >= $this->emergencyLevel->value) { - $dataArray['priority'] = 2; - $dataArray['retry'] = $this->retry; - $dataArray['expire'] = $this->expire; - } elseif ($record->level->value >= $this->highPriorityLevel->value) { - $dataArray['priority'] = 1; - } - - // First determine the available parameters - $context = array_intersect_key($record->context, $this->parameterNames); - $extra = array_intersect_key($record->extra, $this->parameterNames); - - // Least important info should be merged with subsequent info - $dataArray = array_merge($extra, $context, $dataArray); - - // Only pass sounds that are supported by the API - if (isset($dataArray['sound']) && !\in_array($dataArray['sound'], $this->sounds, true)) { - unset($dataArray['sound']); - } - - return http_build_query($dataArray); - } - - private function buildHeader(string $content): string - { - $header = "POST /1/messages.json HTTP/1.1\r\n"; - $header .= "Host: api.pushover.net\r\n"; - $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; - $header .= "Content-Length: " . \strlen($content) . "\r\n"; - $header .= "\r\n"; - - return $header; - } - - protected function write(LogRecord $record): void - { - foreach ($this->users as $user) { - $this->user = $user; - - parent::write($record); - $this->closeSocket(); - } - - $this->user = null; - } - - /** - * @param int|string|Level|LogLevel::* $level - * @return $this - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function setHighPriorityLevel(int|string|Level $level): self - { - $this->highPriorityLevel = Logger::toMonologLevel($level); - - return $this; - } - - /** - * @param int|string|Level|LogLevel::* $level - * @return $this - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function setEmergencyLevel(int|string|Level $level): self - { - $this->emergencyLevel = Logger::toMonologLevel($level); - - return $this; - } - - /** - * Use the formatted message? - * - * @return $this - */ - public function useFormattedMessage(bool $useFormattedMessage): self - { - $this->useFormattedMessage = $useFormattedMessage; - - return $this; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php deleted file mode 100644 index 66cb324..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/RedisHandler.php +++ /dev/null @@ -1,94 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\LineFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\Level; -use Monolog\LogRecord; -use Predis\Client as Predis; -use Redis; - -/** - * Logs to a Redis key using rpush - * - * usage example: - * - * $log = new Logger('application'); - * $redis = new RedisHandler(new Predis\Client("tcp://localhost:6379"), "logs"); - * $log->pushHandler($redis); - * - * @author Thomas Tourlourat - */ -class RedisHandler extends AbstractProcessingHandler -{ - /** @var Predis|Redis */ - private Predis|Redis $redisClient; - private string $redisKey; - protected int $capSize; - - /** - * @param Predis|Redis $redis The redis instance - * @param string $key The key name to push records to - * @param int $capSize Number of entries to limit list size to, 0 = unlimited - */ - public function __construct(Predis|Redis $redis, string $key, int|string|Level $level = Level::Debug, bool $bubble = true, int $capSize = 0) - { - $this->redisClient = $redis; - $this->redisKey = $key; - $this->capSize = $capSize; - - parent::__construct($level, $bubble); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - if ($this->capSize > 0) { - $this->writeCapped($record); - } else { - $this->redisClient->rpush($this->redisKey, $record->formatted); - } - } - - /** - * Write and cap the collection - * Writes the record to the redis list and caps its - */ - protected function writeCapped(LogRecord $record): void - { - if ($this->redisClient instanceof Redis) { - $mode = \defined('Redis::MULTI') ? Redis::MULTI : 1; - $this->redisClient->multi($mode) - ->rPush($this->redisKey, $record->formatted) - ->lTrim($this->redisKey, -$this->capSize, -1) - ->exec(); - } else { - $redisKey = $this->redisKey; - $capSize = $this->capSize; - $this->redisClient->transaction(function ($tx) use ($record, $redisKey, $capSize) { - $tx->rpush($redisKey, $record->formatted); - $tx->ltrim($redisKey, -$capSize, -1); - }); - } - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new LineFormatter(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php deleted file mode 100644 index fa8e9e9..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/RedisPubSubHandler.php +++ /dev/null @@ -1,65 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\LineFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\Level; -use Monolog\LogRecord; -use Predis\Client as Predis; -use Redis; - -/** - * Sends the message to a Redis Pub/Sub channel using PUBLISH - * - * usage example: - * - * $log = new Logger('application'); - * $redis = new RedisPubSubHandler(new Predis\Client("tcp://localhost:6379"), "logs", Level::Warning); - * $log->pushHandler($redis); - * - * @author Gaëtan Faugère - */ -class RedisPubSubHandler extends AbstractProcessingHandler -{ - /** @var Predis|Redis */ - private Predis|Redis $redisClient; - private string $channelKey; - - /** - * @param Predis|Redis $redis The redis instance - * @param string $key The channel key to publish records to - */ - public function __construct(Predis|Redis $redis, string $key, int|string|Level $level = Level::Debug, bool $bubble = true) - { - $this->redisClient = $redis; - $this->channelKey = $key; - - parent::__construct($level, $bubble); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->redisClient->publish($this->channelKey, $record->formatted); - } - - /** - * @inheritDoc - */ - protected function getDefaultFormatter(): FormatterInterface - { - return new LineFormatter(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php deleted file mode 100644 index 1d12472..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/RollbarHandler.php +++ /dev/null @@ -1,133 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Rollbar\RollbarLogger; -use Throwable; -use Monolog\LogRecord; - -/** - * Sends errors to Rollbar - * - * If the context data contains a `payload` key, that is used as an array - * of payload options to RollbarLogger's log method. - * - * Rollbar's context info will contain the context + extra keys from the log record - * merged, and then on top of that a few keys: - * - * - level (rollbar level name) - * - monolog_level (monolog level name, raw level, as rollbar only has 5 but monolog 8) - * - channel - * - datetime (unix timestamp) - * - * @author Paul Statezny - */ -class RollbarHandler extends AbstractProcessingHandler -{ - protected RollbarLogger $rollbarLogger; - - /** - * Records whether any log records have been added since the last flush of the rollbar notifier - */ - private bool $hasRecords = false; - - protected bool $initialized = false; - - /** - * @param RollbarLogger $rollbarLogger RollbarLogger object constructed with valid token - */ - public function __construct(RollbarLogger $rollbarLogger, int|string|Level $level = Level::Error, bool $bubble = true) - { - $this->rollbarLogger = $rollbarLogger; - - parent::__construct($level, $bubble); - } - - /** - * Translates Monolog log levels to Rollbar levels. - * - * @return 'debug'|'info'|'warning'|'error'|'critical' - */ - protected function toRollbarLevel(Level $level): string - { - return match ($level) { - Level::Debug => 'debug', - Level::Info => 'info', - Level::Notice => 'info', - Level::Warning => 'warning', - Level::Error => 'error', - Level::Critical => 'critical', - Level::Alert => 'critical', - Level::Emergency => 'critical', - }; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - if (!$this->initialized) { - // __destructor() doesn't get called on Fatal errors - register_shutdown_function([$this, 'close']); - $this->initialized = true; - } - - $context = $record->context; - $context = array_merge($context, $record->extra, [ - 'level' => $this->toRollbarLevel($record->level), - 'monolog_level' => $record->level->getName(), - 'channel' => $record->channel, - 'datetime' => $record->datetime->format('U'), - ]); - - if (isset($context['exception']) && $context['exception'] instanceof Throwable) { - $exception = $context['exception']; - unset($context['exception']); - $toLog = $exception; - } else { - $toLog = $record->message; - } - - // @phpstan-ignore-next-line - $this->rollbarLogger->log($context['level'], $toLog, $context); - - $this->hasRecords = true; - } - - public function flush(): void - { - if ($this->hasRecords) { - $this->rollbarLogger->flush(); - $this->hasRecords = false; - } - } - - /** - * @inheritDoc - */ - public function close(): void - { - $this->flush(); - } - - /** - * @inheritDoc - */ - public function reset(): void - { - $this->flush(); - - parent::reset(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php deleted file mode 100644 index 32a496b..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/RotatingFileHandler.php +++ /dev/null @@ -1,217 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use InvalidArgumentException; -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Stores logs to files that are rotated every day and a limited number of files are kept. - * - * This rotation is only intended to be used as a workaround. Using logrotate to - * handle the rotation is strongly encouraged when you can use it. - * - * @author Christophe Coevoet - * @author Jordi Boggiano - */ -class RotatingFileHandler extends StreamHandler -{ - public const FILE_PER_DAY = 'Y-m-d'; - public const FILE_PER_MONTH = 'Y-m'; - public const FILE_PER_YEAR = 'Y'; - - protected string $filename; - protected int $maxFiles; - protected bool|null $mustRotate = null; - protected \DateTimeImmutable $nextRotation; - protected string $filenameFormat; - protected string $dateFormat; - - /** - * @param int $maxFiles The maximal amount of files to keep (0 means unlimited) - * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) - * @param bool $useLocking Try to lock log file before doing any writes - */ - public function __construct(string $filename, int $maxFiles = 0, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false, string $dateFormat = self::FILE_PER_DAY, string $filenameFormat = '{filename}-{date}') - { - $this->filename = Utils::canonicalizePath($filename); - $this->maxFiles = $maxFiles; - $this->setFilenameFormat($filenameFormat, $dateFormat); - $this->nextRotation = $this->getNextRotation(); - - parent::__construct($this->getTimedFilename(), $level, $bubble, $filePermission, $useLocking); - } - - /** - * @inheritDoc - */ - public function close(): void - { - parent::close(); - - if (true === $this->mustRotate) { - $this->rotate(); - } - } - - /** - * @inheritDoc - */ - public function reset(): void - { - parent::reset(); - - if (true === $this->mustRotate) { - $this->rotate(); - } - } - - /** - * @return $this - */ - public function setFilenameFormat(string $filenameFormat, string $dateFormat): self - { - $this->setDateFormat($dateFormat); - if (substr_count($filenameFormat, '{date}') === 0) { - throw new InvalidArgumentException( - 'Invalid filename format - format must contain at least `{date}`, because otherwise rotating is impossible.' - ); - } - $this->filenameFormat = $filenameFormat; - $this->url = $this->getTimedFilename(); - $this->close(); - - return $this; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - // on the first record written, if the log is new, we should rotate (once per day) - if (null === $this->mustRotate) { - $this->mustRotate = null === $this->url || !file_exists($this->url); - } - - if ($this->nextRotation <= $record->datetime) { - $this->mustRotate = true; - $this->close(); - } - - parent::write($record); - } - - /** - * Rotates the files. - */ - protected function rotate(): void - { - // update filename - $this->url = $this->getTimedFilename(); - $this->nextRotation = $this->getNextRotation(); - - // skip GC of old logs if files are unlimited - if (0 === $this->maxFiles) { - return; - } - - $logFiles = glob($this->getGlobPattern()); - if (false === $logFiles) { - // failed to glob - return; - } - - if ($this->maxFiles >= \count($logFiles)) { - // no files to remove - return; - } - - // Sorting the files by name to remove the older ones - usort($logFiles, function ($a, $b) { - return strcmp($b, $a); - }); - - foreach (\array_slice($logFiles, $this->maxFiles) as $file) { - if (is_writable($file)) { - // suppress errors here as unlink() might fail if two processes - // are cleaning up/rotating at the same time - set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline): bool { - return false; - }); - unlink($file); - restore_error_handler(); - } - } - - $this->mustRotate = false; - } - - protected function getTimedFilename(): string - { - $fileInfo = pathinfo($this->filename); - $timedFilename = str_replace( - ['{filename}', '{date}'], - [$fileInfo['filename'], date($this->dateFormat)], - ($fileInfo['dirname'] ?? '') . '/' . $this->filenameFormat - ); - - if (isset($fileInfo['extension'])) { - $timedFilename .= '.'.$fileInfo['extension']; - } - - return $timedFilename; - } - - protected function getGlobPattern(): string - { - $fileInfo = pathinfo($this->filename); - $glob = str_replace( - ['{filename}', '{date}'], - [$fileInfo['filename'], str_replace( - ['Y', 'y', 'm', 'd'], - ['[0-9][0-9][0-9][0-9]', '[0-9][0-9]', '[0-9][0-9]', '[0-9][0-9]'], - $this->dateFormat - )], - ($fileInfo['dirname'] ?? '') . '/' . $this->filenameFormat - ); - if (isset($fileInfo['extension'])) { - $glob .= '.'.$fileInfo['extension']; - } - - return $glob; - } - - protected function setDateFormat(string $dateFormat): void - { - if (0 === preg_match('{^[Yy](([/_.-]?m)([/_.-]?d)?)?$}', $dateFormat)) { - throw new InvalidArgumentException( - 'Invalid date format - format must be one of '. - 'RotatingFileHandler::FILE_PER_DAY ("Y-m-d"), RotatingFileHandler::FILE_PER_MONTH ("Y-m") '. - 'or RotatingFileHandler::FILE_PER_YEAR ("Y"), or you can set one of the '. - 'date formats using slashes, underscores and/or dots instead of dashes.' - ); - } - $this->dateFormat = $dateFormat; - } - - protected function getNextRotation(): \DateTimeImmutable - { - return match (str_replace(['/','_','.'], '-', $this->dateFormat)) { - self::FILE_PER_MONTH => (new \DateTimeImmutable('first day of next month'))->setTime(0, 0, 0), - self::FILE_PER_YEAR => (new \DateTimeImmutable('first day of January next year'))->setTime(0, 0, 0), - default => (new \DateTimeImmutable('tomorrow'))->setTime(0, 0, 0), - }; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php deleted file mode 100644 index 1b10580..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SamplingHandler.php +++ /dev/null @@ -1,121 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Closure; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Sampling handler - * - * A sampled event stream can be useful for logging high frequency events in - * a production environment where you only need an idea of what is happening - * and are not concerned with capturing every occurrence. Since the decision to - * handle or not handle a particular event is determined randomly, the - * resulting sampled log is not guaranteed to contain 1/N of the events that - * occurred in the application, but based on the Law of large numbers, it will - * tend to be close to this ratio with a large number of attempts. - * - * @author Bryan Davis - * @author Kunal Mehta - */ -class SamplingHandler extends AbstractHandler implements ProcessableHandlerInterface, FormattableHandlerInterface -{ - use ProcessableHandlerTrait; - - /** - * Handler or factory Closure($record, $this) - * - * @phpstan-var (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface - */ - protected Closure|HandlerInterface $handler; - - protected int $factor; - - /** - * @phpstan-param (Closure(LogRecord|null, HandlerInterface): HandlerInterface)|HandlerInterface $handler - * - * @param Closure|HandlerInterface $handler Handler or factory Closure($record|null, $samplingHandler). - * @param int $factor Sample factor (e.g. 10 means every ~10th record is sampled) - */ - public function __construct(Closure|HandlerInterface $handler, int $factor) - { - parent::__construct(); - $this->handler = $handler; - $this->factor = $factor; - } - - public function isHandling(LogRecord $record): bool - { - return $this->getHandler($record)->isHandling($record); - } - - public function handle(LogRecord $record): bool - { - if ($this->isHandling($record) && mt_rand(1, $this->factor) === 1) { - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - - $this->getHandler($record)->handle($record); - } - - return false === $this->bubble; - } - - /** - * Return the nested handler - * - * If the handler was provided as a factory, this will trigger the handler's instantiation. - */ - public function getHandler(LogRecord|null $record = null): HandlerInterface - { - if (!$this->handler instanceof HandlerInterface) { - $handler = ($this->handler)($record, $this); - if (!$handler instanceof HandlerInterface) { - throw new \RuntimeException("The factory Closure should return a HandlerInterface"); - } - $this->handler = $handler; - } - - return $this->handler; - } - - /** - * @inheritDoc - */ - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - $handler = $this->getHandler(); - if ($handler instanceof FormattableHandlerInterface) { - $handler->setFormatter($formatter); - - return $this; - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($handler).' does not support formatters.'); - } - - /** - * @inheritDoc - */ - public function getFormatter(): FormatterInterface - { - $handler = $this->getHandler(); - if ($handler instanceof FormattableHandlerInterface) { - return $handler->getFormatter(); - } - - throw new \UnexpectedValueException('The nested handler of type '.\get_class($handler).' does not support formatters.'); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php deleted file mode 100644 index 0a6fe40..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SendGridHandler.php +++ /dev/null @@ -1,100 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; - -/** - * SendGridrHandler uses the SendGrid API v2 function to send Log emails, more information in https://sendgrid.com/docs/API_Reference/Web_API/mail.html - * - * @author Ricardo Fontanelli - */ -class SendGridHandler extends MailHandler -{ - /** - * The SendGrid API User - */ - protected string $apiUser; - - /** - * The SendGrid API Key - */ - protected string $apiKey; - - /** - * The email addresses to which the message will be sent - */ - protected string $from; - - /** - * The email addresses to which the message will be sent - * @var string[] - */ - protected array $to; - - /** - * The subject of the email - */ - protected string $subject; - - /** - * @param string $apiUser The SendGrid API User - * @param string $apiKey The SendGrid API Key - * @param string $from The sender of the email - * @param string|string[] $to The recipients of the email - * @param string $subject The subject of the mail - * - * @throws MissingExtensionException If the curl extension is missing - */ - public function __construct(string $apiUser, string $apiKey, string $from, string|array $to, string $subject, int|string|Level $level = Level::Error, bool $bubble = true) - { - if (!\extension_loaded('curl')) { - throw new MissingExtensionException('The curl extension is needed to use the SendGridHandler'); - } - - parent::__construct($level, $bubble); - $this->apiUser = $apiUser; - $this->apiKey = $apiKey; - $this->from = $from; - $this->to = (array) $to; - $this->subject = $subject; - } - - /** - * @inheritDoc - */ - protected function send(string $content, array $records): void - { - $message = []; - $message['api_user'] = $this->apiUser; - $message['api_key'] = $this->apiKey; - $message['from'] = $this->from; - foreach ($this->to as $recipient) { - $message['to[]'] = $recipient; - } - $message['subject'] = $this->subject; - $message['date'] = date('r'); - - if ($this->isHtmlBody($content)) { - $message['html'] = $content; - } else { - $message['text'] = $content; - } - - $ch = curl_init(); - curl_setopt($ch, CURLOPT_URL, 'https://api.sendgrid.com/api/mail.send.json'); - curl_setopt($ch, CURLOPT_POST, 1); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($message)); - Curl\Util::execute($ch, 2); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php b/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php deleted file mode 100644 index a10d6d6..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/Slack/SlackRecord.php +++ /dev/null @@ -1,381 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler\Slack; - -use Monolog\Level; -use Monolog\Utils; -use Monolog\Formatter\NormalizerFormatter; -use Monolog\Formatter\FormatterInterface; -use Monolog\LogRecord; - -/** - * Slack record utility helping to log to Slack webhooks or API. - * - * @author Greg Kedzierski - * @author Haralan Dobrev - * @see https://api.slack.com/incoming-webhooks - * @see https://api.slack.com/docs/message-attachments - */ -class SlackRecord -{ - public const COLOR_DANGER = 'danger'; - - public const COLOR_WARNING = 'warning'; - - public const COLOR_GOOD = 'good'; - - public const COLOR_DEFAULT = '#e3e4e6'; - - /** - * Slack channel (encoded ID or name) - */ - private string|null $channel; - - /** - * Name of a bot - */ - private string|null $username; - - /** - * User icon e.g. 'ghost', 'http://example.com/user.png' - */ - private string|null $userIcon; - - /** - * Whether the message should be added to Slack as attachment (plain text otherwise) - */ - private bool $useAttachment; - - /** - * Whether the the context/extra messages added to Slack as attachments are in a short style - */ - private bool $useShortAttachment; - - /** - * Whether the attachment should include context and extra data - */ - private bool $includeContextAndExtra; - - /** - * Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] - * @var string[] - */ - private array $excludeFields; - - private FormatterInterface|null $formatter; - - private NormalizerFormatter $normalizerFormatter; - - /** - * @param string[] $excludeFields - */ - public function __construct( - ?string $channel = null, - ?string $username = null, - bool $useAttachment = true, - ?string $userIcon = null, - bool $useShortAttachment = false, - bool $includeContextAndExtra = false, - array $excludeFields = [], - FormatterInterface|null $formatter = null - ) { - $this - ->setChannel($channel) - ->setUsername($username) - ->useAttachment($useAttachment) - ->setUserIcon($userIcon) - ->useShortAttachment($useShortAttachment) - ->includeContextAndExtra($includeContextAndExtra) - ->excludeFields($excludeFields) - ->setFormatter($formatter); - - if ($this->includeContextAndExtra) { - $this->normalizerFormatter = new NormalizerFormatter(); - } - } - - /** - * Returns required data in format that Slack - * is expecting. - * - * @phpstan-return mixed[] - */ - public function getSlackData(LogRecord $record): array - { - $dataArray = []; - - if ($this->username !== null) { - $dataArray['username'] = $this->username; - } - - if ($this->channel !== null) { - $dataArray['channel'] = $this->channel; - } - - if ($this->formatter !== null && !$this->useAttachment) { - $message = $this->formatter->format($record); - } else { - $message = $record->message; - } - - $recordData = $this->removeExcludedFields($record); - - if ($this->useAttachment) { - $attachment = [ - 'fallback' => $message, - 'text' => $message, - 'color' => $this->getAttachmentColor($record->level), - 'fields' => [], - 'mrkdwn_in' => ['fields'], - 'ts' => $recordData['datetime']->getTimestamp(), - 'footer' => $this->username, - 'footer_icon' => $this->userIcon, - ]; - - if ($this->useShortAttachment) { - $attachment['title'] = $recordData['level_name']; - } else { - $attachment['title'] = 'Message'; - $attachment['fields'][] = $this->generateAttachmentField('Level', $recordData['level_name']); - } - - if ($this->includeContextAndExtra) { - foreach (['extra', 'context'] as $key) { - if (!isset($recordData[$key]) || \count($recordData[$key]) === 0) { - continue; - } - - if ($this->useShortAttachment) { - $attachment['fields'][] = $this->generateAttachmentField( - $key, - $recordData[$key] - ); - } else { - // Add all extra fields as individual fields in attachment - $attachment['fields'] = array_merge( - $attachment['fields'], - $this->generateAttachmentFields($recordData[$key]) - ); - } - } - } - - $dataArray['attachments'] = [$attachment]; - } else { - $dataArray['text'] = $message; - } - - if ($this->userIcon !== null) { - if (false !== ($iconUrl = filter_var($this->userIcon, FILTER_VALIDATE_URL))) { - $dataArray['icon_url'] = $iconUrl; - } else { - $dataArray['icon_emoji'] = ":{$this->userIcon}:"; - } - } - - return $dataArray; - } - - /** - * Returns a Slack message attachment color associated with - * provided level. - */ - public function getAttachmentColor(Level $level): string - { - return match ($level) { - Level::Error, Level::Critical, Level::Alert, Level::Emergency => static::COLOR_DANGER, - Level::Warning => static::COLOR_WARNING, - Level::Info, Level::Notice => static::COLOR_GOOD, - Level::Debug => static::COLOR_DEFAULT - }; - } - - /** - * Stringifies an array of key/value pairs to be used in attachment fields - * - * @param mixed[] $fields - */ - public function stringify(array $fields): string - { - /** @var array $normalized */ - $normalized = $this->normalizerFormatter->normalizeValue($fields); - - $hasSecondDimension = \count(array_filter($normalized, 'is_array')) > 0; - $hasOnlyNonNumericKeys = \count(array_filter(array_keys($normalized), 'is_numeric')) === 0; - - return $hasSecondDimension || $hasOnlyNonNumericKeys - ? Utils::jsonEncode($normalized, JSON_PRETTY_PRINT|Utils::DEFAULT_JSON_FLAGS) - : Utils::jsonEncode($normalized, Utils::DEFAULT_JSON_FLAGS); - } - - /** - * Channel used by the bot when posting - * - * @param ?string $channel - * @return $this - */ - public function setChannel(?string $channel = null): self - { - $this->channel = $channel; - - return $this; - } - - /** - * Username used by the bot when posting - * - * @param ?string $username - * @return $this - */ - public function setUsername(?string $username = null): self - { - $this->username = $username; - - return $this; - } - - /** - * @return $this - */ - public function useAttachment(bool $useAttachment = true): self - { - $this->useAttachment = $useAttachment; - - return $this; - } - - /** - * @return $this - */ - public function setUserIcon(?string $userIcon = null): self - { - $this->userIcon = $userIcon; - - if (\is_string($userIcon)) { - $this->userIcon = trim($userIcon, ':'); - } - - return $this; - } - - /** - * @return $this - */ - public function useShortAttachment(bool $useShortAttachment = false): self - { - $this->useShortAttachment = $useShortAttachment; - - return $this; - } - - /** - * @return $this - */ - public function includeContextAndExtra(bool $includeContextAndExtra = false): self - { - $this->includeContextAndExtra = $includeContextAndExtra; - - if ($this->includeContextAndExtra) { - $this->normalizerFormatter = new NormalizerFormatter(); - } - - return $this; - } - - /** - * @param string[] $excludeFields - * @return $this - */ - public function excludeFields(array $excludeFields = []): self - { - $this->excludeFields = $excludeFields; - - return $this; - } - - /** - * @return $this - */ - public function setFormatter(?FormatterInterface $formatter = null): self - { - $this->formatter = $formatter; - - return $this; - } - - /** - * Generates attachment field - * - * @param string|mixed[] $value - * - * @return array{title: string, value: string, short: false} - */ - private function generateAttachmentField(string $title, $value): array - { - $value = \is_array($value) - ? sprintf('```%s```', substr($this->stringify($value), 0, 1990)) - : $value; - - return [ - 'title' => ucfirst($title), - 'value' => $value, - 'short' => false, - ]; - } - - /** - * Generates a collection of attachment fields from array - * - * @param mixed[] $data - * - * @return array - */ - private function generateAttachmentFields(array $data): array - { - /** @var array $normalized */ - $normalized = $this->normalizerFormatter->normalizeValue($data); - - $fields = []; - foreach ($normalized as $key => $value) { - $fields[] = $this->generateAttachmentField((string) $key, $value); - } - - return $fields; - } - - /** - * Get a copy of record with fields excluded according to $this->excludeFields - * - * @return mixed[] - */ - private function removeExcludedFields(LogRecord $record): array - { - $recordData = $record->toArray(); - foreach ($this->excludeFields as $field) { - $keys = explode('.', $field); - $node = &$recordData; - $lastKey = end($keys); - foreach ($keys as $key) { - if (!isset($node[$key])) { - break; - } - if ($lastKey === $key) { - unset($node[$key]); - break; - } - $node = &$node[$key]; - } - } - - return $recordData; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php deleted file mode 100644 index 2a34dda..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SlackHandler.php +++ /dev/null @@ -1,267 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\Level; -use Monolog\Utils; -use Monolog\Handler\Slack\SlackRecord; -use Monolog\LogRecord; - -/** - * Sends notifications through Slack API - * - * @author Greg Kedzierski - * @see https://api.slack.com/ - */ -class SlackHandler extends SocketHandler -{ - /** - * Slack API token - */ - private string $token; - - /** - * Instance of the SlackRecord util class preparing data for Slack API. - */ - private SlackRecord $slackRecord; - - /** - * @param string $token Slack API token - * @param string $channel Slack channel (encoded ID or name) - * @param string|null $username Name of a bot - * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise) - * @param string|null $iconEmoji The emoji name to use (or null) - * @param bool $useShortAttachment Whether the context/extra messages added to Slack as attachments are in a short style - * @param bool $includeContextAndExtra Whether the attachment should include context and extra data - * @param string[] $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] - * @throws MissingExtensionException If no OpenSSL PHP extension configured - */ - public function __construct( - string $token, - string $channel, - ?string $username = null, - bool $useAttachment = true, - ?string $iconEmoji = null, - $level = Level::Critical, - bool $bubble = true, - bool $useShortAttachment = false, - bool $includeContextAndExtra = false, - array $excludeFields = [], - bool $persistent = false, - float $timeout = 0.0, - float $writingTimeout = 10.0, - ?float $connectionTimeout = null, - ?int $chunkSize = null - ) { - if (!\extension_loaded('openssl')) { - throw new MissingExtensionException('The OpenSSL PHP extension is required to use the SlackHandler'); - } - - parent::__construct( - 'ssl://slack.com:443', - $level, - $bubble, - $persistent, - $timeout, - $writingTimeout, - $connectionTimeout, - $chunkSize - ); - - $this->slackRecord = new SlackRecord( - $channel, - $username, - $useAttachment, - $iconEmoji, - $useShortAttachment, - $includeContextAndExtra, - $excludeFields - ); - - $this->token = $token; - } - - public function getSlackRecord(): SlackRecord - { - return $this->slackRecord; - } - - public function getToken(): string - { - return $this->token; - } - - /** - * @inheritDoc - */ - protected function generateDataStream(LogRecord $record): string - { - $content = $this->buildContent($record); - - return $this->buildHeader($content) . $content; - } - - /** - * Builds the body of API call - */ - private function buildContent(LogRecord $record): string - { - $dataArray = $this->prepareContentData($record); - - return http_build_query($dataArray); - } - - /** - * @return string[] - */ - protected function prepareContentData(LogRecord $record): array - { - $dataArray = $this->slackRecord->getSlackData($record); - $dataArray['token'] = $this->token; - - if (isset($dataArray['attachments']) && \is_array($dataArray['attachments']) && \count($dataArray['attachments']) > 0) { - $dataArray['attachments'] = Utils::jsonEncode($dataArray['attachments']); - } - - return $dataArray; - } - - /** - * Builds the header of the API Call - */ - private function buildHeader(string $content): string - { - $header = "POST /api/chat.postMessage HTTP/1.1\r\n"; - $header .= "Host: slack.com\r\n"; - $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; - $header .= "Content-Length: " . \strlen($content) . "\r\n"; - $header .= "\r\n"; - - return $header; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - parent::write($record); - $this->finalizeWrite(); - } - - /** - * Finalizes the request by reading some bytes and then closing the socket - * - * If we do not read some but close the socket too early, slack sometimes - * drops the request entirely. - */ - protected function finalizeWrite(): void - { - $res = $this->getResource(); - if (\is_resource($res)) { - @fread($res, 2048); - } - $this->closeSocket(); - } - - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - parent::setFormatter($formatter); - $this->slackRecord->setFormatter($formatter); - - return $this; - } - - public function getFormatter(): FormatterInterface - { - $formatter = parent::getFormatter(); - $this->slackRecord->setFormatter($formatter); - - return $formatter; - } - - /** - * Channel used by the bot when posting - * - * @return $this - */ - public function setChannel(string $channel): self - { - $this->slackRecord->setChannel($channel); - - return $this; - } - - /** - * Username used by the bot when posting - * - * @return $this - */ - public function setUsername(string $username): self - { - $this->slackRecord->setUsername($username); - - return $this; - } - - /** - * @return $this - */ - public function useAttachment(bool $useAttachment): self - { - $this->slackRecord->useAttachment($useAttachment); - - return $this; - } - - /** - * @return $this - */ - public function setIconEmoji(string $iconEmoji): self - { - $this->slackRecord->setUserIcon($iconEmoji); - - return $this; - } - - /** - * @return $this - */ - public function useShortAttachment(bool $useShortAttachment): self - { - $this->slackRecord->useShortAttachment($useShortAttachment); - - return $this; - } - - /** - * @return $this - */ - public function includeContextAndExtra(bool $includeContextAndExtra): self - { - $this->slackRecord->includeContextAndExtra($includeContextAndExtra); - - return $this; - } - - /** - * @param string[] $excludeFields - * @return $this - */ - public function excludeFields(array $excludeFields): self - { - $this->slackRecord->excludeFields($excludeFields); - - return $this; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php deleted file mode 100644 index eac51cc..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SlackWebhookHandler.php +++ /dev/null @@ -1,128 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\Level; -use Monolog\Utils; -use Monolog\Handler\Slack\SlackRecord; -use Monolog\LogRecord; - -/** - * Sends notifications through Slack Webhooks - * - * @author Haralan Dobrev - * @see https://api.slack.com/incoming-webhooks - */ -class SlackWebhookHandler extends AbstractProcessingHandler -{ - /** - * Slack Webhook token - */ - private string $webhookUrl; - - /** - * Instance of the SlackRecord util class preparing data for Slack API. - */ - private SlackRecord $slackRecord; - - /** - * @param string $webhookUrl Slack Webhook URL - * @param string|null $channel Slack channel (encoded ID or name) - * @param string|null $username Name of a bot - * @param bool $useAttachment Whether the message should be added to Slack as attachment (plain text otherwise) - * @param string|null $iconEmoji The emoji name to use (or null) - * @param bool $useShortAttachment Whether the the context/extra messages added to Slack as attachments are in a short style - * @param bool $includeContextAndExtra Whether the attachment should include context and extra data - * @param string[] $excludeFields Dot separated list of fields to exclude from slack message. E.g. ['context.field1', 'extra.field2'] - * - * @throws MissingExtensionException If the curl extension is missing - */ - public function __construct( - string $webhookUrl, - ?string $channel = null, - ?string $username = null, - bool $useAttachment = true, - ?string $iconEmoji = null, - bool $useShortAttachment = false, - bool $includeContextAndExtra = false, - $level = Level::Critical, - bool $bubble = true, - array $excludeFields = [] - ) { - if (!\extension_loaded('curl')) { - throw new MissingExtensionException('The curl extension is needed to use the SlackWebhookHandler'); - } - - parent::__construct($level, $bubble); - - $this->webhookUrl = $webhookUrl; - - $this->slackRecord = new SlackRecord( - $channel, - $username, - $useAttachment, - $iconEmoji, - $useShortAttachment, - $includeContextAndExtra, - $excludeFields - ); - } - - public function getSlackRecord(): SlackRecord - { - return $this->slackRecord; - } - - public function getWebhookUrl(): string - { - return $this->webhookUrl; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $postData = $this->slackRecord->getSlackData($record); - $postString = Utils::jsonEncode($postData); - - $ch = curl_init(); - $options = [ - CURLOPT_URL => $this->webhookUrl, - CURLOPT_POST => true, - CURLOPT_RETURNTRANSFER => true, - CURLOPT_HTTPHEADER => ['Content-type: application/json'], - CURLOPT_POSTFIELDS => $postString, - ]; - - curl_setopt_array($ch, $options); - - Curl\Util::execute($ch); - } - - public function setFormatter(FormatterInterface $formatter): HandlerInterface - { - parent::setFormatter($formatter); - $this->slackRecord->setFormatter($formatter); - - return $this; - } - - public function getFormatter(): FormatterInterface - { - $formatter = parent::getFormatter(); - $this->slackRecord->setFormatter($formatter); - - return $formatter; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php deleted file mode 100644 index 69a036f..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SocketHandler.php +++ /dev/null @@ -1,436 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Stores to any socket - uses fsockopen() or pfsockopen(). - * - * @author Pablo de Leon Belloc - * @see http://php.net/manual/en/function.fsockopen.php - */ -class SocketHandler extends AbstractProcessingHandler -{ - private string $connectionString; - private float $connectionTimeout; - /** @var resource|null */ - private $resource; - private float $timeout; - private float $writingTimeout; - private int|null $lastSentBytes = null; - private int|null $chunkSize; - private bool $persistent; - private int|null $errno = null; - private string|null $errstr = null; - private float|null $lastWritingAt = null; - - /** - * @param string $connectionString Socket connection string - * @param bool $persistent Flag to enable/disable persistent connections - * @param float $timeout Socket timeout to wait until the request is being aborted - * @param float $writingTimeout Socket timeout to wait until the request should've been sent/written - * @param float|null $connectionTimeout Socket connect timeout to wait until the connection should've been - * established - * @param int|null $chunkSize Sets the chunk size. Only has effect during connection in the writing cycle - * - * @throws \InvalidArgumentException If an invalid timeout value (less than 0) is passed. - */ - public function __construct( - string $connectionString, - $level = Level::Debug, - bool $bubble = true, - bool $persistent = false, - float $timeout = 0.0, - float $writingTimeout = 10.0, - ?float $connectionTimeout = null, - ?int $chunkSize = null - ) { - parent::__construct($level, $bubble); - $this->connectionString = $connectionString; - - if ($connectionTimeout !== null) { - $this->validateTimeout($connectionTimeout); - } - - $this->connectionTimeout = $connectionTimeout ?? (float) \ini_get('default_socket_timeout'); - $this->persistent = $persistent; - $this->validateTimeout($timeout); - $this->timeout = $timeout; - $this->validateTimeout($writingTimeout); - $this->writingTimeout = $writingTimeout; - $this->chunkSize = $chunkSize; - } - - /** - * Connect (if necessary) and write to the socket - * - * @inheritDoc - * - * @throws \UnexpectedValueException - * @throws \RuntimeException - */ - protected function write(LogRecord $record): void - { - $this->connectIfNotConnected(); - $data = $this->generateDataStream($record); - $this->writeToSocket($data); - } - - /** - * We will not close a PersistentSocket instance so it can be reused in other requests. - */ - public function close(): void - { - if (!$this->isPersistent()) { - $this->closeSocket(); - } - } - - /** - * Close socket, if open - */ - public function closeSocket(): void - { - if (\is_resource($this->resource)) { - fclose($this->resource); - $this->resource = null; - } - } - - /** - * Set socket connection to be persistent. It only has effect before the connection is initiated. - * - * @return $this - */ - public function setPersistent(bool $persistent): self - { - $this->persistent = $persistent; - - return $this; - } - - /** - * Set connection timeout. Only has effect before we connect. - * - * @see http://php.net/manual/en/function.fsockopen.php - * @return $this - */ - public function setConnectionTimeout(float $seconds): self - { - $this->validateTimeout($seconds); - $this->connectionTimeout = $seconds; - - return $this; - } - - /** - * Set write timeout. Only has effect before we connect. - * - * @see http://php.net/manual/en/function.stream-set-timeout.php - * @return $this - */ - public function setTimeout(float $seconds): self - { - $this->validateTimeout($seconds); - $this->timeout = $seconds; - - return $this; - } - - /** - * Set writing timeout. Only has effect during connection in the writing cycle. - * - * @param float $seconds 0 for no timeout - * @return $this - */ - public function setWritingTimeout(float $seconds): self - { - $this->validateTimeout($seconds); - $this->writingTimeout = $seconds; - - return $this; - } - - /** - * Set chunk size. Only has effect during connection in the writing cycle. - * - * @return $this - */ - public function setChunkSize(int $bytes): self - { - $this->chunkSize = $bytes; - - return $this; - } - - /** - * Get current connection string - */ - public function getConnectionString(): string - { - return $this->connectionString; - } - - /** - * Get persistent setting - */ - public function isPersistent(): bool - { - return $this->persistent; - } - - /** - * Get current connection timeout setting - */ - public function getConnectionTimeout(): float - { - return $this->connectionTimeout; - } - - /** - * Get current in-transfer timeout - */ - public function getTimeout(): float - { - return $this->timeout; - } - - /** - * Get current local writing timeout - */ - public function getWritingTimeout(): float - { - return $this->writingTimeout; - } - - /** - * Get current chunk size - */ - public function getChunkSize(): ?int - { - return $this->chunkSize; - } - - /** - * Check to see if the socket is currently available. - * - * UDP might appear to be connected but might fail when writing. See http://php.net/fsockopen for details. - */ - public function isConnected(): bool - { - return \is_resource($this->resource) - && !feof($this->resource); // on TCP - other party can close connection. - } - - /** - * Wrapper to allow mocking - * - * @return resource|false - */ - protected function pfsockopen() - { - return @pfsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout); - } - - /** - * Wrapper to allow mocking - * - * @return resource|false - */ - protected function fsockopen() - { - return @fsockopen($this->connectionString, -1, $this->errno, $this->errstr, $this->connectionTimeout); - } - - /** - * Wrapper to allow mocking - * - * @see http://php.net/manual/en/function.stream-set-timeout.php - */ - protected function streamSetTimeout(): bool - { - $seconds = floor($this->timeout); - $microseconds = round(($this->timeout - $seconds) * 1e6); - - if (!\is_resource($this->resource)) { - throw new \LogicException('streamSetTimeout called but $this->resource is not a resource'); - } - - return stream_set_timeout($this->resource, (int) $seconds, (int) $microseconds); - } - - /** - * Wrapper to allow mocking - * - * @see http://php.net/manual/en/function.stream-set-chunk-size.php - * - * @return int|false - */ - protected function streamSetChunkSize(): int|bool - { - if (!\is_resource($this->resource)) { - throw new \LogicException('streamSetChunkSize called but $this->resource is not a resource'); - } - - if (null === $this->chunkSize) { - throw new \LogicException('streamSetChunkSize called but $this->chunkSize is not set'); - } - - return stream_set_chunk_size($this->resource, $this->chunkSize); - } - - /** - * Wrapper to allow mocking - * - * @return int|false - */ - protected function fwrite(string $data): int|bool - { - if (!\is_resource($this->resource)) { - throw new \LogicException('fwrite called but $this->resource is not a resource'); - } - - return @fwrite($this->resource, $data); - } - - /** - * Wrapper to allow mocking - * - * @return mixed[]|bool - */ - protected function streamGetMetadata(): array|bool - { - if (!\is_resource($this->resource)) { - throw new \LogicException('streamGetMetadata called but $this->resource is not a resource'); - } - - return stream_get_meta_data($this->resource); - } - - private function validateTimeout(float $value): void - { - if ($value < 0) { - throw new \InvalidArgumentException("Timeout must be 0 or a positive float (got $value)"); - } - } - - private function connectIfNotConnected(): void - { - if ($this->isConnected()) { - return; - } - $this->connect(); - } - - protected function generateDataStream(LogRecord $record): string - { - return (string) $record->formatted; - } - - /** - * @return resource|null - */ - protected function getResource() - { - return $this->resource; - } - - private function connect(): void - { - $this->createSocketResource(); - $this->setSocketTimeout(); - $this->setStreamChunkSize(); - } - - private function createSocketResource(): void - { - if ($this->isPersistent()) { - $resource = $this->pfsockopen(); - } else { - $resource = $this->fsockopen(); - } - if (\is_bool($resource)) { - throw new \UnexpectedValueException("Failed connecting to $this->connectionString ($this->errno: $this->errstr)"); - } - $this->resource = $resource; - } - - private function setSocketTimeout(): void - { - if (!$this->streamSetTimeout()) { - throw new \UnexpectedValueException("Failed setting timeout with stream_set_timeout()"); - } - } - - private function setStreamChunkSize(): void - { - if (null !== $this->chunkSize && false === $this->streamSetChunkSize()) { - throw new \UnexpectedValueException("Failed setting chunk size with stream_set_chunk_size()"); - } - } - - private function writeToSocket(string $data): void - { - $length = \strlen($data); - $sent = 0; - $this->lastSentBytes = $sent; - while ($this->isConnected() && $sent < $length) { - if (0 == $sent) { - $chunk = $this->fwrite($data); - } else { - $chunk = $this->fwrite(substr($data, $sent)); - } - if ($chunk === false) { - throw new \RuntimeException("Could not write to socket"); - } - $sent += $chunk; - $socketInfo = $this->streamGetMetadata(); - if (\is_array($socketInfo) && (bool) $socketInfo['timed_out']) { - throw new \RuntimeException("Write timed-out"); - } - - if ($this->writingIsTimedOut($sent)) { - throw new \RuntimeException("Write timed-out, no data sent for `{$this->writingTimeout}` seconds, probably we got disconnected (sent $sent of $length)"); - } - } - if (!$this->isConnected() && $sent < $length) { - throw new \RuntimeException("End-of-file reached, probably we got disconnected (sent $sent of $length)"); - } - } - - private function writingIsTimedOut(int $sent): bool - { - // convert to ms - if (0.0 == $this->writingTimeout) { - return false; - } - - if ($sent !== $this->lastSentBytes) { - $this->lastWritingAt = microtime(true); - $this->lastSentBytes = $sent; - - return false; - } else { - usleep(100); - } - - if ((microtime(true) - (float) $this->lastWritingAt) >= $this->writingTimeout) { - $this->closeSocket(); - - return true; - } - - return false; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php deleted file mode 100644 index 1d28b65..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SqsHandler.php +++ /dev/null @@ -1,61 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Aws\Sqs\SqsClient; -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Writes to any sqs queue. - * - * @author Martijn van Calker - */ -class SqsHandler extends AbstractProcessingHandler -{ - /** 256 KB in bytes - maximum message size in SQS */ - protected const MAX_MESSAGE_SIZE = 262144; - /** 100 KB in bytes - head message size for new error log */ - protected const HEAD_MESSAGE_SIZE = 102400; - - private SqsClient $client; - private string $queueUrl; - - public function __construct(SqsClient $sqsClient, string $queueUrl, int|string|Level $level = Level::Debug, bool $bubble = true) - { - parent::__construct($level, $bubble); - - $this->client = $sqsClient; - $this->queueUrl = $queueUrl; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - if (!isset($record->formatted) || 'string' !== \gettype($record->formatted)) { - throw new \InvalidArgumentException('SqsHandler accepts only formatted records as a string' . Utils::getRecordMessageForException($record)); - } - - $messageBody = $record->formatted; - if (\strlen($messageBody) >= static::MAX_MESSAGE_SIZE) { - $messageBody = Utils::substr($messageBody, 0, static::HEAD_MESSAGE_SIZE); - } - - $this->client->sendMessage([ - 'QueueUrl' => $this->queueUrl, - 'MessageBody' => $messageBody, - ]); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php deleted file mode 100644 index 4169095..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php +++ /dev/null @@ -1,210 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Stores to any stream resource - * - * Can be used to store into php://stderr, remote and local files, etc. - * - * @author Jordi Boggiano - */ -class StreamHandler extends AbstractProcessingHandler -{ - protected const MAX_CHUNK_SIZE = 2147483647; - /** 10MB */ - protected const DEFAULT_CHUNK_SIZE = 10 * 1024 * 1024; - protected int $streamChunkSize; - /** @var resource|null */ - protected $stream; - protected string|null $url = null; - private string|null $errorMessage = null; - protected int|null $filePermission; - protected bool $useLocking; - /** @var true|null */ - private bool|null $dirCreated = null; - - /** - * @param resource|string $stream If a missing path can't be created, an UnexpectedValueException will be thrown on first write - * @param int|null $filePermission Optional file permissions (default (0644) are only for owner read/write) - * @param bool $useLocking Try to lock log file before doing any writes - * - * @throws \InvalidArgumentException If stream is not a resource or string - */ - public function __construct($stream, int|string|Level $level = Level::Debug, bool $bubble = true, ?int $filePermission = null, bool $useLocking = false) - { - parent::__construct($level, $bubble); - - if (($phpMemoryLimit = Utils::expandIniShorthandBytes(\ini_get('memory_limit'))) !== false) { - if ($phpMemoryLimit > 0) { - // use max 10% of allowed memory for the chunk size, and at least 100KB - $this->streamChunkSize = min(static::MAX_CHUNK_SIZE, max((int) ($phpMemoryLimit / 10), 100 * 1024)); - } else { - // memory is unlimited, set to the default 10MB - $this->streamChunkSize = static::DEFAULT_CHUNK_SIZE; - } - } else { - // no memory limit information, set to the default 10MB - $this->streamChunkSize = static::DEFAULT_CHUNK_SIZE; - } - - if (\is_resource($stream)) { - $this->stream = $stream; - - stream_set_chunk_size($this->stream, $this->streamChunkSize); - } elseif (\is_string($stream)) { - $this->url = Utils::canonicalizePath($stream); - } else { - throw new \InvalidArgumentException('A stream must either be a resource or a string.'); - } - - $this->filePermission = $filePermission; - $this->useLocking = $useLocking; - } - - /** - * @inheritDoc - */ - public function close(): void - { - if (null !== $this->url && \is_resource($this->stream)) { - fclose($this->stream); - } - $this->stream = null; - $this->dirCreated = null; - } - - /** - * Return the currently active stream if it is open - * - * @return resource|null - */ - public function getStream() - { - return $this->stream; - } - - /** - * Return the stream URL if it was configured with a URL and not an active resource - */ - public function getUrl(): ?string - { - return $this->url; - } - - public function getStreamChunkSize(): int - { - return $this->streamChunkSize; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - if (!\is_resource($this->stream)) { - $url = $this->url; - if (null === $url || '' === $url) { - throw new \LogicException('Missing stream url, the stream can not be opened. This may be caused by a premature call to close().' . Utils::getRecordMessageForException($record)); - } - $this->createDir($url); - $this->errorMessage = null; - set_error_handler(function (...$args) { - return $this->customErrorHandler(...$args); - }); - - try { - $stream = fopen($url, 'a'); - if ($this->filePermission !== null) { - @chmod($url, $this->filePermission); - } - } finally { - restore_error_handler(); - } - if (!\is_resource($stream)) { - $this->stream = null; - - throw new \UnexpectedValueException(sprintf('The stream or file "%s" could not be opened in append mode: '.$this->errorMessage, $url) . Utils::getRecordMessageForException($record)); - } - stream_set_chunk_size($stream, $this->streamChunkSize); - $this->stream = $stream; - } - - $stream = $this->stream; - if ($this->useLocking) { - // ignoring errors here, there's not much we can do about them - flock($stream, LOCK_EX); - } - - $this->streamWrite($stream, $record); - - if ($this->useLocking) { - flock($stream, LOCK_UN); - } - } - - /** - * Write to stream - * @param resource $stream - */ - protected function streamWrite($stream, LogRecord $record): void - { - fwrite($stream, (string) $record->formatted); - } - - private function customErrorHandler(int $code, string $msg): bool - { - $this->errorMessage = preg_replace('{^(fopen|mkdir)\(.*?\): }', '', $msg); - - return true; - } - - private function getDirFromStream(string $stream): ?string - { - $pos = strpos($stream, '://'); - if ($pos === false) { - return \dirname($stream); - } - - if ('file://' === substr($stream, 0, 7)) { - return \dirname(substr($stream, 7)); - } - - return null; - } - - private function createDir(string $url): void - { - // Do not try to create dir if it has already been tried. - if (true === $this->dirCreated) { - return; - } - - $dir = $this->getDirFromStream($url); - if (null !== $dir && !is_dir($dir)) { - $this->errorMessage = null; - set_error_handler(function (...$args) { - return $this->customErrorHandler(...$args); - }); - $status = mkdir($dir, 0777, true); - restore_error_handler(); - if (false === $status && !is_dir($dir) && strpos((string) $this->errorMessage, 'File exists') === false) { - throw new \UnexpectedValueException(sprintf('There is no existing directory at "%s" and it could not be created: '.$this->errorMessage, $dir)); - } - } - $this->dirCreated = true; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php deleted file mode 100644 index 33aa4fd..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SymfonyMailerHandler.php +++ /dev/null @@ -1,109 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Closure; -use Monolog\Level; -use Monolog\LogRecord; -use Monolog\Utils; -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\LineFormatter; -use Symfony\Component\Mailer\MailerInterface; -use Symfony\Component\Mailer\Transport\TransportInterface; -use Symfony\Component\Mime\Email; - -/** - * SymfonyMailerHandler uses Symfony's Mailer component to send the emails - * - * @author Jordi Boggiano - */ -class SymfonyMailerHandler extends MailHandler -{ - protected MailerInterface|TransportInterface $mailer; - /** @var Email|Closure(string, LogRecord[]): Email */ - private Email|Closure $emailTemplate; - - /** - * @phpstan-param Email|Closure(string, LogRecord[]): Email $email - * - * @param MailerInterface|TransportInterface $mailer The mailer to use - * @param Closure|Email $email An email template, the subject/body will be replaced - */ - public function __construct($mailer, Email|Closure $email, int|string|Level $level = Level::Error, bool $bubble = true) - { - parent::__construct($level, $bubble); - - $this->mailer = $mailer; - $this->emailTemplate = $email; - } - - /** - * {@inheritDoc} - */ - protected function send(string $content, array $records): void - { - $this->mailer->send($this->buildMessage($content, $records)); - } - - /** - * Gets the formatter for the Swift_Message subject. - * - * @param string|null $format The format of the subject - */ - protected function getSubjectFormatter(?string $format): FormatterInterface - { - return new LineFormatter($format); - } - - /** - * Creates instance of Email to be sent - * - * @param string $content formatted email body to be sent - * @param LogRecord[] $records Log records that formed the content - */ - protected function buildMessage(string $content, array $records): Email - { - $message = null; - if ($this->emailTemplate instanceof Email) { - $message = clone $this->emailTemplate; - } elseif (\is_callable($this->emailTemplate)) { - $message = ($this->emailTemplate)($content, $records); - } - - if (!$message instanceof Email) { - $record = reset($records); - - throw new \InvalidArgumentException('Could not resolve message as instance of Email or a callable returning it' . ($record instanceof LogRecord ? Utils::getRecordMessageForException($record) : '')); - } - - if (\count($records) > 0) { - $subjectFormatter = $this->getSubjectFormatter($message->getSubject()); - $message->subject($subjectFormatter->format($this->getHighestRecord($records))); - } - - if ($this->isHtmlBody($content)) { - if (null !== ($charset = $message->getHtmlCharset())) { - $message->html($content, $charset); - } else { - $message->html($content); - } - } else { - if (null !== ($charset = $message->getTextCharset())) { - $message->text($content, $charset); - } else { - $message->text($content); - } - } - - return $message->date(new \DateTimeImmutable()); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php deleted file mode 100644 index f3d7674..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SyslogHandler.php +++ /dev/null @@ -1,63 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Logs to syslog service. - * - * usage example: - * - * $log = new Logger('application'); - * $syslog = new SyslogHandler('myfacility', 'local6'); - * $formatter = new LineFormatter("%channel%.%level_name%: %message% %extra%"); - * $syslog->setFormatter($formatter); - * $log->pushHandler($syslog); - * - * @author Sven Paulus - */ -class SyslogHandler extends AbstractSyslogHandler -{ - protected string $ident; - protected int $logopts; - - /** - * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant - * @param int $logopts Option flags for the openlog() call, defaults to LOG_PID - */ - public function __construct(string $ident, string|int $facility = LOG_USER, int|string|Level $level = Level::Debug, bool $bubble = true, int $logopts = LOG_PID) - { - parent::__construct($facility, $level, $bubble); - - $this->ident = $ident; - $this->logopts = $logopts; - } - - /** - * @inheritDoc - */ - public function close(): void - { - closelog(); - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - openlog($this->ident, $this->logopts, $this->facility); - syslog($this->toSyslogPriority($record->level), (string) $record->formatted); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php b/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php deleted file mode 100644 index 3ff0bce..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdp/UdpSocket.php +++ /dev/null @@ -1,77 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler\SyslogUdp; - -use Monolog\Utils; -use Socket; - -class UdpSocket -{ - protected const DATAGRAM_MAX_LENGTH = 65023; - - protected string $ip; - protected int $port; - protected ?Socket $socket = null; - - public function __construct(string $ip, int $port = 514) - { - $this->ip = $ip; - $this->port = $port; - } - - public function write(string $line, string $header = ""): void - { - $this->send($this->assembleMessage($line, $header)); - } - - public function close(): void - { - if ($this->socket instanceof Socket) { - socket_close($this->socket); - $this->socket = null; - } - } - - protected function getSocket(): Socket - { - if (null !== $this->socket) { - return $this->socket; - } - - $domain = AF_INET; - $protocol = SOL_UDP; - // Check if we are using unix sockets. - if ($this->port === 0) { - $domain = AF_UNIX; - $protocol = IPPROTO_IP; - } - - $socket = socket_create($domain, SOCK_DGRAM, $protocol); - if ($socket instanceof Socket) { - return $this->socket = $socket; - } - - throw new \RuntimeException('The UdpSocket to '.$this->ip.':'.$this->port.' could not be opened via socket_create'); - } - - protected function send(string $chunk): void - { - socket_sendto($this->getSocket(), $chunk, \strlen($chunk), $flags = 0, $this->ip, $this->port); - } - - protected function assembleMessage(string $line, string $header): string - { - $chunkSize = static::DATAGRAM_MAX_LENGTH - \strlen($header); - - return $header . Utils::substr($line, 0, $chunkSize); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php deleted file mode 100644 index e8db4cd..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/SyslogUdpHandler.php +++ /dev/null @@ -1,154 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use DateTimeInterface; -use Monolog\Handler\SyslogUdp\UdpSocket; -use Monolog\Level; -use Monolog\LogRecord; -use Monolog\Utils; - -/** - * A Handler for logging to a remote syslogd server. - * - * @author Jesper Skovgaard Nielsen - * @author Dominik Kukacka - */ -class SyslogUdpHandler extends AbstractSyslogHandler -{ - const RFC3164 = 0; - const RFC5424 = 1; - const RFC5424e = 2; - - /** @var array */ - private array $dateFormats = [ - self::RFC3164 => 'M d H:i:s', - self::RFC5424 => \DateTime::RFC3339, - self::RFC5424e => \DateTime::RFC3339_EXTENDED, - ]; - - protected UdpSocket $socket; - protected string $ident; - /** @var self::RFC* */ - protected int $rfc; - - /** - * @param string $host Either IP/hostname or a path to a unix socket (port must be 0 then) - * @param int $port Port number, or 0 if $host is a unix socket - * @param string|int $facility Either one of the names of the keys in $this->facilities, or a LOG_* facility constant - * @param bool $bubble Whether the messages that are handled can bubble up the stack or not - * @param string $ident Program name or tag for each log message. - * @param int $rfc RFC to format the message for. - * @throws MissingExtensionException when there is no socket extension - * - * @phpstan-param self::RFC* $rfc - */ - public function __construct(string $host, int $port = 514, string|int $facility = LOG_USER, int|string|Level $level = Level::Debug, bool $bubble = true, string $ident = 'php', int $rfc = self::RFC5424) - { - if (!\extension_loaded('sockets')) { - throw new MissingExtensionException('The sockets extension is required to use the SyslogUdpHandler'); - } - - parent::__construct($facility, $level, $bubble); - - $this->ident = $ident; - $this->rfc = $rfc; - - $this->socket = new UdpSocket($host, $port); - } - - protected function write(LogRecord $record): void - { - $lines = $this->splitMessageIntoLines($record->formatted); - - $header = $this->makeCommonSyslogHeader($this->toSyslogPriority($record->level), $record->datetime); - - foreach ($lines as $line) { - $this->socket->write($line, $header); - } - } - - public function close(): void - { - $this->socket->close(); - } - - /** - * @param string|string[] $message - * @return string[] - */ - private function splitMessageIntoLines($message): array - { - if (\is_array($message)) { - $message = implode("\n", $message); - } - - $lines = preg_split('/$\R?^/m', (string) $message, -1, PREG_SPLIT_NO_EMPTY); - if (false === $lines) { - $pcreErrorCode = preg_last_error(); - - throw new \RuntimeException('Could not preg_split: ' . $pcreErrorCode . ' / ' . Utils::pcreLastErrorMessage($pcreErrorCode)); - } - - return $lines; - } - - /** - * Make common syslog header (see rfc5424 or rfc3164) - */ - protected function makeCommonSyslogHeader(int $severity, DateTimeInterface $datetime): string - { - $priority = $severity + $this->facility; - - $pid = getmypid(); - if (false === $pid) { - $pid = '-'; - } - - $hostname = gethostname(); - if (false === $hostname) { - $hostname = '-'; - } - - if ($this->rfc === self::RFC3164) { - // see https://github.com/phpstan/phpstan/issues/5348 - // @phpstan-ignore-next-line - $dateNew = $datetime->setTimezone(new \DateTimeZone('UTC')); - $date = $dateNew->format($this->dateFormats[$this->rfc]); - - return "<$priority>" . - $date . " " . - $hostname . " " . - $this->ident . "[" . $pid . "]: "; - } - - $date = $datetime->format($this->dateFormats[$this->rfc]); - - return "<$priority>1 " . - $date . " " . - $hostname . " " . - $this->ident . " " . - $pid . " - - "; - } - - /** - * Inject your own socket, mainly used for testing - * - * @return $this - */ - public function setSocket(UdpSocket $socket): self - { - $this->socket = $socket; - - return $this; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php deleted file mode 100644 index e4f69a9..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/TelegramBotHandler.php +++ /dev/null @@ -1,297 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use RuntimeException; -use Monolog\Level; -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Handler sends logs to Telegram using Telegram Bot API. - * - * How to use: - * 1) Create a Telegram bot with https://telegram.me/BotFather; - * 2) Create a Telegram channel or a group where logs will be recorded; - * 3) Add the created bot from step 1 to the created channel/group from step 2. - * - * In order to create an instance of TelegramBotHandler use - * 1. The Telegram bot API key from step 1 - * 2. The channel name with the `@` prefix if you created a public channel (e.g. `@my_public_channel`), - * or the channel ID with the `-100` prefix if you created a private channel (e.g. `-1001234567890`), - * or the group ID from step 2 (e.g. `-1234567890`). - * - * @link https://core.telegram.org/bots/api - * - * @author Mazur Alexandr - */ -class TelegramBotHandler extends AbstractProcessingHandler -{ - private const BOT_API = 'https://api.telegram.org/bot'; - - /** - * The available values of parseMode according to the Telegram api documentation - */ - private const AVAILABLE_PARSE_MODES = [ - 'HTML', - 'MarkdownV2', - 'Markdown', // legacy mode without underline and strikethrough, use MarkdownV2 instead - ]; - - /** - * The maximum number of characters allowed in a message according to the Telegram api documentation - */ - private const MAX_MESSAGE_LENGTH = 4096; - - /** - * Telegram bot access token provided by BotFather. - * Create telegram bot with https://telegram.me/BotFather and use access token from it. - */ - private string $apiKey; - - /** - * Telegram channel name. - * Since to start with '@' symbol as prefix. - */ - private string $channel; - - /** - * The kind of formatting that is used for the message. - * See available options at https://core.telegram.org/bots/api#formatting-options - * or in AVAILABLE_PARSE_MODES - */ - private string|null $parseMode; - - /** - * Disables link previews for links in the message. - */ - private bool|null $disableWebPagePreview; - - /** - * Sends the message silently. Users will receive a notification with no sound. - */ - private bool|null $disableNotification; - - /** - * True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages. - * False - truncates a message that is too long. - */ - private bool $splitLongMessages; - - /** - * Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests). - */ - private bool $delayBetweenMessages; - - /** - * Telegram message thread id, unique identifier for the target message thread (topic) of the forum; for forum supergroups only - * See how to get the `message_thread_id` https://stackoverflow.com/a/75178418 - */ - private int|null $topic; - - /** - * @param string $apiKey Telegram bot access token provided by BotFather - * @param string $channel Telegram channel name - * @param bool $splitLongMessages Split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages - * @param bool $delayBetweenMessages Adds delay between sending a split message according to Telegram API - * @param int $topic Telegram message thread id, unique identifier for the target message thread (topic) of the forum - * @throws MissingExtensionException If the curl extension is missing - */ - public function __construct( - string $apiKey, - string $channel, - $level = Level::Debug, - bool $bubble = true, - ?string $parseMode = null, - ?bool $disableWebPagePreview = null, - ?bool $disableNotification = null, - bool $splitLongMessages = false, - bool $delayBetweenMessages = false, - int $topic = null - ) { - if (!\extension_loaded('curl')) { - throw new MissingExtensionException('The curl extension is needed to use the TelegramBotHandler'); - } - - parent::__construct($level, $bubble); - - $this->apiKey = $apiKey; - $this->channel = $channel; - $this->setParseMode($parseMode); - $this->disableWebPagePreview($disableWebPagePreview); - $this->disableNotification($disableNotification); - $this->splitLongMessages($splitLongMessages); - $this->delayBetweenMessages($delayBetweenMessages); - $this->setTopic($topic); - } - - /** - * @return $this - */ - public function setParseMode(string|null $parseMode = null): self - { - if ($parseMode !== null && !\in_array($parseMode, self::AVAILABLE_PARSE_MODES, true)) { - throw new \InvalidArgumentException('Unknown parseMode, use one of these: ' . implode(', ', self::AVAILABLE_PARSE_MODES) . '.'); - } - - $this->parseMode = $parseMode; - - return $this; - } - - /** - * @return $this - */ - public function disableWebPagePreview(bool|null $disableWebPagePreview = null): self - { - $this->disableWebPagePreview = $disableWebPagePreview; - - return $this; - } - - /** - * @return $this - */ - public function disableNotification(bool|null $disableNotification = null): self - { - $this->disableNotification = $disableNotification; - - return $this; - } - - /** - * True - split a message longer than MAX_MESSAGE_LENGTH into parts and send in multiple messages. - * False - truncates a message that is too long. - * - * @return $this - */ - public function splitLongMessages(bool $splitLongMessages = false): self - { - $this->splitLongMessages = $splitLongMessages; - - return $this; - } - - /** - * Adds 1-second delay between sending a split message (according to Telegram API to avoid 429 Too Many Requests). - * - * @return $this - */ - public function delayBetweenMessages(bool $delayBetweenMessages = false): self - { - $this->delayBetweenMessages = $delayBetweenMessages; - - return $this; - } - - /** - * @return $this - */ - public function setTopic(int $topic = null): self - { - $this->topic = $topic; - - return $this; - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - $messages = []; - - foreach ($records as $record) { - if (!$this->isHandling($record)) { - continue; - } - - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - - $messages[] = $record; - } - - if (\count($messages) > 0) { - $this->send((string) $this->getFormatter()->formatBatch($messages)); - } - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->send($record->formatted); - } - - /** - * Send request to @link https://api.telegram.org/bot on SendMessage action. - */ - protected function send(string $message): void - { - $messages = $this->handleMessageLength($message); - - foreach ($messages as $key => $msg) { - if ($this->delayBetweenMessages && $key > 0) { - sleep(1); - } - - $this->sendCurl($msg); - } - } - - protected function sendCurl(string $message): void - { - $ch = curl_init(); - $url = self::BOT_API . $this->apiKey . '/SendMessage'; - curl_setopt($ch, CURLOPT_URL, $url); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); - $params = [ - 'text' => $message, - 'chat_id' => $this->channel, - 'parse_mode' => $this->parseMode, - 'disable_web_page_preview' => $this->disableWebPagePreview, - 'disable_notification' => $this->disableNotification, - ]; - if ($this->topic !== null) { - $params['message_thread_id'] = $this->topic; - } - curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); - - $result = Curl\Util::execute($ch); - if (!\is_string($result)) { - throw new RuntimeException('Telegram API error. Description: No response'); - } - $result = json_decode($result, true); - - if ($result['ok'] === false) { - throw new RuntimeException('Telegram API error. Description: ' . $result['description']); - } - } - - /** - * Handle a message that is too long: truncates or splits into several - * @return string[] - */ - private function handleMessageLength(string $message): array - { - $truncatedMarker = ' (...truncated)'; - if (!$this->splitLongMessages && \strlen($message) > self::MAX_MESSAGE_LENGTH) { - return [Utils::substr($message, 0, self::MAX_MESSAGE_LENGTH - \strlen($truncatedMarker)) . $truncatedMarker]; - } - - return str_split($message, self::MAX_MESSAGE_LENGTH); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php deleted file mode 100644 index a98389b..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/TestHandler.php +++ /dev/null @@ -1,195 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Level; -use Monolog\Logger; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Used for testing purposes. - * - * It records all records and gives you access to them for verification. - * - * @author Jordi Boggiano - * - * @method bool hasEmergency(string|array $recordAssertions) - * @method bool hasAlert(string|array $recordAssertions) - * @method bool hasCritical(string|array $recordAssertions) - * @method bool hasError(string|array $recordAssertions) - * @method bool hasWarning(string|array $recordAssertions) - * @method bool hasNotice(string|array $recordAssertions) - * @method bool hasInfo(string|array $recordAssertions) - * @method bool hasDebug(string|array $recordAssertions) - * - * @method bool hasEmergencyRecords() - * @method bool hasAlertRecords() - * @method bool hasCriticalRecords() - * @method bool hasErrorRecords() - * @method bool hasWarningRecords() - * @method bool hasNoticeRecords() - * @method bool hasInfoRecords() - * @method bool hasDebugRecords() - * - * @method bool hasEmergencyThatContains(string $message) - * @method bool hasAlertThatContains(string $message) - * @method bool hasCriticalThatContains(string $message) - * @method bool hasErrorThatContains(string $message) - * @method bool hasWarningThatContains(string $message) - * @method bool hasNoticeThatContains(string $message) - * @method bool hasInfoThatContains(string $message) - * @method bool hasDebugThatContains(string $message) - * - * @method bool hasEmergencyThatMatches(string $regex) - * @method bool hasAlertThatMatches(string $regex) - * @method bool hasCriticalThatMatches(string $regex) - * @method bool hasErrorThatMatches(string $regex) - * @method bool hasWarningThatMatches(string $regex) - * @method bool hasNoticeThatMatches(string $regex) - * @method bool hasInfoThatMatches(string $regex) - * @method bool hasDebugThatMatches(string $regex) - * - * @method bool hasEmergencyThatPasses(callable $predicate) - * @method bool hasAlertThatPasses(callable $predicate) - * @method bool hasCriticalThatPasses(callable $predicate) - * @method bool hasErrorThatPasses(callable $predicate) - * @method bool hasWarningThatPasses(callable $predicate) - * @method bool hasNoticeThatPasses(callable $predicate) - * @method bool hasInfoThatPasses(callable $predicate) - * @method bool hasDebugThatPasses(callable $predicate) - */ -class TestHandler extends AbstractProcessingHandler -{ - /** @var LogRecord[] */ - protected array $records = []; - /** @phpstan-var array, LogRecord[]> */ - protected array $recordsByLevel = []; - private bool $skipReset = false; - - /** - * @return array - */ - public function getRecords(): array - { - return $this->records; - } - - public function clear(): void - { - $this->records = []; - $this->recordsByLevel = []; - } - - public function reset(): void - { - if (!$this->skipReset) { - $this->clear(); - } - } - - public function setSkipReset(bool $skipReset): void - { - $this->skipReset = $skipReset; - } - - /** - * @param int|string|Level|LogLevel::* $level Logging level value or name - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function hasRecords(int|string|Level $level): bool - { - return isset($this->recordsByLevel[Logger::toMonologLevel($level)->value]); - } - - /** - * @param string|array $recordAssertions Either a message string or an array containing message and optionally context keys that will be checked against all records - * - * @phpstan-param array{message: string, context?: mixed[]}|string $recordAssertions - */ - public function hasRecord(string|array $recordAssertions, Level $level): bool - { - if (\is_string($recordAssertions)) { - $recordAssertions = ['message' => $recordAssertions]; - } - - return $this->hasRecordThatPasses(function (LogRecord $rec) use ($recordAssertions) { - if ($rec->message !== $recordAssertions['message']) { - return false; - } - if (isset($recordAssertions['context']) && $rec->context !== $recordAssertions['context']) { - return false; - } - - return true; - }, $level); - } - - public function hasRecordThatContains(string $message, Level $level): bool - { - return $this->hasRecordThatPasses(fn (LogRecord $rec) => str_contains($rec->message, $message), $level); - } - - public function hasRecordThatMatches(string $regex, Level $level): bool - { - return $this->hasRecordThatPasses(fn (LogRecord $rec) => preg_match($regex, $rec->message) > 0, $level); - } - - /** - * @phpstan-param callable(LogRecord, int): mixed $predicate - */ - public function hasRecordThatPasses(callable $predicate, Level $level): bool - { - $level = Logger::toMonologLevel($level); - - if (!isset($this->recordsByLevel[$level->value])) { - return false; - } - - foreach ($this->recordsByLevel[$level->value] as $i => $rec) { - if ((bool) $predicate($rec, $i)) { - return true; - } - } - - return false; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->recordsByLevel[$record->level->value][] = $record; - $this->records[] = $record; - } - - /** - * @param mixed[] $args - */ - public function __call(string $method, array $args): bool - { - if (preg_match('/(.*)(Debug|Info|Notice|Warning|Error|Critical|Alert|Emergency)(.*)/', $method, $matches) > 0) { - $genericMethod = $matches[1] . ('Records' !== $matches[3] ? 'Record' : '') . $matches[3]; - $level = \constant(Level::class.'::' . $matches[2]); - $callback = [$this, $genericMethod]; - if (\is_callable($callback)) { - $args[] = $level; - - return \call_user_func_array($callback, $args); - } - } - - throw new \BadMethodCallException('Call to undefined method ' . \get_class($this) . '::' . $method . '()'); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php b/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php deleted file mode 100644 index 9c12c3d..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/WebRequestRecognizerTrait.php +++ /dev/null @@ -1,23 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -trait WebRequestRecognizerTrait -{ - /** - * Checks if PHP's serving a web request - */ - protected function isWebRequest(): bool - { - return 'cli' !== \PHP_SAPI && 'phpdbg' !== \PHP_SAPI; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php deleted file mode 100644 index 932fa70..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/WhatFailureGroupHandler.php +++ /dev/null @@ -1,80 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\LogRecord; -use Throwable; - -/** - * Forwards records to multiple handlers suppressing failures of each handler - * and continuing through to give every handler a chance to succeed. - * - * @author Craig D'Amelio - */ -class WhatFailureGroupHandler extends GroupHandler -{ - /** - * @inheritDoc - */ - public function handle(LogRecord $record): bool - { - if (\count($this->processors) > 0) { - $record = $this->processRecord($record); - } - - foreach ($this->handlers as $handler) { - try { - $handler->handle(clone $record); - } catch (Throwable) { - // What failure? - } - } - - return false === $this->bubble; - } - - /** - * @inheritDoc - */ - public function handleBatch(array $records): void - { - if (\count($this->processors) > 0) { - $processed = []; - foreach ($records as $record) { - $processed[] = $this->processRecord($record); - } - $records = $processed; - } - - foreach ($this->handlers as $handler) { - try { - $handler->handleBatch(array_map(fn ($record) => clone $record, $records)); - } catch (Throwable) { - // What failure? - } - } - } - - /** - * {@inheritDoc} - */ - public function close(): void - { - foreach ($this->handlers as $handler) { - try { - $handler->close(); - } catch (\Throwable $e) { - // What failure? - } - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php b/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php deleted file mode 100644 index 8841f2f..0000000 --- a/vendor/monolog/monolog/src/Monolog/Handler/ZendMonitorHandler.php +++ /dev/null @@ -1,90 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Handler; - -use Monolog\Formatter\FormatterInterface; -use Monolog\Formatter\NormalizerFormatter; -use Monolog\Level; -use Monolog\LogRecord; - -/** - * Handler sending logs to Zend Monitor - * - * @author Christian Bergau - * @author Jason Davis - */ -class ZendMonitorHandler extends AbstractProcessingHandler -{ - /** - * @throws MissingExtensionException - */ - public function __construct(int|string|Level $level = Level::Debug, bool $bubble = true) - { - if (!\function_exists('zend_monitor_custom_event')) { - throw new MissingExtensionException( - 'You must have Zend Server installed with Zend Monitor enabled in order to use this handler' - ); - } - - parent::__construct($level, $bubble); - } - - /** - * Translates Monolog log levels to ZendMonitor levels. - */ - protected function toZendMonitorLevel(Level $level): int - { - return match ($level) { - Level::Debug => \ZEND_MONITOR_EVENT_SEVERITY_INFO, - Level::Info => \ZEND_MONITOR_EVENT_SEVERITY_INFO, - Level::Notice => \ZEND_MONITOR_EVENT_SEVERITY_INFO, - Level::Warning => \ZEND_MONITOR_EVENT_SEVERITY_WARNING, - Level::Error => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, - Level::Critical => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, - Level::Alert => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, - Level::Emergency => \ZEND_MONITOR_EVENT_SEVERITY_ERROR, - }; - } - - /** - * @inheritDoc - */ - protected function write(LogRecord $record): void - { - $this->writeZendMonitorCustomEvent( - $record->level->getName(), - $record->message, - $record->formatted, - $this->toZendMonitorLevel($record->level) - ); - } - - /** - * Write to Zend Monitor Events - * @param string $type Text displayed in "Class Name (custom)" field - * @param string $message Text displayed in "Error String" - * @param array $formatted Displayed in Custom Variables tab - * @param int $severity Set the event severity level (-1,0,1) - */ - protected function writeZendMonitorCustomEvent(string $type, string $message, array $formatted, int $severity): void - { - zend_monitor_custom_event($type, $message, $formatted, $severity); - } - - /** - * @inheritDoc - */ - public function getDefaultFormatter(): FormatterInterface - { - return new NormalizerFormatter(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Level.php b/vendor/monolog/monolog/src/Monolog/Level.php deleted file mode 100644 index 5620bc4..0000000 --- a/vendor/monolog/monolog/src/Monolog/Level.php +++ /dev/null @@ -1,209 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -use Psr\Log\LogLevel; - -/** - * Represents the log levels - * - * Monolog supports the logging levels described by RFC 5424 {@see https://datatracker.ietf.org/doc/html/rfc5424} - * but due to BC the severity values used internally are not 0-7. - * - * To get the level name/value out of a Level there are several options: - * - * - Use ->getName() to get the standard Monolog name which is full uppercased (e.g. "DEBUG") - * - Use ->toPsrLogLevel() to get the standard PSR-3 name which is full lowercased (e.g. "debug") - * - Use ->toRFC5424Level() to get the standard RFC 5424 value (e.g. 7 for debug, 0 for emergency) - * - Use ->name to get the enum case's name which is capitalized (e.g. "Debug") - * - * To get the internal value for filtering, if the includes/isLowerThan/isHigherThan methods are - * not enough, you can use ->value to get the enum case's integer value. - */ -enum Level: int -{ - /** - * Detailed debug information - */ - case Debug = 100; - - /** - * Interesting events - * - * Examples: User logs in, SQL logs. - */ - case Info = 200; - - /** - * Uncommon events - */ - case Notice = 250; - - /** - * Exceptional occurrences that are not errors - * - * Examples: Use of deprecated APIs, poor use of an API, - * undesirable things that are not necessarily wrong. - */ - case Warning = 300; - - /** - * Runtime errors - */ - case Error = 400; - - /** - * Critical conditions - * - * Example: Application component unavailable, unexpected exception. - */ - case Critical = 500; - - /** - * Action must be taken immediately - * - * Example: Entire website down, database unavailable, etc. - * This should trigger the SMS alerts and wake you up. - */ - case Alert = 550; - - /** - * Urgent alert. - */ - case Emergency = 600; - - /** - * @param value-of|LogLevel::*|'Debug'|'Info'|'Notice'|'Warning'|'Error'|'Critical'|'Alert'|'Emergency' $name - * @return static - */ - public static function fromName(string $name): self - { - return match ($name) { - 'debug', 'Debug', 'DEBUG' => self::Debug, - 'info', 'Info', 'INFO' => self::Info, - 'notice', 'Notice', 'NOTICE' => self::Notice, - 'warning', 'Warning', 'WARNING' => self::Warning, - 'error', 'Error', 'ERROR' => self::Error, - 'critical', 'Critical', 'CRITICAL' => self::Critical, - 'alert', 'Alert', 'ALERT' => self::Alert, - 'emergency', 'Emergency', 'EMERGENCY' => self::Emergency, - }; - } - - /** - * @param value-of $value - * @return static - */ - public static function fromValue(int $value): self - { - return self::from($value); - } - - /** - * Returns true if the passed $level is higher or equal to $this - */ - public function includes(Level $level): bool - { - return $this->value <= $level->value; - } - - public function isHigherThan(Level $level): bool - { - return $this->value > $level->value; - } - - public function isLowerThan(Level $level): bool - { - return $this->value < $level->value; - } - - /** - * Returns the monolog standardized all-capitals name of the level - * - * Use this instead of $level->name which returns the enum case name (e.g. Debug vs DEBUG if you use getName()) - * - * @return value-of - */ - public function getName(): string - { - return match ($this) { - self::Debug => 'DEBUG', - self::Info => 'INFO', - self::Notice => 'NOTICE', - self::Warning => 'WARNING', - self::Error => 'ERROR', - self::Critical => 'CRITICAL', - self::Alert => 'ALERT', - self::Emergency => 'EMERGENCY', - }; - } - - /** - * Returns the PSR-3 level matching this instance - * - * @phpstan-return \Psr\Log\LogLevel::* - */ - public function toPsrLogLevel(): string - { - return match ($this) { - self::Debug => LogLevel::DEBUG, - self::Info => LogLevel::INFO, - self::Notice => LogLevel::NOTICE, - self::Warning => LogLevel::WARNING, - self::Error => LogLevel::ERROR, - self::Critical => LogLevel::CRITICAL, - self::Alert => LogLevel::ALERT, - self::Emergency => LogLevel::EMERGENCY, - }; - } - - /** - * Returns the RFC 5424 level matching this instance - * - * @phpstan-return int<0, 7> - */ - public function toRFC5424Level(): int - { - return match ($this) { - self::Debug => 7, - self::Info => 6, - self::Notice => 5, - self::Warning => 4, - self::Error => 3, - self::Critical => 2, - self::Alert => 1, - self::Emergency => 0, - }; - } - - public const VALUES = [ - 100, - 200, - 250, - 300, - 400, - 500, - 550, - 600, - ]; - - public const NAMES = [ - 'DEBUG', - 'INFO', - 'NOTICE', - 'WARNING', - 'ERROR', - 'CRITICAL', - 'ALERT', - 'EMERGENCY', - ]; -} diff --git a/vendor/monolog/monolog/src/Monolog/LogRecord.php b/vendor/monolog/monolog/src/Monolog/LogRecord.php deleted file mode 100644 index 14c82f3..0000000 --- a/vendor/monolog/monolog/src/Monolog/LogRecord.php +++ /dev/null @@ -1,127 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -use ArrayAccess; - -/** - * Monolog log record - * - * @author Jordi Boggiano - * @template-implements ArrayAccess<'message'|'level'|'context'|'level_name'|'channel'|'datetime'|'extra'|'formatted', int|string|\DateTimeImmutable|array> - */ -class LogRecord implements ArrayAccess -{ - private const MODIFIABLE_FIELDS = [ - 'extra' => true, - 'formatted' => true, - ]; - - public function __construct( - public readonly \DateTimeImmutable $datetime, - public readonly string $channel, - public readonly Level $level, - public readonly string $message, - /** @var array */ - public readonly array $context = [], - /** @var array */ - public array $extra = [], - public mixed $formatted = null, - ) { - } - - public function offsetSet(mixed $offset, mixed $value): void - { - if ($offset === 'extra') { - if (!\is_array($value)) { - throw new \InvalidArgumentException('extra must be an array'); - } - - $this->extra = $value; - - return; - } - - if ($offset === 'formatted') { - $this->formatted = $value; - - return; - } - - throw new \LogicException('Unsupported operation: setting '.$offset); - } - - public function offsetExists(mixed $offset): bool - { - if ($offset === 'level_name') { - return true; - } - - return isset($this->{$offset}); - } - - public function offsetUnset(mixed $offset): void - { - throw new \LogicException('Unsupported operation'); - } - - public function &offsetGet(mixed $offset): mixed - { - // handle special cases for the level enum - if ($offset === 'level_name') { - // avoid returning readonly props by ref as this is illegal - $copy = $this->level->getName(); - - return $copy; - } - if ($offset === 'level') { - // avoid returning readonly props by ref as this is illegal - $copy = $this->level->value; - - return $copy; - } - - if (isset(self::MODIFIABLE_FIELDS[$offset])) { - return $this->{$offset}; - } - - // avoid returning readonly props by ref as this is illegal - $copy = $this->{$offset}; - - return $copy; - } - - /** - * @phpstan-return array{message: string, context: mixed[], level: value-of, level_name: value-of, channel: string, datetime: \DateTimeImmutable, extra: mixed[]} - */ - public function toArray(): array - { - return [ - 'message' => $this->message, - 'context' => $this->context, - 'level' => $this->level->value, - 'level_name' => $this->level->getName(), - 'channel' => $this->channel, - 'datetime' => $this->datetime, - 'extra' => $this->extra, - ]; - } - - public function with(mixed ...$args): self - { - foreach (['message', 'context', 'level', 'channel', 'datetime', 'extra'] as $prop) { - $args[$prop] ??= $this->{$prop}; - } - - return new self(...$args); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Logger.php b/vendor/monolog/monolog/src/Monolog/Logger.php deleted file mode 100644 index edc62f3..0000000 --- a/vendor/monolog/monolog/src/Monolog/Logger.php +++ /dev/null @@ -1,750 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -use Closure; -use DateTimeZone; -use Fiber; -use Monolog\Handler\HandlerInterface; -use Monolog\Processor\ProcessorInterface; -use Psr\Log\LoggerInterface; -use Psr\Log\InvalidArgumentException; -use Psr\Log\LogLevel; -use Throwable; -use Stringable; -use WeakMap; - -/** - * Monolog log channel - * - * It contains a stack of Handlers and a stack of Processors, - * and uses them to store records that are added to it. - * - * @author Jordi Boggiano - * @final - */ -class Logger implements LoggerInterface, ResettableInterface -{ - /** - * Detailed debug information - * - * @deprecated Use \Monolog\Level::Debug - */ - public const DEBUG = 100; - - /** - * Interesting events - * - * Examples: User logs in, SQL logs. - * - * @deprecated Use \Monolog\Level::Info - */ - public const INFO = 200; - - /** - * Uncommon events - * - * @deprecated Use \Monolog\Level::Notice - */ - public const NOTICE = 250; - - /** - * Exceptional occurrences that are not errors - * - * Examples: Use of deprecated APIs, poor use of an API, - * undesirable things that are not necessarily wrong. - * - * @deprecated Use \Monolog\Level::Warning - */ - public const WARNING = 300; - - /** - * Runtime errors - * - * @deprecated Use \Monolog\Level::Error - */ - public const ERROR = 400; - - /** - * Critical conditions - * - * Example: Application component unavailable, unexpected exception. - * - * @deprecated Use \Monolog\Level::Critical - */ - public const CRITICAL = 500; - - /** - * Action must be taken immediately - * - * Example: Entire website down, database unavailable, etc. - * This should trigger the SMS alerts and wake you up. - * - * @deprecated Use \Monolog\Level::Alert - */ - public const ALERT = 550; - - /** - * Urgent alert. - * - * @deprecated Use \Monolog\Level::Emergency - */ - public const EMERGENCY = 600; - - /** - * Monolog API version - * - * This is only bumped when API breaks are done and should - * follow the major version of the library - */ - public const API = 3; - - /** - * Mapping between levels numbers defined in RFC 5424 and Monolog ones - * - * @phpstan-var array $rfc_5424_levels - */ - private const RFC_5424_LEVELS = [ - 7 => Level::Debug, - 6 => Level::Info, - 5 => Level::Notice, - 4 => Level::Warning, - 3 => Level::Error, - 2 => Level::Critical, - 1 => Level::Alert, - 0 => Level::Emergency, - ]; - - protected string $name; - - /** - * The handler stack - * - * @var list - */ - protected array $handlers; - - /** - * Processors that will process all log records - * - * To process records of a single handler instead, add the processor on that specific handler - * - * @var array<(callable(LogRecord): LogRecord)|ProcessorInterface> - */ - protected array $processors; - - protected bool $microsecondTimestamps = true; - - protected DateTimeZone $timezone; - - protected Closure|null $exceptionHandler = null; - - /** - * Keeps track of depth to prevent infinite logging loops - */ - private int $logDepth = 0; - - /** - * @var WeakMap, int> Keeps track of depth inside fibers to prevent infinite logging loops - */ - private WeakMap $fiberLogDepth; - - /** - * Whether to detect infinite logging loops - * This can be disabled via {@see useLoggingLoopDetection} if you have async handlers that do not play well with this - */ - private bool $detectCycles = true; - - /** - * @param string $name The logging channel, a simple descriptive name that is attached to all log records - * @param HandlerInterface[] $handlers Optional stack of handlers, the first one in the array is called first, etc. - * @param callable[] $processors Optional array of processors - * @param DateTimeZone|null $timezone Optional timezone, if not provided date_default_timezone_get() will be used - * - * @phpstan-param array<(callable(LogRecord): LogRecord)|ProcessorInterface> $processors - */ - public function __construct(string $name, array $handlers = [], array $processors = [], DateTimeZone|null $timezone = null) - { - $this->name = $name; - $this->setHandlers($handlers); - $this->processors = $processors; - $this->timezone = $timezone ?? new DateTimeZone(date_default_timezone_get()); - $this->fiberLogDepth = new \WeakMap(); - } - - public function getName(): string - { - return $this->name; - } - - /** - * Return a new cloned instance with the name changed - * - * @return static - */ - public function withName(string $name): self - { - $new = clone $this; - $new->name = $name; - - return $new; - } - - /** - * Pushes a handler on to the stack. - * - * @return $this - */ - public function pushHandler(HandlerInterface $handler): self - { - array_unshift($this->handlers, $handler); - - return $this; - } - - /** - * Pops a handler from the stack - * - * @throws \LogicException If empty handler stack - */ - public function popHandler(): HandlerInterface - { - if (0 === \count($this->handlers)) { - throw new \LogicException('You tried to pop from an empty handler stack.'); - } - - return array_shift($this->handlers); - } - - /** - * Set handlers, replacing all existing ones. - * - * If a map is passed, keys will be ignored. - * - * @param list $handlers - * @return $this - */ - public function setHandlers(array $handlers): self - { - $this->handlers = []; - foreach (array_reverse($handlers) as $handler) { - $this->pushHandler($handler); - } - - return $this; - } - - /** - * @return list - */ - public function getHandlers(): array - { - return $this->handlers; - } - - /** - * Adds a processor on to the stack. - * - * @phpstan-param ProcessorInterface|(callable(LogRecord): LogRecord) $callback - * @return $this - */ - public function pushProcessor(ProcessorInterface|callable $callback): self - { - array_unshift($this->processors, $callback); - - return $this; - } - - /** - * Removes the processor on top of the stack and returns it. - * - * @phpstan-return ProcessorInterface|(callable(LogRecord): LogRecord) - * @throws \LogicException If empty processor stack - */ - public function popProcessor(): callable - { - if (0 === \count($this->processors)) { - throw new \LogicException('You tried to pop from an empty processor stack.'); - } - - return array_shift($this->processors); - } - - /** - * @return callable[] - * @phpstan-return array - */ - public function getProcessors(): array - { - return $this->processors; - } - - /** - * Control the use of microsecond resolution timestamps in the 'datetime' - * member of new records. - * - * As of PHP7.1 microseconds are always included by the engine, so - * there is no performance penalty and Monolog 2 enabled microseconds - * by default. This function lets you disable them though in case you want - * to suppress microseconds from the output. - * - * @param bool $micro True to use microtime() to create timestamps - * @return $this - */ - public function useMicrosecondTimestamps(bool $micro): self - { - $this->microsecondTimestamps = $micro; - - return $this; - } - - /** - * @return $this - */ - public function useLoggingLoopDetection(bool $detectCycles): self - { - $this->detectCycles = $detectCycles; - - return $this; - } - - /** - * Adds a log record. - * - * @param int $level The logging level (a Monolog or RFC 5424 level) - * @param string $message The log message - * @param mixed[] $context The log context - * @param DateTimeImmutable|null $datetime Optional log date to log into the past or future - * @return bool Whether the record has been processed - * - * @phpstan-param value-of|Level $level - */ - public function addRecord(int|Level $level, string $message, array $context = [], DateTimeImmutable|null $datetime = null): bool - { - if (\is_int($level) && isset(self::RFC_5424_LEVELS[$level])) { - $level = self::RFC_5424_LEVELS[$level]; - } - - if ($this->detectCycles) { - if (null !== ($fiber = Fiber::getCurrent())) { - $logDepth = $this->fiberLogDepth[$fiber] = ($this->fiberLogDepth[$fiber] ?? 0) + 1; - } else { - $logDepth = ++$this->logDepth; - } - } else { - $logDepth = 0; - } - - if ($logDepth === 3) { - $this->warning('A possible infinite logging loop was detected and aborted. It appears some of your handler code is triggering logging, see the previous log record for a hint as to what may be the cause.'); - - return false; - } elseif ($logDepth >= 5) { // log depth 4 is let through, so we can log the warning above - return false; - } - - try { - $recordInitialized = \count($this->processors) === 0; - - $record = new LogRecord( - datetime: $datetime ?? new DateTimeImmutable($this->microsecondTimestamps, $this->timezone), - channel: $this->name, - level: self::toMonologLevel($level), - message: $message, - context: $context, - extra: [], - ); - $handled = false; - - foreach ($this->handlers as $handler) { - if (false === $recordInitialized) { - // skip initializing the record as long as no handler is going to handle it - if (!$handler->isHandling($record)) { - continue; - } - - try { - foreach ($this->processors as $processor) { - $record = $processor($record); - } - $recordInitialized = true; - } catch (Throwable $e) { - $this->handleException($e, $record); - - return true; - } - } - - // once the record is initialized, send it to all handlers as long as the bubbling chain is not interrupted - try { - $handled = true; - if (true === $handler->handle(clone $record)) { - break; - } - } catch (Throwable $e) { - $this->handleException($e, $record); - - return true; - } - } - - return $handled; - } finally { - if ($this->detectCycles) { - if (isset($fiber)) { - $this->fiberLogDepth[$fiber]--; - } else { - $this->logDepth--; - } - } - } - } - - /** - * Ends a log cycle and frees all resources used by handlers. - * - * Closing a Handler means flushing all buffers and freeing any open resources/handles. - * Handlers that have been closed should be able to accept log records again and re-open - * themselves on demand, but this may not always be possible depending on implementation. - * - * This is useful at the end of a request and will be called automatically on every handler - * when they get destructed. - */ - public function close(): void - { - foreach ($this->handlers as $handler) { - $handler->close(); - } - } - - /** - * Ends a log cycle and resets all handlers and processors to their initial state. - * - * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal - * state, and getting it back to a state in which it can receive log records again. - * - * This is useful in case you want to avoid logs leaking between two requests or jobs when you - * have a long running process like a worker or an application server serving multiple requests - * in one process. - */ - public function reset(): void - { - foreach ($this->handlers as $handler) { - if ($handler instanceof ResettableInterface) { - $handler->reset(); - } - } - - foreach ($this->processors as $processor) { - if ($processor instanceof ResettableInterface) { - $processor->reset(); - } - } - } - - /** - * Gets the name of the logging level as a string. - * - * This still returns a string instead of a Level for BC, but new code should not rely on this method. - * - * @throws \Psr\Log\InvalidArgumentException If level is not defined - * - * @phpstan-param value-of|Level $level - * @phpstan-return value-of - * - * @deprecated Since 3.0, use {@see toMonologLevel} or {@see \Monolog\Level->getName()} instead - */ - public static function getLevelName(int|Level $level): string - { - return self::toMonologLevel($level)->getName(); - } - - /** - * Converts PSR-3 levels to Monolog ones if necessary - * - * @param int|string|Level|LogLevel::* $level Level number (monolog) or name (PSR-3) - * @throws \Psr\Log\InvalidArgumentException If level is not defined - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public static function toMonologLevel(string|int|Level $level): Level - { - if ($level instanceof Level) { - return $level; - } - - if (\is_string($level)) { - if (is_numeric($level)) { - $levelEnum = Level::tryFrom((int) $level); - if ($levelEnum === null) { - throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES)); - } - - return $levelEnum; - } - - // Contains first char of all log levels and avoids using strtoupper() which may have - // strange results depending on locale (for example, "i" will become "İ" in Turkish locale) - $upper = strtr(substr($level, 0, 1), 'dinweca', 'DINWECA') . strtolower(substr($level, 1)); - if (\defined(Level::class.'::'.$upper)) { - return \constant(Level::class . '::' . $upper); - } - - throw new InvalidArgumentException('Level "'.$level.'" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES)); - } - - $levelEnum = Level::tryFrom($level); - if ($levelEnum === null) { - throw new InvalidArgumentException('Level "'.var_export($level, true).'" is not defined, use one of: '.implode(', ', Level::NAMES + Level::VALUES)); - } - - return $levelEnum; - } - - /** - * Checks whether the Logger has a handler that listens on the given level - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function isHandling(int|string|Level $level): bool - { - $record = new LogRecord( - datetime: new DateTimeImmutable($this->microsecondTimestamps, $this->timezone), - channel: $this->name, - message: '', - level: self::toMonologLevel($level), - ); - - foreach ($this->handlers as $handler) { - if ($handler->isHandling($record)) { - return true; - } - } - - return false; - } - - /** - * Set a custom exception handler that will be called if adding a new record fails - * - * The Closure will receive an exception object and the record that failed to be logged - * - * @return $this - */ - public function setExceptionHandler(Closure|null $callback): self - { - $this->exceptionHandler = $callback; - - return $this; - } - - public function getExceptionHandler(): Closure|null - { - return $this->exceptionHandler; - } - - /** - * Adds a log record at an arbitrary level. - * - * This method allows for compatibility with common interfaces. - * - * @param mixed $level The log level (a Monolog, PSR-3 or RFC 5424 level) - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - * - * @phpstan-param Level|LogLevel::* $level - */ - public function log($level, string|\Stringable $message, array $context = []): void - { - if (!$level instanceof Level) { - if (!\is_string($level) && !\is_int($level)) { - throw new \InvalidArgumentException('$level is expected to be a string, int or '.Level::class.' instance'); - } - - if (isset(self::RFC_5424_LEVELS[$level])) { - $level = self::RFC_5424_LEVELS[$level]; - } - - $level = static::toMonologLevel($level); - } - - $this->addRecord($level, (string) $message, $context); - } - - /** - * Adds a log record at the DEBUG level. - * - * This method allows for compatibility with common interfaces. - * - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - */ - public function debug(string|\Stringable $message, array $context = []): void - { - $this->addRecord(Level::Debug, (string) $message, $context); - } - - /** - * Adds a log record at the INFO level. - * - * This method allows for compatibility with common interfaces. - * - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - */ - public function info(string|\Stringable $message, array $context = []): void - { - $this->addRecord(Level::Info, (string) $message, $context); - } - - /** - * Adds a log record at the NOTICE level. - * - * This method allows for compatibility with common interfaces. - * - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - */ - public function notice(string|\Stringable $message, array $context = []): void - { - $this->addRecord(Level::Notice, (string) $message, $context); - } - - /** - * Adds a log record at the WARNING level. - * - * This method allows for compatibility with common interfaces. - * - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - */ - public function warning(string|\Stringable $message, array $context = []): void - { - $this->addRecord(Level::Warning, (string) $message, $context); - } - - /** - * Adds a log record at the ERROR level. - * - * This method allows for compatibility with common interfaces. - * - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - */ - public function error(string|\Stringable $message, array $context = []): void - { - $this->addRecord(Level::Error, (string) $message, $context); - } - - /** - * Adds a log record at the CRITICAL level. - * - * This method allows for compatibility with common interfaces. - * - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - */ - public function critical(string|\Stringable $message, array $context = []): void - { - $this->addRecord(Level::Critical, (string) $message, $context); - } - - /** - * Adds a log record at the ALERT level. - * - * This method allows for compatibility with common interfaces. - * - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - */ - public function alert(string|\Stringable $message, array $context = []): void - { - $this->addRecord(Level::Alert, (string) $message, $context); - } - - /** - * Adds a log record at the EMERGENCY level. - * - * This method allows for compatibility with common interfaces. - * - * @param string|Stringable $message The log message - * @param mixed[] $context The log context - */ - public function emergency(string|\Stringable $message, array $context = []): void - { - $this->addRecord(Level::Emergency, (string) $message, $context); - } - - /** - * Sets the timezone to be used for the timestamp of log records. - * - * @return $this - */ - public function setTimezone(DateTimeZone $tz): self - { - $this->timezone = $tz; - - return $this; - } - - /** - * Returns the timezone to be used for the timestamp of log records. - */ - public function getTimezone(): DateTimeZone - { - return $this->timezone; - } - - /** - * Delegates exception management to the custom exception handler, - * or throws the exception if no custom handler is set. - */ - protected function handleException(Throwable $e, LogRecord $record): void - { - if (null === $this->exceptionHandler) { - throw $e; - } - - ($this->exceptionHandler)($e, $record); - } - - /** - * @return array - */ - public function __serialize(): array - { - return [ - 'name' => $this->name, - 'handlers' => $this->handlers, - 'processors' => $this->processors, - 'microsecondTimestamps' => $this->microsecondTimestamps, - 'timezone' => $this->timezone, - 'exceptionHandler' => $this->exceptionHandler, - 'logDepth' => $this->logDepth, - 'detectCycles' => $this->detectCycles, - ]; - } - - /** - * @param array $data - */ - public function __unserialize(array $data): void - { - foreach (['name', 'handlers', 'processors', 'microsecondTimestamps', 'timezone', 'exceptionHandler', 'logDepth', 'detectCycles'] as $property) { - if (isset($data[$property])) { - $this->$property = $data[$property]; - } - } - - $this->fiberLogDepth = new \WeakMap(); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php deleted file mode 100644 index 514b354..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/ClosureContextProcessor.php +++ /dev/null @@ -1,51 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\LogRecord; - -/** - * Generates a context from a Closure if the Closure is the only value - * in the context - * - * It helps reduce the performance impact of debug logs if they do - * need to create lots of context information. If this processor is added - * on the correct handler the context data will only be generated - * when the logs are actually logged to that handler, which is useful when - * using FingersCrossedHandler or other filtering handlers to conditionally - * log records. - */ -class ClosureContextProcessor implements ProcessorInterface -{ - public function __invoke(LogRecord $record): LogRecord - { - $context = $record->context; - if (isset($context[0]) && 1 === \count($context) && $context[0] instanceof \Closure) { - try { - $context = $context[0](); - } catch (\Throwable $e) { - $context = [ - 'error_on_context_generation' => $e->getMessage(), - 'exception' => $e, - ]; - } - - if (!\is_array($context)) { - $context = [$context]; - } - - $record = $record->with(context: $context); - } - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php deleted file mode 100644 index 6b25505..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/GitProcessor.php +++ /dev/null @@ -1,75 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\Level; -use Monolog\Logger; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Injects Git branch and Git commit SHA in all records - * - * @author Nick Otter - * @author Jordi Boggiano - */ -class GitProcessor implements ProcessorInterface -{ - private Level $level; - /** @var array{branch: string, commit: string}|array|null */ - private static $cache = null; - - /** - * @param int|string|Level|LogLevel::* $level The minimum logging level at which this Processor will be triggered - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function __construct(int|string|Level $level = Level::Debug) - { - $this->level = Logger::toMonologLevel($level); - } - - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - // return if the level is not high enough - if ($record->level->isLowerThan($this->level)) { - return $record; - } - - $record->extra['git'] = self::getGitInfo(); - - return $record; - } - - /** - * @return array{branch: string, commit: string}|array - */ - private static function getGitInfo(): array - { - if (self::$cache !== null) { - return self::$cache; - } - - $branches = shell_exec('git branch -v --no-abbrev'); - if (\is_string($branches) && 1 === preg_match('{^\* (.+?)\s+([a-f0-9]{40})(?:\s|$)}m', $branches, $matches)) { - return self::$cache = [ - 'branch' => $matches[1], - 'commit' => $matches[2], - ]; - } - - return self::$cache = []; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php deleted file mode 100644 index cba6e09..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/HostnameProcessor.php +++ /dev/null @@ -1,37 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\LogRecord; - -/** - * Injects value of gethostname in all records - */ -class HostnameProcessor implements ProcessorInterface -{ - private static string $host; - - public function __construct() - { - self::$host = (string) gethostname(); - } - - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - $record->extra['hostname'] = self::$host; - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php deleted file mode 100644 index efc2f50..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/IntrospectionProcessor.php +++ /dev/null @@ -1,122 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\Level; -use Monolog\Logger; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Injects line/file:class/function where the log message came from - * - * Warning: This only works if the handler processes the logs directly. - * If you put the processor on a handler that is behind a FingersCrossedHandler - * for example, the processor will only be called once the trigger level is reached, - * and all the log records will have the same file/line/.. data from the call that - * triggered the FingersCrossedHandler. - * - * @author Jordi Boggiano - */ -class IntrospectionProcessor implements ProcessorInterface -{ - private Level $level; - - /** @var string[] */ - private array $skipClassesPartials; - - private int $skipStackFramesCount; - - private const SKIP_FUNCTIONS = [ - 'call_user_func', - 'call_user_func_array', - ]; - - /** - * @param string|int|Level $level The minimum logging level at which this Processor will be triggered - * @param string[] $skipClassesPartials - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function __construct(int|string|Level $level = Level::Debug, array $skipClassesPartials = [], int $skipStackFramesCount = 0) - { - $this->level = Logger::toMonologLevel($level); - $this->skipClassesPartials = array_merge(['Monolog\\'], $skipClassesPartials); - $this->skipStackFramesCount = $skipStackFramesCount; - } - - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - // return if the level is not high enough - if ($record->level->isLowerThan($this->level)) { - return $record; - } - - $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); - - // skip first since it's always the current method - array_shift($trace); - // the call_user_func call is also skipped - array_shift($trace); - - $i = 0; - - while ($this->isTraceClassOrSkippedFunction($trace, $i)) { - if (isset($trace[$i]['class'])) { - foreach ($this->skipClassesPartials as $part) { - if (strpos($trace[$i]['class'], $part) !== false) { - $i++; - - continue 2; - } - } - } elseif (\in_array($trace[$i]['function'], self::SKIP_FUNCTIONS, true)) { - $i++; - - continue; - } - - break; - } - - $i += $this->skipStackFramesCount; - - // we should have the call source now - $record->extra = array_merge( - $record->extra, - [ - 'file' => $trace[$i - 1]['file'] ?? null, - 'line' => $trace[$i - 1]['line'] ?? null, - 'class' => $trace[$i]['class'] ?? null, - 'callType' => $trace[$i]['type'] ?? null, - 'function' => $trace[$i]['function'] ?? null, - ] - ); - - return $record; - } - - /** - * @param array $trace - */ - private function isTraceClassOrSkippedFunction(array $trace, int $index): bool - { - if (!isset($trace[$index])) { - return false; - } - - return isset($trace[$index]['class']) || \in_array($trace[$index]['function'], self::SKIP_FUNCTIONS, true); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php deleted file mode 100644 index 762ed91..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/LoadAverageProcessor.php +++ /dev/null @@ -1,66 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\LogRecord; - -/** - * Injects sys_getloadavg in all records @see https://www.php.net/manual/en/function.sys-getloadavg.php - * - * @author Johan Vlaar - */ -class LoadAverageProcessor implements ProcessorInterface -{ - public const LOAD_1_MINUTE = 0; - public const LOAD_5_MINUTE = 1; - public const LOAD_15_MINUTE = 2; - - private const AVAILABLE_LOAD = [ - self::LOAD_1_MINUTE, - self::LOAD_5_MINUTE, - self::LOAD_15_MINUTE, - ]; - - /** - * @var int - */ - protected $avgSystemLoad; - - /** - * @param self::LOAD_* $avgSystemLoad - */ - public function __construct(int $avgSystemLoad = self::LOAD_1_MINUTE) - { - if (!\in_array($avgSystemLoad, self::AVAILABLE_LOAD, true)) { - throw new \InvalidArgumentException(sprintf('Invalid average system load: `%s`', $avgSystemLoad)); - } - $this->avgSystemLoad = $avgSystemLoad; - } - - /** - * {@inheritDoc} - */ - public function __invoke(LogRecord $record): LogRecord - { - if (!\function_exists('sys_getloadavg')) { - return $record; - } - $usage = sys_getloadavg(); - if (false === $usage) { - return $record; - } - - $record->extra['load_average'] = $usage[$this->avgSystemLoad]; - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php deleted file mode 100644 index adc32c6..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/MemoryPeakUsageProcessor.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\LogRecord; - -/** - * Injects memory_get_peak_usage in all records - * - * @see Monolog\Processor\MemoryProcessor::__construct() for options - * @author Rob Jensen - */ -class MemoryPeakUsageProcessor extends MemoryProcessor -{ - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - $usage = memory_get_peak_usage($this->realUsage); - - if ($this->useFormatting) { - $usage = $this->formatBytes($usage); - } - - $record->extra['memory_peak_usage'] = $usage; - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php deleted file mode 100644 index f808e51..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/MemoryProcessor.php +++ /dev/null @@ -1,60 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -/** - * Some methods that are common for all memory processors - * - * @author Rob Jensen - */ -abstract class MemoryProcessor implements ProcessorInterface -{ - /** - * @var bool If true, get the real size of memory allocated from system. Else, only the memory used by emalloc() is reported. - */ - protected bool $realUsage; - - /** - * @var bool If true, then format memory size to human readable string (MB, KB, B depending on size) - */ - protected bool $useFormatting; - - /** - * @param bool $realUsage Set this to true to get the real size of memory allocated from system. - * @param bool $useFormatting If true, then format memory size to human readable string (MB, KB, B depending on size) - */ - public function __construct(bool $realUsage = true, bool $useFormatting = true) - { - $this->realUsage = $realUsage; - $this->useFormatting = $useFormatting; - } - - /** - * Formats bytes into a human readable string if $this->useFormatting is true, otherwise return $bytes as is - * - * @return string|int Formatted string if $this->useFormatting is true, otherwise return $bytes as int - */ - protected function formatBytes(int $bytes) - { - if (!$this->useFormatting) { - return $bytes; - } - - if ($bytes > 1024 * 1024) { - return round($bytes / 1024 / 1024, 2).' MB'; - } elseif ($bytes > 1024) { - return round($bytes / 1024, 2).' KB'; - } - - return $bytes . ' B'; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php deleted file mode 100644 index a814b1d..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/MemoryUsageProcessor.php +++ /dev/null @@ -1,39 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\LogRecord; - -/** - * Injects memory_get_usage in all records - * - * @see Monolog\Processor\MemoryProcessor::__construct() for options - * @author Rob Jensen - */ -class MemoryUsageProcessor extends MemoryProcessor -{ - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - $usage = memory_get_usage($this->realUsage); - - if ($this->useFormatting) { - $usage = $this->formatBytes($usage); - } - - $record->extra['memory_usage'] = $usage; - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php deleted file mode 100644 index a48a785..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/MercurialProcessor.php +++ /dev/null @@ -1,75 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\Level; -use Monolog\Logger; -use Psr\Log\LogLevel; -use Monolog\LogRecord; - -/** - * Injects Hg branch and Hg revision number in all records - * - * @author Jonathan A. Schweder - */ -class MercurialProcessor implements ProcessorInterface -{ - private Level $level; - /** @var array{branch: string, revision: string}|array|null */ - private static $cache = null; - - /** - * @param int|string|Level $level The minimum logging level at which this Processor will be triggered - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function __construct(int|string|Level $level = Level::Debug) - { - $this->level = Logger::toMonologLevel($level); - } - - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - // return if the level is not high enough - if ($record->level->isLowerThan($this->level)) { - return $record; - } - - $record->extra['hg'] = self::getMercurialInfo(); - - return $record; - } - - /** - * @return array{branch: string, revision: string}|array - */ - private static function getMercurialInfo(): array - { - if (self::$cache !== null) { - return self::$cache; - } - - $result = explode(' ', trim((string) shell_exec('hg id -nb'))); - - if (\count($result) >= 3) { - return self::$cache = [ - 'branch' => $result[1], - 'revision' => $result[2], - ]; - } - - return self::$cache = []; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php deleted file mode 100644 index bb9a522..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/ProcessIdProcessor.php +++ /dev/null @@ -1,32 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\LogRecord; - -/** - * Adds value of getmypid into records - * - * @author Andreas Hörnicke - */ -class ProcessIdProcessor implements ProcessorInterface -{ - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - $record->extra['process_id'] = getmypid(); - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php b/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php deleted file mode 100644 index ebe41fc..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/ProcessorInterface.php +++ /dev/null @@ -1,27 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\LogRecord; - -/** - * An optional interface to allow labelling Monolog processors. - * - * @author Nicolas Grekas - */ -interface ProcessorInterface -{ - /** - * @return LogRecord The processed record - */ - public function __invoke(LogRecord $record); -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php deleted file mode 100644 index 76adf25..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/PsrLogMessageProcessor.php +++ /dev/null @@ -1,87 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\Utils; -use Monolog\LogRecord; - -/** - * Processes a record's message according to PSR-3 rules - * - * It replaces {foo} with the value from $context['foo'] - * - * @author Jordi Boggiano - */ -class PsrLogMessageProcessor implements ProcessorInterface -{ - public const SIMPLE_DATE = "Y-m-d\TH:i:s.uP"; - - private ?string $dateFormat; - - private bool $removeUsedContextFields; - - /** - * @param string|null $dateFormat The format of the timestamp: one supported by DateTime::format - * @param bool $removeUsedContextFields If set to true the fields interpolated into message gets unset - */ - public function __construct(?string $dateFormat = null, bool $removeUsedContextFields = false) - { - $this->dateFormat = $dateFormat; - $this->removeUsedContextFields = $removeUsedContextFields; - } - - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - if (false === strpos($record->message, '{')) { - return $record; - } - - $replacements = []; - $context = $record->context; - - foreach ($context as $key => $val) { - $placeholder = '{' . $key . '}'; - if (strpos($record->message, $placeholder) === false) { - continue; - } - - if (null === $val || \is_scalar($val) || (\is_object($val) && method_exists($val, "__toString"))) { - $replacements[$placeholder] = $val; - } elseif ($val instanceof \DateTimeInterface) { - if (null === $this->dateFormat && $val instanceof \Monolog\DateTimeImmutable) { - // handle monolog dates using __toString if no specific dateFormat was asked for - // so that it follows the useMicroseconds flag - $replacements[$placeholder] = (string) $val; - } else { - $replacements[$placeholder] = $val->format($this->dateFormat ?? static::SIMPLE_DATE); - } - } elseif ($val instanceof \UnitEnum) { - $replacements[$placeholder] = $val instanceof \BackedEnum ? $val->value : $val->name; - } elseif (\is_object($val)) { - $replacements[$placeholder] = '[object '.Utils::getClass($val).']'; - } elseif (\is_array($val)) { - $replacements[$placeholder] = 'array'.Utils::jsonEncode($val, null, true); - } else { - $replacements[$placeholder] = '['.\gettype($val).']'; - } - - if ($this->removeUsedContextFields) { - unset($context[$key]); - } - } - - return $record->with(message: strtr($record->message, $replacements), context: $context); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php deleted file mode 100644 index f4e41ce..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/TagProcessor.php +++ /dev/null @@ -1,65 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\LogRecord; - -/** - * Adds a tags array into record - * - * @author Martijn Riemers - */ -class TagProcessor implements ProcessorInterface -{ - /** @var string[] */ - private array $tags; - - /** - * @param string[] $tags - */ - public function __construct(array $tags = []) - { - $this->setTags($tags); - } - - /** - * @param string[] $tags - * @return $this - */ - public function addTags(array $tags = []): self - { - $this->tags = array_merge($this->tags, $tags); - - return $this; - } - - /** - * @param string[] $tags - * @return $this - */ - public function setTags(array $tags = []): self - { - $this->tags = $tags; - - return $this; - } - - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - $record->extra['tags'] = $this->tags; - - return $record; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php deleted file mode 100644 index 261e653..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/UidProcessor.php +++ /dev/null @@ -1,67 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use Monolog\ResettableInterface; -use Monolog\LogRecord; - -/** - * Adds a unique identifier into records - * - * @author Simon Mönch - */ -class UidProcessor implements ProcessorInterface, ResettableInterface -{ - /** @var non-empty-string */ - private string $uid; - - /** - * @param int<1, 32> $length - */ - public function __construct(int $length = 7) - { - if ($length > 32 || $length < 1) { - throw new \InvalidArgumentException('The uid length must be an integer between 1 and 32'); - } - - $this->uid = $this->generateUid($length); - } - - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - $record->extra['uid'] = $this->uid; - - return $record; - } - - public function getUid(): string - { - return $this->uid; - } - - public function reset(): void - { - $this->uid = $this->generateUid(\strlen($this->uid)); - } - - /** - * @param positive-int $length - * @return non-empty-string - */ - private function generateUid(int $length): string - { - return substr(bin2hex(random_bytes((int) ceil($length / 2))), 0, $length); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php b/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php deleted file mode 100644 index b78385e..0000000 --- a/vendor/monolog/monolog/src/Monolog/Processor/WebProcessor.php +++ /dev/null @@ -1,115 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Processor; - -use ArrayAccess; -use Monolog\LogRecord; - -/** - * Injects url/method and remote IP of the current web request in all records - * - * @author Jordi Boggiano - */ -class WebProcessor implements ProcessorInterface -{ - /** - * @var array|ArrayAccess - */ - protected array|ArrayAccess $serverData; - - /** - * Default fields - * - * Array is structured as [key in record.extra => key in $serverData] - * - * @var array - */ - protected array $extraFields = [ - 'url' => 'REQUEST_URI', - 'ip' => 'REMOTE_ADDR', - 'http_method' => 'REQUEST_METHOD', - 'server' => 'SERVER_NAME', - 'referrer' => 'HTTP_REFERER', - 'user_agent' => 'HTTP_USER_AGENT', - ]; - - /** - * @param array|ArrayAccess|null $serverData Array or object w/ ArrayAccess that provides access to the $_SERVER data - * @param array|array|null $extraFields Field names and the related key inside $serverData to be added (or just a list of field names to use the default configured $serverData mapping). If not provided it defaults to: [url, ip, http_method, server, referrer] + unique_id if present in server data - */ - public function __construct(array|ArrayAccess|null $serverData = null, array|null $extraFields = null) - { - if (null === $serverData) { - $this->serverData = &$_SERVER; - } else { - $this->serverData = $serverData; - } - - $defaultEnabled = ['url', 'ip', 'http_method', 'server', 'referrer']; - if (isset($this->serverData['UNIQUE_ID'])) { - $this->extraFields['unique_id'] = 'UNIQUE_ID'; - $defaultEnabled[] = 'unique_id'; - } - - if (null === $extraFields) { - $extraFields = $defaultEnabled; - } - if (isset($extraFields[0])) { - foreach (array_keys($this->extraFields) as $fieldName) { - if (!\in_array($fieldName, $extraFields, true)) { - unset($this->extraFields[$fieldName]); - } - } - } else { - $this->extraFields = $extraFields; - } - } - - /** - * @inheritDoc - */ - public function __invoke(LogRecord $record): LogRecord - { - // skip processing if for some reason request data - // is not present (CLI or wonky SAPIs) - if (!isset($this->serverData['REQUEST_URI'])) { - return $record; - } - - $record->extra = $this->appendExtraFields($record->extra); - - return $record; - } - - /** - * @return $this - */ - public function addExtraField(string $extraName, string $serverName): self - { - $this->extraFields[$extraName] = $serverName; - - return $this; - } - - /** - * @param mixed[] $extra - * @return mixed[] - */ - private function appendExtraFields(array $extra): array - { - foreach ($this->extraFields as $extraName => $serverName) { - $extra[$extraName] = $this->serverData[$serverName] ?? null; - } - - return $extra; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Registry.php b/vendor/monolog/monolog/src/Monolog/Registry.php deleted file mode 100644 index 2ef2edc..0000000 --- a/vendor/monolog/monolog/src/Monolog/Registry.php +++ /dev/null @@ -1,133 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -use InvalidArgumentException; - -/** - * Monolog log registry - * - * Allows to get `Logger` instances in the global scope - * via static method calls on this class. - * - * - * $application = new Monolog\Logger('application'); - * $api = new Monolog\Logger('api'); - * - * Monolog\Registry::addLogger($application); - * Monolog\Registry::addLogger($api); - * - * function testLogger() - * { - * Monolog\Registry::api()->error('Sent to $api Logger instance'); - * Monolog\Registry::application()->error('Sent to $application Logger instance'); - * } - * - * - * @author Tomas Tatarko - */ -class Registry -{ - /** - * List of all loggers in the registry (by named indexes) - * - * @var Logger[] - */ - private static array $loggers = []; - - /** - * Adds new logging channel to the registry - * - * @param Logger $logger Instance of the logging channel - * @param string|null $name Name of the logging channel ($logger->getName() by default) - * @param bool $overwrite Overwrite instance in the registry if the given name already exists? - * @throws \InvalidArgumentException If $overwrite set to false and named Logger instance already exists - */ - public static function addLogger(Logger $logger, ?string $name = null, bool $overwrite = false): void - { - $name = $name ?? $logger->getName(); - - if (isset(self::$loggers[$name]) && !$overwrite) { - throw new InvalidArgumentException('Logger with the given name already exists'); - } - - self::$loggers[$name] = $logger; - } - - /** - * Checks if such logging channel exists by name or instance - * - * @param string|Logger $logger Name or logger instance - */ - public static function hasLogger($logger): bool - { - if ($logger instanceof Logger) { - $index = array_search($logger, self::$loggers, true); - - return false !== $index; - } - - return isset(self::$loggers[$logger]); - } - - /** - * Removes instance from registry by name or instance - * - * @param string|Logger $logger Name or logger instance - */ - public static function removeLogger($logger): void - { - if ($logger instanceof Logger) { - if (false !== ($idx = array_search($logger, self::$loggers, true))) { - unset(self::$loggers[$idx]); - } - } else { - unset(self::$loggers[$logger]); - } - } - - /** - * Clears the registry - */ - public static function clear(): void - { - self::$loggers = []; - } - - /** - * Gets Logger instance from the registry - * - * @param string $name Name of the requested Logger instance - * @throws \InvalidArgumentException If named Logger instance is not in the registry - */ - public static function getInstance(string $name): Logger - { - if (!isset(self::$loggers[$name])) { - throw new InvalidArgumentException(sprintf('Requested "%s" logger instance is not in the registry', $name)); - } - - return self::$loggers[$name]; - } - - /** - * Gets Logger instance from the registry via static method call - * - * @param string $name Name of the requested Logger instance - * @param mixed[] $arguments Arguments passed to static method call - * @throws \InvalidArgumentException If named Logger instance is not in the registry - * @return Logger Requested instance of Logger - */ - public static function __callStatic(string $name, array $arguments): Logger - { - return self::getInstance($name); - } -} diff --git a/vendor/monolog/monolog/src/Monolog/ResettableInterface.php b/vendor/monolog/monolog/src/Monolog/ResettableInterface.php deleted file mode 100644 index 4983a6b..0000000 --- a/vendor/monolog/monolog/src/Monolog/ResettableInterface.php +++ /dev/null @@ -1,31 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -/** - * Handler or Processor implementing this interface will be reset when Logger::reset() is called. - * - * Resetting ends a log cycle gets them back to their initial state. - * - * Resetting a Handler or a Processor means flushing/cleaning all buffers, resetting internal - * state, and getting it back to a state in which it can receive log records again. - * - * This is useful in case you want to avoid logs leaking between two requests or jobs when you - * have a long running process like a worker or an application server serving multiple requests - * in one process. - * - * @author Grégoire Pineau - */ -interface ResettableInterface -{ - public function reset(): void; -} diff --git a/vendor/monolog/monolog/src/Monolog/SignalHandler.php b/vendor/monolog/monolog/src/Monolog/SignalHandler.php deleted file mode 100644 index b6a69fc..0000000 --- a/vendor/monolog/monolog/src/Monolog/SignalHandler.php +++ /dev/null @@ -1,113 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -use Psr\Log\LoggerInterface; -use Psr\Log\LogLevel; -use ReflectionExtension; - -/** - * Monolog POSIX signal handler - * - * @author Robert Gust-Bardon - */ -class SignalHandler -{ - private LoggerInterface $logger; - - /** @var array SIG_DFL, SIG_IGN or previous callable */ - private array $previousSignalHandler = []; - /** @var array */ - private array $signalLevelMap = []; - /** @var array */ - private array $signalRestartSyscalls = []; - - public function __construct(LoggerInterface $logger) - { - $this->logger = $logger; - } - - /** - * @param int|string|Level $level Level or level name - * @return $this - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - public function registerSignalHandler(int $signo, int|string|Level $level = LogLevel::CRITICAL, bool $callPrevious = true, bool $restartSyscalls = true, ?bool $async = true): self - { - if (!\extension_loaded('pcntl') || !\function_exists('pcntl_signal')) { - return $this; - } - - $level = Logger::toMonologLevel($level)->toPsrLogLevel(); - - if ($callPrevious) { - $handler = pcntl_signal_get_handler($signo); - $this->previousSignalHandler[$signo] = $handler; - } else { - unset($this->previousSignalHandler[$signo]); - } - $this->signalLevelMap[$signo] = $level; - $this->signalRestartSyscalls[$signo] = $restartSyscalls; - - if ($async !== null) { - pcntl_async_signals($async); - } - - pcntl_signal($signo, [$this, 'handleSignal'], $restartSyscalls); - - return $this; - } - - /** - * @param mixed $siginfo - */ - public function handleSignal(int $signo, $siginfo = null): void - { - /** @var array $signals */ - static $signals = []; - - if (\count($signals) === 0 && \extension_loaded('pcntl')) { - $pcntl = new ReflectionExtension('pcntl'); - foreach ($pcntl->getConstants() as $name => $value) { - if (substr($name, 0, 3) === 'SIG' && $name[3] !== '_' && \is_int($value)) { - $signals[$value] = $name; - } - } - } - - $level = $this->signalLevelMap[$signo] ?? LogLevel::CRITICAL; - $signal = $signals[$signo] ?? $signo; - $context = $siginfo ?? []; - $this->logger->log($level, sprintf('Program received signal %s', $signal), $context); - - if (!isset($this->previousSignalHandler[$signo])) { - return; - } - - if ($this->previousSignalHandler[$signo] === SIG_DFL) { - if (\extension_loaded('pcntl') && \function_exists('pcntl_signal') && \function_exists('pcntl_sigprocmask') && \function_exists('pcntl_signal_dispatch') - && \extension_loaded('posix') && \function_exists('posix_getpid') && \function_exists('posix_kill') - ) { - $restartSyscalls = $this->signalRestartSyscalls[$signo] ?? true; - pcntl_signal($signo, SIG_DFL, $restartSyscalls); - pcntl_sigprocmask(SIG_UNBLOCK, [$signo], $oldset); - posix_kill(posix_getpid(), $signo); - pcntl_signal_dispatch(); - pcntl_sigprocmask(SIG_SETMASK, $oldset); - pcntl_signal($signo, [$this, 'handleSignal'], $restartSyscalls); - } - } elseif (\is_callable($this->previousSignalHandler[$signo])) { - $this->previousSignalHandler[$signo]($signo, $siginfo); - } - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Test/TestCase.php b/vendor/monolog/monolog/src/Monolog/Test/TestCase.php deleted file mode 100644 index 29ec7c9..0000000 --- a/vendor/monolog/monolog/src/Monolog/Test/TestCase.php +++ /dev/null @@ -1,82 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog\Test; - -use Monolog\Level; -use Monolog\Logger; -use Monolog\LogRecord; -use Monolog\DateTimeImmutable; -use Monolog\Formatter\FormatterInterface; -use Psr\Log\LogLevel; - -/** - * Lets you easily generate log records and a dummy formatter for testing purposes - * - * @author Jordi Boggiano - * - * @internal feel free to reuse this to test your own handlers, this is marked internal to avoid issues with PHPStorm https://github.com/Seldaek/monolog/issues/1677 - */ -class TestCase extends \PHPUnit\Framework\TestCase -{ - public function tearDown(): void - { - parent::tearDown(); - - if (isset($this->handler)) { - unset($this->handler); - } - } - - /** - * @param array $context - * @param array $extra - * - * @phpstan-param value-of|value-of|Level|LogLevel::* $level - */ - protected function getRecord(int|string|Level $level = Level::Warning, string|\Stringable $message = 'test', array $context = [], string $channel = 'test', \DateTimeImmutable $datetime = new DateTimeImmutable(true), array $extra = []): LogRecord - { - return new LogRecord( - message: (string) $message, - context: $context, - level: Logger::toMonologLevel($level), - channel: $channel, - datetime: $datetime, - extra: $extra, - ); - } - - /** - * @phpstan-return list - */ - protected function getMultipleRecords(): array - { - return [ - $this->getRecord(Level::Debug, 'debug message 1'), - $this->getRecord(Level::Debug, 'debug message 2'), - $this->getRecord(Level::Info, 'information'), - $this->getRecord(Level::Warning, 'warning'), - $this->getRecord(Level::Error, 'error'), - ]; - } - - protected function getIdentityFormatter(): FormatterInterface - { - $formatter = $this->createMock(FormatterInterface::class); - $formatter->expects(self::any()) - ->method('format') - ->willReturnCallback(function ($record) { - return $record->message; - }); - - return $formatter; - } -} diff --git a/vendor/monolog/monolog/src/Monolog/Utils.php b/vendor/monolog/monolog/src/Monolog/Utils.php deleted file mode 100644 index 79ea96c..0000000 --- a/vendor/monolog/monolog/src/Monolog/Utils.php +++ /dev/null @@ -1,274 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -namespace Monolog; - -final class Utils -{ - const DEFAULT_JSON_FLAGS = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_INVALID_UTF8_SUBSTITUTE | JSON_PARTIAL_OUTPUT_ON_ERROR; - - public static function getClass(object $object): string - { - $class = \get_class($object); - - if (false === ($pos = strpos($class, "@anonymous\0"))) { - return $class; - } - - if (false === ($parent = get_parent_class($class))) { - return substr($class, 0, $pos + 10); - } - - return $parent . '@anonymous'; - } - - public static function substr(string $string, int $start, ?int $length = null): string - { - if (\extension_loaded('mbstring')) { - return mb_strcut($string, $start, $length); - } - - return substr($string, $start, (null === $length) ? \strlen($string) : $length); - } - - /** - * Makes sure if a relative path is passed in it is turned into an absolute path - * - * @param string $streamUrl stream URL or path without protocol - */ - public static function canonicalizePath(string $streamUrl): string - { - $prefix = ''; - if ('file://' === substr($streamUrl, 0, 7)) { - $streamUrl = substr($streamUrl, 7); - $prefix = 'file://'; - } - - // other type of stream, not supported - if (false !== strpos($streamUrl, '://')) { - return $streamUrl; - } - - // already absolute - if (substr($streamUrl, 0, 1) === '/' || substr($streamUrl, 1, 1) === ':' || substr($streamUrl, 0, 2) === '\\\\') { - return $prefix.$streamUrl; - } - - $streamUrl = getcwd() . '/' . $streamUrl; - - return $prefix.$streamUrl; - } - - /** - * Return the JSON representation of a value - * - * @param mixed $data - * @param int $encodeFlags flags to pass to json encode, defaults to DEFAULT_JSON_FLAGS - * @param bool $ignoreErrors whether to ignore encoding errors or to throw on error, when ignored and the encoding fails, "null" is returned which is valid json for null - * @throws \RuntimeException if encoding fails and errors are not ignored - * @return string when errors are ignored and the encoding fails, "null" is returned which is valid json for null - */ - public static function jsonEncode($data, ?int $encodeFlags = null, bool $ignoreErrors = false): string - { - if (null === $encodeFlags) { - $encodeFlags = self::DEFAULT_JSON_FLAGS; - } - - if ($ignoreErrors) { - $json = @json_encode($data, $encodeFlags); - if (false === $json) { - return 'null'; - } - - return $json; - } - - $json = json_encode($data, $encodeFlags); - if (false === $json) { - $json = self::handleJsonError(json_last_error(), $data); - } - - return $json; - } - - /** - * Handle a json_encode failure. - * - * If the failure is due to invalid string encoding, try to clean the - * input and encode again. If the second encoding attempt fails, the - * initial error is not encoding related or the input can't be cleaned then - * raise a descriptive exception. - * - * @param int $code return code of json_last_error function - * @param mixed $data data that was meant to be encoded - * @param int $encodeFlags flags to pass to json encode, defaults to JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION - * @throws \RuntimeException if failure can't be corrected - * @return string JSON encoded data after error correction - */ - public static function handleJsonError(int $code, $data, ?int $encodeFlags = null): string - { - if ($code !== JSON_ERROR_UTF8) { - self::throwEncodeError($code, $data); - } - - if (\is_string($data)) { - self::detectAndCleanUtf8($data); - } elseif (\is_array($data)) { - array_walk_recursive($data, ['Monolog\Utils', 'detectAndCleanUtf8']); - } else { - self::throwEncodeError($code, $data); - } - - if (null === $encodeFlags) { - $encodeFlags = self::DEFAULT_JSON_FLAGS; - } - - $json = json_encode($data, $encodeFlags); - - if ($json === false) { - self::throwEncodeError(json_last_error(), $data); - } - - return $json; - } - - /** - * @internal - */ - public static function pcreLastErrorMessage(int $code): string - { - if (PHP_VERSION_ID >= 80000) { - return preg_last_error_msg(); - } - - $constants = (get_defined_constants(true))['pcre']; - $constants = array_filter($constants, function ($key) { - return substr($key, -6) == '_ERROR'; - }, ARRAY_FILTER_USE_KEY); - - $constants = array_flip($constants); - - return $constants[$code] ?? 'UNDEFINED_ERROR'; - } - - /** - * Throws an exception according to a given code with a customized message - * - * @param int $code return code of json_last_error function - * @param mixed $data data that was meant to be encoded - * @throws \RuntimeException - */ - private static function throwEncodeError(int $code, $data): never - { - $msg = match ($code) { - JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', - JSON_ERROR_STATE_MISMATCH => 'Underflow or the modes mismatch', - JSON_ERROR_CTRL_CHAR => 'Unexpected control character found', - JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded', - default => 'Unknown error', - }; - - throw new \RuntimeException('JSON encoding failed: '.$msg.'. Encoding: '.var_export($data, true)); - } - - /** - * Detect invalid UTF-8 string characters and convert to valid UTF-8. - * - * Valid UTF-8 input will be left unmodified, but strings containing - * invalid UTF-8 codepoints will be reencoded as UTF-8 with an assumed - * original encoding of ISO-8859-15. This conversion may result in - * incorrect output if the actual encoding was not ISO-8859-15, but it - * will be clean UTF-8 output and will not rely on expensive and fragile - * detection algorithms. - * - * Function converts the input in place in the passed variable so that it - * can be used as a callback for array_walk_recursive. - * - * @param mixed $data Input to check and convert if needed, passed by ref - */ - private static function detectAndCleanUtf8(&$data): void - { - if (\is_string($data) && preg_match('//u', $data) !== 1) { - $data = preg_replace_callback( - '/[\x80-\xFF]+/', - function (array $m): string { - return \function_exists('mb_convert_encoding') ? mb_convert_encoding($m[0], 'UTF-8', 'ISO-8859-1') : utf8_encode($m[0]); - }, - $data - ); - if (!\is_string($data)) { - $pcreErrorCode = preg_last_error(); - - throw new \RuntimeException('Failed to preg_replace_callback: ' . $pcreErrorCode . ' / ' . self::pcreLastErrorMessage($pcreErrorCode)); - } - $data = str_replace( - ['¤', '¦', '¨', '´', '¸', '¼', '½', '¾'], - ['€', 'Š', 'š', 'Ž', 'ž', 'Œ', 'œ', 'Ÿ'], - $data - ); - } - } - - /** - * Converts a string with a valid 'memory_limit' format, to bytes. - * - * @param string|false $val - * @return int|false Returns an integer representing bytes. Returns FALSE in case of error. - */ - public static function expandIniShorthandBytes($val) - { - if (!\is_string($val)) { - return false; - } - - // support -1 - if ((int) $val < 0) { - return (int) $val; - } - - if (preg_match('/^\s*(?\d+)(?:\.\d+)?\s*(?[gmk]?)\s*$/i', $val, $match) !== 1) { - return false; - } - - $val = (int) $match['val']; - switch (strtolower($match['unit'] ?? '')) { - case 'g': - $val *= 1024; - // no break - case 'm': - $val *= 1024; - // no break - case 'k': - $val *= 1024; - } - - return $val; - } - - public static function getRecordMessageForException(LogRecord $record): string - { - $context = ''; - $extra = ''; - - try { - if (\count($record->context) > 0) { - $context = "\nContext: " . json_encode($record->context, JSON_THROW_ON_ERROR); - } - if (\count($record->extra) > 0) { - $extra = "\nExtra: " . json_encode($record->extra, JSON_THROW_ON_ERROR); - } - } catch (\Throwable $e) { - // noop - } - - return "\nThe exception occurred while attempting to log: " . $record->message . $context . $extra; - } -} diff --git a/vendor/myclabs/deep-copy/README.md b/vendor/myclabs/deep-copy/README.md deleted file mode 100644 index 88ae14c..0000000 --- a/vendor/myclabs/deep-copy/README.md +++ /dev/null @@ -1,406 +0,0 @@ -# DeepCopy - -DeepCopy helps you create deep copies (clones) of your objects. It is designed to handle cycles in the association graph. - -[![Total Downloads](https://poser.pugx.org/myclabs/deep-copy/downloads.svg)](https://packagist.org/packages/myclabs/deep-copy) -[![Integrate](https://github.com/myclabs/DeepCopy/actions/workflows/ci.yaml/badge.svg?branch=1.x)](https://github.com/myclabs/DeepCopy/actions/workflows/ci.yaml) - -## Table of Contents - -1. [How](#how) -1. [Why](#why) - 1. [Using simply `clone`](#using-simply-clone) - 1. [Overriding `__clone()`](#overriding-__clone) - 1. [With `DeepCopy`](#with-deepcopy) -1. [How it works](#how-it-works) -1. [Going further](#going-further) - 1. [Matchers](#matchers) - 1. [Property name](#property-name) - 1. [Specific property](#specific-property) - 1. [Type](#type) - 1. [Filters](#filters) - 1. [`SetNullFilter`](#setnullfilter-filter) - 1. [`KeepFilter`](#keepfilter-filter) - 1. [`DoctrineCollectionFilter`](#doctrinecollectionfilter-filter) - 1. [`DoctrineEmptyCollectionFilter`](#doctrineemptycollectionfilter-filter) - 1. [`DoctrineProxyFilter`](#doctrineproxyfilter-filter) - 1. [`ReplaceFilter`](#replacefilter-type-filter) - 1. [`ShallowCopyFilter`](#shallowcopyfilter-type-filter) -1. [Edge cases](#edge-cases) -1. [Contributing](#contributing) - 1. [Tests](#tests) - - -## How? - -Install with Composer: - -``` -composer require myclabs/deep-copy -``` - -Use it: - -```php -use DeepCopy\DeepCopy; - -$copier = new DeepCopy(); -$myCopy = $copier->copy($myObject); -``` - - -## Why? - -- How do you create copies of your objects? - -```php -$myCopy = clone $myObject; -``` - -- How do you create **deep** copies of your objects (i.e. copying also all the objects referenced in the properties)? - -You use [`__clone()`](http://www.php.net/manual/en/language.oop5.cloning.php#object.clone) and implement the behavior -yourself. - -- But how do you handle **cycles** in the association graph? - -Now you're in for a big mess :( - -![association graph](doc/graph.png) - - -### Using simply `clone` - -![Using clone](doc/clone.png) - - -### Overriding `__clone()` - -![Overriding __clone](doc/deep-clone.png) - - -### With `DeepCopy` - -![With DeepCopy](doc/deep-copy.png) - - -## How it works - -DeepCopy recursively traverses all the object's properties and clones them. To avoid cloning the same object twice it -keeps a hash map of all instances and thus preserves the object graph. - -To use it: - -```php -use function DeepCopy\deep_copy; - -$copy = deep_copy($var); -``` - -Alternatively, you can create your own `DeepCopy` instance to configure it differently for example: - -```php -use DeepCopy\DeepCopy; - -$copier = new DeepCopy(true); - -$copy = $copier->copy($var); -``` - -You may want to roll your own deep copy function: - -```php -namespace Acme; - -use DeepCopy\DeepCopy; - -function deep_copy($var) -{ - static $copier = null; - - if (null === $copier) { - $copier = new DeepCopy(true); - } - - return $copier->copy($var); -} -``` - - -## Going further - -You can add filters to customize the copy process. - -The method to add a filter is `DeepCopy\DeepCopy::addFilter($filter, $matcher)`, -with `$filter` implementing `DeepCopy\Filter\Filter` -and `$matcher` implementing `DeepCopy\Matcher\Matcher`. - -We provide some generic filters and matchers. - - -### Matchers - - - `DeepCopy\Matcher` applies on a object attribute. - - `DeepCopy\TypeMatcher` applies on any element found in graph, including array elements. - - -#### Property name - -The `PropertyNameMatcher` will match a property by its name: - -```php -use DeepCopy\Matcher\PropertyNameMatcher; - -// Will apply a filter to any property of any objects named "id" -$matcher = new PropertyNameMatcher('id'); -``` - - -#### Specific property - -The `PropertyMatcher` will match a specific property of a specific class: - -```php -use DeepCopy\Matcher\PropertyMatcher; - -// Will apply a filter to the property "id" of any objects of the class "MyClass" -$matcher = new PropertyMatcher('MyClass', 'id'); -``` - - -#### Type - -The `TypeMatcher` will match any element by its type (instance of a class or any value that could be parameter of -[gettype()](http://php.net/manual/en/function.gettype.php) function): - -```php -use DeepCopy\TypeMatcher\TypeMatcher; - -// Will apply a filter to any object that is an instance of Doctrine\Common\Collections\Collection -$matcher = new TypeMatcher('Doctrine\Common\Collections\Collection'); -``` - - -### Filters - -- `DeepCopy\Filter` applies a transformation to the object attribute matched by `DeepCopy\Matcher` -- `DeepCopy\TypeFilter` applies a transformation to any element matched by `DeepCopy\TypeMatcher` - -By design, matching a filter will stop the chain of filters (i.e. the next ones will not be applied). -Using the ([`ChainableFilter`](#chainablefilter-filter)) won't stop the chain of filters. - - -#### `SetNullFilter` (filter) - -Let's say for example that you are copying a database record (or a Doctrine entity), so you want the copy not to have -any ID: - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\SetNullFilter; -use DeepCopy\Matcher\PropertyNameMatcher; - -$object = MyClass::load(123); -echo $object->id; // 123 - -$copier = new DeepCopy(); -$copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); - -$copy = $copier->copy($object); - -echo $copy->id; // null -``` - - -#### `KeepFilter` (filter) - -If you want a property to remain untouched (for example, an association to an object): - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\KeepFilter; -use DeepCopy\Matcher\PropertyMatcher; - -$copier = new DeepCopy(); -$copier->addFilter(new KeepFilter(), new PropertyMatcher('MyClass', 'category')); - -$copy = $copier->copy($object); -// $copy->category has not been touched -``` - - -#### `ChainableFilter` (filter) - -If you use cloning on proxy classes, you might want to apply two filters for: -1. loading the data -2. applying a transformation - -You can use the `ChainableFilter` as a decorator of the proxy loader filter, which won't stop the chain of filters (i.e. -the next ones may be applied). - - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\ChainableFilter; -use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; -use DeepCopy\Filter\SetNullFilter; -use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; -use DeepCopy\Matcher\PropertyNameMatcher; - -$copier = new DeepCopy(); -$copier->addFilter(new ChainableFilter(new DoctrineProxyFilter()), new DoctrineProxyMatcher()); -$copier->addFilter(new SetNullFilter(), new PropertyNameMatcher('id')); - -$copy = $copier->copy($object); - -echo $copy->id; // null -``` - - -#### `DoctrineCollectionFilter` (filter) - -If you use Doctrine and want to copy an entity, you will need to use the `DoctrineCollectionFilter`: - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\Doctrine\DoctrineCollectionFilter; -use DeepCopy\Matcher\PropertyTypeMatcher; - -$copier = new DeepCopy(); -$copier->addFilter(new DoctrineCollectionFilter(), new PropertyTypeMatcher('Doctrine\Common\Collections\Collection')); - -$copy = $copier->copy($object); -``` - - -#### `DoctrineEmptyCollectionFilter` (filter) - -If you use Doctrine and want to copy an entity who contains a `Collection` that you want to be reset, you can use the -`DoctrineEmptyCollectionFilter` - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\Doctrine\DoctrineEmptyCollectionFilter; -use DeepCopy\Matcher\PropertyMatcher; - -$copier = new DeepCopy(); -$copier->addFilter(new DoctrineEmptyCollectionFilter(), new PropertyMatcher('MyClass', 'myProperty')); - -$copy = $copier->copy($object); - -// $copy->myProperty will return an empty collection -``` - - -#### `DoctrineProxyFilter` (filter) - -If you use Doctrine and use cloning on lazy loaded entities, you might encounter errors mentioning missing fields on a -Doctrine proxy class (...\\\_\_CG\_\_\Proxy). -You can use the `DoctrineProxyFilter` to load the actual entity behind the Doctrine proxy class. -**Make sure, though, to put this as one of your very first filters in the filter chain so that the entity is loaded -before other filters are applied!** -We recommend to decorate the `DoctrineProxyFilter` with the `ChainableFilter` to allow applying other filters to the -cloned lazy loaded entities. - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\Doctrine\DoctrineProxyFilter; -use DeepCopy\Matcher\Doctrine\DoctrineProxyMatcher; - -$copier = new DeepCopy(); -$copier->addFilter(new ChainableFilter(new DoctrineProxyFilter()), new DoctrineProxyMatcher()); - -$copy = $copier->copy($object); - -// $copy should now contain a clone of all entities, including those that were not yet fully loaded. -``` - - -#### `ReplaceFilter` (type filter) - -1. If you want to replace the value of a property: - -```php -use DeepCopy\DeepCopy; -use DeepCopy\Filter\ReplaceFilter; -use DeepCopy\Matcher\PropertyMatcher; - -$copier = new DeepCopy(); -$callback = function ($currentValue) { - return $currentValue . ' (copy)' -}; -$copier->addFilter(new ReplaceFilter($callback), new PropertyMatcher('MyClass', 'title')); - -$copy = $copier->copy($object); - -// $copy->title will contain the data returned by the callback, e.g. 'The title (copy)' -``` - -2. If you want to replace whole element: - -```php -use DeepCopy\DeepCopy; -use DeepCopy\TypeFilter\ReplaceFilter; -use DeepCopy\TypeMatcher\TypeMatcher; - -$copier = new DeepCopy(); -$callback = function (MyClass $myClass) { - return get_class($myClass); -}; -$copier->addTypeFilter(new ReplaceFilter($callback), new TypeMatcher('MyClass')); - -$copy = $copier->copy([new MyClass, 'some string', new MyClass]); - -// $copy will contain ['MyClass', 'some string', 'MyClass'] -``` - - -The `$callback` parameter of the `ReplaceFilter` constructor accepts any PHP callable. - - -#### `ShallowCopyFilter` (type filter) - -Stop *DeepCopy* from recursively copying element, using standard `clone` instead: - -```php -use DeepCopy\DeepCopy; -use DeepCopy\TypeFilter\ShallowCopyFilter; -use DeepCopy\TypeMatcher\TypeMatcher; -use Mockery as m; - -$this->deepCopy = new DeepCopy(); -$this->deepCopy->addTypeFilter( - new ShallowCopyFilter, - new TypeMatcher(m\MockInterface::class) -); - -$myServiceWithMocks = new MyService(m::mock(MyDependency1::class), m::mock(MyDependency2::class)); -// All mocks will be just cloned, not deep copied -``` - - -## Edge cases - -The following structures cannot be deep-copied with PHP Reflection. As a result they are shallow cloned and filters are -not applied. There is two ways for you to handle them: - -- Implement your own `__clone()` method -- Use a filter with a type matcher - - -## Contributing - -DeepCopy is distributed under the MIT license. - - -### Tests - -Running the tests is simple: - -```php -vendor/bin/phpunit -``` - -### Support - -Get professional support via [the Tidelift Subscription](https://tidelift.com/subscription/pkg/packagist-myclabs-deep-copy?utm_source=packagist-myclabs-deep-copy&utm_medium=referral&utm_campaign=readme). diff --git a/vendor/myclabs/deep-copy/composer.json b/vendor/myclabs/deep-copy/composer.json deleted file mode 100644 index f115fff..0000000 --- a/vendor/myclabs/deep-copy/composer.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "myclabs/deep-copy", - "description": "Create deep copies (clones) of your objects", - "license": "MIT", - "type": "library", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpspec/prophecy": "^1.10", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3 <3.2.2" - }, - "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, - "files": [ - "src/DeepCopy/deep_copy.php" - ] - }, - "autoload-dev": { - "psr-4": { - "DeepCopyTest\\": "tests/DeepCopyTest/", - "DeepCopy\\": "fixtures/" - } - }, - "config": { - "sort-packages": true - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php b/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php deleted file mode 100644 index 084858e..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/DeepCopy.php +++ /dev/null @@ -1,313 +0,0 @@ - Filter, 'matcher' => Matcher] pairs. - */ - private $filters = []; - - /** - * Type Filters to apply. - * - * @var array Array of ['filter' => Filter, 'matcher' => Matcher] pairs. - */ - private $typeFilters = []; - - /** - * @var bool - */ - private $skipUncloneable = false; - - /** - * @var bool - */ - private $useCloneMethod; - - /** - * @param bool $useCloneMethod If set to true, when an object implements the __clone() function, it will be used - * instead of the regular deep cloning. - */ - public function __construct($useCloneMethod = false) - { - $this->useCloneMethod = $useCloneMethod; - - $this->addTypeFilter(new ArrayObjectFilter($this), new TypeMatcher(ArrayObject::class)); - $this->addTypeFilter(new DateIntervalFilter(), new TypeMatcher(DateInterval::class)); - $this->addTypeFilter(new SplDoublyLinkedListFilter($this), new TypeMatcher(SplDoublyLinkedList::class)); - } - - /** - * If enabled, will not throw an exception when coming across an uncloneable property. - * - * @param $skipUncloneable - * - * @return $this - */ - public function skipUncloneable($skipUncloneable = true) - { - $this->skipUncloneable = $skipUncloneable; - - return $this; - } - - /** - * Deep copies the given object. - * - * @param mixed $object - * - * @return mixed - */ - public function copy($object) - { - $this->hashMap = []; - - return $this->recursiveCopy($object); - } - - public function addFilter(Filter $filter, Matcher $matcher) - { - $this->filters[] = [ - 'matcher' => $matcher, - 'filter' => $filter, - ]; - } - - public function prependFilter(Filter $filter, Matcher $matcher) - { - array_unshift($this->filters, [ - 'matcher' => $matcher, - 'filter' => $filter, - ]); - } - - public function addTypeFilter(TypeFilter $filter, TypeMatcher $matcher) - { - $this->typeFilters[] = [ - 'matcher' => $matcher, - 'filter' => $filter, - ]; - } - - private function recursiveCopy($var) - { - // Matches Type Filter - if ($filter = $this->getFirstMatchedTypeFilter($this->typeFilters, $var)) { - return $filter->apply($var); - } - - // Resource - if (is_resource($var)) { - return $var; - } - - // Array - if (is_array($var)) { - return $this->copyArray($var); - } - - // Scalar - if (! is_object($var)) { - return $var; - } - - // Enum - if (PHP_VERSION_ID >= 80100 && enum_exists(get_class($var))) { - return $var; - } - - // Object - return $this->copyObject($var); - } - - /** - * Copy an array - * @param array $array - * @return array - */ - private function copyArray(array $array) - { - foreach ($array as $key => $value) { - $array[$key] = $this->recursiveCopy($value); - } - - return $array; - } - - /** - * Copies an object. - * - * @param object $object - * - * @throws CloneException - * - * @return object - */ - private function copyObject($object) - { - $objectHash = spl_object_hash($object); - - if (isset($this->hashMap[$objectHash])) { - return $this->hashMap[$objectHash]; - } - - $reflectedObject = new ReflectionObject($object); - $isCloneable = $reflectedObject->isCloneable(); - - if (false === $isCloneable) { - if ($this->skipUncloneable) { - $this->hashMap[$objectHash] = $object; - - return $object; - } - - throw new CloneException( - sprintf( - 'The class "%s" is not cloneable.', - $reflectedObject->getName() - ) - ); - } - - $newObject = clone $object; - $this->hashMap[$objectHash] = $newObject; - - if ($this->useCloneMethod && $reflectedObject->hasMethod('__clone')) { - return $newObject; - } - - if ($newObject instanceof DateTimeInterface || $newObject instanceof DateTimeZone) { - return $newObject; - } - - foreach (ReflectionHelper::getProperties($reflectedObject) as $property) { - $this->copyObjectProperty($newObject, $property); - } - - return $newObject; - } - - private function copyObjectProperty($object, ReflectionProperty $property) - { - // Ignore static properties - if ($property->isStatic()) { - return; - } - - // Ignore readonly properties - if (method_exists($property, 'isReadOnly') && $property->isReadOnly()) { - return; - } - - // Apply the filters - foreach ($this->filters as $item) { - /** @var Matcher $matcher */ - $matcher = $item['matcher']; - /** @var Filter $filter */ - $filter = $item['filter']; - - if ($matcher->matches($object, $property->getName())) { - $filter->apply( - $object, - $property->getName(), - function ($object) { - return $this->recursiveCopy($object); - } - ); - - if ($filter instanceof ChainableFilter) { - continue; - } - - // If a filter matches, we stop processing this property - return; - } - } - - $property->setAccessible(true); - - // Ignore uninitialized properties (for PHP >7.4) - if (method_exists($property, 'isInitialized') && !$property->isInitialized($object)) { - return; - } - - $propertyValue = $property->getValue($object); - - // Copy the property - $property->setValue($object, $this->recursiveCopy($propertyValue)); - } - - /** - * Returns first filter that matches variable, `null` if no such filter found. - * - * @param array $filterRecords Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and - * 'matcher' with value of type {@see TypeMatcher} - * @param mixed $var - * - * @return TypeFilter|null - */ - private function getFirstMatchedTypeFilter(array $filterRecords, $var) - { - $matched = $this->first( - $filterRecords, - function (array $record) use ($var) { - /* @var TypeMatcher $matcher */ - $matcher = $record['matcher']; - - return $matcher->matches($var); - } - ); - - return isset($matched) ? $matched['filter'] : null; - } - - /** - * Returns first element that matches predicate, `null` if no such element found. - * - * @param array $elements Array of ['filter' => Filter, 'matcher' => Matcher] pairs. - * @param callable $predicate Predicate arguments are: element. - * - * @return array|null Associative array with 2 members: 'filter' with value of type {@see TypeFilter} and 'matcher' - * with value of type {@see TypeMatcher} or `null`. - */ - private function first(array $elements, callable $predicate) - { - foreach ($elements as $element) { - if (call_user_func($predicate, $element)) { - return $element; - } - } - - return null; - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php b/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php deleted file mode 100644 index c046706..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Exception/CloneException.php +++ /dev/null @@ -1,9 +0,0 @@ -filter = $filter; - } - - public function apply($object, $property, $objectCopier) - { - $this->filter->apply($object, $property, $objectCopier); - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php deleted file mode 100644 index e6d9377..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineCollectionFilter.php +++ /dev/null @@ -1,33 +0,0 @@ -setAccessible(true); - $oldCollection = $reflectionProperty->getValue($object); - - $newCollection = $oldCollection->map( - function ($item) use ($objectCopier) { - return $objectCopier($item); - } - ); - - $reflectionProperty->setValue($object, $newCollection); - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php deleted file mode 100644 index 7b33fd5..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineEmptyCollectionFilter.php +++ /dev/null @@ -1,28 +0,0 @@ -setAccessible(true); - - $reflectionProperty->setValue($object, new ArrayCollection()); - } -} \ No newline at end of file diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php deleted file mode 100644 index 8bee8f7..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Doctrine/DoctrineProxyFilter.php +++ /dev/null @@ -1,22 +0,0 @@ -__load(); - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php deleted file mode 100644 index 85ba18c..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/Filter.php +++ /dev/null @@ -1,18 +0,0 @@ -callback = $callable; - } - - /** - * Replaces the object property by the result of the callback called with the object property. - * - * {@inheritdoc} - */ - public function apply($object, $property, $objectCopier) - { - $reflectionProperty = ReflectionHelper::getProperty($object, $property); - $reflectionProperty->setAccessible(true); - - $value = call_user_func($this->callback, $reflectionProperty->getValue($object)); - - $reflectionProperty->setValue($object, $value); - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php deleted file mode 100644 index bea86b8..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Filter/SetNullFilter.php +++ /dev/null @@ -1,24 +0,0 @@ -setAccessible(true); - $reflectionProperty->setValue($object, null); - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php deleted file mode 100644 index c5887b1..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/Doctrine/DoctrineProxyMatcher.php +++ /dev/null @@ -1,22 +0,0 @@ -class = $class; - $this->property = $property; - } - - /** - * Matches a specific property of a specific class. - * - * {@inheritdoc} - */ - public function matches($object, $property) - { - return ($object instanceof $this->class) && $property == $this->property; - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php deleted file mode 100644 index c8ec0d2..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyNameMatcher.php +++ /dev/null @@ -1,32 +0,0 @@ -property = $property; - } - - /** - * Matches a property by its name. - * - * {@inheritdoc} - */ - public function matches($object, $property) - { - return $property == $this->property; - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php b/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php deleted file mode 100644 index c7f4690..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Matcher/PropertyTypeMatcher.php +++ /dev/null @@ -1,52 +0,0 @@ -propertyType = $propertyType; - } - - /** - * {@inheritdoc} - */ - public function matches($object, $property) - { - try { - $reflectionProperty = ReflectionHelper::getProperty($object, $property); - } catch (ReflectionException $exception) { - return false; - } - - $reflectionProperty->setAccessible(true); - - // Uninitialized properties (for PHP >7.4) - if (method_exists($reflectionProperty, 'isInitialized') && !$reflectionProperty->isInitialized($object)) { - // null instanceof $this->propertyType - return false; - } - - return $reflectionProperty->getValue($object) instanceof $this->propertyType; - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php b/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php deleted file mode 100644 index 742410c..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/Reflection/ReflectionHelper.php +++ /dev/null @@ -1,78 +0,0 @@ -getProperties() does not return private properties from ancestor classes. - * - * @author muratyaman@gmail.com - * @see http://php.net/manual/en/reflectionclass.getproperties.php - * - * @param ReflectionClass $ref - * - * @return ReflectionProperty[] - */ - public static function getProperties(ReflectionClass $ref) - { - $props = $ref->getProperties(); - $propsArr = array(); - - foreach ($props as $prop) { - $propertyName = $prop->getName(); - $propsArr[$propertyName] = $prop; - } - - if ($parentClass = $ref->getParentClass()) { - $parentPropsArr = self::getProperties($parentClass); - foreach ($propsArr as $key => $property) { - $parentPropsArr[$key] = $property; - } - - return $parentPropsArr; - } - - return $propsArr; - } - - /** - * Retrieves property by name from object and all its ancestors. - * - * @param object|string $object - * @param string $name - * - * @throws PropertyException - * @throws ReflectionException - * - * @return ReflectionProperty - */ - public static function getProperty($object, $name) - { - $reflection = is_object($object) ? new ReflectionObject($object) : new ReflectionClass($object); - - if ($reflection->hasProperty($name)) { - return $reflection->getProperty($name); - } - - if ($parentClass = $reflection->getParentClass()) { - return self::getProperty($parentClass->getName(), $name); - } - - throw new PropertyException( - sprintf( - 'The class "%s" doesn\'t have a property with the given name: "%s".', - is_object($object) ? get_class($object) : $object, - $name - ) - ); - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php deleted file mode 100644 index becd1cf..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Date/DateIntervalFilter.php +++ /dev/null @@ -1,33 +0,0 @@ - $propertyValue) { - $copy->{$propertyName} = $propertyValue; - } - - return $copy; - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php deleted file mode 100644 index 164f8b8..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ReplaceFilter.php +++ /dev/null @@ -1,30 +0,0 @@ -callback = $callable; - } - - /** - * {@inheritdoc} - */ - public function apply($element) - { - return call_user_func($this->callback, $element); - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php deleted file mode 100644 index a5fbd7a..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/ShallowCopyFilter.php +++ /dev/null @@ -1,17 +0,0 @@ -copier = $copier; - } - - /** - * {@inheritdoc} - */ - public function apply($arrayObject) - { - $clone = clone $arrayObject; - foreach ($arrayObject->getArrayCopy() as $k => $v) { - $clone->offsetSet($k, $this->copier->copy($v)); - } - - return $clone; - } -} - diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php deleted file mode 100644 index c5644cf..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/Spl/SplDoublyLinkedList.php +++ /dev/null @@ -1,10 +0,0 @@ -copier = $copier; - } - - /** - * {@inheritdoc} - */ - public function apply($element) - { - $newElement = clone $element; - - $copy = $this->createCopyClosure(); - - return $copy($newElement); - } - - private function createCopyClosure() - { - $copier = $this->copier; - - $copy = function (SplDoublyLinkedList $list) use ($copier) { - // Replace each element in the list with a deep copy of itself - for ($i = 1; $i <= $list->count(); $i++) { - $copy = $copier->recursiveCopy($list->shift()); - - $list->push($copy); - } - - return $list; - }; - - return Closure::bind($copy, null, DeepCopy::class); - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php b/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php deleted file mode 100644 index 5785a7d..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/TypeFilter/TypeFilter.php +++ /dev/null @@ -1,13 +0,0 @@ -type = $type; - } - - /** - * @param mixed $element - * - * @return boolean - */ - public function matches($element) - { - return is_object($element) ? is_a($element, $this->type) : gettype($element) === $this->type; - } -} diff --git a/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php b/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php deleted file mode 100644 index 55dcc92..0000000 --- a/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php +++ /dev/null @@ -1,20 +0,0 @@ -copy($value); - } -} diff --git a/vendor/nikic/php-parser/README.md b/vendor/nikic/php-parser/README.md deleted file mode 100644 index edb3ed3..0000000 --- a/vendor/nikic/php-parser/README.md +++ /dev/null @@ -1,233 +0,0 @@ -PHP Parser -========== - -[![Coverage Status](https://coveralls.io/repos/github/nikic/PHP-Parser/badge.svg?branch=master)](https://coveralls.io/github/nikic/PHP-Parser?branch=master) - -This is a PHP parser written in PHP. Its purpose is to simplify static code analysis and -manipulation. - -[**Documentation for version 5.x**][doc_master] (current; for running on PHP >= 7.4; for parsing PHP 7.0 to PHP 8.4, with limited support for parsing PHP 5.x). - -[Documentation for version 4.x][doc_4_x] (supported; for running on PHP >= 7.0; for parsing PHP 5.2 to PHP 8.3). - -Features --------- - -The main features provided by this library are: - - * Parsing PHP 7, and PHP 8 code into an abstract syntax tree (AST). - * Invalid code can be parsed into a partial AST. - * The AST contains accurate location information. - * Dumping the AST in human-readable form. - * Converting an AST back to PHP code. - * Formatting can be preserved for partially changed ASTs. - * Infrastructure to traverse and modify ASTs. - * Resolution of namespaced names. - * Evaluation of constant expressions. - * Builders to simplify AST construction for code generation. - * Converting an AST into JSON and back. - -Quick Start ------------ - -Install the library using [composer](https://getcomposer.org): - - php composer.phar require nikic/php-parser - -Parse some PHP code into an AST and dump the result in human-readable form: - -```php -createForNewestSupportedVersion(); -try { - $ast = $parser->parse($code); -} catch (Error $error) { - echo "Parse error: {$error->getMessage()}\n"; - return; -} - -$dumper = new NodeDumper; -echo $dumper->dump($ast) . "\n"; -``` - -This dumps an AST looking something like this: - -``` -array( - 0: Stmt_Function( - attrGroups: array( - ) - byRef: false - name: Identifier( - name: test - ) - params: array( - 0: Param( - attrGroups: array( - ) - flags: 0 - type: null - byRef: false - variadic: false - var: Expr_Variable( - name: foo - ) - default: null - ) - ) - returnType: null - stmts: array( - 0: Stmt_Expression( - expr: Expr_FuncCall( - name: Name( - name: var_dump - ) - args: array( - 0: Arg( - name: null - value: Expr_Variable( - name: foo - ) - byRef: false - unpack: false - ) - ) - ) - ) - ) - ) -) -``` - -Let's traverse the AST and perform some kind of modification. For example, drop all function bodies: - -```php -use PhpParser\Node; -use PhpParser\Node\Stmt\Function_; -use PhpParser\NodeTraverser; -use PhpParser\NodeVisitorAbstract; - -$traverser = new NodeTraverser(); -$traverser->addVisitor(new class extends NodeVisitorAbstract { - public function enterNode(Node $node) { - if ($node instanceof Function_) { - // Clean out the function body - $node->stmts = []; - } - } -}); - -$ast = $traverser->traverse($ast); -echo $dumper->dump($ast) . "\n"; -``` - -This gives us an AST where the `Function_::$stmts` are empty: - -``` -array( - 0: Stmt_Function( - attrGroups: array( - ) - byRef: false - name: Identifier( - name: test - ) - params: array( - 0: Param( - attrGroups: array( - ) - type: null - byRef: false - variadic: false - var: Expr_Variable( - name: foo - ) - default: null - ) - ) - returnType: null - stmts: array( - ) - ) -) -``` - -Finally, we can convert the new AST back to PHP code: - -```php -use PhpParser\PrettyPrinter; - -$prettyPrinter = new PrettyPrinter\Standard; -echo $prettyPrinter->prettyPrintFile($ast); -``` - -This gives us our original code, minus the `var_dump()` call inside the function: - -```php -=7.4", - "ext-tokenizer": "*", - "ext-json": "*", - "ext-ctype": "*" - }, - "require-dev": { - "phpunit/phpunit": "^9.0", - "ircmaxell/php-yacc": "^0.0.7" - }, - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "autoload-dev": { - "psr-4": { - "PhpParser\\": "test/PhpParser/" - } - }, - "bin": [ - "bin/php-parse" - ] -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder.php b/vendor/nikic/php-parser/lib/PhpParser/Builder.php deleted file mode 100644 index d6aa124..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder.php +++ /dev/null @@ -1,12 +0,0 @@ - */ - protected array $attributes = []; - /** @var list */ - protected array $constants = []; - - /** @var list */ - protected array $attributeGroups = []; - /** @var Identifier|Node\Name|Node\ComplexType|null */ - protected ?Node $type = null; - - /** - * Creates a class constant builder - * - * @param string|Identifier $name Name - * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value Value - */ - public function __construct($name, $value) { - $this->constants = [new Const_($name, BuilderHelpers::normalizeValue($value))]; - } - - /** - * Add another constant to const group - * - * @param string|Identifier $name Name - * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value Value - * - * @return $this The builder instance (for fluid interface) - */ - public function addConst($name, $value) { - $this->constants[] = new Const_($name, BuilderHelpers::normalizeValue($value)); - - return $this; - } - - /** - * Makes the constant public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); - - return $this; - } - - /** - * Makes the constant protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); - - return $this; - } - - /** - * Makes the constant private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); - - return $this; - } - - /** - * Makes the constant final. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeFinal() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL); - - return $this; - } - - /** - * Sets doc comment for the constant. - * - * @param PhpParser\Comment\Doc|string $docComment Doc comment to set - * - * @return $this The builder instance (for fluid interface) - */ - public function setDocComment($docComment) { - $this->attributes = [ - 'comments' => [BuilderHelpers::normalizeDocComment($docComment)] - ]; - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Sets the constant type. - * - * @param string|Node\Name|Identifier|Node\ComplexType $type - * - * @return $this - */ - public function setType($type) { - $this->type = BuilderHelpers::normalizeType($type); - - return $this; - } - - /** - * Returns the built class node. - * - * @return Stmt\ClassConst The built constant node - */ - public function getNode(): PhpParser\Node { - return new Stmt\ClassConst( - $this->constants, - $this->flags, - $this->attributes, - $this->attributeGroups, - $this->type - ); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php deleted file mode 100644 index 6f39431..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Class_.php +++ /dev/null @@ -1,151 +0,0 @@ - */ - protected array $implements = []; - protected int $flags = 0; - /** @var list */ - protected array $uses = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $properties = []; - /** @var list */ - protected array $methods = []; - /** @var list */ - protected array $attributeGroups = []; - - /** - * Creates a class builder. - * - * @param string $name Name of the class - */ - public function __construct(string $name) { - $this->name = $name; - } - - /** - * Extends a class. - * - * @param Name|string $class Name of class to extend - * - * @return $this The builder instance (for fluid interface) - */ - public function extend($class) { - $this->extends = BuilderHelpers::normalizeName($class); - - return $this; - } - - /** - * Implements one or more interfaces. - * - * @param Name|string ...$interfaces Names of interfaces to implement - * - * @return $this The builder instance (for fluid interface) - */ - public function implement(...$interfaces) { - foreach ($interfaces as $interface) { - $this->implements[] = BuilderHelpers::normalizeName($interface); - } - - return $this; - } - - /** - * Makes the class abstract. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeAbstract() { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::ABSTRACT); - - return $this; - } - - /** - * Makes the class final. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeFinal() { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::FINAL); - - return $this; - } - - /** - * Makes the class readonly. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeReadonly() { - $this->flags = BuilderHelpers::addClassModifier($this->flags, Modifiers::READONLY); - - return $this; - } - - /** - * Adds a statement. - * - * @param Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) { - $stmt = BuilderHelpers::normalizeNode($stmt); - - if ($stmt instanceof Stmt\Property) { - $this->properties[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassMethod) { - $this->methods[] = $stmt; - } elseif ($stmt instanceof Stmt\TraitUse) { - $this->uses[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassConst) { - $this->constants[] = $stmt; - } else { - throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); - } - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Returns the built class node. - * - * @return Stmt\Class_ The built class node - */ - public function getNode(): PhpParser\Node { - return new Stmt\Class_($this->name, [ - 'flags' => $this->flags, - 'extends' => $this->extends, - 'implements' => $this->implements, - 'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods), - 'attrGroups' => $this->attributeGroups, - ], $this->attributes); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php deleted file mode 100644 index 488b721..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Declaration.php +++ /dev/null @@ -1,50 +0,0 @@ - */ - protected array $attributes = []; - - /** - * Adds a statement. - * - * @param PhpParser\Node\Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - abstract public function addStmt($stmt); - - /** - * Adds multiple statements. - * - * @param (PhpParser\Node\Stmt|PhpParser\Builder)[] $stmts The statements to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmts(array $stmts) { - foreach ($stmts as $stmt) { - $this->addStmt($stmt); - } - - return $this; - } - - /** - * Sets doc comment for the declaration. - * - * @param PhpParser\Comment\Doc|string $docComment Doc comment to set - * - * @return $this The builder instance (for fluid interface) - */ - public function setDocComment($docComment) { - $this->attributes['comments'] = [ - BuilderHelpers::normalizeDocComment($docComment) - ]; - - return $this; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php deleted file mode 100644 index c766321..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/EnumCase.php +++ /dev/null @@ -1,86 +0,0 @@ - */ - protected array $attributes = []; - - /** @var list */ - protected array $attributeGroups = []; - - /** - * Creates an enum case builder. - * - * @param string|Identifier $name Name - */ - public function __construct($name) { - $this->name = $name; - } - - /** - * Sets the value. - * - * @param Node\Expr|string|int $value - * - * @return $this - */ - public function setValue($value) { - $this->value = BuilderHelpers::normalizeValue($value); - - return $this; - } - - /** - * Sets doc comment for the constant. - * - * @param PhpParser\Comment\Doc|string $docComment Doc comment to set - * - * @return $this The builder instance (for fluid interface) - */ - public function setDocComment($docComment) { - $this->attributes = [ - 'comments' => [BuilderHelpers::normalizeDocComment($docComment)] - ]; - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Returns the built enum case node. - * - * @return Stmt\EnumCase The built constant node - */ - public function getNode(): PhpParser\Node { - return new Stmt\EnumCase( - $this->name, - $this->value, - $this->attributeGroups, - $this->attributes - ); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php deleted file mode 100644 index c00df03..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Enum_.php +++ /dev/null @@ -1,116 +0,0 @@ - */ - protected array $implements = []; - /** @var list */ - protected array $uses = []; - /** @var list */ - protected array $enumCases = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $methods = []; - /** @var list */ - protected array $attributeGroups = []; - - /** - * Creates an enum builder. - * - * @param string $name Name of the enum - */ - public function __construct(string $name) { - $this->name = $name; - } - - /** - * Sets the scalar type. - * - * @param string|Identifier $scalarType - * - * @return $this - */ - public function setScalarType($scalarType) { - $this->scalarType = BuilderHelpers::normalizeType($scalarType); - - return $this; - } - - /** - * Implements one or more interfaces. - * - * @param Name|string ...$interfaces Names of interfaces to implement - * - * @return $this The builder instance (for fluid interface) - */ - public function implement(...$interfaces) { - foreach ($interfaces as $interface) { - $this->implements[] = BuilderHelpers::normalizeName($interface); - } - - return $this; - } - - /** - * Adds a statement. - * - * @param Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) { - $stmt = BuilderHelpers::normalizeNode($stmt); - - if ($stmt instanceof Stmt\EnumCase) { - $this->enumCases[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassMethod) { - $this->methods[] = $stmt; - } elseif ($stmt instanceof Stmt\TraitUse) { - $this->uses[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassConst) { - $this->constants[] = $stmt; - } else { - throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); - } - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Returns the built class node. - * - * @return Stmt\Enum_ The built enum node - */ - public function getNode(): PhpParser\Node { - return new Stmt\Enum_($this->name, [ - 'scalarType' => $this->scalarType, - 'implements' => $this->implements, - 'stmts' => array_merge($this->uses, $this->enumCases, $this->constants, $this->methods), - 'attrGroups' => $this->attributeGroups, - ], $this->attributes); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php deleted file mode 100644 index ff79cb6..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/FunctionLike.php +++ /dev/null @@ -1,73 +0,0 @@ -returnByRef = true; - - return $this; - } - - /** - * Adds a parameter. - * - * @param Node\Param|Param $param The parameter to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addParam($param) { - $param = BuilderHelpers::normalizeNode($param); - - if (!$param instanceof Node\Param) { - throw new \LogicException(sprintf('Expected parameter node, got "%s"', $param->getType())); - } - - $this->params[] = $param; - - return $this; - } - - /** - * Adds multiple parameters. - * - * @param (Node\Param|Param)[] $params The parameters to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addParams(array $params) { - foreach ($params as $param) { - $this->addParam($param); - } - - return $this; - } - - /** - * Sets the return type for PHP 7. - * - * @param string|Node\Name|Node\Identifier|Node\ComplexType $type - * - * @return $this The builder instance (for fluid interface) - */ - public function setReturnType($type) { - $this->returnType = BuilderHelpers::normalizeType($type); - - return $this; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php deleted file mode 100644 index 48f5f69..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Function_.php +++ /dev/null @@ -1,67 +0,0 @@ - */ - protected array $stmts = []; - - /** @var list */ - protected array $attributeGroups = []; - - /** - * Creates a function builder. - * - * @param string $name Name of the function - */ - public function __construct(string $name) { - $this->name = $name; - } - - /** - * Adds a statement. - * - * @param Node|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) { - $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Returns the built function node. - * - * @return Stmt\Function_ The built function node - */ - public function getNode(): Node { - return new Stmt\Function_($this->name, [ - 'byRef' => $this->returnByRef, - 'params' => $this->params, - 'returnType' => $this->returnType, - 'stmts' => $this->stmts, - 'attrGroups' => $this->attributeGroups, - ], $this->attributes); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php deleted file mode 100644 index 13dd3f7..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Interface_.php +++ /dev/null @@ -1,94 +0,0 @@ - */ - protected array $extends = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $methods = []; - /** @var list */ - protected array $attributeGroups = []; - - /** - * Creates an interface builder. - * - * @param string $name Name of the interface - */ - public function __construct(string $name) { - $this->name = $name; - } - - /** - * Extends one or more interfaces. - * - * @param Name|string ...$interfaces Names of interfaces to extend - * - * @return $this The builder instance (for fluid interface) - */ - public function extend(...$interfaces) { - foreach ($interfaces as $interface) { - $this->extends[] = BuilderHelpers::normalizeName($interface); - } - - return $this; - } - - /** - * Adds a statement. - * - * @param Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) { - $stmt = BuilderHelpers::normalizeNode($stmt); - - if ($stmt instanceof Stmt\ClassConst) { - $this->constants[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassMethod) { - // we erase all statements in the body of an interface method - $stmt->stmts = null; - $this->methods[] = $stmt; - } else { - throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); - } - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Returns the built interface node. - * - * @return Stmt\Interface_ The built interface node - */ - public function getNode(): PhpParser\Node { - return new Stmt\Interface_($this->name, [ - 'extends' => $this->extends, - 'stmts' => array_merge($this->constants, $this->methods), - 'attrGroups' => $this->attributeGroups, - ], $this->attributes); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php deleted file mode 100644 index 8358dbe..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Method.php +++ /dev/null @@ -1,147 +0,0 @@ -|null */ - protected ?array $stmts = []; - - /** @var list */ - protected array $attributeGroups = []; - - /** - * Creates a method builder. - * - * @param string $name Name of the method - */ - public function __construct(string $name) { - $this->name = $name; - } - - /** - * Makes the method public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); - - return $this; - } - - /** - * Makes the method protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); - - return $this; - } - - /** - * Makes the method private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); - - return $this; - } - - /** - * Makes the method static. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeStatic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::STATIC); - - return $this; - } - - /** - * Makes the method abstract. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeAbstract() { - if (!empty($this->stmts)) { - throw new \LogicException('Cannot make method with statements abstract'); - } - - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::ABSTRACT); - $this->stmts = null; // abstract methods don't have statements - - return $this; - } - - /** - * Makes the method final. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeFinal() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL); - - return $this; - } - - /** - * Adds a statement. - * - * @param Node|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) { - if (null === $this->stmts) { - throw new \LogicException('Cannot add statements to an abstract method'); - } - - $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Returns the built method node. - * - * @return Stmt\ClassMethod The built method node - */ - public function getNode(): Node { - return new Stmt\ClassMethod($this->name, [ - 'flags' => $this->flags, - 'byRef' => $this->returnByRef, - 'params' => $this->params, - 'returnType' => $this->returnType, - 'stmts' => $this->stmts, - 'attrGroups' => $this->attributeGroups, - ], $this->attributes); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php deleted file mode 100644 index 80fe6f8..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Namespace_.php +++ /dev/null @@ -1,45 +0,0 @@ -name = null !== $name ? BuilderHelpers::normalizeName($name) : null; - } - - /** - * Adds a statement. - * - * @param Node|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) { - $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); - - return $this; - } - - /** - * Returns the built node. - * - * @return Stmt\Namespace_ The built node - */ - public function getNode(): Node { - return new Stmt\Namespace_($this->name, $this->stmts, $this->attributes); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php deleted file mode 100644 index 324a32b..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Param.php +++ /dev/null @@ -1,171 +0,0 @@ - */ - protected array $attributeGroups = []; - - /** - * Creates a parameter builder. - * - * @param string $name Name of the parameter - */ - public function __construct(string $name) { - $this->name = $name; - } - - /** - * Sets default value for the parameter. - * - * @param mixed $value Default value to use - * - * @return $this The builder instance (for fluid interface) - */ - public function setDefault($value) { - $this->default = BuilderHelpers::normalizeValue($value); - - return $this; - } - - /** - * Sets type for the parameter. - * - * @param string|Node\Name|Node\Identifier|Node\ComplexType $type Parameter type - * - * @return $this The builder instance (for fluid interface) - */ - public function setType($type) { - $this->type = BuilderHelpers::normalizeType($type); - if ($this->type == 'void') { - throw new \LogicException('Parameter type cannot be void'); - } - - return $this; - } - - /** - * Make the parameter accept the value by reference. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeByRef() { - $this->byRef = true; - - return $this; - } - - /** - * Make the parameter variadic - * - * @return $this The builder instance (for fluid interface) - */ - public function makeVariadic() { - $this->variadic = true; - - return $this; - } - - /** - * Makes the (promoted) parameter public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); - - return $this; - } - - /** - * Makes the (promoted) parameter protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); - - return $this; - } - - /** - * Makes the (promoted) parameter private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); - - return $this; - } - - /** - * Makes the (promoted) parameter readonly. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeReadonly() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY); - - return $this; - } - - /** - * Gives the promoted property private(set) visibility. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivateSet() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE_SET); - - return $this; - } - - /** - * Gives the promoted property protected(set) visibility. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtectedSet() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED_SET); - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Returns the built parameter node. - * - * @return Node\Param The built parameter node - */ - public function getNode(): Node { - return new Node\Param( - new Node\Expr\Variable($this->name), - $this->default, $this->type, $this->byRef, $this->variadic, [], $this->flags, $this->attributeGroups - ); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php deleted file mode 100644 index c80fe48..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Property.php +++ /dev/null @@ -1,223 +0,0 @@ - */ - protected array $attributes = []; - /** @var null|Identifier|Name|ComplexType */ - protected ?Node $type = null; - /** @var list */ - protected array $attributeGroups = []; - /** @var list */ - protected array $hooks = []; - - /** - * Creates a property builder. - * - * @param string $name Name of the property - */ - public function __construct(string $name) { - $this->name = $name; - } - - /** - * Makes the property public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PUBLIC); - - return $this; - } - - /** - * Makes the property protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED); - - return $this; - } - - /** - * Makes the property private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE); - - return $this; - } - - /** - * Makes the property static. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeStatic() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::STATIC); - - return $this; - } - - /** - * Makes the property readonly. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeReadonly() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::READONLY); - - return $this; - } - - /** - * Makes the property abstract. Requires at least one property hook to be specified as well. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeAbstract() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::ABSTRACT); - - return $this; - } - - /** - * Makes the property final. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeFinal() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::FINAL); - - return $this; - } - - /** - * Gives the property private(set) visibility. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivateSet() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PRIVATE_SET); - - return $this; - } - - /** - * Gives the property protected(set) visibility. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtectedSet() { - $this->flags = BuilderHelpers::addModifier($this->flags, Modifiers::PROTECTED_SET); - - return $this; - } - - /** - * Sets default value for the property. - * - * @param mixed $value Default value to use - * - * @return $this The builder instance (for fluid interface) - */ - public function setDefault($value) { - $this->default = BuilderHelpers::normalizeValue($value); - - return $this; - } - - /** - * Sets doc comment for the property. - * - * @param PhpParser\Comment\Doc|string $docComment Doc comment to set - * - * @return $this The builder instance (for fluid interface) - */ - public function setDocComment($docComment) { - $this->attributes = [ - 'comments' => [BuilderHelpers::normalizeDocComment($docComment)] - ]; - - return $this; - } - - /** - * Sets the property type for PHP 7.4+. - * - * @param string|Name|Identifier|ComplexType $type - * - * @return $this - */ - public function setType($type) { - $this->type = BuilderHelpers::normalizeType($type); - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Adds a property hook. - * - * @return $this The builder instance (for fluid interface) - */ - public function addHook(Node\PropertyHook $hook) { - $this->hooks[] = $hook; - - return $this; - } - - /** - * Returns the built class node. - * - * @return Stmt\Property The built property node - */ - public function getNode(): PhpParser\Node { - if ($this->flags & Modifiers::ABSTRACT && !$this->hooks) { - throw new PhpParser\Error('Only hooked properties may be declared abstract'); - } - - return new Stmt\Property( - $this->flags !== 0 ? $this->flags : Modifiers::PUBLIC, - [ - new Node\PropertyItem($this->name, $this->default) - ], - $this->attributes, - $this->type, - $this->attributeGroups, - $this->hooks - ); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php deleted file mode 100644 index cf21c82..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUse.php +++ /dev/null @@ -1,65 +0,0 @@ -and($trait); - } - } - - /** - * Adds used trait. - * - * @param Node\Name|string $trait Trait name - * - * @return $this The builder instance (for fluid interface) - */ - public function and($trait) { - $this->traits[] = BuilderHelpers::normalizeName($trait); - return $this; - } - - /** - * Adds trait adaptation. - * - * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation - * - * @return $this The builder instance (for fluid interface) - */ - public function with($adaptation) { - $adaptation = BuilderHelpers::normalizeNode($adaptation); - - if (!$adaptation instanceof Stmt\TraitUseAdaptation) { - throw new \LogicException('Adaptation must have type TraitUseAdaptation'); - } - - $this->adaptations[] = $adaptation; - return $this; - } - - /** - * Returns the built node. - * - * @return Node The built node - */ - public function getNode(): Node { - return new Stmt\TraitUse($this->traits, $this->adaptations); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php deleted file mode 100644 index fee0958..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/TraitUseAdaptation.php +++ /dev/null @@ -1,145 +0,0 @@ -type = self::TYPE_UNDEFINED; - - $this->trait = is_null($trait) ? null : BuilderHelpers::normalizeName($trait); - $this->method = BuilderHelpers::normalizeIdentifier($method); - } - - /** - * Sets alias of method. - * - * @param Node\Identifier|string $alias Alias for adapted method - * - * @return $this The builder instance (for fluid interface) - */ - public function as($alias) { - if ($this->type === self::TYPE_UNDEFINED) { - $this->type = self::TYPE_ALIAS; - } - - if ($this->type !== self::TYPE_ALIAS) { - throw new \LogicException('Cannot set alias for not alias adaptation buider'); - } - - $this->alias = BuilderHelpers::normalizeIdentifier($alias); - return $this; - } - - /** - * Sets adapted method public. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePublic() { - $this->setModifier(Modifiers::PUBLIC); - return $this; - } - - /** - * Sets adapted method protected. - * - * @return $this The builder instance (for fluid interface) - */ - public function makeProtected() { - $this->setModifier(Modifiers::PROTECTED); - return $this; - } - - /** - * Sets adapted method private. - * - * @return $this The builder instance (for fluid interface) - */ - public function makePrivate() { - $this->setModifier(Modifiers::PRIVATE); - return $this; - } - - /** - * Adds overwritten traits. - * - * @param Node\Name|string ...$traits Traits for overwrite - * - * @return $this The builder instance (for fluid interface) - */ - public function insteadof(...$traits) { - if ($this->type === self::TYPE_UNDEFINED) { - if (is_null($this->trait)) { - throw new \LogicException('Precedence adaptation must have trait'); - } - - $this->type = self::TYPE_PRECEDENCE; - } - - if ($this->type !== self::TYPE_PRECEDENCE) { - throw new \LogicException('Cannot add overwritten traits for not precedence adaptation buider'); - } - - foreach ($traits as $trait) { - $this->insteadof[] = BuilderHelpers::normalizeName($trait); - } - - return $this; - } - - protected function setModifier(int $modifier): void { - if ($this->type === self::TYPE_UNDEFINED) { - $this->type = self::TYPE_ALIAS; - } - - if ($this->type !== self::TYPE_ALIAS) { - throw new \LogicException('Cannot set access modifier for not alias adaptation buider'); - } - - if (is_null($this->modifier)) { - $this->modifier = $modifier; - } else { - throw new \LogicException('Multiple access type modifiers are not allowed'); - } - } - - /** - * Returns the built node. - * - * @return Node The built node - */ - public function getNode(): Node { - switch ($this->type) { - case self::TYPE_ALIAS: - return new Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias); - case self::TYPE_PRECEDENCE: - return new Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof); - default: - throw new \LogicException('Type of adaptation is not defined'); - } - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php deleted file mode 100644 index ffa1bd5..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Trait_.php +++ /dev/null @@ -1,83 +0,0 @@ - */ - protected array $uses = []; - /** @var list */ - protected array $constants = []; - /** @var list */ - protected array $properties = []; - /** @var list */ - protected array $methods = []; - /** @var list */ - protected array $attributeGroups = []; - - /** - * Creates an interface builder. - * - * @param string $name Name of the interface - */ - public function __construct(string $name) { - $this->name = $name; - } - - /** - * Adds a statement. - * - * @param Stmt|PhpParser\Builder $stmt The statement to add - * - * @return $this The builder instance (for fluid interface) - */ - public function addStmt($stmt) { - $stmt = BuilderHelpers::normalizeNode($stmt); - - if ($stmt instanceof Stmt\Property) { - $this->properties[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassMethod) { - $this->methods[] = $stmt; - } elseif ($stmt instanceof Stmt\TraitUse) { - $this->uses[] = $stmt; - } elseif ($stmt instanceof Stmt\ClassConst) { - $this->constants[] = $stmt; - } else { - throw new \LogicException(sprintf('Unexpected node of type "%s"', $stmt->getType())); - } - - return $this; - } - - /** - * Adds an attribute group. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return $this The builder instance (for fluid interface) - */ - public function addAttribute($attribute) { - $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); - - return $this; - } - - /** - * Returns the built trait node. - * - * @return Stmt\Trait_ The built interface node - */ - public function getNode(): PhpParser\Node { - return new Stmt\Trait_( - $this->name, [ - 'stmts' => array_merge($this->uses, $this->constants, $this->properties, $this->methods), - 'attrGroups' => $this->attributeGroups, - ], $this->attributes - ); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php b/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php deleted file mode 100644 index b82cf13..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Builder/Use_.php +++ /dev/null @@ -1,49 +0,0 @@ -name = BuilderHelpers::normalizeName($name); - $this->type = $type; - } - - /** - * Sets alias for used name. - * - * @param string $alias Alias to use (last component of full name by default) - * - * @return $this The builder instance (for fluid interface) - */ - public function as(string $alias) { - $this->alias = $alias; - return $this; - } - - /** - * Returns the built node. - * - * @return Stmt\Use_ The built node - */ - public function getNode(): Node { - return new Stmt\Use_([ - new Node\UseItem($this->name, $this->alias) - ], $this->type); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php b/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php deleted file mode 100644 index 07642f9..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/BuilderFactory.php +++ /dev/null @@ -1,375 +0,0 @@ -args($args) - ); - } - - /** - * Creates a namespace builder. - * - * @param null|string|Node\Name $name Name of the namespace - * - * @return Builder\Namespace_ The created namespace builder - */ - public function namespace($name): Builder\Namespace_ { - return new Builder\Namespace_($name); - } - - /** - * Creates a class builder. - * - * @param string $name Name of the class - * - * @return Builder\Class_ The created class builder - */ - public function class(string $name): Builder\Class_ { - return new Builder\Class_($name); - } - - /** - * Creates an interface builder. - * - * @param string $name Name of the interface - * - * @return Builder\Interface_ The created interface builder - */ - public function interface(string $name): Builder\Interface_ { - return new Builder\Interface_($name); - } - - /** - * Creates a trait builder. - * - * @param string $name Name of the trait - * - * @return Builder\Trait_ The created trait builder - */ - public function trait(string $name): Builder\Trait_ { - return new Builder\Trait_($name); - } - - /** - * Creates an enum builder. - * - * @param string $name Name of the enum - * - * @return Builder\Enum_ The created enum builder - */ - public function enum(string $name): Builder\Enum_ { - return new Builder\Enum_($name); - } - - /** - * Creates a trait use builder. - * - * @param Node\Name|string ...$traits Trait names - * - * @return Builder\TraitUse The created trait use builder - */ - public function useTrait(...$traits): Builder\TraitUse { - return new Builder\TraitUse(...$traits); - } - - /** - * Creates a trait use adaptation builder. - * - * @param Node\Name|string|null $trait Trait name - * @param Node\Identifier|string $method Method name - * - * @return Builder\TraitUseAdaptation The created trait use adaptation builder - */ - public function traitUseAdaptation($trait, $method = null): Builder\TraitUseAdaptation { - if ($method === null) { - $method = $trait; - $trait = null; - } - - return new Builder\TraitUseAdaptation($trait, $method); - } - - /** - * Creates a method builder. - * - * @param string $name Name of the method - * - * @return Builder\Method The created method builder - */ - public function method(string $name): Builder\Method { - return new Builder\Method($name); - } - - /** - * Creates a parameter builder. - * - * @param string $name Name of the parameter - * - * @return Builder\Param The created parameter builder - */ - public function param(string $name): Builder\Param { - return new Builder\Param($name); - } - - /** - * Creates a property builder. - * - * @param string $name Name of the property - * - * @return Builder\Property The created property builder - */ - public function property(string $name): Builder\Property { - return new Builder\Property($name); - } - - /** - * Creates a function builder. - * - * @param string $name Name of the function - * - * @return Builder\Function_ The created function builder - */ - public function function(string $name): Builder\Function_ { - return new Builder\Function_($name); - } - - /** - * Creates a namespace/class use builder. - * - * @param Node\Name|string $name Name of the entity (namespace or class) to alias - * - * @return Builder\Use_ The created use builder - */ - public function use($name): Builder\Use_ { - return new Builder\Use_($name, Use_::TYPE_NORMAL); - } - - /** - * Creates a function use builder. - * - * @param Node\Name|string $name Name of the function to alias - * - * @return Builder\Use_ The created use function builder - */ - public function useFunction($name): Builder\Use_ { - return new Builder\Use_($name, Use_::TYPE_FUNCTION); - } - - /** - * Creates a constant use builder. - * - * @param Node\Name|string $name Name of the const to alias - * - * @return Builder\Use_ The created use const builder - */ - public function useConst($name): Builder\Use_ { - return new Builder\Use_($name, Use_::TYPE_CONSTANT); - } - - /** - * Creates a class constant builder. - * - * @param string|Identifier $name Name - * @param Node\Expr|bool|null|int|float|string|array $value Value - * - * @return Builder\ClassConst The created use const builder - */ - public function classConst($name, $value): Builder\ClassConst { - return new Builder\ClassConst($name, $value); - } - - /** - * Creates an enum case builder. - * - * @param string|Identifier $name Name - * - * @return Builder\EnumCase The created use const builder - */ - public function enumCase($name): Builder\EnumCase { - return new Builder\EnumCase($name); - } - - /** - * Creates node a for a literal value. - * - * @param Expr|bool|null|int|float|string|array|\UnitEnum $value $value - */ - public function val($value): Expr { - return BuilderHelpers::normalizeValue($value); - } - - /** - * Creates variable node. - * - * @param string|Expr $name Name - */ - public function var($name): Expr\Variable { - if (!\is_string($name) && !$name instanceof Expr) { - throw new \LogicException('Variable name must be string or Expr'); - } - - return new Expr\Variable($name); - } - - /** - * Normalizes an argument list. - * - * Creates Arg nodes for all arguments and converts literal values to expressions. - * - * @param array $args List of arguments to normalize - * - * @return list - */ - public function args(array $args): array { - $normalizedArgs = []; - foreach ($args as $key => $arg) { - if (!($arg instanceof Arg)) { - $arg = new Arg(BuilderHelpers::normalizeValue($arg)); - } - if (\is_string($key)) { - $arg->name = BuilderHelpers::normalizeIdentifier($key); - } - $normalizedArgs[] = $arg; - } - return $normalizedArgs; - } - - /** - * Creates a function call node. - * - * @param string|Name|Expr $name Function name - * @param array $args Function arguments - */ - public function funcCall($name, array $args = []): Expr\FuncCall { - return new Expr\FuncCall( - BuilderHelpers::normalizeNameOrExpr($name), - $this->args($args) - ); - } - - /** - * Creates a method call node. - * - * @param Expr $var Variable the method is called on - * @param string|Identifier|Expr $name Method name - * @param array $args Method arguments - */ - public function methodCall(Expr $var, $name, array $args = []): Expr\MethodCall { - return new Expr\MethodCall( - $var, - BuilderHelpers::normalizeIdentifierOrExpr($name), - $this->args($args) - ); - } - - /** - * Creates a static method call node. - * - * @param string|Name|Expr $class Class name - * @param string|Identifier|Expr $name Method name - * @param array $args Method arguments - */ - public function staticCall($class, $name, array $args = []): Expr\StaticCall { - return new Expr\StaticCall( - BuilderHelpers::normalizeNameOrExpr($class), - BuilderHelpers::normalizeIdentifierOrExpr($name), - $this->args($args) - ); - } - - /** - * Creates an object creation node. - * - * @param string|Name|Expr $class Class name - * @param array $args Constructor arguments - */ - public function new($class, array $args = []): Expr\New_ { - return new Expr\New_( - BuilderHelpers::normalizeNameOrExpr($class), - $this->args($args) - ); - } - - /** - * Creates a constant fetch node. - * - * @param string|Name $name Constant name - */ - public function constFetch($name): Expr\ConstFetch { - return new Expr\ConstFetch(BuilderHelpers::normalizeName($name)); - } - - /** - * Creates a property fetch node. - * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Property name - */ - public function propertyFetch(Expr $var, $name): Expr\PropertyFetch { - return new Expr\PropertyFetch($var, BuilderHelpers::normalizeIdentifierOrExpr($name)); - } - - /** - * Creates a class constant fetch node. - * - * @param string|Name|Expr $class Class name - * @param string|Identifier|Expr $name Constant name - */ - public function classConstFetch($class, $name): Expr\ClassConstFetch { - return new Expr\ClassConstFetch( - BuilderHelpers::normalizeNameOrExpr($class), - BuilderHelpers::normalizeIdentifierOrExpr($name) - ); - } - - /** - * Creates nested Concat nodes from a list of expressions. - * - * @param Expr|string ...$exprs Expressions or literal strings - */ - public function concat(...$exprs): Concat { - $numExprs = count($exprs); - if ($numExprs < 2) { - throw new \LogicException('Expected at least two expressions'); - } - - $lastConcat = $this->normalizeStringExpr($exprs[0]); - for ($i = 1; $i < $numExprs; $i++) { - $lastConcat = new Concat($lastConcat, $this->normalizeStringExpr($exprs[$i])); - } - return $lastConcat; - } - - /** - * @param string|Expr $expr - */ - private function normalizeStringExpr($expr): Expr { - if ($expr instanceof Expr) { - return $expr; - } - - if (\is_string($expr)) { - return new String_($expr); - } - - throw new \LogicException('Expected string or Expr'); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php b/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php deleted file mode 100644 index f29a691..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/BuilderHelpers.php +++ /dev/null @@ -1,338 +0,0 @@ -getNode(); - } - - if ($node instanceof Node) { - return $node; - } - - throw new \LogicException('Expected node or builder object'); - } - - /** - * Normalizes a node to a statement. - * - * Expressions are wrapped in a Stmt\Expression node. - * - * @param Node|Builder $node The node to normalize - * - * @return Stmt The normalized statement node - */ - public static function normalizeStmt($node): Stmt { - $node = self::normalizeNode($node); - if ($node instanceof Stmt) { - return $node; - } - - if ($node instanceof Expr) { - return new Stmt\Expression($node); - } - - throw new \LogicException('Expected statement or expression node'); - } - - /** - * Normalizes strings to Identifier. - * - * @param string|Identifier $name The identifier to normalize - * - * @return Identifier The normalized identifier - */ - public static function normalizeIdentifier($name): Identifier { - if ($name instanceof Identifier) { - return $name; - } - - if (\is_string($name)) { - return new Identifier($name); - } - - throw new \LogicException('Expected string or instance of Node\Identifier'); - } - - /** - * Normalizes strings to Identifier, also allowing expressions. - * - * @param string|Identifier|Expr $name The identifier to normalize - * - * @return Identifier|Expr The normalized identifier or expression - */ - public static function normalizeIdentifierOrExpr($name) { - if ($name instanceof Identifier || $name instanceof Expr) { - return $name; - } - - if (\is_string($name)) { - return new Identifier($name); - } - - throw new \LogicException('Expected string or instance of Node\Identifier or Node\Expr'); - } - - /** - * Normalizes a name: Converts string names to Name nodes. - * - * @param Name|string $name The name to normalize - * - * @return Name The normalized name - */ - public static function normalizeName($name): Name { - if ($name instanceof Name) { - return $name; - } - - if (is_string($name)) { - if (!$name) { - throw new \LogicException('Name cannot be empty'); - } - - if ($name[0] === '\\') { - return new Name\FullyQualified(substr($name, 1)); - } - - if (0 === strpos($name, 'namespace\\')) { - return new Name\Relative(substr($name, strlen('namespace\\'))); - } - - return new Name($name); - } - - throw new \LogicException('Name must be a string or an instance of Node\Name'); - } - - /** - * Normalizes a name: Converts string names to Name nodes, while also allowing expressions. - * - * @param Expr|Name|string $name The name to normalize - * - * @return Name|Expr The normalized name or expression - */ - public static function normalizeNameOrExpr($name) { - if ($name instanceof Expr) { - return $name; - } - - if (!is_string($name) && !($name instanceof Name)) { - throw new \LogicException( - 'Name must be a string or an instance of Node\Name or Node\Expr' - ); - } - - return self::normalizeName($name); - } - - /** - * Normalizes a type: Converts plain-text type names into proper AST representation. - * - * In particular, builtin types become Identifiers, custom types become Names and nullables - * are wrapped in NullableType nodes. - * - * @param string|Name|Identifier|ComplexType $type The type to normalize - * - * @return Name|Identifier|ComplexType The normalized type - */ - public static function normalizeType($type) { - if (!is_string($type)) { - if ( - !$type instanceof Name && !$type instanceof Identifier && - !$type instanceof ComplexType - ) { - throw new \LogicException( - 'Type must be a string, or an instance of Name, Identifier or ComplexType' - ); - } - return $type; - } - - $nullable = false; - if (strlen($type) > 0 && $type[0] === '?') { - $nullable = true; - $type = substr($type, 1); - } - - $builtinTypes = [ - 'array', - 'callable', - 'bool', - 'int', - 'float', - 'string', - 'iterable', - 'void', - 'object', - 'null', - 'false', - 'mixed', - 'never', - 'true', - ]; - - $lowerType = strtolower($type); - if (in_array($lowerType, $builtinTypes)) { - $type = new Identifier($lowerType); - } else { - $type = self::normalizeName($type); - } - - $notNullableTypes = [ - 'void', 'mixed', 'never', - ]; - if ($nullable && in_array((string) $type, $notNullableTypes)) { - throw new \LogicException(sprintf('%s type cannot be nullable', $type)); - } - - return $nullable ? new NullableType($type) : $type; - } - - /** - * Normalizes a value: Converts nulls, booleans, integers, - * floats, strings and arrays into their respective nodes - * - * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value The value to normalize - * - * @return Expr The normalized value - */ - public static function normalizeValue($value): Expr { - if ($value instanceof Node\Expr) { - return $value; - } - - if (is_null($value)) { - return new Expr\ConstFetch( - new Name('null') - ); - } - - if (is_bool($value)) { - return new Expr\ConstFetch( - new Name($value ? 'true' : 'false') - ); - } - - if (is_int($value)) { - return new Scalar\Int_($value); - } - - if (is_float($value)) { - return new Scalar\Float_($value); - } - - if (is_string($value)) { - return new Scalar\String_($value); - } - - if (is_array($value)) { - $items = []; - $lastKey = -1; - foreach ($value as $itemKey => $itemValue) { - // for consecutive, numeric keys don't generate keys - if (null !== $lastKey && ++$lastKey === $itemKey) { - $items[] = new Node\ArrayItem( - self::normalizeValue($itemValue) - ); - } else { - $lastKey = null; - $items[] = new Node\ArrayItem( - self::normalizeValue($itemValue), - self::normalizeValue($itemKey) - ); - } - } - - return new Expr\Array_($items); - } - - if ($value instanceof \UnitEnum) { - return new Expr\ClassConstFetch(new FullyQualified(\get_class($value)), new Identifier($value->name)); - } - - throw new \LogicException('Invalid value'); - } - - /** - * Normalizes a doc comment: Converts plain strings to PhpParser\Comment\Doc. - * - * @param Comment\Doc|string $docComment The doc comment to normalize - * - * @return Comment\Doc The normalized doc comment - */ - public static function normalizeDocComment($docComment): Comment\Doc { - if ($docComment instanceof Comment\Doc) { - return $docComment; - } - - if (is_string($docComment)) { - return new Comment\Doc($docComment); - } - - throw new \LogicException('Doc comment must be a string or an instance of PhpParser\Comment\Doc'); - } - - /** - * Normalizes a attribute: Converts attribute to the Attribute Group if needed. - * - * @param Node\Attribute|Node\AttributeGroup $attribute - * - * @return Node\AttributeGroup The Attribute Group - */ - public static function normalizeAttribute($attribute): Node\AttributeGroup { - if ($attribute instanceof Node\AttributeGroup) { - return $attribute; - } - - if (!($attribute instanceof Node\Attribute)) { - throw new \LogicException('Attribute must be an instance of PhpParser\Node\Attribute or PhpParser\Node\AttributeGroup'); - } - - return new Node\AttributeGroup([$attribute]); - } - - /** - * Adds a modifier and returns new modifier bitmask. - * - * @param int $modifiers Existing modifiers - * @param int $modifier Modifier to set - * - * @return int New modifiers - */ - public static function addModifier(int $modifiers, int $modifier): int { - Modifiers::verifyModifier($modifiers, $modifier); - return $modifiers | $modifier; - } - - /** - * Adds a modifier and returns new modifier bitmask. - * @return int New modifiers - */ - public static function addClassModifier(int $existingModifiers, int $modifierToSet): int { - Modifiers::verifyClassModifier($existingModifiers, $modifierToSet); - return $existingModifiers | $modifierToSet; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Comment.php b/vendor/nikic/php-parser/lib/PhpParser/Comment.php deleted file mode 100644 index 01b341e..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Comment.php +++ /dev/null @@ -1,209 +0,0 @@ -text = $text; - $this->startLine = $startLine; - $this->startFilePos = $startFilePos; - $this->startTokenPos = $startTokenPos; - $this->endLine = $endLine; - $this->endFilePos = $endFilePos; - $this->endTokenPos = $endTokenPos; - } - - /** - * Gets the comment text. - * - * @return string The comment text (including comment delimiters like /*) - */ - public function getText(): string { - return $this->text; - } - - /** - * Gets the line number the comment started on. - * - * @return int Line number (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getStartLine(): int { - return $this->startLine; - } - - /** - * Gets the file offset the comment started on. - * - * @return int File offset (or -1 if not available) - */ - public function getStartFilePos(): int { - return $this->startFilePos; - } - - /** - * Gets the token offset the comment started on. - * - * @return int Token offset (or -1 if not available) - */ - public function getStartTokenPos(): int { - return $this->startTokenPos; - } - - /** - * Gets the line number the comment ends on. - * - * @return int Line number (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getEndLine(): int { - return $this->endLine; - } - - /** - * Gets the file offset the comment ends on. - * - * @return int File offset (or -1 if not available) - */ - public function getEndFilePos(): int { - return $this->endFilePos; - } - - /** - * Gets the token offset the comment ends on. - * - * @return int Token offset (or -1 if not available) - */ - public function getEndTokenPos(): int { - return $this->endTokenPos; - } - - /** - * Gets the comment text. - * - * @return string The comment text (including comment delimiters like /*) - */ - public function __toString(): string { - return $this->text; - } - - /** - * Gets the reformatted comment text. - * - * "Reformatted" here means that we try to clean up the whitespace at the - * starts of the lines. This is necessary because we receive the comments - * without leading whitespace on the first line, but with leading whitespace - * on all subsequent lines. - * - * Additionally, this normalizes CRLF newlines to LF newlines. - */ - public function getReformattedText(): string { - $text = str_replace("\r\n", "\n", $this->text); - $newlinePos = strpos($text, "\n"); - if (false === $newlinePos) { - // Single line comments don't need further processing - return $text; - } - if (preg_match('(^.*(?:\n\s+\*.*)+$)', $text)) { - // Multi line comment of the type - // - // /* - // * Some text. - // * Some more text. - // */ - // - // is handled by replacing the whitespace sequences before the * by a single space - return preg_replace('(^\s+\*)m', ' *', $text); - } - if (preg_match('(^/\*\*?\s*\n)', $text) && preg_match('(\n(\s*)\*/$)', $text, $matches)) { - // Multi line comment of the type - // - // /* - // Some text. - // Some more text. - // */ - // - // is handled by removing the whitespace sequence on the line before the closing - // */ on all lines. So if the last line is " */", then " " is removed at the - // start of all lines. - return preg_replace('(^' . preg_quote($matches[1]) . ')m', '', $text); - } - if (preg_match('(^/\*\*?\s*(?!\s))', $text, $matches)) { - // Multi line comment of the type - // - // /* Some text. - // Some more text. - // Indented text. - // Even more text. */ - // - // is handled by removing the difference between the shortest whitespace prefix on all - // lines and the length of the "/* " opening sequence. - $prefixLen = $this->getShortestWhitespacePrefixLen(substr($text, $newlinePos + 1)); - $removeLen = $prefixLen - strlen($matches[0]); - return preg_replace('(^\s{' . $removeLen . '})m', '', $text); - } - - // No idea how to format this comment, so simply return as is - return $text; - } - - /** - * Get length of shortest whitespace prefix (at the start of a line). - * - * If there is a line with no prefix whitespace, 0 is a valid return value. - * - * @param string $str String to check - * @return int Length in characters. Tabs count as single characters. - */ - private function getShortestWhitespacePrefixLen(string $str): int { - $lines = explode("\n", $str); - $shortestPrefixLen = \PHP_INT_MAX; - foreach ($lines as $line) { - preg_match('(^\s*)', $line, $matches); - $prefixLen = strlen($matches[0]); - if ($prefixLen < $shortestPrefixLen) { - $shortestPrefixLen = $prefixLen; - } - } - return $shortestPrefixLen; - } - - /** - * @return array{nodeType:string, text:mixed, line:mixed, filePos:mixed} - */ - public function jsonSerialize(): array { - // Technically not a node, but we make it look like one anyway - $type = $this instanceof Comment\Doc ? 'Comment_Doc' : 'Comment'; - return [ - 'nodeType' => $type, - 'text' => $this->text, - // TODO: Rename these to include "start". - 'line' => $this->startLine, - 'filePos' => $this->startFilePos, - 'tokenPos' => $this->startTokenPos, - 'endLine' => $this->endLine, - 'endFilePos' => $this->endFilePos, - 'endTokenPos' => $this->endTokenPos, - ]; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php b/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php deleted file mode 100644 index bb3e914..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Comment/Doc.php +++ /dev/null @@ -1,6 +0,0 @@ -fallbackEvaluator = $fallbackEvaluator ?? function (Expr $expr) { - throw new ConstExprEvaluationException( - "Expression of type {$expr->getType()} cannot be evaluated" - ); - }; - } - - /** - * Silently evaluates a constant expression into a PHP value. - * - * Thrown Errors, warnings or notices will be converted into a ConstExprEvaluationException. - * The original source of the exception is available through getPrevious(). - * - * If some part of the expression cannot be evaluated, the fallback evaluator passed to the - * constructor will be invoked. By default, if no fallback is provided, an exception of type - * ConstExprEvaluationException is thrown. - * - * See class doc comment for caveats and limitations. - * - * @param Expr $expr Constant expression to evaluate - * @return mixed Result of evaluation - * - * @throws ConstExprEvaluationException if the expression cannot be evaluated or an error occurred - */ - public function evaluateSilently(Expr $expr) { - set_error_handler(function ($num, $str, $file, $line) { - throw new \ErrorException($str, 0, $num, $file, $line); - }); - - try { - return $this->evaluate($expr); - } catch (\Throwable $e) { - if (!$e instanceof ConstExprEvaluationException) { - $e = new ConstExprEvaluationException( - "An error occurred during constant expression evaluation", 0, $e); - } - throw $e; - } finally { - restore_error_handler(); - } - } - - /** - * Directly evaluates a constant expression into a PHP value. - * - * May generate Error exceptions, warnings or notices. Use evaluateSilently() to convert these - * into a ConstExprEvaluationException. - * - * If some part of the expression cannot be evaluated, the fallback evaluator passed to the - * constructor will be invoked. By default, if no fallback is provided, an exception of type - * ConstExprEvaluationException is thrown. - * - * See class doc comment for caveats and limitations. - * - * @param Expr $expr Constant expression to evaluate - * @return mixed Result of evaluation - * - * @throws ConstExprEvaluationException if the expression cannot be evaluated - */ - public function evaluateDirectly(Expr $expr) { - return $this->evaluate($expr); - } - - /** @return mixed */ - private function evaluate(Expr $expr) { - if ($expr instanceof Scalar\Int_ - || $expr instanceof Scalar\Float_ - || $expr instanceof Scalar\String_ - ) { - return $expr->value; - } - - if ($expr instanceof Expr\Array_) { - return $this->evaluateArray($expr); - } - - // Unary operators - if ($expr instanceof Expr\UnaryPlus) { - return +$this->evaluate($expr->expr); - } - if ($expr instanceof Expr\UnaryMinus) { - return -$this->evaluate($expr->expr); - } - if ($expr instanceof Expr\BooleanNot) { - return !$this->evaluate($expr->expr); - } - if ($expr instanceof Expr\BitwiseNot) { - return ~$this->evaluate($expr->expr); - } - - if ($expr instanceof Expr\BinaryOp) { - return $this->evaluateBinaryOp($expr); - } - - if ($expr instanceof Expr\Ternary) { - return $this->evaluateTernary($expr); - } - - if ($expr instanceof Expr\ArrayDimFetch && null !== $expr->dim) { - return $this->evaluate($expr->var)[$this->evaluate($expr->dim)]; - } - - if ($expr instanceof Expr\ConstFetch) { - return $this->evaluateConstFetch($expr); - } - - return ($this->fallbackEvaluator)($expr); - } - - private function evaluateArray(Expr\Array_ $expr): array { - $array = []; - foreach ($expr->items as $item) { - if (null !== $item->key) { - $array[$this->evaluate($item->key)] = $this->evaluate($item->value); - } elseif ($item->unpack) { - $array = array_merge($array, $this->evaluate($item->value)); - } else { - $array[] = $this->evaluate($item->value); - } - } - return $array; - } - - /** @return mixed */ - private function evaluateTernary(Expr\Ternary $expr) { - if (null === $expr->if) { - return $this->evaluate($expr->cond) ?: $this->evaluate($expr->else); - } - - return $this->evaluate($expr->cond) - ? $this->evaluate($expr->if) - : $this->evaluate($expr->else); - } - - /** @return mixed */ - private function evaluateBinaryOp(Expr\BinaryOp $expr) { - if ($expr instanceof Expr\BinaryOp\Coalesce - && $expr->left instanceof Expr\ArrayDimFetch - ) { - // This needs to be special cased to respect BP_VAR_IS fetch semantics - return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)] - ?? $this->evaluate($expr->right); - } - - // The evaluate() calls are repeated in each branch, because some of the operators are - // short-circuiting and evaluating the RHS in advance may be illegal in that case - $l = $expr->left; - $r = $expr->right; - switch ($expr->getOperatorSigil()) { - case '&': return $this->evaluate($l) & $this->evaluate($r); - case '|': return $this->evaluate($l) | $this->evaluate($r); - case '^': return $this->evaluate($l) ^ $this->evaluate($r); - case '&&': return $this->evaluate($l) && $this->evaluate($r); - case '||': return $this->evaluate($l) || $this->evaluate($r); - case '??': return $this->evaluate($l) ?? $this->evaluate($r); - case '.': return $this->evaluate($l) . $this->evaluate($r); - case '/': return $this->evaluate($l) / $this->evaluate($r); - case '==': return $this->evaluate($l) == $this->evaluate($r); - case '>': return $this->evaluate($l) > $this->evaluate($r); - case '>=': return $this->evaluate($l) >= $this->evaluate($r); - case '===': return $this->evaluate($l) === $this->evaluate($r); - case 'and': return $this->evaluate($l) and $this->evaluate($r); - case 'or': return $this->evaluate($l) or $this->evaluate($r); - case 'xor': return $this->evaluate($l) xor $this->evaluate($r); - case '-': return $this->evaluate($l) - $this->evaluate($r); - case '%': return $this->evaluate($l) % $this->evaluate($r); - case '*': return $this->evaluate($l) * $this->evaluate($r); - case '!=': return $this->evaluate($l) != $this->evaluate($r); - case '!==': return $this->evaluate($l) !== $this->evaluate($r); - case '+': return $this->evaluate($l) + $this->evaluate($r); - case '**': return $this->evaluate($l) ** $this->evaluate($r); - case '<<': return $this->evaluate($l) << $this->evaluate($r); - case '>>': return $this->evaluate($l) >> $this->evaluate($r); - case '<': return $this->evaluate($l) < $this->evaluate($r); - case '<=': return $this->evaluate($l) <= $this->evaluate($r); - case '<=>': return $this->evaluate($l) <=> $this->evaluate($r); - } - - throw new \Exception('Should not happen'); - } - - /** @return mixed */ - private function evaluateConstFetch(Expr\ConstFetch $expr) { - $name = $expr->name->toLowerString(); - switch ($name) { - case 'null': return null; - case 'false': return false; - case 'true': return true; - } - - return ($this->fallbackEvaluator)($expr); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Error.php b/vendor/nikic/php-parser/lib/PhpParser/Error.php deleted file mode 100644 index f81f0c4..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Error.php +++ /dev/null @@ -1,173 +0,0 @@ - */ - protected array $attributes; - - /** - * Creates an Exception signifying a parse error. - * - * @param string $message Error message - * @param array $attributes Attributes of node/token where error occurred - */ - public function __construct(string $message, array $attributes = []) { - $this->rawMessage = $message; - $this->attributes = $attributes; - $this->updateMessage(); - } - - /** - * Gets the error message - * - * @return string Error message - */ - public function getRawMessage(): string { - return $this->rawMessage; - } - - /** - * Gets the line the error starts in. - * - * @return int Error start line - * @phpstan-return -1|positive-int - */ - public function getStartLine(): int { - return $this->attributes['startLine'] ?? -1; - } - - /** - * Gets the line the error ends in. - * - * @return int Error end line - * @phpstan-return -1|positive-int - */ - public function getEndLine(): int { - return $this->attributes['endLine'] ?? -1; - } - - /** - * Gets the attributes of the node/token the error occurred at. - * - * @return array - */ - public function getAttributes(): array { - return $this->attributes; - } - - /** - * Sets the attributes of the node/token the error occurred at. - * - * @param array $attributes - */ - public function setAttributes(array $attributes): void { - $this->attributes = $attributes; - $this->updateMessage(); - } - - /** - * Sets the line of the PHP file the error occurred in. - * - * @param string $message Error message - */ - public function setRawMessage(string $message): void { - $this->rawMessage = $message; - $this->updateMessage(); - } - - /** - * Sets the line the error starts in. - * - * @param int $line Error start line - */ - public function setStartLine(int $line): void { - $this->attributes['startLine'] = $line; - $this->updateMessage(); - } - - /** - * Returns whether the error has start and end column information. - * - * For column information enable the startFilePos and endFilePos in the lexer options. - */ - public function hasColumnInfo(): bool { - return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']); - } - - /** - * Gets the start column (1-based) into the line where the error started. - * - * @param string $code Source code of the file - */ - public function getStartColumn(string $code): int { - if (!$this->hasColumnInfo()) { - throw new \RuntimeException('Error does not have column information'); - } - - return $this->toColumn($code, $this->attributes['startFilePos']); - } - - /** - * Gets the end column (1-based) into the line where the error ended. - * - * @param string $code Source code of the file - */ - public function getEndColumn(string $code): int { - if (!$this->hasColumnInfo()) { - throw new \RuntimeException('Error does not have column information'); - } - - return $this->toColumn($code, $this->attributes['endFilePos']); - } - - /** - * Formats message including line and column information. - * - * @param string $code Source code associated with the error, for calculation of the columns - * - * @return string Formatted message - */ - public function getMessageWithColumnInfo(string $code): string { - return sprintf( - '%s from %d:%d to %d:%d', $this->getRawMessage(), - $this->getStartLine(), $this->getStartColumn($code), - $this->getEndLine(), $this->getEndColumn($code) - ); - } - - /** - * Converts a file offset into a column. - * - * @param string $code Source code that $pos indexes into - * @param int $pos 0-based position in $code - * - * @return int 1-based column (relative to start of line) - */ - private function toColumn(string $code, int $pos): int { - if ($pos > strlen($code)) { - throw new \RuntimeException('Invalid position information'); - } - - $lineStartPos = strrpos($code, "\n", $pos - strlen($code)); - if (false === $lineStartPos) { - $lineStartPos = -1; - } - - return $pos - $lineStartPos; - } - - /** - * Updates the exception message after a change to rawMessage or rawLine. - */ - protected function updateMessage(): void { - $this->message = $this->rawMessage; - - if (-1 === $this->getStartLine()) { - $this->message .= ' on unknown line'; - } else { - $this->message .= ' on line ' . $this->getStartLine(); - } - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php b/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php deleted file mode 100644 index 51ad730..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler.php +++ /dev/null @@ -1,12 +0,0 @@ -errors[] = $error; - } - - /** - * Get collected errors. - * - * @return Error[] - */ - public function getErrors(): array { - return $this->errors; - } - - /** - * Check whether there are any errors. - */ - public function hasErrors(): bool { - return !empty($this->errors); - } - - /** - * Reset/clear collected errors. - */ - public function clearErrors(): void { - $this->errors = []; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php b/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php deleted file mode 100644 index dff33dd..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/ErrorHandler/Throwing.php +++ /dev/null @@ -1,17 +0,0 @@ -type = $type; - $this->old = $old; - $this->new = $new; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php deleted file mode 100644 index 253e175..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Internal/Differ.php +++ /dev/null @@ -1,178 +0,0 @@ -isEqual = $isEqual; - } - - /** - * Calculate diff (edit script) from $old to $new. - * - * @param T[] $old Original array - * @param T[] $new New array - * - * @return DiffElem[] Diff (edit script) - */ - public function diff(array $old, array $new): array { - $old = \array_values($old); - $new = \array_values($new); - list($trace, $x, $y) = $this->calculateTrace($old, $new); - return $this->extractDiff($trace, $x, $y, $old, $new); - } - - /** - * Calculate diff, including "replace" operations. - * - * If a sequence of remove operations is followed by the same number of add operations, these - * will be coalesced into replace operations. - * - * @param T[] $old Original array - * @param T[] $new New array - * - * @return DiffElem[] Diff (edit script), including replace operations - */ - public function diffWithReplacements(array $old, array $new): array { - return $this->coalesceReplacements($this->diff($old, $new)); - } - - /** - * @param T[] $old - * @param T[] $new - * @return array{array>, int, int} - */ - private function calculateTrace(array $old, array $new): array { - $n = \count($old); - $m = \count($new); - $max = $n + $m; - $v = [1 => 0]; - $trace = []; - for ($d = 0; $d <= $max; $d++) { - $trace[] = $v; - for ($k = -$d; $k <= $d; $k += 2) { - if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) { - $x = $v[$k + 1]; - } else { - $x = $v[$k - 1] + 1; - } - - $y = $x - $k; - while ($x < $n && $y < $m && ($this->isEqual)($old[$x], $new[$y])) { - $x++; - $y++; - } - - $v[$k] = $x; - if ($x >= $n && $y >= $m) { - return [$trace, $x, $y]; - } - } - } - throw new \Exception('Should not happen'); - } - - /** - * @param array> $trace - * @param T[] $old - * @param T[] $new - * @return DiffElem[] - */ - private function extractDiff(array $trace, int $x, int $y, array $old, array $new): array { - $result = []; - for ($d = \count($trace) - 1; $d >= 0; $d--) { - $v = $trace[$d]; - $k = $x - $y; - - if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) { - $prevK = $k + 1; - } else { - $prevK = $k - 1; - } - - $prevX = $v[$prevK]; - $prevY = $prevX - $prevK; - - while ($x > $prevX && $y > $prevY) { - $result[] = new DiffElem(DiffElem::TYPE_KEEP, $old[$x - 1], $new[$y - 1]); - $x--; - $y--; - } - - if ($d === 0) { - break; - } - - while ($x > $prevX) { - $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $old[$x - 1], null); - $x--; - } - - while ($y > $prevY) { - $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $new[$y - 1]); - $y--; - } - } - return array_reverse($result); - } - - /** - * Coalesce equal-length sequences of remove+add into a replace operation. - * - * @param DiffElem[] $diff - * @return DiffElem[] - */ - private function coalesceReplacements(array $diff): array { - $newDiff = []; - $c = \count($diff); - for ($i = 0; $i < $c; $i++) { - $diffType = $diff[$i]->type; - if ($diffType !== DiffElem::TYPE_REMOVE) { - $newDiff[] = $diff[$i]; - continue; - } - - $j = $i; - while ($j < $c && $diff[$j]->type === DiffElem::TYPE_REMOVE) { - $j++; - } - - $k = $j; - while ($k < $c && $diff[$k]->type === DiffElem::TYPE_ADD) { - $k++; - } - - if ($j - $i === $k - $j) { - $len = $j - $i; - for ($n = 0; $n < $len; $n++) { - $newDiff[] = new DiffElem( - DiffElem::TYPE_REPLACE, $diff[$i + $n]->old, $diff[$j + $n]->new - ); - } - } else { - for (; $i < $k; $i++) { - $newDiff[] = $diff[$i]; - } - } - $i = $k - 1; - } - return $newDiff; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php deleted file mode 100644 index b30a99a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.php +++ /dev/null @@ -1,71 +0,0 @@ - $attributes Attributes - */ - public function __construct( - array $attrGroups, int $flags, array $args, ?Node\Name $extends, array $implements, - array $stmts, array $attributes - ) { - parent::__construct($attributes); - $this->attrGroups = $attrGroups; - $this->flags = $flags; - $this->args = $args; - $this->extends = $extends; - $this->implements = $implements; - $this->stmts = $stmts; - } - - public static function fromNewNode(Expr\New_ $newNode): self { - $class = $newNode->class; - assert($class instanceof Node\Stmt\Class_); - // We don't assert that $class->name is null here, to allow consumers to assign unique names - // to anonymous classes for their own purposes. We simplify ignore the name here. - return new self( - $class->attrGroups, $class->flags, $newNode->args, $class->extends, $class->implements, - $class->stmts, $newNode->getAttributes() - ); - } - - public function getType(): string { - return 'Expr_PrintableNewAnonClass'; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'flags', 'args', 'extends', 'implements', 'stmts']; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php deleted file mode 100644 index 36022d0..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenPolyfill.php +++ /dev/null @@ -1,237 +0,0 @@ -= 80000) { - class TokenPolyfill extends \PhpToken { - } - return; -} - -/** - * This is a polyfill for the PhpToken class introduced in PHP 8.0. We do not actually polyfill - * PhpToken, because composer might end up picking a different polyfill implementation, which does - * not meet our requirements. - * - * @internal - */ -class TokenPolyfill { - /** @var int The ID of the token. Either a T_* constant of a character code < 256. */ - public int $id; - /** @var string The textual content of the token. */ - public string $text; - /** @var int The 1-based starting line of the token (or -1 if unknown). */ - public int $line; - /** @var int The 0-based starting position of the token (or -1 if unknown). */ - public int $pos; - - /** @var array Tokens ignored by the PHP parser. */ - private const IGNORABLE_TOKENS = [ - \T_WHITESPACE => true, - \T_COMMENT => true, - \T_DOC_COMMENT => true, - \T_OPEN_TAG => true, - ]; - - /** @var array Tokens that may be part of a T_NAME_* identifier. */ - private static array $identifierTokens; - - /** - * Create a Token with the given ID and text, as well optional line and position information. - */ - final public function __construct(int $id, string $text, int $line = -1, int $pos = -1) { - $this->id = $id; - $this->text = $text; - $this->line = $line; - $this->pos = $pos; - } - - /** - * Get the name of the token. For single-char tokens this will be the token character. - * Otherwise it will be a T_* style name, or null if the token ID is unknown. - */ - public function getTokenName(): ?string { - if ($this->id < 256) { - return \chr($this->id); - } - - $name = token_name($this->id); - return $name === 'UNKNOWN' ? null : $name; - } - - /** - * Check whether the token is of the given kind. The kind may be either an integer that matches - * the token ID, a string that matches the token text, or an array of integers/strings. In the - * latter case, the function returns true if any of the kinds in the array match. - * - * @param int|string|(int|string)[] $kind - */ - public function is($kind): bool { - if (\is_int($kind)) { - return $this->id === $kind; - } - if (\is_string($kind)) { - return $this->text === $kind; - } - if (\is_array($kind)) { - foreach ($kind as $entry) { - if (\is_int($entry)) { - if ($this->id === $entry) { - return true; - } - } elseif (\is_string($entry)) { - if ($this->text === $entry) { - return true; - } - } else { - throw new \TypeError( - 'Argument #1 ($kind) must only have elements of type string|int, ' . - gettype($entry) . ' given'); - } - } - return false; - } - throw new \TypeError( - 'Argument #1 ($kind) must be of type string|int|array, ' .gettype($kind) . ' given'); - } - - /** - * Check whether this token would be ignored by the PHP parser. Returns true for T_WHITESPACE, - * T_COMMENT, T_DOC_COMMENT and T_OPEN_TAG, and false for everything else. - */ - public function isIgnorable(): bool { - return isset(self::IGNORABLE_TOKENS[$this->id]); - } - - /** - * Return the textual content of the token. - */ - public function __toString(): string { - return $this->text; - } - - /** - * Tokenize the given source code and return an array of tokens. - * - * This performs certain canonicalizations to match the PHP 8.0 token format: - * * Bad characters are represented using T_BAD_CHARACTER rather than omitted. - * * T_COMMENT does not include trailing newlines, instead the newline is part of a following - * T_WHITESPACE token. - * * Namespaced names are represented using T_NAME_* tokens. - * - * @return static[] - */ - public static function tokenize(string $code, int $flags = 0): array { - self::init(); - - $tokens = []; - $line = 1; - $pos = 0; - $origTokens = \token_get_all($code, $flags); - - $numTokens = \count($origTokens); - for ($i = 0; $i < $numTokens; $i++) { - $token = $origTokens[$i]; - if (\is_string($token)) { - if (\strlen($token) === 2) { - // b" and B" are tokenized as single-char tokens, even though they aren't. - $tokens[] = new static(\ord('"'), $token, $line, $pos); - $pos += 2; - } else { - $tokens[] = new static(\ord($token), $token, $line, $pos); - $pos++; - } - } else { - $id = $token[0]; - $text = $token[1]; - - // Emulate PHP 8.0 comment format, which does not include trailing whitespace anymore. - if ($id === \T_COMMENT && \substr($text, 0, 2) !== '/*' && - \preg_match('/(\r\n|\n|\r)$/D', $text, $matches) - ) { - $trailingNewline = $matches[0]; - $text = \substr($text, 0, -\strlen($trailingNewline)); - $tokens[] = new static($id, $text, $line, $pos); - $pos += \strlen($text); - - if ($i + 1 < $numTokens && $origTokens[$i + 1][0] === \T_WHITESPACE) { - // Move trailing newline into following T_WHITESPACE token, if it already exists. - $origTokens[$i + 1][1] = $trailingNewline . $origTokens[$i + 1][1]; - $origTokens[$i + 1][2]--; - } else { - // Otherwise, we need to create a new T_WHITESPACE token. - $tokens[] = new static(\T_WHITESPACE, $trailingNewline, $line, $pos); - $line++; - $pos += \strlen($trailingNewline); - } - continue; - } - - // Emulate PHP 8.0 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and - // T_STRING into a single token. - if (($id === \T_NS_SEPARATOR || isset(self::$identifierTokens[$id]))) { - $newText = $text; - $lastWasSeparator = $id === \T_NS_SEPARATOR; - for ($j = $i + 1; $j < $numTokens; $j++) { - if ($lastWasSeparator) { - if (!isset(self::$identifierTokens[$origTokens[$j][0]])) { - break; - } - $lastWasSeparator = false; - } else { - if ($origTokens[$j][0] !== \T_NS_SEPARATOR) { - break; - } - $lastWasSeparator = true; - } - $newText .= $origTokens[$j][1]; - } - if ($lastWasSeparator) { - // Trailing separator is not part of the name. - $j--; - $newText = \substr($newText, 0, -1); - } - if ($j > $i + 1) { - if ($id === \T_NS_SEPARATOR) { - $id = \T_NAME_FULLY_QUALIFIED; - } elseif ($id === \T_NAMESPACE) { - $id = \T_NAME_RELATIVE; - } else { - $id = \T_NAME_QUALIFIED; - } - $tokens[] = new static($id, $newText, $line, $pos); - $pos += \strlen($newText); - $i = $j - 1; - continue; - } - } - - $tokens[] = new static($id, $text, $line, $pos); - $line += \substr_count($text, "\n"); - $pos += \strlen($text); - } - } - return $tokens; - } - - /** Initialize private static state needed by tokenize(). */ - private static function init(): void { - if (isset(self::$identifierTokens)) { - return; - } - - // Based on semi_reserved production. - self::$identifierTokens = \array_fill_keys([ - \T_STRING, - \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC, \T_READONLY, - \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND, - \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE, - \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH, - \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO, - \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT, - \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS, - \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN, - \T_MATCH, - ], true); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php b/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php deleted file mode 100644 index c02844a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Internal/TokenStream.php +++ /dev/null @@ -1,275 +0,0 @@ -tokens = $tokens; - $this->indentMap = $this->calcIndentMap(); - } - - /** - * Whether the given position is immediately surrounded by parenthesis. - * - * @param int $startPos Start position - * @param int $endPos End position - */ - public function haveParens(int $startPos, int $endPos): bool { - return $this->haveTokenImmediatelyBefore($startPos, '(') - && $this->haveTokenImmediatelyAfter($endPos, ')'); - } - - /** - * Whether the given position is immediately surrounded by braces. - * - * @param int $startPos Start position - * @param int $endPos End position - */ - public function haveBraces(int $startPos, int $endPos): bool { - return ($this->haveTokenImmediatelyBefore($startPos, '{') - || $this->haveTokenImmediatelyBefore($startPos, T_CURLY_OPEN)) - && $this->haveTokenImmediatelyAfter($endPos, '}'); - } - - /** - * Check whether the position is directly preceded by a certain token type. - * - * During this check whitespace and comments are skipped. - * - * @param int $pos Position before which the token should occur - * @param int|string $expectedTokenType Token to check for - * - * @return bool Whether the expected token was found - */ - public function haveTokenImmediatelyBefore(int $pos, $expectedTokenType): bool { - $tokens = $this->tokens; - $pos--; - for (; $pos >= 0; $pos--) { - $token = $tokens[$pos]; - if ($token->is($expectedTokenType)) { - return true; - } - if (!$token->isIgnorable()) { - break; - } - } - return false; - } - - /** - * Check whether the position is directly followed by a certain token type. - * - * During this check whitespace and comments are skipped. - * - * @param int $pos Position after which the token should occur - * @param int|string $expectedTokenType Token to check for - * - * @return bool Whether the expected token was found - */ - public function haveTokenImmediatelyAfter(int $pos, $expectedTokenType): bool { - $tokens = $this->tokens; - $pos++; - for ($c = \count($tokens); $pos < $c; $pos++) { - $token = $tokens[$pos]; - if ($token->is($expectedTokenType)) { - return true; - } - if (!$token->isIgnorable()) { - break; - } - } - return false; - } - - /** @param int|string|(int|string)[] $skipTokenType */ - public function skipLeft(int $pos, $skipTokenType): int { - $tokens = $this->tokens; - - $pos = $this->skipLeftWhitespace($pos); - if ($skipTokenType === \T_WHITESPACE) { - return $pos; - } - - if (!$tokens[$pos]->is($skipTokenType)) { - // Shouldn't happen. The skip token MUST be there - throw new \Exception('Encountered unexpected token'); - } - $pos--; - - return $this->skipLeftWhitespace($pos); - } - - /** @param int|string|(int|string)[] $skipTokenType */ - public function skipRight(int $pos, $skipTokenType): int { - $tokens = $this->tokens; - - $pos = $this->skipRightWhitespace($pos); - if ($skipTokenType === \T_WHITESPACE) { - return $pos; - } - - if (!$tokens[$pos]->is($skipTokenType)) { - // Shouldn't happen. The skip token MUST be there - throw new \Exception('Encountered unexpected token'); - } - $pos++; - - return $this->skipRightWhitespace($pos); - } - - /** - * Return first non-whitespace token position smaller or equal to passed position. - * - * @param int $pos Token position - * @return int Non-whitespace token position - */ - public function skipLeftWhitespace(int $pos): int { - $tokens = $this->tokens; - for (; $pos >= 0; $pos--) { - if (!$tokens[$pos]->isIgnorable()) { - break; - } - } - return $pos; - } - - /** - * Return first non-whitespace position greater or equal to passed position. - * - * @param int $pos Token position - * @return int Non-whitespace token position - */ - public function skipRightWhitespace(int $pos): int { - $tokens = $this->tokens; - for ($count = \count($tokens); $pos < $count; $pos++) { - if (!$tokens[$pos]->isIgnorable()) { - break; - } - } - return $pos; - } - - /** @param int|string|(int|string)[] $findTokenType */ - public function findRight(int $pos, $findTokenType): int { - $tokens = $this->tokens; - for ($count = \count($tokens); $pos < $count; $pos++) { - if ($tokens[$pos]->is($findTokenType)) { - return $pos; - } - } - return -1; - } - - /** - * Whether the given position range contains a certain token type. - * - * @param int $startPos Starting position (inclusive) - * @param int $endPos Ending position (exclusive) - * @param int|string $tokenType Token type to look for - * @return bool Whether the token occurs in the given range - */ - public function haveTokenInRange(int $startPos, int $endPos, $tokenType): bool { - $tokens = $this->tokens; - for ($pos = $startPos; $pos < $endPos; $pos++) { - if ($tokens[$pos]->is($tokenType)) { - return true; - } - } - return false; - } - - public function haveTagInRange(int $startPos, int $endPos): bool { - return $this->haveTokenInRange($startPos, $endPos, \T_OPEN_TAG) - || $this->haveTokenInRange($startPos, $endPos, \T_CLOSE_TAG); - } - - /** - * Get indentation before token position. - * - * @param int $pos Token position - * - * @return int Indentation depth (in spaces) - */ - public function getIndentationBefore(int $pos): int { - return $this->indentMap[$pos]; - } - - /** - * Get the code corresponding to a token offset range, optionally adjusted for indentation. - * - * @param int $from Token start position (inclusive) - * @param int $to Token end position (exclusive) - * @param int $indent By how much the code should be indented (can be negative as well) - * - * @return string Code corresponding to token range, adjusted for indentation - */ - public function getTokenCode(int $from, int $to, int $indent): string { - $tokens = $this->tokens; - $result = ''; - for ($pos = $from; $pos < $to; $pos++) { - $token = $tokens[$pos]; - $id = $token->id; - $text = $token->text; - if ($id === \T_CONSTANT_ENCAPSED_STRING || $id === \T_ENCAPSED_AND_WHITESPACE) { - $result .= $text; - } else { - // TODO Handle non-space indentation - if ($indent < 0) { - $result .= str_replace("\n" . str_repeat(" ", -$indent), "\n", $text); - } elseif ($indent > 0) { - $result .= str_replace("\n", "\n" . str_repeat(" ", $indent), $text); - } else { - $result .= $text; - } - } - } - return $result; - } - - /** - * Precalculate the indentation at every token position. - * - * @return int[] Token position to indentation map - */ - private function calcIndentMap(): array { - $indentMap = []; - $indent = 0; - foreach ($this->tokens as $i => $token) { - $indentMap[] = $indent; - - if ($token->id === \T_WHITESPACE) { - $content = $token->text; - $newlinePos = \strrpos($content, "\n"); - if (false !== $newlinePos) { - $indent = \strlen($content) - $newlinePos - 1; - } elseif ($i === 1 && $this->tokens[0]->id === \T_OPEN_TAG && - $this->tokens[0]->text[\strlen($this->tokens[0]->text) - 1] === "\n") { - // Special case: Newline at the end of opening tag followed by whitespace. - $indent = \strlen($content); - } - } - } - - // Add a sentinel for one past end of the file - $indentMap[] = $indent; - - return $indentMap; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php b/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php deleted file mode 100644 index 7be4142..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/JsonDecoder.php +++ /dev/null @@ -1,108 +0,0 @@ -[] Node type to reflection class map */ - private array $reflectionClassCache; - - /** @return mixed */ - public function decode(string $json) { - $value = json_decode($json, true); - if (json_last_error()) { - throw new \RuntimeException('JSON decoding error: ' . json_last_error_msg()); - } - - return $this->decodeRecursive($value); - } - - /** - * @param mixed $value - * @return mixed - */ - private function decodeRecursive($value) { - if (\is_array($value)) { - if (isset($value['nodeType'])) { - if ($value['nodeType'] === 'Comment' || $value['nodeType'] === 'Comment_Doc') { - return $this->decodeComment($value); - } - return $this->decodeNode($value); - } - return $this->decodeArray($value); - } - return $value; - } - - private function decodeArray(array $array): array { - $decodedArray = []; - foreach ($array as $key => $value) { - $decodedArray[$key] = $this->decodeRecursive($value); - } - return $decodedArray; - } - - private function decodeNode(array $value): Node { - $nodeType = $value['nodeType']; - if (!\is_string($nodeType)) { - throw new \RuntimeException('Node type must be a string'); - } - - $reflectionClass = $this->reflectionClassFromNodeType($nodeType); - $node = $reflectionClass->newInstanceWithoutConstructor(); - - if (isset($value['attributes'])) { - if (!\is_array($value['attributes'])) { - throw new \RuntimeException('Attributes must be an array'); - } - - $node->setAttributes($this->decodeArray($value['attributes'])); - } - - foreach ($value as $name => $subNode) { - if ($name === 'nodeType' || $name === 'attributes') { - continue; - } - - $node->$name = $this->decodeRecursive($subNode); - } - - return $node; - } - - private function decodeComment(array $value): Comment { - $className = $value['nodeType'] === 'Comment' ? Comment::class : Comment\Doc::class; - if (!isset($value['text'])) { - throw new \RuntimeException('Comment must have text'); - } - - return new $className( - $value['text'], - $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1, - $value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1 - ); - } - - /** @return \ReflectionClass */ - private function reflectionClassFromNodeType(string $nodeType): \ReflectionClass { - if (!isset($this->reflectionClassCache[$nodeType])) { - $className = $this->classNameFromNodeType($nodeType); - $this->reflectionClassCache[$nodeType] = new \ReflectionClass($className); - } - return $this->reflectionClassCache[$nodeType]; - } - - /** @return class-string */ - private function classNameFromNodeType(string $nodeType): string { - $className = 'PhpParser\\Node\\' . strtr($nodeType, '_', '\\'); - if (class_exists($className)) { - return $className; - } - - $className .= '_'; - if (class_exists($className)) { - return $className; - } - - throw new \RuntimeException("Unknown node type \"$nodeType\""); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer.php deleted file mode 100644 index 5e2ece9..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer.php +++ /dev/null @@ -1,116 +0,0 @@ -postprocessTokens($tokens, $errorHandler); - - if (false !== $scream) { - ini_set('xdebug.scream', $scream); - } - - return $tokens; - } - - private function handleInvalidCharacter(Token $token, ErrorHandler $errorHandler): void { - $chr = $token->text; - if ($chr === "\0") { - // PHP cuts error message after null byte, so need special case - $errorMsg = 'Unexpected null byte'; - } else { - $errorMsg = sprintf( - 'Unexpected character "%s" (ASCII %d)', $chr, ord($chr) - ); - } - - $errorHandler->handleError(new Error($errorMsg, [ - 'startLine' => $token->line, - 'endLine' => $token->line, - 'startFilePos' => $token->pos, - 'endFilePos' => $token->pos, - ])); - } - - private function isUnterminatedComment(Token $token): bool { - return $token->is([\T_COMMENT, \T_DOC_COMMENT]) - && substr($token->text, 0, 2) === '/*' - && substr($token->text, -2) !== '*/'; - } - - /** - * @param list $tokens - */ - protected function postprocessTokens(array &$tokens, ErrorHandler $errorHandler): void { - // This function reports errors (bad characters and unterminated comments) in the token - // array, and performs certain canonicalizations: - // * Use PHP 8.1 T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG and - // T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG tokens used to disambiguate intersection types. - // * Add a sentinel token with ID 0. - - $numTokens = \count($tokens); - if ($numTokens === 0) { - // Empty input edge case: Just add the sentinel token. - $tokens[] = new Token(0, "\0", 1, 0); - return; - } - - for ($i = 0; $i < $numTokens; $i++) { - $token = $tokens[$i]; - if ($token->id === \T_BAD_CHARACTER) { - $this->handleInvalidCharacter($token, $errorHandler); - } - - if ($token->id === \ord('&')) { - $next = $i + 1; - while (isset($tokens[$next]) && $tokens[$next]->id === \T_WHITESPACE) { - $next++; - } - $followedByVarOrVarArg = isset($tokens[$next]) && - $tokens[$next]->is([\T_VARIABLE, \T_ELLIPSIS]); - $token->id = $followedByVarOrVarArg - ? \T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG - : \T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG; - } - } - - // Check for unterminated comment - $lastToken = $tokens[$numTokens - 1]; - if ($this->isUnterminatedComment($lastToken)) { - $errorHandler->handleError(new Error('Unterminated comment', [ - 'startLine' => $lastToken->line, - 'endLine' => $lastToken->getEndLine(), - 'startFilePos' => $lastToken->pos, - 'endFilePos' => $lastToken->getEndPos(), - ])); - } - - // Add sentinel token. - $tokens[] = new Token(0, "\0", $lastToken->getEndLine(), $lastToken->getEndPos()); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php deleted file mode 100644 index c9b3b6d..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/Emulative.php +++ /dev/null @@ -1,226 +0,0 @@ - */ - private array $emulators = []; - - private PhpVersion $targetPhpVersion; - - private PhpVersion $hostPhpVersion; - - /** - * @param PhpVersion|null $phpVersion PHP version to emulate. Defaults to newest supported. - */ - public function __construct(?PhpVersion $phpVersion = null) { - $this->targetPhpVersion = $phpVersion ?? PhpVersion::getNewestSupported(); - $this->hostPhpVersion = PhpVersion::getHostVersion(); - - $emulators = [ - new MatchTokenEmulator(), - new NullsafeTokenEmulator(), - new AttributeEmulator(), - new EnumTokenEmulator(), - new ReadonlyTokenEmulator(), - new ExplicitOctalEmulator(), - new ReadonlyFunctionTokenEmulator(), - new PropertyTokenEmulator(), - new AsymmetricVisibilityTokenEmulator(), - ]; - - // Collect emulators that are relevant for the PHP version we're running - // and the PHP version we're targeting for emulation. - foreach ($emulators as $emulator) { - $emulatorPhpVersion = $emulator->getPhpVersion(); - if ($this->isForwardEmulationNeeded($emulatorPhpVersion)) { - $this->emulators[] = $emulator; - } elseif ($this->isReverseEmulationNeeded($emulatorPhpVersion)) { - $this->emulators[] = new ReverseEmulator($emulator); - } - } - } - - public function tokenize(string $code, ?ErrorHandler $errorHandler = null): array { - $emulators = array_filter($this->emulators, function ($emulator) use ($code) { - return $emulator->isEmulationNeeded($code); - }); - - if (empty($emulators)) { - // Nothing to emulate, yay - return parent::tokenize($code, $errorHandler); - } - - if ($errorHandler === null) { - $errorHandler = new ErrorHandler\Throwing(); - } - - $this->patches = []; - foreach ($emulators as $emulator) { - $code = $emulator->preprocessCode($code, $this->patches); - } - - $collector = new ErrorHandler\Collecting(); - $tokens = parent::tokenize($code, $collector); - $this->sortPatches(); - $tokens = $this->fixupTokens($tokens); - - $errors = $collector->getErrors(); - if (!empty($errors)) { - $this->fixupErrors($errors); - foreach ($errors as $error) { - $errorHandler->handleError($error); - } - } - - foreach ($emulators as $emulator) { - $tokens = $emulator->emulate($code, $tokens); - } - - return $tokens; - } - - private function isForwardEmulationNeeded(PhpVersion $emulatorPhpVersion): bool { - return $this->hostPhpVersion->older($emulatorPhpVersion) - && $this->targetPhpVersion->newerOrEqual($emulatorPhpVersion); - } - - private function isReverseEmulationNeeded(PhpVersion $emulatorPhpVersion): bool { - return $this->hostPhpVersion->newerOrEqual($emulatorPhpVersion) - && $this->targetPhpVersion->older($emulatorPhpVersion); - } - - private function sortPatches(): void { - // Patches may be contributed by different emulators. - // Make sure they are sorted by increasing patch position. - usort($this->patches, function ($p1, $p2) { - return $p1[0] <=> $p2[0]; - }); - } - - /** - * @param list $tokens - * @return list - */ - private function fixupTokens(array $tokens): array { - if (\count($this->patches) === 0) { - return $tokens; - } - - // Load first patch - $patchIdx = 0; - list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; - - // We use a manual loop over the tokens, because we modify the array on the fly - $posDelta = 0; - $lineDelta = 0; - for ($i = 0, $c = \count($tokens); $i < $c; $i++) { - $token = $tokens[$i]; - $pos = $token->pos; - $token->pos += $posDelta; - $token->line += $lineDelta; - $localPosDelta = 0; - $len = \strlen($token->text); - while ($patchPos >= $pos && $patchPos < $pos + $len) { - $patchTextLen = \strlen($patchText); - if ($patchType === 'remove') { - if ($patchPos === $pos && $patchTextLen === $len) { - // Remove token entirely - array_splice($tokens, $i, 1, []); - $i--; - $c--; - } else { - // Remove from token string - $token->text = substr_replace( - $token->text, '', $patchPos - $pos + $localPosDelta, $patchTextLen - ); - $localPosDelta -= $patchTextLen; - } - $lineDelta -= \substr_count($patchText, "\n"); - } elseif ($patchType === 'add') { - // Insert into the token string - $token->text = substr_replace( - $token->text, $patchText, $patchPos - $pos + $localPosDelta, 0 - ); - $localPosDelta += $patchTextLen; - $lineDelta += \substr_count($patchText, "\n"); - } elseif ($patchType === 'replace') { - // Replace inside the token string - $token->text = substr_replace( - $token->text, $patchText, $patchPos - $pos + $localPosDelta, $patchTextLen - ); - } else { - assert(false); - } - - // Fetch the next patch - $patchIdx++; - if ($patchIdx >= \count($this->patches)) { - // No more patches. However, we still need to adjust position. - $patchPos = \PHP_INT_MAX; - break; - } - - list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; - } - - $posDelta += $localPosDelta; - } - return $tokens; - } - - /** - * Fixup line and position information in errors. - * - * @param Error[] $errors - */ - private function fixupErrors(array $errors): void { - foreach ($errors as $error) { - $attrs = $error->getAttributes(); - - $posDelta = 0; - $lineDelta = 0; - foreach ($this->patches as $patch) { - list($patchPos, $patchType, $patchText) = $patch; - if ($patchPos >= $attrs['startFilePos']) { - // No longer relevant - break; - } - - if ($patchType === 'add') { - $posDelta += strlen($patchText); - $lineDelta += substr_count($patchText, "\n"); - } elseif ($patchType === 'remove') { - $posDelta -= strlen($patchText); - $lineDelta -= substr_count($patchText, "\n"); - } - } - - $attrs['startFilePos'] += $posDelta; - $attrs['endFilePos'] += $posDelta; - $attrs['startLine'] += $lineDelta; - $attrs['endLine'] += $lineDelta; - $error->setAttributes($attrs); - } - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php deleted file mode 100644 index 084bb75..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.php +++ /dev/null @@ -1,93 +0,0 @@ - \T_PUBLIC_SET, - \T_PROTECTED => \T_PROTECTED_SET, - \T_PRIVATE => \T_PRIVATE_SET, - ]; - for ($i = 0, $c = count($tokens); $i < $c; ++$i) { - $token = $tokens[$i]; - if (isset($map[$token->id]) && $i + 3 < $c && $tokens[$i + 1]->text === '(' && - $tokens[$i + 2]->id === \T_STRING && \strtolower($tokens[$i + 2]->text) === 'set' && - $tokens[$i + 3]->text === ')' && - $this->isKeywordContext($tokens, $i) - ) { - array_splice($tokens, $i, 4, [ - new Token( - $map[$token->id], $token->text . '(' . $tokens[$i + 2]->text . ')', - $token->line, $token->pos), - ]); - $c -= 3; - } - } - - return $tokens; - } - - public function reverseEmulate(string $code, array $tokens): array { - $reverseMap = [ - \T_PUBLIC_SET => \T_PUBLIC, - \T_PROTECTED_SET => \T_PROTECTED, - \T_PRIVATE_SET => \T_PRIVATE, - ]; - for ($i = 0, $c = count($tokens); $i < $c; ++$i) { - $token = $tokens[$i]; - if (isset($reverseMap[$token->id]) && - \preg_match('/(public|protected|private)\((set)\)/i', $token->text, $matches) - ) { - [, $modifier, $set] = $matches; - $modifierLen = \strlen($modifier); - array_splice($tokens, $i, 1, [ - new Token($reverseMap[$token->id], $modifier, $token->line, $token->pos), - new Token(\ord('('), '(', $token->line, $token->pos + $modifierLen), - new Token(\T_STRING, $set, $token->line, $token->pos + $modifierLen + 1), - new Token(\ord(')'), ')', $token->line, $token->pos + $modifierLen + 4), - ]); - $i += 3; - $c += 3; - } - } - - return $tokens; - } - - /** @param Token[] $tokens */ - protected function isKeywordContext(array $tokens, int $pos): bool { - $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos); - if ($prevToken === null) { - return false; - } - return $prevToken->id !== \T_OBJECT_OPERATOR - && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR; - } - - /** @param Token[] $tokens */ - private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token { - for ($i = $start - 1; $i >= 0; --$i) { - if ($tokens[$i]->id === T_WHITESPACE) { - continue; - } - - return $tokens[$i]; - } - - return null; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php deleted file mode 100644 index 2c12f33..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.php +++ /dev/null @@ -1,49 +0,0 @@ -text === '#' && isset($tokens[$i + 1]) && $tokens[$i + 1]->text === '[') { - array_splice($tokens, $i, 2, [ - new Token(\T_ATTRIBUTE, '#[', $token->line, $token->pos), - ]); - $c--; - continue; - } - } - - return $tokens; - } - - public function reverseEmulate(string $code, array $tokens): array { - // TODO - return $tokens; - } - - public function preprocessCode(string $code, array &$patches): string { - $pos = 0; - while (false !== $pos = strpos($code, '#[', $pos)) { - // Replace #[ with %[ - $code[$pos] = '%'; - $patches[] = [$pos, 'replace', '#']; - $pos += 2; - } - return $code; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php deleted file mode 100644 index 5418f52..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.php +++ /dev/null @@ -1,26 +0,0 @@ -id === \T_WHITESPACE - && $tokens[$pos + 2]->id === \T_STRING; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php deleted file mode 100644 index 9cadf42..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ExplicitOctalEmulator.php +++ /dev/null @@ -1,45 +0,0 @@ -id == \T_LNUMBER && $token->text === '0' && - isset($tokens[$i + 1]) && $tokens[$i + 1]->id == \T_STRING && - preg_match('/[oO][0-7]+(?:_[0-7]+)*/', $tokens[$i + 1]->text) - ) { - $tokenKind = $this->resolveIntegerOrFloatToken($tokens[$i + 1]->text); - array_splice($tokens, $i, 2, [ - new Token($tokenKind, '0' . $tokens[$i + 1]->text, $token->line, $token->pos), - ]); - $c--; - } - } - return $tokens; - } - - private function resolveIntegerOrFloatToken(string $str): int { - $str = substr($str, 1); - $str = str_replace('_', '', $str); - $num = octdec($str); - return is_float($num) ? \T_DNUMBER : \T_LNUMBER; - } - - public function reverseEmulate(string $code, array $tokens): array { - // Explicit octals were not legal code previously, don't bother. - return $tokens; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php deleted file mode 100644 index 066e7cd..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.php +++ /dev/null @@ -1,60 +0,0 @@ -getKeywordString()) !== false; - } - - /** @param Token[] $tokens */ - protected function isKeywordContext(array $tokens, int $pos): bool { - $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos); - if ($prevToken === null) { - return false; - } - return $prevToken->id !== \T_OBJECT_OPERATOR - && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR; - } - - public function emulate(string $code, array $tokens): array { - $keywordString = $this->getKeywordString(); - foreach ($tokens as $i => $token) { - if ($token->id === T_STRING && strtolower($token->text) === $keywordString - && $this->isKeywordContext($tokens, $i)) { - $token->id = $this->getKeywordToken(); - } - } - - return $tokens; - } - - /** @param Token[] $tokens */ - private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token { - for ($i = $start - 1; $i >= 0; --$i) { - if ($tokens[$i]->id === T_WHITESPACE) { - continue; - } - - return $tokens[$i]; - } - - return null; - } - - public function reverseEmulate(string $code, array $tokens): array { - $keywordToken = $this->getKeywordToken(); - foreach ($tokens as $token) { - if ($token->id === $keywordToken) { - $token->id = \T_STRING; - } - } - - return $tokens; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php deleted file mode 100644 index 0fa5fbc..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.php +++ /dev/null @@ -1,19 +0,0 @@ -') !== false; - } - - public function emulate(string $code, array $tokens): array { - // We need to manually iterate and manage a count because we'll change - // the tokens array on the way - for ($i = 0, $c = count($tokens); $i < $c; ++$i) { - $token = $tokens[$i]; - if ($token->text === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1]->id === \T_OBJECT_OPERATOR) { - array_splice($tokens, $i, 2, [ - new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos), - ]); - $c--; - continue; - } - - // Handle ?-> inside encapsed string. - if ($token->id === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1]) - && $tokens[$i - 1]->id === \T_VARIABLE - && preg_match('/^\?->([a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*)/', $token->text, $matches) - ) { - $replacement = [ - new Token(\T_NULLSAFE_OBJECT_OPERATOR, '?->', $token->line, $token->pos), - new Token(\T_STRING, $matches[1], $token->line, $token->pos + 3), - ]; - $matchLen = \strlen($matches[0]); - if ($matchLen !== \strlen($token->text)) { - $replacement[] = new Token( - \T_ENCAPSED_AND_WHITESPACE, - \substr($token->text, $matchLen), - $token->line, $token->pos + $matchLen - ); - } - array_splice($tokens, $i, 1, $replacement); - $c += \count($replacement) - 1; - continue; - } - } - - return $tokens; - } - - public function reverseEmulate(string $code, array $tokens): array { - // ?-> was not valid code previously, don't bother. - return $tokens; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php deleted file mode 100644 index 71b7fc2..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.php +++ /dev/null @@ -1,19 +0,0 @@ -text === '(' || - ($tokens[$pos + 1]->id === \T_WHITESPACE && - isset($tokens[$pos + 2]) && - $tokens[$pos + 2]->text === '('))); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php deleted file mode 100644 index 851b5c4..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.php +++ /dev/null @@ -1,37 +0,0 @@ -emulator = $emulator; - } - - public function getPhpVersion(): PhpVersion { - return $this->emulator->getPhpVersion(); - } - - public function isEmulationNeeded(string $code): bool { - return $this->emulator->isEmulationNeeded($code); - } - - public function emulate(string $code, array $tokens): array { - return $this->emulator->reverseEmulate($code, $tokens); - } - - public function reverseEmulate(string $code, array $tokens): array { - return $this->emulator->emulate($code, $tokens); - } - - public function preprocessCode(string $code, array &$patches): string { - return $code; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php b/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php deleted file mode 100644 index fec2f19..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.php +++ /dev/null @@ -1,30 +0,0 @@ - 'public', - self::PROTECTED => 'protected', - self::PRIVATE => 'private', - self::STATIC => 'static', - self::ABSTRACT => 'abstract', - self::FINAL => 'final', - self::READONLY => 'readonly', - self::PUBLIC_SET => 'public(set)', - self::PROTECTED_SET => 'protected(set)', - self::PRIVATE_SET => 'private(set)', - ]; - - public static function toString(int $modifier): string { - if (!isset(self::TO_STRING_MAP[$modifier])) { - throw new \InvalidArgumentException("Unknown modifier $modifier"); - } - return self::TO_STRING_MAP[$modifier]; - } - - private static function isValidModifier(int $modifier): bool { - $isPow2 = ($modifier & ($modifier - 1)) == 0 && $modifier != 0; - return $isPow2 && $modifier <= self::PRIVATE_SET; - } - - /** - * @internal - */ - public static function verifyClassModifier(int $a, int $b): void { - assert(self::isValidModifier($b)); - if (($a & $b) != 0) { - throw new Error( - 'Multiple ' . self::toString($b) . ' modifiers are not allowed'); - } - - if ($a & 48 && $b & 48) { - throw new Error('Cannot use the final modifier on an abstract class'); - } - } - - /** - * @internal - */ - public static function verifyModifier(int $a, int $b): void { - assert(self::isValidModifier($b)); - if (($a & Modifiers::VISIBILITY_MASK && $b & Modifiers::VISIBILITY_MASK) || - ($a & Modifiers::VISIBILITY_SET_MASK && $b & Modifiers::VISIBILITY_SET_MASK) - ) { - throw new Error('Multiple access type modifiers are not allowed'); - } - - if (($a & $b) != 0) { - throw new Error( - 'Multiple ' . self::toString($b) . ' modifiers are not allowed'); - } - - if ($a & 48 && $b & 48) { - throw new Error('Cannot use the final modifier on an abstract class member'); - } - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NameContext.php b/vendor/nikic/php-parser/lib/PhpParser/NameContext.php deleted file mode 100644 index 2265ecc..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NameContext.php +++ /dev/null @@ -1,284 +0,0 @@ - [aliasName => originalName]] */ - protected array $aliases = []; - - /** @var Name[][] Same as $aliases but preserving original case */ - protected array $origAliases = []; - - /** @var ErrorHandler Error handler */ - protected ErrorHandler $errorHandler; - - /** - * Create a name context. - * - * @param ErrorHandler $errorHandler Error handling used to report errors - */ - public function __construct(ErrorHandler $errorHandler) { - $this->errorHandler = $errorHandler; - } - - /** - * Start a new namespace. - * - * This also resets the alias table. - * - * @param Name|null $namespace Null is the global namespace - */ - public function startNamespace(?Name $namespace = null): void { - $this->namespace = $namespace; - $this->origAliases = $this->aliases = [ - Stmt\Use_::TYPE_NORMAL => [], - Stmt\Use_::TYPE_FUNCTION => [], - Stmt\Use_::TYPE_CONSTANT => [], - ]; - } - - /** - * Add an alias / import. - * - * @param Name $name Original name - * @param string $aliasName Aliased name - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* - * @param array $errorAttrs Attributes to use to report an error - */ - public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []): void { - // Constant names are case sensitive, everything else case insensitive - if ($type === Stmt\Use_::TYPE_CONSTANT) { - $aliasLookupName = $aliasName; - } else { - $aliasLookupName = strtolower($aliasName); - } - - if (isset($this->aliases[$type][$aliasLookupName])) { - $typeStringMap = [ - Stmt\Use_::TYPE_NORMAL => '', - Stmt\Use_::TYPE_FUNCTION => 'function ', - Stmt\Use_::TYPE_CONSTANT => 'const ', - ]; - - $this->errorHandler->handleError(new Error( - sprintf( - 'Cannot use %s%s as %s because the name is already in use', - $typeStringMap[$type], $name, $aliasName - ), - $errorAttrs - )); - return; - } - - $this->aliases[$type][$aliasLookupName] = $name; - $this->origAliases[$type][$aliasName] = $name; - } - - /** - * Get current namespace. - * - * @return null|Name Namespace (or null if global namespace) - */ - public function getNamespace(): ?Name { - return $this->namespace; - } - - /** - * Get resolved name. - * - * @param Name $name Name to resolve - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_{FUNCTION|CONSTANT} - * - * @return null|Name Resolved name, or null if static resolution is not possible - */ - public function getResolvedName(Name $name, int $type): ?Name { - // don't resolve special class names - if ($type === Stmt\Use_::TYPE_NORMAL && $name->isSpecialClassName()) { - if (!$name->isUnqualified()) { - $this->errorHandler->handleError(new Error( - sprintf("'\\%s' is an invalid class name", $name->toString()), - $name->getAttributes() - )); - } - return $name; - } - - // fully qualified names are already resolved - if ($name->isFullyQualified()) { - return $name; - } - - // Try to resolve aliases - if (null !== $resolvedName = $this->resolveAlias($name, $type)) { - return $resolvedName; - } - - if ($type !== Stmt\Use_::TYPE_NORMAL && $name->isUnqualified()) { - if (null === $this->namespace) { - // outside of a namespace unaliased unqualified is same as fully qualified - return new FullyQualified($name, $name->getAttributes()); - } - - // Cannot resolve statically - return null; - } - - // if no alias exists prepend current namespace - return FullyQualified::concat($this->namespace, $name, $name->getAttributes()); - } - - /** - * Get resolved class name. - * - * @param Name $name Class ame to resolve - * - * @return Name Resolved name - */ - public function getResolvedClassName(Name $name): Name { - return $this->getResolvedName($name, Stmt\Use_::TYPE_NORMAL); - } - - /** - * Get possible ways of writing a fully qualified name (e.g., by making use of aliases). - * - * @param string $name Fully-qualified name (without leading namespace separator) - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* - * - * @return Name[] Possible representations of the name - */ - public function getPossibleNames(string $name, int $type): array { - $lcName = strtolower($name); - - if ($type === Stmt\Use_::TYPE_NORMAL) { - // self, parent and static must always be unqualified - if ($lcName === "self" || $lcName === "parent" || $lcName === "static") { - return [new Name($name)]; - } - } - - // Collect possible ways to write this name, starting with the fully-qualified name - $possibleNames = [new FullyQualified($name)]; - - if (null !== $nsRelativeName = $this->getNamespaceRelativeName($name, $lcName, $type)) { - // Make sure there is no alias that makes the normally namespace-relative name - // into something else - if (null === $this->resolveAlias($nsRelativeName, $type)) { - $possibleNames[] = $nsRelativeName; - } - } - - // Check for relevant namespace use statements - foreach ($this->origAliases[Stmt\Use_::TYPE_NORMAL] as $alias => $orig) { - $lcOrig = $orig->toLowerString(); - if (0 === strpos($lcName, $lcOrig . '\\')) { - $possibleNames[] = new Name($alias . substr($name, strlen($lcOrig))); - } - } - - // Check for relevant type-specific use statements - foreach ($this->origAliases[$type] as $alias => $orig) { - if ($type === Stmt\Use_::TYPE_CONSTANT) { - // Constants are complicated-sensitive - $normalizedOrig = $this->normalizeConstName($orig->toString()); - if ($normalizedOrig === $this->normalizeConstName($name)) { - $possibleNames[] = new Name($alias); - } - } else { - // Everything else is case-insensitive - if ($orig->toLowerString() === $lcName) { - $possibleNames[] = new Name($alias); - } - } - } - - return $possibleNames; - } - - /** - * Get shortest representation of this fully-qualified name. - * - * @param string $name Fully-qualified name (without leading namespace separator) - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* - * - * @return Name Shortest representation - */ - public function getShortName(string $name, int $type): Name { - $possibleNames = $this->getPossibleNames($name, $type); - - // Find shortest name - $shortestName = null; - $shortestLength = \INF; - foreach ($possibleNames as $possibleName) { - $length = strlen($possibleName->toCodeString()); - if ($length < $shortestLength) { - $shortestName = $possibleName; - $shortestLength = $length; - } - } - - return $shortestName; - } - - private function resolveAlias(Name $name, int $type): ?FullyQualified { - $firstPart = $name->getFirst(); - - if ($name->isQualified()) { - // resolve aliases for qualified names, always against class alias table - $checkName = strtolower($firstPart); - if (isset($this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName])) { - $alias = $this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName]; - return FullyQualified::concat($alias, $name->slice(1), $name->getAttributes()); - } - } elseif ($name->isUnqualified()) { - // constant aliases are case-sensitive, function aliases case-insensitive - $checkName = $type === Stmt\Use_::TYPE_CONSTANT ? $firstPart : strtolower($firstPart); - if (isset($this->aliases[$type][$checkName])) { - // resolve unqualified aliases - return new FullyQualified($this->aliases[$type][$checkName], $name->getAttributes()); - } - } - - // No applicable aliases - return null; - } - - private function getNamespaceRelativeName(string $name, string $lcName, int $type): ?Name { - if (null === $this->namespace) { - return new Name($name); - } - - if ($type === Stmt\Use_::TYPE_CONSTANT) { - // The constants true/false/null always resolve to the global symbols, even inside a - // namespace, so they may be used without qualification - if ($lcName === "true" || $lcName === "false" || $lcName === "null") { - return new Name($name); - } - } - - $namespacePrefix = strtolower($this->namespace . '\\'); - if (0 === strpos($lcName, $namespacePrefix)) { - return new Name(substr($name, strlen($namespacePrefix))); - } - - return null; - } - - private function normalizeConstName(string $name): string { - $nsSep = strrpos($name, '\\'); - if (false === $nsSep) { - return $name; - } - - // Constants have case-insensitive namespace and case-sensitive short-name - $ns = substr($name, 0, $nsSep); - $shortName = substr($name, $nsSep + 1); - return strtolower($ns) . '\\' . $shortName; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node.php b/vendor/nikic/php-parser/lib/PhpParser/Node.php deleted file mode 100644 index fd2a9b7..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node.php +++ /dev/null @@ -1,150 +0,0 @@ - - */ - public function getAttributes(): array; - - /** - * Replaces all the attributes of this node. - * - * @param array $attributes - */ - public function setAttributes(array $attributes): void; -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php deleted file mode 100644 index 6680efa..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Arg.php +++ /dev/null @@ -1,44 +0,0 @@ - $attributes Additional attributes - * @param Identifier|null $name Parameter name (for named parameters) - */ - public function __construct( - Expr $value, bool $byRef = false, bool $unpack = false, array $attributes = [], - ?Identifier $name = null - ) { - $this->attributes = $attributes; - $this->name = $name; - $this->value = $value; - $this->byRef = $byRef; - $this->unpack = $unpack; - } - - public function getSubNodeNames(): array { - return ['name', 'value', 'byRef', 'unpack']; - } - - public function getType(): string { - return 'Arg'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php deleted file mode 100644 index fa1cff5..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/ArrayItem.php +++ /dev/null @@ -1,43 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $value, ?Expr $key = null, bool $byRef = false, array $attributes = [], bool $unpack = false) { - $this->attributes = $attributes; - $this->key = $key; - $this->value = $value; - $this->byRef = $byRef; - $this->unpack = $unpack; - } - - public function getSubNodeNames(): array { - return ['key', 'value', 'byRef', 'unpack']; - } - - public function getType(): string { - return 'ArrayItem'; - } -} - -// @deprecated compatibility alias -class_alias(ArrayItem::class, Expr\ArrayItem::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php deleted file mode 100644 index 9d89243..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Attribute.php +++ /dev/null @@ -1,33 +0,0 @@ - Attribute arguments */ - public array $args; - - /** - * @param Node\Name $name Attribute name - * @param list $args Attribute arguments - * @param array $attributes Additional node attributes - */ - public function __construct(Name $name, array $args = [], array $attributes = []) { - $this->attributes = $attributes; - $this->name = $name; - $this->args = $args; - } - - public function getSubNodeNames(): array { - return ['name', 'args']; - } - - public function getType(): string { - return 'Attribute'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php b/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php deleted file mode 100644 index b9eb588..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/AttributeGroup.php +++ /dev/null @@ -1,27 +0,0 @@ - $attributes Additional node attributes - */ - public function __construct(array $attrs, array $attributes = []) { - $this->attributes = $attributes; - $this->attrs = $attrs; - } - - public function getSubNodeNames(): array { - return ['attrs']; - } - - public function getType(): string { - return 'AttributeGroup'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php deleted file mode 100644 index e313280..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/ClosureUse.php +++ /dev/null @@ -1,36 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr\Variable $var, bool $byRef = false, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->byRef = $byRef; - } - - public function getSubNodeNames(): array { - return ['var', 'byRef']; - } - - public function getType(): string { - return 'ClosureUse'; - } -} - -// @deprecated compatibility alias -class_alias(ClosureUse::class, Expr\ClosureUse::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php deleted file mode 100644 index 05a5e5e..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/ComplexType.php +++ /dev/null @@ -1,13 +0,0 @@ - $attributes Additional attributes - */ - public function __construct($name, Expr $value, array $attributes = []) { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->value = $value; - } - - public function getSubNodeNames(): array { - return ['name', 'value']; - } - - public function getType(): string { - return 'Const'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php deleted file mode 100644 index 55c1fe4..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/DeclareItem.php +++ /dev/null @@ -1,37 +0,0 @@ -value pair node. - * - * @param string|Node\Identifier $key Key - * @param Node\Expr $value Value - * @param array $attributes Additional attributes - */ - public function __construct($key, Node\Expr $value, array $attributes = []) { - $this->attributes = $attributes; - $this->key = \is_string($key) ? new Node\Identifier($key) : $key; - $this->value = $value; - } - - public function getSubNodeNames(): array { - return ['key', 'value']; - } - - public function getType(): string { - return 'DeclareItem'; - } -} - -// @deprecated compatibility alias -class_alias(DeclareItem::class, Stmt\DeclareDeclare::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php deleted file mode 100644 index 8b7dbb6..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr.php +++ /dev/null @@ -1,8 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, ?Expr $dim = null, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->dim = $dim; - } - - public function getSubNodeNames(): array { - return ['var', 'dim']; - } - - public function getType(): string { - return 'Expr_ArrayDimFetch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php deleted file mode 100644 index 490ac93..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrayItem.php +++ /dev/null @@ -1,3 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $items = [], array $attributes = []) { - $this->attributes = $attributes; - $this->items = $items; - } - - public function getSubNodeNames(): array { - return ['items']; - } - - public function getType(): string { - return 'Expr_Array'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php deleted file mode 100644 index 0e98ce9..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ArrowFunction.php +++ /dev/null @@ -1,84 +0,0 @@ - false : Whether the closure is static - * 'byRef' => false : Whether to return by reference - * 'params' => array() : Parameters - * 'returnType' => null : Return type - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct(array $subNodes, array $attributes = []) { - $this->attributes = $attributes; - $this->static = $subNodes['static'] ?? false; - $this->byRef = $subNodes['byRef'] ?? false; - $this->params = $subNodes['params'] ?? []; - $this->returnType = $subNodes['returnType'] ?? null; - $this->expr = $subNodes['expr']; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'static', 'byRef', 'params', 'returnType', 'expr']; - } - - public function returnsByRef(): bool { - return $this->byRef; - } - - public function getParams(): array { - return $this->params; - } - - public function getReturnType() { - return $this->returnType; - } - - public function getAttrGroups(): array { - return $this->attrGroups; - } - - /** - * @return Node\Stmt\Return_[] - */ - public function getStmts(): array { - return [new Node\Stmt\Return_($this->expr)]; - } - - public function getType(): string { - return 'Expr_ArrowFunction'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php deleted file mode 100644 index dcbf84d..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Assign.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['var', 'expr']; - } - - public function getType(): string { - return 'Expr_Assign'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php deleted file mode 100644 index 5209a64..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['var', 'expr']; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php deleted file mode 100644 index 4f3623f..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.php +++ /dev/null @@ -1,11 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['var', 'expr']; - } - - public function getType(): string { - return 'Expr_AssignRef'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php deleted file mode 100644 index 1b92bd4..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp.php +++ /dev/null @@ -1,37 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $left, Expr $right, array $attributes = []) { - $this->attributes = $attributes; - $this->left = $left; - $this->right = $right; - } - - public function getSubNodeNames(): array { - return ['left', 'right']; - } - - /** - * Get the operator sigil for this binary operation. - * - * In the case there are multiple possible sigils for an operator, this method does not - * necessarily return the one used in the parsed code. - */ - abstract public function getOperatorSigil(): string; -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php deleted file mode 100644 index 5930c54..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.php +++ /dev/null @@ -1,15 +0,0 @@ -'; - } - - public function getType(): string { - return 'Expr_BinaryOp_Greater'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php deleted file mode 100644 index 4d440b1..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.php +++ /dev/null @@ -1,15 +0,0 @@ -='; - } - - public function getType(): string { - return 'Expr_BinaryOp_GreaterOrEqual'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php deleted file mode 100644 index e25d17c..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.php +++ /dev/null @@ -1,15 +0,0 @@ ->'; - } - - public function getType(): string { - return 'Expr_BinaryOp_ShiftRight'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php deleted file mode 100644 index 01e9b23..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.php +++ /dev/null @@ -1,15 +0,0 @@ -'; - } - - public function getType(): string { - return 'Expr_BinaryOp_Spaceship'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php deleted file mode 100644 index b7175a7..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BitwiseNot.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_BitwiseNot'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php deleted file mode 100644 index c66d233..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/BooleanNot.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_BooleanNot'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php deleted file mode 100644 index 2af2245..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/CallLike.php +++ /dev/null @@ -1,35 +0,0 @@ - - */ - abstract public function getRawArgs(): array; - - /** - * Returns whether this call expression is actually a first class callable. - */ - public function isFirstClassCallable(): bool { - $rawArgs = $this->getRawArgs(); - return count($rawArgs) === 1 && current($rawArgs) instanceof VariadicPlaceholder; - } - - /** - * Assert that this is not a first-class callable and return only ordinary Args. - * - * @return Arg[] - */ - public function getArgs(): array { - assert(!$this->isFirstClassCallable()); - return $this->getRawArgs(); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php deleted file mode 100644 index c2751de..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast.php +++ /dev/null @@ -1,25 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php deleted file mode 100644 index 471cb82..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Cast/Array_.php +++ /dev/null @@ -1,11 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node $class, $name, array $attributes = []) { - $this->attributes = $attributes; - $this->class = $class; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - - public function getSubNodeNames(): array { - return ['class', 'name']; - } - - public function getType(): string { - return 'Expr_ClassConstFetch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php deleted file mode 100644 index d85bc9a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Clone_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_Clone'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php deleted file mode 100644 index 0680446..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Closure.php +++ /dev/null @@ -1,86 +0,0 @@ - false : Whether the closure is static - * 'byRef' => false : Whether to return by reference - * 'params' => array(): Parameters - * 'uses' => array(): use()s - * 'returnType' => null : Return type - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attributes groups - * @param array $attributes Additional attributes - */ - public function __construct(array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->static = $subNodes['static'] ?? false; - $this->byRef = $subNodes['byRef'] ?? false; - $this->params = $subNodes['params'] ?? []; - $this->uses = $subNodes['uses'] ?? []; - $this->returnType = $subNodes['returnType'] ?? null; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'static', 'byRef', 'params', 'uses', 'returnType', 'stmts']; - } - - public function returnsByRef(): bool { - return $this->byRef; - } - - public function getParams(): array { - return $this->params; - } - - public function getReturnType() { - return $this->returnType; - } - - /** @return Node\Stmt[] */ - public function getStmts(): array { - return $this->stmts; - } - - public function getAttrGroups(): array { - return $this->attrGroups; - } - - public function getType(): string { - return 'Expr_Closure'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php deleted file mode 100644 index 681ff31..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ClosureUse.php +++ /dev/null @@ -1,3 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Name $name, array $attributes = []) { - $this->attributes = $attributes; - $this->name = $name; - } - - public function getSubNodeNames(): array { - return ['name']; - } - - public function getType(): string { - return 'Expr_ConstFetch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php deleted file mode 100644 index d2f3050..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Empty_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_Empty'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php deleted file mode 100644 index 43010ac..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Error.php +++ /dev/null @@ -1,30 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $attributes = []) { - $this->attributes = $attributes; - } - - public function getSubNodeNames(): array { - return []; - } - - public function getType(): string { - return 'Expr_Error'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php deleted file mode 100644 index 32625a2..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_ErrorSuppress'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php deleted file mode 100644 index 5120b1b..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Eval_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_Eval'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php deleted file mode 100644 index cf00246..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Exit_.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(?Expr $expr = null, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_Exit'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php deleted file mode 100644 index 0b85840..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/FuncCall.php +++ /dev/null @@ -1,38 +0,0 @@ - Arguments */ - public array $args; - - /** - * Constructs a function call node. - * - * @param Node\Name|Expr $name Function name - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Node $name, array $args = [], array $attributes = []) { - $this->attributes = $attributes; - $this->name = $name; - $this->args = $args; - } - - public function getSubNodeNames(): array { - return ['name', 'args']; - } - - public function getType(): string { - return 'Expr_FuncCall'; - } - - public function getRawArgs(): array { - return $this->args; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php deleted file mode 100644 index e1187b1..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Include_.php +++ /dev/null @@ -1,38 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, int $type, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - $this->type = $type; - } - - public function getSubNodeNames(): array { - return ['expr', 'type']; - } - - public function getType(): string { - return 'Expr_Include'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php deleted file mode 100644 index a2783cb..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Instanceof_.php +++ /dev/null @@ -1,35 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, Node $class, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - $this->class = $class; - } - - public function getSubNodeNames(): array { - return ['expr', 'class']; - } - - public function getType(): string { - return 'Expr_Instanceof'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php deleted file mode 100644 index 4f80fff..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Isset_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $vars, array $attributes = []) { - $this->attributes = $attributes; - $this->vars = $vars; - } - - public function getSubNodeNames(): array { - return ['vars']; - } - - public function getType(): string { - return 'Expr_Isset'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php deleted file mode 100644 index 496b7b3..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/List_.php +++ /dev/null @@ -1,34 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $items, array $attributes = []) { - $this->attributes = $attributes; - $this->items = $items; - } - - public function getSubNodeNames(): array { - return ['items']; - } - - public function getType(): string { - return 'Expr_List'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php deleted file mode 100644 index cd028a2..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Match_.php +++ /dev/null @@ -1,32 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $arms = [], array $attributes = []) { - $this->attributes = $attributes; - $this->cond = $cond; - $this->arms = $arms; - } - - public function getSubNodeNames(): array { - return ['cond', 'arms']; - } - - public function getType(): string { - return 'Expr_Match'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php deleted file mode 100644 index 2703c75..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/MethodCall.php +++ /dev/null @@ -1,45 +0,0 @@ - Arguments */ - public array $args; - - /** - * Constructs a function call node. - * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Expr $var, $name, array $args = [], array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->args = $args; - } - - public function getSubNodeNames(): array { - return ['var', 'name', 'args']; - } - - public function getType(): string { - return 'Expr_MethodCall'; - } - - public function getRawArgs(): array { - return $this->args; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php deleted file mode 100644 index eedaaa1..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/New_.php +++ /dev/null @@ -1,40 +0,0 @@ - Arguments */ - public array $args; - - /** - * Constructs a function call node. - * - * @param Node\Name|Expr|Node\Stmt\Class_ $class Class name (or class node for anonymous classes) - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Node $class, array $args = [], array $attributes = []) { - $this->attributes = $attributes; - $this->class = $class; - $this->args = $args; - } - - public function getSubNodeNames(): array { - return ['class', 'args']; - } - - public function getType(): string { - return 'Expr_New'; - } - - public function getRawArgs(): array { - return $this->args; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php deleted file mode 100644 index a151f71..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.php +++ /dev/null @@ -1,45 +0,0 @@ - Arguments */ - public array $args; - - /** - * Constructs a nullsafe method call node. - * - * @param Expr $var Variable holding object - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Expr $var, $name, array $args = [], array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->args = $args; - } - - public function getSubNodeNames(): array { - return ['var', 'name', 'args']; - } - - public function getType(): string { - return 'Expr_NullsafeMethodCall'; - } - - public function getRawArgs(): array { - return $this->args; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php deleted file mode 100644 index 6f73a16..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.php +++ /dev/null @@ -1,35 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, $name, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - - public function getSubNodeNames(): array { - return ['var', 'name']; - } - - public function getType(): string { - return 'Expr_NullsafePropertyFetch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php deleted file mode 100644 index 3dca8fd..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostDec.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - } - - public function getSubNodeNames(): array { - return ['var']; - } - - public function getType(): string { - return 'Expr_PostDec'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php deleted file mode 100644 index bc990c3..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PostInc.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - } - - public function getSubNodeNames(): array { - return ['var']; - } - - public function getType(): string { - return 'Expr_PostInc'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php deleted file mode 100644 index 2f16873..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreDec.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - } - - public function getSubNodeNames(): array { - return ['var']; - } - - public function getType(): string { - return 'Expr_PreDec'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php deleted file mode 100644 index fd455f5..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PreInc.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - } - - public function getSubNodeNames(): array { - return ['var']; - } - - public function getType(): string { - return 'Expr_PreInc'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php deleted file mode 100644 index 6057476..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Print_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_Print'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php deleted file mode 100644 index 8c416a8..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/PropertyFetch.php +++ /dev/null @@ -1,35 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $var, $name, array $attributes = []) { - $this->attributes = $attributes; - $this->var = $var; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - - public function getSubNodeNames(): array { - return ['var', 'name']; - } - - public function getType(): string { - return 'Expr_PropertyFetch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php deleted file mode 100644 index e400351..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/ShellExec.php +++ /dev/null @@ -1,30 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $parts, array $attributes = []) { - $this->attributes = $attributes; - $this->parts = $parts; - } - - public function getSubNodeNames(): array { - return ['parts']; - } - - public function getType(): string { - return 'Expr_ShellExec'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php deleted file mode 100644 index 707f34b..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticCall.php +++ /dev/null @@ -1,45 +0,0 @@ - Arguments */ - public array $args; - - /** - * Constructs a static method call node. - * - * @param Node\Name|Expr $class Class name - * @param string|Identifier|Expr $name Method name - * @param array $args Arguments - * @param array $attributes Additional attributes - */ - public function __construct(Node $class, $name, array $args = [], array $attributes = []) { - $this->attributes = $attributes; - $this->class = $class; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->args = $args; - } - - public function getSubNodeNames(): array { - return ['class', 'name', 'args']; - } - - public function getType(): string { - return 'Expr_StaticCall'; - } - - public function getRawArgs(): array { - return $this->args; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php deleted file mode 100644 index 4836a65..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.php +++ /dev/null @@ -1,36 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node $class, $name, array $attributes = []) { - $this->attributes = $attributes; - $this->class = $class; - $this->name = \is_string($name) ? new VarLikeIdentifier($name) : $name; - } - - public function getSubNodeNames(): array { - return ['class', 'name']; - } - - public function getType(): string { - return 'Expr_StaticPropertyFetch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php deleted file mode 100644 index d4837e6..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Ternary.php +++ /dev/null @@ -1,37 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $cond, ?Expr $if, Expr $else, array $attributes = []) { - $this->attributes = $attributes; - $this->cond = $cond; - $this->if = $if; - $this->else = $else; - } - - public function getSubNodeNames(): array { - return ['cond', 'if', 'else']; - } - - public function getType(): string { - return 'Expr_Ternary'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php deleted file mode 100644 index ee49f83..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Throw_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_Throw'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php deleted file mode 100644 index cd06f74..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryMinus.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_UnaryMinus'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php deleted file mode 100644 index 1b44f7b..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/UnaryPlus.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_UnaryPlus'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php deleted file mode 100644 index bab7492..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Variable.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct($name, array $attributes = []) { - $this->attributes = $attributes; - $this->name = $name; - } - - public function getSubNodeNames(): array { - return ['name']; - } - - public function getType(): string { - return 'Expr_Variable'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php deleted file mode 100644 index 5cff88f..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/YieldFrom.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Expr_YieldFrom'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php deleted file mode 100644 index bd81e69..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Expr/Yield_.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(?Expr $value = null, ?Expr $key = null, array $attributes = []) { - $this->attributes = $attributes; - $this->key = $key; - $this->value = $value; - } - - public function getSubNodeNames(): array { - return ['key', 'value']; - } - - public function getType(): string { - return 'Expr_Yield'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php deleted file mode 100644 index 58f653a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/FunctionLike.php +++ /dev/null @@ -1,40 +0,0 @@ - */ - private static array $specialClassNames = [ - 'self' => true, - 'parent' => true, - 'static' => true, - ]; - - /** - * Constructs an identifier node. - * - * @param string $name Identifier as string - * @param array $attributes Additional attributes - */ - public function __construct(string $name, array $attributes = []) { - if ($name === '') { - throw new \InvalidArgumentException('Identifier name cannot be empty'); - } - - $this->attributes = $attributes; - $this->name = $name; - } - - public function getSubNodeNames(): array { - return ['name']; - } - - /** - * Get identifier as string. - * - * @psalm-return non-empty-string - * @return string Identifier as string. - */ - public function toString(): string { - return $this->name; - } - - /** - * Get lowercased identifier as string. - * - * @psalm-return non-empty-string - * @return string Lowercased identifier as string - */ - public function toLowerString(): string { - return strtolower($this->name); - } - - /** - * Checks whether the identifier is a special class name (self, parent or static). - * - * @return bool Whether identifier is a special class name - */ - public function isSpecialClassName(): bool { - return isset(self::$specialClassNames[strtolower($this->name)]); - } - - /** - * Get identifier as string. - * - * @psalm-return non-empty-string - * @return string Identifier as string - */ - public function __toString(): string { - return $this->name; - } - - public function getType(): string { - return 'Identifier'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php b/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php deleted file mode 100644 index 576dac4..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/InterpolatedStringPart.php +++ /dev/null @@ -1,32 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(string $value, array $attributes = []) { - $this->attributes = $attributes; - $this->value = $value; - } - - public function getSubNodeNames(): array { - return ['value']; - } - - public function getType(): string { - return 'InterpolatedStringPart'; - } -} - -// @deprecated compatibility alias -class_alias(InterpolatedStringPart::class, Scalar\EncapsedStringPart::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php deleted file mode 100644 index 3b39cf1..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/IntersectionType.php +++ /dev/null @@ -1,27 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $types, array $attributes = []) { - $this->attributes = $attributes; - $this->types = $types; - } - - public function getSubNodeNames(): array { - return ['types']; - } - - public function getType(): string { - return 'IntersectionType'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php b/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php deleted file mode 100644 index 2927f02..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/MatchArm.php +++ /dev/null @@ -1,30 +0,0 @@ - */ - public ?array $conds; - /** @var Node\Expr */ - public Expr $body; - - /** - * @param null|list $conds - */ - public function __construct(?array $conds, Node\Expr $body, array $attributes = []) { - $this->conds = $conds; - $this->body = $body; - $this->attributes = $attributes; - } - - public function getSubNodeNames(): array { - return ['conds', 'body']; - } - - public function getType(): string { - return 'MatchArm'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php deleted file mode 100644 index aa2b90e..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Name.php +++ /dev/null @@ -1,278 +0,0 @@ - */ - private static array $specialClassNames = [ - 'self' => true, - 'parent' => true, - 'static' => true, - ]; - - /** - * Constructs a name node. - * - * @param string|string[]|self $name Name as string, part array or Name instance (copy ctor) - * @param array $attributes Additional attributes - */ - final public function __construct($name, array $attributes = []) { - $this->attributes = $attributes; - $this->name = self::prepareName($name); - } - - public function getSubNodeNames(): array { - return ['name']; - } - - /** - * Get parts of name (split by the namespace separator). - * - * @psalm-return non-empty-list - * @return string[] Parts of name - */ - public function getParts(): array { - return \explode('\\', $this->name); - } - - /** - * Gets the first part of the name, i.e. everything before the first namespace separator. - * - * @return string First part of the name - */ - public function getFirst(): string { - if (false !== $pos = \strpos($this->name, '\\')) { - return \substr($this->name, 0, $pos); - } - return $this->name; - } - - /** - * Gets the last part of the name, i.e. everything after the last namespace separator. - * - * @return string Last part of the name - */ - public function getLast(): string { - if (false !== $pos = \strrpos($this->name, '\\')) { - return \substr($this->name, $pos + 1); - } - return $this->name; - } - - /** - * Checks whether the name is unqualified. (E.g. Name) - * - * @return bool Whether the name is unqualified - */ - public function isUnqualified(): bool { - return false === \strpos($this->name, '\\'); - } - - /** - * Checks whether the name is qualified. (E.g. Name\Name) - * - * @return bool Whether the name is qualified - */ - public function isQualified(): bool { - return false !== \strpos($this->name, '\\'); - } - - /** - * Checks whether the name is fully qualified. (E.g. \Name) - * - * @return bool Whether the name is fully qualified - */ - public function isFullyQualified(): bool { - return false; - } - - /** - * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name) - * - * @return bool Whether the name is relative - */ - public function isRelative(): bool { - return false; - } - - /** - * Returns a string representation of the name itself, without taking the name type into - * account (e.g., not including a leading backslash for fully qualified names). - * - * @psalm-return non-empty-string - * @return string String representation - */ - public function toString(): string { - return $this->name; - } - - /** - * Returns a string representation of the name as it would occur in code (e.g., including - * leading backslash for fully qualified names. - * - * @psalm-return non-empty-string - * @return string String representation - */ - public function toCodeString(): string { - return $this->toString(); - } - - /** - * Returns lowercased string representation of the name, without taking the name type into - * account (e.g., no leading backslash for fully qualified names). - * - * @psalm-return non-empty-string - * @return string Lowercased string representation - */ - public function toLowerString(): string { - return strtolower($this->name); - } - - /** - * Checks whether the identifier is a special class name (self, parent or static). - * - * @return bool Whether identifier is a special class name - */ - public function isSpecialClassName(): bool { - return isset(self::$specialClassNames[strtolower($this->name)]); - } - - /** - * Returns a string representation of the name by imploding the namespace parts with the - * namespace separator. - * - * @psalm-return non-empty-string - * @return string String representation - */ - public function __toString(): string { - return $this->name; - } - - /** - * Gets a slice of a name (similar to array_slice). - * - * This method returns a new instance of the same type as the original and with the same - * attributes. - * - * If the slice is empty, null is returned. The null value will be correctly handled in - * concatenations using concat(). - * - * Offset and length have the same meaning as in array_slice(). - * - * @param int $offset Offset to start the slice at (may be negative) - * @param int|null $length Length of the slice (may be negative) - * - * @return static|null Sliced name - */ - public function slice(int $offset, ?int $length = null) { - if ($offset === 1 && $length === null) { - // Short-circuit the common case. - if (false !== $pos = \strpos($this->name, '\\')) { - return new static(\substr($this->name, $pos + 1)); - } - return null; - } - - $parts = \explode('\\', $this->name); - $numParts = \count($parts); - - $realOffset = $offset < 0 ? $offset + $numParts : $offset; - if ($realOffset < 0 || $realOffset > $numParts) { - throw new \OutOfBoundsException(sprintf('Offset %d is out of bounds', $offset)); - } - - if (null === $length) { - $realLength = $numParts - $realOffset; - } else { - $realLength = $length < 0 ? $length + $numParts - $realOffset : $length; - if ($realLength < 0 || $realLength > $numParts - $realOffset) { - throw new \OutOfBoundsException(sprintf('Length %d is out of bounds', $length)); - } - } - - if ($realLength === 0) { - // Empty slice is represented as null - return null; - } - - return new static(array_slice($parts, $realOffset, $realLength), $this->attributes); - } - - /** - * Concatenate two names, yielding a new Name instance. - * - * The type of the generated instance depends on which class this method is called on, for - * example Name\FullyQualified::concat() will yield a Name\FullyQualified instance. - * - * If one of the arguments is null, a new instance of the other name will be returned. If both - * arguments are null, null will be returned. As such, writing - * Name::concat($namespace, $shortName) - * where $namespace is a Name node or null will work as expected. - * - * @param string|string[]|self|null $name1 The first name - * @param string|string[]|self|null $name2 The second name - * @param array $attributes Attributes to assign to concatenated name - * - * @return static|null Concatenated name - */ - public static function concat($name1, $name2, array $attributes = []) { - if (null === $name1 && null === $name2) { - return null; - } - if (null === $name1) { - return new static($name2, $attributes); - } - if (null === $name2) { - return new static($name1, $attributes); - } else { - return new static( - self::prepareName($name1) . '\\' . self::prepareName($name2), $attributes - ); - } - } - - /** - * Prepares a (string, array or Name node) name for use in name changing methods by converting - * it to a string. - * - * @param string|string[]|self $name Name to prepare - * - * @psalm-return non-empty-string - * @return string Prepared name - */ - private static function prepareName($name): string { - if (\is_string($name)) { - if ('' === $name) { - throw new \InvalidArgumentException('Name cannot be empty'); - } - - return $name; - } - if (\is_array($name)) { - if (empty($name)) { - throw new \InvalidArgumentException('Name cannot be empty'); - } - - return implode('\\', $name); - } - if ($name instanceof self) { - return $name->name; - } - - throw new \InvalidArgumentException( - 'Expected string, array of parts or Name instance' - ); - } - - public function getType(): string { - return 'Name'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php deleted file mode 100644 index 2118378..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Name/FullyQualified.php +++ /dev/null @@ -1,49 +0,0 @@ -toString(); - } - - public function getType(): string { - return 'Name_FullyQualified'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php deleted file mode 100644 index 0226a4e..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Name/Relative.php +++ /dev/null @@ -1,49 +0,0 @@ -toString(); - } - - public function getType(): string { - return 'Name_Relative'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php deleted file mode 100644 index b99acd1..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/NullableType.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node $type, array $attributes = []) { - $this->attributes = $attributes; - $this->type = $type; - } - - public function getSubNodeNames(): array { - return ['type']; - } - - public function getType(): string { - return 'NullableType'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php deleted file mode 100644 index a277ca0..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Param.php +++ /dev/null @@ -1,110 +0,0 @@ - $attributes Additional attributes - * @param int $flags Optional visibility flags - * @param list $attrGroups PHP attribute groups - * @param PropertyHook[] $hooks Property hooks for promoted properties - */ - public function __construct( - Expr $var, ?Expr $default = null, ?Node $type = null, - bool $byRef = false, bool $variadic = false, - array $attributes = [], - int $flags = 0, - array $attrGroups = [], - array $hooks = [] - ) { - $this->attributes = $attributes; - $this->type = $type; - $this->byRef = $byRef; - $this->variadic = $variadic; - $this->var = $var; - $this->default = $default; - $this->flags = $flags; - $this->attrGroups = $attrGroups; - $this->hooks = $hooks; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'flags', 'type', 'byRef', 'variadic', 'var', 'default', 'hooks']; - } - - public function getType(): string { - return 'Param'; - } - - /** - * Whether this parameter uses constructor property promotion. - */ - public function isPromoted(): bool { - return $this->flags !== 0; - } - - public function isPublic(): bool { - return (bool) ($this->flags & Modifiers::PUBLIC); - } - - public function isProtected(): bool { - return (bool) ($this->flags & Modifiers::PROTECTED); - } - - public function isPrivate(): bool { - return (bool) ($this->flags & Modifiers::PRIVATE); - } - - public function isReadonly(): bool { - return (bool) ($this->flags & Modifiers::READONLY); - } - - /** - * Whether the promoted property has explicit public(set) visibility. - */ - public function isPublicSet(): bool { - return (bool) ($this->flags & Modifiers::PUBLIC_SET); - } - - /** - * Whether the promoted property has explicit protected(set) visibility. - */ - public function isProtectedSet(): bool { - return (bool) ($this->flags & Modifiers::PROTECTED_SET); - } - - /** - * Whether the promoted property has explicit private(set) visibility. - */ - public function isPrivateSet(): bool { - return (bool) ($this->flags & Modifiers::PRIVATE_SET); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php b/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php deleted file mode 100644 index a8cde85..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyHook.php +++ /dev/null @@ -1,78 +0,0 @@ - false : Whether hook returns by reference - * 'params' => array(): Parameters - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, $body, array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Identifier($name) : $name; - $this->body = $body; - $this->flags = $subNodes['flags'] ?? 0; - $this->byRef = $subNodes['byRef'] ?? false; - $this->params = $subNodes['params'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - - public function returnsByRef(): bool { - return $this->byRef; - } - - public function getParams(): array { - return $this->params; - } - - public function getReturnType() { - return null; - } - - public function getStmts(): ?array { - if ($this->body instanceof Expr) { - return [new Return_($this->body)]; - } - return $this->body; - } - - public function getAttrGroups(): array { - return $this->attrGroups; - } - - public function getType(): string { - return 'PropertyHook'; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'body']; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php deleted file mode 100644 index 101611e..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/PropertyItem.php +++ /dev/null @@ -1,37 +0,0 @@ - $attributes Additional attributes - */ - public function __construct($name, ?Node\Expr $default = null, array $attributes = []) { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name; - $this->default = $default; - } - - public function getSubNodeNames(): array { - return ['name', 'default']; - } - - public function getType(): string { - return 'PropertyItem'; - } -} - -// @deprecated compatibility alias -class_alias(PropertyItem::class, Stmt\PropertyProperty::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php deleted file mode 100644 index 3df2572..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar.php +++ /dev/null @@ -1,6 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(float $value, array $attributes = []) { - $this->attributes = $attributes; - $this->value = $value; - } - - public function getSubNodeNames(): array { - return ['value']; - } - - /** - * @param mixed[] $attributes - */ - public static function fromString(string $str, array $attributes = []): Float_ { - $attributes['rawValue'] = $str; - $float = self::parse($str); - - return new Float_($float, $attributes); - } - - /** - * @internal - * - * Parses a DNUMBER token like PHP would. - * - * @param string $str A string number - * - * @return float The parsed number - */ - public static function parse(string $str): float { - $str = str_replace('_', '', $str); - - // Check whether this is one of the special integer notations. - if ('0' === $str[0]) { - // hex - if ('x' === $str[1] || 'X' === $str[1]) { - return hexdec($str); - } - - // bin - if ('b' === $str[1] || 'B' === $str[1]) { - return bindec($str); - } - - // oct, but only if the string does not contain any of '.eE'. - if (false === strpbrk($str, '.eE')) { - // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit - // (8 or 9) so that only the digits before that are used. - return octdec(substr($str, 0, strcspn($str, '89'))); - } - } - - // dec - return (float) $str; - } - - public function getType(): string { - return 'Scalar_Float'; - } -} - -// @deprecated compatibility alias -class_alias(Float_::class, DNumber::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php deleted file mode 100644 index bcc257a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/Int_.php +++ /dev/null @@ -1,82 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(int $value, array $attributes = []) { - $this->attributes = $attributes; - $this->value = $value; - } - - public function getSubNodeNames(): array { - return ['value']; - } - - /** - * Constructs an Int node from a string number literal. - * - * @param string $str String number literal (decimal, octal, hex or binary) - * @param array $attributes Additional attributes - * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5) - * - * @return Int_ The constructed LNumber, including kind attribute - */ - public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = false): Int_ { - $attributes['rawValue'] = $str; - - $str = str_replace('_', '', $str); - - if ('0' !== $str[0] || '0' === $str) { - $attributes['kind'] = Int_::KIND_DEC; - return new Int_((int) $str, $attributes); - } - - if ('x' === $str[1] || 'X' === $str[1]) { - $attributes['kind'] = Int_::KIND_HEX; - return new Int_(hexdec($str), $attributes); - } - - if ('b' === $str[1] || 'B' === $str[1]) { - $attributes['kind'] = Int_::KIND_BIN; - return new Int_(bindec($str), $attributes); - } - - if (!$allowInvalidOctal && strpbrk($str, '89')) { - throw new Error('Invalid numeric literal', $attributes); - } - - // Strip optional explicit octal prefix. - if ('o' === $str[1] || 'O' === $str[1]) { - $str = substr($str, 2); - } - - // use intval instead of octdec to get proper cutting behavior with malformed numbers - $attributes['kind'] = Int_::KIND_OCT; - return new Int_(intval($str, 8), $attributes); - } - - public function getType(): string { - return 'Scalar_Int'; - } -} - -// @deprecated compatibility alias -class_alias(Int_::class, LNumber::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php deleted file mode 100644 index 9336dfe..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.php +++ /dev/null @@ -1,34 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $parts, array $attributes = []) { - $this->attributes = $attributes; - $this->parts = $parts; - } - - public function getSubNodeNames(): array { - return ['parts']; - } - - public function getType(): string { - return 'Scalar_InterpolatedString'; - } -} - -// @deprecated compatibility alias -class_alias(InterpolatedString::class, Encapsed::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php deleted file mode 100644 index cfe8c8c..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/LNumber.php +++ /dev/null @@ -1,3 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $attributes = []) { - $this->attributes = $attributes; - } - - public function getSubNodeNames(): array { - return []; - } - - /** - * Get name of magic constant. - * - * @return string Name of magic constant - */ - abstract public function getName(): string; -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php deleted file mode 100644 index 732ed14..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.php +++ /dev/null @@ -1,15 +0,0 @@ - Escaped character to its decoded value */ - protected static array $replacements = [ - '\\' => '\\', - '$' => '$', - 'n' => "\n", - 'r' => "\r", - 't' => "\t", - 'f' => "\f", - 'v' => "\v", - 'e' => "\x1B", - ]; - - /** - * Constructs a string scalar node. - * - * @param string $value Value of the string - * @param array $attributes Additional attributes - */ - public function __construct(string $value, array $attributes = []) { - $this->attributes = $attributes; - $this->value = $value; - } - - public function getSubNodeNames(): array { - return ['value']; - } - - /** - * @param array $attributes - * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes - */ - public static function fromString(string $str, array $attributes = [], bool $parseUnicodeEscape = true): self { - $attributes['kind'] = ($str[0] === "'" || ($str[1] === "'" && ($str[0] === 'b' || $str[0] === 'B'))) - ? Scalar\String_::KIND_SINGLE_QUOTED - : Scalar\String_::KIND_DOUBLE_QUOTED; - - $attributes['rawValue'] = $str; - - $string = self::parse($str, $parseUnicodeEscape); - - return new self($string, $attributes); - } - - /** - * @internal - * - * Parses a string token. - * - * @param string $str String token content - * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes - * - * @return string The parsed string - */ - public static function parse(string $str, bool $parseUnicodeEscape = true): string { - $bLength = 0; - if ('b' === $str[0] || 'B' === $str[0]) { - $bLength = 1; - } - - if ('\'' === $str[$bLength]) { - return str_replace( - ['\\\\', '\\\''], - ['\\', '\''], - substr($str, $bLength + 1, -1) - ); - } else { - return self::parseEscapeSequences( - substr($str, $bLength + 1, -1), '"', $parseUnicodeEscape - ); - } - } - - /** - * @internal - * - * Parses escape sequences in strings (all string types apart from single quoted). - * - * @param string $str String without quotes - * @param null|string $quote Quote type - * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes - * - * @return string String with escape sequences parsed - */ - public static function parseEscapeSequences(string $str, ?string $quote, bool $parseUnicodeEscape = true): string { - if (null !== $quote) { - $str = str_replace('\\' . $quote, $quote, $str); - } - - $extra = ''; - if ($parseUnicodeEscape) { - $extra = '|u\{([0-9a-fA-F]+)\}'; - } - - return preg_replace_callback( - '~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}' . $extra . ')~', - function ($matches) { - $str = $matches[1]; - - if (isset(self::$replacements[$str])) { - return self::$replacements[$str]; - } - if ('x' === $str[0] || 'X' === $str[0]) { - return chr(hexdec(substr($str, 1))); - } - if ('u' === $str[0]) { - $dec = hexdec($matches[2]); - // If it overflowed to float, treat as INT_MAX, it will throw an error anyway. - return self::codePointToUtf8(\is_int($dec) ? $dec : \PHP_INT_MAX); - } else { - return chr(octdec($str)); - } - }, - $str - ); - } - - /** - * Converts a Unicode code point to its UTF-8 encoded representation. - * - * @param int $num Code point - * - * @return string UTF-8 representation of code point - */ - private static function codePointToUtf8(int $num): string { - if ($num <= 0x7F) { - return chr($num); - } - if ($num <= 0x7FF) { - return chr(($num >> 6) + 0xC0) . chr(($num & 0x3F) + 0x80); - } - if ($num <= 0xFFFF) { - return chr(($num >> 12) + 0xE0) . chr((($num >> 6) & 0x3F) + 0x80) . chr(($num & 0x3F) + 0x80); - } - if ($num <= 0x1FFFFF) { - return chr(($num >> 18) + 0xF0) . chr((($num >> 12) & 0x3F) + 0x80) - . chr((($num >> 6) & 0x3F) + 0x80) . chr(($num & 0x3F) + 0x80); - } - throw new Error('Invalid UTF-8 codepoint escape sequence: Codepoint too large'); - } - - public function getType(): string { - return 'Scalar_String'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php b/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php deleted file mode 100644 index 517c0ed..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/StaticVar.php +++ /dev/null @@ -1,39 +0,0 @@ - $attributes Additional attributes - */ - public function __construct( - Expr\Variable $var, ?Node\Expr $default = null, array $attributes = [] - ) { - $this->attributes = $attributes; - $this->var = $var; - $this->default = $default; - } - - public function getSubNodeNames(): array { - return ['var', 'default']; - } - - public function getType(): string { - return 'StaticVar'; - } -} - -// @deprecated compatibility alias -class_alias(StaticVar::class, Stmt\StaticVar::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php deleted file mode 100644 index 481d31a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt.php +++ /dev/null @@ -1,8 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $stmts, array $attributes = []) { - $this->attributes = $attributes; - $this->stmts = $stmts; - } - - public function getType(): string { - return 'Stmt_Block'; - } - - public function getSubNodeNames(): array { - return ['stmts']; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php deleted file mode 100644 index d2bcc5e..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Break_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(?Node\Expr $num = null, array $attributes = []) { - $this->attributes = $attributes; - $this->num = $num; - } - - public function getSubNodeNames(): array { - return ['num']; - } - - public function getType(): string { - return 'Stmt_Break'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php deleted file mode 100644 index a06ca18..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Case_.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(?Node\Expr $cond, array $stmts = [], array $attributes = []) { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['cond', 'stmts']; - } - - public function getType(): string { - return 'Stmt_Case'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php deleted file mode 100644 index e8d39c9..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Catch_.php +++ /dev/null @@ -1,40 +0,0 @@ - $attributes Additional attributes - */ - public function __construct( - array $types, ?Expr\Variable $var = null, array $stmts = [], array $attributes = [] - ) { - $this->attributes = $attributes; - $this->types = $types; - $this->var = $var; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['types', 'var', 'stmts']; - } - - public function getType(): string { - return 'Stmt_Catch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php deleted file mode 100644 index 9bdce1f..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassConst.php +++ /dev/null @@ -1,77 +0,0 @@ - $attributes Additional attributes - * @param list $attrGroups PHP attribute groups - * @param null|Node\Identifier|Node\Name|Node\ComplexType $type Type declaration - */ - public function __construct( - array $consts, - int $flags = 0, - array $attributes = [], - array $attrGroups = [], - ?Node $type = null - ) { - $this->attributes = $attributes; - $this->flags = $flags; - $this->consts = $consts; - $this->attrGroups = $attrGroups; - $this->type = $type; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'flags', 'type', 'consts']; - } - - /** - * Whether constant is explicitly or implicitly public. - */ - public function isPublic(): bool { - return ($this->flags & Modifiers::PUBLIC) !== 0 - || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; - } - - /** - * Whether constant is protected. - */ - public function isProtected(): bool { - return (bool) ($this->flags & Modifiers::PROTECTED); - } - - /** - * Whether constant is private. - */ - public function isPrivate(): bool { - return (bool) ($this->flags & Modifiers::PRIVATE); - } - - /** - * Whether constant is final. - */ - public function isFinal(): bool { - return (bool) ($this->flags & Modifiers::FINAL); - } - - public function getType(): string { - return 'Stmt_ClassConst'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php deleted file mode 100644 index fb9ba4f..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassLike.php +++ /dev/null @@ -1,109 +0,0 @@ -stmts as $stmt) { - if ($stmt instanceof TraitUse) { - $traitUses[] = $stmt; - } - } - return $traitUses; - } - - /** - * @return ClassConst[] - */ - public function getConstants(): array { - $constants = []; - foreach ($this->stmts as $stmt) { - if ($stmt instanceof ClassConst) { - $constants[] = $stmt; - } - } - return $constants; - } - - /** - * @return Property[] - */ - public function getProperties(): array { - $properties = []; - foreach ($this->stmts as $stmt) { - if ($stmt instanceof Property) { - $properties[] = $stmt; - } - } - return $properties; - } - - /** - * Gets property with the given name defined directly in this class/interface/trait. - * - * @param string $name Name of the property - * - * @return Property|null Property node or null if the property does not exist - */ - public function getProperty(string $name): ?Property { - foreach ($this->stmts as $stmt) { - if ($stmt instanceof Property) { - foreach ($stmt->props as $prop) { - if ($prop instanceof PropertyItem && $name === $prop->name->toString()) { - return $stmt; - } - } - } - } - return null; - } - - /** - * Gets all methods defined directly in this class/interface/trait - * - * @return ClassMethod[] - */ - public function getMethods(): array { - $methods = []; - foreach ($this->stmts as $stmt) { - if ($stmt instanceof ClassMethod) { - $methods[] = $stmt; - } - } - return $methods; - } - - /** - * Gets method with the given name defined directly in this class/interface/trait. - * - * @param string $name Name of the method (compared case-insensitively) - * - * @return ClassMethod|null Method node or null if the method does not exist - */ - public function getMethod(string $name): ?ClassMethod { - $lowerName = strtolower($name); - foreach ($this->stmts as $stmt) { - if ($stmt instanceof ClassMethod && $lowerName === $stmt->name->toLowerString()) { - return $stmt; - } - } - return null; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php deleted file mode 100644 index 59c0519..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ClassMethod.php +++ /dev/null @@ -1,154 +0,0 @@ - */ - private static array $magicNames = [ - '__construct' => true, - '__destruct' => true, - '__call' => true, - '__callstatic' => true, - '__get' => true, - '__set' => true, - '__isset' => true, - '__unset' => true, - '__sleep' => true, - '__wakeup' => true, - '__tostring' => true, - '__set_state' => true, - '__clone' => true, - '__invoke' => true, - '__debuginfo' => true, - '__serialize' => true, - '__unserialize' => true, - ]; - - /** - * Constructs a class method node. - * - * @param string|Node\Identifier $name Name - * @param array{ - * flags?: int, - * byRef?: bool, - * params?: Node\Param[], - * returnType?: null|Node\Identifier|Node\Name|Node\ComplexType, - * stmts?: Node\Stmt[]|null, - * attrGroups?: Node\AttributeGroup[], - * } $subNodes Array of the following optional subnodes: - * 'flags => 0 : Flags - * 'byRef' => false : Whether to return by reference - * 'params' => array() : Parameters - * 'returnType' => null : Return type - * 'stmts' => array() : Statements - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0; - $this->byRef = $subNodes['byRef'] ?? false; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->params = $subNodes['params'] ?? []; - $this->returnType = $subNodes['returnType'] ?? null; - $this->stmts = array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'returnType', 'stmts']; - } - - public function returnsByRef(): bool { - return $this->byRef; - } - - public function getParams(): array { - return $this->params; - } - - public function getReturnType() { - return $this->returnType; - } - - public function getStmts(): ?array { - return $this->stmts; - } - - public function getAttrGroups(): array { - return $this->attrGroups; - } - - /** - * Whether the method is explicitly or implicitly public. - */ - public function isPublic(): bool { - return ($this->flags & Modifiers::PUBLIC) !== 0 - || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; - } - - /** - * Whether the method is protected. - */ - public function isProtected(): bool { - return (bool) ($this->flags & Modifiers::PROTECTED); - } - - /** - * Whether the method is private. - */ - public function isPrivate(): bool { - return (bool) ($this->flags & Modifiers::PRIVATE); - } - - /** - * Whether the method is abstract. - */ - public function isAbstract(): bool { - return (bool) ($this->flags & Modifiers::ABSTRACT); - } - - /** - * Whether the method is final. - */ - public function isFinal(): bool { - return (bool) ($this->flags & Modifiers::FINAL); - } - - /** - * Whether the method is static. - */ - public function isStatic(): bool { - return (bool) ($this->flags & Modifiers::STATIC); - } - - /** - * Whether the method is magic. - */ - public function isMagic(): bool { - return isset(self::$magicNames[$this->name->toLowerString()]); - } - - public function getType(): string { - return 'Stmt_ClassMethod'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php deleted file mode 100644 index 3f492b7..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Class_.php +++ /dev/null @@ -1,94 +0,0 @@ - 0 : Flags - * 'extends' => null : Name of extended class - * 'implements' => array(): Names of implemented interfaces - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->extends = $subNodes['extends'] ?? null; - $this->implements = $subNodes['implements'] ?? []; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'flags', 'name', 'extends', 'implements', 'stmts']; - } - - /** - * Whether the class is explicitly abstract. - */ - public function isAbstract(): bool { - return (bool) ($this->flags & Modifiers::ABSTRACT); - } - - /** - * Whether the class is final. - */ - public function isFinal(): bool { - return (bool) ($this->flags & Modifiers::FINAL); - } - - public function isReadonly(): bool { - return (bool) ($this->flags & Modifiers::READONLY); - } - - /** - * Whether the class is anonymous. - */ - public function isAnonymous(): bool { - return null === $this->name; - } - - public function getType(): string { - return 'Stmt_Class'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php deleted file mode 100644 index f1165fd..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Const_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $consts, array $attributes = []) { - $this->attributes = $attributes; - $this->consts = $consts; - } - - public function getSubNodeNames(): array { - return ['consts']; - } - - public function getType(): string { - return 'Stmt_Const'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php deleted file mode 100644 index 54e979d..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Continue_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(?Node\Expr $num = null, array $attributes = []) { - $this->attributes = $attributes; - $this->num = $num; - } - - public function getSubNodeNames(): array { - return ['num']; - } - - public function getType(): string { - return 'Stmt_Continue'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php deleted file mode 100644 index cb9e837..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.php +++ /dev/null @@ -1,3 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $declares, ?array $stmts = null, array $attributes = []) { - $this->attributes = $attributes; - $this->declares = $declares; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['declares', 'stmts']; - } - - public function getType(): string { - return 'Stmt_Declare'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php deleted file mode 100644 index 6124442..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Do_.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['stmts', 'cond']; - } - - public function getType(): string { - return 'Stmt_Do'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php deleted file mode 100644 index 4d42452..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Echo_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $exprs, array $attributes = []) { - $this->attributes = $attributes; - $this->exprs = $exprs; - } - - public function getSubNodeNames(): array { - return ['exprs']; - } - - public function getType(): string { - return 'Stmt_Echo'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php deleted file mode 100644 index b26d59c..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/ElseIf_.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['cond', 'stmts']; - } - - public function getType(): string { - return 'Stmt_ElseIf'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php deleted file mode 100644 index 3d2b066..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Else_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $stmts = [], array $attributes = []) { - $this->attributes = $attributes; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['stmts']; - } - - public function getType(): string { - return 'Stmt_Else'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php deleted file mode 100644 index c071a0a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/EnumCase.php +++ /dev/null @@ -1,36 +0,0 @@ - $attrGroups PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, ?Node\Expr $expr = null, array $attrGroups = [], array $attributes = []) { - parent::__construct($attributes); - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->expr = $expr; - $this->attrGroups = $attrGroups; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'name', 'expr']; - } - - public function getType(): string { - return 'Stmt_EnumCase'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php deleted file mode 100644 index 7eea6a6..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Enum_.php +++ /dev/null @@ -1,44 +0,0 @@ - null : Scalar type - * 'implements' => array() : Names of implemented interfaces - * 'stmts' => array() : Statements - * 'attrGroups' => array() : PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) { - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->scalarType = $subNodes['scalarType'] ?? null; - $this->implements = $subNodes['implements'] ?? []; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - - parent::__construct($attributes); - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'name', 'scalarType', 'implements', 'stmts']; - } - - public function getType(): string { - return 'Stmt_Enum'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php deleted file mode 100644 index 89751fa..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Expression.php +++ /dev/null @@ -1,32 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Expr $expr, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Stmt_Expression'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php deleted file mode 100644 index 69ecf25..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Finally_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $stmts = [], array $attributes = []) { - $this->attributes = $attributes; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['stmts']; - } - - public function getType(): string { - return 'Stmt_Finally'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php deleted file mode 100644 index 6f2fbb9..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/For_.php +++ /dev/null @@ -1,47 +0,0 @@ - array(): Init expressions - * 'cond' => array(): Loop conditions - * 'loop' => array(): Loop expressions - * 'stmts' => array(): Statements - * @param array $attributes Additional attributes - */ - public function __construct(array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->init = $subNodes['init'] ?? []; - $this->cond = $subNodes['cond'] ?? []; - $this->loop = $subNodes['loop'] ?? []; - $this->stmts = $subNodes['stmts'] ?? []; - } - - public function getSubNodeNames(): array { - return ['init', 'cond', 'loop', 'stmts']; - } - - public function getType(): string { - return 'Stmt_For'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php deleted file mode 100644 index c5d9a8b..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Foreach_.php +++ /dev/null @@ -1,50 +0,0 @@ - null : Variable to assign key to - * 'byRef' => false : Whether to assign value by reference - * 'stmts' => array(): Statements - * @param array $attributes Additional attributes - */ - public function __construct(Node\Expr $expr, Node\Expr $valueVar, array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - $this->keyVar = $subNodes['keyVar'] ?? null; - $this->byRef = $subNodes['byRef'] ?? false; - $this->valueVar = $valueVar; - $this->stmts = $subNodes['stmts'] ?? []; - } - - public function getSubNodeNames(): array { - return ['expr', 'keyVar', 'byRef', 'valueVar', 'stmts']; - } - - public function getType(): string { - return 'Stmt_Foreach'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php deleted file mode 100644 index 2111bab..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Function_.php +++ /dev/null @@ -1,81 +0,0 @@ - false : Whether to return by reference - * 'params' => array(): Parameters - * 'returnType' => null : Return type - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->byRef = $subNodes['byRef'] ?? false; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->params = $subNodes['params'] ?? []; - $this->returnType = $subNodes['returnType'] ?? null; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'byRef', 'name', 'params', 'returnType', 'stmts']; - } - - public function returnsByRef(): bool { - return $this->byRef; - } - - public function getParams(): array { - return $this->params; - } - - public function getReturnType() { - return $this->returnType; - } - - public function getAttrGroups(): array { - return $this->attrGroups; - } - - /** @return Node\Stmt[] */ - public function getStmts(): array { - return $this->stmts; - } - - public function getType(): string { - return 'Stmt_Function'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php deleted file mode 100644 index d3ab12f..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Global_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $vars, array $attributes = []) { - $this->attributes = $attributes; - $this->vars = $vars; - } - - public function getSubNodeNames(): array { - return ['vars']; - } - - public function getType(): string { - return 'Stmt_Global'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php deleted file mode 100644 index 26a0d01..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Goto_.php +++ /dev/null @@ -1,30 +0,0 @@ - $attributes Additional attributes - */ - public function __construct($name, array $attributes = []) { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - - public function getSubNodeNames(): array { - return ['name']; - } - - public function getType(): string { - return 'Stmt_Goto'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php deleted file mode 100644 index 0ec8e9d..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/GroupUse.php +++ /dev/null @@ -1,41 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Name $prefix, array $uses, int $type = Use_::TYPE_NORMAL, array $attributes = []) { - $this->attributes = $attributes; - $this->type = $type; - $this->prefix = $prefix; - $this->uses = $uses; - } - - public function getSubNodeNames(): array { - return ['type', 'prefix', 'uses']; - } - - public function getType(): string { - return 'Stmt_GroupUse'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php deleted file mode 100644 index 665bacd..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(string $remaining, array $attributes = []) { - $this->attributes = $attributes; - $this->remaining = $remaining; - } - - public function getSubNodeNames(): array { - return ['remaining']; - } - - public function getType(): string { - return 'Stmt_HaltCompiler'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php deleted file mode 100644 index 544390f..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/If_.php +++ /dev/null @@ -1,46 +0,0 @@ - array(): Statements - * 'elseifs' => array(): Elseif clauses - * 'else' => null : Else clause - * @param array $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $subNodes['stmts'] ?? []; - $this->elseifs = $subNodes['elseifs'] ?? []; - $this->else = $subNodes['else'] ?? null; - } - - public function getSubNodeNames(): array { - return ['cond', 'stmts', 'elseifs', 'else']; - } - - public function getType(): string { - return 'Stmt_If'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php deleted file mode 100644 index 0515d02..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/InlineHTML.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(string $value, array $attributes = []) { - $this->attributes = $attributes; - $this->value = $value; - } - - public function getSubNodeNames(): array { - return ['value']; - } - - public function getType(): string { - return 'Stmt_InlineHTML'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php deleted file mode 100644 index 9359064..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Interface_.php +++ /dev/null @@ -1,40 +0,0 @@ - array(): Name of extended interfaces - * 'stmts' => array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->extends = $subNodes['extends'] ?? []; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'name', 'extends', 'stmts']; - } - - public function getType(): string { - return 'Stmt_Interface'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php deleted file mode 100644 index 658468d..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Label.php +++ /dev/null @@ -1,30 +0,0 @@ - $attributes Additional attributes - */ - public function __construct($name, array $attributes = []) { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Identifier($name) : $name; - } - - public function getSubNodeNames(): array { - return ['name']; - } - - public function getType(): string { - return 'Stmt_Label'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php deleted file mode 100644 index f5b59ad..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Namespace_.php +++ /dev/null @@ -1,37 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(?Node\Name $name = null, ?array $stmts = [], array $attributes = []) { - $this->attributes = $attributes; - $this->name = $name; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['name', 'stmts']; - } - - public function getType(): string { - return 'Stmt_Namespace'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php deleted file mode 100644 index 3acfa46..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Nop.php +++ /dev/null @@ -1,16 +0,0 @@ - $attributes Additional attributes - * @param null|Identifier|Name|ComplexType $type Type declaration - * @param Node\AttributeGroup[] $attrGroups PHP attribute groups - * @param Node\PropertyHook[] $hooks Property hooks - */ - public function __construct(int $flags, array $props, array $attributes = [], ?Node $type = null, array $attrGroups = [], array $hooks = []) { - $this->attributes = $attributes; - $this->flags = $flags; - $this->props = $props; - $this->type = $type; - $this->attrGroups = $attrGroups; - $this->hooks = $hooks; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'flags', 'type', 'props', 'hooks']; - } - - /** - * Whether the property is explicitly or implicitly public. - */ - public function isPublic(): bool { - return ($this->flags & Modifiers::PUBLIC) !== 0 - || ($this->flags & Modifiers::VISIBILITY_MASK) === 0; - } - - /** - * Whether the property is protected. - */ - public function isProtected(): bool { - return (bool) ($this->flags & Modifiers::PROTECTED); - } - - /** - * Whether the property is private. - */ - public function isPrivate(): bool { - return (bool) ($this->flags & Modifiers::PRIVATE); - } - - /** - * Whether the property is static. - */ - public function isStatic(): bool { - return (bool) ($this->flags & Modifiers::STATIC); - } - - /** - * Whether the property is readonly. - */ - public function isReadonly(): bool { - return (bool) ($this->flags & Modifiers::READONLY); - } - - /** - * Whether the property has explicit public(set) visibility. - */ - public function isPublicSet(): bool { - return (bool) ($this->flags & Modifiers::PUBLIC_SET); - } - - /** - * Whether the property has explicit protected(set) visibility. - */ - public function isProtectedSet(): bool { - return (bool) ($this->flags & Modifiers::PROTECTED_SET); - } - - /** - * Whether the property has explicit private(set) visibility. - */ - public function isPrivateSet(): bool { - return (bool) ($this->flags & Modifiers::PRIVATE_SET); - } - - public function getType(): string { - return 'Stmt_Property'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php deleted file mode 100644 index 4a21a88..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.php +++ /dev/null @@ -1,3 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(?Node\Expr $expr = null, array $attributes = []) { - $this->attributes = $attributes; - $this->expr = $expr; - } - - public function getSubNodeNames(): array { - return ['expr']; - } - - public function getType(): string { - return 'Stmt_Return'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php deleted file mode 100644 index 88452e7..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/StaticVar.php +++ /dev/null @@ -1,3 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $vars, array $attributes = []) { - $this->attributes = $attributes; - $this->vars = $vars; - } - - public function getSubNodeNames(): array { - return ['vars']; - } - - public function getType(): string { - return 'Stmt_Static'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php deleted file mode 100644 index 21e5efa..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Switch_.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $cases, array $attributes = []) { - $this->attributes = $attributes; - $this->cond = $cond; - $this->cases = $cases; - } - - public function getSubNodeNames(): array { - return ['cond', 'cases']; - } - - public function getType(): string { - return 'Stmt_Switch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php deleted file mode 100644 index 7705a57..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUse.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $traits, array $adaptations = [], array $attributes = []) { - $this->attributes = $attributes; - $this->traits = $traits; - $this->adaptations = $adaptations; - } - - public function getSubNodeNames(): array { - return ['traits', 'adaptations']; - } - - public function getType(): string { - return 'Stmt_TraitUse'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php deleted file mode 100644 index 987bc88..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.php +++ /dev/null @@ -1,12 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(?Node\Name $trait, $method, ?int $newModifier, $newName, array $attributes = []) { - $this->attributes = $attributes; - $this->trait = $trait; - $this->method = \is_string($method) ? new Node\Identifier($method) : $method; - $this->newModifier = $newModifier; - $this->newName = \is_string($newName) ? new Node\Identifier($newName) : $newName; - } - - public function getSubNodeNames(): array { - return ['trait', 'method', 'newModifier', 'newName']; - } - - public function getType(): string { - return 'Stmt_TraitUseAdaptation_Alias'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php deleted file mode 100644 index 7bc4083..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Name $trait, $method, array $insteadof, array $attributes = []) { - $this->attributes = $attributes; - $this->trait = $trait; - $this->method = \is_string($method) ? new Node\Identifier($method) : $method; - $this->insteadof = $insteadof; - } - - public function getSubNodeNames(): array { - return ['trait', 'method', 'insteadof']; - } - - public function getType(): string { - return 'Stmt_TraitUseAdaptation_Precedence'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php deleted file mode 100644 index 5f2b330..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Trait_.php +++ /dev/null @@ -1,34 +0,0 @@ - array(): Statements - * 'attrGroups' => array(): PHP attribute groups - * @param array $attributes Additional attributes - */ - public function __construct($name, array $subNodes = [], array $attributes = []) { - $this->attributes = $attributes; - $this->name = \is_string($name) ? new Node\Identifier($name) : $name; - $this->stmts = $subNodes['stmts'] ?? []; - $this->attrGroups = $subNodes['attrGroups'] ?? []; - } - - public function getSubNodeNames(): array { - return ['attrGroups', 'name', 'stmts']; - } - - public function getType(): string { - return 'Stmt_Trait'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php deleted file mode 100644 index 6414c46..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/TryCatch.php +++ /dev/null @@ -1,37 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $stmts, array $catches, ?Finally_ $finally = null, array $attributes = []) { - $this->attributes = $attributes; - $this->stmts = $stmts; - $this->catches = $catches; - $this->finally = $finally; - } - - public function getSubNodeNames(): array { - return ['stmts', 'catches', 'finally']; - } - - public function getType(): string { - return 'Stmt_TryCatch'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php deleted file mode 100644 index c211beb..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/Unset_.php +++ /dev/null @@ -1,29 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $vars, array $attributes = []) { - $this->attributes = $attributes; - $this->vars = $vars; - } - - public function getSubNodeNames(): array { - return ['vars']; - } - - public function getType(): string { - return 'Stmt_Unset'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php deleted file mode 100644 index 85830ed..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/UseUse.php +++ /dev/null @@ -1,3 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $uses, int $type = self::TYPE_NORMAL, array $attributes = []) { - $this->attributes = $attributes; - $this->type = $type; - $this->uses = $uses; - } - - public function getSubNodeNames(): array { - return ['type', 'uses']; - } - - public function getType(): string { - return 'Stmt_Use'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php b/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php deleted file mode 100644 index 2f7aed2..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/Stmt/While_.php +++ /dev/null @@ -1,33 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Expr $cond, array $stmts = [], array $attributes = []) { - $this->attributes = $attributes; - $this->cond = $cond; - $this->stmts = $stmts; - } - - public function getSubNodeNames(): array { - return ['cond', 'stmts']; - } - - public function getType(): string { - return 'Stmt_While'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php b/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php deleted file mode 100644 index bad88d2..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/UnionType.php +++ /dev/null @@ -1,27 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $types, array $attributes = []) { - $this->attributes = $attributes; - $this->types = $types; - } - - public function getSubNodeNames(): array { - return ['types']; - } - - public function getType(): string { - return 'UnionType'; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php b/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php deleted file mode 100644 index a7d9fc4..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/UseItem.php +++ /dev/null @@ -1,55 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(Node\Name $name, $alias = null, int $type = Use_::TYPE_UNKNOWN, array $attributes = []) { - $this->attributes = $attributes; - $this->type = $type; - $this->name = $name; - $this->alias = \is_string($alias) ? new Identifier($alias) : $alias; - } - - public function getSubNodeNames(): array { - return ['type', 'name', 'alias']; - } - - /** - * Get alias. If not explicitly given this is the last component of the used name. - */ - public function getAlias(): Identifier { - if (null !== $this->alias) { - return $this->alias; - } - - return new Identifier($this->name->getLast()); - } - - public function getType(): string { - return 'UseItem'; - } -} - -// @deprecated compatibility alias -class_alias(UseItem::class, Stmt\UseUse::class); diff --git a/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php b/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php deleted file mode 100644 index 9baa6fe..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Node/VarLikeIdentifier.php +++ /dev/null @@ -1,16 +0,0 @@ - $attributes Additional attributes - */ - public function __construct(array $attributes = []) { - $this->attributes = $attributes; - } - - public function getType(): string { - return 'VariadicPlaceholder'; - } - - public function getSubNodeNames(): array { - return []; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php deleted file mode 100644 index a6a50ae..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeAbstract.php +++ /dev/null @@ -1,181 +0,0 @@ - Attributes */ - protected array $attributes; - - /** - * Creates a Node. - * - * @param array $attributes Array of attributes - */ - public function __construct(array $attributes = []) { - $this->attributes = $attributes; - } - - /** - * Gets line the node started in (alias of getStartLine). - * - * @return int Start line (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getLine(): int { - return $this->attributes['startLine'] ?? -1; - } - - /** - * Gets line the node started in. - * - * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default). - * - * @return int Start line (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getStartLine(): int { - return $this->attributes['startLine'] ?? -1; - } - - /** - * Gets the line the node ended in. - * - * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default). - * - * @return int End line (or -1 if not available) - * @phpstan-return -1|positive-int - */ - public function getEndLine(): int { - return $this->attributes['endLine'] ?? -1; - } - - /** - * Gets the token offset of the first token that is part of this node. - * - * The offset is an index into the array returned by Lexer::getTokens(). - * - * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default). - * - * @return int Token start position (or -1 if not available) - */ - public function getStartTokenPos(): int { - return $this->attributes['startTokenPos'] ?? -1; - } - - /** - * Gets the token offset of the last token that is part of this node. - * - * The offset is an index into the array returned by Lexer::getTokens(). - * - * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default). - * - * @return int Token end position (or -1 if not available) - */ - public function getEndTokenPos(): int { - return $this->attributes['endTokenPos'] ?? -1; - } - - /** - * Gets the file offset of the first character that is part of this node. - * - * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default). - * - * @return int File start position (or -1 if not available) - */ - public function getStartFilePos(): int { - return $this->attributes['startFilePos'] ?? -1; - } - - /** - * Gets the file offset of the last character that is part of this node. - * - * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default). - * - * @return int File end position (or -1 if not available) - */ - public function getEndFilePos(): int { - return $this->attributes['endFilePos'] ?? -1; - } - - /** - * Gets all comments directly preceding this node. - * - * The comments are also available through the "comments" attribute. - * - * @return Comment[] - */ - public function getComments(): array { - return $this->attributes['comments'] ?? []; - } - - /** - * Gets the doc comment of the node. - * - * @return null|Comment\Doc Doc comment object or null - */ - public function getDocComment(): ?Comment\Doc { - $comments = $this->getComments(); - for ($i = count($comments) - 1; $i >= 0; $i--) { - $comment = $comments[$i]; - if ($comment instanceof Comment\Doc) { - return $comment; - } - } - - return null; - } - - /** - * Sets the doc comment of the node. - * - * This will either replace an existing doc comment or add it to the comments array. - * - * @param Comment\Doc $docComment Doc comment to set - */ - public function setDocComment(Comment\Doc $docComment): void { - $comments = $this->getComments(); - for ($i = count($comments) - 1; $i >= 0; $i--) { - if ($comments[$i] instanceof Comment\Doc) { - // Replace existing doc comment. - $comments[$i] = $docComment; - $this->setAttribute('comments', $comments); - return; - } - } - - // Append new doc comment. - $comments[] = $docComment; - $this->setAttribute('comments', $comments); - } - - public function setAttribute(string $key, $value): void { - $this->attributes[$key] = $value; - } - - public function hasAttribute(string $key): bool { - return array_key_exists($key, $this->attributes); - } - - public function getAttribute(string $key, $default = null) { - if (array_key_exists($key, $this->attributes)) { - return $this->attributes[$key]; - } - - return $default; - } - - public function getAttributes(): array { - return $this->attributes; - } - - public function setAttributes(array $attributes): void { - $this->attributes = $attributes; - } - - /** - * @return array - */ - public function jsonSerialize(): array { - return ['nodeType' => $this->getType()] + get_object_vars($this); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php b/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php deleted file mode 100644 index 39ce86a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeDumper.php +++ /dev/null @@ -1,299 +0,0 @@ - true, - 'startLine' => true, - 'endLine' => true, - 'startFilePos' => true, - 'endFilePos' => true, - 'startTokenPos' => true, - 'endTokenPos' => true, - ]; - - /** - * Constructs a NodeDumper. - * - * Supported options: - * * bool dumpComments: Whether comments should be dumped. - * * bool dumpPositions: Whether line/offset information should be dumped. To dump offset - * information, the code needs to be passed to dump(). - * * bool dumpOtherAttributes: Whether non-comment, non-position attributes should be dumped. - * - * @param array $options Options (see description) - */ - public function __construct(array $options = []) { - $this->dumpComments = !empty($options['dumpComments']); - $this->dumpPositions = !empty($options['dumpPositions']); - $this->dumpOtherAttributes = !empty($options['dumpOtherAttributes']); - } - - /** - * Dumps a node or array. - * - * @param array|Node $node Node or array to dump - * @param string|null $code Code corresponding to dumped AST. This only needs to be passed if - * the dumpPositions option is enabled and the dumping of node offsets - * is desired. - * - * @return string Dumped value - */ - public function dump($node, ?string $code = null): string { - $this->code = $code; - $this->res = ''; - $this->nl = "\n"; - $this->dumpRecursive($node, false); - return $this->res; - } - - /** @param mixed $node */ - protected function dumpRecursive($node, bool $indent = true): void { - if ($indent) { - $this->nl .= " "; - } - if ($node instanceof Node) { - $this->res .= $node->getType(); - if ($this->dumpPositions && null !== $p = $this->dumpPosition($node)) { - $this->res .= $p; - } - $this->res .= '('; - - foreach ($node->getSubNodeNames() as $key) { - $this->res .= "$this->nl " . $key . ': '; - - $value = $node->$key; - if (\is_int($value)) { - if ('flags' === $key || 'newModifier' === $key) { - $this->res .= $this->dumpFlags($value); - continue; - } - if ('type' === $key && $node instanceof Include_) { - $this->res .= $this->dumpIncludeType($value); - continue; - } - if ('type' === $key - && ($node instanceof Use_ || $node instanceof UseItem || $node instanceof GroupUse)) { - $this->res .= $this->dumpUseType($value); - continue; - } - } - $this->dumpRecursive($value); - } - - if ($this->dumpComments && $comments = $node->getComments()) { - $this->res .= "$this->nl comments: "; - $this->dumpRecursive($comments); - } - - if ($this->dumpOtherAttributes) { - foreach ($node->getAttributes() as $key => $value) { - if (isset(self::IGNORE_ATTRIBUTES[$key])) { - continue; - } - - $this->res .= "$this->nl $key: "; - if (\is_int($value)) { - if ('kind' === $key) { - if ($node instanceof Int_) { - $this->res .= $this->dumpIntKind($value); - continue; - } - if ($node instanceof String_ || $node instanceof InterpolatedString) { - $this->res .= $this->dumpStringKind($value); - continue; - } - if ($node instanceof Array_) { - $this->res .= $this->dumpArrayKind($value); - continue; - } - if ($node instanceof List_) { - $this->res .= $this->dumpListKind($value); - continue; - } - } - } - $this->dumpRecursive($value); - } - } - $this->res .= "$this->nl)"; - } elseif (\is_array($node)) { - $this->res .= 'array('; - foreach ($node as $key => $value) { - $this->res .= "$this->nl " . $key . ': '; - $this->dumpRecursive($value); - } - $this->res .= "$this->nl)"; - } elseif ($node instanceof Comment) { - $this->res .= \str_replace("\n", $this->nl, $node->getReformattedText()); - } elseif (\is_string($node)) { - $this->res .= \str_replace("\n", $this->nl, (string)$node); - } elseif (\is_int($node) || \is_float($node)) { - $this->res .= $node; - } elseif (null === $node) { - $this->res .= 'null'; - } elseif (false === $node) { - $this->res .= 'false'; - } elseif (true === $node) { - $this->res .= 'true'; - } else { - throw new \InvalidArgumentException('Can only dump nodes and arrays.'); - } - if ($indent) { - $this->nl = \substr($this->nl, 0, -4); - } - } - - protected function dumpFlags(int $flags): string { - $strs = []; - if ($flags & Modifiers::PUBLIC) { - $strs[] = 'PUBLIC'; - } - if ($flags & Modifiers::PROTECTED) { - $strs[] = 'PROTECTED'; - } - if ($flags & Modifiers::PRIVATE) { - $strs[] = 'PRIVATE'; - } - if ($flags & Modifiers::ABSTRACT) { - $strs[] = 'ABSTRACT'; - } - if ($flags & Modifiers::STATIC) { - $strs[] = 'STATIC'; - } - if ($flags & Modifiers::FINAL) { - $strs[] = 'FINAL'; - } - if ($flags & Modifiers::READONLY) { - $strs[] = 'READONLY'; - } - if ($flags & Modifiers::PUBLIC_SET) { - $strs[] = 'PUBLIC_SET'; - } - if ($flags & Modifiers::PROTECTED_SET) { - $strs[] = 'PROTECTED_SET'; - } - if ($flags & Modifiers::PRIVATE_SET) { - $strs[] = 'PRIVATE_SET'; - } - - if ($strs) { - return implode(' | ', $strs) . ' (' . $flags . ')'; - } else { - return (string) $flags; - } - } - - /** @param array $map */ - private function dumpEnum(int $value, array $map): string { - if (!isset($map[$value])) { - return (string) $value; - } - return $map[$value] . ' (' . $value . ')'; - } - - private function dumpIncludeType(int $type): string { - return $this->dumpEnum($type, [ - Include_::TYPE_INCLUDE => 'TYPE_INCLUDE', - Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE', - Include_::TYPE_REQUIRE => 'TYPE_REQUIRE', - Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE', - ]); - } - - private function dumpUseType(int $type): string { - return $this->dumpEnum($type, [ - Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN', - Use_::TYPE_NORMAL => 'TYPE_NORMAL', - Use_::TYPE_FUNCTION => 'TYPE_FUNCTION', - Use_::TYPE_CONSTANT => 'TYPE_CONSTANT', - ]); - } - - private function dumpIntKind(int $kind): string { - return $this->dumpEnum($kind, [ - Int_::KIND_BIN => 'KIND_BIN', - Int_::KIND_OCT => 'KIND_OCT', - Int_::KIND_DEC => 'KIND_DEC', - Int_::KIND_HEX => 'KIND_HEX', - ]); - } - - private function dumpStringKind(int $kind): string { - return $this->dumpEnum($kind, [ - String_::KIND_SINGLE_QUOTED => 'KIND_SINGLE_QUOTED', - String_::KIND_DOUBLE_QUOTED => 'KIND_DOUBLE_QUOTED', - String_::KIND_HEREDOC => 'KIND_HEREDOC', - String_::KIND_NOWDOC => 'KIND_NOWDOC', - ]); - } - - private function dumpArrayKind(int $kind): string { - return $this->dumpEnum($kind, [ - Array_::KIND_LONG => 'KIND_LONG', - Array_::KIND_SHORT => 'KIND_SHORT', - ]); - } - - private function dumpListKind(int $kind): string { - return $this->dumpEnum($kind, [ - List_::KIND_LIST => 'KIND_LIST', - List_::KIND_ARRAY => 'KIND_ARRAY', - ]); - } - - /** - * Dump node position, if possible. - * - * @param Node $node Node for which to dump position - * - * @return string|null Dump of position, or null if position information not available - */ - protected function dumpPosition(Node $node): ?string { - if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) { - return null; - } - - $start = $node->getStartLine(); - $end = $node->getEndLine(); - if ($node->hasAttribute('startFilePos') && $node->hasAttribute('endFilePos') - && null !== $this->code - ) { - $start .= ':' . $this->toColumn($this->code, $node->getStartFilePos()); - $end .= ':' . $this->toColumn($this->code, $node->getEndFilePos()); - } - return "[$start - $end]"; - } - - // Copied from Error class - private function toColumn(string $code, int $pos): int { - if ($pos > strlen($code)) { - throw new \RuntimeException('Invalid position information'); - } - - $lineStartPos = strrpos($code, "\n", $pos - strlen($code)); - if (false === $lineStartPos) { - $lineStartPos = -1; - } - - return $pos - $lineStartPos; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php b/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php deleted file mode 100644 index 96c8452..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeFinder.php +++ /dev/null @@ -1,90 +0,0 @@ -traverse($nodes); - - return $visitor->getFoundNodes(); - } - - /** - * Find all nodes that are instances of a certain class. - - * @template TNode as Node - * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param class-string $class Class name - * - * @return TNode[] Found nodes (all instances of $class) - */ - public function findInstanceOf($nodes, string $class): array { - return $this->find($nodes, function ($node) use ($class) { - return $node instanceof $class; - }); - } - - /** - * Find first node satisfying a filter callback. - * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param callable $filter Filter callback: function(Node $node) : bool - * - * @return null|Node Found node (or null if none found) - */ - public function findFirst($nodes, callable $filter): ?Node { - if ($nodes === []) { - return null; - } - - if (!is_array($nodes)) { - $nodes = [$nodes]; - } - - $visitor = new FirstFindingVisitor($filter); - - $traverser = new NodeTraverser($visitor); - $traverser->traverse($nodes); - - return $visitor->getFoundNode(); - } - - /** - * Find first node that is an instance of a certain class. - * - * @template TNode as Node - * - * @param Node|Node[] $nodes Single node or array of nodes to search in - * @param class-string $class Class name - * - * @return null|TNode Found node, which is an instance of $class (or null if none found) - */ - public function findFirstInstanceOf($nodes, string $class): ?Node { - return $this->findFirst($nodes, function ($node) use ($class) { - return $node instanceof $class; - }); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php deleted file mode 100644 index f5b868a..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeTraverser.php +++ /dev/null @@ -1,278 +0,0 @@ - Visitors */ - protected array $visitors = []; - - /** @var bool Whether traversal should be stopped */ - protected bool $stopTraversal; - - /** - * Create a traverser with the given visitors. - * - * @param NodeVisitor ...$visitors Node visitors - */ - public function __construct(NodeVisitor ...$visitors) { - $this->visitors = $visitors; - } - - /** - * Adds a visitor. - * - * @param NodeVisitor $visitor Visitor to add - */ - public function addVisitor(NodeVisitor $visitor): void { - $this->visitors[] = $visitor; - } - - /** - * Removes an added visitor. - */ - public function removeVisitor(NodeVisitor $visitor): void { - $index = array_search($visitor, $this->visitors); - if ($index !== false) { - array_splice($this->visitors, $index, 1, []); - } - } - - /** - * Traverses an array of nodes using the registered visitors. - * - * @param Node[] $nodes Array of nodes - * - * @return Node[] Traversed array of nodes - */ - public function traverse(array $nodes): array { - $this->stopTraversal = false; - - foreach ($this->visitors as $visitor) { - if (null !== $return = $visitor->beforeTraverse($nodes)) { - $nodes = $return; - } - } - - $nodes = $this->traverseArray($nodes); - - for ($i = \count($this->visitors) - 1; $i >= 0; --$i) { - $visitor = $this->visitors[$i]; - if (null !== $return = $visitor->afterTraverse($nodes)) { - $nodes = $return; - } - } - - return $nodes; - } - - /** - * Recursively traverse a node. - * - * @param Node $node Node to traverse. - */ - protected function traverseNode(Node $node): void { - foreach ($node->getSubNodeNames() as $name) { - $subNode = $node->$name; - - if (\is_array($subNode)) { - $node->$name = $this->traverseArray($subNode); - if ($this->stopTraversal) { - break; - } - } elseif ($subNode instanceof Node) { - $traverseChildren = true; - $visitorIndex = -1; - - foreach ($this->visitors as $visitorIndex => $visitor) { - $return = $visitor->enterNode($subNode); - if (null !== $return) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($subNode, $return); - $subNode = $node->$name = $return; - } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) { - $traverseChildren = false; - } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { - $traverseChildren = false; - break; - } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { - $this->stopTraversal = true; - break 2; - } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { - $node->$name = null; - continue 2; - } else { - throw new \LogicException( - 'enterNode() returned invalid value of type ' . gettype($return) - ); - } - } - } - - if ($traverseChildren) { - $this->traverseNode($subNode); - if ($this->stopTraversal) { - break; - } - } - - for (; $visitorIndex >= 0; --$visitorIndex) { - $visitor = $this->visitors[$visitorIndex]; - $return = $visitor->leaveNode($subNode); - - if (null !== $return) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($subNode, $return); - $subNode = $node->$name = $return; - } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { - $this->stopTraversal = true; - break 2; - } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { - $node->$name = null; - break; - } elseif (\is_array($return)) { - throw new \LogicException( - 'leaveNode() may only return an array ' . - 'if the parent structure is an array' - ); - } else { - throw new \LogicException( - 'leaveNode() returned invalid value of type ' . gettype($return) - ); - } - } - } - } - } - } - - /** - * Recursively traverse array (usually of nodes). - * - * @param array $nodes Array to traverse - * - * @return array Result of traversal (may be original array or changed one) - */ - protected function traverseArray(array $nodes): array { - $doNodes = []; - - foreach ($nodes as $i => $node) { - if ($node instanceof Node) { - $traverseChildren = true; - $visitorIndex = -1; - - foreach ($this->visitors as $visitorIndex => $visitor) { - $return = $visitor->enterNode($node); - if (null !== $return) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($node, $return); - $nodes[$i] = $node = $return; - } elseif (\is_array($return)) { - $doNodes[] = [$i, $return]; - continue 2; - } elseif (NodeVisitor::REMOVE_NODE === $return) { - $doNodes[] = [$i, []]; - continue 2; - } elseif (NodeVisitor::DONT_TRAVERSE_CHILDREN === $return) { - $traverseChildren = false; - } elseif (NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { - $traverseChildren = false; - break; - } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { - $this->stopTraversal = true; - break 2; - } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { - throw new \LogicException( - 'REPLACE_WITH_NULL can not be used if the parent structure is an array'); - } else { - throw new \LogicException( - 'enterNode() returned invalid value of type ' . gettype($return) - ); - } - } - } - - if ($traverseChildren) { - $this->traverseNode($node); - if ($this->stopTraversal) { - break; - } - } - - for (; $visitorIndex >= 0; --$visitorIndex) { - $visitor = $this->visitors[$visitorIndex]; - $return = $visitor->leaveNode($node); - - if (null !== $return) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($node, $return); - $nodes[$i] = $node = $return; - } elseif (\is_array($return)) { - $doNodes[] = [$i, $return]; - break; - } elseif (NodeVisitor::REMOVE_NODE === $return) { - $doNodes[] = [$i, []]; - break; - } elseif (NodeVisitor::STOP_TRAVERSAL === $return) { - $this->stopTraversal = true; - break 2; - } elseif (NodeVisitor::REPLACE_WITH_NULL === $return) { - throw new \LogicException( - 'REPLACE_WITH_NULL can not be used if the parent structure is an array'); - } else { - throw new \LogicException( - 'leaveNode() returned invalid value of type ' . gettype($return) - ); - } - } - } - } elseif (\is_array($node)) { - throw new \LogicException('Invalid node structure: Contains nested arrays'); - } - } - - if (!empty($doNodes)) { - while (list($i, $replace) = array_pop($doNodes)) { - array_splice($nodes, $i, 1, $replace); - } - } - - return $nodes; - } - - private function ensureReplacementReasonable(Node $old, Node $new): void { - if ($old instanceof Node\Stmt && $new instanceof Node\Expr) { - throw new \LogicException( - "Trying to replace statement ({$old->getType()}) " . - "with expression ({$new->getType()}). Are you missing a " . - "Stmt_Expression wrapper?" - ); - } - - if ($old instanceof Node\Expr && $new instanceof Node\Stmt) { - throw new \LogicException( - "Trying to replace expression ({$old->getType()}) " . - "with statement ({$new->getType()})" - ); - } - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php b/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php deleted file mode 100644 index c3992b3..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeTraverserInterface.php +++ /dev/null @@ -1,26 +0,0 @@ - $node stays as-is - * * array (of Nodes) - * => The return value is merged into the parent array (at the position of the $node) - * * NodeVisitor::REMOVE_NODE - * => $node is removed from the parent array - * * NodeVisitor::REPLACE_WITH_NULL - * => $node is replaced with null - * * NodeVisitor::DONT_TRAVERSE_CHILDREN - * => Children of $node are not traversed. $node stays as-is - * * NodeVisitor::DONT_TRAVERSE_CURRENT_AND_CHILDREN - * => Further visitors for the current node are skipped, and its children are not - * traversed. $node stays as-is. - * * NodeVisitor::STOP_TRAVERSAL - * => Traversal is aborted. $node stays as-is - * * otherwise - * => $node is set to the return value - * - * @param Node $node Node - * - * @return null|int|Node|Node[] Replacement node (or special return value) - */ - public function enterNode(Node $node); - - /** - * Called when leaving a node. - * - * Return value semantics: - * * null - * => $node stays as-is - * * NodeVisitor::REMOVE_NODE - * => $node is removed from the parent array - * * NodeVisitor::REPLACE_WITH_NULL - * => $node is replaced with null - * * NodeVisitor::STOP_TRAVERSAL - * => Traversal is aborted. $node stays as-is - * * array (of Nodes) - * => The return value is merged into the parent array (at the position of the $node) - * * otherwise - * => $node is set to the return value - * - * @param Node $node Node - * - * @return null|int|Node|Node[] Replacement node (or special return value) - */ - public function leaveNode(Node $node); - - /** - * Called once after traversal. - * - * Return value semantics: - * * null: $nodes stays as-is - * * otherwise: $nodes is set to the return value - * - * @param Node[] $nodes Array of nodes - * - * @return null|Node[] Array of nodes - */ - public function afterTraverse(array $nodes); -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php deleted file mode 100644 index cba9249..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.php +++ /dev/null @@ -1,19 +0,0 @@ -setAttribute('origNode', $origNode); - return $node; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php deleted file mode 100644 index 5e2aed3..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.php +++ /dev/null @@ -1,82 +0,0 @@ - Token positions of comments */ - private array $commentPositions = []; - - /** - * Create a comment annotation visitor. - * - * @param Token[] $tokens Token array - */ - public function __construct(array $tokens) { - $this->tokens = $tokens; - - // Collect positions of comments. We use this to avoid traversing parts of the AST where - // there are no comments. - foreach ($tokens as $i => $token) { - if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) { - $this->commentPositions[] = $i; - } - } - } - - public function enterNode(Node $node) { - $nextCommentPos = current($this->commentPositions); - if ($nextCommentPos === false) { - // No more comments. - return self::STOP_TRAVERSAL; - } - - $oldPos = $this->pos; - $this->pos = $pos = $node->getStartTokenPos(); - if ($nextCommentPos > $oldPos && $nextCommentPos < $pos) { - $comments = []; - while (--$pos >= $oldPos) { - $token = $this->tokens[$pos]; - if ($token->id === \T_DOC_COMMENT) { - $comments[] = new Comment\Doc( - $token->text, $token->line, $token->pos, $pos, - $token->getEndLine(), $token->getEndPos() - 1, $pos); - continue; - } - if ($token->id === \T_COMMENT) { - $comments[] = new Comment( - $token->text, $token->line, $token->pos, $pos, - $token->getEndLine(), $token->getEndPos() - 1, $pos); - continue; - } - if ($token->id !== \T_WHITESPACE) { - break; - } - } - if (!empty($comments)) { - $node->setAttribute('comments', array_reverse($comments)); - } - - do { - $nextCommentPos = next($this->commentPositions); - } while ($nextCommentPos !== false && $nextCommentPos < $this->pos); - } - - $endPos = $node->getEndTokenPos(); - if ($nextCommentPos > $endPos) { - // Skip children if there are no comments located inside this node. - $this->pos = $endPos; - return self::DONT_TRAVERSE_CHILDREN; - } - - return null; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php deleted file mode 100644 index 1f3f4ba..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.php +++ /dev/null @@ -1,47 +0,0 @@ -filterCallback = $filterCallback; - } - - /** - * Get found nodes satisfying the filter callback. - * - * Nodes are returned in pre-order. - * - * @return Node[] Found nodes - */ - public function getFoundNodes(): array { - return $this->foundNodes; - } - - public function beforeTraverse(array $nodes): ?array { - $this->foundNodes = []; - - return null; - } - - public function enterNode(Node $node) { - $filterCallback = $this->filterCallback; - if ($filterCallback($node)) { - $this->foundNodes[] = $node; - } - - return null; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php deleted file mode 100644 index 05deed5..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.php +++ /dev/null @@ -1,49 +0,0 @@ -filterCallback = $filterCallback; - } - - /** - * Get found node satisfying the filter callback. - * - * Returns null if no node satisfies the filter callback. - * - * @return null|Node Found node (or null if not found) - */ - public function getFoundNode(): ?Node { - return $this->foundNode; - } - - public function beforeTraverse(array $nodes): ?array { - $this->foundNode = null; - - return null; - } - - public function enterNode(Node $node) { - $filterCallback = $this->filterCallback; - if ($filterCallback($node)) { - $this->foundNode = $node; - return NodeVisitor::STOP_TRAVERSAL; - } - - return null; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php deleted file mode 100644 index ccd014e..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NameResolver.php +++ /dev/null @@ -1,262 +0,0 @@ -nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing()); - $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? false; - $this->replaceNodes = $options['replaceNodes'] ?? true; - } - - /** - * Get name resolution context. - */ - public function getNameContext(): NameContext { - return $this->nameContext; - } - - public function beforeTraverse(array $nodes): ?array { - $this->nameContext->startNamespace(); - return null; - } - - public function enterNode(Node $node) { - if ($node instanceof Stmt\Namespace_) { - $this->nameContext->startNamespace($node->name); - } elseif ($node instanceof Stmt\Use_) { - foreach ($node->uses as $use) { - $this->addAlias($use, $node->type, null); - } - } elseif ($node instanceof Stmt\GroupUse) { - foreach ($node->uses as $use) { - $this->addAlias($use, $node->type, $node->prefix); - } - } elseif ($node instanceof Stmt\Class_) { - if (null !== $node->extends) { - $node->extends = $this->resolveClassName($node->extends); - } - - foreach ($node->implements as &$interface) { - $interface = $this->resolveClassName($interface); - } - - $this->resolveAttrGroups($node); - if (null !== $node->name) { - $this->addNamespacedName($node); - } else { - $node->namespacedName = null; - } - } elseif ($node instanceof Stmt\Interface_) { - foreach ($node->extends as &$interface) { - $interface = $this->resolveClassName($interface); - } - - $this->resolveAttrGroups($node); - $this->addNamespacedName($node); - } elseif ($node instanceof Stmt\Enum_) { - foreach ($node->implements as &$interface) { - $interface = $this->resolveClassName($interface); - } - - $this->resolveAttrGroups($node); - $this->addNamespacedName($node); - } elseif ($node instanceof Stmt\Trait_) { - $this->resolveAttrGroups($node); - $this->addNamespacedName($node); - } elseif ($node instanceof Stmt\Function_) { - $this->resolveSignature($node); - $this->resolveAttrGroups($node); - $this->addNamespacedName($node); - } elseif ($node instanceof Stmt\ClassMethod - || $node instanceof Expr\Closure - || $node instanceof Expr\ArrowFunction - ) { - $this->resolveSignature($node); - $this->resolveAttrGroups($node); - } elseif ($node instanceof Stmt\Property) { - if (null !== $node->type) { - $node->type = $this->resolveType($node->type); - } - $this->resolveAttrGroups($node); - } elseif ($node instanceof Stmt\Const_) { - foreach ($node->consts as $const) { - $this->addNamespacedName($const); - } - } elseif ($node instanceof Stmt\ClassConst) { - if (null !== $node->type) { - $node->type = $this->resolveType($node->type); - } - $this->resolveAttrGroups($node); - } elseif ($node instanceof Stmt\EnumCase) { - $this->resolveAttrGroups($node); - } elseif ($node instanceof Expr\StaticCall - || $node instanceof Expr\StaticPropertyFetch - || $node instanceof Expr\ClassConstFetch - || $node instanceof Expr\New_ - || $node instanceof Expr\Instanceof_ - ) { - if ($node->class instanceof Name) { - $node->class = $this->resolveClassName($node->class); - } - } elseif ($node instanceof Stmt\Catch_) { - foreach ($node->types as &$type) { - $type = $this->resolveClassName($type); - } - } elseif ($node instanceof Expr\FuncCall) { - if ($node->name instanceof Name) { - $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION); - } - } elseif ($node instanceof Expr\ConstFetch) { - $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT); - } elseif ($node instanceof Stmt\TraitUse) { - foreach ($node->traits as &$trait) { - $trait = $this->resolveClassName($trait); - } - - foreach ($node->adaptations as $adaptation) { - if (null !== $adaptation->trait) { - $adaptation->trait = $this->resolveClassName($adaptation->trait); - } - - if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) { - foreach ($adaptation->insteadof as &$insteadof) { - $insteadof = $this->resolveClassName($insteadof); - } - } - } - } - - return null; - } - - /** @param Stmt\Use_::TYPE_* $type */ - private function addAlias(Node\UseItem $use, int $type, ?Name $prefix = null): void { - // Add prefix for group uses - $name = $prefix ? Name::concat($prefix, $use->name) : $use->name; - // Type is determined either by individual element or whole use declaration - $type |= $use->type; - - $this->nameContext->addAlias( - $name, (string) $use->getAlias(), $type, $use->getAttributes() - ); - } - - /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure|Expr\ArrowFunction $node */ - private function resolveSignature($node): void { - foreach ($node->params as $param) { - $param->type = $this->resolveType($param->type); - $this->resolveAttrGroups($param); - } - $node->returnType = $this->resolveType($node->returnType); - } - - /** - * @template T of Node\Identifier|Name|Node\ComplexType|null - * @param T $node - * @return T - */ - private function resolveType(?Node $node): ?Node { - if ($node instanceof Name) { - return $this->resolveClassName($node); - } - if ($node instanceof Node\NullableType) { - $node->type = $this->resolveType($node->type); - return $node; - } - if ($node instanceof Node\UnionType || $node instanceof Node\IntersectionType) { - foreach ($node->types as &$type) { - $type = $this->resolveType($type); - } - return $node; - } - return $node; - } - - /** - * Resolve name, according to name resolver options. - * - * @param Name $name Function or constant name to resolve - * @param Stmt\Use_::TYPE_* $type One of Stmt\Use_::TYPE_* - * - * @return Name Resolved name, or original name with attribute - */ - protected function resolveName(Name $name, int $type): Name { - if (!$this->replaceNodes) { - $resolvedName = $this->nameContext->getResolvedName($name, $type); - if (null !== $resolvedName) { - $name->setAttribute('resolvedName', $resolvedName); - } else { - $name->setAttribute('namespacedName', FullyQualified::concat( - $this->nameContext->getNamespace(), $name, $name->getAttributes())); - } - return $name; - } - - if ($this->preserveOriginalNames) { - // Save the original name - $originalName = $name; - $name = clone $originalName; - $name->setAttribute('originalName', $originalName); - } - - $resolvedName = $this->nameContext->getResolvedName($name, $type); - if (null !== $resolvedName) { - return $resolvedName; - } - - // unqualified names inside a namespace cannot be resolved at compile-time - // add the namespaced version of the name as an attribute - $name->setAttribute('namespacedName', FullyQualified::concat( - $this->nameContext->getNamespace(), $name, $name->getAttributes())); - return $name; - } - - protected function resolveClassName(Name $name): Name { - return $this->resolveName($name, Stmt\Use_::TYPE_NORMAL); - } - - protected function addNamespacedName(Node $node): void { - $node->namespacedName = Name::concat( - $this->nameContext->getNamespace(), (string) $node->name); - } - - protected function resolveAttrGroups(Node $node): void { - foreach ($node->attrGroups as $attrGroup) { - foreach ($attrGroup->attrs as $attr) { - $attr->name = $this->resolveClassName($attr->name); - } - } - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php deleted file mode 100644 index 38fedfd..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.php +++ /dev/null @@ -1,51 +0,0 @@ -$node->getAttribute('parent'), the previous - * node can be accessed through $node->getAttribute('previous'), - * and the next node can be accessed through $node->getAttribute('next'). - */ -final class NodeConnectingVisitor extends NodeVisitorAbstract { - /** - * @var Node[] - */ - private array $stack = []; - - /** - * @var ?Node - */ - private $previous; - - public function beforeTraverse(array $nodes) { - $this->stack = []; - $this->previous = null; - } - - public function enterNode(Node $node) { - if (!empty($this->stack)) { - $node->setAttribute('parent', $this->stack[count($this->stack) - 1]); - } - - if ($this->previous !== null && $this->previous->getAttribute('parent') === $node->getAttribute('parent')) { - $node->setAttribute('previous', $this->previous); - $this->previous->setAttribute('next', $node); - } - - $this->stack[] = $node; - } - - public function leaveNode(Node $node) { - $this->previous = $node; - - array_pop($this->stack); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php deleted file mode 100644 index 1e7e9e8..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.php +++ /dev/null @@ -1,38 +0,0 @@ -$node->getAttribute('parent'). - */ -final class ParentConnectingVisitor extends NodeVisitorAbstract { - /** - * @var Node[] - */ - private array $stack = []; - - public function beforeTraverse(array $nodes) { - $this->stack = []; - } - - public function enterNode(Node $node) { - if (!empty($this->stack)) { - $node->setAttribute('parent', $this->stack[count($this->stack) - 1]); - } - - $this->stack[] = $node; - } - - public function leaveNode(Node $node) { - array_pop($this->stack); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php deleted file mode 100644 index 6fb15cc..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/NodeVisitorAbstract.php +++ /dev/null @@ -1,24 +0,0 @@ -'", - "T_IS_GREATER_OR_EQUAL", - "T_SL", - "T_SR", - "'+'", - "'-'", - "'.'", - "'*'", - "'/'", - "'%'", - "'!'", - "T_INSTANCEOF", - "'~'", - "T_INC", - "T_DEC", - "T_INT_CAST", - "T_DOUBLE_CAST", - "T_STRING_CAST", - "T_ARRAY_CAST", - "T_OBJECT_CAST", - "T_BOOL_CAST", - "T_UNSET_CAST", - "'@'", - "T_POW", - "'['", - "T_NEW", - "T_CLONE", - "T_EXIT", - "T_IF", - "T_ELSEIF", - "T_ELSE", - "T_ENDIF", - "T_LNUMBER", - "T_DNUMBER", - "T_STRING", - "T_STRING_VARNAME", - "T_VARIABLE", - "T_NUM_STRING", - "T_INLINE_HTML", - "T_ENCAPSED_AND_WHITESPACE", - "T_CONSTANT_ENCAPSED_STRING", - "T_ECHO", - "T_DO", - "T_WHILE", - "T_ENDWHILE", - "T_FOR", - "T_ENDFOR", - "T_FOREACH", - "T_ENDFOREACH", - "T_DECLARE", - "T_ENDDECLARE", - "T_AS", - "T_SWITCH", - "T_MATCH", - "T_ENDSWITCH", - "T_CASE", - "T_DEFAULT", - "T_BREAK", - "T_CONTINUE", - "T_GOTO", - "T_FUNCTION", - "T_FN", - "T_CONST", - "T_RETURN", - "T_TRY", - "T_CATCH", - "T_FINALLY", - "T_USE", - "T_INSTEADOF", - "T_GLOBAL", - "T_STATIC", - "T_ABSTRACT", - "T_FINAL", - "T_PRIVATE", - "T_PROTECTED", - "T_PUBLIC", - "T_READONLY", - "T_PUBLIC_SET", - "T_PROTECTED_SET", - "T_PRIVATE_SET", - "T_VAR", - "T_UNSET", - "T_ISSET", - "T_EMPTY", - "T_HALT_COMPILER", - "T_CLASS", - "T_TRAIT", - "T_INTERFACE", - "T_ENUM", - "T_EXTENDS", - "T_IMPLEMENTS", - "T_OBJECT_OPERATOR", - "T_NULLSAFE_OBJECT_OPERATOR", - "T_LIST", - "T_ARRAY", - "T_CALLABLE", - "T_CLASS_C", - "T_TRAIT_C", - "T_METHOD_C", - "T_FUNC_C", - "T_PROPERTY_C", - "T_LINE", - "T_FILE", - "T_START_HEREDOC", - "T_END_HEREDOC", - "T_DOLLAR_OPEN_CURLY_BRACES", - "T_CURLY_OPEN", - "T_PAAMAYIM_NEKUDOTAYIM", - "T_NAMESPACE", - "T_NS_C", - "T_DIR", - "T_NS_SEPARATOR", - "T_ELLIPSIS", - "T_NAME_FULLY_QUALIFIED", - "T_NAME_QUALIFIED", - "T_NAME_RELATIVE", - "T_ATTRIBUTE", - "';'", - "']'", - "'('", - "')'", - "'{'", - "'}'", - "'`'", - "'\"'", - "'$'" - ); - - protected array $tokenToSymbol = array( - 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 56, 170, 172, 171, 55, 172, 172, - 165, 166, 53, 50, 8, 51, 52, 54, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 31, 163, - 44, 16, 46, 30, 68, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 70, 172, 164, 36, 172, 169, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 167, 35, 168, 58, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 1, 2, 3, 4, - 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, - 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162 - ); - - protected array $action = array( - 128, 129, 130, 564, 131, 132, 943, 753, 754, 755, - 133, 38, 837, 484, 560, 1363,-32766,-32766,-32766, 0, - 828, 1120, 1121, 1122, 1116, 1115, 1114, 1123, 1117, 1118, - 1119,-32766,-32766,-32766, -331, 747, 746,-32766, 839,-32766, - -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767, - -32767, 24,-32766, 1032, -567, 756, 1120, 1121, 1122, 1116, - 1115, 1114, 1123, 1117, 1118, 1119, 2, 381, 382, 265, - 134, 384, 760, 761, 762, 763, 1109, 424, 425, 1298, - 328, 36, 248, 26, 291, 817, 764, 765, 766, 767, - 768, 769, 770, 771, 772, 773, 793, 565, 794, 795, - 796, 797, 785, 786, 345, 346, 788, 789, 774, 775, - 776, 778, 779, 780, 357, 820, 821, 822, 823, 824, - 566, -567, -567, 299, 781, 782, 567, 568, -194, 805, - 803, 804, 816, 800, 801, 35, -193, 569, 570, 799, - 571, 572, 573, 574,-32766, 575, 576, 470, 471, 485, - 238, -567, 802, 577, 578, -370, 135, -370, 128, 129, - 130, 564, 131, 132, 1065, 753, 754, 755, 133, 38, - -32766, 136, 727, 1025, 1024, 1023, 1029, 1026, 1027, 1028, - -32766,-32766,-32766,-32767,-32767,-32767,-32767, 101, 102, 103, - 104, 105, -331, 747, 746, 1041, 922,-32766,-32766,-32766, - 838,-32766, 145,-32766,-32766,-32766,-32766,-32766,-32766,-32766, - -32766,-32766,-32766, 756,-32766,-32766,-32766, 610,-32766, 290, - -32766,-32766,-32766,-32766,-32766, 833, 717, 265, 134, 384, - 760, 761, 762, 763, -614,-32766, 425,-32766,-32766,-32766, - -32766, -614, 251, 817, 764, 765, 766, 767, 768, 769, - 770, 771, 772, 773, 793, 565, 794, 795, 796, 797, - 785, 786, 345, 346, 788, 789, 774, 775, 776, 778, - 779, 780, 357, 820, 821, 822, 823, 824, 566, 912, - 425, 310, 781, 782, 567, 568, -194, 805, 803, 804, - 816, 800, 801, 1286, -193, 569, 570, 799, 571, 572, - 573, 574, -272, 575, 576, 834, 82, 83, 84, -85, - 802, 577, 578, 237, 148, 777, 748, 749, 750, 751, - 752, 945, 753, 754, 755, 790, 791, 37,-32766, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 1041, 276,-32766,-32766,-32766, 924, 1261, - 1260, 1262, 712, 830, 358, 393, 109, 7, 1095, 47, - 756,-32766,-32766,-32766, 837, -85,-32766, 1093,-32766,-32766, - -32766, 1266,-32766,-32766, 757, 758, 759, 760, 761, 762, - 763, 992,-32766, 826,-32766,-32766, 922, -614, 312, -614, - 817, 764, 765, 766, 767, 768, 769, 770, 771, 772, - 773, 793, 815, 794, 795, 796, 797, 785, 786, 787, - 814, 788, 789, 774, 775, 776, 778, 779, 780, 819, - 820, 821, 822, 823, 824, 825, 300, 301, 324, 781, - 782, 783, 784, 832, 805, 803, 804, 816, 800, 801, - 714, 1038, 792, 798, 799, 806, 807, 809, 808, 140, - 810, 811, 837, 327, 340,-32766, 125, 802, 813, 812, - 49, 50, 51, 516, 52, 53, 1041, -110, 341, 912, - 54, 55, -110, 56, -110, -565,-32766,-32766,-32766, 306, - 1041, 126, -110, -110, -110, -110, -110, -110, -110, -110, - -110, -110, -110, -611, 1094, 106, 107, 108, 739, 276, - -611, 961, 962,-32766, 290, 287, 963, 1328, 57, 58, - -32766, 109, 371, 993, 59, 957, 60, 245, 246, 61, - 62, 63, 64, 65, 66, 67, 68,-32766, 28, 267, - 69, 440, 517, 375, -345, 74, 1292, 1293, 518, 391, - 837, 327, -565, -565, 1290, 42, 20, 519, 924, 520, - 922, 521, 712, 522, -563, 692, 523, 524, -565, 922, - 442, 44, 45, 446, 378, 377, 945, 46, 525, 922, - -571, 443, -565, 369, 339, 1344, 103, 104, 105, -562, - 1252, 922, 383, 382, 444, 527, 528, 529, 864, 718, - 865, 693, 424, 460, 461, 462, 445, 531, 532, 719, - 1278, 1279, 1280, 1281, 1283, 1275, 1276, 298, 864, 363, - 865, 722, 843, 1282, 1277, 694, 695, 1261, 1260, 1262, - 299, -563, -563, 70, -153, -153, -153, 322, 323, 327, - -78, -4, 922, 912, 1261, 1260, 1262, -563, 150, -153, - 283, -153, 912, -153, 151, -153, -562, -562, 153, -570, - 1348, -563, 912, -58, 828, 376, -611, 1347, -611, 747, - 746, 836, -562, -605, 912, -605, 961, 962, 154, 747, - 746, 526, 616, 81, -569, 1038, -562, 327, 155, 898, - 957, -110, -110, -110, 32, 110, 111, 112, 113, 114, - 115, 116, 117, 118, 119, 120, 121, 122, 157, -564, - 1041, 1373, 28, 268, 1374, 33, 922, -87, 659, 21, - 678, 679, 924, -57, 837, 912, 712, -153, 1290, 149, - 408, 924, 379, 380, 283, 712, 123, 1168, 1170, 385, - 386, 978, 124, 137, 138, 712, 729, 376, -561, 437, - 1064, 141, 144, 924, 297, 327, 158, 712, 961, 962, - 650, 651, 159, 526, 1252, -84, 160, 161, 747, 746, - 162, 530, 957, -110, -110, -110, -564, -564, -78, 287, - 1266, 531, 532, -73, 1278, 1279, 1280, 1281, 1283, 1275, - 1276, -72, -564, -71, -70, 11, 1259, 1282, 1277, 912, - -69, 747, 746, -68, 924,-32766, -564, 72, 712, -4, - -16, 1259, 323, 327, -67, -561, -561, 291,-32766,-32766, - -32766, -66,-32766, -65,-32766, -46,-32766, -18, 142,-32766, - 275, -561, 1257, 284,-32766,-32766,-32766, 728,-32766, 731, - -32766,-32766, 921, 147, 1259, -561,-32766, 421, 28, 267, - -305,-32766,-32766,-32766, -301,-32766, 1040,-32766,-32766,-32766, - 837, 837,-32766, 288, 1290, 1038, 279,-32766,-32766,-32766, - 280, 285, 286,-32766,-32766, 1261, 1260, 1262, 924,-32766, - 421, 333, 712, 28, 268, 289, 292, 293, 146, 73, - 1041,-32766, 939, 109, 688, 837, -110, -110, -561, 1290, - 1252, -110, 276,-32766, 837, 828, 1375, 703, 705, 581, - -110, 1127, 307, 648, 283,-32766, 958, 665, 532,-32766, - 1278, 1279, 1280, 1281, 1283, 1275, 1276, 681, 1041, 660, - -50, 10, 666, 1282, 1277, 1252, 304, 467, 495, 311, - 941, 299, 682, 72, 74, 305, -527,-32766, 323, 327, - 327, 299, 290, 532, 836, 1278, 1279, 1280, 1281, 1283, - 1275, 1276, 587, 139, 1297, -561, -561, 614, 1282, 1277, - 34, 0, 0,-32766, 0, 0, 0, 0, 72, 1259, - 0, -561, 0, 323, 327, 0,-32766,-32766,-32766, 0, - -32766, -517,-32766, 1299,-32766, -561, 0,-32766, 0, 0, - 8, 0,-32766,-32766,-32766, 922,-32766, 40,-32766,-32766, - 27, 373, 1259, 0,-32766, 421, 41, -599, 736,-32766, - -32766,-32766, 737,-32766, 856,-32766,-32766,-32766, 922, 903, - -32766, 1002, 979, 986, 976,-32766,-32766,-32766, 987,-32766, - 901,-32766,-32766, 974, 1098, 1259, 1101,-32766, 421, 48, - 1102, 1099,-32766,-32766,-32766, 1100,-32766, 1106,-32766,-32766, - -32766, 1287, 848,-32766, 1314, 1332, 1366, 490,-32766,-32766, - -32766, 653,-32766, -598,-32766,-32766, -597, -571, 1259, 594, - -32766, 421, -570, -569, 1266,-32766,-32766,-32766, 912,-32766, - -568,-32766,-32766,-32766, -511, 1,-32766, -275, 29, 30, - 39,-32766,-32766,-32766, -250, -250, -250,-32766,-32766, 43, - 376, 912, 71,-32766, 421, 75, 302, 303, 76, 77, - 78, 961, 962, 79, 80,-32766, 526, -249, -249, -249, - -273, 143, 374, 376, 898, 957, -110, -110, -110, 152, - 156, 243, 329, 358, 961, 962, 127, 359, 360, 526, - 361, 362, 363, 364, 365, 366, 367, 898, 957, -110, - -110, -110,-32766, -272, 368, 837, 370, 924, 1259, 13, - 438, 712, -250, 559, 321,-32766,-32766,-32766, 14,-32766, - 15,-32766, 16,-32766, 18, 407,-32766, 486, 487, 494, - 924,-32766,-32766,-32766, 712, -249, 497,-32766,-32766, 498, - -110, -110, 499,-32766, 421, -110, 500, 504, 505, 506, - 514, 592, 698, 1067, -110,-32766, 1208, 1288, 1066, 1047, - 1247, 1043, -277,-32766, -102, 12, 17, 22, 296, 406, - 606, 611, 639, 704, 1212, 1265, 1209, 1345, 0, 372, - 713, 716, 720, 721, 723, 299, 724, 725, 74, 726, - 1225, 730, 715, 0, 327, 733, 1291, 899, 1370, 1372, - 859, 858, 867, 951, 994, 866, 1371, 950, 948, 949, - 952, 1240, 932, 942, 930, 984, 985, 637, 1369, 1326, - 1315, 1333, 1342, 0, 0, 0, 327 - ); - - protected array $actionCheck = array( - 2, 3, 4, 5, 6, 7, 1, 9, 10, 11, - 12, 13, 82, 31, 85, 85, 9, 10, 11, 0, - 80, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 9, 10, 11, 8, 37, 38, 30, 1, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 101, 30, 1, 70, 57, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 8, 106, 107, 71, - 72, 73, 74, 75, 76, 77, 126, 116, 80, 150, - 70, 151, 152, 8, 30, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 137, 138, 162, 126, 127, 128, 129, 8, 131, - 132, 133, 134, 135, 136, 8, 8, 139, 140, 141, - 142, 143, 144, 145, 9, 147, 148, 137, 138, 167, - 14, 167, 154, 155, 156, 106, 158, 108, 2, 3, - 4, 5, 6, 7, 166, 9, 10, 11, 12, 13, - 116, 8, 167, 119, 120, 121, 122, 123, 124, 125, - 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, - 51, 52, 166, 37, 38, 141, 1, 9, 10, 11, - 163, 30, 8, 32, 33, 34, 35, 36, 37, 38, - 9, 10, 11, 57, 9, 10, 11, 1, 30, 165, - 32, 33, 34, 35, 36, 80, 31, 71, 72, 73, - 74, 75, 76, 77, 1, 30, 80, 32, 33, 34, - 35, 8, 8, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 84, - 80, 8, 126, 127, 128, 129, 166, 131, 132, 133, - 134, 135, 136, 1, 166, 139, 140, 141, 142, 143, - 144, 145, 166, 147, 148, 160, 9, 10, 11, 31, - 154, 155, 156, 97, 158, 2, 3, 4, 5, 6, - 7, 122, 9, 10, 11, 12, 13, 30, 116, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 141, 57, 9, 10, 11, 163, 159, - 160, 161, 167, 80, 165, 106, 69, 108, 168, 70, - 57, 9, 10, 11, 82, 97, 30, 1, 32, 33, - 34, 1, 9, 10, 71, 72, 73, 74, 75, 76, - 77, 31, 30, 80, 32, 33, 1, 164, 8, 166, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 137, 138, 8, 126, - 127, 128, 129, 160, 131, 132, 133, 134, 135, 136, - 167, 116, 139, 140, 141, 142, 143, 144, 145, 167, - 147, 148, 82, 171, 8, 116, 167, 154, 155, 156, - 2, 3, 4, 5, 6, 7, 141, 101, 8, 84, - 12, 13, 106, 15, 108, 70, 9, 10, 11, 113, - 141, 14, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 1, 163, 53, 54, 55, 167, 57, - 8, 117, 118, 116, 165, 30, 122, 1, 50, 51, - 140, 69, 8, 163, 56, 131, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 140, 70, 71, - 72, 73, 74, 8, 168, 165, 78, 79, 80, 8, - 82, 171, 137, 138, 86, 87, 88, 89, 163, 91, - 1, 93, 167, 95, 70, 80, 98, 99, 153, 1, - 8, 103, 104, 105, 106, 107, 122, 109, 110, 1, - 165, 8, 167, 115, 116, 1, 50, 51, 52, 70, - 122, 1, 106, 107, 8, 127, 128, 129, 106, 31, - 108, 116, 116, 132, 133, 134, 8, 139, 140, 31, - 142, 143, 144, 145, 146, 147, 148, 149, 106, 165, - 108, 31, 8, 155, 156, 140, 141, 159, 160, 161, - 162, 137, 138, 165, 75, 76, 77, 169, 170, 171, - 16, 0, 1, 84, 159, 160, 161, 153, 14, 90, - 165, 92, 84, 94, 14, 96, 137, 138, 14, 165, - 1, 167, 84, 16, 80, 106, 164, 8, 166, 37, - 38, 159, 153, 164, 84, 166, 117, 118, 14, 37, - 38, 122, 51, 167, 165, 116, 167, 171, 14, 130, - 131, 132, 133, 134, 16, 17, 18, 19, 20, 21, - 22, 23, 24, 25, 26, 27, 28, 29, 14, 70, - 141, 80, 70, 71, 83, 14, 1, 31, 75, 76, - 75, 76, 163, 16, 82, 84, 167, 168, 86, 101, - 102, 163, 106, 107, 165, 167, 16, 59, 60, 106, - 107, 163, 16, 16, 16, 167, 31, 106, 70, 108, - 1, 167, 16, 163, 113, 171, 16, 167, 117, 118, - 111, 112, 16, 122, 122, 31, 16, 16, 37, 38, - 16, 130, 131, 132, 133, 134, 137, 138, 31, 30, - 1, 139, 140, 31, 142, 143, 144, 145, 146, 147, - 148, 31, 153, 31, 31, 154, 80, 155, 156, 84, - 31, 37, 38, 31, 163, 74, 167, 165, 167, 168, - 31, 80, 170, 171, 31, 137, 138, 30, 87, 88, - 89, 31, 91, 31, 93, 31, 95, 31, 31, 98, - 31, 153, 116, 31, 103, 104, 105, 31, 74, 31, - 109, 110, 31, 31, 80, 167, 115, 116, 70, 71, - 35, 87, 88, 89, 35, 91, 140, 93, 127, 95, - 82, 82, 98, 37, 86, 116, 35, 103, 104, 105, - 35, 35, 35, 109, 110, 159, 160, 161, 163, 115, - 116, 35, 167, 70, 71, 37, 37, 37, 70, 158, - 141, 127, 38, 69, 77, 82, 117, 118, 70, 86, - 122, 122, 57, 116, 82, 80, 83, 80, 92, 89, - 131, 82, 114, 113, 165, 85, 131, 96, 140, 140, - 142, 143, 144, 145, 146, 147, 148, 94, 141, 90, - 31, 97, 100, 155, 156, 122, 135, 97, 97, 135, - 158, 162, 100, 165, 165, 136, 153, 140, 170, 171, - 171, 162, 165, 140, 159, 142, 143, 144, 145, 146, - 147, 148, 157, 31, 150, 137, 138, 157, 155, 156, - 167, -1, -1, 74, -1, -1, -1, -1, 165, 80, - -1, 153, -1, 170, 171, -1, 87, 88, 89, -1, - 91, 153, 93, 150, 95, 167, -1, 98, -1, -1, - 153, -1, 103, 104, 105, 1, 74, 163, 109, 110, - 153, 153, 80, -1, 115, 116, 163, 165, 163, 87, - 88, 89, 163, 91, 163, 93, 127, 95, 1, 163, - 98, 163, 163, 163, 163, 103, 104, 105, 163, 74, - 163, 109, 110, 163, 163, 80, 163, 115, 116, 70, - 163, 163, 87, 88, 89, 163, 91, 163, 93, 127, - 95, 164, 164, 98, 164, 164, 164, 102, 103, 104, - 105, 164, 74, 165, 109, 110, 165, 165, 80, 81, - 115, 116, 165, 165, 1, 87, 88, 89, 84, 91, - 165, 93, 127, 95, 165, 165, 98, 166, 165, 165, - 165, 103, 104, 105, 100, 101, 102, 109, 110, 165, - 106, 84, 165, 115, 116, 165, 137, 138, 165, 165, - 165, 117, 118, 165, 165, 127, 122, 100, 101, 102, - 166, 165, 153, 106, 130, 131, 132, 133, 134, 165, - 165, 165, 165, 165, 117, 118, 167, 165, 165, 122, - 165, 165, 165, 165, 165, 165, 165, 130, 131, 132, - 133, 134, 74, 166, 165, 82, 165, 163, 80, 166, - 165, 167, 168, 165, 167, 87, 88, 89, 166, 91, - 166, 93, 166, 95, 166, 166, 98, 166, 166, 166, - 163, 103, 104, 105, 167, 168, 166, 109, 110, 166, - 117, 118, 166, 115, 116, 122, 166, 166, 166, 166, - 166, 166, 166, 166, 131, 127, 166, 166, 166, 166, - 166, 166, 166, 140, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, -1, 167, - 167, 167, 167, 167, 167, 162, 167, 167, 165, 167, - 169, 167, 167, -1, 171, 168, 170, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, -1, -1, -1, 171 - ); - - protected array $actionBase = array( - 0, -2, 156, 559, 641, 1004, 1027, 485, 292, 200, - -60, 283, 568, 590, 590, 715, 590, 195, 578, 892, - 395, 395, 395, 827, 313, 313, 827, 313, 731, 731, - 731, 731, 764, 764, 965, 965, 998, 932, 899, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 37, 360, 216, 701, 1062, 1068, 1064, - 1069, 1060, 1059, 1063, 1065, 1070, 1110, 1111, 812, 1112, - 1113, 1109, 1114, 1066, 907, 1061, 1067, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 135, 477, 373, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 201, 201, 201, - 201, 201, 201, 201, 201, 201, 201, 642, 642, 22, - 22, 22, 362, 813, 778, 813, 813, 813, 813, 813, - 813, 813, 813, 346, 205, 678, 188, 171, 171, 7, - 7, 7, 7, 7, 376, 779, 54, 1083, 1083, 139, - 139, 139, 139, -50, 49, 749, 380, 787, -39, 569, - 569, 536, 536, 335, 335, 349, 349, 335, 335, 335, - 212, 212, 212, 212, 415, 494, 519, 512, -71, 807, - 584, 584, 584, 584, 807, 807, 807, 807, 843, 1086, - 807, 807, 807, 639, 828, 828, 979, 452, 452, 452, - 828, 492, -70, -70, 492, 394, -70, 516, 631, 397, - 785, 486, 509, 397, -16, 299, 502, 233, 795, 626, - 795, 1058, 199, 830, 830, 794, 752, 454, 894, 1085, - 1071, 832, 1107, 842, 1108, 471, 10, 747, 1056, 1056, - 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1056, 1115, - 632, 1058, 145, 1115, 1115, 1115, 632, 632, 632, 632, - 632, 632, 632, 632, 796, 632, 632, 649, 145, 643, - 645, 145, 846, 632, 37, 838, 37, 37, 37, 37, - 37, 37, 37, 37, 37, 37, -18, 37, 360, 5, - 5, 341, 52, 5, 5, 5, 5, 37, 37, 37, - 37, 626, 845, 805, 633, 278, 810, 128, 845, 845, - 845, 26, 136, 120, 815, 819, 259, 825, 825, 829, - 930, 930, 825, 822, 825, 829, 825, 825, 930, 930, - 789, 930, 163, 562, 456, 535, 573, 930, 273, 825, - 825, 825, 825, 804, 930, 58, 586, 825, 234, 194, - 825, 825, 804, 801, 802, 809, 930, 930, 930, 804, - 514, 809, 809, 809, 855, 859, 800, 799, 430, 390, - 614, 127, 854, 799, 799, 825, 541, 800, 799, 800, - 799, 782, 799, 799, 799, 800, 799, 822, 470, 799, - 740, 746, 598, 75, 799, 19, 947, 950, 686, 953, - 935, 954, 1005, 955, 958, 1073, 929, 976, 944, 959, - 1008, 934, 933, 811, 720, 726, 847, 793, 925, 824, - 824, 824, 912, 917, 824, 824, 824, 824, 824, 824, - 824, 824, 720, 897, 858, 820, 982, 727, 728, 1045, - 814, 1089, 1081, 978, 947, 958, 734, 944, 959, 934, - 933, 792, 790, 772, 783, 769, 763, 760, 762, 797, - 1047, 966, 844, 736, 1018, 983, 1087, 1007, 985, 986, - 1019, 1050, 861, 1051, 1090, 818, 1091, 1092, 898, 988, - 1074, 824, 911, 852, 900, 987, 918, 720, 901, 1052, - 1003, 803, 1021, 1022, 1072, 840, 823, 902, 1093, 989, - 990, 991, 1075, 1076, 853, 1012, 931, 1023, 841, 1094, - 1030, 1033, 1036, 1040, 1077, 1095, 1079, 908, 1080, 866, - 839, 964, 821, 1096, 634, 836, 837, 850, 1001, 640, - 977, 1082, 1097, 1098, 1041, 1042, 1043, 1099, 1100, 974, - 868, 1014, 833, 1016, 997, 869, 870, 644, 849, 1053, - 831, 835, 848, 664, 674, 1101, 1102, 1103, 975, 806, - 817, 871, 875, 1054, 826, 1055, 1104, 694, 877, 1105, - 1046, 750, 751, 624, 707, 647, 754, 816, 1084, 857, - 798, 834, 999, 751, 808, 880, 1106, 881, 883, 887, - 1044, 888, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 468, 468, 468, 468, 468, 468, 313, 313, - 313, 313, 313, 468, 468, 468, 468, 468, 468, 468, - 313, 468, 468, 468, 313, 0, 0, 313, 0, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 716, 716, - 297, 297, 297, 297, 716, 716, 716, 716, 716, 716, - 716, 716, 716, 716, 297, 297, 0, 297, 297, 297, - 297, 297, 297, 297, 297, 789, 716, 716, 716, 716, - 452, 452, 452, 452, -95, -95, 716, 716, 716, 394, - 716, 716, 452, 452, 716, 716, 716, 716, 716, 716, - 716, 716, 716, 716, 716, 0, 0, 0, 145, -70, - 716, 822, 822, 822, 822, 716, 716, 716, 716, -70, - -70, 716, 716, 716, 0, 0, 0, 0, 0, 0, - 0, 0, 145, 0, 0, 145, 0, 0, 822, 822, - 716, 394, 789, 659, 716, 0, 0, 0, 0, 145, - 822, 145, 632, 825, -70, -70, 632, 632, 825, 5, - 37, 659, 628, 628, 628, 628, 0, 0, 626, 789, - 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, - 822, 0, 789, 0, 822, 822, 822, 0, 0, 0, - 0, 0, 0, 0, 0, 930, 0, 0, 0, 0, - 0, 0, 0, 822, 0, 0, 930, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 822, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 824, 840, 0, 0, 840, 0, 824, - 824, 824, 0, 0, 0, 849, 826 - ); - - protected array $actionDefault = array( - 3,32767, 102,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 100,32767, 617, 617, - 617, 617,32767,32767, 254, 102,32767,32767, 486, 403, - 403, 403,32767,32767, 559, 559, 559, 559, 559,32767, - 32767,32767,32767,32767,32767, 486,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767, 36, 7, - 8, 10, 11, 49, 17, 327, 100,32767,32767,32767, - 32767,32767,32767,32767,32767, 102,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 610,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767, 391, 490, 469, - 470, 472, 473, 402, 560, 616, 330, 613, 332, 401, - 145, 342, 333, 242, 258, 491, 259, 492, 495, 496, - 215, 388, 149, 150, 433, 487, 435, 485, 489, 434, - 408, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 406, 407, 488,32767,32767, 466, - 465, 464, 431,32767,32767,32767,32767,32767,32767,32767, - 32767, 102,32767, 432, 436, 405, 439, 437, 438, 455, - 456, 453, 454, 457,32767,32767, 319,32767,32767, 458, - 459, 460, 461, 369, 367,32767,32767, 319, 111,32767, - 32767, 446, 447,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767, 503, 553, 463,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 102,32767, 100, 555, 428, 430, 523, 441, 442, 440, - 409,32767, 528,32767, 102,32767, 530,32767,32767,32767, - 32767,32767,32767,32767, 554,32767, 561, 561,32767, 516, - 100, 195,32767,32767, 529, 195, 195,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 624, 516, 110, 110, - 110, 110, 110, 110, 110, 110, 110, 110, 110,32767, - 195, 110,32767,32767,32767, 100, 195, 195, 195, 195, - 195, 195, 195, 195, 531, 195, 195, 190,32767, 268, - 270, 102, 578, 195,32767, 533,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767, 516, 451, 138,32767, 518, 138, 561, 443, 444, - 445, 561, 561, 561, 315, 292,32767,32767,32767,32767, - 531, 531, 100, 100, 100, 100,32767,32767,32767,32767, - 111, 502, 99, 99, 99, 99, 99, 103, 101,32767, - 32767,32767,32767, 223,32767, 101, 99,32767, 101, 101, - 32767,32767, 223, 225, 212, 227,32767, 582, 583, 223, - 101, 227, 227, 227, 247, 247, 505, 321, 101, 99, - 101, 101, 197, 321, 321,32767, 101, 505, 321, 505, - 321, 199, 321, 321, 321, 505, 321,32767, 101, 321, - 214, 391, 99, 99, 321,32767,32767,32767, 518,32767, - 32767,32767,32767,32767,32767,32767, 222,32767,32767,32767, - 32767,32767,32767,32767,32767, 548,32767, 566, 580, 449, - 450, 452, 565, 563, 474, 475, 476, 477, 478, 479, - 480, 482, 612,32767, 522,32767,32767,32767, 341,32767, - 622,32767,32767,32767, 9, 74, 511, 42, 43, 51, - 57, 537, 538, 539, 540, 534, 535, 541, 536,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767, 623,32767, 561,32767,32767,32767, - 32767, 448, 543, 588,32767,32767, 562, 615,32767,32767, - 32767,32767,32767,32767,32767, 138,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 548,32767, 136,32767, - 32767,32767,32767,32767,32767,32767,32767, 544,32767,32767, - 32767, 561,32767,32767,32767,32767, 317, 314,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767, 561,32767,32767,32767,32767,32767, - 294,32767, 311,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767, 387, 518, 297, 299, 300,32767,32767,32767,32767, - 363,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767, 152, 152, 3, 3, 344, 152, 152, 152, - 344, 344, 152, 344, 344, 344, 152, 152, 152, 152, - 152, 152, 280, 185, 262, 265, 247, 247, 152, 355, - 152 - ); - - protected array $goto = array( - 196, 196, 1039, 1070, 699, 464, 586, 469, 469, 854, - 735, 640, 642, 1203, 855, 662, 469, 352, 708, 686, - 689, 1012, 697, 706, 1008, 624, 661, 166, 166, 166, - 166, 220, 197, 193, 193, 176, 178, 215, 193, 193, - 193, 193, 193, 194, 194, 194, 194, 194, 188, 189, - 190, 191, 192, 217, 215, 218, 539, 540, 422, 541, - 544, 545, 546, 547, 548, 549, 550, 551, 1154, 167, - 168, 169, 195, 170, 171, 172, 165, 173, 174, 175, - 177, 214, 216, 219, 239, 242, 253, 254, 256, 257, - 258, 259, 260, 261, 262, 263, 269, 270, 271, 272, - 281, 282, 317, 318, 319, 428, 429, 430, 601, 221, - 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, - 232, 233, 234, 235, 179, 236, 180, 188, 189, 190, - 191, 192, 217, 1154, 198, 199, 200, 201, 240, 181, - 182, 202, 183, 203, 199, 184, 241, 198, 164, 204, - 205, 185, 206, 207, 208, 186, 209, 210, 187, 211, - 212, 213, 278, 278, 278, 278, 857, 1112, 1113, 1359, - 1359, 603, 613, 627, 630, 631, 632, 633, 654, 655, - 656, 710, 356, 895, 853, 895, 895, 1359, 432, 664, - 977, 459, 356, 356, 427, 320, 314, 315, 336, 596, - 431, 337, 433, 641, 1362, 1362, 356, 356, 563, 556, - 356, 862, 1376, 911, 906, 907, 920, 863, 908, 860, - 909, 910, 861, 558, 914, 1234, 946, 356, 356, 1235, - 1238, 947, 1239, 829, 1092, 1087, 1088, 1089, 441, 342, - 556, 563, 588, 589, 347, 599, 605, 420, 620, 621, - 355, 355, 355, 355, 657, 658, 25, 675, 676, 677, - 1258, 1039, 1258, 1258, 398, 401, 604, 608, 353, 354, - 1039, 1258, 1039, 696, 1039, 1039, 1320, 831, 1039, 1039, - 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 1039, 696, - 850, 481, 696, 888, 1258, 343, 511, 870, 483, 1258, - 1258, 1258, 1258, 593, 835, 1258, 1258, 1258, 1341, 1341, - 1341, 1341, 554, 882, 554, 554, 869, 1045, 1044, 344, - 343, 1048, 1049, 554, 928, 626, 626, 558, 929, 1336, - 1337, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, 1289, - 1289, 350, 915, 850, 916, 835, 457, 835, 326, 309, - 944, 971, 971, 971, 971, 944, 1349, 457, 965, 972, - 1308, 1308, 478, 1334, 1335, 998, 1308, 1308, 1308, 1308, - 1308, 1308, 1308, 1308, 1308, 1308, 502, 426, 503, 615, - 552, 552, 552, 552, 509, 607, 1305, 1305, 634, 636, - 638, 1251, 1305, 1305, 1305, 1305, 1305, 1305, 1305, 1305, - 1305, 1305, 543, 543, 396, 249, 249, 591, 543, 543, - 543, 543, 543, 543, 543, 543, 543, 543, 1253, 969, - 411, 707, 663, 450, 450, 1151, 450, 450, 1331, 1063, - 1331, 1331, 247, 247, 247, 247, 244, 250, 439, 1331, - 602, 1105, 5, 685, 6, 557, 583, 597, 618, 338, - 557, 711, 583, 847, 399, 463, 510, 702, 669, 1103, - 875, 960, 850, 1343, 1343, 1343, 1343, 472, 600, 473, - 474, 1254, 1255, 405, 1241, 880, 619, 872, 1367, 1368, - 845, 1249, 1076, 542, 542, 738, 1020, 1241, 884, 542, - 1327, 542, 542, 542, 542, 542, 542, 542, 542, 1256, - 1317, 1318, 1080, 878, 479, 1126, 982, 1030, 0, 0, - 0, 273, 325, 0, 325, 325, 0, 450, 450, 450, - 450, 450, 450, 450, 450, 450, 450, 450, 0, 0, - 450, 0, 1078, 0, 409, 410, 1329, 1329, 1078, 673, - 0, 674, 0, 413, 414, 415, 0, 687, 609, 0, - 416, 933, 1141, 0, 0, 348, 883, 871, 1075, 1079, - 0, 434, 0, 1017, 0, 0, 0, 0, 0, 980, - 0, 874, 434, 667, 996, 0, 0, 0, 0, 868, - 1046, 1046, 0, 0, 0, 668, 1057, 1053, 1054, 1015, - 1015, 1248, 970, 1042, 1042, 0, 0, 684, 954, 0, - 0, 1034, 1050, 1051, 1001, 0, 0, 973, 0, 734, - 0, 0, 555, 1010, 1005, 1124, 887, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 252, 252 - ); - - protected array $gotoCheck = array( - 42, 42, 73, 128, 73, 156, 48, 154, 154, 26, - 48, 48, 48, 156, 27, 48, 154, 97, 9, 48, - 48, 48, 48, 48, 48, 56, 56, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 23, 23, 23, 23, 15, 145, 145, 188, - 188, 131, 81, 81, 81, 81, 81, 81, 81, 81, - 81, 81, 14, 25, 25, 25, 25, 188, 66, 66, - 49, 83, 14, 14, 66, 66, 66, 66, 66, 66, - 66, 66, 66, 66, 188, 188, 14, 14, 76, 76, - 14, 15, 14, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 14, 15, 79, 79, 14, 14, 79, - 79, 79, 79, 6, 15, 15, 15, 15, 83, 76, - 76, 76, 76, 76, 76, 76, 76, 43, 76, 76, - 24, 24, 24, 24, 86, 86, 76, 86, 86, 86, - 73, 73, 73, 73, 59, 59, 59, 59, 97, 97, - 73, 73, 73, 7, 73, 73, 14, 7, 73, 73, - 73, 73, 73, 73, 73, 73, 73, 73, 73, 7, - 22, 84, 7, 45, 73, 174, 14, 35, 84, 73, - 73, 73, 73, 178, 12, 73, 73, 73, 9, 9, - 9, 9, 19, 35, 19, 19, 35, 119, 119, 174, - 174, 120, 120, 19, 73, 108, 108, 14, 73, 184, - 184, 108, 108, 108, 108, 108, 108, 108, 108, 108, - 108, 185, 65, 22, 65, 12, 19, 12, 175, 175, - 9, 19, 19, 19, 19, 9, 187, 19, 19, 19, - 176, 176, 182, 182, 182, 103, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 160, 13, 160, 13, - 107, 107, 107, 107, 160, 107, 177, 177, 85, 85, - 85, 14, 177, 177, 177, 177, 177, 177, 177, 177, - 177, 177, 179, 179, 62, 5, 5, 104, 179, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 20, 93, - 93, 93, 64, 23, 23, 155, 23, 23, 131, 115, - 131, 131, 5, 5, 5, 5, 5, 5, 113, 131, - 8, 8, 46, 117, 46, 9, 9, 2, 2, 29, - 9, 8, 9, 18, 9, 9, 8, 8, 121, 8, - 39, 92, 22, 131, 131, 131, 131, 9, 9, 9, - 9, 20, 20, 28, 20, 9, 80, 37, 9, 9, - 20, 166, 130, 162, 162, 99, 110, 20, 41, 162, - 131, 162, 162, 162, 162, 162, 162, 162, 162, 20, - 20, 20, 133, 9, 157, 148, 96, 114, -1, -1, - -1, 24, 24, -1, 24, 24, -1, 23, 23, 23, - 23, 23, 23, 23, 23, 23, 23, 23, -1, -1, - 23, -1, 131, -1, 82, 82, 131, 131, 131, 82, - -1, 82, -1, 82, 82, 82, -1, 82, 17, -1, - 82, 17, 17, -1, -1, 82, 16, 16, 16, 16, - -1, 118, -1, 17, -1, -1, -1, -1, -1, 16, - -1, 17, 118, 17, 17, -1, -1, -1, -1, 17, - 118, 118, -1, -1, -1, 118, 118, 118, 118, 107, - 107, 17, 16, 89, 89, -1, -1, 89, 89, -1, - -1, 89, 89, 89, 50, -1, -1, 50, -1, 50, - -1, -1, 50, 50, 50, 16, 16, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 5, 5 - ); - - protected array $gotoBase = array( - 0, 0, -267, 0, 0, 404, 223, 266, 432, 8, - 0, 0, 7, 39, -116, -183, 103, 83, 143, 47, - 23, 0, 12, 159, 247, 180, 5, 10, 135, 152, - 0, 0, 0, 0, 0, -75, 0, 137, 0, 136, - 0, 46, -1, 224, 0, 267, -296, 0, -707, 172, - 592, 0, 0, 0, 0, 0, -15, 0, 0, 219, - 0, 0, 362, 0, 184, 328, -49, 0, 0, 0, - 0, 0, 0, -5, 0, 0, -137, 0, 0, -184, - 129, -187, 41, -87, -181, -93, -466, 0, 0, 314, - 0, 0, 131, 114, 0, 0, 62, -468, 0, 77, - 0, 0, 0, 330, 364, 0, 0, 352, 88, 0, - 115, 0, 0, 161, -4, 154, 0, 160, 295, 38, - 36, 168, 0, 0, 0, 0, 0, 0, 1, 0, - 107, 163, 0, 59, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, -106, 0, 0, 60, 0, - 0, 0, 0, 0, -27, 181, -263, 63, 0, 0, - -121, 0, 246, 0, 0, 0, 111, 0, 0, 0, - 0, 0, 0, 0, -3, 26, 123, 149, 274, 165, - 0, 0, 61, 0, -44, 311, 0, 325, -139, 0, - 0 - ); - - protected array $gotoDefault = array( - -32768, 515, 742, 4, 743, 937, 818, 827, 579, 533, - 709, 349, 628, 423, 1325, 913, 1140, 598, 846, 1267, - 1273, 458, 849, 331, 732, 925, 896, 897, 402, 388, - 394, 400, 652, 629, 496, 881, 454, 873, 488, 876, - 453, 885, 163, 419, 513, 889, 3, 892, 561, 923, - 975, 389, 900, 390, 680, 902, 582, 904, 905, 397, - 403, 404, 1145, 590, 625, 917, 255, 584, 918, 387, - 919, 927, 392, 395, 690, 468, 507, 501, 412, 1107, - 585, 612, 649, 447, 475, 623, 635, 622, 482, 435, - 417, 330, 959, 967, 489, 466, 981, 351, 989, 740, - 1153, 643, 491, 997, 644, 1004, 1007, 534, 535, 480, - 1019, 266, 1022, 492, 1031, 23, 670, 1036, 1037, 671, - 645, 1059, 646, 672, 647, 1061, 465, 580, 1069, 455, - 1077, 1313, 456, 1081, 264, 1084, 277, 418, 436, 1090, - 1091, 9, 1097, 700, 701, 19, 274, 512, 1125, 691, - -32768,-32768,-32768,-32768, 452, 1152, 451, 1222, 1224, 562, - 493, 1242, 294, 1245, 683, 508, 1250, 448, 1316, 449, - 536, 476, 316, 537, 1360, 308, 334, 313, 553, 295, - 335, 538, 477, 1322, 1330, 332, 31, 1350, 1361, 595, - 617 - ); - - protected array $ruleToNonTerminal = array( - 0, 1, 3, 3, 2, 5, 5, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, - 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, - 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, - 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, - 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, - 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, - 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, - 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 25, 25, 50, 69, 69, 72, 72, 71, - 70, 70, 63, 75, 75, 76, 76, 77, 77, 78, - 78, 79, 79, 80, 80, 26, 26, 27, 27, 27, - 27, 27, 88, 88, 90, 90, 83, 83, 91, 91, - 92, 92, 92, 84, 84, 87, 87, 85, 85, 93, - 94, 94, 57, 57, 65, 65, 68, 68, 68, 67, - 95, 95, 96, 58, 58, 58, 58, 97, 97, 98, - 98, 99, 99, 100, 101, 101, 102, 102, 103, 103, - 55, 55, 51, 51, 105, 53, 53, 106, 52, 52, - 54, 54, 64, 64, 64, 64, 81, 81, 109, 109, - 111, 111, 112, 112, 112, 112, 112, 112, 112, 110, - 110, 110, 115, 115, 115, 115, 89, 89, 118, 118, - 118, 119, 119, 116, 116, 120, 120, 122, 122, 123, - 123, 117, 124, 124, 121, 125, 125, 125, 125, 113, - 113, 82, 82, 82, 20, 20, 20, 127, 126, 126, - 128, 128, 128, 128, 60, 129, 129, 130, 61, 132, - 132, 133, 133, 134, 134, 86, 135, 135, 135, 135, - 135, 135, 135, 140, 140, 141, 141, 142, 142, 142, - 142, 142, 143, 144, 144, 139, 139, 136, 136, 138, - 138, 146, 146, 145, 145, 145, 145, 145, 145, 145, - 145, 145, 145, 137, 147, 147, 149, 148, 148, 150, - 150, 114, 151, 151, 153, 153, 153, 152, 152, 62, - 104, 154, 154, 56, 56, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 161, - 162, 162, 163, 155, 155, 160, 160, 164, 165, 165, - 166, 167, 168, 168, 168, 168, 19, 19, 73, 73, - 73, 73, 156, 156, 156, 156, 170, 170, 159, 159, - 159, 157, 157, 176, 176, 176, 176, 176, 176, 176, - 176, 176, 176, 177, 177, 177, 108, 179, 179, 179, - 179, 158, 158, 158, 158, 158, 158, 158, 158, 59, - 59, 173, 173, 173, 173, 173, 180, 180, 169, 169, - 169, 169, 181, 181, 181, 181, 181, 181, 74, 74, - 66, 66, 66, 66, 131, 131, 131, 131, 184, 183, - 172, 172, 172, 172, 172, 172, 172, 171, 171, 171, - 182, 182, 182, 182, 107, 178, 186, 186, 185, 185, - 187, 187, 187, 187, 187, 187, 187, 187, 175, 175, - 175, 175, 174, 189, 188, 188, 188, 188, 188, 188, - 188, 188, 190, 190, 190, 190 - ); - - protected array $ruleToLength = array( - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, - 0, 1, 1, 1, 1, 4, 3, 5, 4, 3, - 4, 2, 3, 1, 1, 7, 6, 2, 3, 1, - 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, - 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, - 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, - 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, - 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, - 2, 1, 1, 1, 1, 0, 2, 1, 3, 8, - 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, - 1, 3, 1, 1, 1, 8, 9, 7, 8, 7, - 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, - 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, - 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, - 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, - 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, - 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, - 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, - 0, 2, 1, 1, 1, 1, 1, 1, 1, 7, - 9, 6, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, - 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, - 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, - 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, - 1, 1, 3, 2, 0, 1, 5, 5, 6, 10, - 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, - 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 2, 1, 3, 1, 1, 3, 0, - 2, 0, 5, 8, 1, 3, 3, 0, 2, 2, - 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, - 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, - 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, - 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, - 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, - 3, 2, 2, 1, 1, 0, 4, 2, 1, 3, - 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 1, 1, 1, 0, 1, - 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, - 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, - 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, - 1, 1, 1, 4, 4, 1, 4, 4, 0, 1, - 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, - 1, 4, 4, 3, 3, 3, 3, 1, 3, 1, - 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, - 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, - 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, - 6, 3, 1, 1, 2, 1 - ); - - protected function initReduceCallbacks(): void { - $this->reduceCallbacks = [ - 0 => null, - 1 => static function ($self, $stackPos) { - $self->semValue = $self->handleNamespaces($self->semStack[$stackPos-(1-1)]); - }, - 2 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];; - }, - 3 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 4 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; - if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 5 => null, - 6 => null, - 7 => null, - 8 => null, - 9 => null, - 10 => null, - 11 => null, - 12 => null, - 13 => null, - 14 => null, - 15 => null, - 16 => null, - 17 => null, - 18 => null, - 19 => null, - 20 => null, - 21 => null, - 22 => null, - 23 => null, - 24 => null, - 25 => null, - 26 => null, - 27 => null, - 28 => null, - 29 => null, - 30 => null, - 31 => null, - 32 => null, - 33 => null, - 34 => null, - 35 => null, - 36 => null, - 37 => null, - 38 => null, - 39 => null, - 40 => null, - 41 => null, - 42 => null, - 43 => null, - 44 => null, - 45 => null, - 46 => null, - 47 => null, - 48 => null, - 49 => null, - 50 => null, - 51 => null, - 52 => null, - 53 => null, - 54 => null, - 55 => null, - 56 => null, - 57 => null, - 58 => null, - 59 => null, - 60 => null, - 61 => null, - 62 => null, - 63 => null, - 64 => null, - 65 => null, - 66 => null, - 67 => null, - 68 => null, - 69 => null, - 70 => null, - 71 => null, - 72 => null, - 73 => null, - 74 => null, - 75 => null, - 76 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; if ($self->semValue === "emitError(new Error('Cannot use "getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]))); - }, - 77 => null, - 78 => null, - 79 => null, - 80 => null, - 81 => null, - 82 => null, - 83 => null, - 84 => null, - 85 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 86 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 87 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 88 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 89 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 90 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 91 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 92 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 93 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 94 => null, - 95 => static function ($self, $stackPos) { - $self->semValue = new Name(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 96 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 97 => static function ($self, $stackPos) { - /* nothing */ - }, - 98 => static function ($self, $stackPos) { - /* nothing */ - }, - 99 => static function ($self, $stackPos) { - /* nothing */ - }, - 100 => static function ($self, $stackPos) { - $self->emitError(new Error('A trailing comma is not allowed here', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]))); - }, - 101 => null, - 102 => null, - 103 => static function ($self, $stackPos) { - $self->semValue = new Node\Attribute($self->semStack[$stackPos-(1-1)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 104 => static function ($self, $stackPos) { - $self->semValue = new Node\Attribute($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 105 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 106 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 107 => static function ($self, $stackPos) { - $self->semValue = new Node\AttributeGroup($self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 108 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 109 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 110 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 111 => null, - 112 => null, - 113 => null, - 114 => null, - 115 => static function ($self, $stackPos) { - $self->semValue = new Stmt\HaltCompiler($self->handleHaltCompiler(), $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 116 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(3-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); - $self->checkNamespace($self->semValue); - }, - 117 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $self->checkNamespace($self->semValue); - }, - 118 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_(null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $self->checkNamespace($self->semValue); - }, - 119 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 120 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 121 => null, - 122 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Const_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 123 => static function ($self, $stackPos) { - $self->semValue = Stmt\Use_::TYPE_FUNCTION; - }, - 124 => static function ($self, $stackPos) { - $self->semValue = Stmt\Use_::TYPE_CONSTANT; - }, - 125 => static function ($self, $stackPos) { - $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-6)], $self->semStack[$stackPos-(7-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 126 => static function ($self, $stackPos) { - $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); - }, - 127 => null, - 128 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 129 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 130 => null, - 131 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 132 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 133 => null, - 134 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 135 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 136 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1)); - }, - 137 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3)); - }, - 138 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1)); - }, - 139 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3)); - }, - 140 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->semValue->type = Stmt\Use_::TYPE_NORMAL; - }, - 141 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; $self->semValue->type = $self->semStack[$stackPos-(2-1)]; - }, - 142 => null, - 143 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 144 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 145 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 146 => null, - 147 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 148 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 149 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 150 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 151 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];; - }, - 152 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 153 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; - if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 154 => null, - 155 => null, - 156 => null, - 157 => static function ($self, $stackPos) { - throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 158 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Block($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 159 => static function ($self, $stackPos) { - $self->semValue = new Stmt\If_($self->semStack[$stackPos-(7-3)], ['stmts' => $self->semStack[$stackPos-(7-5)], 'elseifs' => $self->semStack[$stackPos-(7-6)], 'else' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 160 => static function ($self, $stackPos) { - $self->semValue = new Stmt\If_($self->semStack[$stackPos-(10-3)], ['stmts' => $self->semStack[$stackPos-(10-6)], 'elseifs' => $self->semStack[$stackPos-(10-7)], 'else' => $self->semStack[$stackPos-(10-8)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); - }, - 161 => static function ($self, $stackPos) { - $self->semValue = new Stmt\While_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 162 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Do_($self->semStack[$stackPos-(7-5)], $self->semStack[$stackPos-(7-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 163 => static function ($self, $stackPos) { - $self->semValue = new Stmt\For_(['init' => $self->semStack[$stackPos-(9-3)], 'cond' => $self->semStack[$stackPos-(9-5)], 'loop' => $self->semStack[$stackPos-(9-7)], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 164 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Switch_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 165 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Break_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 166 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Continue_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 167 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Return_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 168 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Global_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 169 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Static_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 170 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Echo_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 171 => static function ($self, $stackPos) { - - $self->semValue = new Stmt\InlineHTML($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('hasLeadingNewline', $self->inlineHtmlHasLeadingNewline($stackPos-(1-1))); - - }, - 172 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Expression($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 173 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Unset_($self->semStack[$stackPos-(5-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 174 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $self->semStack[$stackPos-(7-5)][1], 'stmts' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 175 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-7)][0], ['keyVar' => $self->semStack[$stackPos-(9-5)], 'byRef' => $self->semStack[$stackPos-(9-7)][1], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 176 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(6-3)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-4)], $self->tokenEndStack[$stackPos-(6-4)])), ['stmts' => $self->semStack[$stackPos-(6-6)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); - }, - 177 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Declare_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 178 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TryCatch($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->checkTryCatch($self->semValue); - }, - 179 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Goto_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 180 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Label($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 181 => static function ($self, $stackPos) { - $self->semValue = null; /* means: no statement */ - }, - 182 => null, - 183 => static function ($self, $stackPos) { - $self->semValue = $self->maybeCreateNop($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]); - }, - 184 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; }; - }, - 185 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 186 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 187 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 188 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 189 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Catch_($self->semStack[$stackPos-(8-3)], $self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-7)], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - }, - 190 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 191 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Finally_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 192 => null, - 193 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 194 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 195 => static function ($self, $stackPos) { - $self->semValue = false; - }, - 196 => static function ($self, $stackPos) { - $self->semValue = true; - }, - 197 => static function ($self, $stackPos) { - $self->semValue = false; - }, - 198 => static function ($self, $stackPos) { - $self->semValue = true; - }, - 199 => static function ($self, $stackPos) { - $self->semValue = false; - }, - 200 => static function ($self, $stackPos) { - $self->semValue = true; - }, - 201 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 202 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 203 => null, - 204 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 205 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(8-3)], ['byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-5)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - }, - 206 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(9-4)], ['byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-6)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 207 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(7-2)], ['type' => $self->semStack[$stackPos-(7-1)], 'extends' => $self->semStack[$stackPos-(7-3)], 'implements' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - $self->checkClass($self->semValue, $stackPos-(7-2)); - }, - 208 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(8-3)], ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - $self->checkClass($self->semValue, $stackPos-(8-3)); - }, - 209 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Interface_($self->semStack[$stackPos-(7-3)], ['extends' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => $self->semStack[$stackPos-(7-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - $self->checkInterface($self->semValue, $stackPos-(7-3)); - }, - 210 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Trait_($self->semStack[$stackPos-(6-3)], ['stmts' => $self->semStack[$stackPos-(6-5)], 'attrGroups' => $self->semStack[$stackPos-(6-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); - }, - 211 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Enum_($self->semStack[$stackPos-(8-3)], ['scalarType' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - $self->checkEnum($self->semValue, $stackPos-(8-3)); - }, - 212 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 213 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 214 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 215 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 216 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 217 => null, - 218 => null, - 219 => static function ($self, $stackPos) { - $self->checkClassModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; - }, - 220 => static function ($self, $stackPos) { - $self->semValue = Modifiers::ABSTRACT; - }, - 221 => static function ($self, $stackPos) { - $self->semValue = Modifiers::FINAL; - }, - 222 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, - 223 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 224 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 225 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 226 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 227 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 228 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 229 => null, - 230 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 231 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 232 => null, - 233 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 234 => null, - 235 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 236 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; }; - }, - 237 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 238 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 239 => null, - 240 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 241 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 242 => static function ($self, $stackPos) { - $self->semValue = new Node\DeclareItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 243 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 244 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-3)]; - }, - 245 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 246 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(5-3)]; - }, - 247 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 248 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 249 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Case_($self->semStack[$stackPos-(4-2)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 250 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Case_(null, $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 251 => null, - 252 => null, - 253 => static function ($self, $stackPos) { - $self->semValue = new Expr\Match_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 254 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 255 => null, - 256 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 257 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 258 => static function ($self, $stackPos) { - $self->semValue = new Node\MatchArm($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 259 => static function ($self, $stackPos) { - $self->semValue = new Node\MatchArm(null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 260 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 261 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 262 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 263 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 264 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 265 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 266 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 267 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue); - }, - 268 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 269 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 270 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 271 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue); - }, - 272 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)], false); - }, - 273 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(2-2)], true); - }, - 274 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)], false); - }, - 275 => static function ($self, $stackPos) { - $self->semValue = array($self->fixupArrayDestructuring($self->semStack[$stackPos-(1-1)]), false); - }, - 276 => null, - 277 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 278 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 279 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 280 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 281 => static function ($self, $stackPos) { - $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; - }, - 282 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC; - }, - 283 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED; - }, - 284 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE; - }, - 285 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC_SET; - }, - 286 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED_SET; - }, - 287 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE_SET; - }, - 288 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, - 289 => static function ($self, $stackPos) { - $self->semValue = new Node\Param($self->semStack[$stackPos-(7-6)], null, $self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-4)], $self->semStack[$stackPos-(7-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-1)], $self->semStack[$stackPos-(7-7)]); - $self->checkParam($self->semValue); - }, - 290 => static function ($self, $stackPos) { - $self->semValue = new Node\Param($self->semStack[$stackPos-(9-6)], $self->semStack[$stackPos-(9-8)], $self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-4)], $self->semStack[$stackPos-(9-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(9-2)], $self->semStack[$stackPos-(9-1)], $self->semStack[$stackPos-(9-9)]); - $self->checkParam($self->semValue); - }, - 291 => static function ($self, $stackPos) { - $self->semValue = new Node\Param(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])), null, $self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-4)], $self->semStack[$stackPos-(6-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-1)]); - }, - 292 => null, - 293 => static function ($self, $stackPos) { - $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 294 => static function ($self, $stackPos) { - $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 295 => null, - 296 => null, - 297 => static function ($self, $stackPos) { - $self->semValue = new Node\Name('static', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 298 => static function ($self, $stackPos) { - $self->semValue = $self->handleBuiltinTypes($self->semStack[$stackPos-(1-1)]); - }, - 299 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier('array', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 300 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier('callable', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 301 => null, - 302 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 303 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 304 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 305 => null, - 306 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 307 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 308 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 309 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 310 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 311 => static function ($self, $stackPos) { - $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 312 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 313 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 314 => static function ($self, $stackPos) { - $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 315 => null, - 316 => static function ($self, $stackPos) { - $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 317 => static function ($self, $stackPos) { - $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 318 => null, - 319 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 320 => null, - 321 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 322 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 323 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 324 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 325 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 326 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-2)]); - }, - 327 => static function ($self, $stackPos) { - $self->semValue = new Node\VariadicPlaceholder($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 328 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 329 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 330 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos-(1-1)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 331 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], true, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 332 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], false, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 333 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos-(3-3)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(3-1)]); - }, - 334 => null, - 335 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 336 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 337 => null, - 338 => null, - 339 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 340 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 341 => static function ($self, $stackPos) { - $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 342 => static function ($self, $stackPos) { - $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 343 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; } else { $self->semValue = $self->semStack[$stackPos-(2-1)]; } - }, - 344 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 345 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; - if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 346 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Property($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-1)]); - }, - 347 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-1)]); - $self->checkClassConst($self->semValue, $stackPos-(5-2)); - }, - 348 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-1)], $self->semStack[$stackPos-(6-4)]); - $self->checkClassConst($self->semValue, $stackPos-(6-2)); - }, - 349 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassMethod($self->semStack[$stackPos-(10-5)], ['type' => $self->semStack[$stackPos-(10-2)], 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-7)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); - $self->checkClassMethod($self->semValue, $stackPos-(10-2)); - }, - 350 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUse($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 351 => static function ($self, $stackPos) { - $self->semValue = new Stmt\EnumCase($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 352 => static function ($self, $stackPos) { - $self->semValue = null; /* will be skipped */ - }, - 353 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 354 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 355 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 356 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 357 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 358 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 359 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 360 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 361 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 362 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 363 => null, - 364 => static function ($self, $stackPos) { - $self->semValue = array(null, $self->semStack[$stackPos-(1-1)]); - }, - 365 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 366 => null, - 367 => null, - 368 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 369 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 370 => null, - 371 => null, - 372 => static function ($self, $stackPos) { - $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; - }, - 373 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC; - }, - 374 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED; - }, - 375 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE; - }, - 376 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC_SET; - }, - 377 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED_SET; - }, - 378 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE_SET; - }, - 379 => static function ($self, $stackPos) { - $self->semValue = Modifiers::STATIC; - }, - 380 => static function ($self, $stackPos) { - $self->semValue = Modifiers::ABSTRACT; - }, - 381 => static function ($self, $stackPos) { - $self->semValue = Modifiers::FINAL; - }, - 382 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, - 383 => null, - 384 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 385 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 386 => static function ($self, $stackPos) { - $self->semValue = new Node\VarLikeIdentifier(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 387 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 388 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 389 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 390 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 391 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 392 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-5)], ['flags' => $self->semStack[$stackPos-(5-2)], 'byRef' => $self->semStack[$stackPos-(5-3)], 'params' => [], 'attrGroups' => $self->semStack[$stackPos-(5-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - $self->checkPropertyHook($self->semValue, null); - }, - 393 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-8)], ['flags' => $self->semStack[$stackPos-(8-2)], 'byRef' => $self->semStack[$stackPos-(8-3)], 'params' => $self->semStack[$stackPos-(8-6)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - $self->checkPropertyHook($self->semValue, $stackPos-(8-5)); - }, - 394 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 395 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 396 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 397 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 398 => static function ($self, $stackPos) { - $self->checkPropertyHookModifiers($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; - }, - 399 => null, - 400 => null, - 401 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 402 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 403 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 404 => null, - 405 => null, - 406 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 407 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->fixupArrayDestructuring($self->semStack[$stackPos-(3-1)]), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 408 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 409 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 410 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - if (!$self->phpVersion->allowsAssignNewByReference()) { - $self->emitError(new Error('Cannot assign new by reference', $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]))); - } - - }, - 411 => null, - 412 => null, - 413 => static function ($self, $stackPos) { - $self->semValue = new Expr\Clone_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 414 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 415 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 416 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 417 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 418 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 419 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 420 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 421 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 422 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 423 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 424 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 425 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 426 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 427 => static function ($self, $stackPos) { - $self->semValue = new Expr\PostInc($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 428 => static function ($self, $stackPos) { - $self->semValue = new Expr\PreInc($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 429 => static function ($self, $stackPos) { - $self->semValue = new Expr\PostDec($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 430 => static function ($self, $stackPos) { - $self->semValue = new Expr\PreDec($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 431 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BooleanOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 432 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BooleanAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 433 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 434 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 435 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 436 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 437 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 438 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 439 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 440 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 441 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 442 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 443 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 444 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 445 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 446 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 447 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 448 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 449 => static function ($self, $stackPos) { - $self->semValue = new Expr\UnaryPlus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 450 => static function ($self, $stackPos) { - $self->semValue = new Expr\UnaryMinus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 451 => static function ($self, $stackPos) { - $self->semValue = new Expr\BooleanNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 452 => static function ($self, $stackPos) { - $self->semValue = new Expr\BitwiseNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 453 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Identical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 454 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\NotIdentical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 455 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Equal($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 456 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\NotEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 457 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Spaceship($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 458 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Smaller($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 459 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\SmallerOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 460 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Greater($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 461 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\GreaterOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 462 => static function ($self, $stackPos) { - $self->semValue = new Expr\Instanceof_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 463 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 464 => static function ($self, $stackPos) { - $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 465 => static function ($self, $stackPos) { - $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(4-1)], null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 466 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 467 => static function ($self, $stackPos) { - $self->semValue = new Expr\Isset_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 468 => static function ($self, $stackPos) { - $self->semValue = new Expr\Empty_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 469 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 470 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 471 => static function ($self, $stackPos) { - $self->semValue = new Expr\Eval_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 472 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 473 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 474 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Int_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 475 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = $self->getFloatCastKind($self->semStack[$stackPos-(2-1)]); - $self->semValue = new Expr\Cast\Double($self->semStack[$stackPos-(2-2)], $attrs); - }, - 476 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\String_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 477 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Array_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 478 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Object_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 479 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Bool_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 480 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Unset_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 481 => static function ($self, $stackPos) { - $self->semValue = $self->createExitExpr($self->semStack[$stackPos-(2-1)], $stackPos-(2-1), $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 482 => static function ($self, $stackPos) { - $self->semValue = new Expr\ErrorSuppress($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 483 => null, - 484 => static function ($self, $stackPos) { - $self->semValue = new Expr\ShellExec($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 485 => static function ($self, $stackPos) { - $self->semValue = new Expr\Print_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 486 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_(null, null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 487 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(2-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 488 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 489 => static function ($self, $stackPos) { - $self->semValue = new Expr\YieldFrom($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 490 => static function ($self, $stackPos) { - $self->semValue = new Expr\Throw_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 491 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'returnType' => $self->semStack[$stackPos-(8-6)], 'expr' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - }, - 492 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 493 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'uses' => $self->semStack[$stackPos-(8-6)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - }, - 494 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 495 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 496 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'returnType' => $self->semStack[$stackPos-(10-8)], 'expr' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); - }, - 497 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 498 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'uses' => $self->semStack[$stackPos-(10-8)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); - }, - 499 => static function ($self, $stackPos) { - $self->semValue = array(new Stmt\Class_(null, ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])), $self->semStack[$stackPos-(8-3)]); - $self->checkClass($self->semValue[0], -1); - }, - 500 => static function ($self, $stackPos) { - $self->semValue = new Expr\New_($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 501 => static function ($self, $stackPos) { - list($class, $ctorArgs) = $self->semStack[$stackPos-(2-2)]; $self->semValue = new Expr\New_($class, $ctorArgs, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 502 => static function ($self, $stackPos) { - $self->semValue = new Expr\New_($self->semStack[$stackPos-(2-2)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 503 => null, - 504 => null, - 505 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 506 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-3)]; - }, - 507 => null, - 508 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 509 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 510 => static function ($self, $stackPos) { - $self->semValue = new Node\ClosureUse($self->semStack[$stackPos-(2-2)], $self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 511 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 512 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 513 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 514 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 515 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 516 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 517 => null, - 518 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 519 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 520 => static function ($self, $stackPos) { - $self->semValue = new Name\FullyQualified(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 521 => static function ($self, $stackPos) { - $self->semValue = new Name\Relative(substr($self->semStack[$stackPos-(1-1)], 10), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 522 => null, - 523 => null, - 524 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 525 => static function ($self, $stackPos) { - $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; - }, - 526 => null, - 527 => null, - 528 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 529 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); foreach ($self->semValue as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } }; - }, - 530 => static function ($self, $stackPos) { - foreach ($self->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 531 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 532 => null, - 533 => static function ($self, $stackPos) { - $self->semValue = new Expr\ConstFetch($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 534 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Line($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 535 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\File($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 536 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Dir($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 537 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Class_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 538 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Trait_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 539 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Method($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 540 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Function_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 541 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Namespace_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 542 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Property($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 543 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 544 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 545 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)])), $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; - }, - 546 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_SHORT; - $self->semValue = new Expr\Array_($self->semStack[$stackPos-(3-2)], $attrs); - }, - 547 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_LONG; - $self->semValue = new Expr\Array_($self->semStack[$stackPos-(4-3)], $attrs); - $self->createdArrays->attach($self->semValue); - }, - 548 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->createdArrays->attach($self->semValue); - }, - 549 => static function ($self, $stackPos) { - $self->semValue = Scalar\String_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->supportsUnicodeEscapes()); - }, - 550 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; - foreach ($self->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = new Scalar\InterpolatedString($self->semStack[$stackPos-(3-2)], $attrs); - }, - 551 => static function ($self, $stackPos) { - $self->semValue = $self->parseLNumber($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->allowsInvalidOctals()); - }, - 552 => static function ($self, $stackPos) { - $self->semValue = Scalar\Float_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 553 => null, - 554 => null, - 555 => null, - 556 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true); - }, - 557 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos-(2-1)], '', $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(2-2)], $self->tokenEndStack[$stackPos-(2-2)]), true); - }, - 558 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true); - }, - 559 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 560 => null, - 561 => null, - 562 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 563 => null, - 564 => null, - 565 => null, - 566 => null, - 567 => null, - 568 => null, - 569 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 570 => null, - 571 => null, - 572 => null, - 573 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 574 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 575 => null, - 576 => static function ($self, $stackPos) { - $self->semValue = new Expr\MethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 577 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafeMethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 578 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 579 => null, - 580 => null, - 581 => null, - 582 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 583 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 584 => null, - 585 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 586 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 587 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])), $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; - }, - 588 => static function ($self, $stackPos) { - $var = $self->semStack[$stackPos-(1-1)]->name; $self->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])) : $var; - }, - 589 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 590 => null, - 591 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 592 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 593 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 594 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 595 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 596 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 597 => null, - 598 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 599 => null, - 600 => null, - 601 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 602 => null, - 603 => static function ($self, $stackPos) { - $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; - }, - 604 => static function ($self, $stackPos) { - $self->semValue = new Expr\List_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('kind', Expr\List_::KIND_LIST); - $self->postprocessList($self->semValue); - }, - 605 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; $end = count($self->semValue)-1; if ($self->semValue[$end]->value instanceof Expr\Error) array_pop($self->semValue); - }, - 606 => null, - 607 => static function ($self, $stackPos) { - /* do nothing -- prevent default action of $$=$self->semStack[$1]. See $551. */ - }, - 608 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 609 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 610 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 611 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 612 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 613 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 614 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-1)], true, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 615 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 616 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), true); - }, - 617 => static function ($self, $stackPos) { - /* Create an Error node now to remember the position. We'll later either report an error, - or convert this into a null element, depending on whether this is a creation or destructuring context. */ - $attrs = $self->createEmptyElemAttributes($self->tokenPos); - $self->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, false, $attrs); - }, - 618 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 619 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 620 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 621 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)]); - }, - 622 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]); $attrs['rawValue'] = $self->semStack[$stackPos-(1-1)]; $self->semValue = new Node\InterpolatedStringPart($self->semStack[$stackPos-(1-1)], $attrs); - }, - 623 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 624 => null, - 625 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 626 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 627 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 628 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 629 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 630 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); - }, - 631 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 632 => static function ($self, $stackPos) { - $self->semValue = new Scalar\String_($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 633 => static function ($self, $stackPos) { - $self->semValue = $self->parseNumString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 634 => static function ($self, $stackPos) { - $self->semValue = $self->parseNumString('-' . $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 635 => null, - ]; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php b/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php deleted file mode 100644 index 8c34240..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Parser/Php8.php +++ /dev/null @@ -1,2799 +0,0 @@ -'", - "T_IS_GREATER_OR_EQUAL", - "'.'", - "T_SL", - "T_SR", - "'+'", - "'-'", - "'*'", - "'/'", - "'%'", - "'!'", - "T_INSTANCEOF", - "'~'", - "T_INC", - "T_DEC", - "T_INT_CAST", - "T_DOUBLE_CAST", - "T_STRING_CAST", - "T_ARRAY_CAST", - "T_OBJECT_CAST", - "T_BOOL_CAST", - "T_UNSET_CAST", - "'@'", - "T_POW", - "'['", - "T_NEW", - "T_CLONE", - "T_EXIT", - "T_IF", - "T_ELSEIF", - "T_ELSE", - "T_ENDIF", - "T_LNUMBER", - "T_DNUMBER", - "T_STRING", - "T_STRING_VARNAME", - "T_VARIABLE", - "T_NUM_STRING", - "T_INLINE_HTML", - "T_ENCAPSED_AND_WHITESPACE", - "T_CONSTANT_ENCAPSED_STRING", - "T_ECHO", - "T_DO", - "T_WHILE", - "T_ENDWHILE", - "T_FOR", - "T_ENDFOR", - "T_FOREACH", - "T_ENDFOREACH", - "T_DECLARE", - "T_ENDDECLARE", - "T_AS", - "T_SWITCH", - "T_MATCH", - "T_ENDSWITCH", - "T_CASE", - "T_DEFAULT", - "T_BREAK", - "T_CONTINUE", - "T_GOTO", - "T_FUNCTION", - "T_FN", - "T_CONST", - "T_RETURN", - "T_TRY", - "T_CATCH", - "T_FINALLY", - "T_USE", - "T_INSTEADOF", - "T_GLOBAL", - "T_STATIC", - "T_ABSTRACT", - "T_FINAL", - "T_PRIVATE", - "T_PROTECTED", - "T_PUBLIC", - "T_READONLY", - "T_PUBLIC_SET", - "T_PROTECTED_SET", - "T_PRIVATE_SET", - "T_VAR", - "T_UNSET", - "T_ISSET", - "T_EMPTY", - "T_HALT_COMPILER", - "T_CLASS", - "T_TRAIT", - "T_INTERFACE", - "T_ENUM", - "T_EXTENDS", - "T_IMPLEMENTS", - "T_OBJECT_OPERATOR", - "T_NULLSAFE_OBJECT_OPERATOR", - "T_LIST", - "T_ARRAY", - "T_CALLABLE", - "T_CLASS_C", - "T_TRAIT_C", - "T_METHOD_C", - "T_FUNC_C", - "T_PROPERTY_C", - "T_LINE", - "T_FILE", - "T_START_HEREDOC", - "T_END_HEREDOC", - "T_DOLLAR_OPEN_CURLY_BRACES", - "T_CURLY_OPEN", - "T_PAAMAYIM_NEKUDOTAYIM", - "T_NAMESPACE", - "T_NS_C", - "T_DIR", - "T_NS_SEPARATOR", - "T_ELLIPSIS", - "T_NAME_FULLY_QUALIFIED", - "T_NAME_QUALIFIED", - "T_NAME_RELATIVE", - "T_ATTRIBUTE", - "';'", - "']'", - "'('", - "')'", - "'{'", - "'}'", - "'`'", - "'\"'", - "'$'" - ); - - protected array $tokenToSymbol = array( - 0, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 56, 170, 172, 171, 55, 172, 172, - 165, 166, 53, 51, 8, 52, 48, 54, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 31, 163, - 44, 16, 46, 30, 68, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 70, 172, 164, 36, 172, 169, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 167, 35, 168, 58, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 172, 172, 172, 172, - 172, 172, 172, 172, 172, 172, 1, 2, 3, 4, - 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, - 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, - 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, - 41, 42, 43, 45, 47, 49, 50, 57, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, - 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, - 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, - 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, - 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, - 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, - 153, 154, 155, 156, 157, 158, 159, 160, 161, 162 - ); - - protected array $action = array( - 126, 127, 128, 569, 129, 130, 954, 764, 765, 766, - 131, 38, 848, -85,-32766, 1374,-32766,-32766,-32766, 0, - 839, 1132, 1133, 1134, 1128, 1127, 1126, 1135, 1129, 1130, - 1131,-32766,-32766,-32766, 850, 758, 757,-32766,-32766,-32766, - -32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767,-32767,-32767, - -32767, 1003,-32766, 1043, -569, 767, 1132, 1133, 1134, 1128, - 1127, 1126, 1135, 1129, 1130, 1131, 388, 387, 841, 263, - 132, 389, 771, 772, 773, 774, 429,-32766, 430, -85, - 956, 36, 246, 47, 291, 828, 775, 776, 777, 778, - 779, 780, 781, 782, 783, 784, 804, 570, 805, 806, - 807, 808, 796, 797, 343, 344, 799, 800, 785, 786, - 787, 789, 790, 791, 359, 831, 832, 833, 834, 835, - 571, -569, -569, 360, 792, 793, 572, 573, -331, 816, - 814, 815, 827, 811, 812, 2, -194, 574, 575, 810, - 576, 577, 578, 579, 322, 580, 581, 875, 843, 876, - 297, 298, 813, 582, 583, 721, 133, 236, 126, 127, - 128, 569, 129, 130, 1076, 764, 765, 766, 131, 38, - -32766, 26, 734, 1036, 1035, 1034, 1040, 1037, 1038, 1039, - -32766,-32766,-32766, 1004, 104, 105, 106, 107, 108, 35, - 275, 956,-32766, 758, 757, 1052, 849,-32766,-32766,-32766, - 847,-32766, 109,-32766,-32766,-32766,-32766,-32766,-32766,-32766, - 148, 475, 476, 767,-32766,-32766,-32766, 1052,-32766, 290, - -32766,-32766,-32766,-32766,-32766, 615, 134, 263, 132, 389, - 771, 772, 773, 774, 365,-32766, 430,-32766,-32766,-32766, - -32766, 290, 143, 828, 775, 776, 777, 778, 779, 780, - 781, 782, 783, 784, 804, 570, 805, 806, 807, 808, - 796, 797, 343, 344, 799, 800, 785, 786, 787, 789, - 790, 791, 359, 831, 832, 833, 834, 835, 571,-32766, - -32766,-32766, 792, 793, 572, 573, -331, 816, 814, 815, - 827, 811, 812, 1299, -194, 574, 575, 810, 576, 577, - 578, 579, 844, 580, 581, 149, 82, 83, 84, -272, - 813, 582, 583, 249, 146, 788, 759, 760, 761, 762, - 763, 235, 764, 765, 766, 801, 802, 37, 307, 85, - 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, - 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 157, 275,-32766,-32766,-32766,-32767,-32767, - -32767,-32767, 101, 102, 103, 1106, 109, 309, 621, 747, - 767,-32766,-32766,-32766, 848, 318,-32766, 1105,-32766,-32766, - -32766, 338, 845, 1355, 768, 769, 770, 771, 772, 773, - 774, 339,-32766, 837,-32766,-32766, 1384, 374, 1279, 1385, - 828, 775, 776, 777, 778, 779, 780, 781, 782, 783, - 784, 804, 826, 805, 806, 807, 808, 796, 797, 798, - 825, 799, 800, 785, 786, 787, 789, 790, 791, 830, - 831, 832, 833, 834, 835, 836, 1075, 430, -566, 792, - 793, 794, 795, 1359, 816, 814, 815, 827, 811, 812, - 1358, -193, 803, 809, 810, 817, 818, 820, 819, 138, - 821, 822, 839, 321, 380, 285, 24, 813, 824, 823, - 49, 50, 51, 521, 52, 53, -371, -110, -371, 848, - 54, 55, -110, 56, -110,-32766,-32766,-32766, 1340, 303, - 125, 1121, -110, -110, -110, -110, -110, -110, -110, -110, - -110, -110, -110, 161, 749, -566, -566, 291, 972, 973, - 465, 466, 467, 974, 396, 285, 1274, 1273, 1275, 57, - 58, -566, 565, 447, 59, 1107, 60, 243, 244, 61, - 62, 63, 64, 65, 66, 67, 68,-32766, 28, 265, - 69, 445, 522, 489, -345, 448, 1305, 1306, 523, 139, - 848, 1049, 449, 321, 1303, 42, 20, 524, 933, 525, - 933, 526, 74, 527, -567, 697, 528, 529, 321, 386, - 387, 44, 45, 451, 383, 382, 1052, 46, 530, 429, - 972, 973, 450, 372, 337, 974, 1279, 1311, 724, 933, - 1265,-32766,-32766,-32766, 968, 532, 533, 534, 854, 933, - 281, 698, -78, -565, 1272, 758, 757, 536, 537, -193, - 1291, 1292, 1293, 1294, 1296, 1288, 1289, 295, 1052, 725, - 398, 151, 7, 1295, 1290, 699, 700, 1274, 1273, 1275, - 296, -567, -567, 70, -153, -153, -153, 316, 317, 321, - 1270, 923, 290, 923, 1274, 1273, 1275, -567, 1049, -153, - 281, -153, 1148, -153, 81, -153, 739, 152, 321, -573, - 153, 758, 757,-32766, 1051, 381, 875, 848, 876, 155, - -565, -565, 923, 1052, 1049, 33, 972, 973, -58, 490, - -57, 531, 923, 1274, 1273, 1275, -565, 123, 1052, 909, - 968, -110, -110, -110, 28, 266, 124, 281, -572, 1052, - 102, 103, -110, -110,-32766,-32766, 848, -110, 135, -563, - 1303, 136, -605, 142, -605, 156, -110, 664, 21, 158, - 935, 159, 935, 160, 719,-32766, 719, -153, -305, 48, - 32, 110, 111, 112, 113, 114, 115, 116, 117, 118, - 119, 120, 121, 122, 683, 684, 1265, 296, 758, 757, - 74, 935, -87, 933, -84, 719, 321, -4, 933, -78, - 933, 935, -73, 536, 537, 719, 1291, 1292, 1293, 1294, - 1296, 1288, 1289, 1181, 1183, 933, -563, -563, -564, 1295, - 1290, 758, 757, 726, -563,-32766, 147, 413, -301, 72, - 729, 1272, -563, -72, 317, 321, 299, 300,-32766,-32766, - -32766, -71,-32766, -70,-32766, 736,-32766, 384, 385,-32766, - 390, 391, 379, -69,-32766,-32766,-32766, -68,-32766, -67, - -32766,-32766, -66, -65, 1272, -46,-32766, 426, 28, 265, - -18,-32766,-32766,-32766, 140,-32766, 923,-32766,-32766,-32766, - 848, 923,-32766, 923, 1303, -564, -564,-32766,-32766,-32766, - 274, -563, -563,-32766,-32766, 282, 655, 656, 923,-32766, - 426, -564, 735, 381, 738, 442, 932, -563, 145, 73, - 294,-32766, 950, -571, 972, 973, 279, 280, 283, 531, - 1265, 28, 266, 284, 327, 275, 109, 535, 968, -110, - -110, -110, 286, 848, 287, 292, 293, 1303, 537, 144, - 1291, 1292, 1293, 1294, 1296, 1288, 1289, 693, 848, 1139, - -32766, 11, 839, 1295, 1290, 989, 708, 686, 670, 719, - 935, 1386, 935, 72, 719, -4, 719, 653, 317, 321, - -50, 710, 304, 1265, 586, 968, 665, 935, 969, 1310, - 671, 719, 302, 301, 10, 308, 1312, 472, 500,-32766, - -529, 537, 687, 1291, 1292, 1293, 1294, 1296, 1288, 1289, - 952, 40, 592, 137, 41, -519, 1295, 1290, 8, 27, - 619, 321, 0,-32766, 378, 0, 72, 0, 0, 1272, - 0, 317, 321, 744, 0, 0,-32766,-32766,-32766, 0, - -32766, 0,-32766, 0,-32766, 0, 0,-32766, 0, 0, - 0, 0,-32766,-32766,-32766, 933,-32766, 745,-32766,-32766, - 0, 0, 1272, 847,-32766, 426, 867, 0, 296,-32766, - -32766,-32766, 0,-32766, 914,-32766,-32766,-32766, 933, 1013, - -32766, 990, 997, 987, 998,-32766,-32766,-32766, 912,-32766, - 985,-32766,-32766, 1110, 1113, 1272, 1114,-32766, 426, 1111, - 1150, 1112,-32766,-32766,-32766, 1118,-32766, 1300,-32766,-32766, - -32766, 859, 1327,-32766, 1344, 1377, 658, 495,-32766,-32766, - -32766, -599,-32766, -598,-32766,-32766, -597, -573, 1272, 599, - -32766, 426, -572, -571, -570,-32766,-32766,-32766, 923,-32766, - -513,-32766,-32766,-32766, 1, 29,-32766, -275, 30, 39, - 43,-32766,-32766,-32766, -250, -250, -250,-32766,-32766, 71, - 381, 923, 75,-32766, 426, 76, 77, 78, 1279, 79, - 80, 972, 973, 141, 150,-32766, 531, -249, -249, -249, - -273, 154, 241, 381, 909, 968, -110, -110, -110, 323, - 360, 361, 362, 363, 972, 973, 364, 365, -16, 531, - 366, 367, 368, 369, 370, 373, 443, 909, 968, -110, - -110, -110,-32766, -272, 564, 371, 1304, 935, 1272, 13, - 741, 719, -250, 14, 15,-32766,-32766,-32766, 16,-32766, - 18,-32766, 354,-32766, 412, 491,-32766, 492, 499, 502, - 935,-32766,-32766,-32766, 719, -249, 503,-32766,-32766, 848, - 504, 505, 509,-32766, 426, 510, 511, 518, 597, 703, - 1078, 1221, 1301, 1077, 1058,-32766, 1260, 1054, -277, -102, - 12, 17, 22, 312, 411, 611, 616, 644, 709, 1225, - 1278, 1222, 1356, 0, -110, -110, 34, 315, 375, -110, - 720, 723, 727, 728, 730, 731, 732, 733, -110, 737, - 749, 722, 750, 0, 910, 1381, 0,-32766, 1383, 870, - 869, 878, 962, 1005, 877, 1382, 961, 959, 960, 963, - 1253, 943, 953, 941, 1149, 1145, 1099, 995, 996, 296, - 642, 1380, 74, 1338, 1353, 0, 0, 1238, 321 - ); - - protected array $actionCheck = array( - 2, 3, 4, 5, 6, 7, 1, 9, 10, 11, - 12, 13, 82, 31, 116, 85, 9, 10, 11, 0, - 80, 116, 117, 118, 119, 120, 121, 122, 123, 124, - 125, 9, 10, 11, 1, 37, 38, 30, 140, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 31, 30, 1, 70, 57, 116, 117, 118, 119, - 120, 121, 122, 123, 124, 125, 106, 107, 80, 71, - 72, 73, 74, 75, 76, 77, 116, 9, 80, 97, - 122, 151, 152, 70, 30, 87, 88, 89, 90, 91, - 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, - 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, - 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, - 122, 137, 138, 165, 126, 127, 128, 129, 8, 131, - 132, 133, 134, 135, 136, 8, 8, 139, 140, 141, - 142, 143, 144, 145, 70, 147, 148, 106, 160, 108, - 137, 138, 154, 155, 156, 167, 158, 14, 2, 3, - 4, 5, 6, 7, 166, 9, 10, 11, 12, 13, - 116, 8, 167, 119, 120, 121, 122, 123, 124, 125, - 9, 10, 11, 163, 51, 52, 53, 54, 55, 8, - 57, 122, 116, 37, 38, 141, 163, 9, 10, 11, - 159, 30, 69, 32, 33, 34, 35, 36, 37, 38, - 14, 137, 138, 57, 9, 10, 11, 141, 30, 165, - 32, 33, 34, 35, 36, 1, 8, 71, 72, 73, - 74, 75, 76, 77, 165, 30, 80, 32, 33, 34, - 35, 165, 8, 87, 88, 89, 90, 91, 92, 93, - 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, - 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, - 114, 115, 116, 117, 118, 119, 120, 121, 122, 9, - 10, 11, 126, 127, 128, 129, 166, 131, 132, 133, - 134, 135, 136, 1, 166, 139, 140, 141, 142, 143, - 144, 145, 80, 147, 148, 14, 9, 10, 11, 166, - 154, 155, 156, 8, 158, 2, 3, 4, 5, 6, - 7, 97, 9, 10, 11, 12, 13, 30, 8, 32, - 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, - 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, - 53, 54, 55, 16, 57, 9, 10, 11, 44, 45, - 46, 47, 48, 49, 50, 163, 69, 8, 52, 167, - 57, 9, 10, 11, 82, 8, 30, 1, 32, 33, - 34, 8, 160, 1, 71, 72, 73, 74, 75, 76, - 77, 8, 30, 80, 32, 33, 80, 8, 1, 83, - 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 118, 119, 120, 121, 122, 1, 80, 70, 126, - 127, 128, 129, 1, 131, 132, 133, 134, 135, 136, - 8, 8, 139, 140, 141, 142, 143, 144, 145, 167, - 147, 148, 80, 171, 8, 30, 101, 154, 155, 156, - 2, 3, 4, 5, 6, 7, 106, 101, 108, 82, - 12, 13, 106, 15, 108, 9, 10, 11, 1, 113, - 14, 126, 116, 117, 118, 119, 120, 121, 122, 123, - 124, 125, 126, 14, 167, 137, 138, 30, 117, 118, - 132, 133, 134, 122, 8, 30, 159, 160, 161, 51, - 52, 153, 85, 8, 56, 168, 58, 59, 60, 61, - 62, 63, 64, 65, 66, 67, 68, 140, 70, 71, - 72, 73, 74, 31, 168, 8, 78, 79, 80, 167, - 82, 116, 8, 171, 86, 87, 88, 89, 1, 91, - 1, 93, 165, 95, 70, 80, 98, 99, 171, 106, - 107, 103, 104, 105, 106, 107, 141, 109, 110, 116, - 117, 118, 8, 115, 116, 122, 1, 150, 31, 1, - 122, 9, 10, 116, 131, 127, 128, 129, 8, 1, - 165, 116, 16, 70, 80, 37, 38, 139, 140, 166, - 142, 143, 144, 145, 146, 147, 148, 149, 141, 31, - 106, 14, 108, 155, 156, 140, 141, 159, 160, 161, - 162, 137, 138, 165, 75, 76, 77, 169, 170, 171, - 116, 84, 165, 84, 159, 160, 161, 153, 116, 90, - 165, 92, 163, 94, 167, 96, 167, 14, 171, 165, - 14, 37, 38, 116, 140, 106, 106, 82, 108, 14, - 137, 138, 84, 141, 116, 14, 117, 118, 16, 167, - 16, 122, 84, 159, 160, 161, 153, 16, 141, 130, - 131, 132, 133, 134, 70, 71, 16, 165, 165, 141, - 49, 50, 117, 118, 51, 52, 82, 122, 16, 70, - 86, 16, 164, 16, 166, 16, 131, 75, 76, 16, - 163, 16, 163, 16, 167, 140, 167, 168, 35, 70, - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, - 26, 27, 28, 29, 75, 76, 122, 162, 37, 38, - 165, 163, 31, 1, 31, 167, 171, 0, 1, 31, - 1, 163, 31, 139, 140, 167, 142, 143, 144, 145, - 146, 147, 148, 59, 60, 1, 137, 138, 70, 155, - 156, 37, 38, 31, 70, 74, 101, 102, 35, 165, - 31, 80, 153, 31, 170, 171, 137, 138, 87, 88, - 89, 31, 91, 31, 93, 31, 95, 106, 107, 98, - 106, 107, 153, 31, 103, 104, 105, 31, 74, 31, - 109, 110, 31, 31, 80, 31, 115, 116, 70, 71, - 31, 87, 88, 89, 31, 91, 84, 93, 127, 95, - 82, 84, 98, 84, 86, 137, 138, 103, 104, 105, - 31, 137, 138, 109, 110, 31, 111, 112, 84, 115, - 116, 153, 31, 106, 31, 108, 31, 153, 31, 158, - 113, 127, 38, 165, 117, 118, 35, 35, 35, 122, - 122, 70, 71, 35, 35, 57, 69, 130, 131, 132, - 133, 134, 37, 82, 37, 37, 37, 86, 140, 70, - 142, 143, 144, 145, 146, 147, 148, 77, 82, 82, - 85, 154, 80, 155, 156, 163, 80, 94, 96, 167, - 163, 83, 163, 165, 167, 168, 167, 113, 170, 171, - 31, 92, 114, 122, 89, 131, 90, 163, 131, 150, - 100, 167, 136, 135, 97, 135, 150, 97, 97, 140, - 153, 140, 100, 142, 143, 144, 145, 146, 147, 148, - 158, 163, 157, 31, 163, 153, 155, 156, 153, 153, - 157, 171, -1, 74, 153, -1, 165, -1, -1, 80, - -1, 170, 171, 163, -1, -1, 87, 88, 89, -1, - 91, -1, 93, -1, 95, -1, -1, 98, -1, -1, - -1, -1, 103, 104, 105, 1, 74, 163, 109, 110, - -1, -1, 80, 159, 115, 116, 163, -1, 162, 87, - 88, 89, -1, 91, 163, 93, 127, 95, 1, 163, - 98, 163, 163, 163, 163, 103, 104, 105, 163, 74, - 163, 109, 110, 163, 163, 80, 163, 115, 116, 163, - 163, 163, 87, 88, 89, 163, 91, 164, 93, 127, - 95, 164, 164, 98, 164, 164, 164, 102, 103, 104, - 105, 165, 74, 165, 109, 110, 165, 165, 80, 81, - 115, 116, 165, 165, 165, 87, 88, 89, 84, 91, - 165, 93, 127, 95, 165, 165, 98, 166, 165, 165, - 165, 103, 104, 105, 100, 101, 102, 109, 110, 165, - 106, 84, 165, 115, 116, 165, 165, 165, 1, 165, - 165, 117, 118, 165, 165, 127, 122, 100, 101, 102, - 166, 165, 165, 106, 130, 131, 132, 133, 134, 165, - 165, 165, 165, 165, 117, 118, 165, 165, 31, 122, - 165, 165, 165, 165, 165, 165, 165, 130, 131, 132, - 133, 134, 74, 166, 165, 165, 170, 163, 80, 166, - 168, 167, 168, 166, 166, 87, 88, 89, 166, 91, - 166, 93, 166, 95, 166, 166, 98, 166, 166, 166, - 163, 103, 104, 105, 167, 168, 166, 109, 110, 82, - 166, 166, 166, 115, 116, 166, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 127, 166, 166, 166, 166, - 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, -1, 117, 118, 167, 167, 167, 122, - 167, 167, 167, 167, 167, 167, 167, 167, 131, 167, - 167, 167, 167, -1, 168, 168, -1, 140, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, - 168, 168, 168, 168, 168, 168, 168, 168, 168, 162, - 168, 168, 165, 168, 168, -1, -1, 169, 171 - ); - - protected array $actionBase = array( - 0, -2, 156, 559, 757, 1004, 1027, 485, 292, 357, - -60, -12, 588, 759, 759, 774, 759, 557, 752, 888, - 598, 598, 598, 836, 313, 313, 836, 313, 711, 711, - 711, 711, 744, 744, 965, 965, 998, 932, 899, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, 1088, - 1088, 1088, 33, 20, 224, 1083, 661, 1057, 1063, 1059, - 1064, 1055, 1054, 1058, 1060, 1065, 1113, 1115, 837, 1112, - 1116, 1061, 902, 1056, 1062, 887, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 68, 476, 582, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 270, 270, 270, 270, 270, - 270, 270, 270, 270, 270, 624, 624, 22, 22, 22, - 362, 811, 758, 811, 811, 811, 811, 811, 811, 811, - 811, 346, 205, 188, 714, 171, 171, 7, 7, 7, - 7, 7, 376, 1117, 54, 585, 585, 314, 314, 314, - 314, 365, 568, 370, 435, 397, 651, 477, 463, 532, - 532, 558, 558, 76, 76, 558, 558, 558, 133, 133, - 547, 547, 547, 547, 41, 437, 809, 382, 382, 382, - 382, 809, 809, 809, 809, 796, 996, 809, 809, 809, - 494, 533, 708, 653, 653, 560, -70, -70, 560, 804, - -70, 487, 316, -102, 807, -40, 548, -102, 1000, 368, - 639, 639, 659, 639, 639, 639, 854, 701, 854, 1053, - -42, 825, 825, 794, 731, 69, 892, 1084, 1066, 840, - 1109, 852, 1110, 1085, 489, 378, -16, 13, 74, 728, - 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, 1052, - 1052, 1052, 800, 568, 1053, 222, 1107, 1108, 800, 800, - 800, 568, 568, 568, 568, 568, 568, 568, 568, 799, - 568, 568, 745, 222, 642, 669, 222, 849, 568, 33, - 812, 33, 33, 33, 33, 33, 33, 33, 33, 33, - 33, 512, 33, 20, 5, 5, 202, 52, 5, 5, - 5, 337, 5, 33, 33, 33, 701, 828, 805, 704, - -18, 813, 443, 828, 828, 828, 120, 143, 128, 693, - 753, 514, 832, 832, 827, 929, 929, 832, 826, 832, - 827, 832, 832, 929, 929, 856, 929, 218, 515, 373, - 456, 537, 929, 320, 832, 832, 832, 832, 810, 929, - 127, 544, 832, 305, 234, 832, 832, 810, 808, 824, - 806, 929, 929, 929, 810, 389, 806, 806, 806, 820, - 844, 814, 819, 367, 359, 590, 181, 834, 819, 819, - 832, 506, 814, 819, 814, 819, 802, 819, 819, 819, - 814, 819, 826, 383, 819, 699, 574, 163, 819, 832, - 19, 944, 947, 721, 950, 934, 951, 991, 952, 954, - 1073, 925, 967, 935, 955, 999, 933, 930, 835, 671, - 680, 815, 797, 919, 817, 817, 817, 912, 917, 817, - 817, 817, 817, 817, 817, 817, 817, 671, 893, 821, - 845, 976, 692, 695, 1042, 789, 1086, 1118, 975, 944, - 954, 723, 935, 955, 933, 930, 792, 791, 786, 788, - 782, 772, 762, 770, 803, 1044, 958, 798, 697, 1014, - 977, 1002, 1070, 978, 981, 1018, 1045, 853, 1046, 1087, - 829, 1090, 1091, 897, 985, 1074, 817, 911, 906, 898, - 982, 918, 671, 900, 1047, 1003, 1069, 1019, 1021, 1071, - 850, 838, 901, 1092, 986, 987, 988, 1075, 1076, 801, - 1007, 931, 1022, 851, 1093, 1023, 1030, 1034, 1035, 1077, - 1094, 1078, 908, 1079, 861, 846, 964, 822, 1095, 196, - 843, 848, 859, 990, 291, 974, 1080, 1096, 1097, 1036, - 1039, 1040, 1098, 1099, 959, 866, 1008, 823, 1012, 997, - 868, 869, 607, 858, 1048, 841, 842, 857, 643, 646, - 1100, 1101, 1102, 966, 831, 830, 870, 871, 1050, 855, - 1051, 1103, 655, 875, 1104, 1043, 703, 705, 586, 664, - 662, 707, 839, 1082, 816, 818, 847, 989, 705, 833, - 877, 1105, 880, 881, 883, 1041, 886, 1016, 1106, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 468, 468, 468, 468, 468, 468, 313, - 313, 313, 313, 313, 468, 468, 468, 468, 468, 468, - 468, 313, 468, 468, 468, 313, 0, 0, 313, 0, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 468, 468, 468, 468, 468, 468, - 468, 468, 468, 468, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 297, 297, 297, - 297, 297, 297, 297, 297, 297, 297, 524, 524, 297, - 297, 297, 297, 524, 524, 524, 524, 524, 524, 524, - 524, 524, 524, 297, 297, 297, 0, 297, 297, 297, - 297, 297, 297, 297, 856, 524, 524, 524, 524, 133, - 133, 133, 133, -95, -95, -95, 524, 524, 133, 524, - 856, 524, 524, 524, 524, 524, 524, 524, 524, 524, - 0, 0, 524, 524, 524, 524, 222, -70, 524, 826, - 826, 826, 826, 524, 524, 524, 524, -70, -70, 524, - 524, 524, 0, 0, 0, 133, 133, 222, 0, 0, - 222, 391, 0, 826, 826, 524, 391, 856, 442, 524, - 489, 0, 0, 0, 0, 0, 0, 0, 222, 826, - 222, 568, 832, -70, -70, 568, 568, 832, 5, 33, - 442, 685, 685, 685, 685, 33, 0, 0, 0, 0, - 0, 701, 856, 856, 856, 856, 856, 856, 856, 856, - 856, 856, 856, 856, 826, 0, 856, 0, 856, 856, - 826, 826, 826, 0, 0, 0, 0, 0, 0, 0, - 0, 929, 0, 0, 0, 0, 0, 0, 0, 826, - 0, 0, 929, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 826, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 817, - 850, 0, 0, 850, 0, 817, 817, 817, 0, 0, - 0, 858, 855 - ); - - protected array $actionDefault = array( - 3,32767, 102,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 100,32767, 617, 617, - 617, 617,32767,32767, 254, 102,32767,32767, 488, 405, - 405, 405,32767,32767, 561, 561, 561, 561, 561,32767, - 32767,32767,32767,32767,32767, 488,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 36, 7, 8, 10, - 11, 49, 17, 327, 100,32767,32767,32767,32767,32767, - 32767,32767,32767, 102,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767, 392, 610,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 492, 471, 472, 474, - 475, 404, 562, 616, 330, 613, 332, 403, 145, 342, - 333, 242, 258, 493, 259, 494, 497, 498, 215, 389, - 149, 150, 435, 489, 437, 487, 491, 436, 410, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 408, 409, 490,32767,32767, 468, 467, 466, - 433,32767,32767,32767,32767,32767,32767,32767,32767, 102, - 32767, 434, 438, 441, 407, 439, 440, 457, 458, 455, - 456, 459,32767,32767, 319,32767,32767, 460, 461, 462, - 463, 370, 195, 368,32767,32767, 442, 319, 111,32767, - 32767,32767,32767,32767,32767,32767,32767,32767, 448, 449, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767, 102,32767, 100, - 505, 555, 465, 443, 444,32767, 530,32767, 102,32767, - 532,32767,32767,32767,32767,32767,32767,32767,32767, 557, - 430, 432, 525, 611, 411, 614,32767, 518, 100, 195, - 32767,32767, 531, 195, 195,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 556,32767, 624, 518, - 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, - 110, 110,32767, 195, 110,32767, 110, 110,32767,32767, - 100, 195, 195, 195, 195, 195, 195, 195, 195, 533, - 195, 195, 190,32767, 268, 270, 102, 579, 195,32767, - 535,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767, 392,32767,32767,32767,32767, 518, 453, 138,32767, - 520, 138, 563, 445, 446, 447, 563, 563, 563, 315, - 292,32767,32767,32767,32767, 533, 533, 100, 100, 100, - 100,32767,32767,32767,32767, 111, 504, 99, 99, 99, - 99, 99, 103, 101,32767,32767,32767,32767, 223,32767, - 101, 99,32767, 101, 101,32767,32767, 223, 225, 212, - 227,32767, 583, 584, 223, 101, 227, 227, 227, 247, - 247, 507, 321, 101, 99, 101, 101, 197, 321, 321, - 32767, 101, 507, 321, 507, 321, 199, 321, 321, 321, - 507, 321,32767, 101, 321, 214, 99, 99, 321,32767, - 32767,32767,32767, 520,32767,32767,32767,32767,32767,32767, - 32767, 222,32767,32767,32767,32767,32767,32767,32767,32767, - 550,32767, 568, 581, 451, 452, 454, 567, 565, 476, - 477, 478, 479, 480, 481, 482, 484, 612,32767, 524, - 32767,32767,32767, 341,32767, 622,32767,32767,32767, 9, - 74, 513, 42, 43, 51, 57, 539, 540, 541, 542, - 536, 537, 543, 538,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767, 623, - 32767, 563,32767,32767,32767,32767, 450, 545, 589,32767, - 32767, 564, 615,32767,32767,32767,32767,32767,32767,32767, - 138,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767, 550,32767, 136,32767,32767,32767,32767,32767,32767, - 32767,32767, 546,32767,32767,32767, 563,32767,32767,32767, - 32767, 317, 314,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767, 563, - 32767,32767,32767,32767,32767, 294,32767, 311,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767, 388, 520, 297, 299, - 300,32767,32767,32767,32767, 364,32767,32767,32767,32767, - 32767,32767,32767,32767,32767,32767,32767,32767,32767, 152, - 152, 3, 3, 344, 152, 152, 152, 344, 344, 152, - 344, 344, 344, 152, 152, 152, 152, 152, 152, 152, - 280, 185, 262, 265, 247, 247, 152, 356, 152, 390, - 390, 399 - ); - - protected array $goto = array( - 194, 194, 1050, 486, 704, 278, 278, 278, 278, 1081, - 488, 547, 547, 906, 864, 906, 906, 547, 713, 547, - 547, 547, 547, 547, 547, 547, 547, 166, 166, 166, - 166, 218, 195, 191, 191, 176, 178, 213, 191, 191, - 191, 191, 191, 192, 192, 192, 192, 192, 186, 187, - 188, 189, 190, 215, 213, 216, 544, 545, 427, 546, - 549, 550, 551, 552, 553, 554, 555, 556, 1167, 167, - 168, 169, 193, 170, 171, 172, 164, 173, 174, 175, - 177, 212, 214, 217, 237, 240, 251, 252, 253, 255, - 256, 257, 258, 259, 260, 261, 267, 268, 269, 270, - 276, 288, 289, 313, 314, 433, 434, 435, 606, 219, - 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, - 230, 231, 232, 233, 234, 186, 187, 188, 189, 190, - 215, 1167, 196, 197, 198, 199, 238, 179, 180, 200, - 181, 201, 197, 182, 239, 196, 163, 202, 203, 183, - 204, 205, 206, 184, 207, 208, 165, 209, 210, 211, - 185, 868, 247, 247, 591, 474, 474, 1098, 743, 645, - 647, 865, 608, 667, 474, 866, 469, 691, 694, 1023, - 702, 711, 1019, 718, 464, 1216, 881, 358, 840, 245, - 245, 245, 245, 242, 248, 1370, 1370, 358, 358, 350, - 557, 557, 557, 557, 893, 612, 341, 880, 358, 358, - 1370, 988, 358, 873, 1387, 922, 917, 918, 931, 874, - 919, 871, 920, 921, 872, 446, 925, 342, 341, 563, - 425, 1373, 1373, 358, 358, 899, 861, 1104, 1100, 1101, - 437, 669, 403, 406, 609, 613, 432, 334, 330, 331, - 333, 601, 436, 335, 438, 646, 629, 666, 1271, 1050, - 1271, 1271, 1056, 1055, 455, 455, 598, 455, 455, 1050, - 1271, 348, 1050, 519, 1050, 1050, 1050, 1050, 1050, 1050, - 1050, 1050, 1050, 861, 1360, 1050, 1050, 1050, 1050, 1332, - 1009, 1271, 507, 926, 508, 927, 1271, 1271, 1271, 1271, - 514, 401, 1271, 1271, 1271, 1352, 1352, 1352, 1352, 421, - 355, 355, 355, 355, 1124, 1152, 1125, 596, 939, 631, - 631, 668, 940, 439, 1164, 1302, 1302, 1302, 1302, 1302, - 1302, 1302, 1302, 1302, 1302, 1074, 439, 483, 1345, 1346, - 563, 444, 1057, 1057, 568, 561, 1059, 1060, 955, 673, - 1068, 1064, 1065, 955, 662, 663, 846, 680, 681, 682, - 320, 306, 455, 455, 455, 455, 455, 455, 455, 455, - 455, 455, 455, 455, 690, 5, 455, 6, 455, 455, - 602, 623, 340, 561, 568, 593, 594, 345, 604, 610, - 674, 625, 626, 980, 416, 712, 250, 250, 846, 25, - 846, 1347, 1348, 559, 1264, 559, 559, 1026, 1026, 336, - 1321, 1321, 431, 861, 620, 559, 1321, 1321, 1321, 1321, - 1321, 1321, 1321, 1321, 1321, 1321, 858, 1343, 886, 1343, - 1343, 639, 641, 643, 410, 971, 462, 883, 1262, 1343, - 624, 982, 982, 982, 982, 1031, 1147, 462, 976, 983, - 562, 588, 701, 351, 352, 562, 842, 588, 1087, 404, - 468, 1354, 1354, 1354, 1354, 746, 1041, 895, 701, 1138, - 484, 701, 477, 605, 478, 479, 1091, 377, 993, 0, - 891, 1318, 1318, 1378, 1379, 1339, 0, 1318, 1318, 1318, - 1318, 1318, 1318, 1318, 1318, 1318, 1318, 0, 0, 0, - 0, 0, 0, 548, 548, 1266, 0, 0, 889, 548, - 548, 548, 548, 548, 548, 548, 548, 548, 548, 414, - 415, 0, 0, 0, 678, 0, 679, 328, 418, 419, - 420, 0, 692, 0, 0, 422, 1089, 0, 0, 346, - 0, 0, 1341, 1341, 1089, 618, 632, 635, 636, 637, - 638, 659, 660, 661, 715, 717, 0, 0, 1267, 1268, - 0, 1254, 894, 882, 1086, 1090, 0, 856, 0, 271, - 319, 0, 319, 319, 1254, 991, 614, 1247, 957, 944, - 1154, 1248, 1251, 958, 0, 1252, 1269, 1329, 1330, 0, - 0, 1028, 0, 0, 0, 0, 0, 0, 981, 885, - 0, 672, 1007, 1053, 1053, 689, 965, 879, 0, 1045, - 1061, 1062, 607, 1117, 0, 0, 0, 0, 0, 1261, - 1136, 898, 0, 716, 0, 0, 0, 1012, 515, 707, - 984, 1115, 742, 0, 0, 560, 1021, 1016, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 751, 751 - ); - - protected array $gotoCheck = array( - 42, 42, 73, 84, 73, 23, 23, 23, 23, 128, - 84, 162, 162, 25, 25, 25, 25, 162, 9, 162, - 162, 162, 162, 162, 162, 162, 162, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 15, 5, 5, 48, 154, 154, 15, 48, 48, - 48, 26, 131, 48, 154, 27, 156, 48, 48, 48, - 48, 48, 48, 48, 83, 156, 35, 14, 6, 5, - 5, 5, 5, 5, 5, 188, 188, 14, 14, 97, - 107, 107, 107, 107, 35, 107, 174, 35, 14, 14, - 188, 49, 14, 15, 14, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 83, 15, 174, 174, 14, - 43, 188, 188, 14, 14, 45, 22, 15, 15, 15, - 66, 66, 59, 59, 59, 59, 66, 66, 66, 66, - 66, 66, 66, 66, 66, 66, 56, 56, 73, 73, - 73, 73, 119, 119, 23, 23, 178, 23, 23, 73, - 73, 185, 73, 76, 73, 73, 73, 73, 73, 73, - 73, 73, 73, 22, 187, 73, 73, 73, 73, 14, - 103, 73, 160, 65, 160, 65, 73, 73, 73, 73, - 160, 62, 73, 73, 73, 9, 9, 9, 9, 14, - 24, 24, 24, 24, 146, 146, 146, 104, 73, 108, - 108, 64, 73, 118, 155, 108, 108, 108, 108, 108, - 108, 108, 108, 108, 108, 115, 118, 182, 182, 182, - 14, 113, 118, 118, 76, 76, 120, 120, 9, 118, - 118, 118, 118, 9, 86, 86, 12, 86, 86, 86, - 175, 175, 23, 23, 23, 23, 23, 23, 23, 23, - 23, 23, 23, 23, 117, 46, 23, 46, 23, 23, - 2, 2, 76, 76, 76, 76, 76, 76, 76, 76, - 121, 76, 76, 93, 93, 93, 5, 5, 12, 76, - 12, 184, 184, 19, 14, 19, 19, 107, 107, 29, - 176, 176, 13, 22, 13, 19, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 176, 18, 131, 39, 131, - 131, 85, 85, 85, 28, 92, 19, 37, 166, 131, - 80, 19, 19, 19, 19, 110, 153, 19, 19, 19, - 9, 9, 7, 97, 97, 9, 7, 9, 130, 9, - 9, 131, 131, 131, 131, 99, 114, 41, 7, 149, - 157, 7, 9, 9, 9, 9, 133, 138, 96, -1, - 9, 177, 177, 9, 9, 131, -1, 177, 177, 177, - 177, 177, 177, 177, 177, 177, 177, -1, -1, -1, - -1, -1, -1, 179, 179, 20, -1, -1, 9, 179, - 179, 179, 179, 179, 179, 179, 179, 179, 179, 82, - 82, -1, -1, -1, 82, -1, 82, 9, 82, 82, - 82, -1, 82, -1, -1, 82, 131, -1, -1, 82, - -1, -1, 131, 131, 131, 81, 81, 81, 81, 81, - 81, 81, 81, 81, 81, 81, -1, -1, 20, 20, - -1, 20, 16, 16, 16, 16, -1, 20, -1, 24, - 24, -1, 24, 24, 20, 16, 17, 79, 79, 17, - 17, 79, 79, 79, -1, 79, 20, 20, 20, -1, - -1, 17, -1, -1, -1, -1, -1, -1, 16, 17, - -1, 17, 17, 89, 89, 89, 89, 17, -1, 89, - 89, 89, 8, 8, -1, -1, -1, -1, -1, 17, - 16, 16, -1, 8, -1, -1, -1, 50, 8, 8, - 50, 8, 50, -1, -1, 50, 50, 50, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 24, 24 - ); - - protected array $gotoBase = array( - 0, 0, -341, 0, 0, 161, 178, 445, 604, 8, - 0, 0, 62, 76, -108, -186, 104, 106, 119, 140, - 105, 0, -42, 2, 307, 10, 167, 171, 98, 115, - 0, 0, 0, 0, 0, -189, 0, 99, 0, 110, - 0, 20, -1, 207, 0, 209, -371, 0, -556, 193, - 615, 0, 0, 0, 0, 0, 216, 0, 0, 197, - 0, 0, 259, 0, 85, 279, 5, 0, 0, 0, - 0, 0, 0, -5, 0, 0, 1, 0, 0, 163, - 95, 184, 21, -94, -474, -55, -373, 0, 0, 324, - 0, 0, 111, 91, 0, 0, 29, -291, 0, 52, - 0, 0, 0, 255, 274, 0, 0, 172, 84, 0, - 71, 0, 0, 64, 45, 61, 0, 93, 59, -17, - 63, 100, 0, 0, 0, 0, 0, 0, 7, 0, - 78, 164, 0, 28, 0, 0, 0, 0, -273, 0, - 0, 0, 0, 0, 0, 0, 43, 0, 0, 19, - 0, 0, 0, 92, 131, 82, -90, 24, 0, 0, - -210, 0, -224, 0, 0, 0, 65, 0, 0, 0, - 0, 0, 0, 0, -89, 44, 175, 246, 237, 268, - 0, 0, 39, 0, 23, 241, 0, 253, -110, 0, - 0 - ); - - protected array $gotoDefault = array( - -32768, 520, 753, 4, 754, 948, 829, 838, 584, 538, - 714, 347, 633, 428, 1337, 924, 1153, 603, 857, 1280, - 1286, 463, 860, 325, 740, 936, 907, 908, 407, 393, - 399, 405, 657, 634, 501, 892, 459, 884, 493, 887, - 458, 896, 162, 424, 517, 900, 3, 903, 566, 934, - 986, 394, 911, 395, 685, 913, 587, 915, 916, 402, - 408, 409, 1158, 595, 630, 928, 254, 589, 929, 392, - 930, 938, 397, 400, 695, 473, 512, 506, 417, 1119, - 590, 617, 654, 452, 480, 628, 640, 627, 487, 440, - 423, 324, 970, 978, 494, 471, 992, 349, 1000, 748, - 1166, 648, 496, 1008, 649, 1015, 1018, 539, 540, 485, - 1030, 264, 1033, 497, 1042, 23, 675, 1047, 1048, 676, - 650, 1070, 651, 677, 652, 1072, 470, 585, 1080, 460, - 1088, 1326, 461, 1092, 262, 1095, 277, 353, 376, 441, - 1102, 1103, 9, 1109, 705, 706, 19, 273, 516, 1137, - 696, 1143, 272, 1146, 457, 1165, 456, 1235, 1237, 567, - 498, 1255, 310, 1258, 688, 513, 1263, 453, 1328, 454, - 541, 481, 332, 542, 1371, 305, 356, 329, 558, 311, - 357, 543, 482, 1334, 1342, 326, 31, 1361, 1372, 600, - 622 - ); - - protected array $ruleToNonTerminal = array( - 0, 1, 3, 3, 2, 5, 5, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, - 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, - 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, - 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, - 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, - 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, - 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, - 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, - 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, - 49, 49, 25, 25, 50, 69, 69, 72, 72, 71, - 70, 70, 63, 75, 75, 76, 76, 77, 77, 78, - 78, 79, 79, 80, 80, 26, 26, 27, 27, 27, - 27, 27, 88, 88, 90, 90, 83, 83, 91, 91, - 92, 92, 92, 84, 84, 87, 87, 85, 85, 93, - 94, 94, 57, 57, 65, 65, 68, 68, 68, 67, - 95, 95, 96, 58, 58, 58, 58, 97, 97, 98, - 98, 99, 99, 100, 101, 101, 102, 102, 103, 103, - 55, 55, 51, 51, 105, 53, 53, 106, 52, 52, - 54, 54, 64, 64, 64, 64, 81, 81, 109, 109, - 111, 111, 112, 112, 112, 112, 112, 112, 112, 110, - 110, 110, 115, 115, 115, 115, 89, 89, 118, 118, - 118, 119, 119, 116, 116, 120, 120, 122, 122, 123, - 123, 117, 124, 124, 121, 125, 125, 125, 125, 113, - 113, 82, 82, 82, 20, 20, 20, 127, 126, 126, - 128, 128, 128, 128, 60, 129, 129, 130, 61, 132, - 132, 133, 133, 134, 134, 86, 135, 135, 135, 135, - 135, 135, 135, 135, 141, 141, 142, 142, 143, 143, - 143, 143, 143, 144, 145, 145, 140, 140, 136, 136, - 139, 139, 147, 147, 146, 146, 146, 146, 146, 146, - 146, 146, 146, 146, 137, 148, 148, 150, 149, 149, - 138, 138, 114, 114, 151, 151, 153, 153, 153, 152, - 152, 62, 104, 154, 154, 56, 56, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, - 42, 161, 162, 162, 163, 155, 155, 160, 160, 164, - 165, 165, 166, 167, 168, 168, 168, 168, 19, 19, - 73, 73, 73, 73, 156, 156, 156, 156, 170, 170, - 159, 159, 159, 157, 157, 176, 176, 176, 176, 176, - 176, 176, 176, 176, 176, 177, 177, 177, 108, 179, - 179, 179, 179, 158, 158, 158, 158, 158, 158, 158, - 158, 59, 59, 173, 173, 173, 173, 173, 180, 180, - 169, 169, 169, 169, 181, 181, 181, 181, 181, 74, - 74, 66, 66, 66, 66, 131, 131, 131, 131, 184, - 183, 172, 172, 172, 172, 172, 172, 171, 171, 171, - 182, 182, 182, 182, 107, 178, 186, 186, 185, 185, - 187, 187, 187, 187, 187, 187, 187, 187, 175, 175, - 175, 175, 174, 189, 188, 188, 188, 188, 188, 188, - 188, 188, 190, 190, 190, 190 - ); - - protected array $ruleToLength = array( - 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, - 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, - 0, 1, 1, 1, 1, 4, 3, 5, 4, 3, - 4, 2, 3, 1, 1, 7, 6, 2, 3, 1, - 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, - 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, - 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, - 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, - 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, - 2, 1, 1, 1, 1, 0, 2, 1, 3, 8, - 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, - 1, 3, 1, 1, 1, 8, 9, 7, 8, 7, - 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, - 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, - 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, - 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, - 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, - 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, - 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, - 0, 2, 1, 1, 1, 1, 1, 1, 1, 7, - 9, 6, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, - 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, - 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, - 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, - 1, 1, 3, 2, 0, 1, 5, 7, 5, 6, - 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, - 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, - 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, - 0, 2, 0, 3, 5, 8, 1, 3, 3, 0, - 2, 2, 2, 3, 1, 0, 1, 1, 3, 3, - 3, 4, 4, 1, 1, 2, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, - 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, - 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, - 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, - 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, - 10, 8, 3, 2, 2, 1, 1, 0, 4, 2, - 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, - 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, - 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, - 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, - 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, - 1, 3, 1, 1, 1, 4, 1, 4, 4, 0, - 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, - 3, 1, 4, 3, 3, 3, 3, 1, 3, 1, - 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, - 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, - 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, - 6, 3, 1, 1, 2, 1 - ); - - protected function initReduceCallbacks(): void { - $this->reduceCallbacks = [ - 0 => null, - 1 => static function ($self, $stackPos) { - $self->semValue = $self->handleNamespaces($self->semStack[$stackPos-(1-1)]); - }, - 2 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];; - }, - 3 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 4 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; - if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 5 => null, - 6 => null, - 7 => null, - 8 => null, - 9 => null, - 10 => null, - 11 => null, - 12 => null, - 13 => null, - 14 => null, - 15 => null, - 16 => null, - 17 => null, - 18 => null, - 19 => null, - 20 => null, - 21 => null, - 22 => null, - 23 => null, - 24 => null, - 25 => null, - 26 => null, - 27 => null, - 28 => null, - 29 => null, - 30 => null, - 31 => null, - 32 => null, - 33 => null, - 34 => null, - 35 => null, - 36 => null, - 37 => null, - 38 => null, - 39 => null, - 40 => null, - 41 => null, - 42 => null, - 43 => null, - 44 => null, - 45 => null, - 46 => null, - 47 => null, - 48 => null, - 49 => null, - 50 => null, - 51 => null, - 52 => null, - 53 => null, - 54 => null, - 55 => null, - 56 => null, - 57 => null, - 58 => null, - 59 => null, - 60 => null, - 61 => null, - 62 => null, - 63 => null, - 64 => null, - 65 => null, - 66 => null, - 67 => null, - 68 => null, - 69 => null, - 70 => null, - 71 => null, - 72 => null, - 73 => null, - 74 => null, - 75 => null, - 76 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; if ($self->semValue === "emitError(new Error('Cannot use "getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]))); - }, - 77 => null, - 78 => null, - 79 => null, - 80 => null, - 81 => null, - 82 => null, - 83 => null, - 84 => null, - 85 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 86 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 87 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 88 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 89 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 90 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 91 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 92 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 93 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 94 => null, - 95 => static function ($self, $stackPos) { - $self->semValue = new Name(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 96 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 97 => static function ($self, $stackPos) { - /* nothing */ - }, - 98 => static function ($self, $stackPos) { - /* nothing */ - }, - 99 => static function ($self, $stackPos) { - /* nothing */ - }, - 100 => static function ($self, $stackPos) { - $self->emitError(new Error('A trailing comma is not allowed here', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]))); - }, - 101 => null, - 102 => null, - 103 => static function ($self, $stackPos) { - $self->semValue = new Node\Attribute($self->semStack[$stackPos-(1-1)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 104 => static function ($self, $stackPos) { - $self->semValue = new Node\Attribute($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 105 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 106 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 107 => static function ($self, $stackPos) { - $self->semValue = new Node\AttributeGroup($self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 108 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 109 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 110 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 111 => null, - 112 => null, - 113 => null, - 114 => null, - 115 => static function ($self, $stackPos) { - $self->semValue = new Stmt\HaltCompiler($self->handleHaltCompiler(), $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 116 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(3-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); - $self->checkNamespace($self->semValue); - }, - 117 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $self->checkNamespace($self->semValue); - }, - 118 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Namespace_(null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); - $self->checkNamespace($self->semValue); - }, - 119 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 120 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 121 => null, - 122 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Const_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 123 => static function ($self, $stackPos) { - $self->semValue = Stmt\Use_::TYPE_FUNCTION; - }, - 124 => static function ($self, $stackPos) { - $self->semValue = Stmt\Use_::TYPE_CONSTANT; - }, - 125 => static function ($self, $stackPos) { - $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-6)], $self->semStack[$stackPos-(7-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 126 => static function ($self, $stackPos) { - $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-5)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); - }, - 127 => null, - 128 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 129 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 130 => null, - 131 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 132 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 133 => null, - 134 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 135 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 136 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1)); - }, - 137 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3)); - }, - 138 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1)); - }, - 139 => static function ($self, $stackPos) { - $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3)); - }, - 140 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->semValue->type = Stmt\Use_::TYPE_NORMAL; - }, - 141 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; $self->semValue->type = $self->semStack[$stackPos-(2-1)]; - }, - 142 => null, - 143 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 144 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 145 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 146 => null, - 147 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 148 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 149 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 150 => static function ($self, $stackPos) { - $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 151 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];; - }, - 152 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 153 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; - if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 154 => null, - 155 => null, - 156 => null, - 157 => static function ($self, $stackPos) { - throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 158 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Block($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 159 => static function ($self, $stackPos) { - $self->semValue = new Stmt\If_($self->semStack[$stackPos-(7-3)], ['stmts' => $self->semStack[$stackPos-(7-5)], 'elseifs' => $self->semStack[$stackPos-(7-6)], 'else' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 160 => static function ($self, $stackPos) { - $self->semValue = new Stmt\If_($self->semStack[$stackPos-(10-3)], ['stmts' => $self->semStack[$stackPos-(10-6)], 'elseifs' => $self->semStack[$stackPos-(10-7)], 'else' => $self->semStack[$stackPos-(10-8)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); - }, - 161 => static function ($self, $stackPos) { - $self->semValue = new Stmt\While_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 162 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Do_($self->semStack[$stackPos-(7-5)], $self->semStack[$stackPos-(7-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 163 => static function ($self, $stackPos) { - $self->semValue = new Stmt\For_(['init' => $self->semStack[$stackPos-(9-3)], 'cond' => $self->semStack[$stackPos-(9-5)], 'loop' => $self->semStack[$stackPos-(9-7)], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 164 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Switch_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 165 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Break_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 166 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Continue_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 167 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Return_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 168 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Global_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 169 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Static_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 170 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Echo_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 171 => static function ($self, $stackPos) { - - $self->semValue = new Stmt\InlineHTML($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - $self->semValue->setAttribute('hasLeadingNewline', $self->inlineHtmlHasLeadingNewline($stackPos-(1-1))); - - }, - 172 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Expression($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 173 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Unset_($self->semStack[$stackPos-(5-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 174 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $self->semStack[$stackPos-(7-5)][1], 'stmts' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 175 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-7)][0], ['keyVar' => $self->semStack[$stackPos-(9-5)], 'byRef' => $self->semStack[$stackPos-(9-7)][1], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 176 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(6-3)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-4)], $self->tokenEndStack[$stackPos-(6-4)])), ['stmts' => $self->semStack[$stackPos-(6-6)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); - }, - 177 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Declare_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 178 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TryCatch($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->checkTryCatch($self->semValue); - }, - 179 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Goto_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 180 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Label($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 181 => static function ($self, $stackPos) { - $self->semValue = null; /* means: no statement */ - }, - 182 => null, - 183 => static function ($self, $stackPos) { - $self->semValue = $self->maybeCreateNop($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]); - }, - 184 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; }; - }, - 185 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 186 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 187 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 188 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 189 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Catch_($self->semStack[$stackPos-(8-3)], $self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-7)], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - }, - 190 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 191 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Finally_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 192 => null, - 193 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 194 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 195 => static function ($self, $stackPos) { - $self->semValue = false; - }, - 196 => static function ($self, $stackPos) { - $self->semValue = true; - }, - 197 => static function ($self, $stackPos) { - $self->semValue = false; - }, - 198 => static function ($self, $stackPos) { - $self->semValue = true; - }, - 199 => static function ($self, $stackPos) { - $self->semValue = false; - }, - 200 => static function ($self, $stackPos) { - $self->semValue = true; - }, - 201 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 202 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 203 => null, - 204 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 205 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(8-3)], ['byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-5)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - }, - 206 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(9-4)], ['byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-6)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 207 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(7-2)], ['type' => $self->semStack[$stackPos-(7-1)], 'extends' => $self->semStack[$stackPos-(7-3)], 'implements' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - $self->checkClass($self->semValue, $stackPos-(7-2)); - }, - 208 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(8-3)], ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - $self->checkClass($self->semValue, $stackPos-(8-3)); - }, - 209 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Interface_($self->semStack[$stackPos-(7-3)], ['extends' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => $self->semStack[$stackPos-(7-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - $self->checkInterface($self->semValue, $stackPos-(7-3)); - }, - 210 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Trait_($self->semStack[$stackPos-(6-3)], ['stmts' => $self->semStack[$stackPos-(6-5)], 'attrGroups' => $self->semStack[$stackPos-(6-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); - }, - 211 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Enum_($self->semStack[$stackPos-(8-3)], ['scalarType' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - $self->checkEnum($self->semValue, $stackPos-(8-3)); - }, - 212 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 213 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 214 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 215 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 216 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 217 => null, - 218 => null, - 219 => static function ($self, $stackPos) { - $self->checkClassModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; - }, - 220 => static function ($self, $stackPos) { - $self->semValue = Modifiers::ABSTRACT; - }, - 221 => static function ($self, $stackPos) { - $self->semValue = Modifiers::FINAL; - }, - 222 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, - 223 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 224 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 225 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 226 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 227 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 228 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 229 => null, - 230 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 231 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 232 => null, - 233 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 234 => null, - 235 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 236 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; }; - }, - 237 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 238 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 239 => null, - 240 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 241 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 242 => static function ($self, $stackPos) { - $self->semValue = new Node\DeclareItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 243 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 244 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-3)]; - }, - 245 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 246 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(5-3)]; - }, - 247 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 248 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 249 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Case_($self->semStack[$stackPos-(4-2)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 250 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Case_(null, $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 251 => null, - 252 => null, - 253 => static function ($self, $stackPos) { - $self->semValue = new Expr\Match_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); - }, - 254 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 255 => null, - 256 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 257 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 258 => static function ($self, $stackPos) { - $self->semValue = new Node\MatchArm($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 259 => static function ($self, $stackPos) { - $self->semValue = new Node\MatchArm(null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 260 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 261 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 262 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 263 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 264 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 265 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 266 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 267 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue); - }, - 268 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 269 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 270 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 271 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue); - }, - 272 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)], false); - }, - 273 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(2-2)], true); - }, - 274 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)], false); - }, - 275 => static function ($self, $stackPos) { - $self->semValue = array($self->fixupArrayDestructuring($self->semStack[$stackPos-(1-1)]), false); - }, - 276 => null, - 277 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 278 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 279 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 280 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 281 => static function ($self, $stackPos) { - $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; - }, - 282 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC; - }, - 283 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED; - }, - 284 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE; - }, - 285 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC_SET; - }, - 286 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED_SET; - }, - 287 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE_SET; - }, - 288 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, - 289 => static function ($self, $stackPos) { - $self->semValue = new Node\Param($self->semStack[$stackPos-(7-6)], null, $self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-4)], $self->semStack[$stackPos-(7-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-1)], $self->semStack[$stackPos-(7-7)]); - $self->checkParam($self->semValue); - }, - 290 => static function ($self, $stackPos) { - $self->semValue = new Node\Param($self->semStack[$stackPos-(9-6)], $self->semStack[$stackPos-(9-8)], $self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-4)], $self->semStack[$stackPos-(9-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(9-2)], $self->semStack[$stackPos-(9-1)], $self->semStack[$stackPos-(9-9)]); - $self->checkParam($self->semValue); - }, - 291 => static function ($self, $stackPos) { - $self->semValue = new Node\Param(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])), null, $self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-4)], $self->semStack[$stackPos-(6-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-1)]); - }, - 292 => null, - 293 => static function ($self, $stackPos) { - $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 294 => static function ($self, $stackPos) { - $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 295 => null, - 296 => null, - 297 => static function ($self, $stackPos) { - $self->semValue = new Node\Name('static', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 298 => static function ($self, $stackPos) { - $self->semValue = $self->handleBuiltinTypes($self->semStack[$stackPos-(1-1)]); - }, - 299 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier('array', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 300 => static function ($self, $stackPos) { - $self->semValue = new Node\Identifier('callable', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 301 => null, - 302 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 303 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 304 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 305 => null, - 306 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 307 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 308 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 309 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 310 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 311 => static function ($self, $stackPos) { - $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 312 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 313 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 314 => static function ($self, $stackPos) { - $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 315 => null, - 316 => static function ($self, $stackPos) { - $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 317 => static function ($self, $stackPos) { - $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 318 => null, - 319 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 320 => null, - 321 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 322 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(2-2)]; - }, - 323 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 324 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 325 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-2)]; - }, - 326 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-2)]); - }, - 327 => static function ($self, $stackPos) { - $self->semValue = new Node\VariadicPlaceholder($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 328 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 329 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 330 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos-(1-1)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 331 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], true, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 332 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], false, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 333 => static function ($self, $stackPos) { - $self->semValue = new Node\Arg($self->semStack[$stackPos-(3-3)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(3-1)]); - }, - 334 => null, - 335 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 336 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 337 => null, - 338 => null, - 339 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 340 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 341 => static function ($self, $stackPos) { - $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 342 => static function ($self, $stackPos) { - $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 343 => static function ($self, $stackPos) { - if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; } else { $self->semValue = $self->semStack[$stackPos-(2-1)]; } - }, - 344 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 345 => static function ($self, $stackPos) { - $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; - if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 346 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Property($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-1)]); - }, - 347 => static function ($self, $stackPos) { - $self->semValue = new Stmt\Property($self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-1)], $self->semStack[$stackPos-(7-6)]); - $self->checkPropertyHookList($self->semStack[$stackPos-(7-6)], $stackPos-(7-5)); - }, - 348 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-1)]); - $self->checkClassConst($self->semValue, $stackPos-(5-2)); - }, - 349 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-1)], $self->semStack[$stackPos-(6-4)]); - $self->checkClassConst($self->semValue, $stackPos-(6-2)); - }, - 350 => static function ($self, $stackPos) { - $self->semValue = new Stmt\ClassMethod($self->semStack[$stackPos-(10-5)], ['type' => $self->semStack[$stackPos-(10-2)], 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-7)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); - $self->checkClassMethod($self->semValue, $stackPos-(10-2)); - }, - 351 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUse($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 352 => static function ($self, $stackPos) { - $self->semValue = new Stmt\EnumCase($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 353 => static function ($self, $stackPos) { - $self->semValue = null; /* will be skipped */ - }, - 354 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 355 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 356 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 357 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 358 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 359 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 360 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 361 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 362 => static function ($self, $stackPos) { - $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 363 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); - }, - 364 => null, - 365 => static function ($self, $stackPos) { - $self->semValue = array(null, $self->semStack[$stackPos-(1-1)]); - }, - 366 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 367 => null, - 368 => null, - 369 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 370 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 371 => null, - 372 => null, - 373 => static function ($self, $stackPos) { - $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; - }, - 374 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC; - }, - 375 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED; - }, - 376 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE; - }, - 377 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PUBLIC_SET; - }, - 378 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PROTECTED_SET; - }, - 379 => static function ($self, $stackPos) { - $self->semValue = Modifiers::PRIVATE_SET; - }, - 380 => static function ($self, $stackPos) { - $self->semValue = Modifiers::STATIC; - }, - 381 => static function ($self, $stackPos) { - $self->semValue = Modifiers::ABSTRACT; - }, - 382 => static function ($self, $stackPos) { - $self->semValue = Modifiers::FINAL; - }, - 383 => static function ($self, $stackPos) { - $self->semValue = Modifiers::READONLY; - }, - 384 => null, - 385 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 386 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 387 => static function ($self, $stackPos) { - $self->semValue = new Node\VarLikeIdentifier(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 388 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 389 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 390 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 391 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 392 => static function ($self, $stackPos) { - $self->semValue = []; - }, - 393 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; $self->checkPropertyHookList($self->semStack[$stackPos-(3-2)], $stackPos-(3-1)); - }, - 394 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-5)], ['flags' => $self->semStack[$stackPos-(5-2)], 'byRef' => $self->semStack[$stackPos-(5-3)], 'params' => [], 'attrGroups' => $self->semStack[$stackPos-(5-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - $self->checkPropertyHook($self->semValue, null); - }, - 395 => static function ($self, $stackPos) { - $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-8)], ['flags' => $self->semStack[$stackPos-(8-2)], 'byRef' => $self->semStack[$stackPos-(8-3)], 'params' => $self->semStack[$stackPos-(8-6)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - $self->checkPropertyHook($self->semValue, $stackPos-(8-5)); - }, - 396 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 397 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 398 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 399 => static function ($self, $stackPos) { - $self->semValue = 0; - }, - 400 => static function ($self, $stackPos) { - $self->checkPropertyHookModifiers($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; - }, - 401 => null, - 402 => null, - 403 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 404 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 405 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 406 => null, - 407 => null, - 408 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 409 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->fixupArrayDestructuring($self->semStack[$stackPos-(3-1)]), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 410 => static function ($self, $stackPos) { - $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 411 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 412 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - if (!$self->phpVersion->allowsAssignNewByReference()) { - $self->emitError(new Error('Cannot assign new by reference', $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]))); - } - - }, - 413 => null, - 414 => null, - 415 => static function ($self, $stackPos) { - $self->semValue = new Expr\Clone_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 416 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 417 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 418 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 419 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 420 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 421 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 422 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 423 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 424 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 425 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 426 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 427 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 428 => static function ($self, $stackPos) { - $self->semValue = new Expr\AssignOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 429 => static function ($self, $stackPos) { - $self->semValue = new Expr\PostInc($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 430 => static function ($self, $stackPos) { - $self->semValue = new Expr\PreInc($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 431 => static function ($self, $stackPos) { - $self->semValue = new Expr\PostDec($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 432 => static function ($self, $stackPos) { - $self->semValue = new Expr\PreDec($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 433 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BooleanOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 434 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BooleanAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 435 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 436 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 437 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\LogicalXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 438 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 439 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 440 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 441 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 442 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 443 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 444 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 445 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 446 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 447 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 448 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 449 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 450 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 451 => static function ($self, $stackPos) { - $self->semValue = new Expr\UnaryPlus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 452 => static function ($self, $stackPos) { - $self->semValue = new Expr\UnaryMinus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 453 => static function ($self, $stackPos) { - $self->semValue = new Expr\BooleanNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 454 => static function ($self, $stackPos) { - $self->semValue = new Expr\BitwiseNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 455 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Identical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 456 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\NotIdentical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 457 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Equal($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 458 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\NotEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 459 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Spaceship($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 460 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Smaller($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 461 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\SmallerOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 462 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Greater($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 463 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\GreaterOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 464 => static function ($self, $stackPos) { - $self->semValue = new Expr\Instanceof_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 465 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 466 => static function ($self, $stackPos) { - $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 467 => static function ($self, $stackPos) { - $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(4-1)], null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 468 => static function ($self, $stackPos) { - $self->semValue = new Expr\BinaryOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 469 => static function ($self, $stackPos) { - $self->semValue = new Expr\Isset_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 470 => static function ($self, $stackPos) { - $self->semValue = new Expr\Empty_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 471 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 472 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 473 => static function ($self, $stackPos) { - $self->semValue = new Expr\Eval_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 474 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 475 => static function ($self, $stackPos) { - $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 476 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Int_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 477 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]); - $attrs['kind'] = $self->getFloatCastKind($self->semStack[$stackPos-(2-1)]); - $self->semValue = new Expr\Cast\Double($self->semStack[$stackPos-(2-2)], $attrs); - }, - 478 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\String_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 479 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Array_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 480 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Object_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 481 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Bool_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 482 => static function ($self, $stackPos) { - $self->semValue = new Expr\Cast\Unset_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 483 => static function ($self, $stackPos) { - $self->semValue = $self->createExitExpr($self->semStack[$stackPos-(2-1)], $stackPos-(2-1), $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 484 => static function ($self, $stackPos) { - $self->semValue = new Expr\ErrorSuppress($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 485 => null, - 486 => static function ($self, $stackPos) { - $self->semValue = new Expr\ShellExec($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 487 => static function ($self, $stackPos) { - $self->semValue = new Expr\Print_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 488 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_(null, null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 489 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(2-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 490 => static function ($self, $stackPos) { - $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 491 => static function ($self, $stackPos) { - $self->semValue = new Expr\YieldFrom($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 492 => static function ($self, $stackPos) { - $self->semValue = new Expr\Throw_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 493 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'returnType' => $self->semStack[$stackPos-(8-6)], 'expr' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - }, - 494 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 495 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'uses' => $self->semStack[$stackPos-(8-6)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); - }, - 496 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 497 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 498 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'returnType' => $self->semStack[$stackPos-(10-8)], 'expr' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); - }, - 499 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); - }, - 500 => static function ($self, $stackPos) { - $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'uses' => $self->semStack[$stackPos-(10-8)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); - }, - 501 => static function ($self, $stackPos) { - $self->semValue = array(new Stmt\Class_(null, ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])), $self->semStack[$stackPos-(8-3)]); - $self->checkClass($self->semValue[0], -1); - }, - 502 => static function ($self, $stackPos) { - $self->semValue = new Expr\New_($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 503 => static function ($self, $stackPos) { - list($class, $ctorArgs) = $self->semStack[$stackPos-(2-2)]; $self->semValue = new Expr\New_($class, $ctorArgs, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 504 => static function ($self, $stackPos) { - $self->semValue = new Expr\New_($self->semStack[$stackPos-(2-2)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 505 => null, - 506 => null, - 507 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 508 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(4-3)]; - }, - 509 => null, - 510 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 511 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 512 => static function ($self, $stackPos) { - $self->semValue = new Node\ClosureUse($self->semStack[$stackPos-(2-2)], $self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 513 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 514 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 515 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 516 => static function ($self, $stackPos) { - $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 517 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 518 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 519 => null, - 520 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 521 => static function ($self, $stackPos) { - $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 522 => static function ($self, $stackPos) { - $self->semValue = new Name\FullyQualified(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 523 => static function ($self, $stackPos) { - $self->semValue = new Name\Relative(substr($self->semStack[$stackPos-(1-1)], 10), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 524 => null, - 525 => null, - 526 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 527 => static function ($self, $stackPos) { - $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; - }, - 528 => null, - 529 => null, - 530 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 531 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); foreach ($self->semValue as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } }; - }, - 532 => static function ($self, $stackPos) { - foreach ($self->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = $self->semStack[$stackPos-(1-1)]; - }, - 533 => static function ($self, $stackPos) { - $self->semValue = array(); - }, - 534 => null, - 535 => static function ($self, $stackPos) { - $self->semValue = new Expr\ConstFetch($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 536 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Line($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 537 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\File($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 538 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Dir($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 539 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Class_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 540 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Trait_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 541 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Method($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 542 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Function_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 543 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Namespace_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 544 => static function ($self, $stackPos) { - $self->semValue = new Scalar\MagicConst\Property($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 545 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 546 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); - }, - 547 => static function ($self, $stackPos) { - $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)])), $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; - }, - 548 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_SHORT; - $self->semValue = new Expr\Array_($self->semStack[$stackPos-(3-2)], $attrs); - }, - 549 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_LONG; - $self->semValue = new Expr\Array_($self->semStack[$stackPos-(4-3)], $attrs); - $self->createdArrays->attach($self->semValue); - }, - 550 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->createdArrays->attach($self->semValue); - }, - 551 => static function ($self, $stackPos) { - $self->semValue = Scalar\String_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->supportsUnicodeEscapes()); - }, - 552 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; - foreach ($self->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = new Scalar\InterpolatedString($self->semStack[$stackPos-(3-2)], $attrs); - }, - 553 => static function ($self, $stackPos) { - $self->semValue = $self->parseLNumber($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->allowsInvalidOctals()); - }, - 554 => static function ($self, $stackPos) { - $self->semValue = Scalar\Float_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 555 => null, - 556 => null, - 557 => null, - 558 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true); - }, - 559 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos-(2-1)], '', $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(2-2)], $self->tokenEndStack[$stackPos-(2-2)]), true); - }, - 560 => static function ($self, $stackPos) { - $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true); - }, - 561 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 562 => null, - 563 => null, - 564 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 565 => null, - 566 => null, - 567 => null, - 568 => null, - 569 => null, - 570 => null, - 571 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 572 => null, - 573 => null, - 574 => null, - 575 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 576 => null, - 577 => static function ($self, $stackPos) { - $self->semValue = new Expr\MethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 578 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafeMethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 579 => static function ($self, $stackPos) { - $self->semValue = null; - }, - 580 => null, - 581 => null, - 582 => null, - 583 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 584 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 585 => null, - 586 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 587 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 588 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])), $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; - }, - 589 => static function ($self, $stackPos) { - $var = $self->semStack[$stackPos-(1-1)]->name; $self->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])) : $var; - }, - 590 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 591 => null, - 592 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 593 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 594 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 595 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 596 => static function ($self, $stackPos) { - $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 597 => null, - 598 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 599 => null, - 600 => null, - 601 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 602 => null, - 603 => static function ($self, $stackPos) { - $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; - }, - 604 => static function ($self, $stackPos) { - $self->semValue = new Expr\List_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('kind', Expr\List_::KIND_LIST); - $self->postprocessList($self->semValue); - }, - 605 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(1-1)]; $end = count($self->semValue)-1; if ($self->semValue[$end]->value instanceof Expr\Error) array_pop($self->semValue); - }, - 606 => null, - 607 => static function ($self, $stackPos) { - /* do nothing -- prevent default action of $$=$self->semStack[$1]. See $551. */ - }, - 608 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; - }, - 609 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 610 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 611 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 612 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 613 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 614 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-1)], true, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 615 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 616 => static function ($self, $stackPos) { - $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), true); - }, - 617 => static function ($self, $stackPos) { - /* Create an Error node now to remember the position. We'll later either report an error, - or convert this into a null element, depending on whether this is a creation or destructuring context. */ - $attrs = $self->createEmptyElemAttributes($self->tokenPos); - $self->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, false, $attrs); - }, - 618 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 619 => static function ($self, $stackPos) { - $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; - }, - 620 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(1-1)]); - }, - 621 => static function ($self, $stackPos) { - $self->semValue = array($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)]); - }, - 622 => static function ($self, $stackPos) { - $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]); $attrs['rawValue'] = $self->semStack[$stackPos-(1-1)]; $self->semValue = new Node\InterpolatedStringPart($self->semStack[$stackPos-(1-1)], $attrs); - }, - 623 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 624 => null, - 625 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); - }, - 626 => static function ($self, $stackPos) { - $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 627 => static function ($self, $stackPos) { - $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 628 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 629 => static function ($self, $stackPos) { - $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); - }, - 630 => static function ($self, $stackPos) { - $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); - }, - 631 => static function ($self, $stackPos) { - $self->semValue = $self->semStack[$stackPos-(3-2)]; - }, - 632 => static function ($self, $stackPos) { - $self->semValue = new Scalar\String_($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 633 => static function ($self, $stackPos) { - $self->semValue = $self->parseNumString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); - }, - 634 => static function ($self, $stackPos) { - $self->semValue = $self->parseNumString('-' . $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); - }, - 635 => null, - ]; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php deleted file mode 100644 index 3d1e4ee..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/ParserAbstract.php +++ /dev/null @@ -1,1266 +0,0 @@ - Map of PHP token IDs to drop */ - protected array $dropTokens; - /** @var int[] Map of external symbols (static::T_*) to internal symbols */ - protected array $tokenToSymbol; - /** @var string[] Map of symbols to their names */ - protected array $symbolToName; - /** @var array Names of the production rules (only necessary for debugging) */ - protected array $productions; - - /** @var int[] Map of states to a displacement into the $action table. The corresponding action for this - * state/symbol pair is $action[$actionBase[$state] + $symbol]. If $actionBase[$state] is 0, the - * action is defaulted, i.e. $actionDefault[$state] should be used instead. */ - protected array $actionBase; - /** @var int[] Table of actions. Indexed according to $actionBase comment. */ - protected array $action; - /** @var int[] Table indexed analogously to $action. If $actionCheck[$actionBase[$state] + $symbol] != $symbol - * then the action is defaulted, i.e. $actionDefault[$state] should be used instead. */ - protected array $actionCheck; - /** @var int[] Map of states to their default action */ - protected array $actionDefault; - /** @var callable[] Semantic action callbacks */ - protected array $reduceCallbacks; - - /** @var int[] Map of non-terminals to a displacement into the $goto table. The corresponding goto state for this - * non-terminal/state pair is $goto[$gotoBase[$nonTerminal] + $state] (unless defaulted) */ - protected array $gotoBase; - /** @var int[] Table of states to goto after reduction. Indexed according to $gotoBase comment. */ - protected array $goto; - /** @var int[] Table indexed analogously to $goto. If $gotoCheck[$gotoBase[$nonTerminal] + $state] != $nonTerminal - * then the goto state is defaulted, i.e. $gotoDefault[$nonTerminal] should be used. */ - protected array $gotoCheck; - /** @var int[] Map of non-terminals to the default state to goto after their reduction */ - protected array $gotoDefault; - - /** @var int[] Map of rules to the non-terminal on their left-hand side, i.e. the non-terminal to use for - * determining the state to goto after reduction. */ - protected array $ruleToNonTerminal; - /** @var int[] Map of rules to the length of their right-hand side, which is the number of elements that have to - * be popped from the stack(s) on reduction. */ - protected array $ruleToLength; - - /* - * The following members are part of the parser state: - */ - - /** @var mixed Temporary value containing the result of last semantic action (reduction) */ - protected $semValue; - /** @var mixed[] Semantic value stack (contains values of tokens and semantic action results) */ - protected array $semStack; - /** @var int[] Token start position stack */ - protected array $tokenStartStack; - /** @var int[] Token end position stack */ - protected array $tokenEndStack; - - /** @var ErrorHandler Error handler */ - protected ErrorHandler $errorHandler; - /** @var int Error state, used to avoid error floods */ - protected int $errorState; - - /** @var \SplObjectStorage|null Array nodes created during parsing, for postprocessing of empty elements. */ - protected ?\SplObjectStorage $createdArrays; - - /** @var Token[] Tokens for the current parse */ - protected array $tokens; - /** @var int Current position in token array */ - protected int $tokenPos; - - /** - * Initialize $reduceCallbacks map. - */ - abstract protected function initReduceCallbacks(): void; - - /** - * Creates a parser instance. - * - * Options: - * * phpVersion: ?PhpVersion, - * - * @param Lexer $lexer A lexer - * @param PhpVersion $phpVersion PHP version to target, defaults to latest supported. This - * option is best-effort: Even if specified, parsing will generally assume the latest - * supported version and only adjust behavior in minor ways, for example by omitting - * errors in older versions and interpreting type hints as a name or identifier depending - * on version. - */ - public function __construct(Lexer $lexer, ?PhpVersion $phpVersion = null) { - $this->lexer = $lexer; - $this->phpVersion = $phpVersion ?? PhpVersion::getNewestSupported(); - - $this->initReduceCallbacks(); - $this->phpTokenToSymbol = $this->createTokenMap(); - $this->dropTokens = array_fill_keys( - [\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], true - ); - } - - /** - * Parses PHP code into a node tree. - * - * If a non-throwing error handler is used, the parser will continue parsing after an error - * occurred and attempt to build a partial AST. - * - * @param string $code The source code to parse - * @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults - * to ErrorHandler\Throwing. - * - * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and - * the parser was unable to recover from an error). - */ - public function parse(string $code, ?ErrorHandler $errorHandler = null): ?array { - $this->errorHandler = $errorHandler ?: new ErrorHandler\Throwing(); - $this->createdArrays = new \SplObjectStorage(); - - $this->tokens = $this->lexer->tokenize($code, $this->errorHandler); - $result = $this->doParse(); - - // Report errors for any empty elements used inside arrays. This is delayed until after the main parse, - // because we don't know a priori whether a given array expression will be used in a destructuring context - // or not. - foreach ($this->createdArrays as $node) { - foreach ($node->items as $item) { - if ($item->value instanceof Expr\Error) { - $this->errorHandler->handleError( - new Error('Cannot use empty array elements in arrays', $item->getAttributes())); - } - } - } - - // Clear out some of the interior state, so we don't hold onto unnecessary - // memory between uses of the parser - $this->tokenStartStack = []; - $this->tokenEndStack = []; - $this->semStack = []; - $this->semValue = null; - $this->createdArrays = null; - - if ($result !== null) { - $traverser = new NodeTraverser(new CommentAnnotatingVisitor($this->tokens)); - $traverser->traverse($result); - } - - return $result; - } - - public function getTokens(): array { - return $this->tokens; - } - - /** @return Stmt[]|null */ - protected function doParse(): ?array { - // We start off with no lookahead-token - $symbol = self::SYMBOL_NONE; - $tokenValue = null; - $this->tokenPos = -1; - - // Keep stack of start and end attributes - $this->tokenStartStack = []; - $this->tokenEndStack = [0]; - - // Start off in the initial state and keep a stack of previous states - $state = 0; - $stateStack = [$state]; - - // Semantic value stack (contains values of tokens and semantic action results) - $this->semStack = []; - - // Current position in the stack(s) - $stackPos = 0; - - $this->errorState = 0; - - for (;;) { - //$this->traceNewState($state, $symbol); - - if ($this->actionBase[$state] === 0) { - $rule = $this->actionDefault[$state]; - } else { - if ($symbol === self::SYMBOL_NONE) { - do { - $token = $this->tokens[++$this->tokenPos]; - $tokenId = $token->id; - } while (isset($this->dropTokens[$tokenId])); - - // Map the lexer token id to the internally used symbols. - $tokenValue = $token->text; - if (!isset($this->phpTokenToSymbol[$tokenId])) { - throw new \RangeException(sprintf( - 'The lexer returned an invalid token (id=%d, value=%s)', - $tokenId, $tokenValue - )); - } - $symbol = $this->phpTokenToSymbol[$tokenId]; - - //$this->traceRead($symbol); - } - - $idx = $this->actionBase[$state] + $symbol; - if ((($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol) - || ($state < $this->YY2TBLSTATE - && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0 - && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol)) - && ($action = $this->action[$idx]) !== $this->defaultAction) { - /* - * >= numNonLeafStates: shift and reduce - * > 0: shift - * = 0: accept - * < 0: reduce - * = -YYUNEXPECTED: error - */ - if ($action > 0) { - /* shift */ - //$this->traceShift($symbol); - - ++$stackPos; - $stateStack[$stackPos] = $state = $action; - $this->semStack[$stackPos] = $tokenValue; - $this->tokenStartStack[$stackPos] = $this->tokenPos; - $this->tokenEndStack[$stackPos] = $this->tokenPos; - $symbol = self::SYMBOL_NONE; - - if ($this->errorState) { - --$this->errorState; - } - - if ($action < $this->numNonLeafStates) { - continue; - } - - /* $yyn >= numNonLeafStates means shift-and-reduce */ - $rule = $action - $this->numNonLeafStates; - } else { - $rule = -$action; - } - } else { - $rule = $this->actionDefault[$state]; - } - } - - for (;;) { - if ($rule === 0) { - /* accept */ - //$this->traceAccept(); - return $this->semValue; - } - if ($rule !== $this->unexpectedTokenRule) { - /* reduce */ - //$this->traceReduce($rule); - - $ruleLength = $this->ruleToLength[$rule]; - try { - $callback = $this->reduceCallbacks[$rule]; - if ($callback !== null) { - $callback($this, $stackPos); - } elseif ($ruleLength > 0) { - $this->semValue = $this->semStack[$stackPos - $ruleLength + 1]; - } - } catch (Error $e) { - if (-1 === $e->getStartLine()) { - $e->setStartLine($this->tokens[$this->tokenPos]->line); - } - - $this->emitError($e); - // Can't recover from this type of error - return null; - } - - /* Goto - shift nonterminal */ - $lastTokenEnd = $this->tokenEndStack[$stackPos]; - $stackPos -= $ruleLength; - $nonTerminal = $this->ruleToNonTerminal[$rule]; - $idx = $this->gotoBase[$nonTerminal] + $stateStack[$stackPos]; - if ($idx >= 0 && $idx < $this->gotoTableSize && $this->gotoCheck[$idx] === $nonTerminal) { - $state = $this->goto[$idx]; - } else { - $state = $this->gotoDefault[$nonTerminal]; - } - - ++$stackPos; - $stateStack[$stackPos] = $state; - $this->semStack[$stackPos] = $this->semValue; - $this->tokenEndStack[$stackPos] = $lastTokenEnd; - if ($ruleLength === 0) { - // Empty productions use the start attributes of the lookahead token. - $this->tokenStartStack[$stackPos] = $this->tokenPos; - } - } else { - /* error */ - switch ($this->errorState) { - case 0: - $msg = $this->getErrorMessage($symbol, $state); - $this->emitError(new Error($msg, $this->getAttributesForToken($this->tokenPos))); - // Break missing intentionally - // no break - case 1: - case 2: - $this->errorState = 3; - - // Pop until error-expecting state uncovered - while (!( - (($idx = $this->actionBase[$state] + $this->errorSymbol) >= 0 - && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol) - || ($state < $this->YY2TBLSTATE - && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $this->errorSymbol) >= 0 - && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol) - ) || ($action = $this->action[$idx]) === $this->defaultAction) { // Not totally sure about this - if ($stackPos <= 0) { - // Could not recover from error - return null; - } - $state = $stateStack[--$stackPos]; - //$this->tracePop($state); - } - - //$this->traceShift($this->errorSymbol); - ++$stackPos; - $stateStack[$stackPos] = $state = $action; - - // We treat the error symbol as being empty, so we reset the end attributes - // to the end attributes of the last non-error symbol - $this->tokenStartStack[$stackPos] = $this->tokenPos; - $this->tokenEndStack[$stackPos] = $this->tokenEndStack[$stackPos - 1]; - break; - - case 3: - if ($symbol === 0) { - // Reached EOF without recovering from error - return null; - } - - //$this->traceDiscard($symbol); - $symbol = self::SYMBOL_NONE; - break 2; - } - } - - if ($state < $this->numNonLeafStates) { - break; - } - - /* >= numNonLeafStates means shift-and-reduce */ - $rule = $state - $this->numNonLeafStates; - } - } - - throw new \RuntimeException('Reached end of parser loop'); - } - - protected function emitError(Error $error): void { - $this->errorHandler->handleError($error); - } - - /** - * Format error message including expected tokens. - * - * @param int $symbol Unexpected symbol - * @param int $state State at time of error - * - * @return string Formatted error message - */ - protected function getErrorMessage(int $symbol, int $state): string { - $expectedString = ''; - if ($expected = $this->getExpectedTokens($state)) { - $expectedString = ', expecting ' . implode(' or ', $expected); - } - - return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString; - } - - /** - * Get limited number of expected tokens in given state. - * - * @param int $state State - * - * @return string[] Expected tokens. If too many, an empty array is returned. - */ - protected function getExpectedTokens(int $state): array { - $expected = []; - - $base = $this->actionBase[$state]; - foreach ($this->symbolToName as $symbol => $name) { - $idx = $base + $symbol; - if ($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol - || $state < $this->YY2TBLSTATE - && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0 - && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol - ) { - if ($this->action[$idx] !== $this->unexpectedTokenRule - && $this->action[$idx] !== $this->defaultAction - && $symbol !== $this->errorSymbol - ) { - if (count($expected) === 4) { - /* Too many expected tokens */ - return []; - } - - $expected[] = $name; - } - } - } - - return $expected; - } - - /** - * Get attributes for a node with the given start and end token positions. - * - * @param int $tokenStartPos Token position the node starts at - * @param int $tokenEndPos Token position the node ends at - * @return array Attributes - */ - protected function getAttributes(int $tokenStartPos, int $tokenEndPos): array { - $startToken = $this->tokens[$tokenStartPos]; - $afterEndToken = $this->tokens[$tokenEndPos + 1]; - return [ - 'startLine' => $startToken->line, - 'startTokenPos' => $tokenStartPos, - 'startFilePos' => $startToken->pos, - 'endLine' => $afterEndToken->line, - 'endTokenPos' => $tokenEndPos, - 'endFilePos' => $afterEndToken->pos - 1, - ]; - } - - /** - * Get attributes for a single token at the given token position. - * - * @return array Attributes - */ - protected function getAttributesForToken(int $tokenPos): array { - if ($tokenPos < \count($this->tokens) - 1) { - return $this->getAttributes($tokenPos, $tokenPos); - } - - // Get attributes for the sentinel token. - $token = $this->tokens[$tokenPos]; - return [ - 'startLine' => $token->line, - 'startTokenPos' => $tokenPos, - 'startFilePos' => $token->pos, - 'endLine' => $token->line, - 'endTokenPos' => $tokenPos, - 'endFilePos' => $token->pos, - ]; - } - - /* - * Tracing functions used for debugging the parser. - */ - - /* - protected function traceNewState($state, $symbol): void { - echo '% State ' . $state - . ', Lookahead ' . ($symbol == self::SYMBOL_NONE ? '--none--' : $this->symbolToName[$symbol]) . "\n"; - } - - protected function traceRead($symbol): void { - echo '% Reading ' . $this->symbolToName[$symbol] . "\n"; - } - - protected function traceShift($symbol): void { - echo '% Shift ' . $this->symbolToName[$symbol] . "\n"; - } - - protected function traceAccept(): void { - echo "% Accepted.\n"; - } - - protected function traceReduce($n): void { - echo '% Reduce by (' . $n . ') ' . $this->productions[$n] . "\n"; - } - - protected function tracePop($state): void { - echo '% Recovering, uncovered state ' . $state . "\n"; - } - - protected function traceDiscard($symbol): void { - echo '% Discard ' . $this->symbolToName[$symbol] . "\n"; - } - */ - - /* - * Helper functions invoked by semantic actions - */ - - /** - * Moves statements of semicolon-style namespaces into $ns->stmts and checks various error conditions. - * - * @param Node\Stmt[] $stmts - * @return Node\Stmt[] - */ - protected function handleNamespaces(array $stmts): array { - $hasErrored = false; - $style = $this->getNamespacingStyle($stmts); - if (null === $style) { - // not namespaced, nothing to do - return $stmts; - } - if ('brace' === $style) { - // For braced namespaces we only have to check that there are no invalid statements between the namespaces - $afterFirstNamespace = false; - foreach ($stmts as $stmt) { - if ($stmt instanceof Node\Stmt\Namespace_) { - $afterFirstNamespace = true; - } elseif (!$stmt instanceof Node\Stmt\HaltCompiler - && !$stmt instanceof Node\Stmt\Nop - && $afterFirstNamespace && !$hasErrored) { - $this->emitError(new Error( - 'No code may exist outside of namespace {}', $stmt->getAttributes())); - $hasErrored = true; // Avoid one error for every statement - } - } - return $stmts; - } else { - // For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts - $resultStmts = []; - $targetStmts = &$resultStmts; - $lastNs = null; - foreach ($stmts as $stmt) { - if ($stmt instanceof Node\Stmt\Namespace_) { - if ($lastNs !== null) { - $this->fixupNamespaceAttributes($lastNs); - } - if ($stmt->stmts === null) { - $stmt->stmts = []; - $targetStmts = &$stmt->stmts; - $resultStmts[] = $stmt; - } else { - // This handles the invalid case of mixed style namespaces - $resultStmts[] = $stmt; - $targetStmts = &$resultStmts; - } - $lastNs = $stmt; - } elseif ($stmt instanceof Node\Stmt\HaltCompiler) { - // __halt_compiler() is not moved into the namespace - $resultStmts[] = $stmt; - } else { - $targetStmts[] = $stmt; - } - } - if ($lastNs !== null) { - $this->fixupNamespaceAttributes($lastNs); - } - return $resultStmts; - } - } - - private function fixupNamespaceAttributes(Node\Stmt\Namespace_ $stmt): void { - // We moved the statements into the namespace node, as such the end of the namespace node - // needs to be extended to the end of the statements. - if (empty($stmt->stmts)) { - return; - } - - // We only move the builtin end attributes here. This is the best we can do with the - // knowledge we have. - $endAttributes = ['endLine', 'endFilePos', 'endTokenPos']; - $lastStmt = $stmt->stmts[count($stmt->stmts) - 1]; - foreach ($endAttributes as $endAttribute) { - if ($lastStmt->hasAttribute($endAttribute)) { - $stmt->setAttribute($endAttribute, $lastStmt->getAttribute($endAttribute)); - } - } - } - - /** @return array */ - private function getNamespaceErrorAttributes(Namespace_ $node): array { - $attrs = $node->getAttributes(); - // Adjust end attributes to only cover the "namespace" keyword, not the whole namespace. - if (isset($attrs['startLine'])) { - $attrs['endLine'] = $attrs['startLine']; - } - if (isset($attrs['startTokenPos'])) { - $attrs['endTokenPos'] = $attrs['startTokenPos']; - } - if (isset($attrs['startFilePos'])) { - $attrs['endFilePos'] = $attrs['startFilePos'] + \strlen('namespace') - 1; - } - return $attrs; - } - - /** - * Determine namespacing style (semicolon or brace) - * - * @param Node[] $stmts Top-level statements. - * - * @return null|string One of "semicolon", "brace" or null (no namespaces) - */ - private function getNamespacingStyle(array $stmts): ?string { - $style = null; - $hasNotAllowedStmts = false; - foreach ($stmts as $i => $stmt) { - if ($stmt instanceof Node\Stmt\Namespace_) { - $currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace'; - if (null === $style) { - $style = $currentStyle; - if ($hasNotAllowedStmts) { - $this->emitError(new Error( - 'Namespace declaration statement has to be the very first statement in the script', - $this->getNamespaceErrorAttributes($stmt) - )); - } - } elseif ($style !== $currentStyle) { - $this->emitError(new Error( - 'Cannot mix bracketed namespace declarations with unbracketed namespace declarations', - $this->getNamespaceErrorAttributes($stmt) - )); - // Treat like semicolon style for namespace normalization - return 'semicolon'; - } - continue; - } - - /* declare(), __halt_compiler() and nops can be used before a namespace declaration */ - if ($stmt instanceof Node\Stmt\Declare_ - || $stmt instanceof Node\Stmt\HaltCompiler - || $stmt instanceof Node\Stmt\Nop) { - continue; - } - - /* There may be a hashbang line at the very start of the file */ - if ($i === 0 && $stmt instanceof Node\Stmt\InlineHTML && preg_match('/\A#!.*\r?\n\z/', $stmt->value)) { - continue; - } - - /* Everything else if forbidden before namespace declarations */ - $hasNotAllowedStmts = true; - } - return $style; - } - - /** @return Name|Identifier */ - protected function handleBuiltinTypes(Name $name) { - if (!$name->isUnqualified()) { - return $name; - } - - $lowerName = $name->toLowerString(); - if (!$this->phpVersion->supportsBuiltinType($lowerName)) { - return $name; - } - - return new Node\Identifier($lowerName, $name->getAttributes()); - } - - /** - * Get combined start and end attributes at a stack location - * - * @param int $stackPos Stack location - * - * @return array Combined start and end attributes - */ - protected function getAttributesAt(int $stackPos): array { - return $this->getAttributes($this->tokenStartStack[$stackPos], $this->tokenEndStack[$stackPos]); - } - - protected function getFloatCastKind(string $cast): int { - $cast = strtolower($cast); - if (strpos($cast, 'float') !== false) { - return Double::KIND_FLOAT; - } - - if (strpos($cast, 'real') !== false) { - return Double::KIND_REAL; - } - - return Double::KIND_DOUBLE; - } - - /** @param array $attributes */ - protected function parseLNumber(string $str, array $attributes, bool $allowInvalidOctal = false): Int_ { - try { - return Int_::fromString($str, $attributes, $allowInvalidOctal); - } catch (Error $error) { - $this->emitError($error); - // Use dummy value - return new Int_(0, $attributes); - } - } - - /** - * Parse a T_NUM_STRING token into either an integer or string node. - * - * @param string $str Number string - * @param array $attributes Attributes - * - * @return Int_|String_ Integer or string node. - */ - protected function parseNumString(string $str, array $attributes) { - if (!preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) { - return new String_($str, $attributes); - } - - $num = +$str; - if (!is_int($num)) { - return new String_($str, $attributes); - } - - return new Int_($num, $attributes); - } - - /** @param array $attributes */ - protected function stripIndentation( - string $string, int $indentLen, string $indentChar, - bool $newlineAtStart, bool $newlineAtEnd, array $attributes - ): string { - if ($indentLen === 0) { - return $string; - } - - $start = $newlineAtStart ? '(?:(?<=\n)|\A)' : '(?<=\n)'; - $end = $newlineAtEnd ? '(?:(?=[\r\n])|\z)' : '(?=[\r\n])'; - $regex = '/' . $start . '([ \t]*)(' . $end . ')?/'; - return preg_replace_callback( - $regex, - function ($matches) use ($indentLen, $indentChar, $attributes) { - $prefix = substr($matches[1], 0, $indentLen); - if (false !== strpos($prefix, $indentChar === " " ? "\t" : " ")) { - $this->emitError(new Error( - 'Invalid indentation - tabs and spaces cannot be mixed', $attributes - )); - } elseif (strlen($prefix) < $indentLen && !isset($matches[2])) { - $this->emitError(new Error( - 'Invalid body indentation level ' . - '(expecting an indentation level of at least ' . $indentLen . ')', - $attributes - )); - } - return substr($matches[0], strlen($prefix)); - }, - $string - ); - } - - /** - * @param string|(Expr|InterpolatedStringPart)[] $contents - * @param array $attributes - * @param array $endTokenAttributes - */ - protected function parseDocString( - string $startToken, $contents, string $endToken, - array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape - ): Expr { - $kind = strpos($startToken, "'") === false - ? String_::KIND_HEREDOC : String_::KIND_NOWDOC; - - $regex = '/\A[bB]?<<<[ \t]*[\'"]?([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)[\'"]?(?:\r\n|\n|\r)\z/'; - $result = preg_match($regex, $startToken, $matches); - assert($result === 1); - $label = $matches[1]; - - $result = preg_match('/\A[ \t]*/', $endToken, $matches); - assert($result === 1); - $indentation = $matches[0]; - - $attributes['kind'] = $kind; - $attributes['docLabel'] = $label; - $attributes['docIndentation'] = $indentation; - - $indentHasSpaces = false !== strpos($indentation, " "); - $indentHasTabs = false !== strpos($indentation, "\t"); - if ($indentHasSpaces && $indentHasTabs) { - $this->emitError(new Error( - 'Invalid indentation - tabs and spaces cannot be mixed', - $endTokenAttributes - )); - - // Proceed processing as if this doc string is not indented - $indentation = ''; - } - - $indentLen = \strlen($indentation); - $indentChar = $indentHasSpaces ? " " : "\t"; - - if (\is_string($contents)) { - if ($contents === '') { - $attributes['rawValue'] = $contents; - return new String_('', $attributes); - } - - $contents = $this->stripIndentation( - $contents, $indentLen, $indentChar, true, true, $attributes - ); - $contents = preg_replace('~(\r\n|\n|\r)\z~', '', $contents); - $attributes['rawValue'] = $contents; - - if ($kind === String_::KIND_HEREDOC) { - $contents = String_::parseEscapeSequences($contents, null, $parseUnicodeEscape); - } - - return new String_($contents, $attributes); - } else { - assert(count($contents) > 0); - if (!$contents[0] instanceof Node\InterpolatedStringPart) { - // If there is no leading encapsed string part, pretend there is an empty one - $this->stripIndentation( - '', $indentLen, $indentChar, true, false, $contents[0]->getAttributes() - ); - } - - $newContents = []; - foreach ($contents as $i => $part) { - if ($part instanceof Node\InterpolatedStringPart) { - $isLast = $i === \count($contents) - 1; - $part->value = $this->stripIndentation( - $part->value, $indentLen, $indentChar, - $i === 0, $isLast, $part->getAttributes() - ); - if ($isLast) { - $part->value = preg_replace('~(\r\n|\n|\r)\z~', '', $part->value); - } - $part->setAttribute('rawValue', $part->value); - $part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape); - if ('' === $part->value) { - continue; - } - } - $newContents[] = $part; - } - return new InterpolatedString($newContents, $attributes); - } - } - - protected function createCommentFromToken(Token $token, int $tokenPos): Comment { - assert($token->id === \T_COMMENT || $token->id == \T_DOC_COMMENT); - return \T_DOC_COMMENT === $token->id - ? new Comment\Doc($token->text, $token->line, $token->pos, $tokenPos, - $token->getEndLine(), $token->getEndPos() - 1, $tokenPos) - : new Comment($token->text, $token->line, $token->pos, $tokenPos, - $token->getEndLine(), $token->getEndPos() - 1, $tokenPos); - } - - /** - * Get last comment before the given token position, if any - */ - protected function getCommentBeforeToken(int $tokenPos): ?Comment { - while (--$tokenPos >= 0) { - $token = $this->tokens[$tokenPos]; - if (!isset($this->dropTokens[$token->id])) { - break; - } - - if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) { - return $this->createCommentFromToken($token, $tokenPos); - } - } - return null; - } - - /** - * Create a zero-length nop to capture preceding comments, if any. - */ - protected function maybeCreateZeroLengthNop(int $tokenPos): ?Nop { - $comment = $this->getCommentBeforeToken($tokenPos); - if ($comment === null) { - return null; - } - - $commentEndLine = $comment->getEndLine(); - $commentEndFilePos = $comment->getEndFilePos(); - $commentEndTokenPos = $comment->getEndTokenPos(); - $attributes = [ - 'startLine' => $commentEndLine, - 'endLine' => $commentEndLine, - 'startFilePos' => $commentEndFilePos + 1, - 'endFilePos' => $commentEndFilePos, - 'startTokenPos' => $commentEndTokenPos + 1, - 'endTokenPos' => $commentEndTokenPos, - ]; - return new Nop($attributes); - } - - protected function maybeCreateNop(int $tokenStartPos, int $tokenEndPos): ?Nop { - if ($this->getCommentBeforeToken($tokenStartPos) === null) { - return null; - } - return new Nop($this->getAttributes($tokenStartPos, $tokenEndPos)); - } - - protected function handleHaltCompiler(): string { - // Prevent the lexer from returning any further tokens. - $nextToken = $this->tokens[$this->tokenPos + 1]; - $this->tokenPos = \count($this->tokens) - 2; - - // Return text after __halt_compiler. - return $nextToken->id === \T_INLINE_HTML ? $nextToken->text : ''; - } - - protected function inlineHtmlHasLeadingNewline(int $stackPos): bool { - $tokenPos = $this->tokenStartStack[$stackPos]; - $token = $this->tokens[$tokenPos]; - assert($token->id == \T_INLINE_HTML); - if ($tokenPos > 0) { - $prevToken = $this->tokens[$tokenPos - 1]; - assert($prevToken->id == \T_CLOSE_TAG); - return false !== strpos($prevToken->text, "\n") - || false !== strpos($prevToken->text, "\r"); - } - return true; - } - - /** - * @return array - */ - protected function createEmptyElemAttributes(int $tokenPos): array { - return $this->getAttributesForToken($tokenPos); - } - - protected function fixupArrayDestructuring(Array_ $node): Expr\List_ { - $this->createdArrays->detach($node); - return new Expr\List_(array_map(function (Node\ArrayItem $item) { - if ($item->value instanceof Expr\Error) { - // We used Error as a placeholder for empty elements, which are legal for destructuring. - return null; - } - if ($item->value instanceof Array_) { - return new Node\ArrayItem( - $this->fixupArrayDestructuring($item->value), - $item->key, $item->byRef, $item->getAttributes()); - } - return $item; - }, $node->items), ['kind' => Expr\List_::KIND_ARRAY] + $node->getAttributes()); - } - - protected function postprocessList(Expr\List_ $node): void { - foreach ($node->items as $i => $item) { - if ($item->value instanceof Expr\Error) { - // We used Error as a placeholder for empty elements, which are legal for destructuring. - $node->items[$i] = null; - } - } - } - - /** @param ElseIf_|Else_ $node */ - protected function fixupAlternativeElse($node): void { - // Make sure a trailing nop statement carrying comments is part of the node. - $numStmts = \count($node->stmts); - if ($numStmts !== 0 && $node->stmts[$numStmts - 1] instanceof Nop) { - $nopAttrs = $node->stmts[$numStmts - 1]->getAttributes(); - if (isset($nopAttrs['endLine'])) { - $node->setAttribute('endLine', $nopAttrs['endLine']); - } - if (isset($nopAttrs['endFilePos'])) { - $node->setAttribute('endFilePos', $nopAttrs['endFilePos']); - } - if (isset($nopAttrs['endTokenPos'])) { - $node->setAttribute('endTokenPos', $nopAttrs['endTokenPos']); - } - } - } - - protected function checkClassModifier(int $a, int $b, int $modifierPos): void { - try { - Modifiers::verifyClassModifier($a, $b); - } catch (Error $error) { - $error->setAttributes($this->getAttributesAt($modifierPos)); - $this->emitError($error); - } - } - - protected function checkModifier(int $a, int $b, int $modifierPos): void { - // Jumping through some hoops here because verifyModifier() is also used elsewhere - try { - Modifiers::verifyModifier($a, $b); - } catch (Error $error) { - $error->setAttributes($this->getAttributesAt($modifierPos)); - $this->emitError($error); - } - } - - protected function checkParam(Param $node): void { - if ($node->variadic && null !== $node->default) { - $this->emitError(new Error( - 'Variadic parameter cannot have a default value', - $node->default->getAttributes() - )); - } - } - - protected function checkTryCatch(TryCatch $node): void { - if (empty($node->catches) && null === $node->finally) { - $this->emitError(new Error( - 'Cannot use try without catch or finally', $node->getAttributes() - )); - } - } - - protected function checkNamespace(Namespace_ $node): void { - if (null !== $node->stmts) { - foreach ($node->stmts as $stmt) { - if ($stmt instanceof Namespace_) { - $this->emitError(new Error( - 'Namespace declarations cannot be nested', $stmt->getAttributes() - )); - } - } - } - } - - private function checkClassName(?Identifier $name, int $namePos): void { - if (null !== $name && $name->isSpecialClassName()) { - $this->emitError(new Error( - sprintf('Cannot use \'%s\' as class name as it is reserved', $name), - $this->getAttributesAt($namePos) - )); - } - } - - /** @param Name[] $interfaces */ - private function checkImplementedInterfaces(array $interfaces): void { - foreach ($interfaces as $interface) { - if ($interface->isSpecialClassName()) { - $this->emitError(new Error( - sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface), - $interface->getAttributes() - )); - } - } - } - - protected function checkClass(Class_ $node, int $namePos): void { - $this->checkClassName($node->name, $namePos); - - if ($node->extends && $node->extends->isSpecialClassName()) { - $this->emitError(new Error( - sprintf('Cannot use \'%s\' as class name as it is reserved', $node->extends), - $node->extends->getAttributes() - )); - } - - $this->checkImplementedInterfaces($node->implements); - } - - protected function checkInterface(Interface_ $node, int $namePos): void { - $this->checkClassName($node->name, $namePos); - $this->checkImplementedInterfaces($node->extends); - } - - protected function checkEnum(Enum_ $node, int $namePos): void { - $this->checkClassName($node->name, $namePos); - $this->checkImplementedInterfaces($node->implements); - } - - protected function checkClassMethod(ClassMethod $node, int $modifierPos): void { - if ($node->flags & Modifiers::STATIC) { - switch ($node->name->toLowerString()) { - case '__construct': - $this->emitError(new Error( - sprintf('Constructor %s() cannot be static', $node->name), - $this->getAttributesAt($modifierPos))); - break; - case '__destruct': - $this->emitError(new Error( - sprintf('Destructor %s() cannot be static', $node->name), - $this->getAttributesAt($modifierPos))); - break; - case '__clone': - $this->emitError(new Error( - sprintf('Clone method %s() cannot be static', $node->name), - $this->getAttributesAt($modifierPos))); - break; - } - } - - if ($node->flags & Modifiers::READONLY) { - $this->emitError(new Error( - sprintf('Method %s() cannot be readonly', $node->name), - $this->getAttributesAt($modifierPos))); - } - } - - protected function checkClassConst(ClassConst $node, int $modifierPos): void { - foreach ([Modifiers::STATIC, Modifiers::ABSTRACT, Modifiers::READONLY] as $modifier) { - if ($node->flags & $modifier) { - $this->emitError(new Error( - "Cannot use '" . Modifiers::toString($modifier) . "' as constant modifier", - $this->getAttributesAt($modifierPos))); - } - } - } - - protected function checkUseUse(UseItem $node, int $namePos): void { - if ($node->alias && $node->alias->isSpecialClassName()) { - $this->emitError(new Error( - sprintf( - 'Cannot use %s as %s because \'%2$s\' is a special class name', - $node->name, $node->alias - ), - $this->getAttributesAt($namePos) - )); - } - } - - /** @param PropertyHook[] $hooks */ - protected function checkPropertyHookList(array $hooks, int $hookPos): void { - if (empty($hooks)) { - $this->emitError(new Error( - 'Property hook list cannot be empty', $this->getAttributesAt($hookPos))); - } - } - - protected function checkPropertyHook(PropertyHook $hook, ?int $paramListPos): void { - $name = $hook->name->toLowerString(); - if ($name !== 'get' && $name !== 'set') { - $this->emitError(new Error( - 'Unknown hook "' . $hook->name . '", expected "get" or "set"', - $hook->name->getAttributes())); - } - if ($name === 'get' && $paramListPos !== null) { - $this->emitError(new Error( - 'get hook must not have a parameter list', $this->getAttributesAt($paramListPos))); - } - } - - protected function checkPropertyHookModifiers(int $a, int $b, int $modifierPos): void { - try { - Modifiers::verifyModifier($a, $b); - } catch (Error $error) { - $error->setAttributes($this->getAttributesAt($modifierPos)); - $this->emitError($error); - } - - if ($b != Modifiers::FINAL) { - $this->emitError(new Error( - 'Cannot use the ' . Modifiers::toString($b) . ' modifier on a property hook', - $this->getAttributesAt($modifierPos))); - } - } - - /** @param array $args */ - private function isSimpleExit(array $args): bool { - if (\count($args) === 0) { - return true; - } - if (\count($args) === 1) { - $arg = $args[0]; - return $arg instanceof Arg && $arg->name === null && - $arg->byRef === false && $arg->unpack === false; - } - return false; - } - - /** - * @param array $args - * @param array $attrs - */ - protected function createExitExpr(string $name, int $namePos, array $args, array $attrs): Expr { - if ($this->isSimpleExit($args)) { - // Create Exit node for backwards compatibility. - $attrs['kind'] = strtolower($name) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; - return new Expr\Exit_(\count($args) === 1 ? $args[0]->value : null, $attrs); - } - return new Expr\FuncCall(new Name($name, $this->getAttributesAt($namePos)), $args, $attrs); - } - - /** - * Creates the token map. - * - * The token map maps the PHP internal token identifiers - * to the identifiers used by the Parser. Additionally it - * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'. - * - * @return array The token map - */ - protected function createTokenMap(): array { - $tokenMap = []; - - // Single-char tokens use an identity mapping. - for ($i = 0; $i < 256; ++$i) { - $tokenMap[$i] = $i; - } - - foreach ($this->symbolToName as $name) { - if ($name[0] === 'T') { - $tokenMap[\constant($name)] = constant(static::class . '::' . $name); - } - } - - // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO - $tokenMap[\T_OPEN_TAG_WITH_ECHO] = static::T_ECHO; - // T_CLOSE_TAG is equivalent to ';' - $tokenMap[\T_CLOSE_TAG] = ord(';'); - - // We have created a map from PHP token IDs to external symbol IDs. - // Now map them to the internal symbol ID. - $fullTokenMap = []; - foreach ($tokenMap as $phpToken => $extSymbol) { - $intSymbol = $this->tokenToSymbol[$extSymbol]; - if ($intSymbol === $this->invalidSymbol) { - continue; - } - $fullTokenMap[$phpToken] = $intSymbol; - } - - return $fullTokenMap; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php b/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php deleted file mode 100644 index 3a7586e..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/ParserFactory.php +++ /dev/null @@ -1,42 +0,0 @@ -isHostVersion()) { - $lexer = new Lexer(); - } else { - $lexer = new Lexer\Emulative($version); - } - if ($version->id >= 80000) { - return new Php8($lexer, $version); - } - return new Php7($lexer, $version); - } - - /** - * Create a parser targeting the newest version supported by this library. Code for older - * versions will be accepted if there have been no relevant backwards-compatibility breaks in - * PHP. - */ - public function createForNewestSupportedVersion(): Parser { - return $this->createForVersion(PhpVersion::getNewestSupported()); - } - - /** - * Create a parser targeting the host PHP version, that is the PHP version we're currently - * running on. This parser will not use any token emulation. - */ - public function createForHostVersion(): Parser { - return $this->createForVersion(PhpVersion::getHostVersion()); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php b/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php deleted file mode 100644 index 04ff6dd..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/PhpVersion.php +++ /dev/null @@ -1,164 +0,0 @@ - 50100, - 'callable' => 50400, - 'bool' => 70000, - 'int' => 70000, - 'float' => 70000, - 'string' => 70000, - 'iterable' => 70100, - 'void' => 70100, - 'object' => 70200, - 'null' => 80000, - 'false' => 80000, - 'mixed' => 80000, - 'never' => 80100, - 'true' => 80200, - ]; - - private function __construct(int $id) { - $this->id = $id; - } - - /** - * Create a PhpVersion object from major and minor version components. - */ - public static function fromComponents(int $major, int $minor): self { - return new self($major * 10000 + $minor * 100); - } - - /** - * Get the newest PHP version supported by this library. Support for this version may be partial, - * if it is still under development. - */ - public static function getNewestSupported(): self { - return self::fromComponents(8, 4); - } - - /** - * Get the host PHP version, that is the PHP version we're currently running on. - */ - public static function getHostVersion(): self { - return self::fromComponents(\PHP_MAJOR_VERSION, \PHP_MINOR_VERSION); - } - - /** - * Parse the version from a string like "8.1". - */ - public static function fromString(string $version): self { - if (!preg_match('/^(\d+)\.(\d+)/', $version, $matches)) { - throw new \LogicException("Invalid PHP version \"$version\""); - } - return self::fromComponents((int) $matches[1], (int) $matches[2]); - } - - /** - * Check whether two versions are the same. - */ - public function equals(PhpVersion $other): bool { - return $this->id === $other->id; - } - - /** - * Check whether this version is greater than or equal to the argument. - */ - public function newerOrEqual(PhpVersion $other): bool { - return $this->id >= $other->id; - } - - /** - * Check whether this version is older than the argument. - */ - public function older(PhpVersion $other): bool { - return $this->id < $other->id; - } - - /** - * Check whether this is the host PHP version. - */ - public function isHostVersion(): bool { - return $this->equals(self::getHostVersion()); - } - - /** - * Check whether this PHP version supports the given builtin type. Type name must be lowercase. - */ - public function supportsBuiltinType(string $type): bool { - $minVersion = self::BUILTIN_TYPE_VERSIONS[$type] ?? null; - return $minVersion !== null && $this->id >= $minVersion; - } - - /** - * Whether this version supports [] array literals. - */ - public function supportsShortArraySyntax(): bool { - return $this->id >= 50400; - } - - /** - * Whether this version supports [] for destructuring. - */ - public function supportsShortArrayDestructuring(): bool { - return $this->id >= 70100; - } - - /** - * Whether this version supports flexible heredoc/nowdoc. - */ - public function supportsFlexibleHeredoc(): bool { - return $this->id >= 70300; - } - - /** - * Whether this version supports trailing commas in parameter lists. - */ - public function supportsTrailingCommaInParamList(): bool { - return $this->id >= 80000; - } - - /** - * Whether this version allows "$var =& new Obj". - */ - public function allowsAssignNewByReference(): bool { - return $this->id < 70000; - } - - /** - * Whether this version allows invalid octals like "08". - */ - public function allowsInvalidOctals(): bool { - return $this->id < 70000; - } - - /** - * Whether this version allows DEL (\x7f) to occur in identifiers. - */ - public function allowsDelInIdentifiers(): bool { - return $this->id < 70100; - } - - /** - * Whether this version supports yield in expression context without parentheses. - */ - public function supportsYieldWithoutParentheses(): bool { - return $this->id >= 70000; - } - - /** - * Whether this version supports unicode escape sequences in strings. - */ - public function supportsUnicodeEscapes(): bool { - return $this->id >= 70000; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php deleted file mode 100644 index 892c686..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinter.php +++ /dev/null @@ -1,51 +0,0 @@ -pAttrGroups($node->attrGroups, true) - . $this->pModifiers($node->flags) - . ($node->type ? $this->p($node->type) . ' ' : '') - . ($node->byRef ? '&' : '') - . ($node->variadic ? '...' : '') - . $this->p($node->var) - . ($node->default ? ' = ' . $this->p($node->default) : '') - . ($node->hooks ? ' {' . $this->pStmts($node->hooks) . $this->nl . '}' : ''); - } - - protected function pArg(Node\Arg $node): string { - return ($node->name ? $node->name->toString() . ': ' : '') - . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') - . $this->p($node->value); - } - - protected function pVariadicPlaceholder(Node\VariadicPlaceholder $node): string { - return '...'; - } - - protected function pConst(Node\Const_ $node): string { - return $node->name . ' = ' . $this->p($node->value); - } - - protected function pNullableType(Node\NullableType $node): string { - return '?' . $this->p($node->type); - } - - protected function pUnionType(Node\UnionType $node): string { - $types = []; - foreach ($node->types as $typeNode) { - if ($typeNode instanceof Node\IntersectionType) { - $types[] = '('. $this->p($typeNode) . ')'; - continue; - } - $types[] = $this->p($typeNode); - } - return implode('|', $types); - } - - protected function pIntersectionType(Node\IntersectionType $node): string { - return $this->pImplode($node->types, '&'); - } - - protected function pIdentifier(Node\Identifier $node): string { - return $node->name; - } - - protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node): string { - return '$' . $node->name; - } - - protected function pAttribute(Node\Attribute $node): string { - return $this->p($node->name) - . ($node->args ? '(' . $this->pCommaSeparated($node->args) . ')' : ''); - } - - protected function pAttributeGroup(Node\AttributeGroup $node): string { - return '#[' . $this->pCommaSeparated($node->attrs) . ']'; - } - - // Names - - protected function pName(Name $node): string { - return $node->name; - } - - protected function pName_FullyQualified(Name\FullyQualified $node): string { - return '\\' . $node->name; - } - - protected function pName_Relative(Name\Relative $node): string { - return 'namespace\\' . $node->name; - } - - // Magic Constants - - protected function pScalar_MagicConst_Class(MagicConst\Class_ $node): string { - return '__CLASS__'; - } - - protected function pScalar_MagicConst_Dir(MagicConst\Dir $node): string { - return '__DIR__'; - } - - protected function pScalar_MagicConst_File(MagicConst\File $node): string { - return '__FILE__'; - } - - protected function pScalar_MagicConst_Function(MagicConst\Function_ $node): string { - return '__FUNCTION__'; - } - - protected function pScalar_MagicConst_Line(MagicConst\Line $node): string { - return '__LINE__'; - } - - protected function pScalar_MagicConst_Method(MagicConst\Method $node): string { - return '__METHOD__'; - } - - protected function pScalar_MagicConst_Namespace(MagicConst\Namespace_ $node): string { - return '__NAMESPACE__'; - } - - protected function pScalar_MagicConst_Trait(MagicConst\Trait_ $node): string { - return '__TRAIT__'; - } - - protected function pScalar_MagicConst_Property(MagicConst\Property $node): string { - return '__PROPERTY__'; - } - - // Scalars - - private function indentString(string $str): string { - return str_replace("\n", $this->nl, $str); - } - - protected function pScalar_String(Scalar\String_ $node): string { - $kind = $node->getAttribute('kind', Scalar\String_::KIND_SINGLE_QUOTED); - switch ($kind) { - case Scalar\String_::KIND_NOWDOC: - $label = $node->getAttribute('docLabel'); - if ($label && !$this->containsEndLabel($node->value, $label)) { - $shouldIdent = $this->phpVersion->supportsFlexibleHeredoc(); - $nl = $shouldIdent ? $this->nl : $this->newline; - if ($node->value === '') { - return "<<<'$label'$nl$label{$this->docStringEndToken}"; - } - - // Make sure trailing \r is not combined with following \n into CRLF. - if ($node->value[strlen($node->value) - 1] !== "\r") { - $value = $shouldIdent ? $this->indentString($node->value) : $node->value; - return "<<<'$label'$nl$value$nl$label{$this->docStringEndToken}"; - } - } - /* break missing intentionally */ - // no break - case Scalar\String_::KIND_SINGLE_QUOTED: - return $this->pSingleQuotedString($node->value); - case Scalar\String_::KIND_HEREDOC: - $label = $node->getAttribute('docLabel'); - $escaped = $this->escapeString($node->value, null); - if ($label && !$this->containsEndLabel($escaped, $label)) { - $nl = $this->phpVersion->supportsFlexibleHeredoc() ? $this->nl : $this->newline; - if ($escaped === '') { - return "<<<$label$nl$label{$this->docStringEndToken}"; - } - - return "<<<$label$nl$escaped$nl$label{$this->docStringEndToken}"; - } - /* break missing intentionally */ - // no break - case Scalar\String_::KIND_DOUBLE_QUOTED: - return '"' . $this->escapeString($node->value, '"') . '"'; - } - throw new \Exception('Invalid string kind'); - } - - protected function pScalar_InterpolatedString(Scalar\InterpolatedString $node): string { - if ($node->getAttribute('kind') === Scalar\String_::KIND_HEREDOC) { - $label = $node->getAttribute('docLabel'); - if ($label && !$this->encapsedContainsEndLabel($node->parts, $label)) { - $nl = $this->phpVersion->supportsFlexibleHeredoc() ? $this->nl : $this->newline; - if (count($node->parts) === 1 - && $node->parts[0] instanceof Node\InterpolatedStringPart - && $node->parts[0]->value === '' - ) { - return "<<<$label$nl$label{$this->docStringEndToken}"; - } - - return "<<<$label$nl" . $this->pEncapsList($node->parts, null) - . "$nl$label{$this->docStringEndToken}"; - } - } - return '"' . $this->pEncapsList($node->parts, '"') . '"'; - } - - protected function pScalar_Int(Scalar\Int_ $node): string { - if ($node->value === -\PHP_INT_MAX - 1) { - // PHP_INT_MIN cannot be represented as a literal, - // because the sign is not part of the literal - return '(-' . \PHP_INT_MAX . '-1)'; - } - - $kind = $node->getAttribute('kind', Scalar\Int_::KIND_DEC); - if (Scalar\Int_::KIND_DEC === $kind) { - return (string) $node->value; - } - - if ($node->value < 0) { - $sign = '-'; - $str = (string) -$node->value; - } else { - $sign = ''; - $str = (string) $node->value; - } - switch ($kind) { - case Scalar\Int_::KIND_BIN: - return $sign . '0b' . base_convert($str, 10, 2); - case Scalar\Int_::KIND_OCT: - return $sign . '0' . base_convert($str, 10, 8); - case Scalar\Int_::KIND_HEX: - return $sign . '0x' . base_convert($str, 10, 16); - } - throw new \Exception('Invalid number kind'); - } - - protected function pScalar_Float(Scalar\Float_ $node): string { - if (!is_finite($node->value)) { - if ($node->value === \INF) { - return '1.0E+1000'; - } - if ($node->value === -\INF) { - return '-1.0E+1000'; - } else { - return '\NAN'; - } - } - - // Try to find a short full-precision representation - $stringValue = sprintf('%.16G', $node->value); - if ($node->value !== (float) $stringValue) { - $stringValue = sprintf('%.17G', $node->value); - } - - // %G is locale dependent and there exists no locale-independent alternative. We don't want - // mess with switching locales here, so let's assume that a comma is the only non-standard - // decimal separator we may encounter... - $stringValue = str_replace(',', '.', $stringValue); - - // ensure that number is really printed as float - return preg_match('/^-?[0-9]+$/', $stringValue) ? $stringValue . '.0' : $stringValue; - } - - // Assignments - - protected function pExpr_Assign(Expr\Assign $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\Assign::class, $this->p($node->var) . ' = ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignRef(Expr\AssignRef $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\AssignRef::class, $this->p($node->var) . ' =& ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_Plus(AssignOp\Plus $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\Plus::class, $this->p($node->var) . ' += ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_Minus(AssignOp\Minus $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\Minus::class, $this->p($node->var) . ' -= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_Mul(AssignOp\Mul $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\Mul::class, $this->p($node->var) . ' *= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_Div(AssignOp\Div $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\Div::class, $this->p($node->var) . ' /= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_Concat(AssignOp\Concat $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\Concat::class, $this->p($node->var) . ' .= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_Mod(AssignOp\Mod $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\Mod::class, $this->p($node->var) . ' %= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_BitwiseAnd(AssignOp\BitwiseAnd $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\BitwiseAnd::class, $this->p($node->var) . ' &= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_BitwiseOr(AssignOp\BitwiseOr $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\BitwiseOr::class, $this->p($node->var) . ' |= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_BitwiseXor(AssignOp\BitwiseXor $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\BitwiseXor::class, $this->p($node->var) . ' ^= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_ShiftLeft(AssignOp\ShiftLeft $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\ShiftLeft::class, $this->p($node->var) . ' <<= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_ShiftRight(AssignOp\ShiftRight $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\ShiftRight::class, $this->p($node->var) . ' >>= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_Pow(AssignOp\Pow $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\Pow::class, $this->p($node->var) . ' **= ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_AssignOp_Coalesce(AssignOp\Coalesce $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(AssignOp\Coalesce::class, $this->p($node->var) . ' ??= ', $node->expr, $precedence, $lhsPrecedence); - } - - // Binary expressions - - protected function pExpr_BinaryOp_Plus(BinaryOp\Plus $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Plus::class, $node->left, ' + ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Minus(BinaryOp\Minus $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Minus::class, $node->left, ' - ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Mul(BinaryOp\Mul $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Mul::class, $node->left, ' * ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Div(BinaryOp\Div $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Div::class, $node->left, ' / ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Concat(BinaryOp\Concat $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Concat::class, $node->left, ' . ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Mod(BinaryOp\Mod $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Mod::class, $node->left, ' % ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_BooleanAnd(BinaryOp\BooleanAnd $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\BooleanAnd::class, $node->left, ' && ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_BooleanOr(BinaryOp\BooleanOr $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\BooleanOr::class, $node->left, ' || ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_BitwiseAnd(BinaryOp\BitwiseAnd $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\BitwiseAnd::class, $node->left, ' & ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_BitwiseOr(BinaryOp\BitwiseOr $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\BitwiseOr::class, $node->left, ' | ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_BitwiseXor(BinaryOp\BitwiseXor $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\BitwiseXor::class, $node->left, ' ^ ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_ShiftLeft(BinaryOp\ShiftLeft $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\ShiftLeft::class, $node->left, ' << ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_ShiftRight(BinaryOp\ShiftRight $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\ShiftRight::class, $node->left, ' >> ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Pow(BinaryOp\Pow $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Pow::class, $node->left, ' ** ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_LogicalAnd(BinaryOp\LogicalAnd $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\LogicalAnd::class, $node->left, ' and ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_LogicalOr(BinaryOp\LogicalOr $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\LogicalOr::class, $node->left, ' or ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_LogicalXor(BinaryOp\LogicalXor $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\LogicalXor::class, $node->left, ' xor ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Equal(BinaryOp\Equal $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Equal::class, $node->left, ' == ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_NotEqual(BinaryOp\NotEqual $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\NotEqual::class, $node->left, ' != ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Identical(BinaryOp\Identical $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Identical::class, $node->left, ' === ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_NotIdentical(BinaryOp\NotIdentical $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\NotIdentical::class, $node->left, ' !== ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Spaceship(BinaryOp\Spaceship $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Spaceship::class, $node->left, ' <=> ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Greater(BinaryOp\Greater $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Greater::class, $node->left, ' > ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_GreaterOrEqual(BinaryOp\GreaterOrEqual $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\GreaterOrEqual::class, $node->left, ' >= ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Smaller(BinaryOp\Smaller $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Smaller::class, $node->left, ' < ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_SmallerOrEqual(BinaryOp\SmallerOrEqual $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\SmallerOrEqual::class, $node->left, ' <= ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node, int $precedence, int $lhsPrecedence): string { - return $this->pInfixOp(BinaryOp\Coalesce::class, $node->left, ' ?? ', $node->right, $precedence, $lhsPrecedence); - } - - protected function pExpr_Instanceof(Expr\Instanceof_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPostfixOp( - Expr\Instanceof_::class, $node->expr, - ' instanceof ' . $this->pNewOperand($node->class), - $precedence, $lhsPrecedence); - } - - // Unary expressions - - protected function pExpr_BooleanNot(Expr\BooleanNot $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\BooleanNot::class, '!', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_BitwiseNot(Expr\BitwiseNot $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\BitwiseNot::class, '~', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_UnaryMinus(Expr\UnaryMinus $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\UnaryMinus::class, '-', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_UnaryPlus(Expr\UnaryPlus $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\UnaryPlus::class, '+', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_PreInc(Expr\PreInc $node): string { - return '++' . $this->p($node->var); - } - - protected function pExpr_PreDec(Expr\PreDec $node): string { - return '--' . $this->p($node->var); - } - - protected function pExpr_PostInc(Expr\PostInc $node): string { - return $this->p($node->var) . '++'; - } - - protected function pExpr_PostDec(Expr\PostDec $node): string { - return $this->p($node->var) . '--'; - } - - protected function pExpr_ErrorSuppress(Expr\ErrorSuppress $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\ErrorSuppress::class, '@', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_YieldFrom(Expr\YieldFrom $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\YieldFrom::class, 'yield from ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Print(Expr\Print_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\Print_::class, 'print ', $node->expr, $precedence, $lhsPrecedence); - } - - // Casts - - protected function pExpr_Cast_Int(Cast\Int_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Cast\Int_::class, '(int) ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Cast_Double(Cast\Double $node, int $precedence, int $lhsPrecedence): string { - $kind = $node->getAttribute('kind', Cast\Double::KIND_DOUBLE); - if ($kind === Cast\Double::KIND_DOUBLE) { - $cast = '(double)'; - } elseif ($kind === Cast\Double::KIND_FLOAT) { - $cast = '(float)'; - } else { - assert($kind === Cast\Double::KIND_REAL); - $cast = '(real)'; - } - return $this->pPrefixOp(Cast\Double::class, $cast . ' ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Cast_String(Cast\String_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Cast\String_::class, '(string) ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Cast_Array(Cast\Array_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Cast\Array_::class, '(array) ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Cast_Object(Cast\Object_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Cast\Object_::class, '(object) ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Cast_Bool(Cast\Bool_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Cast\Bool_::class, '(bool) ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Cast_Unset(Cast\Unset_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Cast\Unset_::class, '(unset) ', $node->expr, $precedence, $lhsPrecedence); - } - - // Function calls and similar constructs - - protected function pExpr_FuncCall(Expr\FuncCall $node): string { - return $this->pCallLhs($node->name) - . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - - protected function pExpr_MethodCall(Expr\MethodCall $node): string { - return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name) - . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - - protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node): string { - return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name) - . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - - protected function pExpr_StaticCall(Expr\StaticCall $node): string { - return $this->pStaticDereferenceLhs($node->class) . '::' - . ($node->name instanceof Expr - ? ($node->name instanceof Expr\Variable - ? $this->p($node->name) - : '{' . $this->p($node->name) . '}') - : $node->name) - . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - - protected function pExpr_Empty(Expr\Empty_ $node): string { - return 'empty(' . $this->p($node->expr) . ')'; - } - - protected function pExpr_Isset(Expr\Isset_ $node): string { - return 'isset(' . $this->pCommaSeparated($node->vars) . ')'; - } - - protected function pExpr_Eval(Expr\Eval_ $node): string { - return 'eval(' . $this->p($node->expr) . ')'; - } - - protected function pExpr_Include(Expr\Include_ $node, int $precedence, int $lhsPrecedence): string { - static $map = [ - Expr\Include_::TYPE_INCLUDE => 'include', - Expr\Include_::TYPE_INCLUDE_ONCE => 'include_once', - Expr\Include_::TYPE_REQUIRE => 'require', - Expr\Include_::TYPE_REQUIRE_ONCE => 'require_once', - ]; - - return $this->pPrefixOp(Expr\Include_::class, $map[$node->type] . ' ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_List(Expr\List_ $node): string { - $syntax = $node->getAttribute('kind', - $this->phpVersion->supportsShortArrayDestructuring() ? Expr\List_::KIND_ARRAY : Expr\List_::KIND_LIST); - if ($syntax === Expr\List_::KIND_ARRAY) { - return '[' . $this->pMaybeMultiline($node->items, true) . ']'; - } else { - return 'list(' . $this->pMaybeMultiline($node->items, true) . ')'; - } - } - - // Other - - protected function pExpr_Error(Expr\Error $node): string { - throw new \LogicException('Cannot pretty-print AST with Error nodes'); - } - - protected function pExpr_Variable(Expr\Variable $node): string { - if ($node->name instanceof Expr) { - return '${' . $this->p($node->name) . '}'; - } else { - return '$' . $node->name; - } - } - - protected function pExpr_Array(Expr\Array_ $node): string { - $syntax = $node->getAttribute('kind', - $this->shortArraySyntax ? Expr\Array_::KIND_SHORT : Expr\Array_::KIND_LONG); - if ($syntax === Expr\Array_::KIND_SHORT) { - return '[' . $this->pMaybeMultiline($node->items, true) . ']'; - } else { - return 'array(' . $this->pMaybeMultiline($node->items, true) . ')'; - } - } - - protected function pKey(?Node $node): string { - if ($node === null) { - return ''; - } - - // => is not really an operator and does not typically participate in precedence resolution. - // However, there is an exception if yield expressions with keys are involved: - // [yield $a => $b] is interpreted as [(yield $a => $b)], so we need to ensure that - // [(yield $a) => $b] is printed with parentheses. We approximate this by lowering the LHS - // precedence to that of yield (which will also print unnecessary parentheses for rare low - // precedence unary operators like include). - $yieldPrecedence = $this->precedenceMap[Expr\Yield_::class][0]; - return $this->p($node, self::MAX_PRECEDENCE, $yieldPrecedence) . ' => '; - } - - protected function pArrayItem(Node\ArrayItem $node): string { - return $this->pKey($node->key) - . ($node->byRef ? '&' : '') - . ($node->unpack ? '...' : '') - . $this->p($node->value); - } - - protected function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node): string { - return $this->pDereferenceLhs($node->var) - . '[' . (null !== $node->dim ? $this->p($node->dim) : '') . ']'; - } - - protected function pExpr_ConstFetch(Expr\ConstFetch $node): string { - return $this->p($node->name); - } - - protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node): string { - return $this->pStaticDereferenceLhs($node->class) . '::' . $this->pObjectProperty($node->name); - } - - protected function pExpr_PropertyFetch(Expr\PropertyFetch $node): string { - return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name); - } - - protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node): string { - return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name); - } - - protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node): string { - return $this->pStaticDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); - } - - protected function pExpr_ShellExec(Expr\ShellExec $node): string { - return '`' . $this->pEncapsList($node->parts, '`') . '`'; - } - - protected function pExpr_Closure(Expr\Closure $node): string { - return $this->pAttrGroups($node->attrGroups, true) - . $this->pStatic($node->static) - . 'function ' . ($node->byRef ? '&' : '') - . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' - . (!empty($node->uses) ? ' use (' . $this->pCommaSeparated($node->uses) . ')' : '') - . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') - . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pExpr_Match(Expr\Match_ $node): string { - return 'match (' . $this->p($node->cond) . ') {' - . $this->pCommaSeparatedMultiline($node->arms, true) - . $this->nl - . '}'; - } - - protected function pMatchArm(Node\MatchArm $node): string { - $result = ''; - if ($node->conds) { - for ($i = 0, $c = \count($node->conds); $i + 1 < $c; $i++) { - $result .= $this->p($node->conds[$i]) . ', '; - } - $result .= $this->pKey($node->conds[$i]); - } else { - $result = 'default => '; - } - return $result . $this->p($node->body); - } - - protected function pExpr_ArrowFunction(Expr\ArrowFunction $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp( - Expr\ArrowFunction::class, - $this->pAttrGroups($node->attrGroups, true) - . $this->pStatic($node->static) - . 'fn' . ($node->byRef ? '&' : '') - . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' - . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') - . ' => ', - $node->expr, $precedence, $lhsPrecedence); - } - - protected function pClosureUse(Node\ClosureUse $node): string { - return ($node->byRef ? '&' : '') . $this->p($node->var); - } - - protected function pExpr_New(Expr\New_ $node): string { - if ($node->class instanceof Stmt\Class_) { - $args = $node->args ? '(' . $this->pMaybeMultiline($node->args) . ')' : ''; - return 'new ' . $this->pClassCommon($node->class, $args); - } - return 'new ' . $this->pNewOperand($node->class) - . '(' . $this->pMaybeMultiline($node->args) . ')'; - } - - protected function pExpr_Clone(Expr\Clone_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\Clone_::class, 'clone ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Ternary(Expr\Ternary $node, int $precedence, int $lhsPrecedence): string { - // a bit of cheating: we treat the ternary as a binary op where the ?...: part is the operator. - // this is okay because the part between ? and : never needs parentheses. - return $this->pInfixOp(Expr\Ternary::class, - $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else, - $precedence, $lhsPrecedence - ); - } - - protected function pExpr_Exit(Expr\Exit_ $node): string { - $kind = $node->getAttribute('kind', Expr\Exit_::KIND_DIE); - return ($kind === Expr\Exit_::KIND_EXIT ? 'exit' : 'die') - . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : ''); - } - - protected function pExpr_Throw(Expr\Throw_ $node, int $precedence, int $lhsPrecedence): string { - return $this->pPrefixOp(Expr\Throw_::class, 'throw ', $node->expr, $precedence, $lhsPrecedence); - } - - protected function pExpr_Yield(Expr\Yield_ $node, int $precedence, int $lhsPrecedence): string { - if ($node->value === null) { - $opPrecedence = $this->precedenceMap[Expr\Yield_::class][0]; - return $opPrecedence >= $lhsPrecedence ? '(yield)' : 'yield'; - } else { - if (!$this->phpVersion->supportsYieldWithoutParentheses()) { - return '(yield ' . $this->pKey($node->key) . $this->p($node->value) . ')'; - } - return $this->pPrefixOp( - Expr\Yield_::class, 'yield ' . $this->pKey($node->key), - $node->value, $precedence, $lhsPrecedence); - } - } - - // Declarations - - protected function pStmt_Namespace(Stmt\Namespace_ $node): string { - if ($this->canUseSemicolonNamespaces) { - return 'namespace ' . $this->p($node->name) . ';' - . $this->nl . $this->pStmts($node->stmts, false); - } else { - return 'namespace' . (null !== $node->name ? ' ' . $this->p($node->name) : '') - . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - } - - protected function pStmt_Use(Stmt\Use_ $node): string { - return 'use ' . $this->pUseType($node->type) - . $this->pCommaSeparated($node->uses) . ';'; - } - - protected function pStmt_GroupUse(Stmt\GroupUse $node): string { - return 'use ' . $this->pUseType($node->type) . $this->pName($node->prefix) - . '\{' . $this->pCommaSeparated($node->uses) . '};'; - } - - protected function pUseItem(Node\UseItem $node): string { - return $this->pUseType($node->type) . $this->p($node->name) - . (null !== $node->alias ? ' as ' . $node->alias : ''); - } - - protected function pUseType(int $type): string { - return $type === Stmt\Use_::TYPE_FUNCTION ? 'function ' - : ($type === Stmt\Use_::TYPE_CONSTANT ? 'const ' : ''); - } - - protected function pStmt_Interface(Stmt\Interface_ $node): string { - return $this->pAttrGroups($node->attrGroups) - . 'interface ' . $node->name - . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '') - . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_Enum(Stmt\Enum_ $node): string { - return $this->pAttrGroups($node->attrGroups) - . 'enum ' . $node->name - . ($node->scalarType ? ' : ' . $this->p($node->scalarType) : '') - . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') - . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_Class(Stmt\Class_ $node): string { - return $this->pClassCommon($node, ' ' . $node->name); - } - - protected function pStmt_Trait(Stmt\Trait_ $node): string { - return $this->pAttrGroups($node->attrGroups) - . 'trait ' . $node->name - . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_EnumCase(Stmt\EnumCase $node): string { - return $this->pAttrGroups($node->attrGroups) - . 'case ' . $node->name - . ($node->expr ? ' = ' . $this->p($node->expr) : '') - . ';'; - } - - protected function pStmt_TraitUse(Stmt\TraitUse $node): string { - return 'use ' . $this->pCommaSeparated($node->traits) - . (empty($node->adaptations) - ? ';' - : ' {' . $this->pStmts($node->adaptations) . $this->nl . '}'); - } - - protected function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node): string { - return $this->p($node->trait) . '::' . $node->method - . ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';'; - } - - protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node): string { - return (null !== $node->trait ? $this->p($node->trait) . '::' : '') - . $node->method . ' as' - . (null !== $node->newModifier ? ' ' . rtrim($this->pModifiers($node->newModifier), ' ') : '') - . (null !== $node->newName ? ' ' . $node->newName : '') - . ';'; - } - - protected function pStmt_Property(Stmt\Property $node): string { - return $this->pAttrGroups($node->attrGroups) - . (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags)) - . ($node->type ? $this->p($node->type) . ' ' : '') - . $this->pCommaSeparated($node->props) - . ($node->hooks ? ' {' . $this->pStmts($node->hooks) . $this->nl . '}' : ';'); - } - - protected function pPropertyItem(Node\PropertyItem $node): string { - return '$' . $node->name - . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); - } - - protected function pPropertyHook(Node\PropertyHook $node): string { - return $this->pAttrGroups($node->attrGroups) - . $this->pModifiers($node->flags) - . ($node->byRef ? '&' : '') . $node->name - . ($node->params ? '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' : '') - . (\is_array($node->body) ? ' {' . $this->pStmts($node->body) . $this->nl . '}' - : ($node->body !== null ? ' => ' . $this->p($node->body) : '') . ';'); - } - - protected function pStmt_ClassMethod(Stmt\ClassMethod $node): string { - return $this->pAttrGroups($node->attrGroups) - . $this->pModifiers($node->flags) - . 'function ' . ($node->byRef ? '&' : '') . $node->name - . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' - . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') - . (null !== $node->stmts - ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}' - : ';'); - } - - protected function pStmt_ClassConst(Stmt\ClassConst $node): string { - return $this->pAttrGroups($node->attrGroups) - . $this->pModifiers($node->flags) - . 'const ' - . (null !== $node->type ? $this->p($node->type) . ' ' : '') - . $this->pCommaSeparated($node->consts) . ';'; - } - - protected function pStmt_Function(Stmt\Function_ $node): string { - return $this->pAttrGroups($node->attrGroups) - . 'function ' . ($node->byRef ? '&' : '') . $node->name - . '(' . $this->pMaybeMultiline($node->params, $this->phpVersion->supportsTrailingCommaInParamList()) . ')' - . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') - . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_Const(Stmt\Const_ $node): string { - return 'const ' . $this->pCommaSeparated($node->consts) . ';'; - } - - protected function pStmt_Declare(Stmt\Declare_ $node): string { - return 'declare (' . $this->pCommaSeparated($node->declares) . ')' - . (null !== $node->stmts ? ' {' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); - } - - protected function pDeclareItem(Node\DeclareItem $node): string { - return $node->key . '=' . $this->p($node->value); - } - - // Control flow - - protected function pStmt_If(Stmt\If_ $node): string { - return 'if (' . $this->p($node->cond) . ') {' - . $this->pStmts($node->stmts) . $this->nl . '}' - . ($node->elseifs ? ' ' . $this->pImplode($node->elseifs, ' ') : '') - . (null !== $node->else ? ' ' . $this->p($node->else) : ''); - } - - protected function pStmt_ElseIf(Stmt\ElseIf_ $node): string { - return 'elseif (' . $this->p($node->cond) . ') {' - . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_Else(Stmt\Else_ $node): string { - if (\count($node->stmts) === 1 && $node->stmts[0] instanceof Stmt\If_) { - // Print as "else if" rather than "else { if }" - return 'else ' . $this->p($node->stmts[0]); - } - return 'else {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_For(Stmt\For_ $node): string { - return 'for (' - . $this->pCommaSeparated($node->init) . ';' . (!empty($node->cond) ? ' ' : '') - . $this->pCommaSeparated($node->cond) . ';' . (!empty($node->loop) ? ' ' : '') - . $this->pCommaSeparated($node->loop) - . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_Foreach(Stmt\Foreach_ $node): string { - return 'foreach (' . $this->p($node->expr) . ' as ' - . (null !== $node->keyVar ? $this->p($node->keyVar) . ' => ' : '') - . ($node->byRef ? '&' : '') . $this->p($node->valueVar) . ') {' - . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_While(Stmt\While_ $node): string { - return 'while (' . $this->p($node->cond) . ') {' - . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_Do(Stmt\Do_ $node): string { - return 'do {' . $this->pStmts($node->stmts) . $this->nl - . '} while (' . $this->p($node->cond) . ');'; - } - - protected function pStmt_Switch(Stmt\Switch_ $node): string { - return 'switch (' . $this->p($node->cond) . ') {' - . $this->pStmts($node->cases) . $this->nl . '}'; - } - - protected function pStmt_Case(Stmt\Case_ $node): string { - return (null !== $node->cond ? 'case ' . $this->p($node->cond) : 'default') . ':' - . $this->pStmts($node->stmts); - } - - protected function pStmt_TryCatch(Stmt\TryCatch $node): string { - return 'try {' . $this->pStmts($node->stmts) . $this->nl . '}' - . ($node->catches ? ' ' . $this->pImplode($node->catches, ' ') : '') - . ($node->finally !== null ? ' ' . $this->p($node->finally) : ''); - } - - protected function pStmt_Catch(Stmt\Catch_ $node): string { - return 'catch (' . $this->pImplode($node->types, '|') - . ($node->var !== null ? ' ' . $this->p($node->var) : '') - . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_Finally(Stmt\Finally_ $node): string { - return 'finally {' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pStmt_Break(Stmt\Break_ $node): string { - return 'break' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; - } - - protected function pStmt_Continue(Stmt\Continue_ $node): string { - return 'continue' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; - } - - protected function pStmt_Return(Stmt\Return_ $node): string { - return 'return' . (null !== $node->expr ? ' ' . $this->p($node->expr) : '') . ';'; - } - - protected function pStmt_Label(Stmt\Label $node): string { - return $node->name . ':'; - } - - protected function pStmt_Goto(Stmt\Goto_ $node): string { - return 'goto ' . $node->name . ';'; - } - - // Other - - protected function pStmt_Expression(Stmt\Expression $node): string { - return $this->p($node->expr) . ';'; - } - - protected function pStmt_Echo(Stmt\Echo_ $node): string { - return 'echo ' . $this->pCommaSeparated($node->exprs) . ';'; - } - - protected function pStmt_Static(Stmt\Static_ $node): string { - return 'static ' . $this->pCommaSeparated($node->vars) . ';'; - } - - protected function pStmt_Global(Stmt\Global_ $node): string { - return 'global ' . $this->pCommaSeparated($node->vars) . ';'; - } - - protected function pStaticVar(Node\StaticVar $node): string { - return $this->p($node->var) - . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); - } - - protected function pStmt_Unset(Stmt\Unset_ $node): string { - return 'unset(' . $this->pCommaSeparated($node->vars) . ');'; - } - - protected function pStmt_InlineHTML(Stmt\InlineHTML $node): string { - $newline = $node->getAttribute('hasLeadingNewline', true) ? $this->newline : ''; - return '?>' . $newline . $node->value . 'remaining; - } - - protected function pStmt_Nop(Stmt\Nop $node): string { - return ''; - } - - protected function pStmt_Block(Stmt\Block $node): string { - return '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - // Helpers - - protected function pClassCommon(Stmt\Class_ $node, string $afterClassToken): string { - return $this->pAttrGroups($node->attrGroups, $node->name === null) - . $this->pModifiers($node->flags) - . 'class' . $afterClassToken - . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '') - . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') - . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; - } - - protected function pObjectProperty(Node $node): string { - if ($node instanceof Expr) { - return '{' . $this->p($node) . '}'; - } else { - assert($node instanceof Node\Identifier); - return $node->name; - } - } - - /** @param (Expr|Node\InterpolatedStringPart)[] $encapsList */ - protected function pEncapsList(array $encapsList, ?string $quote): string { - $return = ''; - foreach ($encapsList as $element) { - if ($element instanceof Node\InterpolatedStringPart) { - $return .= $this->escapeString($element->value, $quote); - } else { - $return .= '{' . $this->p($element) . '}'; - } - } - - return $return; - } - - protected function pSingleQuotedString(string $string): string { - // It is idiomatic to only escape backslashes when necessary, i.e. when followed by ', \ or - // the end of the string ('Foo\Bar' instead of 'Foo\\Bar'). However, we also don't want to - // produce an odd number of backslashes, so '\\\\a' should not get rendered as '\\\a', even - // though that would be legal. - $regex = '/\'|\\\\(?=[\'\\\\]|$)|(?<=\\\\)\\\\/'; - return '\'' . preg_replace($regex, '\\\\$0', $string) . '\''; - } - - protected function escapeString(string $string, ?string $quote): string { - if (null === $quote) { - // For doc strings, don't escape newlines - $escaped = addcslashes($string, "\t\f\v$\\"); - // But do escape isolated \r. Combined with the terminating newline, it might get - // interpreted as \r\n and dropped from the string contents. - $escaped = preg_replace('/\r(?!\n)/', '\\r', $escaped); - if ($this->phpVersion->supportsFlexibleHeredoc()) { - $escaped = $this->indentString($escaped); - } - } else { - $escaped = addcslashes($string, "\n\r\t\f\v$" . $quote . "\\"); - } - - // Escape control characters and non-UTF-8 characters. - // Regex based on https://stackoverflow.com/a/11709412/385378. - $regex = '/( - [\x00-\x08\x0E-\x1F] # Control characters - | [\xC0-\xC1] # Invalid UTF-8 Bytes - | [\xF5-\xFF] # Invalid UTF-8 Bytes - | \xE0(?=[\x80-\x9F]) # Overlong encoding of prior code point - | \xF0(?=[\x80-\x8F]) # Overlong encoding of prior code point - | [\xC2-\xDF](?![\x80-\xBF]) # Invalid UTF-8 Sequence Start - | [\xE0-\xEF](?![\x80-\xBF]{2}) # Invalid UTF-8 Sequence Start - | [\xF0-\xF4](?![\x80-\xBF]{3}) # Invalid UTF-8 Sequence Start - | (?<=[\x00-\x7F\xF5-\xFF])[\x80-\xBF] # Invalid UTF-8 Sequence Middle - | (? $part) { - if ($part instanceof Node\InterpolatedStringPart - && $this->containsEndLabel($this->escapeString($part->value, null), $label, $i === 0) - ) { - return true; - } - } - return false; - } - - protected function pDereferenceLhs(Node $node): string { - if (!$this->dereferenceLhsRequiresParens($node)) { - return $this->p($node); - } else { - return '(' . $this->p($node) . ')'; - } - } - - protected function pStaticDereferenceLhs(Node $node): string { - if (!$this->staticDereferenceLhsRequiresParens($node)) { - return $this->p($node); - } else { - return '(' . $this->p($node) . ')'; - } - } - - protected function pCallLhs(Node $node): string { - if (!$this->callLhsRequiresParens($node)) { - return $this->p($node); - } else { - return '(' . $this->p($node) . ')'; - } - } - - protected function pNewOperand(Node $node): string { - if (!$this->newOperandRequiresParens($node)) { - return $this->p($node); - } else { - return '(' . $this->p($node) . ')'; - } - } - - /** - * @param Node[] $nodes - */ - protected function hasNodeWithComments(array $nodes): bool { - foreach ($nodes as $node) { - if ($node && $node->getComments()) { - return true; - } - } - return false; - } - - /** @param Node[] $nodes */ - protected function pMaybeMultiline(array $nodes, bool $trailingComma = false): string { - if (!$this->hasNodeWithComments($nodes)) { - return $this->pCommaSeparated($nodes); - } else { - return $this->pCommaSeparatedMultiline($nodes, $trailingComma) . $this->nl; - } - } - - /** @param Node\AttributeGroup[] $nodes */ - protected function pAttrGroups(array $nodes, bool $inline = false): string { - $result = ''; - $sep = $inline ? ' ' : $this->nl; - foreach ($nodes as $node) { - $result .= $this->p($node) . $sep; - } - - return $result; - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php b/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php deleted file mode 100644 index 1367a4b..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/PrettyPrinterAbstract.php +++ /dev/null @@ -1,1666 +0,0 @@ - */ - protected array $precedenceMap = [ - // [precedence, precedenceLHS, precedenceRHS] - // Where the latter two are the precedences to use for the LHS and RHS of a binary operator, - // where 1 is added to one of the sides depending on associativity. This information is not - // used for unary operators and set to -1. - Expr\Clone_::class => [-10, 0, 1], - BinaryOp\Pow::class => [ 0, 0, 1], - Expr\BitwiseNot::class => [ 10, -1, -1], - Expr\UnaryPlus::class => [ 10, -1, -1], - Expr\UnaryMinus::class => [ 10, -1, -1], - Cast\Int_::class => [ 10, -1, -1], - Cast\Double::class => [ 10, -1, -1], - Cast\String_::class => [ 10, -1, -1], - Cast\Array_::class => [ 10, -1, -1], - Cast\Object_::class => [ 10, -1, -1], - Cast\Bool_::class => [ 10, -1, -1], - Cast\Unset_::class => [ 10, -1, -1], - Expr\ErrorSuppress::class => [ 10, -1, -1], - Expr\Instanceof_::class => [ 20, -1, -1], - Expr\BooleanNot::class => [ 30, -1, -1], - BinaryOp\Mul::class => [ 40, 41, 40], - BinaryOp\Div::class => [ 40, 41, 40], - BinaryOp\Mod::class => [ 40, 41, 40], - BinaryOp\Plus::class => [ 50, 51, 50], - BinaryOp\Minus::class => [ 50, 51, 50], - BinaryOp\Concat::class => [ 50, 51, 50], - BinaryOp\ShiftLeft::class => [ 60, 61, 60], - BinaryOp\ShiftRight::class => [ 60, 61, 60], - BinaryOp\Smaller::class => [ 70, 70, 70], - BinaryOp\SmallerOrEqual::class => [ 70, 70, 70], - BinaryOp\Greater::class => [ 70, 70, 70], - BinaryOp\GreaterOrEqual::class => [ 70, 70, 70], - BinaryOp\Equal::class => [ 80, 80, 80], - BinaryOp\NotEqual::class => [ 80, 80, 80], - BinaryOp\Identical::class => [ 80, 80, 80], - BinaryOp\NotIdentical::class => [ 80, 80, 80], - BinaryOp\Spaceship::class => [ 80, 80, 80], - BinaryOp\BitwiseAnd::class => [ 90, 91, 90], - BinaryOp\BitwiseXor::class => [100, 101, 100], - BinaryOp\BitwiseOr::class => [110, 111, 110], - BinaryOp\BooleanAnd::class => [120, 121, 120], - BinaryOp\BooleanOr::class => [130, 131, 130], - BinaryOp\Coalesce::class => [140, 140, 141], - Expr\Ternary::class => [150, 150, 150], - Expr\Assign::class => [160, -1, -1], - Expr\AssignRef::class => [160, -1, -1], - AssignOp\Plus::class => [160, -1, -1], - AssignOp\Minus::class => [160, -1, -1], - AssignOp\Mul::class => [160, -1, -1], - AssignOp\Div::class => [160, -1, -1], - AssignOp\Concat::class => [160, -1, -1], - AssignOp\Mod::class => [160, -1, -1], - AssignOp\BitwiseAnd::class => [160, -1, -1], - AssignOp\BitwiseOr::class => [160, -1, -1], - AssignOp\BitwiseXor::class => [160, -1, -1], - AssignOp\ShiftLeft::class => [160, -1, -1], - AssignOp\ShiftRight::class => [160, -1, -1], - AssignOp\Pow::class => [160, -1, -1], - AssignOp\Coalesce::class => [160, -1, -1], - Expr\YieldFrom::class => [170, -1, -1], - Expr\Yield_::class => [175, -1, -1], - Expr\Print_::class => [180, -1, -1], - BinaryOp\LogicalAnd::class => [190, 191, 190], - BinaryOp\LogicalXor::class => [200, 201, 200], - BinaryOp\LogicalOr::class => [210, 211, 210], - Expr\Include_::class => [220, -1, -1], - Expr\ArrowFunction::class => [230, -1, -1], - Expr\Throw_::class => [240, -1, -1], - ]; - - /** @var int Current indentation level. */ - protected int $indentLevel; - /** @var string Newline style. Does not include current indentation. */ - protected string $newline; - /** @var string Newline including current indentation. */ - protected string $nl; - /** @var string|null Token placed at end of doc string to ensure it is followed by a newline. - * Null if flexible doc strings are used. */ - protected ?string $docStringEndToken; - /** @var bool Whether semicolon namespaces can be used (i.e. no global namespace is used) */ - protected bool $canUseSemicolonNamespaces; - /** @var bool Whether to use short array syntax if the node specifies no preference */ - protected bool $shortArraySyntax; - /** @var PhpVersion PHP version to target */ - protected PhpVersion $phpVersion; - - /** @var TokenStream|null Original tokens for use in format-preserving pretty print */ - protected ?TokenStream $origTokens; - /** @var Internal\Differ Differ for node lists */ - protected Differ $nodeListDiffer; - /** @var array Map determining whether a certain character is a label character */ - protected array $labelCharMap; - /** - * @var array> Map from token classes and subnode names to FIXUP_* constants. - * This is used during format-preserving prints to place additional parens/braces if necessary. - */ - protected array $fixupMap; - /** - * @var array Map from "{$node->getType()}->{$subNode}" - * to ['left' => $l, 'right' => $r], where $l and $r specify the token type that needs to be stripped - * when removing this node. - */ - protected array $removalMap; - /** - * @var array Map from - * "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight]. - * $find is an optional token after which the insertion occurs. $extraLeft/Right - * are optionally added before/after the main insertions. - */ - protected array $insertionMap; - /** - * @var array Map From "{$class}->{$subNode}" to string that should be inserted - * between elements of this list subnode. - */ - protected array $listInsertionMap; - - /** - * @var array - */ - protected array $emptyListInsertionMap; - /** @var array Map from "{$class}->{$subNode}" to [$printFn, $token] - * where $printFn is the function to print the modifiers and $token is the token before which - * the modifiers should be reprinted. */ - protected array $modifierChangeMap; - - /** - * Creates a pretty printer instance using the given options. - * - * Supported options: - * * PhpVersion $phpVersion: The PHP version to target (default to PHP 7.4). This option - * controls compatibility of the generated code with older PHP - * versions in cases where a simple stylistic choice exists (e.g. - * array() vs []). It is safe to pretty-print an AST for a newer - * PHP version while specifying an older target (but the result will - * of course not be compatible with the older version in that case). - * * string $newline: The newline style to use. Should be "\n" (default) or "\r\n". - * * bool $shortArraySyntax: Whether to use [] instead of array() as the default array - * syntax, if the node does not specify a format. Defaults to whether - * the phpVersion support short array syntax. - * - * @param array{ - * phpVersion?: PhpVersion, newline?: string, shortArraySyntax?: bool - * } $options Dictionary of formatting options - */ - public function __construct(array $options = []) { - $this->phpVersion = $options['phpVersion'] ?? PhpVersion::fromComponents(7, 4); - - $this->newline = $options['newline'] ?? "\n"; - if ($this->newline !== "\n" && $this->newline != "\r\n") { - throw new \LogicException('Option "newline" must be one of "\n" or "\r\n"'); - } - - $this->shortArraySyntax = - $options['shortArraySyntax'] ?? $this->phpVersion->supportsShortArraySyntax(); - $this->docStringEndToken = - $this->phpVersion->supportsFlexibleHeredoc() ? null : '_DOC_STRING_END_' . mt_rand(); - } - - /** - * Reset pretty printing state. - */ - protected function resetState(): void { - $this->indentLevel = 0; - $this->nl = $this->newline; - $this->origTokens = null; - } - - /** - * Set indentation level - * - * @param int $level Level in number of spaces - */ - protected function setIndentLevel(int $level): void { - $this->indentLevel = $level; - $this->nl = $this->newline . \str_repeat(' ', $level); - } - - /** - * Increase indentation level. - */ - protected function indent(): void { - $this->indentLevel += 4; - $this->nl .= ' '; - } - - /** - * Decrease indentation level. - */ - protected function outdent(): void { - assert($this->indentLevel >= 4); - $this->indentLevel -= 4; - $this->nl = $this->newline . str_repeat(' ', $this->indentLevel); - } - - /** - * Pretty prints an array of statements. - * - * @param Node[] $stmts Array of statements - * - * @return string Pretty printed statements - */ - public function prettyPrint(array $stmts): string { - $this->resetState(); - $this->preprocessNodes($stmts); - - return ltrim($this->handleMagicTokens($this->pStmts($stmts, false))); - } - - /** - * Pretty prints an expression. - * - * @param Expr $node Expression node - * - * @return string Pretty printed node - */ - public function prettyPrintExpr(Expr $node): string { - $this->resetState(); - return $this->handleMagicTokens($this->p($node)); - } - - /** - * Pretty prints a file of statements (includes the opening newline . $this->newline; - } - - $p = "newline . $this->newline . $this->prettyPrint($stmts); - - if ($stmts[0] instanceof Stmt\InlineHTML) { - $p = preg_replace('/^<\?php\s+\?>\r?\n?/', '', $p); - } - if ($stmts[count($stmts) - 1] instanceof Stmt\InlineHTML) { - $p = preg_replace('/<\?php$/', '', rtrim($p)); - } - - return $p; - } - - /** - * Preprocesses the top-level nodes to initialize pretty printer state. - * - * @param Node[] $nodes Array of nodes - */ - protected function preprocessNodes(array $nodes): void { - /* We can use semicolon-namespaces unless there is a global namespace declaration */ - $this->canUseSemicolonNamespaces = true; - foreach ($nodes as $node) { - if ($node instanceof Stmt\Namespace_ && null === $node->name) { - $this->canUseSemicolonNamespaces = false; - break; - } - } - } - - /** - * Handles (and removes) doc-string-end tokens. - */ - protected function handleMagicTokens(string $str): string { - if ($this->docStringEndToken !== null) { - // Replace doc-string-end tokens with nothing or a newline - $str = str_replace( - $this->docStringEndToken . ';' . $this->newline, - ';' . $this->newline, - $str); - $str = str_replace($this->docStringEndToken, $this->newline, $str); - } - - return $str; - } - - /** - * Pretty prints an array of nodes (statements) and indents them optionally. - * - * @param Node[] $nodes Array of nodes - * @param bool $indent Whether to indent the printed nodes - * - * @return string Pretty printed statements - */ - protected function pStmts(array $nodes, bool $indent = true): string { - if ($indent) { - $this->indent(); - } - - $result = ''; - foreach ($nodes as $node) { - $comments = $node->getComments(); - if ($comments) { - $result .= $this->nl . $this->pComments($comments); - if ($node instanceof Stmt\Nop) { - continue; - } - } - - $result .= $this->nl . $this->p($node); - } - - if ($indent) { - $this->outdent(); - } - - return $result; - } - - /** - * Pretty-print an infix operation while taking precedence into account. - * - * @param string $class Node class of operator - * @param Node $leftNode Left-hand side node - * @param string $operatorString String representation of the operator - * @param Node $rightNode Right-hand side node - * @param int $precedence Precedence of parent operator - * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator - * - * @return string Pretty printed infix operation - */ - protected function pInfixOp( - string $class, Node $leftNode, string $operatorString, Node $rightNode, - int $precedence, int $lhsPrecedence - ): string { - list($opPrecedence, $newPrecedenceLHS, $newPrecedenceRHS) = $this->precedenceMap[$class]; - $prefix = ''; - $suffix = ''; - if ($opPrecedence >= $precedence) { - $prefix = '('; - $suffix = ')'; - $lhsPrecedence = self::MAX_PRECEDENCE; - } - return $prefix . $this->p($leftNode, $newPrecedenceLHS, $newPrecedenceLHS) - . $operatorString . $this->p($rightNode, $newPrecedenceRHS, $lhsPrecedence) . $suffix; - } - - /** - * Pretty-print a prefix operation while taking precedence into account. - * - * @param string $class Node class of operator - * @param string $operatorString String representation of the operator - * @param Node $node Node - * @param int $precedence Precedence of parent operator - * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator - * - * @return string Pretty printed prefix operation - */ - protected function pPrefixOp(string $class, string $operatorString, Node $node, int $precedence, int $lhsPrecedence): string { - $opPrecedence = $this->precedenceMap[$class][0]; - $prefix = ''; - $suffix = ''; - if ($opPrecedence >= $lhsPrecedence) { - $prefix = '('; - $suffix = ')'; - $lhsPrecedence = self::MAX_PRECEDENCE; - } - $printedArg = $this->p($node, $opPrecedence, $lhsPrecedence); - if (($operatorString === '+' && $printedArg[0] === '+') || - ($operatorString === '-' && $printedArg[0] === '-') - ) { - // Avoid printing +(+$a) as ++$a and similar. - $printedArg = '(' . $printedArg . ')'; - } - return $prefix . $operatorString . $printedArg . $suffix; - } - - /** - * Pretty-print a postfix operation while taking precedence into account. - * - * @param string $class Node class of operator - * @param string $operatorString String representation of the operator - * @param Node $node Node - * @param int $precedence Precedence of parent operator - * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator - * - * @return string Pretty printed postfix operation - */ - protected function pPostfixOp(string $class, Node $node, string $operatorString, int $precedence, int $lhsPrecedence): string { - $opPrecedence = $this->precedenceMap[$class][0]; - $prefix = ''; - $suffix = ''; - if ($opPrecedence >= $precedence) { - $prefix = '('; - $suffix = ')'; - $lhsPrecedence = self::MAX_PRECEDENCE; - } - if ($opPrecedence < $lhsPrecedence) { - $lhsPrecedence = $opPrecedence; - } - return $prefix . $this->p($node, $opPrecedence, $lhsPrecedence) . $operatorString . $suffix; - } - - /** - * Pretty prints an array of nodes and implodes the printed values. - * - * @param Node[] $nodes Array of Nodes to be printed - * @param string $glue Character to implode with - * - * @return string Imploded pretty printed nodes> $pre - */ - protected function pImplode(array $nodes, string $glue = ''): string { - $pNodes = []; - foreach ($nodes as $node) { - if (null === $node) { - $pNodes[] = ''; - } else { - $pNodes[] = $this->p($node); - } - } - - return implode($glue, $pNodes); - } - - /** - * Pretty prints an array of nodes and implodes the printed values with commas. - * - * @param Node[] $nodes Array of Nodes to be printed - * - * @return string Comma separated pretty printed nodes - */ - protected function pCommaSeparated(array $nodes): string { - return $this->pImplode($nodes, ', '); - } - - /** - * Pretty prints a comma-separated list of nodes in multiline style, including comments. - * - * The result includes a leading newline and one level of indentation (same as pStmts). - * - * @param Node[] $nodes Array of Nodes to be printed - * @param bool $trailingComma Whether to use a trailing comma - * - * @return string Comma separated pretty printed nodes in multiline style - */ - protected function pCommaSeparatedMultiline(array $nodes, bool $trailingComma): string { - $this->indent(); - - $result = ''; - $lastIdx = count($nodes) - 1; - foreach ($nodes as $idx => $node) { - if ($node !== null) { - $comments = $node->getComments(); - if ($comments) { - $result .= $this->nl . $this->pComments($comments); - } - - $result .= $this->nl . $this->p($node); - } else { - $result .= $this->nl; - } - if ($trailingComma || $idx !== $lastIdx) { - $result .= ','; - } - } - - $this->outdent(); - return $result; - } - - /** - * Prints reformatted text of the passed comments. - * - * @param Comment[] $comments List of comments - * - * @return string Reformatted text of comments - */ - protected function pComments(array $comments): string { - $formattedComments = []; - - foreach ($comments as $comment) { - $formattedComments[] = str_replace("\n", $this->nl, $comment->getReformattedText()); - } - - return implode($this->nl, $formattedComments); - } - - /** - * Perform a format-preserving pretty print of an AST. - * - * The format preservation is best effort. For some changes to the AST the formatting will not - * be preserved (at least not locally). - * - * In order to use this method a number of prerequisites must be satisfied: - * * The startTokenPos and endTokenPos attributes in the lexer must be enabled. - * * The CloningVisitor must be run on the AST prior to modification. - * * The original tokens must be provided, using the getTokens() method on the lexer. - * - * @param Node[] $stmts Modified AST with links to original AST - * @param Node[] $origStmts Original AST with token offset information - * @param Token[] $origTokens Tokens of the original code - */ - public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens): string { - $this->initializeNodeListDiffer(); - $this->initializeLabelCharMap(); - $this->initializeFixupMap(); - $this->initializeRemovalMap(); - $this->initializeInsertionMap(); - $this->initializeListInsertionMap(); - $this->initializeEmptyListInsertionMap(); - $this->initializeModifierChangeMap(); - - $this->resetState(); - $this->origTokens = new TokenStream($origTokens); - - $this->preprocessNodes($stmts); - - $pos = 0; - $result = $this->pArray($stmts, $origStmts, $pos, 0, 'File', 'stmts', null); - if (null !== $result) { - $result .= $this->origTokens->getTokenCode($pos, count($origTokens) - 1, 0); - } else { - // Fallback - // TODO Add newline . $this->pStmts($stmts, false); - } - - return $this->handleMagicTokens($result); - } - - protected function pFallback(Node $node, int $precedence, int $lhsPrecedence): string { - return $this->{'p' . $node->getType()}($node, $precedence, $lhsPrecedence); - } - - /** - * Pretty prints a node. - * - * This method also handles formatting preservation for nodes. - * - * @param Node $node Node to be pretty printed - * @param int $precedence Precedence of parent operator - * @param int $lhsPrecedence Precedence for unary operator on LHS of binary operator - * @param bool $parentFormatPreserved Whether parent node has preserved formatting - * - * @return string Pretty printed node - */ - protected function p( - Node $node, int $precedence = self::MAX_PRECEDENCE, int $lhsPrecedence = self::MAX_PRECEDENCE, - bool $parentFormatPreserved = false - ): string { - // No orig tokens means this is a normal pretty print without preservation of formatting - if (!$this->origTokens) { - return $this->{'p' . $node->getType()}($node, $precedence, $lhsPrecedence); - } - - /** @var Node|null $origNode */ - $origNode = $node->getAttribute('origNode'); - if (null === $origNode) { - return $this->pFallback($node, $precedence, $lhsPrecedence); - } - - $class = \get_class($node); - \assert($class === \get_class($origNode)); - - $startPos = $origNode->getStartTokenPos(); - $endPos = $origNode->getEndTokenPos(); - \assert($startPos >= 0 && $endPos >= 0); - - $fallbackNode = $node; - if ($node instanceof Expr\New_ && $node->class instanceof Stmt\Class_) { - // Normalize node structure of anonymous classes - assert($origNode instanceof Expr\New_); - $node = PrintableNewAnonClassNode::fromNewNode($node); - $origNode = PrintableNewAnonClassNode::fromNewNode($origNode); - $class = PrintableNewAnonClassNode::class; - } - - // InlineHTML node does not contain closing and opening PHP tags. If the parent formatting - // is not preserved, then we need to use the fallback code to make sure the tags are - // printed. - if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - - $indentAdjustment = $this->indentLevel - $this->origTokens->getIndentationBefore($startPos); - - $type = $node->getType(); - $fixupInfo = $this->fixupMap[$class] ?? null; - - $result = ''; - $pos = $startPos; - foreach ($node->getSubNodeNames() as $subNodeName) { - $subNode = $node->$subNodeName; - $origSubNode = $origNode->$subNodeName; - - if ((!$subNode instanceof Node && $subNode !== null) - || (!$origSubNode instanceof Node && $origSubNode !== null) - ) { - if ($subNode === $origSubNode) { - // Unchanged, can reuse old code - continue; - } - - if (is_array($subNode) && is_array($origSubNode)) { - // Array subnode changed, we might be able to reconstruct it - $listResult = $this->pArray( - $subNode, $origSubNode, $pos, $indentAdjustment, $class, $subNodeName, - $fixupInfo[$subNodeName] ?? null - ); - if (null === $listResult) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - - $result .= $listResult; - continue; - } - - // Check if this is a modifier change - $key = $class . '->' . $subNodeName; - if (!isset($this->modifierChangeMap[$key])) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - - [$printFn, $findToken] = $this->modifierChangeMap[$key]; - $result .= $this->$printFn($subNode); - $pos = $this->origTokens->findRight($pos, $findToken); - continue; - } - - $extraLeft = ''; - $extraRight = ''; - if ($origSubNode !== null) { - $subStartPos = $origSubNode->getStartTokenPos(); - $subEndPos = $origSubNode->getEndTokenPos(); - \assert($subStartPos >= 0 && $subEndPos >= 0); - } else { - if ($subNode === null) { - // Both null, nothing to do - continue; - } - - // A node has been inserted, check if we have insertion information for it - $key = $type . '->' . $subNodeName; - if (!isset($this->insertionMap[$key])) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - - list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key]; - if (null !== $findToken) { - $subStartPos = $this->origTokens->findRight($pos, $findToken) - + (int) !$beforeToken; - } else { - $subStartPos = $pos; - } - - if (null === $extraLeft && null !== $extraRight) { - // If inserting on the right only, skipping whitespace looks better - $subStartPos = $this->origTokens->skipRightWhitespace($subStartPos); - } - $subEndPos = $subStartPos - 1; - } - - if (null === $subNode) { - // A node has been removed, check if we have removal information for it - $key = $type . '->' . $subNodeName; - if (!isset($this->removalMap[$key])) { - return $this->pFallback($fallbackNode, $precedence, $lhsPrecedence); - } - - // Adjust positions to account for additional tokens that must be skipped - $removalInfo = $this->removalMap[$key]; - if (isset($removalInfo['left'])) { - $subStartPos = $this->origTokens->skipLeft($subStartPos - 1, $removalInfo['left']) + 1; - } - if (isset($removalInfo['right'])) { - $subEndPos = $this->origTokens->skipRight($subEndPos + 1, $removalInfo['right']) - 1; - } - } - - $result .= $this->origTokens->getTokenCode($pos, $subStartPos, $indentAdjustment); - - if (null !== $subNode) { - $result .= $extraLeft; - - $origIndentLevel = $this->indentLevel; - $this->setIndentLevel($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment); - - // If it's the same node that was previously in this position, it certainly doesn't - // need fixup. It's important to check this here, because our fixup checks are more - // conservative than strictly necessary. - if (isset($fixupInfo[$subNodeName]) - && $subNode->getAttribute('origNode') !== $origSubNode - ) { - $fixup = $fixupInfo[$subNodeName]; - $res = $this->pFixup($fixup, $subNode, $class, $subStartPos, $subEndPos); - } else { - $res = $this->p($subNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, true); - } - - $this->safeAppend($result, $res); - $this->setIndentLevel($origIndentLevel); - - $result .= $extraRight; - } - - $pos = $subEndPos + 1; - } - - $result .= $this->origTokens->getTokenCode($pos, $endPos + 1, $indentAdjustment); - return $result; - } - - /** - * Perform a format-preserving pretty print of an array. - * - * @param Node[] $nodes New nodes - * @param Node[] $origNodes Original nodes - * @param int $pos Current token position (updated by reference) - * @param int $indentAdjustment Adjustment for indentation - * @param string $parentNodeClass Class of the containing node. - * @param string $subNodeName Name of array subnode. - * @param null|int $fixup Fixup information for array item nodes - * - * @return null|string Result of pretty print or null if cannot preserve formatting - */ - protected function pArray( - array $nodes, array $origNodes, int &$pos, int $indentAdjustment, - string $parentNodeClass, string $subNodeName, ?int $fixup - ): ?string { - $diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes); - - $mapKey = $parentNodeClass . '->' . $subNodeName; - $insertStr = $this->listInsertionMap[$mapKey] ?? null; - $isStmtList = $subNodeName === 'stmts'; - - $beforeFirstKeepOrReplace = true; - $skipRemovedNode = false; - $delayedAdd = []; - $lastElemIndentLevel = $this->indentLevel; - - $insertNewline = false; - if ($insertStr === "\n") { - $insertStr = ''; - $insertNewline = true; - } - - if ($isStmtList && \count($origNodes) === 1 && \count($nodes) !== 1) { - $startPos = $origNodes[0]->getStartTokenPos(); - $endPos = $origNodes[0]->getEndTokenPos(); - \assert($startPos >= 0 && $endPos >= 0); - if (!$this->origTokens->haveBraces($startPos, $endPos)) { - // This was a single statement without braces, but either additional statements - // have been added, or the single statement has been removed. This requires the - // addition of braces. For now fall back. - // TODO: Try to preserve formatting - return null; - } - } - - $result = ''; - foreach ($diff as $i => $diffElem) { - $diffType = $diffElem->type; - /** @var Node|string|null $arrItem */ - $arrItem = $diffElem->new; - /** @var Node|string|null $origArrItem */ - $origArrItem = $diffElem->old; - - if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) { - $beforeFirstKeepOrReplace = false; - - if ($origArrItem === null || $arrItem === null) { - // We can only handle the case where both are null - if ($origArrItem === $arrItem) { - continue; - } - return null; - } - - if (!$arrItem instanceof Node || !$origArrItem instanceof Node) { - // We can only deal with nodes. This can occur for Names, which use string arrays. - return null; - } - - $itemStartPos = $origArrItem->getStartTokenPos(); - $itemEndPos = $origArrItem->getEndTokenPos(); - \assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos); - - $origIndentLevel = $this->indentLevel; - $lastElemIndentLevel = $this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment; - $this->setIndentLevel($lastElemIndentLevel); - - $comments = $arrItem->getComments(); - $origComments = $origArrItem->getComments(); - $commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos; - \assert($commentStartPos >= 0); - - if ($commentStartPos < $pos) { - // Comments may be assigned to multiple nodes if they start at the same position. - // Make sure we don't try to print them multiple times. - $commentStartPos = $itemStartPos; - } - - if ($skipRemovedNode) { - if ($isStmtList && $this->origTokens->haveTagInRange($pos, $itemStartPos)) { - // We'd remove an opening/closing PHP tag. - // TODO: Preserve formatting. - $this->setIndentLevel($origIndentLevel); - return null; - } - } else { - $result .= $this->origTokens->getTokenCode( - $pos, $commentStartPos, $indentAdjustment); - } - - if (!empty($delayedAdd)) { - /** @var Node $delayedAddNode */ - foreach ($delayedAdd as $delayedAddNode) { - if ($insertNewline) { - $delayedAddComments = $delayedAddNode->getComments(); - if ($delayedAddComments) { - $result .= $this->pComments($delayedAddComments) . $this->nl; - } - } - - $this->safeAppend($result, $this->p($delayedAddNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, true)); - - if ($insertNewline) { - $result .= $insertStr . $this->nl; - } else { - $result .= $insertStr; - } - } - - $delayedAdd = []; - } - - if ($comments !== $origComments) { - if ($comments) { - $result .= $this->pComments($comments) . $this->nl; - } - } else { - $result .= $this->origTokens->getTokenCode( - $commentStartPos, $itemStartPos, $indentAdjustment); - } - - // If we had to remove anything, we have done so now. - $skipRemovedNode = false; - } elseif ($diffType === DiffElem::TYPE_ADD) { - if (null === $insertStr) { - // We don't have insertion information for this list type - return null; - } - - if (!$arrItem instanceof Node) { - // We only support list insertion of nodes. - return null; - } - - // We go multiline if the original code was multiline, - // or if it's an array item with a comment above it. - // Match always uses multiline formatting. - if ($insertStr === ', ' && - ($this->isMultiline($origNodes) || $arrItem->getComments() || - $parentNodeClass === Expr\Match_::class) - ) { - $insertStr = ','; - $insertNewline = true; - } - - if ($beforeFirstKeepOrReplace) { - // Will be inserted at the next "replace" or "keep" element - $delayedAdd[] = $arrItem; - continue; - } - - $itemStartPos = $pos; - $itemEndPos = $pos - 1; - - $origIndentLevel = $this->indentLevel; - $this->setIndentLevel($lastElemIndentLevel); - - if ($insertNewline) { - $result .= $insertStr . $this->nl; - $comments = $arrItem->getComments(); - if ($comments) { - $result .= $this->pComments($comments) . $this->nl; - } - } else { - $result .= $insertStr; - } - } elseif ($diffType === DiffElem::TYPE_REMOVE) { - if (!$origArrItem instanceof Node) { - // We only support removal for nodes - return null; - } - - $itemStartPos = $origArrItem->getStartTokenPos(); - $itemEndPos = $origArrItem->getEndTokenPos(); - \assert($itemStartPos >= 0 && $itemEndPos >= 0); - - // Consider comments part of the node. - $origComments = $origArrItem->getComments(); - if ($origComments) { - $itemStartPos = $origComments[0]->getStartTokenPos(); - } - - if ($i === 0) { - // If we're removing from the start, keep the tokens before the node and drop those after it, - // instead of the other way around. - $result .= $this->origTokens->getTokenCode( - $pos, $itemStartPos, $indentAdjustment); - $skipRemovedNode = true; - } else { - if ($isStmtList && $this->origTokens->haveTagInRange($pos, $itemStartPos)) { - // We'd remove an opening/closing PHP tag. - // TODO: Preserve formatting. - return null; - } - } - - $pos = $itemEndPos + 1; - continue; - } else { - throw new \Exception("Shouldn't happen"); - } - - if (null !== $fixup && $arrItem->getAttribute('origNode') !== $origArrItem) { - $res = $this->pFixup($fixup, $arrItem, null, $itemStartPos, $itemEndPos); - } else { - $res = $this->p($arrItem, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, true); - } - $this->safeAppend($result, $res); - - $this->setIndentLevel($origIndentLevel); - $pos = $itemEndPos + 1; - } - - if ($skipRemovedNode) { - // TODO: Support removing single node. - return null; - } - - if (!empty($delayedAdd)) { - if (!isset($this->emptyListInsertionMap[$mapKey])) { - return null; - } - - list($findToken, $extraLeft, $extraRight) = $this->emptyListInsertionMap[$mapKey]; - if (null !== $findToken) { - $insertPos = $this->origTokens->findRight($pos, $findToken) + 1; - $result .= $this->origTokens->getTokenCode($pos, $insertPos, $indentAdjustment); - $pos = $insertPos; - } - - $first = true; - $result .= $extraLeft; - foreach ($delayedAdd as $delayedAddNode) { - if (!$first) { - $result .= $insertStr; - if ($insertNewline) { - $result .= $this->nl; - } - } - $result .= $this->p($delayedAddNode, self::MAX_PRECEDENCE, self::MAX_PRECEDENCE, true); - $first = false; - } - $result .= $extraRight === "\n" ? $this->nl : $extraRight; - } - - return $result; - } - - /** - * Print node with fixups. - * - * Fixups here refer to the addition of extra parentheses, braces or other characters, that - * are required to preserve program semantics in a certain context (e.g. to maintain precedence - * or because only certain expressions are allowed in certain places). - * - * @param int $fixup Fixup type - * @param Node $subNode Subnode to print - * @param string|null $parentClass Class of parent node - * @param int $subStartPos Original start pos of subnode - * @param int $subEndPos Original end pos of subnode - * - * @return string Result of fixed-up print of subnode - */ - protected function pFixup(int $fixup, Node $subNode, ?string $parentClass, int $subStartPos, int $subEndPos): string { - switch ($fixup) { - case self::FIXUP_PREC_LEFT: - // We use a conservative approximation where lhsPrecedence == precedence. - if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { - $precedence = $this->precedenceMap[$parentClass][1]; - return $this->p($subNode, $precedence, $precedence); - } - break; - case self::FIXUP_PREC_RIGHT: - if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { - $precedence = $this->precedenceMap[$parentClass][2]; - return $this->p($subNode, $precedence, $precedence); - } - break; - case self::FIXUP_PREC_UNARY: - if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { - $precedence = $this->precedenceMap[$parentClass][0]; - return $this->p($subNode, $precedence, $precedence); - } - break; - case self::FIXUP_CALL_LHS: - if ($this->callLhsRequiresParens($subNode) - && !$this->origTokens->haveParens($subStartPos, $subEndPos) - ) { - return '(' . $this->p($subNode) . ')'; - } - break; - case self::FIXUP_DEREF_LHS: - if ($this->dereferenceLhsRequiresParens($subNode) - && !$this->origTokens->haveParens($subStartPos, $subEndPos) - ) { - return '(' . $this->p($subNode) . ')'; - } - break; - case self::FIXUP_STATIC_DEREF_LHS: - if ($this->staticDereferenceLhsRequiresParens($subNode) - && !$this->origTokens->haveParens($subStartPos, $subEndPos) - ) { - return '(' . $this->p($subNode) . ')'; - } - break; - case self::FIXUP_NEW: - if ($this->newOperandRequiresParens($subNode) - && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { - return '(' . $this->p($subNode) . ')'; - } - break; - case self::FIXUP_BRACED_NAME: - case self::FIXUP_VAR_BRACED_NAME: - if ($subNode instanceof Expr - && !$this->origTokens->haveBraces($subStartPos, $subEndPos) - ) { - return ($fixup === self::FIXUP_VAR_BRACED_NAME ? '$' : '') - . '{' . $this->p($subNode) . '}'; - } - break; - case self::FIXUP_ENCAPSED: - if (!$subNode instanceof Node\InterpolatedStringPart - && !$this->origTokens->haveBraces($subStartPos, $subEndPos) - ) { - return '{' . $this->p($subNode) . '}'; - } - break; - default: - throw new \Exception('Cannot happen'); - } - - // Nothing special to do - return $this->p($subNode); - } - - /** - * Appends to a string, ensuring whitespace between label characters. - * - * Example: "echo" and "$x" result in "echo$x", but "echo" and "x" result in "echo x". - * Without safeAppend the result would be "echox", which does not preserve semantics. - */ - protected function safeAppend(string &$str, string $append): void { - if ($str === "") { - $str = $append; - return; - } - - if ($append === "") { - return; - } - - if (!$this->labelCharMap[$append[0]] - || !$this->labelCharMap[$str[\strlen($str) - 1]]) { - $str .= $append; - } else { - $str .= " " . $append; - } - } - - /** - * Determines whether the LHS of a call must be wrapped in parenthesis. - * - * @param Node $node LHS of a call - * - * @return bool Whether parentheses are required - */ - protected function callLhsRequiresParens(Node $node): bool { - return !($node instanceof Node\Name - || $node instanceof Expr\Variable - || $node instanceof Expr\ArrayDimFetch - || $node instanceof Expr\FuncCall - || $node instanceof Expr\MethodCall - || $node instanceof Expr\NullsafeMethodCall - || $node instanceof Expr\StaticCall - || $node instanceof Expr\Array_); - } - - /** - * Determines whether the LHS of an array/object operation must be wrapped in parentheses. - * - * @param Node $node LHS of dereferencing operation - * - * @return bool Whether parentheses are required - */ - protected function dereferenceLhsRequiresParens(Node $node): bool { - // A constant can occur on the LHS of an array/object deref, but not a static deref. - return $this->staticDereferenceLhsRequiresParens($node) - && !$node instanceof Expr\ConstFetch; - } - - /** - * Determines whether the LHS of a static operation must be wrapped in parentheses. - * - * @param Node $node LHS of dereferencing operation - * - * @return bool Whether parentheses are required - */ - protected function staticDereferenceLhsRequiresParens(Node $node): bool { - return !($node instanceof Expr\Variable - || $node instanceof Node\Name - || $node instanceof Expr\ArrayDimFetch - || $node instanceof Expr\PropertyFetch - || $node instanceof Expr\NullsafePropertyFetch - || $node instanceof Expr\StaticPropertyFetch - || $node instanceof Expr\FuncCall - || $node instanceof Expr\MethodCall - || $node instanceof Expr\NullsafeMethodCall - || $node instanceof Expr\StaticCall - || $node instanceof Expr\Array_ - || $node instanceof Scalar\String_ - || $node instanceof Expr\ClassConstFetch); - } - - /** - * Determines whether an expression used in "new" or "instanceof" requires parentheses. - * - * @param Node $node New or instanceof operand - * - * @return bool Whether parentheses are required - */ - protected function newOperandRequiresParens(Node $node): bool { - if ($node instanceof Node\Name || $node instanceof Expr\Variable) { - return false; - } - if ($node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || - $node instanceof Expr\NullsafePropertyFetch - ) { - return $this->newOperandRequiresParens($node->var); - } - if ($node instanceof Expr\StaticPropertyFetch) { - return $this->newOperandRequiresParens($node->class); - } - return true; - } - - /** - * Print modifiers, including trailing whitespace. - * - * @param int $modifiers Modifier mask to print - * - * @return string Printed modifiers - */ - protected function pModifiers(int $modifiers): string { - return ($modifiers & Modifiers::FINAL ? 'final ' : '') - . ($modifiers & Modifiers::ABSTRACT ? 'abstract ' : '') - . ($modifiers & Modifiers::PUBLIC ? 'public ' : '') - . ($modifiers & Modifiers::PROTECTED ? 'protected ' : '') - . ($modifiers & Modifiers::PRIVATE ? 'private ' : '') - . ($modifiers & Modifiers::PUBLIC_SET ? 'public(set) ' : '') - . ($modifiers & Modifiers::PROTECTED_SET ? 'protected(set) ' : '') - . ($modifiers & Modifiers::PRIVATE_SET ? 'private(set) ' : '') - . ($modifiers & Modifiers::STATIC ? 'static ' : '') - . ($modifiers & Modifiers::READONLY ? 'readonly ' : ''); - } - - protected function pStatic(bool $static): string { - return $static ? 'static ' : ''; - } - - /** - * Determine whether a list of nodes uses multiline formatting. - * - * @param (Node|null)[] $nodes Node list - * - * @return bool Whether multiline formatting is used - */ - protected function isMultiline(array $nodes): bool { - if (\count($nodes) < 2) { - return false; - } - - $pos = -1; - foreach ($nodes as $node) { - if (null === $node) { - continue; - } - - $endPos = $node->getEndTokenPos() + 1; - if ($pos >= 0) { - $text = $this->origTokens->getTokenCode($pos, $endPos, 0); - if (false === strpos($text, "\n")) { - // We require that a newline is present between *every* item. If the formatting - // is inconsistent, with only some items having newlines, we don't consider it - // as multiline - return false; - } - } - $pos = $endPos; - } - - return true; - } - - /** - * Lazily initializes label char map. - * - * The label char map determines whether a certain character may occur in a label. - */ - protected function initializeLabelCharMap(): void { - if (isset($this->labelCharMap)) { - return; - } - - $this->labelCharMap = []; - for ($i = 0; $i < 256; $i++) { - $chr = chr($i); - $this->labelCharMap[$chr] = $i >= 0x80 || ctype_alnum($chr); - } - - if ($this->phpVersion->allowsDelInIdentifiers()) { - $this->labelCharMap["\x7f"] = true; - } - } - - /** - * Lazily initializes node list differ. - * - * The node list differ is used to determine differences between two array subnodes. - */ - protected function initializeNodeListDiffer(): void { - if (isset($this->nodeListDiffer)) { - return; - } - - $this->nodeListDiffer = new Internal\Differ(function ($a, $b) { - if ($a instanceof Node && $b instanceof Node) { - return $a === $b->getAttribute('origNode'); - } - // Can happen for array destructuring - return $a === null && $b === null; - }); - } - - /** - * Lazily initializes fixup map. - * - * The fixup map is used to determine whether a certain subnode of a certain node may require - * some kind of "fixup" operation, e.g. the addition of parenthesis or braces. - */ - protected function initializeFixupMap(): void { - if (isset($this->fixupMap)) { - return; - } - - $this->fixupMap = [ - Expr\Instanceof_::class => [ - 'expr' => self::FIXUP_PREC_UNARY, - 'class' => self::FIXUP_NEW, - ], - Expr\Ternary::class => [ - 'cond' => self::FIXUP_PREC_LEFT, - 'else' => self::FIXUP_PREC_RIGHT, - ], - Expr\Yield_::class => ['value' => self::FIXUP_PREC_UNARY], - - Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS], - Expr\StaticCall::class => ['class' => self::FIXUP_STATIC_DEREF_LHS], - Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], - Expr\ClassConstFetch::class => [ - 'class' => self::FIXUP_STATIC_DEREF_LHS, - 'name' => self::FIXUP_BRACED_NAME, - ], - Expr\New_::class => ['class' => self::FIXUP_NEW], - Expr\MethodCall::class => [ - 'var' => self::FIXUP_DEREF_LHS, - 'name' => self::FIXUP_BRACED_NAME, - ], - Expr\NullsafeMethodCall::class => [ - 'var' => self::FIXUP_DEREF_LHS, - 'name' => self::FIXUP_BRACED_NAME, - ], - Expr\StaticPropertyFetch::class => [ - 'class' => self::FIXUP_STATIC_DEREF_LHS, - 'name' => self::FIXUP_VAR_BRACED_NAME, - ], - Expr\PropertyFetch::class => [ - 'var' => self::FIXUP_DEREF_LHS, - 'name' => self::FIXUP_BRACED_NAME, - ], - Expr\NullsafePropertyFetch::class => [ - 'var' => self::FIXUP_DEREF_LHS, - 'name' => self::FIXUP_BRACED_NAME, - ], - Scalar\InterpolatedString::class => [ - 'parts' => self::FIXUP_ENCAPSED, - ], - ]; - - $binaryOps = [ - BinaryOp\Pow::class, BinaryOp\Mul::class, BinaryOp\Div::class, BinaryOp\Mod::class, - BinaryOp\Plus::class, BinaryOp\Minus::class, BinaryOp\Concat::class, - BinaryOp\ShiftLeft::class, BinaryOp\ShiftRight::class, BinaryOp\Smaller::class, - BinaryOp\SmallerOrEqual::class, BinaryOp\Greater::class, BinaryOp\GreaterOrEqual::class, - BinaryOp\Equal::class, BinaryOp\NotEqual::class, BinaryOp\Identical::class, - BinaryOp\NotIdentical::class, BinaryOp\Spaceship::class, BinaryOp\BitwiseAnd::class, - BinaryOp\BitwiseXor::class, BinaryOp\BitwiseOr::class, BinaryOp\BooleanAnd::class, - BinaryOp\BooleanOr::class, BinaryOp\Coalesce::class, BinaryOp\LogicalAnd::class, - BinaryOp\LogicalXor::class, BinaryOp\LogicalOr::class, - ]; - foreach ($binaryOps as $binaryOp) { - $this->fixupMap[$binaryOp] = [ - 'left' => self::FIXUP_PREC_LEFT, - 'right' => self::FIXUP_PREC_RIGHT - ]; - } - - $prefixOps = [ - Expr\Clone_::class, Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class, - Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class, - Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class, - Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class, - Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class, - AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class, - AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class, - AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class, - Expr\ArrowFunction::class, Expr\Throw_::class, - ]; - foreach ($prefixOps as $prefixOp) { - $this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_UNARY]; - } - } - - /** - * Lazily initializes the removal map. - * - * The removal map is used to determine which additional tokens should be removed when a - * certain node is replaced by null. - */ - protected function initializeRemovalMap(): void { - if (isset($this->removalMap)) { - return; - } - - $stripBoth = ['left' => \T_WHITESPACE, 'right' => \T_WHITESPACE]; - $stripLeft = ['left' => \T_WHITESPACE]; - $stripRight = ['right' => \T_WHITESPACE]; - $stripDoubleArrow = ['right' => \T_DOUBLE_ARROW]; - $stripColon = ['left' => ':']; - $stripEquals = ['left' => '=']; - $this->removalMap = [ - 'Expr_ArrayDimFetch->dim' => $stripBoth, - 'ArrayItem->key' => $stripDoubleArrow, - 'Expr_ArrowFunction->returnType' => $stripColon, - 'Expr_Closure->returnType' => $stripColon, - 'Expr_Exit->expr' => $stripBoth, - 'Expr_Ternary->if' => $stripBoth, - 'Expr_Yield->key' => $stripDoubleArrow, - 'Expr_Yield->value' => $stripBoth, - 'Param->type' => $stripRight, - 'Param->default' => $stripEquals, - 'Stmt_Break->num' => $stripBoth, - 'Stmt_Catch->var' => $stripLeft, - 'Stmt_ClassConst->type' => $stripRight, - 'Stmt_ClassMethod->returnType' => $stripColon, - 'Stmt_Class->extends' => ['left' => \T_EXTENDS], - 'Stmt_Enum->scalarType' => $stripColon, - 'Stmt_EnumCase->expr' => $stripEquals, - 'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS], - 'Stmt_Continue->num' => $stripBoth, - 'Stmt_Foreach->keyVar' => $stripDoubleArrow, - 'Stmt_Function->returnType' => $stripColon, - 'Stmt_If->else' => $stripLeft, - 'Stmt_Namespace->name' => $stripLeft, - 'Stmt_Property->type' => $stripRight, - 'PropertyItem->default' => $stripEquals, - 'Stmt_Return->expr' => $stripBoth, - 'Stmt_StaticVar->default' => $stripEquals, - 'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft, - 'Stmt_TryCatch->finally' => $stripLeft, - // 'Stmt_Case->cond': Replace with "default" - // 'Stmt_Class->name': Unclear what to do - // 'Stmt_Declare->stmts': Not a plain node - // 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a plain node - ]; - } - - protected function initializeInsertionMap(): void { - if (isset($this->insertionMap)) { - return; - } - - // TODO: "yield" where both key and value are inserted doesn't work - // [$find, $beforeToken, $extraLeft, $extraRight] - $this->insertionMap = [ - 'Expr_ArrayDimFetch->dim' => ['[', false, null, null], - 'ArrayItem->key' => [null, false, null, ' => '], - 'Expr_ArrowFunction->returnType' => [')', false, ': ', null], - 'Expr_Closure->returnType' => [')', false, ': ', null], - 'Expr_Ternary->if' => ['?', false, ' ', ' '], - 'Expr_Yield->key' => [\T_YIELD, false, null, ' => '], - 'Expr_Yield->value' => [\T_YIELD, false, ' ', null], - 'Param->type' => [null, false, null, ' '], - 'Param->default' => [null, false, ' = ', null], - 'Stmt_Break->num' => [\T_BREAK, false, ' ', null], - 'Stmt_Catch->var' => [null, false, ' ', null], - 'Stmt_ClassMethod->returnType' => [')', false, ': ', null], - 'Stmt_ClassConst->type' => [\T_CONST, false, ' ', null], - 'Stmt_Class->extends' => [null, false, ' extends ', null], - 'Stmt_Enum->scalarType' => [null, false, ' : ', null], - 'Stmt_EnumCase->expr' => [null, false, ' = ', null], - 'Expr_PrintableNewAnonClass->extends' => [null, false, ' extends ', null], - 'Stmt_Continue->num' => [\T_CONTINUE, false, ' ', null], - 'Stmt_Foreach->keyVar' => [\T_AS, false, null, ' => '], - 'Stmt_Function->returnType' => [')', false, ': ', null], - 'Stmt_If->else' => [null, false, ' ', null], - 'Stmt_Namespace->name' => [\T_NAMESPACE, false, ' ', null], - 'Stmt_Property->type' => [\T_VARIABLE, true, null, ' '], - 'PropertyItem->default' => [null, false, ' = ', null], - 'Stmt_Return->expr' => [\T_RETURN, false, ' ', null], - 'Stmt_StaticVar->default' => [null, false, ' = ', null], - //'Stmt_TraitUseAdaptation_Alias->newName' => [T_AS, false, ' ', null], // TODO - 'Stmt_TryCatch->finally' => [null, false, ' ', null], - - // 'Expr_Exit->expr': Complicated due to optional () - // 'Stmt_Case->cond': Conversion from default to case - // 'Stmt_Class->name': Unclear - // 'Stmt_Declare->stmts': Not a proper node - // 'Stmt_TraitUseAdaptation_Alias->newModifier': Not a proper node - ]; - } - - protected function initializeListInsertionMap(): void { - if (isset($this->listInsertionMap)) { - return; - } - - $this->listInsertionMap = [ - // special - //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully - //'Scalar_InterpolatedString->parts' => '', - Stmt\Catch_::class . '->types' => '|', - UnionType::class . '->types' => '|', - IntersectionType::class . '->types' => '&', - Stmt\If_::class . '->elseifs' => ' ', - Stmt\TryCatch::class . '->catches' => ' ', - - // comma-separated lists - Expr\Array_::class . '->items' => ', ', - Expr\ArrowFunction::class . '->params' => ', ', - Expr\Closure::class . '->params' => ', ', - Expr\Closure::class . '->uses' => ', ', - Expr\FuncCall::class . '->args' => ', ', - Expr\Isset_::class . '->vars' => ', ', - Expr\List_::class . '->items' => ', ', - Expr\MethodCall::class . '->args' => ', ', - Expr\NullsafeMethodCall::class . '->args' => ', ', - Expr\New_::class . '->args' => ', ', - PrintableNewAnonClassNode::class . '->args' => ', ', - Expr\StaticCall::class . '->args' => ', ', - Stmt\ClassConst::class . '->consts' => ', ', - Stmt\ClassMethod::class . '->params' => ', ', - Stmt\Class_::class . '->implements' => ', ', - Stmt\Enum_::class . '->implements' => ', ', - PrintableNewAnonClassNode::class . '->implements' => ', ', - Stmt\Const_::class . '->consts' => ', ', - Stmt\Declare_::class . '->declares' => ', ', - Stmt\Echo_::class . '->exprs' => ', ', - Stmt\For_::class . '->init' => ', ', - Stmt\For_::class . '->cond' => ', ', - Stmt\For_::class . '->loop' => ', ', - Stmt\Function_::class . '->params' => ', ', - Stmt\Global_::class . '->vars' => ', ', - Stmt\GroupUse::class . '->uses' => ', ', - Stmt\Interface_::class . '->extends' => ', ', - Expr\Match_::class . '->arms' => ', ', - Stmt\Property::class . '->props' => ', ', - Stmt\StaticVar::class . '->vars' => ', ', - Stmt\TraitUse::class . '->traits' => ', ', - Stmt\TraitUseAdaptation\Precedence::class . '->insteadof' => ', ', - Stmt\Unset_::class . '->vars' => ', ', - Stmt\UseUse::class . '->uses' => ', ', - MatchArm::class . '->conds' => ', ', - AttributeGroup::class . '->attrs' => ', ', - PropertyHook::class . '->params' => ', ', - - // statement lists - Expr\Closure::class . '->stmts' => "\n", - Stmt\Case_::class . '->stmts' => "\n", - Stmt\Catch_::class . '->stmts' => "\n", - Stmt\Class_::class . '->stmts' => "\n", - Stmt\Enum_::class . '->stmts' => "\n", - PrintableNewAnonClassNode::class . '->stmts' => "\n", - Stmt\Interface_::class . '->stmts' => "\n", - Stmt\Trait_::class . '->stmts' => "\n", - Stmt\ClassMethod::class . '->stmts' => "\n", - Stmt\Declare_::class . '->stmts' => "\n", - Stmt\Do_::class . '->stmts' => "\n", - Stmt\ElseIf_::class . '->stmts' => "\n", - Stmt\Else_::class . '->stmts' => "\n", - Stmt\Finally_::class . '->stmts' => "\n", - Stmt\Foreach_::class . '->stmts' => "\n", - Stmt\For_::class . '->stmts' => "\n", - Stmt\Function_::class . '->stmts' => "\n", - Stmt\If_::class . '->stmts' => "\n", - Stmt\Namespace_::class . '->stmts' => "\n", - Stmt\Block::class . '->stmts' => "\n", - - // Attribute groups - Stmt\Class_::class . '->attrGroups' => "\n", - Stmt\Enum_::class . '->attrGroups' => "\n", - Stmt\EnumCase::class . '->attrGroups' => "\n", - Stmt\Interface_::class . '->attrGroups' => "\n", - Stmt\Trait_::class . '->attrGroups' => "\n", - Stmt\Function_::class . '->attrGroups' => "\n", - Stmt\ClassMethod::class . '->attrGroups' => "\n", - Stmt\ClassConst::class . '->attrGroups' => "\n", - Stmt\Property::class . '->attrGroups' => "\n", - PrintableNewAnonClassNode::class . '->attrGroups' => ' ', - Expr\Closure::class . '->attrGroups' => ' ', - Expr\ArrowFunction::class . '->attrGroups' => ' ', - Param::class . '->attrGroups' => ' ', - PropertyHook::class . '->attrGroups' => ' ', - - Stmt\Switch_::class . '->cases' => "\n", - Stmt\TraitUse::class . '->adaptations' => "\n", - Stmt\TryCatch::class . '->stmts' => "\n", - Stmt\While_::class . '->stmts' => "\n", - PropertyHook::class . '->body' => "\n", - Stmt\Property::class . '->hooks' => "\n", - Param::class . '->hooks' => "\n", - - // dummy for top-level context - 'File->stmts' => "\n", - ]; - } - - protected function initializeEmptyListInsertionMap(): void { - if (isset($this->emptyListInsertionMap)) { - return; - } - - // TODO Insertion into empty statement lists. - - // [$find, $extraLeft, $extraRight] - $this->emptyListInsertionMap = [ - Expr\ArrowFunction::class . '->params' => ['(', '', ''], - Expr\Closure::class . '->uses' => [')', ' use (', ')'], - Expr\Closure::class . '->params' => ['(', '', ''], - Expr\FuncCall::class . '->args' => ['(', '', ''], - Expr\MethodCall::class . '->args' => ['(', '', ''], - Expr\NullsafeMethodCall::class . '->args' => ['(', '', ''], - Expr\New_::class . '->args' => ['(', '', ''], - PrintableNewAnonClassNode::class . '->args' => ['(', '', ''], - PrintableNewAnonClassNode::class . '->implements' => [null, ' implements ', ''], - Expr\StaticCall::class . '->args' => ['(', '', ''], - Stmt\Class_::class . '->implements' => [null, ' implements ', ''], - Stmt\Enum_::class . '->implements' => [null, ' implements ', ''], - Stmt\ClassMethod::class . '->params' => ['(', '', ''], - Stmt\Interface_::class . '->extends' => [null, ' extends ', ''], - Stmt\Function_::class . '->params' => ['(', '', ''], - Stmt\Interface_::class . '->attrGroups' => [null, '', "\n"], - Stmt\Class_::class . '->attrGroups' => [null, '', "\n"], - Stmt\ClassConst::class . '->attrGroups' => [null, '', "\n"], - Stmt\ClassMethod::class . '->attrGroups' => [null, '', "\n"], - Stmt\Function_::class . '->attrGroups' => [null, '', "\n"], - Stmt\Property::class . '->attrGroups' => [null, '', "\n"], - Stmt\Trait_::class . '->attrGroups' => [null, '', "\n"], - Expr\ArrowFunction::class . '->attrGroups' => [null, '', ' '], - Expr\Closure::class . '->attrGroups' => [null, '', ' '], - PrintableNewAnonClassNode::class . '->attrGroups' => [\T_NEW, ' ', ''], - - /* These cannot be empty to start with: - * Expr_Isset->vars - * Stmt_Catch->types - * Stmt_Const->consts - * Stmt_ClassConst->consts - * Stmt_Declare->declares - * Stmt_Echo->exprs - * Stmt_Global->vars - * Stmt_GroupUse->uses - * Stmt_Property->props - * Stmt_StaticVar->vars - * Stmt_TraitUse->traits - * Stmt_TraitUseAdaptation_Precedence->insteadof - * Stmt_Unset->vars - * Stmt_Use->uses - * UnionType->types - */ - - /* TODO - * Stmt_If->elseifs - * Stmt_TryCatch->catches - * Expr_Array->items - * Expr_List->items - * Stmt_For->init - * Stmt_For->cond - * Stmt_For->loop - */ - ]; - } - - protected function initializeModifierChangeMap(): void { - if (isset($this->modifierChangeMap)) { - return; - } - - $this->modifierChangeMap = [ - Stmt\ClassConst::class . '->flags' => ['pModifiers', \T_CONST], - Stmt\ClassMethod::class . '->flags' => ['pModifiers', \T_FUNCTION], - Stmt\Class_::class . '->flags' => ['pModifiers', \T_CLASS], - Stmt\Property::class . '->flags' => ['pModifiers', \T_VARIABLE], - PrintableNewAnonClassNode::class . '->flags' => ['pModifiers', \T_CLASS], - Param::class . '->flags' => ['pModifiers', \T_VARIABLE], - PropertyHook::class . '->flags' => ['pModifiers', \T_STRING], - Expr\Closure::class . '->static' => ['pStatic', \T_FUNCTION], - Expr\ArrowFunction::class . '->static' => ['pStatic', \T_FN], - //Stmt\TraitUseAdaptation\Alias::class . '->newModifier' => 0, // TODO - ]; - - // List of integer subnodes that are not modifiers: - // Expr_Include->type - // Stmt_GroupUse->type - // Stmt_Use->type - // UseItem->type - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/Token.php b/vendor/nikic/php-parser/lib/PhpParser/Token.php deleted file mode 100644 index 6683310..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/Token.php +++ /dev/null @@ -1,18 +0,0 @@ -pos + \strlen($this->text); - } - - /** Get 1-based end line number of the token. */ - public function getEndLine(): int { - return $this->line + \substr_count($this->text, "\n"); - } -} diff --git a/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php b/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php deleted file mode 100644 index 13576c4..0000000 --- a/vendor/nikic/php-parser/lib/PhpParser/compatibility_tokens.php +++ /dev/null @@ -1,68 +0,0 @@ -registerCustomFixers([ - new \PharIo\CSFixer\PhpdocSingleLineVarFixer() - ]) - ->setRiskyAllowed(true) - ->setRules( - [ - 'PharIo/phpdoc_single_line_var_fixer' => true, - - 'align_multiline_comment' => true, - 'array_indentation' => true, - 'array_syntax' => ['syntax' => 'short'], - 'binary_operator_spaces' => [ - 'operators' => [ - '=' => 'align', - '=>' => 'align', - ], - ], - 'blank_line_after_namespace' => true, - 'blank_line_after_opening_tag' => false, - 'blank_line_before_statement' => [ - 'statements' => [ - 'break', - 'continue', - 'declare', - 'do', - 'for', - 'foreach', - 'if', - 'include', - 'include_once', - 'require', - 'require_once', - 'return', - 'switch', - 'throw', - 'try', - 'while', - 'yield', - ], - ], - 'braces' => [ - 'allow_single_line_closure' => false, - 'position_after_anonymous_constructs' => 'same', - 'position_after_control_structures' => 'same', - 'position_after_functions_and_oop_constructs' => 'same' - ], - 'cast_spaces' => ['space' => 'none'], - - // This fixer removes the blank line at class start, no way to disable that, so we disable the fixer :( - //'class_attributes_separation' => ['elements' => ['const', 'method', 'property']], - - 'combine_consecutive_issets' => true, - 'combine_consecutive_unsets' => true, - 'compact_nullable_typehint' => true, - 'concat_space' => ['spacing' => 'one'], - 'date_time_immutable' => true, - 'declare_equal_normalize' => ['space' => 'single'], - 'declare_strict_types' => true, - 'dir_constant' => true, - 'elseif' => true, - 'encoding' => true, - 'full_opening_tag' => true, - 'fully_qualified_strict_types' => true, - 'function_declaration' => [ - 'closure_function_spacing' => 'one' - ], - 'global_namespace_import' => [ - 'import_classes' => true, - 'import_constants' => true, - 'import_functions' => true, - ], - 'header_comment' => ['header' => $header, 'separate' => 'none'], - 'indentation_type' => true, - 'is_null' => true, - 'line_ending' => true, - 'list_syntax' => ['syntax' => 'short'], - 'logical_operators' => true, - 'lowercase_cast' => true, - 'constant_case' => ['case' => 'lower'], - 'lowercase_keywords' => true, - 'lowercase_static_reference' => true, - 'magic_constant_casing' => true, - 'method_argument_space' => ['on_multiline' => 'ensure_fully_multiline'], - 'modernize_types_casting' => true, - 'multiline_comment_opening_closing' => true, - 'multiline_whitespace_before_semicolons' => true, - 'new_with_braces' => false, - 'no_alias_functions' => true, - 'no_alternative_syntax' => true, - 'no_blank_lines_after_class_opening' => false, - 'no_blank_lines_after_phpdoc' => true, - 'no_blank_lines_before_namespace' => true, - 'no_closing_tag' => true, - 'no_empty_comment' => true, - 'no_empty_phpdoc' => true, - 'no_empty_statement' => true, - 'no_extra_blank_lines' => true, - 'no_homoglyph_names' => true, - 'no_leading_import_slash' => true, - 'no_leading_namespace_whitespace' => true, - 'no_mixed_echo_print' => ['use' => 'print'], - 'no_multiline_whitespace_around_double_arrow' => true, - 'no_null_property_initialization' => true, - 'no_php4_constructor' => true, - 'no_short_bool_cast' => true, - 'echo_tag_syntax' => ['format' => 'long'], - 'no_singleline_whitespace_before_semicolons' => true, - 'no_spaces_after_function_name' => true, - 'no_spaces_inside_parenthesis' => true, - 'no_superfluous_elseif' => true, - 'no_superfluous_phpdoc_tags' => true, - 'no_trailing_comma_in_list_call' => true, - 'no_trailing_comma_in_singleline_array' => true, - 'no_trailing_whitespace' => true, - 'no_trailing_whitespace_in_comment' => true, - 'no_unneeded_control_parentheses' => false, - 'no_unneeded_curly_braces' => false, - 'no_unneeded_final_method' => true, - 'no_unreachable_default_argument_value' => true, - 'no_unset_on_property' => true, - 'no_unused_imports' => true, - 'no_useless_else' => true, - 'no_useless_return' => true, - 'no_whitespace_before_comma_in_array' => true, - 'no_whitespace_in_blank_line' => true, - 'non_printable_character' => true, - 'normalize_index_brace' => true, - 'object_operator_without_whitespace' => true, - 'ordered_class_elements' => [ - 'order' => [ - 'use_trait', - 'constant_public', - 'constant_protected', - 'constant_private', - 'property_public_static', - 'property_protected_static', - 'property_private_static', - 'property_public', - 'property_protected', - 'property_private', - 'method_public_static', - 'construct', - 'destruct', - 'magic', - 'phpunit', - 'method_public', - 'method_protected', - 'method_private', - 'method_protected_static', - 'method_private_static', - ], - ], - 'ordered_imports' => [ - 'imports_order' => [ - PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CLASS, - PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_CONST, - PhpCsFixer\Fixer\Import\OrderedImportsFixer::IMPORT_TYPE_FUNCTION, - ] - ], - 'phpdoc_add_missing_param_annotation' => true, - 'phpdoc_align' => true, - 'phpdoc_annotation_without_dot' => true, - 'phpdoc_indent' => true, - 'phpdoc_no_access' => true, - 'phpdoc_no_empty_return' => true, - 'phpdoc_no_package' => true, - 'phpdoc_order' => true, - 'phpdoc_return_self_reference' => true, - 'phpdoc_scalar' => true, - 'phpdoc_separation' => true, - 'phpdoc_single_line_var_spacing' => true, - 'phpdoc_to_comment' => true, - 'phpdoc_trim' => true, - 'phpdoc_trim_consecutive_blank_line_separation' => true, - 'phpdoc_types' => ['groups' => ['simple', 'meta']], - 'phpdoc_types_order' => true, - 'phpdoc_to_return_type' => true, - 'phpdoc_var_without_name' => true, - 'pow_to_exponentiation' => true, - 'protected_to_private' => true, - 'return_assignment' => true, - 'return_type_declaration' => ['space_before' => 'none'], - 'self_accessor' => false, - 'semicolon_after_instruction' => true, - 'set_type_to_cast' => true, - 'short_scalar_cast' => true, - 'simplified_null_return' => true, - 'single_blank_line_at_eof' => true, - 'single_import_per_statement' => true, - 'single_line_after_imports' => true, - 'single_quote' => true, - 'standardize_not_equals' => true, - 'ternary_to_null_coalescing' => true, - 'trailing_comma_in_multiline' => false, - 'trim_array_spaces' => true, - 'unary_operator_spaces' => true, - 'visibility_required' => [ - 'elements' => [ - 'const', - 'method', - 'property', - ], - ], - 'void_return' => true, - 'whitespace_after_comma_in_array' => true, - 'yoda_style' => false - ] - ) - ->setFinder( - PhpCsFixer\Finder::create() - ->files() - ->in(__DIR__ . '/build') - ->in(__DIR__ . '/src') - ->in(__DIR__ . '/tests') - ->notName('autoload.php') - ); diff --git a/vendor/phar-io/manifest/CHANGELOG.md b/vendor/phar-io/manifest/CHANGELOG.md deleted file mode 100644 index f363b16..0000000 --- a/vendor/phar-io/manifest/CHANGELOG.md +++ /dev/null @@ -1,45 +0,0 @@ -# Changelog - -All notable changes to phar-io/manifest are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. - -## [2.0.4] - 03-03-2024 - -### Changed - -- Make `EMail` an optional attribute for author -- Stick with PHP 7.2 compatibilty -- Do not use implict nullable type (thanks @sebastianbergmann), this should make things work on PHP 8.4 - -## [2.0.3] - 20.07.2021 - -- Fixed PHP 7.2 / PHP 7.3 incompatibility introduced in previous release - -## [2.0.2] - 20.07.2021 - -- Fixed PHP 8.1 deprecation notice - -## [2.0.1] - 27.06.2020 - -This release now supports the use of PHP 7.2+ and ^8.0 - -## [2.0.0] - 10.05.2020 - -This release now requires PHP 7.2+ - -### Changed - -- Upgraded to phar-io/version 3.0 - - Version strings `v1.2.3` will now be converted to valid semantic version strings `1.2.3` - - Abreviated strings like `1.0` will get expaneded to `1.0.0` - -### Unreleased - -[Unreleased]: https://github.com/phar-io/manifest/compare/2.1.0...HEAD -[2.1.0]: https://github.com/phar-io/manifest/compare/2.0.3...2.1.0 -[2.0.3]: https://github.com/phar-io/manifest/compare/2.0.2...2.0.3 -[2.0.2]: https://github.com/phar-io/manifest/compare/2.0.1...2.0.2 -[2.0.1]: https://github.com/phar-io/manifest/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/phar-io/manifest/compare/1.0.1...2.0.0 -[1.0.3]: https://github.com/phar-io/manifest/compare/1.0.2...1.0.3 -[1.0.2]: https://github.com/phar-io/manifest/compare/1.0.1...1.0.2 -[1.0.1]: https://github.com/phar-io/manifest/compare/1.0.0...1.0.1 diff --git a/vendor/phar-io/manifest/README.md b/vendor/phar-io/manifest/README.md deleted file mode 100644 index fae2c9a..0000000 --- a/vendor/phar-io/manifest/README.md +++ /dev/null @@ -1,178 +0,0 @@ -# Manifest - -Component for reading [phar.io](https://phar.io/) manifest information from a [PHP Archive (PHAR)](http://php.net/phar). - -## Installation - -You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): - - composer require phar-io/manifest - -If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: - - composer require --dev phar-io/manifest - -## Usage Examples - -### Read from `manifest.xml` -```php -use PharIo\Manifest\ManifestLoader; -use PharIo\Manifest\ManifestSerializer; - -$manifest = ManifestLoader::fromFile('manifest.xml'); - -var_dump($manifest); - -echo (new ManifestSerializer)->serializeToString($manifest); -``` - -
- Output - -```shell -object(PharIo\Manifest\Manifest)#14 (6) { - ["name":"PharIo\Manifest\Manifest":private]=> - object(PharIo\Manifest\ApplicationName)#10 (1) { - ["name":"PharIo\Manifest\ApplicationName":private]=> - string(12) "some/library" - } - ["version":"PharIo\Manifest\Manifest":private]=> - object(PharIo\Version\Version)#12 (5) { - ["originalVersionString":"PharIo\Version\Version":private]=> - string(5) "1.0.0" - ["major":"PharIo\Version\Version":private]=> - object(PharIo\Version\VersionNumber)#13 (1) { - ["value":"PharIo\Version\VersionNumber":private]=> - int(1) - } - ["minor":"PharIo\Version\Version":private]=> - object(PharIo\Version\VersionNumber)#23 (1) { - ["value":"PharIo\Version\VersionNumber":private]=> - int(0) - } - ["patch":"PharIo\Version\Version":private]=> - object(PharIo\Version\VersionNumber)#22 (1) { - ["value":"PharIo\Version\VersionNumber":private]=> - int(0) - } - ["preReleaseSuffix":"PharIo\Version\Version":private]=> - NULL - } - ["type":"PharIo\Manifest\Manifest":private]=> - object(PharIo\Manifest\Library)#6 (0) { - } - ["copyrightInformation":"PharIo\Manifest\Manifest":private]=> - object(PharIo\Manifest\CopyrightInformation)#19 (2) { - ["authors":"PharIo\Manifest\CopyrightInformation":private]=> - object(PharIo\Manifest\AuthorCollection)#9 (1) { - ["authors":"PharIo\Manifest\AuthorCollection":private]=> - array(1) { - [0]=> - object(PharIo\Manifest\Author)#15 (2) { - ["name":"PharIo\Manifest\Author":private]=> - string(13) "Reiner Zufall" - ["email":"PharIo\Manifest\Author":private]=> - object(PharIo\Manifest\Email)#16 (1) { - ["email":"PharIo\Manifest\Email":private]=> - string(16) "reiner@zufall.de" - } - } - } - } - ["license":"PharIo\Manifest\CopyrightInformation":private]=> - object(PharIo\Manifest\License)#11 (2) { - ["name":"PharIo\Manifest\License":private]=> - string(12) "BSD-3-Clause" - ["url":"PharIo\Manifest\License":private]=> - object(PharIo\Manifest\Url)#18 (1) { - ["url":"PharIo\Manifest\Url":private]=> - string(26) "https://domain.tld/LICENSE" - } - } - } - ["requirements":"PharIo\Manifest\Manifest":private]=> - object(PharIo\Manifest\RequirementCollection)#17 (1) { - ["requirements":"PharIo\Manifest\RequirementCollection":private]=> - array(1) { - [0]=> - object(PharIo\Manifest\PhpVersionRequirement)#20 (1) { - ["versionConstraint":"PharIo\Manifest\PhpVersionRequirement":private]=> - object(PharIo\Version\SpecificMajorAndMinorVersionConstraint)#24 (3) { - ["originalValue":"PharIo\Version\AbstractVersionConstraint":private]=> - string(3) "7.0" - ["major":"PharIo\Version\SpecificMajorAndMinorVersionConstraint":private]=> - int(7) - ["minor":"PharIo\Version\SpecificMajorAndMinorVersionConstraint":private]=> - int(0) - } - } - } - } - ["bundledComponents":"PharIo\Manifest\Manifest":private]=> - object(PharIo\Manifest\BundledComponentCollection)#8 (1) { - ["bundledComponents":"PharIo\Manifest\BundledComponentCollection":private]=> - array(0) { - } - } -} - - - - - - - - - - - -``` -
- -### Create via API -```php -$bundled = new \PharIo\Manifest\BundledComponentCollection(); -$bundled->add( - new \PharIo\Manifest\BundledComponent('vendor/packageA', new \PharIo\Version\Version('1.2.3-dev') - ) -); - -$manifest = new PharIo\Manifest\Manifest( - new \PharIo\Manifest\ApplicationName('vendor/package'), - new \PharIo\Version\Version('1.0.0'), - new \PharIo\Manifest\Library(), - new \PharIo\Manifest\CopyrightInformation( - new \PharIo\Manifest\AuthorCollection(), - new \PharIo\Manifest\License( - 'BSD-3-Clause', - new \PharIo\Manifest\Url('https://spdx.org/licenses/BSD-3-Clause.html') - ) - ), - new \PharIo\Manifest\RequirementCollection(), - $bundled -); - -echo (new ManifestSerializer)->serializeToString($manifest); -``` - -
- Output - -```xml - - - - - - - - - - - - - -``` - -
- diff --git a/vendor/phar-io/manifest/composer.json b/vendor/phar-io/manifest/composer.json deleted file mode 100644 index dc5fa45..0000000 --- a/vendor/phar-io/manifest/composer.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "phar-io/manifest", - "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "support": { - "issues": "https://github.com/phar-io/manifest/issues" - }, - "require": { - "php": "^7.2 || ^8.0", - "ext-dom": "*", - "ext-phar": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1" - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - } -} diff --git a/vendor/phar-io/manifest/composer.lock b/vendor/phar-io/manifest/composer.lock deleted file mode 100644 index fe18e08..0000000 --- a/vendor/phar-io/manifest/composer.lock +++ /dev/null @@ -1,76 +0,0 @@ -{ - "_readme": [ - "This file locks the dependencies of your project to a known state", - "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", - "This file is @generated automatically" - ], - "content-hash": "279b3c4fe44357abd924fdcc0cfa5664", - "packages": [ - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - } - ], - "packages-dev": [], - "aliases": [], - "minimum-stability": "stable", - "stability-flags": [], - "prefer-stable": false, - "prefer-lowest": false, - "platform": { - "php": "^7.2 || ^8.0", - "ext-dom": "*", - "ext-phar": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*" - }, - "platform-dev": [], - "plugin-api-version": "2.3.0" -} diff --git a/vendor/phar-io/manifest/manifest.xsd b/vendor/phar-io/manifest/manifest.xsd deleted file mode 100644 index 63e3f1c..0000000 --- a/vendor/phar-io/manifest/manifest.xsd +++ /dev/null @@ -1,116 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/vendor/phar-io/manifest/src/ManifestDocumentMapper.php b/vendor/phar-io/manifest/src/ManifestDocumentMapper.php deleted file mode 100644 index 3da6403..0000000 --- a/vendor/phar-io/manifest/src/ManifestDocumentMapper.php +++ /dev/null @@ -1,151 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use PharIo\Version\Exception as VersionException; -use PharIo\Version\Version; -use PharIo\Version\VersionConstraintParser; -use Throwable; -use function sprintf; - -class ManifestDocumentMapper { - public function map(ManifestDocument $document): Manifest { - try { - $contains = $document->getContainsElement(); - $type = $this->mapType($contains); - $copyright = $this->mapCopyright($document->getCopyrightElement()); - $requirements = $this->mapRequirements($document->getRequiresElement()); - $bundledComponents = $this->mapBundledComponents($document); - - return new Manifest( - new ApplicationName($contains->getName()), - new Version($contains->getVersion()), - $type, - $copyright, - $requirements, - $bundledComponents - ); - } catch (Throwable $e) { - throw new ManifestDocumentMapperException($e->getMessage(), (int)$e->getCode(), $e); - } - } - - private function mapType(ContainsElement $contains): Type { - switch ($contains->getType()) { - case 'application': - return Type::application(); - case 'library': - return Type::library(); - case 'extension': - return $this->mapExtension($contains->getExtensionElement()); - } - - throw new ManifestDocumentMapperException( - sprintf('Unsupported type %s', $contains->getType()) - ); - } - - private function mapCopyright(CopyrightElement $copyright): CopyrightInformation { - $authors = new AuthorCollection(); - - foreach ($copyright->getAuthorElements() as $authorElement) { - $authors->add( - new Author( - $authorElement->getName(), - $authorElement->hasEMail() ? new Email($authorElement->getEmail()) : null - ) - ); - } - - $licenseElement = $copyright->getLicenseElement(); - $license = new License( - $licenseElement->getType(), - new Url($licenseElement->getUrl()) - ); - - return new CopyrightInformation( - $authors, - $license - ); - } - - private function mapRequirements(RequiresElement $requires): RequirementCollection { - $collection = new RequirementCollection(); - $phpElement = $requires->getPHPElement(); - $parser = new VersionConstraintParser; - - try { - $versionConstraint = $parser->parse($phpElement->getVersion()); - } catch (VersionException $e) { - throw new ManifestDocumentMapperException( - sprintf('Unsupported version constraint - %s', $e->getMessage()), - (int)$e->getCode(), - $e - ); - } - - $collection->add( - new PhpVersionRequirement( - $versionConstraint - ) - ); - - if (!$phpElement->hasExtElements()) { - return $collection; - } - - foreach ($phpElement->getExtElements() as $extElement) { - $collection->add( - new PhpExtensionRequirement($extElement->getName()) - ); - } - - return $collection; - } - - private function mapBundledComponents(ManifestDocument $document): BundledComponentCollection { - $collection = new BundledComponentCollection(); - - if (!$document->hasBundlesElement()) { - return $collection; - } - - foreach ($document->getBundlesElement()->getComponentElements() as $componentElement) { - $collection->add( - new BundledComponent( - $componentElement->getName(), - new Version( - $componentElement->getVersion() - ) - ) - ); - } - - return $collection; - } - - private function mapExtension(ExtensionElement $extension): Extension { - try { - $versionConstraint = (new VersionConstraintParser)->parse($extension->getCompatible()); - - return Type::extension( - new ApplicationName($extension->getFor()), - $versionConstraint - ); - } catch (VersionException $e) { - throw new ManifestDocumentMapperException( - sprintf('Unsupported version constraint - %s', $e->getMessage()), - (int)$e->getCode(), - $e - ); - } - } -} diff --git a/vendor/phar-io/manifest/src/ManifestLoader.php b/vendor/phar-io/manifest/src/ManifestLoader.php deleted file mode 100644 index f467d2d..0000000 --- a/vendor/phar-io/manifest/src/ManifestLoader.php +++ /dev/null @@ -1,47 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use function sprintf; - -class ManifestLoader { - public static function fromFile(string $filename): Manifest { - try { - return (new ManifestDocumentMapper())->map( - ManifestDocument::fromFile($filename) - ); - } catch (Exception $e) { - throw new ManifestLoaderException( - sprintf('Loading %s failed.', $filename), - (int)$e->getCode(), - $e - ); - } - } - - public static function fromPhar(string $filename): Manifest { - return self::fromFile('phar://' . $filename . '/manifest.xml'); - } - - public static function fromString(string $manifest): Manifest { - try { - return (new ManifestDocumentMapper())->map( - ManifestDocument::fromString($manifest) - ); - } catch (Exception $e) { - throw new ManifestLoaderException( - 'Processing string failed', - (int)$e->getCode(), - $e - ); - } - } -} diff --git a/vendor/phar-io/manifest/src/ManifestSerializer.php b/vendor/phar-io/manifest/src/ManifestSerializer.php deleted file mode 100644 index 48b8efd..0000000 --- a/vendor/phar-io/manifest/src/ManifestSerializer.php +++ /dev/null @@ -1,172 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use PharIo\Version\AnyVersionConstraint; -use PharIo\Version\Version; -use PharIo\Version\VersionConstraint; -use XMLWriter; -use function count; -use function file_put_contents; -use function str_repeat; - -/** @psalm-suppress MissingConstructor */ -class ManifestSerializer { - /** @var XMLWriter */ - private $xmlWriter; - - public function serializeToFile(Manifest $manifest, string $filename): void { - file_put_contents( - $filename, - $this->serializeToString($manifest) - ); - } - - public function serializeToString(Manifest $manifest): string { - $this->startDocument(); - - $this->addContains($manifest->getName(), $manifest->getVersion(), $manifest->getType()); - $this->addCopyright($manifest->getCopyrightInformation()); - $this->addRequirements($manifest->getRequirements()); - $this->addBundles($manifest->getBundledComponents()); - - return $this->finishDocument(); - } - - private function startDocument(): void { - $xmlWriter = new XMLWriter(); - $xmlWriter->openMemory(); - $xmlWriter->setIndent(true); - $xmlWriter->setIndentString(str_repeat(' ', 4)); - $xmlWriter->startDocument('1.0', 'UTF-8'); - $xmlWriter->startElement('phar'); - $xmlWriter->writeAttribute('xmlns', 'https://phar.io/xml/manifest/1.0'); - - $this->xmlWriter = $xmlWriter; - } - - private function finishDocument(): string { - $this->xmlWriter->endElement(); - $this->xmlWriter->endDocument(); - - return $this->xmlWriter->outputMemory(); - } - - private function addContains(ApplicationName $name, Version $version, Type $type): void { - $this->xmlWriter->startElement('contains'); - $this->xmlWriter->writeAttribute('name', $name->asString()); - $this->xmlWriter->writeAttribute('version', $version->getVersionString()); - - switch (true) { - case $type->isApplication(): { - $this->xmlWriter->writeAttribute('type', 'application'); - - break; - } - - case $type->isLibrary(): { - $this->xmlWriter->writeAttribute('type', 'library'); - - break; - } - - case $type->isExtension(): { - $this->xmlWriter->writeAttribute('type', 'extension'); - /* @var $type Extension */ - $this->addExtension( - $type->getApplicationName(), - $type->getVersionConstraint() - ); - - break; - } - - default: { - $this->xmlWriter->writeAttribute('type', 'custom'); - } - } - - $this->xmlWriter->endElement(); - } - - private function addCopyright(CopyrightInformation $copyrightInformation): void { - $this->xmlWriter->startElement('copyright'); - - foreach ($copyrightInformation->getAuthors() as $author) { - $this->xmlWriter->startElement('author'); - $this->xmlWriter->writeAttribute('name', $author->getName()); - $this->xmlWriter->writeAttribute('email', $author->getEmail()->asString()); - $this->xmlWriter->endElement(); - } - - $license = $copyrightInformation->getLicense(); - - $this->xmlWriter->startElement('license'); - $this->xmlWriter->writeAttribute('type', $license->getName()); - $this->xmlWriter->writeAttribute('url', $license->getUrl()->asString()); - $this->xmlWriter->endElement(); - - $this->xmlWriter->endElement(); - } - - private function addRequirements(RequirementCollection $requirementCollection): void { - $phpRequirement = new AnyVersionConstraint(); - $extensions = []; - - foreach ($requirementCollection as $requirement) { - if ($requirement instanceof PhpVersionRequirement) { - $phpRequirement = $requirement->getVersionConstraint(); - - continue; - } - - if ($requirement instanceof PhpExtensionRequirement) { - $extensions[] = $requirement->asString(); - } - } - - $this->xmlWriter->startElement('requires'); - $this->xmlWriter->startElement('php'); - $this->xmlWriter->writeAttribute('version', $phpRequirement->asString()); - - foreach ($extensions as $extension) { - $this->xmlWriter->startElement('ext'); - $this->xmlWriter->writeAttribute('name', $extension); - $this->xmlWriter->endElement(); - } - - $this->xmlWriter->endElement(); - $this->xmlWriter->endElement(); - } - - private function addBundles(BundledComponentCollection $bundledComponentCollection): void { - if (count($bundledComponentCollection) === 0) { - return; - } - $this->xmlWriter->startElement('bundles'); - - foreach ($bundledComponentCollection as $bundledComponent) { - $this->xmlWriter->startElement('component'); - $this->xmlWriter->writeAttribute('name', $bundledComponent->getName()); - $this->xmlWriter->writeAttribute('version', $bundledComponent->getVersion()->getVersionString()); - $this->xmlWriter->endElement(); - } - - $this->xmlWriter->endElement(); - } - - private function addExtension(ApplicationName $applicationName, VersionConstraint $versionConstraint): void { - $this->xmlWriter->startElement('extension'); - $this->xmlWriter->writeAttribute('for', $applicationName->asString()); - $this->xmlWriter->writeAttribute('compatible', $versionConstraint->asString()); - $this->xmlWriter->endElement(); - } -} diff --git a/vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php b/vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php deleted file mode 100644 index 7528afc..0000000 --- a/vendor/phar-io/manifest/src/exceptions/ElementCollectionException.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use InvalidArgumentException; - -class ElementCollectionException extends InvalidArgumentException implements Exception { -} diff --git a/vendor/phar-io/manifest/src/exceptions/Exception.php b/vendor/phar-io/manifest/src/exceptions/Exception.php deleted file mode 100644 index 0c135d3..0000000 --- a/vendor/phar-io/manifest/src/exceptions/Exception.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use Throwable; - -interface Exception extends Throwable { -} diff --git a/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php b/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php deleted file mode 100644 index ecfe514..0000000 --- a/vendor/phar-io/manifest/src/exceptions/InvalidApplicationNameException.php +++ /dev/null @@ -1,17 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use InvalidArgumentException; - -class InvalidApplicationNameException extends InvalidArgumentException implements Exception { - public const InvalidFormat = 2; -} diff --git a/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php b/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php deleted file mode 100644 index 2424055..0000000 --- a/vendor/phar-io/manifest/src/exceptions/InvalidEmailException.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use InvalidArgumentException; - -class InvalidEmailException extends InvalidArgumentException implements Exception { -} diff --git a/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php b/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php deleted file mode 100644 index c8b192b..0000000 --- a/vendor/phar-io/manifest/src/exceptions/InvalidUrlException.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use InvalidArgumentException; - -class InvalidUrlException extends InvalidArgumentException implements Exception { -} diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php deleted file mode 100644 index 0a158e6..0000000 --- a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentException.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use RuntimeException; - -class ManifestDocumentException extends RuntimeException implements Exception { -} diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php deleted file mode 100644 index 816af12..0000000 --- a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentLoadingException.php +++ /dev/null @@ -1,47 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use LibXMLError; -use function sprintf; - -class ManifestDocumentLoadingException extends \Exception implements Exception { - /** @var LibXMLError[] */ - private $libxmlErrors; - - /** - * ManifestDocumentLoadingException constructor. - * - * @param LibXMLError[] $libxmlErrors - */ - public function __construct(array $libxmlErrors) { - $this->libxmlErrors = $libxmlErrors; - $first = $this->libxmlErrors[0]; - - parent::__construct( - sprintf( - '%s (Line: %d / Column: %d / File: %s)', - $first->message, - $first->line, - $first->column, - $first->file - ), - $first->code - ); - } - - /** - * @return LibXMLError[] - */ - public function getLibxmlErrors(): array { - return $this->libxmlErrors; - } -} diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php b/vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php deleted file mode 100644 index 0d1a5f5..0000000 --- a/vendor/phar-io/manifest/src/exceptions/ManifestDocumentMapperException.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use RuntimeException; - -class ManifestDocumentMapperException extends RuntimeException implements Exception { -} diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestElementException.php b/vendor/phar-io/manifest/src/exceptions/ManifestElementException.php deleted file mode 100644 index 46f82e3..0000000 --- a/vendor/phar-io/manifest/src/exceptions/ManifestElementException.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use RuntimeException; - -class ManifestElementException extends RuntimeException implements Exception { -} diff --git a/vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php b/vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php deleted file mode 100644 index d00ed19..0000000 --- a/vendor/phar-io/manifest/src/exceptions/ManifestLoaderException.php +++ /dev/null @@ -1,14 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class ManifestLoaderException extends \Exception implements Exception { -} diff --git a/vendor/phar-io/manifest/src/exceptions/NoEmailAddressException.php b/vendor/phar-io/manifest/src/exceptions/NoEmailAddressException.php deleted file mode 100644 index 2791312..0000000 --- a/vendor/phar-io/manifest/src/exceptions/NoEmailAddressException.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use InvalidArgumentException; - -class NoEmailAddressException extends InvalidArgumentException implements Exception { -} diff --git a/vendor/phar-io/manifest/src/values/Application.php b/vendor/phar-io/manifest/src/values/Application.php deleted file mode 100644 index 11a44d9..0000000 --- a/vendor/phar-io/manifest/src/values/Application.php +++ /dev/null @@ -1,17 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class Application extends Type { - public function isApplication(): bool { - return true; - } -} diff --git a/vendor/phar-io/manifest/src/values/ApplicationName.php b/vendor/phar-io/manifest/src/values/ApplicationName.php deleted file mode 100644 index 1a0ad1e..0000000 --- a/vendor/phar-io/manifest/src/values/ApplicationName.php +++ /dev/null @@ -1,41 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use function preg_match; -use function sprintf; - -class ApplicationName { - /** @var string */ - private $name; - - public function __construct(string $name) { - $this->ensureValidFormat($name); - $this->name = $name; - } - - public function asString(): string { - return $this->name; - } - - public function isEqual(ApplicationName $name): bool { - return $this->name === $name->name; - } - - private function ensureValidFormat(string $name): void { - if (!preg_match('#\w/\w#', $name)) { - throw new InvalidApplicationNameException( - sprintf('Format of name "%s" is not valid - expected: vendor/packagename', $name), - InvalidApplicationNameException::InvalidFormat - ); - } - } -} diff --git a/vendor/phar-io/manifest/src/values/Author.php b/vendor/phar-io/manifest/src/values/Author.php deleted file mode 100644 index 7b243aa..0000000 --- a/vendor/phar-io/manifest/src/values/Author.php +++ /dev/null @@ -1,57 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use function sprintf; - -class Author { - /** @var string */ - private $name; - - /** @var null|Email */ - private $email; - - public function __construct(string $name, ?Email $email = null) { - $this->name = $name; - $this->email = $email; - } - - public function asString(): string { - if (!$this->hasEmail()) { - return $this->name; - } - - return sprintf( - '%s <%s>', - $this->name, - $this->email->asString() - ); - } - - public function getName(): string { - return $this->name; - } - - /** - * @psalm-assert-if-true Email $this->email - */ - public function hasEmail(): bool { - return $this->email !== null; - } - - public function getEmail(): Email { - if (!$this->hasEmail()) { - throw new NoEmailAddressException(); - } - - return $this->email; - } -} diff --git a/vendor/phar-io/manifest/src/values/AuthorCollection.php b/vendor/phar-io/manifest/src/values/AuthorCollection.php deleted file mode 100644 index 549876d..0000000 --- a/vendor/phar-io/manifest/src/values/AuthorCollection.php +++ /dev/null @@ -1,40 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use Countable; -use IteratorAggregate; -use function count; - -/** @template-implements IteratorAggregate */ -class AuthorCollection implements Countable, IteratorAggregate { - /** @var Author[] */ - private $authors = []; - - public function add(Author $author): void { - $this->authors[] = $author; - } - - /** - * @return Author[] - */ - public function getAuthors(): array { - return $this->authors; - } - - public function count(): int { - return count($this->authors); - } - - public function getIterator(): AuthorCollectionIterator { - return new AuthorCollectionIterator($this); - } -} diff --git a/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php b/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php deleted file mode 100644 index 36fee9f..0000000 --- a/vendor/phar-io/manifest/src/values/AuthorCollectionIterator.php +++ /dev/null @@ -1,47 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use Iterator; -use function count; - -/** @template-implements Iterator */ -class AuthorCollectionIterator implements Iterator { - /** @var Author[] */ - private $authors; - - /** @var int */ - private $position = 0; - - public function __construct(AuthorCollection $authors) { - $this->authors = $authors->getAuthors(); - } - - public function rewind(): void { - $this->position = 0; - } - - public function valid(): bool { - return $this->position < count($this->authors); - } - - public function key(): int { - return $this->position; - } - - public function current(): Author { - return $this->authors[$this->position]; - } - - public function next(): void { - $this->position++; - } -} diff --git a/vendor/phar-io/manifest/src/values/BundledComponent.php b/vendor/phar-io/manifest/src/values/BundledComponent.php deleted file mode 100644 index 5817036..0000000 --- a/vendor/phar-io/manifest/src/values/BundledComponent.php +++ /dev/null @@ -1,34 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use PharIo\Version\Version; - -class BundledComponent { - /** @var string */ - private $name; - - /** @var Version */ - private $version; - - public function __construct(string $name, Version $version) { - $this->name = $name; - $this->version = $version; - } - - public function getName(): string { - return $this->name; - } - - public function getVersion(): Version { - return $this->version; - } -} diff --git a/vendor/phar-io/manifest/src/values/BundledComponentCollection.php b/vendor/phar-io/manifest/src/values/BundledComponentCollection.php deleted file mode 100644 index 28aaa06..0000000 --- a/vendor/phar-io/manifest/src/values/BundledComponentCollection.php +++ /dev/null @@ -1,40 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use Countable; -use IteratorAggregate; -use function count; - -/** @template-implements IteratorAggregate */ -class BundledComponentCollection implements Countable, IteratorAggregate { - /** @var BundledComponent[] */ - private $bundledComponents = []; - - public function add(BundledComponent $bundledComponent): void { - $this->bundledComponents[] = $bundledComponent; - } - - /** - * @return BundledComponent[] - */ - public function getBundledComponents(): array { - return $this->bundledComponents; - } - - public function count(): int { - return count($this->bundledComponents); - } - - public function getIterator(): BundledComponentCollectionIterator { - return new BundledComponentCollectionIterator($this); - } -} diff --git a/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php b/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php deleted file mode 100644 index 5c72817..0000000 --- a/vendor/phar-io/manifest/src/values/BundledComponentCollectionIterator.php +++ /dev/null @@ -1,47 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use Iterator; -use function count; - -/** @template-implements Iterator */ -class BundledComponentCollectionIterator implements Iterator { - /** @var BundledComponent[] */ - private $bundledComponents; - - /** @var int */ - private $position = 0; - - public function __construct(BundledComponentCollection $bundledComponents) { - $this->bundledComponents = $bundledComponents->getBundledComponents(); - } - - public function rewind(): void { - $this->position = 0; - } - - public function valid(): bool { - return $this->position < count($this->bundledComponents); - } - - public function key(): int { - return $this->position; - } - - public function current(): BundledComponent { - return $this->bundledComponents[$this->position]; - } - - public function next(): void { - $this->position++; - } -} diff --git a/vendor/phar-io/manifest/src/values/CopyrightInformation.php b/vendor/phar-io/manifest/src/values/CopyrightInformation.php deleted file mode 100644 index b4468ed..0000000 --- a/vendor/phar-io/manifest/src/values/CopyrightInformation.php +++ /dev/null @@ -1,32 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class CopyrightInformation { - /** @var AuthorCollection */ - private $authors; - - /** @var License */ - private $license; - - public function __construct(AuthorCollection $authors, License $license) { - $this->authors = $authors; - $this->license = $license; - } - - public function getAuthors(): AuthorCollection { - return $this->authors; - } - - public function getLicense(): License { - return $this->license; - } -} diff --git a/vendor/phar-io/manifest/src/values/Email.php b/vendor/phar-io/manifest/src/values/Email.php deleted file mode 100644 index dbaff84..0000000 --- a/vendor/phar-io/manifest/src/values/Email.php +++ /dev/null @@ -1,35 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use const FILTER_VALIDATE_EMAIL; -use function filter_var; - -class Email { - /** @var string */ - private $email; - - public function __construct(string $email) { - $this->ensureEmailIsValid($email); - - $this->email = $email; - } - - public function asString(): string { - return $this->email; - } - - private function ensureEmailIsValid(string $url): void { - if (filter_var($url, FILTER_VALIDATE_EMAIL) === false) { - throw new InvalidEmailException; - } - } -} diff --git a/vendor/phar-io/manifest/src/values/Extension.php b/vendor/phar-io/manifest/src/values/Extension.php deleted file mode 100644 index abcd2f8..0000000 --- a/vendor/phar-io/manifest/src/values/Extension.php +++ /dev/null @@ -1,47 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use PharIo\Version\Version; -use PharIo\Version\VersionConstraint; - -class Extension extends Type { - /** @var ApplicationName */ - private $application; - - /** @var VersionConstraint */ - private $versionConstraint; - - public function __construct(ApplicationName $application, VersionConstraint $versionConstraint) { - $this->application = $application; - $this->versionConstraint = $versionConstraint; - } - - public function getApplicationName(): ApplicationName { - return $this->application; - } - - public function getVersionConstraint(): VersionConstraint { - return $this->versionConstraint; - } - - public function isExtension(): bool { - return true; - } - - public function isExtensionFor(ApplicationName $name): bool { - return $this->application->isEqual($name); - } - - public function isCompatibleWith(ApplicationName $name, Version $version): bool { - return $this->isExtensionFor($name) && $this->versionConstraint->complies($version); - } -} diff --git a/vendor/phar-io/manifest/src/values/Library.php b/vendor/phar-io/manifest/src/values/Library.php deleted file mode 100644 index 97c292d..0000000 --- a/vendor/phar-io/manifest/src/values/Library.php +++ /dev/null @@ -1,17 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class Library extends Type { - public function isLibrary(): bool { - return true; - } -} diff --git a/vendor/phar-io/manifest/src/values/License.php b/vendor/phar-io/manifest/src/values/License.php deleted file mode 100644 index c2d9429..0000000 --- a/vendor/phar-io/manifest/src/values/License.php +++ /dev/null @@ -1,32 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class License { - /** @var string */ - private $name; - - /** @var Url */ - private $url; - - public function __construct(string $name, Url $url) { - $this->name = $name; - $this->url = $url; - } - - public function getName(): string { - return $this->name; - } - - public function getUrl(): Url { - return $this->url; - } -} diff --git a/vendor/phar-io/manifest/src/values/Manifest.php b/vendor/phar-io/manifest/src/values/Manifest.php deleted file mode 100644 index 3646682..0000000 --- a/vendor/phar-io/manifest/src/values/Manifest.php +++ /dev/null @@ -1,93 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use PharIo\Version\Version; - -class Manifest { - /** @var ApplicationName */ - private $name; - - /** @var Version */ - private $version; - - /** @var Type */ - private $type; - - /** @var CopyrightInformation */ - private $copyrightInformation; - - /** @var RequirementCollection */ - private $requirements; - - /** @var BundledComponentCollection */ - private $bundledComponents; - - public function __construct(ApplicationName $name, Version $version, Type $type, CopyrightInformation $copyrightInformation, RequirementCollection $requirements, BundledComponentCollection $bundledComponents) { - $this->name = $name; - $this->version = $version; - $this->type = $type; - $this->copyrightInformation = $copyrightInformation; - $this->requirements = $requirements; - $this->bundledComponents = $bundledComponents; - } - - public function getName(): ApplicationName { - return $this->name; - } - - public function getVersion(): Version { - return $this->version; - } - - public function getType(): Type { - return $this->type; - } - - public function getCopyrightInformation(): CopyrightInformation { - return $this->copyrightInformation; - } - - public function getRequirements(): RequirementCollection { - return $this->requirements; - } - - public function getBundledComponents(): BundledComponentCollection { - return $this->bundledComponents; - } - - public function isApplication(): bool { - return $this->type->isApplication(); - } - - public function isLibrary(): bool { - return $this->type->isLibrary(); - } - - public function isExtension(): bool { - return $this->type->isExtension(); - } - - public function isExtensionFor(ApplicationName $application, ?Version $version = null): bool { - if (!$this->isExtension()) { - return false; - } - - /** @var Extension $type */ - $type = $this->type; - - if ($version !== null) { - return $type->isCompatibleWith($application, $version); - } - - return $type->isExtensionFor($application); - } -} diff --git a/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php b/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php deleted file mode 100644 index f81bd25..0000000 --- a/vendor/phar-io/manifest/src/values/PhpExtensionRequirement.php +++ /dev/null @@ -1,24 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class PhpExtensionRequirement implements Requirement { - /** @var string */ - private $extension; - - public function __construct(string $extension) { - $this->extension = $extension; - } - - public function asString(): string { - return $this->extension; - } -} diff --git a/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php b/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php deleted file mode 100644 index fb30c3b..0000000 --- a/vendor/phar-io/manifest/src/values/PhpVersionRequirement.php +++ /dev/null @@ -1,26 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use PharIo\Version\VersionConstraint; - -class PhpVersionRequirement implements Requirement { - /** @var VersionConstraint */ - private $versionConstraint; - - public function __construct(VersionConstraint $versionConstraint) { - $this->versionConstraint = $versionConstraint; - } - - public function getVersionConstraint(): VersionConstraint { - return $this->versionConstraint; - } -} diff --git a/vendor/phar-io/manifest/src/values/Requirement.php b/vendor/phar-io/manifest/src/values/Requirement.php deleted file mode 100644 index d4b4640..0000000 --- a/vendor/phar-io/manifest/src/values/Requirement.php +++ /dev/null @@ -1,14 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -interface Requirement { -} diff --git a/vendor/phar-io/manifest/src/values/RequirementCollection.php b/vendor/phar-io/manifest/src/values/RequirementCollection.php deleted file mode 100644 index e4fe2a1..0000000 --- a/vendor/phar-io/manifest/src/values/RequirementCollection.php +++ /dev/null @@ -1,40 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use Countable; -use IteratorAggregate; -use function count; - -/** @template-implements IteratorAggregate */ -class RequirementCollection implements Countable, IteratorAggregate { - /** @var Requirement[] */ - private $requirements = []; - - public function add(Requirement $requirement): void { - $this->requirements[] = $requirement; - } - - /** - * @return Requirement[] - */ - public function getRequirements(): array { - return $this->requirements; - } - - public function count(): int { - return count($this->requirements); - } - - public function getIterator(): RequirementCollectionIterator { - return new RequirementCollectionIterator($this); - } -} diff --git a/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php b/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php deleted file mode 100644 index a587468..0000000 --- a/vendor/phar-io/manifest/src/values/RequirementCollectionIterator.php +++ /dev/null @@ -1,47 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use Iterator; -use function count; - -/** @template-implements Iterator */ -class RequirementCollectionIterator implements Iterator { - /** @var Requirement[] */ - private $requirements; - - /** @var int */ - private $position = 0; - - public function __construct(RequirementCollection $requirements) { - $this->requirements = $requirements->getRequirements(); - } - - public function rewind(): void { - $this->position = 0; - } - - public function valid(): bool { - return $this->position < count($this->requirements); - } - - public function key(): int { - return $this->position; - } - - public function current(): Requirement { - return $this->requirements[$this->position]; - } - - public function next(): void { - $this->position++; - } -} diff --git a/vendor/phar-io/manifest/src/values/Type.php b/vendor/phar-io/manifest/src/values/Type.php deleted file mode 100644 index 231e7fd..0000000 --- a/vendor/phar-io/manifest/src/values/Type.php +++ /dev/null @@ -1,42 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use PharIo\Version\VersionConstraint; - -abstract class Type { - public static function application(): Application { - return new Application; - } - - public static function library(): Library { - return new Library; - } - - public static function extension(ApplicationName $application, VersionConstraint $versionConstraint): Extension { - return new Extension($application, $versionConstraint); - } - - /** @psalm-assert-if-true Application $this */ - public function isApplication(): bool { - return false; - } - - /** @psalm-assert-if-true Library $this */ - public function isLibrary(): bool { - return false; - } - - /** @psalm-assert-if-true Extension $this */ - public function isExtension(): bool { - return false; - } -} diff --git a/vendor/phar-io/manifest/src/values/Url.php b/vendor/phar-io/manifest/src/values/Url.php deleted file mode 100644 index 9806155..0000000 --- a/vendor/phar-io/manifest/src/values/Url.php +++ /dev/null @@ -1,38 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use const FILTER_VALIDATE_URL; -use function filter_var; - -class Url { - /** @var string */ - private $url; - - public function __construct(string $url) { - $this->ensureUrlIsValid($url); - - $this->url = $url; - } - - public function asString(): string { - return $this->url; - } - - /** - * @throws InvalidUrlException - */ - private function ensureUrlIsValid(string $url): void { - if (filter_var($url, FILTER_VALIDATE_URL) === false) { - throw new InvalidUrlException; - } - } -} diff --git a/vendor/phar-io/manifest/src/xml/AuthorElement.php b/vendor/phar-io/manifest/src/xml/AuthorElement.php deleted file mode 100644 index b33eb3c..0000000 --- a/vendor/phar-io/manifest/src/xml/AuthorElement.php +++ /dev/null @@ -1,25 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class AuthorElement extends ManifestElement { - public function getName(): string { - return $this->getAttributeValue('name'); - } - - public function getEmail(): string { - return $this->getAttributeValue('email'); - } - - public function hasEMail(): bool { - return $this->hasAttribute('email'); - } -} diff --git a/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php b/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php deleted file mode 100644 index 0a2a2a3..0000000 --- a/vendor/phar-io/manifest/src/xml/AuthorElementCollection.php +++ /dev/null @@ -1,19 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class AuthorElementCollection extends ElementCollection { - public function current(): AuthorElement { - return new AuthorElement( - $this->getCurrentElement() - ); - } -} diff --git a/vendor/phar-io/manifest/src/xml/BundlesElement.php b/vendor/phar-io/manifest/src/xml/BundlesElement.php deleted file mode 100644 index ef721a6..0000000 --- a/vendor/phar-io/manifest/src/xml/BundlesElement.php +++ /dev/null @@ -1,19 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class BundlesElement extends ManifestElement { - public function getComponentElements(): ComponentElementCollection { - return new ComponentElementCollection( - $this->getChildrenByName('component') - ); - } -} diff --git a/vendor/phar-io/manifest/src/xml/ComponentElement.php b/vendor/phar-io/manifest/src/xml/ComponentElement.php deleted file mode 100644 index 84373c4..0000000 --- a/vendor/phar-io/manifest/src/xml/ComponentElement.php +++ /dev/null @@ -1,21 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class ComponentElement extends ManifestElement { - public function getName(): string { - return $this->getAttributeValue('name'); - } - - public function getVersion(): string { - return $this->getAttributeValue('version'); - } -} diff --git a/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php b/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php deleted file mode 100644 index cd9ad5d..0000000 --- a/vendor/phar-io/manifest/src/xml/ComponentElementCollection.php +++ /dev/null @@ -1,19 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class ComponentElementCollection extends ElementCollection { - public function current(): ComponentElement { - return new ComponentElement( - $this->getCurrentElement() - ); - } -} diff --git a/vendor/phar-io/manifest/src/xml/ContainsElement.php b/vendor/phar-io/manifest/src/xml/ContainsElement.php deleted file mode 100644 index 55a9c60..0000000 --- a/vendor/phar-io/manifest/src/xml/ContainsElement.php +++ /dev/null @@ -1,31 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class ContainsElement extends ManifestElement { - public function getName(): string { - return $this->getAttributeValue('name'); - } - - public function getVersion(): string { - return $this->getAttributeValue('version'); - } - - public function getType(): string { - return $this->getAttributeValue('type'); - } - - public function getExtensionElement(): ExtensionElement { - return new ExtensionElement( - $this->getChildByName('extension') - ); - } -} diff --git a/vendor/phar-io/manifest/src/xml/CopyrightElement.php b/vendor/phar-io/manifest/src/xml/CopyrightElement.php deleted file mode 100644 index c11415a..0000000 --- a/vendor/phar-io/manifest/src/xml/CopyrightElement.php +++ /dev/null @@ -1,25 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class CopyrightElement extends ManifestElement { - public function getAuthorElements(): AuthorElementCollection { - return new AuthorElementCollection( - $this->getChildrenByName('author') - ); - } - - public function getLicenseElement(): LicenseElement { - return new LicenseElement( - $this->getChildByName('license') - ); - } -} diff --git a/vendor/phar-io/manifest/src/xml/ElementCollection.php b/vendor/phar-io/manifest/src/xml/ElementCollection.php deleted file mode 100644 index 9e1de56..0000000 --- a/vendor/phar-io/manifest/src/xml/ElementCollection.php +++ /dev/null @@ -1,68 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use DOMElement; -use DOMNodeList; -use Iterator; -use ReturnTypeWillChange; -use function count; -use function get_class; -use function sprintf; - -/** @template-implements Iterator */ -abstract class ElementCollection implements Iterator { - /** @var DOMElement[] */ - private $nodes = []; - - /** @var int */ - private $position; - - public function __construct(DOMNodeList $nodeList) { - $this->position = 0; - $this->importNodes($nodeList); - } - - #[ReturnTypeWillChange] - abstract public function current(); - - public function next(): void { - $this->position++; - } - - public function key(): int { - return $this->position; - } - - public function valid(): bool { - return $this->position < count($this->nodes); - } - - public function rewind(): void { - $this->position = 0; - } - - protected function getCurrentElement(): DOMElement { - return $this->nodes[$this->position]; - } - - private function importNodes(DOMNodeList $nodeList): void { - foreach ($nodeList as $node) { - if (!$node instanceof DOMElement) { - throw new ElementCollectionException( - sprintf('\DOMElement expected, got \%s', get_class($node)) - ); - } - - $this->nodes[] = $node; - } - } -} diff --git a/vendor/phar-io/manifest/src/xml/ExtElement.php b/vendor/phar-io/manifest/src/xml/ExtElement.php deleted file mode 100644 index 6a88a05..0000000 --- a/vendor/phar-io/manifest/src/xml/ExtElement.php +++ /dev/null @@ -1,17 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class ExtElement extends ManifestElement { - public function getName(): string { - return $this->getAttributeValue('name'); - } -} diff --git a/vendor/phar-io/manifest/src/xml/ExtElementCollection.php b/vendor/phar-io/manifest/src/xml/ExtElementCollection.php deleted file mode 100644 index 3eec946..0000000 --- a/vendor/phar-io/manifest/src/xml/ExtElementCollection.php +++ /dev/null @@ -1,19 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class ExtElementCollection extends ElementCollection { - public function current(): ExtElement { - return new ExtElement( - $this->getCurrentElement() - ); - } -} diff --git a/vendor/phar-io/manifest/src/xml/ExtensionElement.php b/vendor/phar-io/manifest/src/xml/ExtensionElement.php deleted file mode 100644 index 22016a0..0000000 --- a/vendor/phar-io/manifest/src/xml/ExtensionElement.php +++ /dev/null @@ -1,21 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class ExtensionElement extends ManifestElement { - public function getFor(): string { - return $this->getAttributeValue('for'); - } - - public function getCompatible(): string { - return $this->getAttributeValue('compatible'); - } -} diff --git a/vendor/phar-io/manifest/src/xml/LicenseElement.php b/vendor/phar-io/manifest/src/xml/LicenseElement.php deleted file mode 100644 index d9f4cb2..0000000 --- a/vendor/phar-io/manifest/src/xml/LicenseElement.php +++ /dev/null @@ -1,21 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class LicenseElement extends ManifestElement { - public function getType(): string { - return $this->getAttributeValue('type'); - } - - public function getUrl(): string { - return $this->getAttributeValue('url'); - } -} diff --git a/vendor/phar-io/manifest/src/xml/ManifestDocument.php b/vendor/phar-io/manifest/src/xml/ManifestDocument.php deleted file mode 100644 index 8745868..0000000 --- a/vendor/phar-io/manifest/src/xml/ManifestDocument.php +++ /dev/null @@ -1,115 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use DOMDocument; -use DOMElement; -use Throwable; -use function count; -use function file_get_contents; -use function is_file; -use function libxml_clear_errors; -use function libxml_get_errors; -use function libxml_use_internal_errors; -use function sprintf; - -class ManifestDocument { - public const XMLNS = 'https://phar.io/xml/manifest/1.0'; - - /** @var DOMDocument */ - private $dom; - - public static function fromFile(string $filename): ManifestDocument { - if (!is_file($filename)) { - throw new ManifestDocumentException( - sprintf('File "%s" not found', $filename) - ); - } - - return self::fromString( - file_get_contents($filename) - ); - } - - public static function fromString(string $xmlString): ManifestDocument { - $prev = libxml_use_internal_errors(true); - libxml_clear_errors(); - - try { - $dom = new DOMDocument(); - $dom->loadXML($xmlString); - $errors = libxml_get_errors(); - libxml_use_internal_errors($prev); - } catch (Throwable $t) { - throw new ManifestDocumentException($t->getMessage(), 0, $t); - } - - if (count($errors) !== 0) { - throw new ManifestDocumentLoadingException($errors); - } - - return new self($dom); - } - - private function __construct(DOMDocument $dom) { - $this->ensureCorrectDocumentType($dom); - - $this->dom = $dom; - } - - public function getContainsElement(): ContainsElement { - return new ContainsElement( - $this->fetchElementByName('contains') - ); - } - - public function getCopyrightElement(): CopyrightElement { - return new CopyrightElement( - $this->fetchElementByName('copyright') - ); - } - - public function getRequiresElement(): RequiresElement { - return new RequiresElement( - $this->fetchElementByName('requires') - ); - } - - public function hasBundlesElement(): bool { - return $this->dom->getElementsByTagNameNS(self::XMLNS, 'bundles')->length === 1; - } - - public function getBundlesElement(): BundlesElement { - return new BundlesElement( - $this->fetchElementByName('bundles') - ); - } - - private function ensureCorrectDocumentType(DOMDocument $dom): void { - $root = $dom->documentElement; - - if ($root->localName !== 'phar' || $root->namespaceURI !== self::XMLNS) { - throw new ManifestDocumentException('Not a phar.io manifest document'); - } - } - - private function fetchElementByName(string $elementName): DOMElement { - $element = $this->dom->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); - - if (!$element instanceof DOMElement) { - throw new ManifestDocumentException( - sprintf('Element %s missing', $elementName) - ); - } - - return $element; - } -} diff --git a/vendor/phar-io/manifest/src/xml/ManifestElement.php b/vendor/phar-io/manifest/src/xml/ManifestElement.php deleted file mode 100644 index 461ba0c..0000000 --- a/vendor/phar-io/manifest/src/xml/ManifestElement.php +++ /dev/null @@ -1,72 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -use DOMElement; -use DOMNodeList; -use function sprintf; - -class ManifestElement { - public const XMLNS = 'https://phar.io/xml/manifest/1.0'; - - /** @var DOMElement */ - private $element; - - public function __construct(DOMElement $element) { - $this->element = $element; - } - - protected function getAttributeValue(string $name): string { - if (!$this->element->hasAttribute($name)) { - throw new ManifestElementException( - sprintf( - 'Attribute %s not set on element %s', - $name, - $this->element->localName - ) - ); - } - - return $this->element->getAttribute($name); - } - - protected function hasAttribute(string $name): bool { - return $this->element->hasAttribute($name); - } - - protected function getChildByName(string $elementName): DOMElement { - $element = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->item(0); - - if (!$element instanceof DOMElement) { - throw new ManifestElementException( - sprintf('Element %s missing', $elementName) - ); - } - - return $element; - } - - protected function getChildrenByName(string $elementName): DOMNodeList { - $elementList = $this->element->getElementsByTagNameNS(self::XMLNS, $elementName); - - if ($elementList->length === 0) { - throw new ManifestElementException( - sprintf('Element(s) %s missing', $elementName) - ); - } - - return $elementList; - } - - protected function hasChild(string $elementName): bool { - return $this->element->getElementsByTagNameNS(self::XMLNS, $elementName)->length !== 0; - } -} diff --git a/vendor/phar-io/manifest/src/xml/PhpElement.php b/vendor/phar-io/manifest/src/xml/PhpElement.php deleted file mode 100644 index 9340c2e..0000000 --- a/vendor/phar-io/manifest/src/xml/PhpElement.php +++ /dev/null @@ -1,27 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class PhpElement extends ManifestElement { - public function getVersion(): string { - return $this->getAttributeValue('version'); - } - - public function hasExtElements(): bool { - return $this->hasChild('ext'); - } - - public function getExtElements(): ExtElementCollection { - return new ExtElementCollection( - $this->getChildrenByName('ext') - ); - } -} diff --git a/vendor/phar-io/manifest/src/xml/RequiresElement.php b/vendor/phar-io/manifest/src/xml/RequiresElement.php deleted file mode 100644 index 73ba54c..0000000 --- a/vendor/phar-io/manifest/src/xml/RequiresElement.php +++ /dev/null @@ -1,19 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann and contributors - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - * - */ -namespace PharIo\Manifest; - -class RequiresElement extends ManifestElement { - public function getPHPElement(): PhpElement { - return new PhpElement( - $this->getChildByName('php') - ); - } -} diff --git a/vendor/phar-io/manifest/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.php b/vendor/phar-io/manifest/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.php deleted file mode 100644 index ea5414e..0000000 --- a/vendor/phar-io/manifest/tools/php-cs-fixer.d/PhpdocSingleLineVarFixer.php +++ /dev/null @@ -1,72 +0,0 @@ -isTokenKindFound(T_DOC_COMMENT); - } - - public function isRisky(): bool { - return false; - } - - public function fix(\SplFileInfo $file, Tokens $tokens): void { - foreach($tokens as $index => $token) { - if (!$token->isGivenKind(T_DOC_COMMENT)) { - continue; - } - if (\stripos($token->getContent(), '@var') === false) { - continue; - } - - if (preg_match('#^/\*\*[\s\*]+(@var[^\r\n]+)[\s\*]*\*\/$#u', $token->getContent(), $matches) !== 1) { - continue; - } - $newContent = '/** ' . \rtrim($matches[1]) . ' */'; - if ($newContent === $token->getContent()) { - continue; - } - $tokens[$index] = new Token([T_DOC_COMMENT, $newContent]); - } - } - - public function getPriority(): int { - return 0; - } - - public function getName(): string { - return 'PharIo/phpdoc_single_line_var_fixer'; - } - - public function supports(\SplFileInfo $file): bool { - return true; - } - -} diff --git a/vendor/phar-io/manifest/tools/php-cs-fixer.d/header.txt b/vendor/phar-io/manifest/tools/php-cs-fixer.d/header.txt deleted file mode 100644 index dc8c4ff..0000000 --- a/vendor/phar-io/manifest/tools/php-cs-fixer.d/header.txt +++ /dev/null @@ -1,6 +0,0 @@ -This file is part of PharIo\Manifest. - -Copyright (c) Arne Blankerts , Sebastian Heuer , Sebastian Bergmann and contributors - -For the full copyright and license information, please view the LICENSE -file that was distributed with this source code. diff --git a/vendor/phar-io/version/CHANGELOG.md b/vendor/phar-io/version/CHANGELOG.md deleted file mode 100644 index 4c0edfa..0000000 --- a/vendor/phar-io/version/CHANGELOG.md +++ /dev/null @@ -1,142 +0,0 @@ -# Changelog - -All notable changes to phar-io/version are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. - -## [3.2.1] - 2022-02-21 - -### Fixed - -- Have ExactVersionConstraint honor build metadata (added in 3.2.0) - - -## [3.2.0] - 2022-02-21 - -### Added - -- Build metadata is now supported and considered for equality checks only - - -## [3.1.1] - 2022-02-07 - -### Fixed - -- [#28](https://github.com/phar-io/version/issues/28): `VersionConstraintParser` does not support logical OR represented by single pipe (|) (Thanks @llaville) - - -## [3.1.0] - 2021-02-23 - -### Changed - -- Internal Refactoring -- More scalar types - -### Added - -- [#24](https://github.com/phar-io/version/issues/24): `Version::getOriginalString()` added (Thanks @addshore) -- Version constraints using the caret operator (`^`) now honor pre-1.0 releases, e.g. `^0.3` translates to `0.3.*`) -- Various integration tests for version constraint processing - -### Fixed - -- [#23](https://github.com/phar-io/version/pull/23): Tilde operator without patch level - - - -## [3.0.4] - 14.12.2020 - -### Fixed - -- [#22](https://github.com/phar-io/version/pull/22): make dev suffix rank works for uppercase too - -## [3.0.3] - 30.11.2020 - -### Added - -- Comparator method `Version::equals()` added - - -## [3.0.2] - 27.06.2020 - -This release now supports PHP 7.2+ and PHP ^8.0. No other changes included. - - -## [3.0.1] - 09.05.2020 - -__Potential BC Break Notice:__ -`Version::getVersionString()` no longer returns `v` prefixes in case the "input" -string contained one. These are not part of the semver specs -(see https://semver.org/#is-v123-a-semantic-version) and get stripped out. -As of Version 3.1.0 `Version::getOriginalString()` can be used to still -retrieve it as given. - -### Changed - -- Internal Refactoring -- More scalar types - -### Fixed - -- Fixed Constraint processing Regression for ^1.2 and ~1.2 - - -## [3.0.0] - 05.05.2020 - -### Changed - -- Require PHP 7.2+ -- All code now uses strict mode -- Scalar types have been added as needed - -### Added - -- The technically invalid format using 'v' prefix ("v1.2.3") is now properly supported - - -## [2.0.1] - 08.07.2018 - -### Fixed - -- Versions without a pre-release suffix are now always considered greater -than versions with a pre-release suffix. Example: `3.0.0 > 3.0.0-alpha.1` - - -## [2.0.0] - 23.06.2018 - -Changes to public API: - -- `PreReleaseSuffix::construct()`: optional parameter `$number` removed -- `PreReleaseSuffix::isGreaterThan()`: introduced -- `Version::hasPreReleaseSuffix()`: introduced - -### Added - -- [#11](https://github.com/phar-io/version/issues/11): Added support for pre-release version suffixes. Supported values are: - - `dev` - - `beta` (also abbreviated form `b`) - - `rc` - - `alpha` (also abbreviated form `a`) - - `patch` (also abbreviated form `p`) - - All values can be followed by a number, e.g. `beta3`. - - When comparing versions, the pre-release suffix is taken into account. Example: -`1.5.0 > 1.5.0-beta1 > 1.5.0-alpha3 > 1.5.0-alpha2 > 1.5.0-dev11` - -### Changed - -- reorganized the source directories - -### Fixed - -- [#10](https://github.com/phar-io/version/issues/10): Version numbers containing -a numeric suffix as seen in Debian packages are now supported. - - -[3.1.0]: https://github.com/phar-io/version/compare/3.0.4...3.1.0 -[3.0.4]: https://github.com/phar-io/version/compare/3.0.3...3.0.4 -[3.0.3]: https://github.com/phar-io/version/compare/3.0.2...3.0.3 -[3.0.2]: https://github.com/phar-io/version/compare/3.0.1...3.0.2 -[3.0.1]: https://github.com/phar-io/version/compare/3.0.0...3.0.1 -[3.0.0]: https://github.com/phar-io/version/compare/2.0.1...3.0.0 -[2.0.1]: https://github.com/phar-io/version/compare/2.0.0...2.0.1 -[2.0.0]: https://github.com/phar-io/version/compare/1.0.1...2.0.0 diff --git a/vendor/phar-io/version/README.md b/vendor/phar-io/version/README.md deleted file mode 100644 index 76e6e98..0000000 --- a/vendor/phar-io/version/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# Version - -Library for handling version information and constraints - -[![Build Status](https://travis-ci.org/phar-io/version.svg?branch=master)](https://travis-ci.org/phar-io/version) - -## Installation - -You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): - - composer require phar-io/version - -If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: - - composer require --dev phar-io/version - -## Version constraints - -A Version constraint describes a range of versions or a discrete version number. The format of version numbers follows the schema of [semantic versioning](http://semver.org): `..`. A constraint might contain an operator that describes the range. - -Beside the typical mathematical operators like `<=`, `>=`, there are two special operators: - -*Caret operator*: `^1.0` -can be written as `>=1.0.0 <2.0.0` and read as »every Version within major version `1`«. - -*Tilde operator*: `~1.0.0` -can be written as `>=1.0.0 <1.1.0` and read as »every version within minor version `1.1`. The behavior of tilde operator depends on whether a patch level version is provided or not. If no patch level is provided, tilde operator behaves like the caret operator: `~1.0` is identical to `^1.0`. - -## Usage examples - -Parsing version constraints and check discrete versions for compliance: - -```php - -use PharIo\Version\Version; -use PharIo\Version\VersionConstraintParser; - -$parser = new VersionConstraintParser(); -$caret_constraint = $parser->parse( '^7.0' ); - -$caret_constraint->complies( new Version( '7.0.17' ) ); // true -$caret_constraint->complies( new Version( '7.1.0' ) ); // true -$caret_constraint->complies( new Version( '6.4.34' ) ); // false - -$tilde_constraint = $parser->parse( '~1.1.0' ); - -$tilde_constraint->complies( new Version( '1.1.4' ) ); // true -$tilde_constraint->complies( new Version( '1.2.0' ) ); // false -``` - -As of version 2.0.0, pre-release labels are supported and taken into account when comparing versions: - -```php - -$leftVersion = new PharIo\Version\Version('3.0.0-alpha.1'); -$rightVersion = new PharIo\Version\Version('3.0.0-alpha.2'); - -$leftVersion->isGreaterThan($rightVersion); // false -$rightVersion->isGreaterThan($leftVersion); // true - -``` diff --git a/vendor/phar-io/version/composer.json b/vendor/phar-io/version/composer.json deleted file mode 100644 index 22687dc..0000000 --- a/vendor/phar-io/version/composer.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "name": "phar-io/version", - "description": "Library for handling version information and constraints", - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "support": { - "issues": "https://github.com/phar-io/version/issues" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "autoload": { - "classmap": [ - "src/" - ] - } -} - diff --git a/vendor/phar-io/version/src/BuildMetaData.php b/vendor/phar-io/version/src/BuildMetaData.php deleted file mode 100644 index d42f036..0000000 --- a/vendor/phar-io/version/src/BuildMetaData.php +++ /dev/null @@ -1,28 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class BuildMetaData { - - /** @var string */ - private $value; - - public function __construct(string $value) { - $this->value = $value; - } - - public function asString(): string { - return $this->value; - } - - public function equals(BuildMetaData $other): bool { - return $this->asString() === $other->asString(); - } -} diff --git a/vendor/phar-io/version/src/PreReleaseSuffix.php b/vendor/phar-io/version/src/PreReleaseSuffix.php deleted file mode 100644 index 0056300..0000000 --- a/vendor/phar-io/version/src/PreReleaseSuffix.php +++ /dev/null @@ -1,82 +0,0 @@ - 0, - 'a' => 1, - 'alpha' => 1, - 'b' => 2, - 'beta' => 2, - 'rc' => 3, - 'p' => 4, - 'pl' => 4, - 'patch' => 4, - ]; - - /** @var string */ - private $value; - - /** @var int */ - private $valueScore; - - /** @var int */ - private $number = 0; - - /** @var string */ - private $full; - - /** - * @throws InvalidPreReleaseSuffixException - */ - public function __construct(string $value) { - $this->parseValue($value); - } - - public function asString(): string { - return $this->full; - } - - public function getValue(): string { - return $this->value; - } - - public function getNumber(): ?int { - return $this->number; - } - - public function isGreaterThan(PreReleaseSuffix $suffix): bool { - if ($this->valueScore > $suffix->valueScore) { - return true; - } - - if ($this->valueScore < $suffix->valueScore) { - return false; - } - - return $this->getNumber() > $suffix->getNumber(); - } - - private function mapValueToScore(string $value): int { - $value = \strtolower($value); - - return self::valueScoreMap[$value]; - } - - private function parseValue(string $value): void { - $regex = '/-?((dev|beta|b|rc|alpha|a|patch|p|pl)\.?(\d*)).*$/i'; - - if (\preg_match($regex, $value, $matches) !== 1) { - throw new InvalidPreReleaseSuffixException(\sprintf('Invalid label %s', $value)); - } - - $this->full = $matches[1]; - $this->value = $matches[2]; - - if ($matches[3] !== '') { - $this->number = (int)$matches[3]; - } - - $this->valueScore = $this->mapValueToScore($matches[2]); - } -} diff --git a/vendor/phar-io/version/src/Version.php b/vendor/phar-io/version/src/Version.php deleted file mode 100644 index 644af5c..0000000 --- a/vendor/phar-io/version/src/Version.php +++ /dev/null @@ -1,208 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class Version { - /** @var string */ - private $originalVersionString; - - /** @var VersionNumber */ - private $major; - - /** @var VersionNumber */ - private $minor; - - /** @var VersionNumber */ - private $patch; - - /** @var null|PreReleaseSuffix */ - private $preReleaseSuffix; - - /** @var null|BuildMetaData */ - private $buildMetadata; - - public function __construct(string $versionString) { - $this->ensureVersionStringIsValid($versionString); - $this->originalVersionString = $versionString; - } - - /** - * @throws NoPreReleaseSuffixException - */ - public function getPreReleaseSuffix(): PreReleaseSuffix { - if ($this->preReleaseSuffix === null) { - throw new NoPreReleaseSuffixException('No pre-release suffix set'); - } - - return $this->preReleaseSuffix; - } - - public function getOriginalString(): string { - return $this->originalVersionString; - } - - public function getVersionString(): string { - $str = \sprintf( - '%d.%d.%d', - $this->getMajor()->getValue() ?? 0, - $this->getMinor()->getValue() ?? 0, - $this->getPatch()->getValue() ?? 0 - ); - - if (!$this->hasPreReleaseSuffix()) { - return $str; - } - - return $str . '-' . $this->getPreReleaseSuffix()->asString(); - } - - public function hasPreReleaseSuffix(): bool { - return $this->preReleaseSuffix !== null; - } - - public function equals(Version $other): bool { - if ($this->getVersionString() !== $other->getVersionString()) { - return false; - } - - if ($this->hasBuildMetaData() !== $other->hasBuildMetaData()) { - return false; - } - - if ($this->hasBuildMetaData() && $other->hasBuildMetaData() && - !$this->getBuildMetaData()->equals($other->getBuildMetaData())) { - return false; - } - - return true; - } - - public function isGreaterThan(Version $version): bool { - if ($version->getMajor()->getValue() > $this->getMajor()->getValue()) { - return false; - } - - if ($version->getMajor()->getValue() < $this->getMajor()->getValue()) { - return true; - } - - if ($version->getMinor()->getValue() > $this->getMinor()->getValue()) { - return false; - } - - if ($version->getMinor()->getValue() < $this->getMinor()->getValue()) { - return true; - } - - if ($version->getPatch()->getValue() > $this->getPatch()->getValue()) { - return false; - } - - if ($version->getPatch()->getValue() < $this->getPatch()->getValue()) { - return true; - } - - if (!$version->hasPreReleaseSuffix() && !$this->hasPreReleaseSuffix()) { - return false; - } - - if ($version->hasPreReleaseSuffix() && !$this->hasPreReleaseSuffix()) { - return true; - } - - if (!$version->hasPreReleaseSuffix() && $this->hasPreReleaseSuffix()) { - return false; - } - - return $this->getPreReleaseSuffix()->isGreaterThan($version->getPreReleaseSuffix()); - } - - public function getMajor(): VersionNumber { - return $this->major; - } - - public function getMinor(): VersionNumber { - return $this->minor; - } - - public function getPatch(): VersionNumber { - return $this->patch; - } - - /** - * @psalm-assert-if-true BuildMetaData $this->buildMetadata - * @psalm-assert-if-true BuildMetaData $this->getBuildMetaData() - */ - public function hasBuildMetaData(): bool { - return $this->buildMetadata !== null; - } - - /** - * @throws NoBuildMetaDataException - */ - public function getBuildMetaData(): BuildMetaData { - if (!$this->hasBuildMetaData()) { - throw new NoBuildMetaDataException('No build metadata set'); - } - - return $this->buildMetadata; - } - - /** - * @param string[] $matches - * - * @throws InvalidPreReleaseSuffixException - */ - private function parseVersion(array $matches): void { - $this->major = new VersionNumber((int)$matches['Major']); - $this->minor = new VersionNumber((int)$matches['Minor']); - $this->patch = isset($matches['Patch']) ? new VersionNumber((int)$matches['Patch']) : new VersionNumber(0); - - if (isset($matches['PreReleaseSuffix']) && $matches['PreReleaseSuffix'] !== '') { - $this->preReleaseSuffix = new PreReleaseSuffix($matches['PreReleaseSuffix']); - } - - if (isset($matches['BuildMetadata'])) { - $this->buildMetadata = new BuildMetaData($matches['BuildMetadata']); - } - } - - /** - * @param string $version - * - * @throws InvalidVersionException - */ - private function ensureVersionStringIsValid($version): void { - $regex = '/^v? - (?P0|[1-9]\d*) - \\. - (?P0|[1-9]\d*) - (\\. - (?P0|[1-9]\d*) - )? - (?: - - - (?(?:(dev|beta|b|rc|alpha|a|patch|p|pl)\.?\d*)) - )? - (?: - \\+ - (?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-@]+)*) - )? - $/xi'; - - if (\preg_match($regex, $version, $matches) !== 1) { - throw new InvalidVersionException( - \sprintf("Version string '%s' does not follow SemVer semantics", $version) - ); - } - - $this->parseVersion($matches); - } -} diff --git a/vendor/phar-io/version/src/VersionConstraintParser.php b/vendor/phar-io/version/src/VersionConstraintParser.php deleted file mode 100644 index 03d6a09..0000000 --- a/vendor/phar-io/version/src/VersionConstraintParser.php +++ /dev/null @@ -1,115 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class VersionConstraintParser { - /** - * @throws UnsupportedVersionConstraintException - */ - public function parse(string $value): VersionConstraint { - if (\strpos($value, '|') !== false) { - return $this->handleOrGroup($value); - } - - if (!\preg_match('/^[\^~*]?v?[\d.*]+(?:-.*)?$/i', $value)) { - throw new UnsupportedVersionConstraintException( - \sprintf('Version constraint %s is not supported.', $value) - ); - } - - switch ($value[0]) { - case '~': - return $this->handleTildeOperator($value); - case '^': - return $this->handleCaretOperator($value); - } - - $constraint = new VersionConstraintValue($value); - - if ($constraint->getMajor()->isAny()) { - return new AnyVersionConstraint(); - } - - if ($constraint->getMinor()->isAny()) { - return new SpecificMajorVersionConstraint( - $constraint->getVersionString(), - $constraint->getMajor()->getValue() ?? 0 - ); - } - - if ($constraint->getPatch()->isAny()) { - return new SpecificMajorAndMinorVersionConstraint( - $constraint->getVersionString(), - $constraint->getMajor()->getValue() ?? 0, - $constraint->getMinor()->getValue() ?? 0 - ); - } - - return new ExactVersionConstraint($constraint->getVersionString()); - } - - private function handleOrGroup(string $value): OrVersionConstraintGroup { - $constraints = []; - - foreach (\preg_split('{\s*\|\|?\s*}', \trim($value)) as $groupSegment) { - $constraints[] = $this->parse(\trim($groupSegment)); - } - - return new OrVersionConstraintGroup($value, $constraints); - } - - private function handleTildeOperator(string $value): AndVersionConstraintGroup { - $constraintValue = new VersionConstraintValue(\substr($value, 1)); - - if ($constraintValue->getPatch()->isAny()) { - return $this->handleCaretOperator($value); - } - - $constraints = [ - new GreaterThanOrEqualToVersionConstraint( - $value, - new Version(\substr($value, 1)) - ), - new SpecificMajorAndMinorVersionConstraint( - $value, - $constraintValue->getMajor()->getValue() ?? 0, - $constraintValue->getMinor()->getValue() ?? 0 - ) - ]; - - return new AndVersionConstraintGroup($value, $constraints); - } - - private function handleCaretOperator(string $value): AndVersionConstraintGroup { - $constraintValue = new VersionConstraintValue(\substr($value, 1)); - - $constraints = [ - new GreaterThanOrEqualToVersionConstraint($value, new Version(\substr($value, 1))) - ]; - - if ($constraintValue->getMajor()->getValue() === 0) { - $constraints[] = new SpecificMajorAndMinorVersionConstraint( - $value, - $constraintValue->getMajor()->getValue() ?? 0, - $constraintValue->getMinor()->getValue() ?? 0 - ); - } else { - $constraints[] = new SpecificMajorVersionConstraint( - $value, - $constraintValue->getMajor()->getValue() ?? 0 - ); - } - - return new AndVersionConstraintGroup( - $value, - $constraints - ); - } -} diff --git a/vendor/phar-io/version/src/VersionConstraintValue.php b/vendor/phar-io/version/src/VersionConstraintValue.php deleted file mode 100644 index 0762e7c..0000000 --- a/vendor/phar-io/version/src/VersionConstraintValue.php +++ /dev/null @@ -1,88 +0,0 @@ -versionString = $versionString; - - $this->parseVersion($versionString); - } - - public function getLabel(): string { - return $this->label; - } - - public function getBuildMetaData(): string { - return $this->buildMetaData; - } - - public function getVersionString(): string { - return $this->versionString; - } - - public function getMajor(): VersionNumber { - return $this->major; - } - - public function getMinor(): VersionNumber { - return $this->minor; - } - - public function getPatch(): VersionNumber { - return $this->patch; - } - - private function parseVersion(string $versionString): void { - $this->extractBuildMetaData($versionString); - $this->extractLabel($versionString); - $this->stripPotentialVPrefix($versionString); - - $versionSegments = \explode('.', $versionString); - $this->major = new VersionNumber(\is_numeric($versionSegments[0]) ? (int)$versionSegments[0] : null); - - $minorValue = isset($versionSegments[1]) && \is_numeric($versionSegments[1]) ? (int)$versionSegments[1] : null; - $patchValue = isset($versionSegments[2]) && \is_numeric($versionSegments[2]) ? (int)$versionSegments[2] : null; - - $this->minor = new VersionNumber($minorValue); - $this->patch = new VersionNumber($patchValue); - } - - private function extractBuildMetaData(string &$versionString): void { - if (\preg_match('/\+(.*)/', $versionString, $matches) === 1) { - $this->buildMetaData = $matches[1]; - $versionString = \str_replace($matches[0], '', $versionString); - } - } - - private function extractLabel(string &$versionString): void { - if (\preg_match('/-(.*)/', $versionString, $matches) === 1) { - $this->label = $matches[1]; - $versionString = \str_replace($matches[0], '', $versionString); - } - } - - private function stripPotentialVPrefix(string &$versionString): void { - if ($versionString[0] !== 'v') { - return; - } - $versionString = \substr($versionString, 1); - } -} diff --git a/vendor/phar-io/version/src/VersionNumber.php b/vendor/phar-io/version/src/VersionNumber.php deleted file mode 100644 index 4833a9b..0000000 --- a/vendor/phar-io/version/src/VersionNumber.php +++ /dev/null @@ -1,28 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class VersionNumber { - - /** @var ?int */ - private $value; - - public function __construct(?int $value) { - $this->value = $value; - } - - public function isAny(): bool { - return $this->value === null; - } - - public function getValue(): ?int { - return $this->value; - } -} diff --git a/vendor/phar-io/version/src/constraints/AbstractVersionConstraint.php b/vendor/phar-io/version/src/constraints/AbstractVersionConstraint.php deleted file mode 100644 index 66201a1..0000000 --- a/vendor/phar-io/version/src/constraints/AbstractVersionConstraint.php +++ /dev/null @@ -1,23 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -abstract class AbstractVersionConstraint implements VersionConstraint { - /** @var string */ - private $originalValue; - - public function __construct(string $originalValue) { - $this->originalValue = $originalValue; - } - - public function asString(): string { - return $this->originalValue; - } -} diff --git a/vendor/phar-io/version/src/constraints/AndVersionConstraintGroup.php b/vendor/phar-io/version/src/constraints/AndVersionConstraintGroup.php deleted file mode 100644 index 5096f2f..0000000 --- a/vendor/phar-io/version/src/constraints/AndVersionConstraintGroup.php +++ /dev/null @@ -1,34 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class AndVersionConstraintGroup extends AbstractVersionConstraint { - /** @var VersionConstraint[] */ - private $constraints = []; - - /** - * @param VersionConstraint[] $constraints - */ - public function __construct(string $originalValue, array $constraints) { - parent::__construct($originalValue); - - $this->constraints = $constraints; - } - - public function complies(Version $version): bool { - foreach ($this->constraints as $constraint) { - if (!$constraint->complies($version)) { - return false; - } - } - - return true; - } -} diff --git a/vendor/phar-io/version/src/constraints/AnyVersionConstraint.php b/vendor/phar-io/version/src/constraints/AnyVersionConstraint.php deleted file mode 100644 index 1499f07..0000000 --- a/vendor/phar-io/version/src/constraints/AnyVersionConstraint.php +++ /dev/null @@ -1,20 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class AnyVersionConstraint implements VersionConstraint { - public function complies(Version $version): bool { - return true; - } - - public function asString(): string { - return '*'; - } -} diff --git a/vendor/phar-io/version/src/constraints/ExactVersionConstraint.php b/vendor/phar-io/version/src/constraints/ExactVersionConstraint.php deleted file mode 100644 index 1d675c9..0000000 --- a/vendor/phar-io/version/src/constraints/ExactVersionConstraint.php +++ /dev/null @@ -1,22 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class ExactVersionConstraint extends AbstractVersionConstraint { - public function complies(Version $version): bool { - $other = $version->getVersionString(); - - if ($version->hasBuildMetaData()) { - $other .= '+' . $version->getBuildMetaData()->asString(); - } - - return $this->asString() === $other; - } -} diff --git a/vendor/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php b/vendor/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php deleted file mode 100644 index ec37172..0000000 --- a/vendor/phar-io/version/src/constraints/GreaterThanOrEqualToVersionConstraint.php +++ /dev/null @@ -1,26 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class GreaterThanOrEqualToVersionConstraint extends AbstractVersionConstraint { - /** @var Version */ - private $minimalVersion; - - public function __construct(string $originalValue, Version $minimalVersion) { - parent::__construct($originalValue); - - $this->minimalVersion = $minimalVersion; - } - - public function complies(Version $version): bool { - return $version->getVersionString() === $this->minimalVersion->getVersionString() - || $version->isGreaterThan($this->minimalVersion); - } -} diff --git a/vendor/phar-io/version/src/constraints/OrVersionConstraintGroup.php b/vendor/phar-io/version/src/constraints/OrVersionConstraintGroup.php deleted file mode 100644 index 59fd382..0000000 --- a/vendor/phar-io/version/src/constraints/OrVersionConstraintGroup.php +++ /dev/null @@ -1,35 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class OrVersionConstraintGroup extends AbstractVersionConstraint { - /** @var VersionConstraint[] */ - private $constraints = []; - - /** - * @param string $originalValue - * @param VersionConstraint[] $constraints - */ - public function __construct($originalValue, array $constraints) { - parent::__construct($originalValue); - - $this->constraints = $constraints; - } - - public function complies(Version $version): bool { - foreach ($this->constraints as $constraint) { - if ($constraint->complies($version)) { - return true; - } - } - - return false; - } -} diff --git a/vendor/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php b/vendor/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php deleted file mode 100644 index 302aa31..0000000 --- a/vendor/phar-io/version/src/constraints/SpecificMajorAndMinorVersionConstraint.php +++ /dev/null @@ -1,33 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class SpecificMajorAndMinorVersionConstraint extends AbstractVersionConstraint { - /** @var int */ - private $major; - - /** @var int */ - private $minor; - - public function __construct(string $originalValue, int $major, int $minor) { - parent::__construct($originalValue); - - $this->major = $major; - $this->minor = $minor; - } - - public function complies(Version $version): bool { - if ($version->getMajor()->getValue() !== $this->major) { - return false; - } - - return $version->getMinor()->getValue() === $this->minor; - } -} diff --git a/vendor/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php b/vendor/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php deleted file mode 100644 index 968b809..0000000 --- a/vendor/phar-io/version/src/constraints/SpecificMajorVersionConstraint.php +++ /dev/null @@ -1,25 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -class SpecificMajorVersionConstraint extends AbstractVersionConstraint { - /** @var int */ - private $major; - - public function __construct(string $originalValue, int $major) { - parent::__construct($originalValue); - - $this->major = $major; - } - - public function complies(Version $version): bool { - return $version->getMajor()->getValue() === $this->major; - } -} diff --git a/vendor/phar-io/version/src/constraints/VersionConstraint.php b/vendor/phar-io/version/src/constraints/VersionConstraint.php deleted file mode 100644 index e94f9e0..0000000 --- a/vendor/phar-io/version/src/constraints/VersionConstraint.php +++ /dev/null @@ -1,16 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -interface VersionConstraint { - public function complies(Version $version): bool; - - public function asString(): string; -} diff --git a/vendor/phar-io/version/src/exceptions/Exception.php b/vendor/phar-io/version/src/exceptions/Exception.php deleted file mode 100644 index 3ea458f..0000000 --- a/vendor/phar-io/version/src/exceptions/Exception.php +++ /dev/null @@ -1,15 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -use Throwable; - -interface Exception extends Throwable { -} diff --git a/vendor/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php b/vendor/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php deleted file mode 100644 index bc0b0c3..0000000 --- a/vendor/phar-io/version/src/exceptions/InvalidPreReleaseSuffixException.php +++ /dev/null @@ -1,5 +0,0 @@ -, Sebastian Heuer , Sebastian Bergmann - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace PharIo\Version; - -final class UnsupportedVersionConstraintException extends \RuntimeException implements Exception { -} diff --git a/vendor/phpdocumentor/reflection-common/.github/dependabot.yml b/vendor/phpdocumentor/reflection-common/.github/dependabot.yml deleted file mode 100644 index c630ffa..0000000 --- a/vendor/phpdocumentor/reflection-common/.github/dependabot.yml +++ /dev/null @@ -1,7 +0,0 @@ -version: 2 -updates: -- package-ecosystem: composer - directory: "/" - schedule: - interval: daily - open-pull-requests-limit: 10 diff --git a/vendor/phpdocumentor/reflection-common/.github/workflows/push.yml b/vendor/phpdocumentor/reflection-common/.github/workflows/push.yml deleted file mode 100644 index 484410e..0000000 --- a/vendor/phpdocumentor/reflection-common/.github/workflows/push.yml +++ /dev/null @@ -1,223 +0,0 @@ -on: - push: - branches: - - 2.x - pull_request: -name: Qa workflow -jobs: - setup: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - - name: Restore/cache vendor folder - uses: actions/cache@v1 - with: - path: vendor - key: all-build-${{ hashFiles('**/composer.lock') }} - restore-keys: | - all-build-${{ hashFiles('**/composer.lock') }} - all-build- - - - name: Restore/cache tools folder - uses: actions/cache@v1 - with: - path: tools - key: all-tools-${{ github.sha }} - restore-keys: | - all-tools-${{ github.sha }}- - all-tools- - - - name: composer - uses: docker://composer - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - args: install --no-interaction --prefer-dist --optimize-autoloader - - - name: Install phive - run: make install-phive - - - name: Install PHAR dependencies - run: tools/phive.phar --no-progress install --copy --trust-gpg-keys 4AA394086372C20A,8A03EA3B385DBAA1 --force-accept-unsigned - - phpunit-with-coverage: - runs-on: ubuntu-latest - name: Unit tests - needs: setup - steps: - - uses: actions/checkout@v2 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: 7.2 - ini-values: memory_limit=2G, display_errors=On, error_reporting=-1 - coverage: pcov - - - name: Restore/cache tools folder - uses: actions/cache@v1 - with: - path: tools - key: all-tools-${{ github.sha }} - restore-keys: | - all-tools-${{ github.sha }}- - all-tools- - - - name: Get composer cache directory - id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" - - - name: Cache composer dependencies - uses: actions/cache@v1 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ubuntu-latest-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ubuntu-latest-composer- - - - name: Install Composer dependencies - run: | - composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader - - - name: Run PHPUnit - run: php tools/phpunit - - phpunit: - runs-on: ${{ matrix.operating-system }} - strategy: - matrix: - operating-system: - - ubuntu-latest - - windows-latest - - macOS-latest - php-versions: ['7.2', '7.3', '7.4', '8.0'] - name: Unit tests for PHP version ${{ matrix.php-versions }} on ${{ matrix.operating-system }} - needs: - - setup - - phpunit-with-coverage - steps: - - uses: actions/checkout@v2 - - - name: Restore/cache tools folder - uses: actions/cache@v1 - with: - path: tools - key: all-tools-${{ github.sha }} - restore-keys: | - all-tools-${{ github.sha }}- - all-tools- - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: ${{ matrix.php-versions }} - ini-values: memory_limit=2G, display_errors=On, error_reporting=-1 - coverage: none - - - name: Get composer cache directory - id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" - - - name: Cache composer dependencies - uses: actions/cache@v1 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - - - name: Install Composer dependencies - run: | - composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader - - - name: Run PHPUnit - continue-on-error: true - run: php tools/phpunit - - codestyle: - runs-on: ubuntu-latest - needs: [setup, phpunit] - steps: - - uses: actions/checkout@v2 - - name: Restore/cache vendor folder - uses: actions/cache@v1 - with: - path: vendor - key: all-build-${{ hashFiles('**/composer.lock') }} - restore-keys: | - all-build-${{ hashFiles('**/composer.lock') }} - all-build- - - name: Code style check - uses: phpDocumentor/coding-standard@latest - with: - args: -s - - phpstan: - runs-on: ubuntu-latest - needs: [setup, phpunit] - steps: - - uses: actions/checkout@v2 - - name: Restore/cache vendor folder - uses: actions/cache@v1 - with: - path: vendor - key: all-build-${{ hashFiles('**/composer.lock') }} - restore-keys: | - all-build-${{ hashFiles('**/composer.lock') }} - all-build- - - name: PHPStan - uses: phpDocumentor/phpstan-ga@latest - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - args: analyse src --configuration phpstan.neon - - psalm: - runs-on: ubuntu-latest - needs: [setup, phpunit] - steps: - - uses: actions/checkout@v2 - - - name: Setup PHP - uses: shivammathur/setup-php@v2 - with: - php-version: 7.2 - ini-values: memory_limit=2G, display_errors=On, error_reporting=-1 - tools: psalm - coverage: none - - - name: Get composer cache directory - id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" - - - name: Cache composer dependencies - uses: actions/cache@v1 - with: - path: ${{ steps.composer-cache.outputs.dir }} - key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} - restore-keys: ${{ runner.os }}-composer- - - - name: Install Composer dependencies - run: | - composer install --no-progress --no-suggest --prefer-dist --optimize-autoloader - - - name: Psalm - run: psalm --output-format=github - - bc_check: - name: BC Check - runs-on: ubuntu-latest - needs: [setup, phpunit] - steps: - - uses: actions/checkout@v2 - - name: fetch tags - run: git fetch --depth=1 origin +refs/tags/*:refs/tags/* - - name: Restore/cache vendor folder - uses: actions/cache@v1 - with: - path: vendor - key: all-build-${{ hashFiles('**/composer.lock') }} - restore-keys: | - all-build-${{ hashFiles('**/composer.lock') }} - all-build- - - name: Roave BC Check - uses: docker://nyholm/roave-bc-check-ga diff --git a/vendor/phpdocumentor/reflection-common/README.md b/vendor/phpdocumentor/reflection-common/README.md deleted file mode 100644 index 70f830d..0000000 --- a/vendor/phpdocumentor/reflection-common/README.md +++ /dev/null @@ -1,11 +0,0 @@ -[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -![Qa workflow](https://github.com/phpDocumentor/ReflectionCommon/workflows/Qa%20workflow/badge.svg) -[![Coveralls Coverage](https://img.shields.io/coveralls/github/phpDocumentor/ReflectionCommon.svg)](https://coveralls.io/github/phpDocumentor/ReflectionCommon?branch=master) -[![Scrutinizer Code Coverage](https://img.shields.io/scrutinizer/coverage/g/phpDocumentor/ReflectionCommon.svg)](https://scrutinizer-ci.com/g/phpDocumentor/ReflectionCommon/?branch=master) -[![Scrutinizer Code Quality](https://img.shields.io/scrutinizer/g/phpDocumentor/ReflectionCommon.svg)](https://scrutinizer-ci.com/g/phpDocumentor/ReflectionCommon/?branch=master) -[![Stable Version](https://img.shields.io/packagist/v/phpDocumentor/Reflection-Common.svg)](https://packagist.org/packages/phpDocumentor/Reflection-Common) -[![Unstable Version](https://img.shields.io/packagist/vpre/phpDocumentor/Reflection-Common.svg)](https://packagist.org/packages/phpDocumentor/Reflection-Common) - - -ReflectionCommon -================ diff --git a/vendor/phpdocumentor/reflection-common/composer.json b/vendor/phpdocumentor/reflection-common/composer.json deleted file mode 100644 index 4d128b4..0000000 --- a/vendor/phpdocumentor/reflection-common/composer.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "phpdocumentor/reflection-common", - "keywords": ["phpdoc", "phpDocumentor", "reflection", "static analysis", "FQSEN"], - "homepage": "http://www.phpdoc.org", - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "license": "MIT", - "authors": [ - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "require": { - "php": "^7.2 || ^8.0" - }, - "autoload" : { - "psr-4" : { - "phpDocumentor\\Reflection\\": "src/" - } - }, - "require-dev": { - }, - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - } -} diff --git a/vendor/phpdocumentor/reflection-common/src/Element.php b/vendor/phpdocumentor/reflection-common/src/Element.php deleted file mode 100644 index 8923e4f..0000000 --- a/vendor/phpdocumentor/reflection-common/src/Element.php +++ /dev/null @@ -1,30 +0,0 @@ -fqsen = $fqsen; - - if (isset($matches[2])) { - $this->name = $matches[2]; - } else { - $matches = explode('\\', $fqsen); - $name = end($matches); - assert(is_string($name)); - $this->name = trim($name, '()'); - } - } - - /** - * converts this class to string. - */ - public function __toString() : string - { - return $this->fqsen; - } - - /** - * Returns the name of the element without path. - */ - public function getName() : string - { - return $this->name; - } -} diff --git a/vendor/phpdocumentor/reflection-common/src/Location.php b/vendor/phpdocumentor/reflection-common/src/Location.php deleted file mode 100644 index 177deed..0000000 --- a/vendor/phpdocumentor/reflection-common/src/Location.php +++ /dev/null @@ -1,53 +0,0 @@ -lineNumber = $lineNumber; - $this->columnNumber = $columnNumber; - } - - /** - * Returns the line number that is covered by this location. - */ - public function getLineNumber() : int - { - return $this->lineNumber; - } - - /** - * Returns the column number (character position on a line) for this location object. - */ - public function getColumnNumber() : int - { - return $this->columnNumber; - } -} diff --git a/vendor/phpdocumentor/reflection-common/src/Project.php b/vendor/phpdocumentor/reflection-common/src/Project.php deleted file mode 100644 index 57839fd..0000000 --- a/vendor/phpdocumentor/reflection-common/src/Project.php +++ /dev/null @@ -1,25 +0,0 @@ -create($docComment); -``` - -The `create` method will yield an object of type `\phpDocumentor\Reflection\DocBlock` -whose methods can be queried: - -```php -// Contains the summary for this DocBlock -$summary = $docblock->getSummary(); - -// Contains \phpDocumentor\Reflection\DocBlock\Description object -$description = $docblock->getDescription(); - -// You can either cast it to string -$description = (string) $docblock->getDescription(); - -// Or use the render method to get a string representation of the Description. -$description = $docblock->getDescription()->render(); -``` - -> For more examples it would be best to review the scripts in the [`/examples` folder](/examples). diff --git a/vendor/phpdocumentor/reflection-docblock/composer.json b/vendor/phpdocumentor/reflection-docblock/composer.json deleted file mode 100644 index cf8f49d..0000000 --- a/vendor/phpdocumentor/reflection-docblock/composer.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "name": "phpdocumentor/reflection-docblock", - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "type": "library", - "license": "MIT", - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - }, - { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" - } - ], - "require": { - "php": "^7.4 || ^8.0", - "phpdocumentor/type-resolver": "^1.7", - "webmozart/assert": "^1.9.1", - "phpdocumentor/reflection-common": "^2.2", - "ext-filter": "*", - "phpstan/phpdoc-parser": "^1.7", - "doctrine/deprecations": "^1.1" - }, - "require-dev": { - "mockery/mockery": "~1.3.5", - "phpunit/phpunit": "^9.5", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan-webmozart-assert": "^1.2", - "vimeo/psalm": "^5.13" - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "phpDocumentor\\Reflection\\": ["tests/unit", "tests/integration"] - } - }, - "config": { - "platform": { - "php":"7.4.0" - }, - "allow-plugins": { - "phpstan/extension-installer": true - } - }, - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php deleted file mode 100644 index 90d8066..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock.php +++ /dev/null @@ -1,228 +0,0 @@ -summary = $summary; - $this->description = $description ?: new DocBlock\Description(''); - foreach ($tags as $tag) { - $this->addTag($tag); - } - - $this->context = $context; - $this->location = $location; - - $this->isTemplateEnd = $isTemplateEnd; - $this->isTemplateStart = $isTemplateStart; - } - - public function getSummary(): string - { - return $this->summary; - } - - public function getDescription(): DocBlock\Description - { - return $this->description; - } - - /** - * Returns the current context. - */ - public function getContext(): ?Types\Context - { - return $this->context; - } - - /** - * Returns the current location. - */ - public function getLocation(): ?Location - { - return $this->location; - } - - /** - * Returns whether this DocBlock is the start of a Template section. - * - * A Docblock may serve as template for a series of subsequent DocBlocks. This is indicated by a special marker - * (`#@+`) that is appended directly after the opening `/**` of a DocBlock. - * - * An example of such an opening is: - * - * ``` - * /**#@+ - * * My DocBlock - * * / - * ``` - * - * The description and tags (not the summary!) are copied onto all subsequent DocBlocks and also applied to all - * elements that follow until another DocBlock is found that contains the closing marker (`#@-`). - * - * @see self::isTemplateEnd() for the check whether a closing marker was provided. - */ - public function isTemplateStart(): bool - { - return $this->isTemplateStart; - } - - /** - * Returns whether this DocBlock is the end of a Template section. - * - * @see self::isTemplateStart() for a more complete description of the Docblock Template functionality. - */ - public function isTemplateEnd(): bool - { - return $this->isTemplateEnd; - } - - /** - * Returns the tags for this DocBlock. - * - * @return Tag[] - */ - public function getTags(): array - { - return $this->tags; - } - - /** - * Returns an array of tags matching the given name. If no tags are found - * an empty array is returned. - * - * @param string $name String to search by. - * - * @return Tag[] - */ - public function getTagsByName(string $name): array - { - $result = []; - - foreach ($this->getTags() as $tag) { - if ($tag->getName() !== $name) { - continue; - } - - $result[] = $tag; - } - - return $result; - } - - /** - * Returns an array of tags with type matching the given name. If no tags are found - * an empty array is returned. - * - * @param string $name String to search by. - * - * @return TagWithType[] - */ - public function getTagsWithTypeByName(string $name): array - { - $result = []; - - foreach ($this->getTagsByName($name) as $tag) { - if (!$tag instanceof TagWithType) { - continue; - } - - $result[] = $tag; - } - - return $result; - } - - /** - * Checks if a tag of a certain type is present in this DocBlock. - * - * @param string $name Tag name to check for. - */ - public function hasTag(string $name): bool - { - foreach ($this->getTags() as $tag) { - if ($tag->getName() === $name) { - return true; - } - } - - return false; - } - - /** - * Remove a tag from this DocBlock. - * - * @param Tag $tagToRemove The tag to remove. - */ - public function removeTag(Tag $tagToRemove): void - { - foreach ($this->tags as $key => $tag) { - if ($tag === $tagToRemove) { - unset($this->tags[$key]); - break; - } - } - } - - /** - * Adds a tag to this DocBlock. - * - * @param Tag $tag The tag to add. - */ - private function addTag(Tag $tag): void - { - $this->tags[] = $tag; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php deleted file mode 100644 index a188ae3..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Description.php +++ /dev/null @@ -1,118 +0,0 @@ -create('This is a {@see Description}', $context); - * - * The description factory will interpret the given body and create a body template and list of tags from them, and pass - * that onto the constructor if this class. - * - * > The $context variable is a class of type {@see \phpDocumentor\Reflection\Types\Context} and contains the namespace - * > and the namespace aliases that apply to this DocBlock. These are used by the Factory to resolve and expand partial - * > type names and FQSENs. - * - * If you do not want to use the DescriptionFactory you can pass a body template and tag listing like this: - * - * $description = new Description( - * 'This is a %1$s', - * [ new See(new Fqsen('\phpDocumentor\Reflection\DocBlock\Description')) ] - * ); - * - * It is generally recommended to use the Factory as that will also apply escaping rules, while the Description object - * is mainly responsible for rendering. - * - * @see DescriptionFactory to create a new Description. - * @see Tags\Formatter for the formatting of the body and tags. - */ -class Description -{ - private string $bodyTemplate; - - /** @var Tag[] */ - private array $tags; - - /** - * Initializes a Description with its body (template) and a listing of the tags used in the body template. - * - * @param Tag[] $tags - */ - public function __construct(string $bodyTemplate, array $tags = []) - { - $this->bodyTemplate = $bodyTemplate; - $this->tags = $tags; - } - - /** - * Returns the body template. - */ - public function getBodyTemplate(): string - { - return $this->bodyTemplate; - } - - /** - * Returns the tags for this DocBlock. - * - * @return Tag[] - */ - public function getTags(): array - { - return $this->tags; - } - - /** - * Renders this description as a string where the provided formatter will format the tags in the expected string - * format. - */ - public function render(?Formatter $formatter = null): string - { - if ($this->tags === []) { - return vsprintf($this->bodyTemplate, []); - } - - if ($formatter === null) { - $formatter = new PassthroughFormatter(); - } - - $tags = []; - foreach ($this->tags as $tag) { - $tags[] = '{' . $formatter->format($tag) . '}'; - } - - return vsprintf($this->bodyTemplate, $tags); - } - - /** - * Returns a plain string representation of this description. - */ - public function __toString(): string - { - return $this->render(); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php deleted file mode 100644 index e7bc616..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/DescriptionFactory.php +++ /dev/null @@ -1,178 +0,0 @@ -tagFactory = $tagFactory; - } - - /** - * Returns the parsed text of this description. - */ - public function create(string $contents, ?TypeContext $context = null): Description - { - $tokens = $this->lex($contents); - $count = count($tokens); - $tagCount = 0; - $tags = []; - - for ($i = 1; $i < $count; $i += 2) { - $tags[] = $this->tagFactory->create($tokens[$i], $context); - $tokens[$i] = '%' . ++$tagCount . '$s'; - } - - //In order to allow "literal" inline tags, the otherwise invalid - //sequence "{@}" is changed to "@", and "{}" is changed to "}". - //"%" is escaped to "%%" because of vsprintf. - //See unit tests for examples. - for ($i = 0; $i < $count; $i += 2) { - $tokens[$i] = str_replace(['{@}', '{}', '%'], ['@', '}', '%%'], $tokens[$i]); - } - - return new Description(implode('', $tokens), $tags); - } - - /** - * Strips the contents from superfluous whitespace and splits the description into a series of tokens. - * - * @return string[] A series of tokens of which the description text is composed. - */ - private function lex(string $contents): array - { - $contents = $this->removeSuperfluousStartingWhitespace($contents); - - // performance optimalization; if there is no inline tag, don't bother splitting it up. - if (strpos($contents, '{@') === false) { - return [$contents]; - } - - return Utils::pregSplit( - '/\{ - # "{@}" is not a valid inline tag. This ensures that we do not treat it as one, but treat it literally. - (?!@\}) - # We want to capture the whole tag line, but without the inline tag delimiters. - (\@ - # Match everything up to the next delimiter. - [^{}]* - # Nested inline tag content should not be captured, or it will appear in the result separately. - (?: - # Match nested inline tags. - (?: - # Because we did not catch the tag delimiters earlier, we must be explicit with them here. - # Notice that this also matches "{}", as a way to later introduce it as an escape sequence. - \{(?1)?\} - | - # Make sure we match hanging "{". - \{ - ) - # Match content after the nested inline tag. - [^{}]* - )* # If there are more inline tags, match them as well. We use "*" since there may not be any - # nested inline tags. - ) - \}/Sux', - $contents, - 0, - PREG_SPLIT_DELIM_CAPTURE - ); - } - - /** - * Removes the superfluous from a multi-line description. - * - * When a description has more than one line then it can happen that the second and subsequent lines have an - * additional indentation. This is commonly in use with tags like this: - * - * {@}since 1.1.0 This is an example - * description where we have an - * indentation in the second and - * subsequent lines. - * - * If we do not normalize the indentation then we have superfluous whitespace on the second and subsequent - * lines and this may cause rendering issues when, for example, using a Markdown converter. - */ - private function removeSuperfluousStartingWhitespace(string $contents): string - { - $lines = Utils::pregSplit("/\r\n?|\n/", $contents); - - // if there is only one line then we don't have lines with superfluous whitespace and - // can use the contents as-is - if (count($lines) <= 1) { - return $contents; - } - - // determine how many whitespace characters need to be stripped - $startingSpaceCount = 9999999; - for ($i = 1, $iMax = count($lines); $i < $iMax; ++$i) { - // lines with a no length do not count as they are not indented at all - if (trim($lines[$i]) === '') { - continue; - } - - // determine the number of prefixing spaces by checking the difference in line length before and after - // an ltrim - $startingSpaceCount = min($startingSpaceCount, strlen($lines[$i]) - strlen(ltrim($lines[$i]))); - } - - // strip the number of spaces from each line - if ($startingSpaceCount > 0) { - for ($i = 1, $iMax = count($lines); $i < $iMax; ++$i) { - $lines[$i] = substr($lines[$i], $startingSpaceCount); - } - } - - return implode("\n", $lines); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php deleted file mode 100644 index 7136e28..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/ExampleFinder.php +++ /dev/null @@ -1,158 +0,0 @@ -getFilePath(); - - $file = $this->getExampleFileContents($filename); - if (!$file) { - return sprintf('** File not found : %s **', $filename); - } - - return implode('', array_slice($file, $example->getStartingLine() - 1, $example->getLineCount())); - } - - /** - * Registers the project's root directory where an 'examples' folder can be expected. - */ - public function setSourceDirectory(string $directory = ''): void - { - $this->sourceDirectory = $directory; - } - - /** - * Returns the project's root directory where an 'examples' folder can be expected. - */ - public function getSourceDirectory(): string - { - return $this->sourceDirectory; - } - - /** - * Registers a series of directories that may contain examples. - * - * @param string[] $directories - */ - public function setExampleDirectories(array $directories): void - { - $this->exampleDirectories = $directories; - } - - /** - * Returns a series of directories that may contain examples. - * - * @return string[] - */ - public function getExampleDirectories(): array - { - return $this->exampleDirectories; - } - - /** - * Attempts to find the requested example file and returns its contents or null if no file was found. - * - * This method will try several methods in search of the given example file, the first one it encounters is - * returned: - * - * 1. Iterates through all examples folders for the given filename - * 2. Checks the source folder for the given filename - * 3. Checks the 'examples' folder in the current working directory for examples - * 4. Checks the path relative to the current working directory for the given filename - * - * @return string[] all lines of the example file - */ - private function getExampleFileContents(string $filename): ?array - { - $normalizedPath = null; - - foreach ($this->exampleDirectories as $directory) { - $exampleFileFromConfig = $this->constructExamplePath($directory, $filename); - if (is_readable($exampleFileFromConfig)) { - $normalizedPath = $exampleFileFromConfig; - break; - } - } - - if (!$normalizedPath) { - if (is_readable($this->getExamplePathFromSource($filename))) { - $normalizedPath = $this->getExamplePathFromSource($filename); - } elseif (is_readable($this->getExamplePathFromExampleDirectory($filename))) { - $normalizedPath = $this->getExamplePathFromExampleDirectory($filename); - } elseif (is_readable($filename)) { - $normalizedPath = $filename; - } - } - - $lines = $normalizedPath && is_readable($normalizedPath) ? file($normalizedPath) : false; - - return $lines !== false ? $lines : null; - } - - /** - * Get example filepath based on the example directory inside your project. - */ - private function getExamplePathFromExampleDirectory(string $file): string - { - return getcwd() . DIRECTORY_SEPARATOR . 'examples' . DIRECTORY_SEPARATOR . $file; - } - - /** - * Returns a path to the example file in the given directory.. - */ - private function constructExamplePath(string $directory, string $file): string - { - return rtrim($directory, '\\/') . DIRECTORY_SEPARATOR . $file; - } - - /** - * Get example filepath based on sourcecode. - */ - private function getExamplePathFromSource(string $file): string - { - return sprintf( - '%s%s%s', - trim($this->getSourceDirectory(), '\\/'), - DIRECTORY_SEPARATOR, - trim($file, '"') - ); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php deleted file mode 100644 index 31ca29c..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Serializer.php +++ /dev/null @@ -1,156 +0,0 @@ -indent = $indent; - $this->indentString = $indentString; - $this->isFirstLineIndented = $indentFirstLine; - $this->lineLength = $lineLength; - $this->tagFormatter = $tagFormatter ?: new PassthroughFormatter(); - $this->lineEnding = $lineEnding; - } - - /** - * Generate a DocBlock comment. - * - * @param DocBlock $docblock The DocBlock to serialize. - * - * @return string The serialized doc block. - */ - public function getDocComment(DocBlock $docblock): string - { - $indent = str_repeat($this->indentString, $this->indent); - $firstIndent = $this->isFirstLineIndented ? $indent : ''; - // 3 === strlen(' * ') - $wrapLength = $this->lineLength ? $this->lineLength - strlen($indent) - 3 : null; - - $text = $this->removeTrailingSpaces( - $indent, - $this->addAsterisksForEachLine( - $indent, - $this->getSummaryAndDescriptionTextBlock($docblock, $wrapLength) - ) - ); - - $comment = $firstIndent . "/**\n"; - if ($text) { - $comment .= $indent . ' * ' . $text . "\n"; - $comment .= $indent . " *\n"; - } - - $comment = $this->addTagBlock($docblock, $wrapLength, $indent, $comment); - - return str_replace("\n", $this->lineEnding, $comment . $indent . ' */'); - } - - private function removeTrailingSpaces(string $indent, string $text): string - { - return str_replace( - sprintf("\n%s * \n", $indent), - sprintf("\n%s *\n", $indent), - $text - ); - } - - private function addAsterisksForEachLine(string $indent, string $text): string - { - return str_replace( - "\n", - sprintf("\n%s * ", $indent), - $text - ); - } - - private function getSummaryAndDescriptionTextBlock(DocBlock $docblock, ?int $wrapLength): string - { - $text = $docblock->getSummary() . ((string) $docblock->getDescription() ? "\n\n" . $docblock->getDescription() - : ''); - if ($wrapLength !== null) { - $text = wordwrap($text, $wrapLength); - - return $text; - } - - return $text; - } - - private function addTagBlock(DocBlock $docblock, ?int $wrapLength, string $indent, string $comment): string - { - foreach ($docblock->getTags() as $tag) { - $tagText = $this->tagFormatter->format($tag); - if ($wrapLength !== null) { - $tagText = wordwrap($tagText, $wrapLength); - } - - $tagText = str_replace( - "\n", - sprintf("\n%s * ", $indent), - $tagText - ); - - $comment .= sprintf("%s * %s\n", $indent, $tagText); - } - - return $comment; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php deleted file mode 100644 index 7360a70..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/StandardTagFactory.php +++ /dev/null @@ -1,364 +0,0 @@ - Important: each parameter in addition to the body variable for the `create` method must default to null, otherwise - * > it violates the constraint with the interface; it is recommended to use the {@see Assert::notNull()} method to - * > verify that a dependency is actually passed. - * - * This Factory also features a Service Locator component that is used to pass the right dependencies to the - * `create` method of a tag; each dependency should be registered as a service or as a parameter. - * - * When you want to use a Tag of your own with custom handling you need to call the `registerTagHandler` method, pass - * the name of the tag and a Fully Qualified Class Name pointing to a class that implements the Tag interface. - */ -final class StandardTagFactory implements TagFactory -{ - /** PCRE regular expression matching a tag name. */ - public const REGEX_TAGNAME = '[\w\-\_\\\\:]+'; - - /** - * @var array|Factory> An array with a tag as a key, and an - * FQCN to a class that handles it as an array value. - */ - private array $tagHandlerMappings = [ - 'author' => Author::class, - 'covers' => Covers::class, - 'deprecated' => Deprecated::class, - // 'example' => '\phpDocumentor\Reflection\DocBlock\Tags\Example', - 'link' => LinkTag::class, - 'method' => Method::class, - 'param' => Param::class, - 'property-read' => PropertyRead::class, - 'property' => Property::class, - 'property-write' => PropertyWrite::class, - 'return' => Return_::class, - 'see' => SeeTag::class, - 'since' => Since::class, - 'source' => Source::class, - 'throw' => Throws::class, - 'throws' => Throws::class, - 'uses' => Uses::class, - 'var' => Var_::class, - 'version' => Version::class, - ]; - - /** - * @var array> An array with a anotation s a key, and an - * FQCN to a class that handles it as an array value. - */ - private array $annotationMappings = []; - - /** - * @var ReflectionParameter[][] a lazy-loading cache containing parameters - * for each tagHandler that has been used. - */ - private array $tagHandlerParameterCache = []; - - private FqsenResolver $fqsenResolver; - - /** - * @var mixed[] an array representing a simple Service Locator where we can store parameters and - * services that can be inserted into the Factory Methods of Tag Handlers. - */ - private array $serviceLocator = []; - - /** - * Initialize this tag factory with the means to resolve an FQSEN and optionally a list of tag handlers. - * - * If no tag handlers are provided than the default list in the {@see self::$tagHandlerMappings} property - * is used. - * - * @see self::registerTagHandler() to add a new tag handler to the existing default list. - * - * @param array> $tagHandlers - */ - public function __construct(FqsenResolver $fqsenResolver, ?array $tagHandlers = null) - { - $this->fqsenResolver = $fqsenResolver; - if ($tagHandlers !== null) { - $this->tagHandlerMappings = $tagHandlers; - } - - $this->addService($fqsenResolver, FqsenResolver::class); - } - - public function create(string $tagLine, ?TypeContext $context = null): Tag - { - if (!$context) { - $context = new TypeContext(''); - } - - [$tagName, $tagBody] = $this->extractTagParts($tagLine); - - return $this->createTag(trim($tagBody), $tagName, $context); - } - - /** - * @param mixed $value - */ - public function addParameter(string $name, $value): void - { - $this->serviceLocator[$name] = $value; - } - - public function addService(object $service, ?string $alias = null): void - { - $this->serviceLocator[$alias ?: get_class($service)] = $service; - } - - /** {@inheritDoc} */ - public function registerTagHandler(string $tagName, $handler): void - { - Assert::stringNotEmpty($tagName); - if (strpos($tagName, '\\') && $tagName[0] !== '\\') { - throw new InvalidArgumentException( - 'A namespaced tag must have a leading backslash as it must be fully qualified' - ); - } - - if (is_object($handler)) { - Assert::isInstanceOf($handler, Factory::class); - $this->tagHandlerMappings[$tagName] = $handler; - - return; - } - - Assert::classExists($handler); - Assert::implementsInterface($handler, Tag::class); - $this->tagHandlerMappings[$tagName] = $handler; - } - - /** - * Extracts all components for a tag. - * - * @return string[] - */ - private function extractTagParts(string $tagLine): array - { - $matches = []; - if (!preg_match('/^@(' . self::REGEX_TAGNAME . ')((?:[\s\(\{])\s*([^\s].*)|$)/us', $tagLine, $matches)) { - throw new InvalidArgumentException( - 'The tag "' . $tagLine . '" does not seem to be wellformed, please check it for errors' - ); - } - - if (count($matches) < 3) { - $matches[] = ''; - } - - return array_slice($matches, 1); - } - - /** - * Creates a new tag object with the given name and body or returns null if the tag name was recognized but the - * body was invalid. - */ - private function createTag(string $body, string $name, TypeContext $context): Tag - { - $handlerClassName = $this->findHandlerClassName($name, $context); - $arguments = $this->getArgumentsForParametersFromWiring( - $this->fetchParametersForHandlerFactoryMethod($handlerClassName), - $this->getServiceLocatorWithDynamicParameters($context, $name, $body) - ); - - if (array_key_exists('tagLine', $arguments)) { - $arguments['tagLine'] = sprintf('@%s %s', $name, $body); - } - - try { - $callable = [$handlerClassName, 'create']; - Assert::isCallable($callable); - /** @phpstan-var callable(string): ?Tag $callable */ - $tag = call_user_func_array($callable, $arguments); - - return $tag ?? InvalidTag::create($body, $name); - } catch (InvalidArgumentException $e) { - return InvalidTag::create($body, $name)->withError($e); - } - } - - /** - * Determines the Fully Qualified Class Name of the Factory or Tag (containing a Factory Method `create`). - * - * @return class-string|Factory - */ - private function findHandlerClassName(string $tagName, TypeContext $context) - { - $handlerClassName = Generic::class; - if (isset($this->tagHandlerMappings[$tagName])) { - $handlerClassName = $this->tagHandlerMappings[$tagName]; - } elseif ($this->isAnnotation($tagName)) { - // TODO: Annotation support is planned for a later stage and as such is disabled for now - $tagName = (string) $this->fqsenResolver->resolve($tagName, $context); - if (isset($this->annotationMappings[$tagName])) { - $handlerClassName = $this->annotationMappings[$tagName]; - } - } - - return $handlerClassName; - } - - /** - * Retrieves the arguments that need to be passed to the Factory Method with the given Parameters. - * - * @param ReflectionParameter[] $parameters - * @param mixed[] $locator - * - * @return mixed[] A series of values that can be passed to the Factory Method of the tag whose parameters - * is provided with this method. - */ - private function getArgumentsForParametersFromWiring(array $parameters, array $locator): array - { - $arguments = []; - foreach ($parameters as $parameter) { - $type = $parameter->getType(); - $typeHint = null; - if ($type instanceof ReflectionNamedType) { - $typeHint = $type->getName(); - if ($typeHint === 'self') { - $declaringClass = $parameter->getDeclaringClass(); - if ($declaringClass !== null) { - $typeHint = $declaringClass->getName(); - } - } - } - - $parameterName = $parameter->getName(); - if (isset($locator[$typeHint])) { - $arguments[$parameterName] = $locator[$typeHint]; - continue; - } - - if (isset($locator[$parameterName])) { - $arguments[$parameterName] = $locator[$parameterName]; - continue; - } - - $arguments[$parameterName] = null; - } - - return $arguments; - } - - /** - * Retrieves a series of ReflectionParameter objects for the static 'create' method of the given - * tag handler class name. - * - * @param class-string|Factory $handler - * - * @return ReflectionParameter[] - */ - private function fetchParametersForHandlerFactoryMethod($handler): array - { - $handlerClassName = is_object($handler) ? get_class($handler) : $handler; - - if (!isset($this->tagHandlerParameterCache[$handlerClassName])) { - $methodReflection = new ReflectionMethod($handlerClassName, 'create'); - $this->tagHandlerParameterCache[$handlerClassName] = $methodReflection->getParameters(); - } - - return $this->tagHandlerParameterCache[$handlerClassName]; - } - - /** - * Returns a copy of this class' Service Locator with added dynamic parameters, - * such as the tag's name, body and Context. - * - * @param TypeContext $context The Context (namespace and aliasses) that may be - * passed and is used to resolve FQSENs. - * @param string $tagName The name of the tag that may be - * passed onto the factory method of the Tag class. - * @param string $tagBody The body of the tag that may be - * passed onto the factory method of the Tag class. - * - * @return mixed[] - */ - private function getServiceLocatorWithDynamicParameters( - TypeContext $context, - string $tagName, - string $tagBody - ): array { - return array_merge( - $this->serviceLocator, - [ - 'name' => $tagName, - 'body' => $tagBody, - TypeContext::class => $context, - ] - ); - } - - /** - * Returns whether the given tag belongs to an annotation. - * - * @todo this method should be populated once we implement Annotation notation support. - */ - private function isAnnotation(string $tagContent): bool - { - // 1. Contains a namespace separator - // 2. Contains parenthesis - // 3. Is present in a list of known annotations (make the algorithm smart by first checking is the last part - // of the annotation class name matches the found tag name - - return false; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php deleted file mode 100644 index 7cf07b4..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tag.php +++ /dev/null @@ -1,31 +0,0 @@ -|Factory $handler FQCN of handler. - * - * @throws InvalidArgumentException If the tag name is not a string. - * @throws InvalidArgumentException If the tag name is namespaced (contains backslashes) but - * does not start with a backslash. - * @throws InvalidArgumentException If the handler is not a string. - * @throws InvalidArgumentException If the handler is not an existing class. - * @throws InvalidArgumentException If the handler does not implement the {@see Tag} interface. - */ - public function registerTagHandler(string $tagName, $handler): void; -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php deleted file mode 100644 index 290e5a9..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Author.php +++ /dev/null @@ -1,102 +0,0 @@ -authorName = $authorName; - $this->authorEmail = $authorEmail; - } - - /** - * Gets the author's name. - * - * @return string The author's name. - */ - public function getAuthorName(): string - { - return $this->authorName; - } - - /** - * Returns the author's email. - * - * @return string The author's email. - */ - public function getEmail(): string - { - return $this->authorEmail; - } - - /** - * Returns this tag in string form. - */ - public function __toString(): string - { - if ($this->authorEmail) { - $authorEmail = '<' . $this->authorEmail . '>'; - } else { - $authorEmail = ''; - } - - $authorName = $this->authorName; - - return $authorName . ($authorEmail !== '' ? ($authorName !== '' ? ' ' : '') . $authorEmail : ''); - } - - /** - * Attempts to create a new Author object based on the tag body. - */ - public static function create(string $body): ?self - { - $splitTagContent = preg_match('/^([^\<]*)(?:\<([^\>]*)\>)?$/u', $body, $matches); - if (!$splitTagContent) { - return null; - } - - $authorName = trim($matches[1]); - $email = isset($matches[2]) ? trim($matches[2]) : ''; - - return new static($authorName, $email); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php deleted file mode 100644 index 98b0d88..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/BaseTag.php +++ /dev/null @@ -1,53 +0,0 @@ -name; - } - - public function getDescription(): ?Description - { - return $this->description; - } - - public function render(?Formatter $formatter = null): string - { - if ($formatter === null) { - $formatter = new Formatter\PassthroughFormatter(); - } - - return $formatter->format($this); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php deleted file mode 100644 index 022594e..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Covers.php +++ /dev/null @@ -1,99 +0,0 @@ -refers = $refers; - $this->description = $description; - } - - public static function create( - string $body, - ?DescriptionFactory $descriptionFactory = null, - ?FqsenResolver $resolver = null, - ?TypeContext $context = null - ): self { - Assert::stringNotEmpty($body); - Assert::notNull($descriptionFactory); - Assert::notNull($resolver); - - $parts = Utils::pregSplit('/\s+/Su', $body, 2); - - return new static( - self::resolveFqsen($parts[0], $resolver, $context), - $descriptionFactory->create($parts[1] ?? '', $context) - ); - } - - private static function resolveFqsen(string $parts, ?FqsenResolver $fqsenResolver, ?TypeContext $context): Fqsen - { - Assert::notNull($fqsenResolver); - $fqsenParts = explode('::', $parts); - $resolved = $fqsenResolver->resolve($fqsenParts[0], $context); - - if (!array_key_exists(1, $fqsenParts)) { - return $resolved; - } - - return new Fqsen($resolved . '::' . $fqsenParts[1]); - } - - /** - * Returns the structural element this tag refers to. - */ - public function getReference(): Fqsen - { - return $this->refers; - } - - /** - * Returns a string representation of this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $refers = (string) $this->refers; - - return $refers . ($description !== '' ? ($refers !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php deleted file mode 100644 index a55cd91..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Deprecated.php +++ /dev/null @@ -1,108 +0,0 @@ -version = $version; - $this->description = $description; - } - - /** - * @return static - */ - public static function create( - ?string $body, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - if (empty($body)) { - return new static(); - } - - $matches = []; - if (!preg_match('/^(' . self::REGEX_VECTOR . ')\s*(.+)?$/sux', $body, $matches)) { - return new static( - null, - $descriptionFactory !== null ? $descriptionFactory->create($body, $context) : null - ); - } - - Assert::notNull($descriptionFactory); - - return new static( - $matches[1], - $descriptionFactory->create($matches[2] ?? '', $context) - ); - } - - /** - * Gets the version section of the tag. - */ - public function getVersion(): ?string - { - return $this->version; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $version = (string) $this->version; - - return $version . ($description !== '' ? ($version !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php deleted file mode 100644 index fd9ef6e..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Example.php +++ /dev/null @@ -1,197 +0,0 @@ -filePath = $filePath; - $this->startingLine = $startingLine; - $this->lineCount = $lineCount; - if ($content !== null) { - $this->content = trim($content); - } - - $this->isURI = $isURI; - } - - public function getContent(): string - { - if ($this->content === null || $this->content === '') { - $filePath = $this->filePath; - if ($this->isURI) { - $filePath = $this->isUriRelative($this->filePath) - ? str_replace('%2F', '/', rawurlencode($this->filePath)) - : $this->filePath; - } - - return trim($filePath); - } - - return $this->content; - } - - public function getDescription(): ?string - { - return $this->content; - } - - public static function create(string $body): ?Tag - { - // File component: File path in quotes or File URI / Source information - if (!preg_match('/^\s*(?:(\"[^\"]+\")|(\S+))(?:\s+(.*))?$/sux', $body, $matches)) { - return null; - } - - $filePath = null; - $fileUri = null; - if ($matches[1] !== '') { - $filePath = $matches[1]; - } else { - $fileUri = $matches[2]; - } - - $startingLine = 1; - $lineCount = 0; - $description = null; - - if (array_key_exists(3, $matches)) { - $description = $matches[3]; - - // Starting line / Number of lines / Description - if (preg_match('/^([1-9]\d*)(?:\s+((?1))\s*)?(.*)$/sux', $matches[3], $contentMatches)) { - $startingLine = (int) $contentMatches[1]; - if (isset($contentMatches[2])) { - $lineCount = (int) $contentMatches[2]; - } - - if (array_key_exists(3, $contentMatches)) { - $description = $contentMatches[3]; - } - } - } - - return new static( - $filePath ?? ($fileUri ?? ''), - $fileUri !== null, - $startingLine, - $lineCount, - $description - ); - } - - /** - * Returns the file path. - * - * @return string Path to a file to use as an example. - * May also be an absolute URI. - */ - public function getFilePath(): string - { - return trim($this->filePath, '"'); - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - $filePath = $this->filePath; - $isDefaultLine = $this->startingLine === 1 && $this->lineCount === 0; - $startingLine = !$isDefaultLine ? (string) $this->startingLine : ''; - $lineCount = !$isDefaultLine ? (string) $this->lineCount : ''; - $content = (string) $this->content; - - return $filePath - . ($startingLine !== '' - ? ($filePath !== '' ? ' ' : '') . $startingLine - : '') - . ($lineCount !== '' - ? ($filePath !== '' || $startingLine !== '' ? ' ' : '') . $lineCount - : '') - . ($content !== '' - ? ($filePath !== '' || $startingLine !== '' || $lineCount !== '' ? ' ' : '') . $content - : ''); - } - - /** - * Returns true if the provided URI is relative or contains a complete scheme (and thus is absolute). - */ - private function isUriRelative(string $uri): bool - { - return strpos($uri, ':') === false; - } - - public function getStartingLine(): int - { - return $this->startingLine; - } - - public function getLineCount(): int - { - return $this->lineCount; - } - - public function getName(): string - { - return 'example'; - } - - public function render(?Formatter $formatter = null): string - { - if ($formatter === null) { - $formatter = new Formatter\PassthroughFormatter(); - } - - return $formatter->format($this); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/AbstractPHPStanFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/AbstractPHPStanFactory.php deleted file mode 100644 index b1618bf..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/AbstractPHPStanFactory.php +++ /dev/null @@ -1,122 +0,0 @@ -lexer = new Lexer(true); - $constParser = new ConstExprParser(true, true, ['lines' => true, 'indexes' => true]); - $this->parser = new PhpDocParser( - new TypeParser($constParser, true, ['lines' => true, 'indexes' => true]), - $constParser, - true, - true, - ['lines' => true, 'indexes' => true], - true - ); - $this->factories = $factories; - } - - public function create(string $tagLine, ?TypeContext $context = null): Tag - { - $tokens = $this->tokenizeLine($tagLine); - $ast = $this->parser->parseTag($tokens); - if (property_exists($ast->value, 'description') === true) { - $ast->value->setAttribute( - 'description', - $ast->value->description . $tokens->joinUntil(Lexer::TOKEN_END) - ); - } - - if ($context === null) { - $context = new TypeContext(''); - } - - try { - foreach ($this->factories as $factory) { - if ($factory->supports($ast, $context)) { - return $factory->create($ast, $context); - } - } - } catch (RuntimeException $e) { - return InvalidTag::create((string) $ast->value, 'method')->withError($e); - } - - return InvalidTag::create( - (string) $ast->value, - $ast->name - ); - } - - /** - * Solve the issue with the lexer not tokenizing the line correctly - * - * This method is a workaround for the lexer that includes newline tokens with spaces. For - * phpstan this isn't an issue, as it doesn't do a lot of things with the indentation of descriptions. - * But for us is important to keep the indentation of the descriptions, so we need to fix the lexer output. - */ - private function tokenizeLine(string $tagLine): TokenIterator - { - $tokens = $this->lexer->tokenize($tagLine); - $fixed = []; - foreach ($tokens as $token) { - if (($token[1] === Lexer::TOKEN_PHPDOC_EOL) && rtrim($token[0], " \t") !== $token[0]) { - $fixed[] = [ - rtrim($token[Lexer::VALUE_OFFSET], " \t"), - Lexer::TOKEN_PHPDOC_EOL, - $token[2] ?? null, - ]; - $fixed[] = [ - ltrim($token[Lexer::VALUE_OFFSET], "\n\r"), - Lexer::TOKEN_HORIZONTAL_WS, - ($token[2] ?? null) + 1, - ]; - continue; - } - - $fixed[] = $token; - } - - return new TokenIterator($fixed); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Factory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Factory.php deleted file mode 100644 index 190d3ff..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/Factory.php +++ /dev/null @@ -1,41 +0,0 @@ -descriptionFactory = $descriptionFactory; - $this->typeResolver = $typeResolver; - } - - public function create(PhpDocTagNode $node, Context $context): Tag - { - $tagValue = $node->value; - Assert::isInstanceOf($tagValue, MethodTagValueNode::class); - - return new Method( - $tagValue->methodName, - [], - $this->createReturnType($tagValue, $context), - $tagValue->isStatic, - $this->descriptionFactory->create($tagValue->description, $context), - false, - array_map( - function (MethodTagValueParameterNode $param) use ($context) { - return new MethodParameter( - trim($param->parameterName, '$'), - $param->type === null ? new Mixed_() : $this->typeResolver->createType( - $param->type, - $context - ), - $param->isReference, - $param->isVariadic, - (string) $param->defaultValue - ); - }, - $tagValue->parameters - ), - ); - } - - public function supports(PhpDocTagNode $node, Context $context): bool - { - return $node->value instanceof MethodTagValueNode; - } - - private function createReturnType(MethodTagValueNode $tagValue, Context $context): Type - { - if ($tagValue->returnType === null) { - return new Void_(); - } - - return $this->typeResolver->createType($tagValue->returnType, $context); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PHPStanFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PHPStanFactory.php deleted file mode 100644 index cf04a06..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PHPStanFactory.php +++ /dev/null @@ -1,16 +0,0 @@ -descriptionFactory = $descriptionFactory; - $this->typeResolver = $typeResolver; - } - - public function create(PhpDocTagNode $node, Context $context): Tag - { - $tagValue = $node->value; - - if ($tagValue instanceof InvalidTagValueNode) { - Deprecation::trigger( - 'phpdocumentor/reflection-docblock', - 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/362', - sprintf( - 'Param tag value "%s" is invalid, falling back to legacy parsing. Please update your docblocks.', - $tagValue->value - ) - ); - - return Param::create($tagValue->value, $this->typeResolver, $this->descriptionFactory, $context); - } - - Assert::isInstanceOfAny( - $tagValue, - [ - ParamTagValueNode::class, - TypelessParamTagValueNode::class, - ] - ); - - if (($tagValue->type ?? null) instanceof OffsetAccessTypeNode) { - return InvalidTag::create( - (string) $tagValue, - 'param' - ); - } - - $description = $tagValue->getAttribute('description'); - if (is_string($description) === false) { - $description = $tagValue->description; - } - - return new Param( - trim($tagValue->parameterName, '$'), - $this->typeResolver->createType($tagValue->type ?? new IdentifierTypeNode('mixed'), $context), - $tagValue->isVariadic, - $this->descriptionFactory->create($description, $context), - $tagValue->isReference - ); - } - - public function supports(PhpDocTagNode $node, Context $context): bool - { - return $node->value instanceof ParamTagValueNode - || $node->value instanceof TypelessParamTagValueNode - || $node->name === '@param'; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyFactory.php deleted file mode 100644 index b744ed0..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyFactory.php +++ /dev/null @@ -1,54 +0,0 @@ -descriptionFactory = $descriptionFactory; - $this->typeResolver = $typeResolver; - } - - public function create(PhpDocTagNode $node, Context $context): Tag - { - $tagValue = $node->value; - Assert::isInstanceOf($tagValue, PropertyTagValueNode::class); - - $description = $tagValue->getAttribute('description'); - if (is_string($description) === false) { - $description = $tagValue->description; - } - - return new Property( - trim($tagValue->propertyName, '$'), - $this->typeResolver->createType($tagValue->type, $context), - $this->descriptionFactory->create($description, $context) - ); - } - - public function supports(PhpDocTagNode $node, Context $context): bool - { - return $node->value instanceof PropertyTagValueNode && $node->name === '@property'; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyReadFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyReadFactory.php deleted file mode 100644 index b0898aa..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyReadFactory.php +++ /dev/null @@ -1,54 +0,0 @@ -typeResolver = $typeResolver; - $this->descriptionFactory = $descriptionFactory; - } - - public function create(PhpDocTagNode $node, Context $context): Tag - { - $tagValue = $node->value; - Assert::isInstanceOf($tagValue, PropertyTagValueNode::class); - - $description = $tagValue->getAttribute('description'); - if (is_string($description) === false) { - $description = $tagValue->description; - } - - return new PropertyRead( - trim($tagValue->propertyName, '$'), - $this->typeResolver->createType($tagValue->type, $context), - $this->descriptionFactory->create($description, $context) - ); - } - - public function supports(PhpDocTagNode $node, Context $context): bool - { - return $node->value instanceof PropertyTagValueNode && $node->name === '@property-read'; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyWriteFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyWriteFactory.php deleted file mode 100644 index 749b1ed..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/PropertyWriteFactory.php +++ /dev/null @@ -1,54 +0,0 @@ -descriptionFactory = $descriptionFactory; - $this->typeResolver = $typeResolver; - } - - public function create(PhpDocTagNode $node, Context $context): Tag - { - $tagValue = $node->value; - Assert::isInstanceOf($tagValue, PropertyTagValueNode::class); - - $description = $tagValue->getAttribute('description'); - if (is_string($description) === false) { - $description = $tagValue->description; - } - - return new PropertyWrite( - trim($tagValue->propertyName, '$'), - $this->typeResolver->createType($tagValue->type, $context), - $this->descriptionFactory->create($description, $context) - ); - } - - public function supports(PhpDocTagNode $node, Context $context): bool - { - return $node->value instanceof PropertyTagValueNode && $node->name === '@property-write'; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ReturnFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ReturnFactory.php deleted file mode 100644 index 4a17dc2..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/ReturnFactory.php +++ /dev/null @@ -1,52 +0,0 @@ -descriptionFactory = $descriptionFactory; - $this->typeResolver = $typeResolver; - } - - public function create(PhpDocTagNode $node, Context $context): Tag - { - $tagValue = $node->value; - Assert::isInstanceOf($tagValue, ReturnTagValueNode::class); - - $description = $tagValue->getAttribute('description'); - if (is_string($description) === false) { - $description = $tagValue->description; - } - - return new Return_( - $this->typeResolver->createType($tagValue->type, $context), - $this->descriptionFactory->create($description, $context) - ); - } - - public function supports(PhpDocTagNode $node, Context $context): bool - { - return $node->value instanceof ReturnTagValueNode; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php deleted file mode 100644 index f6f0bb5..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Factory/StaticMethod.php +++ /dev/null @@ -1,25 +0,0 @@ -descriptionFactory = $descriptionFactory; - $this->typeResolver = $typeResolver; - } - - public function create(PhpDocTagNode $node, Context $context): Tag - { - $tagValue = $node->value; - Assert::isInstanceOf($tagValue, VarTagValueNode::class); - - $description = $tagValue->getAttribute('description'); - if (is_string($description) === false) { - $description = $tagValue->description; - } - - return new Var_( - trim($tagValue->variableName, '$'), - $this->typeResolver->createType($tagValue->type, $context), - $this->descriptionFactory->create($description, $context) - ); - } - - public function supports(PhpDocTagNode $node, Context $context): bool - { - return $node->value instanceof VarTagValueNode; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php deleted file mode 100644 index 36b9983..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter.php +++ /dev/null @@ -1,24 +0,0 @@ -maxLen = max($this->maxLen, strlen($tag->getName())); - } - } - - /** - * Formats the given tag to return a simple plain text version. - */ - public function format(Tag $tag): string - { - return '@' . $tag->getName() . - str_repeat( - ' ', - $this->maxLen - strlen($tag->getName()) + 1 - ) . - $tag; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php deleted file mode 100644 index 2afdfe5..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Formatter/PassthroughFormatter.php +++ /dev/null @@ -1,30 +0,0 @@ -getName() . ' ' . $tag); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php deleted file mode 100644 index bc1ab10..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Generic.php +++ /dev/null @@ -1,89 +0,0 @@ -validateTagName($name); - - $this->name = $name; - $this->description = $description; - } - - /** - * Creates a new tag that represents any unknown tag type. - * - * @return static - */ - public static function create( - string $body, - string $name = '', - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Assert::stringNotEmpty($name); - Assert::notNull($descriptionFactory); - - $description = $body !== '' ? $descriptionFactory->create($body, $context) : null; - - return new static($name, $description); - } - - /** - * Returns the tag as a serialized string - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - return $description; - } - - /** - * Validates if the tag name matches the expected format, otherwise throws an exception. - */ - private function validateTagName(string $name): void - { - if (!preg_match('/^' . StandardTagFactory::REGEX_TAGNAME . '$/u', $name)) { - throw new InvalidArgumentException( - 'The tag name "' . $name . '" is not wellformed. Tags may only consist of letters, underscores, ' - . 'hyphens and backslashes.' - ); - } - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.php deleted file mode 100644 index c7d3cd5..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/InvalidTag.php +++ /dev/null @@ -1,142 +0,0 @@ -name = $name; - $this->body = $body; - } - - public function getException(): ?Throwable - { - return $this->throwable; - } - - public function getName(): string - { - return $this->name; - } - - public static function create(string $body, string $name = ''): self - { - return new self($name, $body); - } - - public function withError(Throwable $exception): self - { - $this->flattenExceptionBacktrace($exception); - $tag = new self($this->name, $this->body); - $tag->throwable = $exception; - - return $tag; - } - - /** - * Removes all complex types from backtrace - * - * Not all objects are serializable. So we need to remove them from the - * stored exception to be sure that we do not break existing library usage. - */ - private function flattenExceptionBacktrace(Throwable $exception): void - { - $traceProperty = (new ReflectionClass(Exception::class))->getProperty('trace'); - $traceProperty->setAccessible(true); - - do { - $trace = $exception->getTrace(); - if (isset($trace[0]['args'])) { - $trace = array_map( - function (array $call): array { - $call['args'] = array_map([$this, 'flattenArguments'], $call['args'] ?? []); - - return $call; - }, - $trace - ); - } - - $traceProperty->setValue($exception, $trace); - $exception = $exception->getPrevious(); - } while ($exception !== null); - - $traceProperty->setAccessible(false); - } - - /** - * @param mixed $value - * - * @return mixed - * - * @throws ReflectionException - */ - private function flattenArguments($value) - { - if ($value instanceof Closure) { - $closureReflection = new ReflectionFunction($value); - $value = sprintf( - '(Closure at %s:%s)', - $closureReflection->getFileName(), - $closureReflection->getStartLine() - ); - } elseif (is_object($value)) { - $value = sprintf('object(%s)', get_class($value)); - } elseif (is_resource($value)) { - $value = sprintf('resource(%s)', get_resource_type($value)); - } elseif (is_array($value)) { - $value = array_map([$this, 'flattenArguments'], $value); - } - - return $value; - } - - public function render(?Formatter $formatter = null): string - { - if ($formatter === null) { - $formatter = new Formatter\PassthroughFormatter(); - } - - return $formatter->format($this); - } - - public function __toString(): string - { - return $this->body; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php deleted file mode 100644 index fcb6ec1..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Link.php +++ /dev/null @@ -1,76 +0,0 @@ -link = $link; - $this->description = $description; - } - - public static function create( - string $body, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Assert::notNull($descriptionFactory); - - $parts = Utils::pregSplit('/\s+/Su', $body, 2); - $description = isset($parts[1]) ? $descriptionFactory->create($parts[1], $context) : null; - - return new static($parts[0], $description); - } - - /** - * Gets the link - */ - public function getLink(): string - { - return $this->link; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $link = $this->link; - - return $link . ($description !== '' ? ($link !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php deleted file mode 100644 index 471ebe9..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Method.php +++ /dev/null @@ -1,358 +0,0 @@ -> $arguments - * @param MethodParameter[] $parameters - * @phpstan-param array $arguments - */ - public function __construct( - string $methodName, - array $arguments = [], - ?Type $returnType = null, - bool $static = false, - ?Description $description = null, - bool $returnsReference = false, - ?array $parameters = null - ) { - Assert::stringNotEmpty($methodName); - - if ($returnType === null) { - $returnType = new Void_(); - } - - $arguments = $this->filterArguments($arguments); - - $this->methodName = $methodName; - $this->returnType = $returnType; - $this->isStatic = $static; - $this->description = $description; - $this->returnsReference = $returnsReference; - $this->parameters = $parameters ?? $this->fromLegacyArguments($arguments); - } - - /** - * @deprecated Create using static factory is deprecated, - * this method should not be called directly by library consumers - */ - public static function create( - string $body, - ?TypeResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): ?self { - trigger_error( - 'Create using static factory is deprecated, this method should not be called directly - by library consumers', - E_USER_DEPRECATED - ); - Assert::stringNotEmpty($body); - Assert::notNull($typeResolver); - Assert::notNull($descriptionFactory); - - // 1. none or more whitespace - // 2. optionally the keyword "static" followed by whitespace - // 3. optionally a word with underscores followed by whitespace : as - // type for the return value - // 4. optionally an ampersand followed or not by whitespace : as - // a reference - // 5. then optionally a word with underscores followed by () and - // whitespace : as method name as used by phpDocumentor - // 6. then a word with underscores, followed by ( and any character - // until a ) and whitespace : as method name with signature - // 7. any remaining text : as description - if ( - !preg_match( - '/^ - # Static keyword - # Declares a static method ONLY if type is also present - (?: - (static) - \s+ - )? - # Return type - (?: - ( - (?:[\w\|_\\\\]*\$this[\w\|_\\\\]*) - | - (?: - (?:[\w\|_\\\\]+) - # array notation - (?:\[\])* - )*+ - ) - \s+ - )? - # Returns reference - (?: - (&) - \s* - )? - # Method name - ([\w_]+) - # Arguments - (?: - \(([^\)]*)\) - )? - \s* - # Description - (.*) - $/sux', - $body, - $matches - ) - ) { - return null; - } - - [, $static, $returnType, $returnsReference, $methodName, $argumentLines, $description] = $matches; - - $static = $static === 'static'; - - if ($returnType === '') { - $returnType = 'void'; - } - - $returnsReference = $returnsReference === '&'; - - $returnType = $typeResolver->resolve($returnType, $context); - $description = $descriptionFactory->create($description, $context); - - /** @phpstan-var array $arguments */ - $arguments = []; - if ($argumentLines !== '') { - $argumentsExploded = explode(',', $argumentLines); - foreach ($argumentsExploded as $argument) { - $argument = explode(' ', self::stripRestArg(trim($argument)), 2); - if (strpos($argument[0], '$') === 0) { - $argumentName = substr($argument[0], 1); - $argumentType = new Mixed_(); - } else { - $argumentType = $typeResolver->resolve($argument[0], $context); - $argumentName = ''; - if (isset($argument[1])) { - $argument[1] = self::stripRestArg($argument[1]); - $argumentName = substr($argument[1], 1); - } - } - - $arguments[] = ['name' => $argumentName, 'type' => $argumentType]; - } - } - - return new static( - $methodName, - $arguments, - $returnType, - $static, - $description, - $returnsReference - ); - } - - /** - * Retrieves the method name. - */ - public function getMethodName(): string - { - return $this->methodName; - } - - /** - * @deprecated Method deprecated, use {@see self::getParameters()} - * - * @return array> - * @phpstan-return array - */ - public function getArguments(): array - { - trigger_error('Method deprecated, use ::getParameters()', E_USER_DEPRECATED); - - return array_map( - static function (MethodParameter $methodParameter) { - return ['name' => $methodParameter->getName(), 'type' => $methodParameter->getType()]; - }, - $this->parameters - ); - } - - /** @return MethodParameter[] */ - public function getParameters(): array - { - return $this->parameters; - } - - /** - * Checks whether the method tag describes a static method or not. - * - * @return bool TRUE if the method declaration is for a static method, FALSE otherwise. - */ - public function isStatic(): bool - { - return $this->isStatic; - } - - public function getReturnType(): Type - { - return $this->returnType; - } - - public function returnsReference(): bool - { - return $this->returnsReference; - } - - public function __toString(): string - { - $arguments = []; - foreach ($this->parameters as $parameter) { - $arguments[] = $parameter->getType() . ' ' . - ($parameter->isReference() ? '&' : '') . - ($parameter->isVariadic() ? '...' : '') . - '$' . $parameter->getName(); - } - - $argumentStr = '(' . implode(', ', $arguments) . ')'; - - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $static = $this->isStatic ? 'static' : ''; - - $returnType = (string) $this->returnType; - - $methodName = $this->methodName; - - $reference = $this->returnsReference ? '&' : ''; - - return $static - . ($returnType !== '' ? ($static !== '' ? ' ' : '') . $returnType : '') - . ($methodName !== '' ? ($static !== '' || $returnType !== '' ? ' ' : '') . $reference . $methodName : '') - . $argumentStr - . ($description !== '' ? ' ' . $description : ''); - } - - /** - * @param mixed[][]|string[] $arguments - * @phpstan-param array $arguments - * - * @return mixed[][] - * @phpstan-return array - */ - private function filterArguments(array $arguments = []): array - { - $result = []; - foreach ($arguments as $argument) { - if (is_string($argument)) { - $argument = ['name' => $argument]; - } - - if (!isset($argument['type'])) { - $argument['type'] = new Mixed_(); - } - - $keys = array_keys($argument); - sort($keys); - if ($keys !== ['name', 'type']) { - throw new InvalidArgumentException( - 'Arguments can only have the "name" and "type" fields, found: ' . var_export($keys, true) - ); - } - - $result[] = $argument; - } - - return $result; - } - - private static function stripRestArg(string $argument): string - { - if (strpos($argument, '...') === 0) { - $argument = trim(substr($argument, 3)); - } - - return $argument; - } - - /** - * @param array{name: string, type: Type} $arguments - * @phpstan-param array $arguments - * - * @return MethodParameter[] - */ - private function fromLegacyArguments(array $arguments): array - { - trigger_error( - 'Create method parameters via legacy format is deprecated add parameters via the constructor', - E_USER_DEPRECATED - ); - - return array_map( - static function ($arg) { - return new MethodParameter( - $arg['name'], - $arg['type'] - ); - }, - $arguments - ); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/MethodParameter.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/MethodParameter.php deleted file mode 100644 index 0c85d41..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/MethodParameter.php +++ /dev/null @@ -1,67 +0,0 @@ -type = $type; - $this->isReference = $isReference; - $this->isVariadic = $isVariadic; - $this->name = $name; - $this->defaultValue = $defaultValue; - } - - public function getName(): string - { - return $this->name; - } - - public function getType(): Type - { - return $this->type; - } - - public function isReference(): bool - { - return $this->isReference; - } - - public function isVariadic(): bool - { - return $this->isVariadic; - } - - public function getDefaultValue(): ?string - { - return $this->defaultValue; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php deleted file mode 100644 index 19b1b5f..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Param.php +++ /dev/null @@ -1,185 +0,0 @@ -name = 'param'; - $this->variableName = $variableName; - $this->type = $type; - $this->isVariadic = $isVariadic; - $this->description = $description; - $this->isReference = $isReference; - } - - /** - * @deprecated Create using static factory is deprecated, - * this method should not be called directly by library consumers - */ - public static function create( - string $body, - ?TypeResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Deprecation::triggerIfCalledFromOutside( - 'phpdocumentor/reflection-docblock', - 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361', - 'Create using static factory is deprecated, this method should not be called directly - by library consumers', - ); - - Assert::stringNotEmpty($body); - Assert::notNull($typeResolver); - Assert::notNull($descriptionFactory); - - [$firstPart, $body] = self::extractTypeFromBody($body); - - $type = null; - $parts = Utils::pregSplit('/(\s+)/Su', $body, 2, PREG_SPLIT_DELIM_CAPTURE); - $variableName = ''; - $isVariadic = false; - $isReference = false; - - // if the first item that is encountered is not a variable; it is a type - if ($firstPart && !self::strStartsWithVariable($firstPart)) { - $type = $typeResolver->resolve($firstPart, $context); - } else { - // first part is not a type; we should prepend it to the parts array for further processing - array_unshift($parts, $firstPart); - } - - // if the next item starts with a $ or ...$ or &$ or &...$ it must be the variable name - if (isset($parts[0]) && self::strStartsWithVariable($parts[0])) { - $variableName = array_shift($parts); - if ($type) { - array_shift($parts); - } - - Assert::notNull($variableName); - - if (strpos($variableName, '$') === 0) { - $variableName = substr($variableName, 1); - } elseif (strpos($variableName, '&$') === 0) { - $isReference = true; - $variableName = substr($variableName, 2); - } elseif (strpos($variableName, '...$') === 0) { - $isVariadic = true; - $variableName = substr($variableName, 4); - } elseif (strpos($variableName, '&...$') === 0) { - $isVariadic = true; - $isReference = true; - $variableName = substr($variableName, 5); - } - } - - $description = $descriptionFactory->create(implode('', $parts), $context); - - return new static($variableName, $type, $isVariadic, $description, $isReference); - } - - /** - * Returns the variable's name. - */ - public function getVariableName(): ?string - { - return $this->variableName; - } - - /** - * Returns whether this tag is variadic. - */ - public function isVariadic(): bool - { - return $this->isVariadic; - } - - /** - * Returns whether this tag is passed by reference. - */ - public function isReference(): bool - { - return $this->isReference; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $variableName = ''; - if ($this->variableName) { - $variableName .= ($this->isReference ? '&' : '') . ($this->isVariadic ? '...' : ''); - $variableName .= '$' . $this->variableName; - } - - $type = (string) $this->type; - - return $type - . ($variableName !== '' ? ($type !== '' ? ' ' : '') . $variableName : '') - . ($description !== '' ? ($type !== '' || $variableName !== '' ? ' ' : '') . $description : ''); - } - - private static function strStartsWithVariable(string $str): bool - { - return strpos($str, '$') === 0 - || - strpos($str, '...$') === 0 - || - strpos($str, '&$') === 0 - || - strpos($str, '&...$') === 0; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php deleted file mode 100644 index 1287b6c..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Property.php +++ /dev/null @@ -1,132 +0,0 @@ -name = 'property'; - $this->variableName = $variableName; - $this->type = $type; - $this->description = $description; - } - - /** - * @deprecated Create using static factory is deprecated, - * this method should not be called directly by library consumers - */ - public static function create( - string $body, - ?TypeResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Deprecation::triggerIfCalledFromOutside( - 'phpdocumentor/reflection-docblock', - 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361', - 'Create using static factory is deprecated, this method should not be called directly - by library consumers', - ); - - Assert::stringNotEmpty($body); - Assert::notNull($typeResolver); - Assert::notNull($descriptionFactory); - - [$firstPart, $body] = self::extractTypeFromBody($body); - $type = null; - $parts = Utils::pregSplit('/(\s+)/Su', $body, 2, PREG_SPLIT_DELIM_CAPTURE); - $variableName = ''; - - // if the first item that is encountered is not a variable; it is a type - if ($firstPart && $firstPart[0] !== '$') { - $type = $typeResolver->resolve($firstPart, $context); - } else { - // first part is not a type; we should prepend it to the parts array for further processing - array_unshift($parts, $firstPart); - } - - // if the next item starts with a $ it must be the variable name - if (isset($parts[0]) && strpos($parts[0], '$') === 0) { - $variableName = array_shift($parts); - if ($type) { - array_shift($parts); - } - - Assert::notNull($variableName); - - $variableName = substr($variableName, 1); - } - - $description = $descriptionFactory->create(implode('', $parts), $context); - - return new static($variableName, $type, $description); - } - - /** - * Returns the variable's name. - */ - public function getVariableName(): ?string - { - return $this->variableName; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - if ($this->variableName) { - $variableName = '$' . $this->variableName; - } else { - $variableName = ''; - } - - $type = (string) $this->type; - - return $type - . ($variableName !== '' ? ($type !== '' ? ' ' : '') . $variableName : '') - . ($description !== '' ? ($type !== '' || $variableName !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php deleted file mode 100644 index 2cf8e61..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyRead.php +++ /dev/null @@ -1,132 +0,0 @@ -name = 'property-read'; - $this->variableName = $variableName; - $this->type = $type; - $this->description = $description; - } - - /** - * @deprecated Create using static factory is deprecated, - * this method should not be called directly by library consumers - */ - public static function create( - string $body, - ?TypeResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Deprecation::triggerIfCalledFromOutside( - 'phpdocumentor/reflection-docblock', - 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361', - 'Create using static factory is deprecated, this method should not be called directly - by library consumers', - ); - - Assert::stringNotEmpty($body); - Assert::notNull($typeResolver); - Assert::notNull($descriptionFactory); - - [$firstPart, $body] = self::extractTypeFromBody($body); - $type = null; - $parts = Utils::pregSplit('/(\s+)/Su', $body, 2, PREG_SPLIT_DELIM_CAPTURE); - $variableName = ''; - - // if the first item that is encountered is not a variable; it is a type - if ($firstPart && $firstPart[0] !== '$') { - $type = $typeResolver->resolve($firstPart, $context); - } else { - // first part is not a type; we should prepend it to the parts array for further processing - array_unshift($parts, $firstPart); - } - - // if the next item starts with a $ it must be the variable name - if (isset($parts[0]) && strpos($parts[0], '$') === 0) { - $variableName = array_shift($parts); - if ($type) { - array_shift($parts); - } - - Assert::notNull($variableName); - - $variableName = substr($variableName, 1); - } - - $description = $descriptionFactory->create(implode('', $parts), $context); - - return new static($variableName, $type, $description); - } - - /** - * Returns the variable's name. - */ - public function getVariableName(): ?string - { - return $this->variableName; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - if ($this->variableName) { - $variableName = '$' . $this->variableName; - } else { - $variableName = ''; - } - - $type = (string) $this->type; - - return $type - . ($variableName !== '' ? ($type !== '' ? ' ' : '') . $variableName : '') - . ($description !== '' ? ($type !== '' || $variableName !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php deleted file mode 100644 index 57e7eb1..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/PropertyWrite.php +++ /dev/null @@ -1,132 +0,0 @@ -name = 'property-write'; - $this->variableName = $variableName; - $this->type = $type; - $this->description = $description; - } - - /** - * @deprecated Create using static factory is deprecated, - * this method should not be called directly by library consumers - */ - public static function create( - string $body, - ?TypeResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Deprecation::triggerIfCalledFromOutside( - 'phpdocumentor/reflection-docblock', - 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361', - 'Create using static factory is deprecated, this method should not be called directly - by library consumers', - ); - - Assert::stringNotEmpty($body); - Assert::notNull($typeResolver); - Assert::notNull($descriptionFactory); - - [$firstPart, $body] = self::extractTypeFromBody($body); - $type = null; - $parts = Utils::pregSplit('/(\s+)/Su', $body, 2, PREG_SPLIT_DELIM_CAPTURE); - $variableName = ''; - - // if the first item that is encountered is not a variable; it is a type - if ($firstPart && $firstPart[0] !== '$') { - $type = $typeResolver->resolve($firstPart, $context); - } else { - // first part is not a type; we should prepend it to the parts array for further processing - array_unshift($parts, $firstPart); - } - - // if the next item starts with a $ it must be the variable name - if (isset($parts[0]) && strpos($parts[0], '$') === 0) { - $variableName = array_shift($parts); - if ($type) { - array_shift($parts); - } - - Assert::notNull($variableName); - - $variableName = substr($variableName, 1); - } - - $description = $descriptionFactory->create(implode('', $parts), $context); - - return new static($variableName, $type, $description); - } - - /** - * Returns the variable's name. - */ - public function getVariableName(): ?string - { - return $this->variableName; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - if ($this->variableName) { - $variableName = '$' . $this->variableName; - } else { - $variableName = ''; - } - - $type = (string) $this->type; - - return $type - . ($variableName !== '' ? ($type !== '' ? ' ' : '') . $variableName : '') - . ($description !== '' ? ($type !== '' || $variableName !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php deleted file mode 100644 index e4e7e31..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Fqsen.php +++ /dev/null @@ -1,37 +0,0 @@ -fqsen = $fqsen; - } - - /** - * @return string string representation of the referenced fqsen - */ - public function __toString(): string - { - return (string) $this->fqsen; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php deleted file mode 100644 index e7dea86..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Reference/Reference.php +++ /dev/null @@ -1,22 +0,0 @@ -uri = $uri; - } - - public function __toString(): string - { - return $this->uri; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php deleted file mode 100644 index f130760..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Return_.php +++ /dev/null @@ -1,76 +0,0 @@ -name = 'return'; - $this->type = $type; - $this->description = $description; - } - - /** - * @deprecated Create using static factory is deprecated, - * this method should not be called directly by library consumers - */ - public static function create( - string $body, - ?TypeResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Deprecation::triggerIfCalledFromOutside( - 'phpdocumentor/reflection-docblock', - 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361', - 'Create using static factory is deprecated, this method should not be called directly - by library consumers', - ); - - Assert::notNull($typeResolver); - Assert::notNull($descriptionFactory); - - [$type, $description] = self::extractTypeFromBody($body); - - $type = $typeResolver->resolve($type, $context); - $description = $descriptionFactory->create($description, $context); - - return new static($type, $description); - } - - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $type = $this->type ? '' . $this->type : 'mixed'; - - return $type . ($description !== '' ? ' ' . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php deleted file mode 100644 index e7330e8..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/See.php +++ /dev/null @@ -1,104 +0,0 @@ -refers = $refers; - $this->description = $description; - } - - public static function create( - string $body, - ?FqsenResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Assert::notNull($descriptionFactory); - - $parts = Utils::pregSplit('/\s+/Su', $body, 2); - $description = isset($parts[1]) ? $descriptionFactory->create($parts[1], $context) : null; - - // https://tools.ietf.org/html/rfc2396#section-3 - if (preg_match('#\w://\w#', $parts[0])) { - return new static(new Url($parts[0]), $description); - } - - return new static(new FqsenRef(self::resolveFqsen($parts[0], $typeResolver, $context)), $description); - } - - private static function resolveFqsen(string $parts, ?FqsenResolver $fqsenResolver, ?TypeContext $context): Fqsen - { - Assert::notNull($fqsenResolver); - $fqsenParts = explode('::', $parts); - $resolved = $fqsenResolver->resolve($fqsenParts[0], $context); - - if (!array_key_exists(1, $fqsenParts)) { - return $resolved; - } - - return new Fqsen($resolved . '::' . $fqsenParts[1]); - } - - /** - * Returns the ref of this tag. - */ - public function getReference(): Reference - { - return $this->refers; - } - - /** - * Returns a string representation of this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $refers = (string) $this->refers; - - return $refers . ($description !== '' ? ($refers !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php deleted file mode 100644 index 24400fa..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Since.php +++ /dev/null @@ -1,102 +0,0 @@ -version = $version; - $this->description = $description; - } - - public static function create( - ?string $body, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): ?self { - if (empty($body)) { - return new static(); - } - - $matches = []; - if (!preg_match('/^(' . self::REGEX_VECTOR . ')\s*(.+)?$/sux', $body, $matches)) { - return null; - } - - Assert::notNull($descriptionFactory); - - return new static( - $matches[1], - $descriptionFactory->create($matches[2] ?? '', $context) - ); - } - - /** - * Gets the version section of the tag. - */ - public function getVersion(): ?string - { - return $this->version; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $version = (string) $this->version; - - return $version . ($description !== '' ? ($version !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php deleted file mode 100644 index f6b4f57..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Source.php +++ /dev/null @@ -1,115 +0,0 @@ -startingLine = (int) $startingLine; - $this->lineCount = $lineCount !== null ? (int) $lineCount : null; - $this->description = $description; - } - - public static function create( - string $body, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Assert::stringNotEmpty($body); - Assert::notNull($descriptionFactory); - - $startingLine = 1; - $lineCount = null; - $description = null; - - // Starting line / Number of lines / Description - if (preg_match('/^([1-9]\d*)\s*(?:((?1))\s+)?(.*)$/sux', $body, $matches)) { - $startingLine = (int) $matches[1]; - if (isset($matches[2]) && $matches[2] !== '') { - $lineCount = (int) $matches[2]; - } - - $description = $matches[3]; - } - - return new static($startingLine, $lineCount, $descriptionFactory->create($description ?? '', $context)); - } - - /** - * Gets the starting line. - * - * @return int The starting line, relative to the structural element's - * location. - */ - public function getStartingLine(): int - { - return $this->startingLine; - } - - /** - * Returns the number of lines. - * - * @return int|null The number of lines, relative to the starting line. NULL - * means "to the end". - */ - public function getLineCount(): ?int - { - return $this->lineCount; - } - - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $startingLine = (string) $this->startingLine; - - $lineCount = $this->lineCount !== null ? ' ' . $this->lineCount : ''; - - return $startingLine - . $lineCount - . ($description !== '' - ? ' ' . $description - : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.php deleted file mode 100644 index 271c41b..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/TagWithType.php +++ /dev/null @@ -1,74 +0,0 @@ -type; - } - - /** - * @return string[] - */ - protected static function extractTypeFromBody(string $body): array - { - $type = ''; - $nestingLevel = 0; - for ($i = 0, $iMax = strlen($body); $i < $iMax; $i++) { - $character = $body[$i]; - - if ($nestingLevel === 0 && trim($character) === '') { - break; - } - - $type .= $character; - if (in_array($character, ['<', '(', '[', '{'])) { - $nestingLevel++; - continue; - } - - if (in_array($character, ['>', ')', ']', '}'])) { - $nestingLevel--; - continue; - } - } - - if ($nestingLevel < 0 || $nestingLevel > 0) { - throw new InvalidArgumentException( - sprintf('Could not find type in %s, please check for malformed notations', $body) - ); - } - - $description = trim(substr($body, strlen($type))); - - return [$type, $description]; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php deleted file mode 100644 index f21c910..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Throws.php +++ /dev/null @@ -1,64 +0,0 @@ -name = 'throws'; - $this->type = $type; - $this->description = $description; - } - - public static function create( - string $body, - ?TypeResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Assert::notNull($typeResolver); - Assert::notNull($descriptionFactory); - - [$type, $description] = self::extractTypeFromBody($body); - - $type = $typeResolver->resolve($type, $context); - $description = $descriptionFactory->create($description, $context); - - return new static($type, $description); - } - - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $type = (string) $this->type; - - return $type . ($description !== '' ? ($type !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php deleted file mode 100644 index d9aa360..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Uses.php +++ /dev/null @@ -1,98 +0,0 @@ -refers = $refers; - $this->description = $description; - } - - public static function create( - string $body, - ?FqsenResolver $resolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Assert::notNull($resolver); - Assert::notNull($descriptionFactory); - - $parts = Utils::pregSplit('/\s+/Su', $body, 2); - - return new static( - self::resolveFqsen($parts[0], $resolver, $context), - $descriptionFactory->create($parts[1] ?? '', $context) - ); - } - - private static function resolveFqsen(string $parts, ?FqsenResolver $fqsenResolver, ?TypeContext $context): Fqsen - { - Assert::notNull($fqsenResolver); - $fqsenParts = explode('::', $parts); - $resolved = $fqsenResolver->resolve($fqsenParts[0], $context); - - if (!array_key_exists(1, $fqsenParts)) { - return $resolved; - } - - return new Fqsen($resolved . '::' . $fqsenParts[1]); - } - - /** - * Returns the structural element this tag refers to. - */ - public function getReference(): Fqsen - { - return $this->refers; - } - - /** - * Returns a string representation of this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $refers = (string) $this->refers; - - return $refers . ($description !== '' ? ($refers !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php deleted file mode 100644 index 0a79ab9..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Var_.php +++ /dev/null @@ -1,132 +0,0 @@ -name = 'var'; - $this->variableName = $variableName; - $this->type = $type; - $this->description = $description; - } - - /** - * @deprecated Create using static factory is deprecated, - * this method should not be called directly by library consumers - */ - public static function create( - string $body, - ?TypeResolver $typeResolver = null, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): self { - Deprecation::triggerIfCalledFromOutside( - 'phpdocumentor/reflection-docblock', - 'https://github.com/phpDocumentor/ReflectionDocBlock/issues/361', - 'Create using static factory is deprecated, this method should not be called directly - by library consumers', - ); - Assert::stringNotEmpty($body); - Assert::notNull($typeResolver); - Assert::notNull($descriptionFactory); - - [$firstPart, $body] = self::extractTypeFromBody($body); - - $parts = Utils::pregSplit('/(\s+)/Su', $body, 2, PREG_SPLIT_DELIM_CAPTURE); - $type = null; - $variableName = ''; - - // if the first item that is encountered is not a variable; it is a type - if ($firstPart && $firstPart[0] !== '$') { - $type = $typeResolver->resolve($firstPart, $context); - } else { - // first part is not a type; we should prepend it to the parts array for further processing - array_unshift($parts, $firstPart); - } - - // if the next item starts with a $ it must be the variable name - if (isset($parts[0]) && strpos($parts[0], '$') === 0) { - $variableName = array_shift($parts); - if ($type) { - array_shift($parts); - } - - Assert::notNull($variableName); - - $variableName = substr($variableName, 1); - } - - $description = $descriptionFactory->create(implode('', $parts), $context); - - return new static($variableName, $type, $description); - } - - /** - * Returns the variable's name. - */ - public function getVariableName(): ?string - { - return $this->variableName; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - if ($this->variableName) { - $variableName = '$' . $this->variableName; - } else { - $variableName = ''; - } - - $type = (string) $this->type; - - return $type - . ($variableName !== '' ? ($type !== '' ? ' ' : '') . $variableName : '') - . ($description !== '' ? ($type !== '' || $variableName !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php deleted file mode 100644 index 1ed25d1..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlock/Tags/Version.php +++ /dev/null @@ -1,105 +0,0 @@ -version = $version; - $this->description = $description; - } - - public static function create( - ?string $body, - ?DescriptionFactory $descriptionFactory = null, - ?TypeContext $context = null - ): ?self { - if (empty($body)) { - return new static(); - } - - $matches = []; - if (!preg_match('/^(' . self::REGEX_VECTOR . ')\s*(.+)?$/sux', $body, $matches)) { - return null; - } - - $description = null; - if ($descriptionFactory !== null) { - $description = $descriptionFactory->create($matches[2] ?? '', $context); - } - - return new static( - $matches[1], - $description - ); - } - - /** - * Gets the version section of the tag. - */ - public function getVersion(): ?string - { - return $this->version; - } - - /** - * Returns a string representation for this tag. - */ - public function __toString(): string - { - if ($this->description) { - $description = $this->description->render(); - } else { - $description = ''; - } - - $version = (string) $this->version; - - return $version . ($description !== '' ? ($version !== '' ? ' ' : '') . $description : ''); - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php deleted file mode 100644 index 1f7faf1..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactory.php +++ /dev/null @@ -1,313 +0,0 @@ -descriptionFactory = $descriptionFactory; - $this->tagFactory = $tagFactory; - } - - /** - * Factory method for easy instantiation. - * - * @param array|Factory> $additionalTags - */ - public static function createInstance(array $additionalTags = []): DocBlockFactoryInterface - { - $fqsenResolver = new FqsenResolver(); - $tagFactory = new StandardTagFactory($fqsenResolver); - $descriptionFactory = new DescriptionFactory($tagFactory); - $typeResolver = new TypeResolver($fqsenResolver); - - $phpstanTagFactory = new AbstractPHPStanFactory( - new ParamFactory($typeResolver, $descriptionFactory), - new VarFactory($typeResolver, $descriptionFactory), - new ReturnFactory($typeResolver, $descriptionFactory), - new PropertyFactory($typeResolver, $descriptionFactory), - new PropertyReadFactory($typeResolver, $descriptionFactory), - new PropertyWriteFactory($typeResolver, $descriptionFactory), - new MethodFactory($typeResolver, $descriptionFactory) - ); - - $tagFactory->addService($descriptionFactory); - $tagFactory->addService($typeResolver); - $tagFactory->registerTagHandler('param', $phpstanTagFactory); - $tagFactory->registerTagHandler('var', $phpstanTagFactory); - $tagFactory->registerTagHandler('return', $phpstanTagFactory); - $tagFactory->registerTagHandler('property', $phpstanTagFactory); - $tagFactory->registerTagHandler('property-read', $phpstanTagFactory); - $tagFactory->registerTagHandler('property-write', $phpstanTagFactory); - $tagFactory->registerTagHandler('method', $phpstanTagFactory); - - $docBlockFactory = new self($descriptionFactory, $tagFactory); - foreach ($additionalTags as $tagName => $tagHandler) { - $docBlockFactory->registerTagHandler($tagName, $tagHandler); - } - - return $docBlockFactory; - } - - /** - * @param object|string $docblock A string containing the DocBlock to parse or an object supporting the - * getDocComment method (such as a ReflectionClass object). - */ - public function create($docblock, ?Types\Context $context = null, ?Location $location = null): DocBlock - { - if (is_object($docblock)) { - if (!method_exists($docblock, 'getDocComment')) { - $exceptionMessage = 'Invalid object passed; the given object must support the getDocComment method'; - - throw new InvalidArgumentException($exceptionMessage); - } - - $docblock = $docblock->getDocComment(); - Assert::string($docblock); - } - - Assert::stringNotEmpty($docblock); - - if ($context === null) { - $context = new Types\Context(''); - } - - $parts = $this->splitDocBlock($this->stripDocComment($docblock)); - - [$templateMarker, $summary, $description, $tags] = $parts; - - return new DocBlock( - $summary, - $description ? $this->descriptionFactory->create($description, $context) : null, - $this->parseTagBlock($tags, $context), - $context, - $location, - $templateMarker === '#@+', - $templateMarker === '#@-' - ); - } - - /** - * @param class-string|Factory $handler - */ - public function registerTagHandler(string $tagName, $handler): void - { - $this->tagFactory->registerTagHandler($tagName, $handler); - } - - /** - * Strips the asterisks from the DocBlock comment. - * - * @param string $comment String containing the comment text. - */ - private function stripDocComment(string $comment): string - { - $comment = preg_replace('#[ \t]*(?:\/\*\*|\*\/|\*)?[ \t]?(.*)?#u', '$1', $comment); - Assert::string($comment); - $comment = trim($comment); - - // reg ex above is not able to remove */ from a single line docblock - if (substr($comment, -2) === '*/') { - $comment = trim(substr($comment, 0, -2)); - } - - return str_replace(["\r\n", "\r"], "\n", $comment); - } - - // phpcs:disable - - /** - * Splits the DocBlock into a template marker, summary, description and block of tags. - * - * @param string $comment Comment to split into the sub-parts. - * - * @return string[] containing the template marker (if any), summary, description and a string containing the tags. - * - * @author Mike van Riel for extending the regex with template marker support. - * - * @author Richard van Velzen (@_richardJ) Special thanks to Richard for the regex responsible for the split. - */ - private function splitDocBlock(string $comment): array - { - // phpcs:enable - // Performance improvement cheat: if the first character is an @ then only tags are in this DocBlock. This - // method does not split tags so we return this verbatim as the fourth result (tags). This saves us the - // performance impact of running a regular expression - if (strpos($comment, '@') === 0) { - return ['', '', '', $comment]; - } - - // clears all extra horizontal whitespace from the line endings to prevent parsing issues - $comment = preg_replace('/\h*$/Sum', '', $comment); - Assert::string($comment); - /* - * Splits the docblock into a template marker, summary, description and tags section. - * - * - The template marker is empty, #@+ or #@- if the DocBlock starts with either of those (a newline may - * occur after it and will be stripped). - * - The short description is started from the first character until a dot is encountered followed by a - * newline OR two consecutive newlines (horizontal whitespace is taken into account to consider spacing - * errors). This is optional. - * - The long description, any character until a new line is encountered followed by an @ and word - * characters (a tag). This is optional. - * - Tags; the remaining characters - * - * Big thanks to RichardJ for contributing this Regular Expression - */ - preg_match( - '/ - \A - # 1. Extract the template marker - (?:(\#\@\+|\#\@\-)\n?)? - - # 2. Extract the summary - (?: - (?! @\pL ) # The summary may not start with an @ - ( - [^\n.]+ - (?: - (?! \. \n | \n{2} ) # End summary upon a dot followed by newline or two newlines - [\n.]* (?! [ \t]* @\pL ) # End summary when an @ is found as first character on a new line - [^\n.]+ # Include anything else - )* - \.? - )? - ) - - # 3. Extract the description - (?: - \s* # Some form of whitespace _must_ precede a description because a summary must be there - (?! @\pL ) # The description may not start with an @ - ( - [^\n]+ - (?: \n+ - (?! [ \t]* @\pL ) # End description when an @ is found as first character on a new line - [^\n]+ # Include anything else - )* - ) - )? - - # 4. Extract the tags (anything that follows) - (\s+ [\s\S]*)? # everything that follows - /ux', - $comment, - $matches - ); - array_shift($matches); - - while (count($matches) < 4) { - $matches[] = ''; - } - - return $matches; - } - - /** - * Creates the tag objects. - * - * @param string $tags Tag block to parse. - * @param Types\Context $context Context of the parsed Tag - * - * @return DocBlock\Tag[] - */ - private function parseTagBlock(string $tags, Types\Context $context): array - { - $tags = $this->filterTagBlock($tags); - if ($tags === null) { - return []; - } - - $result = []; - $lines = $this->splitTagBlockIntoTagLines($tags); - foreach ($lines as $key => $tagLine) { - $result[$key] = $this->tagFactory->create(trim($tagLine), $context); - } - - return $result; - } - - /** - * @return string[] - */ - private function splitTagBlockIntoTagLines(string $tags): array - { - $result = []; - foreach (explode("\n", $tags) as $tagLine) { - if ($tagLine !== '' && strpos($tagLine, '@') === 0) { - $result[] = $tagLine; - } else { - $result[count($result) - 1] .= "\n" . $tagLine; - } - } - - return $result; - } - - private function filterTagBlock(string $tags): ?string - { - $tags = trim($tags); - if (!$tags) { - return null; - } - - if ($tags[0] !== '@') { - // @codeCoverageIgnoreStart - // Can't simulate this; this only happens if there is an error with the parsing of the DocBlock that - // we didn't foresee. - - throw new LogicException('A tag block started with text instead of an at-sign(@): ' . $tags); - - // @codeCoverageIgnoreEnd - } - - return $tags; - } -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php b/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php deleted file mode 100644 index cacc382..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/DocBlockFactoryInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -> $additionalTags - */ - public static function createInstance(array $additionalTags = []): self; - - /** - * @param string|object $docblock - */ - public function create($docblock, ?Types\Context $context = null, ?Location $location = null): DocBlock; -} diff --git a/vendor/phpdocumentor/reflection-docblock/src/Exception/PcreException.php b/vendor/phpdocumentor/reflection-docblock/src/Exception/PcreException.php deleted file mode 100644 index b8b6da8..0000000 --- a/vendor/phpdocumentor/reflection-docblock/src/Exception/PcreException.php +++ /dev/null @@ -1,44 +0,0 @@ - please note that if you want to pass partial class names that additional steps are necessary, see the - > chapter `Resolving partial classes and FQSENs` for more information. - -Where the FqsenResolver can resolve: - -- Constant expressions (i.e. `@see \MyNamespace\MY_CONSTANT`) -- Function expressions (i.e. `@see \MyNamespace\myFunction()`) -- Class expressions (i.e. `@see \MyNamespace\MyClass`) -- Interface expressions (i.e. `@see \MyNamespace\MyInterface`) -- Trait expressions (i.e. `@see \MyNamespace\MyTrait`) -- Class constant expressions (i.e. `@see \MyNamespace\MyClass::MY_CONSTANT`) -- Property expressions (i.e. `@see \MyNamespace\MyClass::$myProperty`) -- Method expressions (i.e. `@see \MyNamespace\MyClass::myMethod()`) - -## Resolving a type - -In order to resolve a type you will have to instantiate the class `\phpDocumentor\Reflection\TypeResolver` and call its `resolve` method like this: - -```php -$typeResolver = new \phpDocumentor\Reflection\TypeResolver(); -$type = $typeResolver->resolve('string|integer'); -``` - -In this example you will receive a Value Object of class `\phpDocumentor\Reflection\Types\Compound` that has two -elements, one of type `\phpDocumentor\Reflection\Types\String_` and one of type -`\phpDocumentor\Reflection\Types\Integer`. - -The real power of this resolver is in its capability to expand partial class names into fully qualified class names; but in order to do that we need an additional `\phpDocumentor\Reflection\Types\Context` class that will inform the resolver in which namespace the given expression occurs and which namespace aliases (or imports) apply. - -### Resolving nullable types - -Php 7.1 introduced nullable types e.g. `?string`. Type resolver will resolve the original type without the nullable notation `?` -just like it would do without the `?`. After that the type is wrapped in a `\phpDocumentor\Reflection\Types\Nullable` object. -The `Nullable` type has a method to fetch the actual type. - -## Resolving an FQSEN - -A Fully Qualified Structural Element Name is a reference to another element in your code bases and can be resolved using the `\phpDocumentor\Reflection\FqsenResolver` class' `resolve` method, like this: - -```php -$fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); -$fqsen = $fqsenResolver->resolve('\phpDocumentor\Reflection\FqsenResolver::resolve()'); -``` - -In this example we resolve a Fully Qualified Structural Element Name (meaning that it includes the full namespace, class name and element name) and receive a Value Object of type `\phpDocumentor\Reflection\Fqsen`. - -The real power of this resolver is in its capability to expand partial element names into Fully Qualified Structural Element Names; but in order to do that we need an additional `\phpDocumentor\Reflection\Types\Context` class that will inform the resolver in which namespace the given expression occurs and which namespace aliases (or imports) apply. - -## Resolving partial Classes and Structural Element Names - -Perhaps the best feature of this library is that it knows how to resolve partial class names into fully qualified class names. - -For example, you have this file: - -```php -namespace My\Example; - -use phpDocumentor\Reflection\Types; - -class Classy -{ - /** - * @var Types\Context - * @see Classy::otherFunction() - */ - public function __construct($context) {} - - public function otherFunction(){} -} -``` - -Suppose that you would want to resolve (and expand) the type in the `@var` tag and the element name in the `@see` tag. - -For the resolvers to know how to expand partial names you have to provide a bit of _Context_ for them by instantiating a new class named `\phpDocumentor\Reflection\Types\Context` with the name of the namespace and the aliases that are in play. - -### Creating a Context - -You can do this by manually creating a Context like this: - -```php -$context = new \phpDocumentor\Reflection\Types\Context( - '\My\Example', - [ 'Types' => '\phpDocumentor\Reflection\Types'] -); -``` - -Or by using the `\phpDocumentor\Reflection\Types\ContextFactory` to instantiate a new context based on a Reflector object or by providing the namespace that you'd like to extract and the source code of the file in which the given type expression occurs. - -```php -$contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); -$context = $contextFactory->createFromReflector(new ReflectionMethod('\My\Example\Classy', '__construct')); -``` - -or - -```php -$contextFactory = new \phpDocumentor\Reflection\Types\ContextFactory(); -$context = $contextFactory->createForNamespace('\My\Example', file_get_contents('My/Example/Classy.php')); -``` - -### Using the Context - -After you have obtained a Context it is just a matter of passing it along with the `resolve` method of either Resolver class as second argument and the Resolvers will take this into account when resolving partial names. - -To obtain the resolved class name for the `@var` tag in the example above you can do: - -```php -$typeResolver = new \phpDocumentor\Reflection\TypeResolver(); -$type = $typeResolver->resolve('Types\Context', $context); -``` - -When you do this you will receive an object of class `\phpDocumentor\Reflection\Types\Object_` for which you can call the `getFqsen` method to receive a Value Object that represents the complete FQSEN. So that would be `phpDocumentor\Reflection\Types\Context`. - -> Why is the FQSEN wrapped in another object `Object_`? -> -> The resolve method of the TypeResolver only returns object with the interface `Type` and the FQSEN is a common type that does not represent a Type. Also: in some cases a type can represent an "Untyped Object", meaning that it is an object (signified by the `object` keyword) but does not refer to a specific element using an FQSEN. - -Another example is on how to resolve the FQSEN of a method as can be seen with the `@see` tag in the example above. To resolve that you can do the following: - -```php -$fqsenResolver = new \phpDocumentor\Reflection\FqsenResolver(); -$type = $fqsenResolver->resolve('Classy::otherFunction()', $context); -``` - -Because Classy is a Class in the current namespace its FQSEN will have the `My\Example` namespace and by calling the `resolve` method of the FQSEN Resolver you will receive an `Fqsen` object that refers to `\My\Example\Classy::otherFunction()`. diff --git a/vendor/phpdocumentor/type-resolver/composer.json b/vendor/phpdocumentor/type-resolver/composer.json deleted file mode 100644 index c4afb7d..0000000 --- a/vendor/phpdocumentor/type-resolver/composer.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "name": "phpdocumentor/type-resolver", - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", - "type": "library", - "license": "MIT", - "authors": [ - { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" - } - ], - "require": { - "php": "^7.3 || ^8.0", - "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13", - "doctrine/deprecations": "^1.0" - }, - "require-dev": { - "ext-tokenizer": "*", - "phpunit/phpunit": "^9.5", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/extension-installer": "^1.1", - "vimeo/psalm": "^4.25", - "rector/rector": "^0.13.9", - "phpbench/phpbench": "^1.2" - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } - }, - "autoload-dev": { - "psr-4": { - "phpDocumentor\\Reflection\\": ["tests/unit", "tests/benchmark"] - } - }, - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "config": { - "platform": { - "php": "7.3.0" - }, - "allow-plugins": { - "phpstan/extension-installer": true - } - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php b/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php deleted file mode 100644 index 068fa20..0000000 --- a/vendor/phpdocumentor/type-resolver/src/FqsenResolver.php +++ /dev/null @@ -1,80 +0,0 @@ -isFqsen($fqsen)) { - return new Fqsen($fqsen); - } - - return $this->resolvePartialStructuralElementName($fqsen, $context); - } - - /** - * Tests whether the given type is a Fully Qualified Structural Element Name. - */ - private function isFqsen(string $type): bool - { - return strpos($type, self::OPERATOR_NAMESPACE) === 0; - } - - /** - * Resolves a partial Structural Element Name (i.e. `Reflection\DocBlock`) to its FQSEN representation - * (i.e. `\phpDocumentor\Reflection\DocBlock`) based on the Namespace and aliases mentioned in the Context. - * - * @throws InvalidArgumentException When type is not a valid FQSEN. - */ - private function resolvePartialStructuralElementName(string $type, Context $context): Fqsen - { - $typeParts = explode(self::OPERATOR_NAMESPACE, $type, 2); - - $namespaceAliases = $context->getNamespaceAliases(); - - // if the first segment is not an alias; prepend namespace name and return - if (!isset($namespaceAliases[$typeParts[0]])) { - $namespace = $context->getNamespace(); - if ($namespace !== '') { - $namespace .= self::OPERATOR_NAMESPACE; - } - - return new Fqsen(self::OPERATOR_NAMESPACE . $namespace . $type); - } - - $typeParts[0] = $namespaceAliases[$typeParts[0]]; - - return new Fqsen(self::OPERATOR_NAMESPACE . implode(self::OPERATOR_NAMESPACE, $typeParts)); - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoType.php b/vendor/phpdocumentor/type-resolver/src/PseudoType.php deleted file mode 100644 index dd91ed7..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoType.php +++ /dev/null @@ -1,19 +0,0 @@ -items = $items; - } - - /** - * @return ArrayShapeItem[] - */ - public function getItems(): array - { - return $this->items; - } - - public function underlyingType(): Type - { - return new Array_(new Mixed_(), new ArrayKey()); - } - - public function __toString(): string - { - return 'array{' . implode(', ', $this->items) . '}'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShapeItem.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShapeItem.php deleted file mode 100644 index a9756bb..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/ArrayShapeItem.php +++ /dev/null @@ -1,65 +0,0 @@ -key = $key; - $this->value = $value ?? new Mixed_(); - $this->optional = $optional; - } - - public function getKey(): ?string - { - return $this->key; - } - - public function getValue(): Type - { - return $this->value; - } - - public function isOptional(): bool - { - return $this->optional; - } - - public function __toString(): string - { - if ($this->key !== null) { - return sprintf( - '%s%s: %s', - $this->key, - $this->optional ? '?' : '', - (string) $this->value - ); - } - - return (string) $this->value; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/CallableString.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/CallableString.php deleted file mode 100644 index b693456..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/CallableString.php +++ /dev/null @@ -1,39 +0,0 @@ -owner = $owner; - $this->expression = $expression; - } - - public function getOwner(): Type - { - return $this->owner; - } - - public function getExpression(): string - { - return $this->expression; - } - - public function underlyingType(): Type - { - return new Mixed_(); - } - - public function __toString(): string - { - return sprintf('%s::%s', (string) $this->owner, $this->expression); - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/False_.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/False_.php deleted file mode 100644 index 871c172..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/False_.php +++ /dev/null @@ -1,40 +0,0 @@ -value = $value; - } - - public function getValue(): float - { - return $this->value; - } - - public function underlyingType(): Type - { - return new Float_(); - } - - public function __toString(): string - { - return (string) $this->value; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/HtmlEscapedString.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/HtmlEscapedString.php deleted file mode 100644 index aa4d8db..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/HtmlEscapedString.php +++ /dev/null @@ -1,39 +0,0 @@ -minValue = $minValue; - $this->maxValue = $maxValue; - } - - public function underlyingType(): Type - { - return new Integer(); - } - - public function getMinValue(): string - { - return $this->minValue; - } - - public function getMaxValue(): string - { - return $this->maxValue; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - return 'int<' . $this->minValue . ', ' . $this->maxValue . '>'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/IntegerValue.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/IntegerValue.php deleted file mode 100644 index 51f0d34..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/IntegerValue.php +++ /dev/null @@ -1,45 +0,0 @@ -value = $value; - } - - public function getValue(): int - { - return $this->value; - } - - public function underlyingType(): Type - { - return new Integer(); - } - - public function __toString(): string - { - return (string) $this->value; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/List_.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/List_.php deleted file mode 100644 index f9f0c6b..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/List_.php +++ /dev/null @@ -1,50 +0,0 @@ -valueType instanceof Mixed_) { - return 'list'; - } - - return 'list<' . $this->valueType . '>'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/LiteralString.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/LiteralString.php deleted file mode 100644 index 690f782..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/LiteralString.php +++ /dev/null @@ -1,39 +0,0 @@ -valueType instanceof Mixed_) { - return 'non-empty-list'; - } - - return 'non-empty-list<' . $this->valueType . '>'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyLowercaseString.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyLowercaseString.php deleted file mode 100644 index 8640016..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/NonEmptyLowercaseString.php +++ /dev/null @@ -1,39 +0,0 @@ -value = $value; - } - - public function getValue(): string - { - return $this->value; - } - - public function underlyingType(): Type - { - return new String_(); - } - - public function __toString(): string - { - return sprintf('"%s"', $this->value); - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/TraitString.php b/vendor/phpdocumentor/type-resolver/src/PseudoTypes/TraitString.php deleted file mode 100644 index ac217c2..0000000 --- a/vendor/phpdocumentor/type-resolver/src/PseudoTypes/TraitString.php +++ /dev/null @@ -1,39 +0,0 @@ - List of recognized keywords and unto which Value Object they map - * @psalm-var array> - */ - private $keywords = [ - 'string' => String_::class, - 'class-string' => ClassString::class, - 'interface-string' => InterfaceString::class, - 'html-escaped-string' => HtmlEscapedString::class, - 'lowercase-string' => LowercaseString::class, - 'non-empty-lowercase-string' => NonEmptyLowercaseString::class, - 'non-empty-string' => NonEmptyString::class, - 'numeric-string' => NumericString::class, - 'numeric' => Numeric_::class, - 'trait-string' => TraitString::class, - 'int' => Integer::class, - 'integer' => Integer::class, - 'positive-int' => PositiveInteger::class, - 'negative-int' => NegativeInteger::class, - 'bool' => Boolean::class, - 'boolean' => Boolean::class, - 'real' => Float_::class, - 'float' => Float_::class, - 'double' => Float_::class, - 'object' => Object_::class, - 'mixed' => Mixed_::class, - 'array' => Array_::class, - 'array-key' => ArrayKey::class, - 'resource' => Resource_::class, - 'void' => Void_::class, - 'null' => Null_::class, - 'scalar' => Scalar::class, - 'callback' => Callable_::class, - 'callable' => Callable_::class, - 'callable-string' => CallableString::class, - 'false' => False_::class, - 'true' => True_::class, - 'literal-string' => LiteralString::class, - 'self' => Self_::class, - '$this' => This::class, - 'static' => Static_::class, - 'parent' => Parent_::class, - 'iterable' => Iterable_::class, - 'never' => Never_::class, - 'list' => List_::class, - 'non-empty-list' => NonEmptyList::class, - ]; - - /** - * @psalm-readonly - * @var FqsenResolver - */ - private $fqsenResolver; - /** - * @psalm-readonly - * @var TypeParser - */ - private $typeParser; - /** - * @psalm-readonly - * @var Lexer - */ - private $lexer; - - /** - * Initializes this TypeResolver with the means to create and resolve Fqsen objects. - */ - public function __construct(?FqsenResolver $fqsenResolver = null) - { - $this->fqsenResolver = $fqsenResolver ?: new FqsenResolver(); - $this->typeParser = new TypeParser(new ConstExprParser()); - $this->lexer = new Lexer(); - } - - /** - * Analyzes the given type and returns the FQCN variant. - * - * When a type is provided this method checks whether it is not a keyword or - * Fully Qualified Class Name. If so it will use the given namespace and - * aliases to expand the type to a FQCN representation. - * - * This method only works as expected if the namespace and aliases are set; - * no dynamic reflection is being performed here. - * - * @uses Context::getNamespace() to determine with what to prefix the type name. - * @uses Context::getNamespaceAliases() to check whether the first part of the relative type name should not be - * replaced with another namespace. - * - * @param string $type The relative or absolute type. - */ - public function resolve(string $type, ?Context $context = null): Type - { - $type = trim($type); - if (!$type) { - throw new InvalidArgumentException('Attempted to resolve "' . $type . '" but it appears to be empty'); - } - - if ($context === null) { - $context = new Context(''); - } - - $tokens = $this->lexer->tokenize($type); - $tokenIterator = new TokenIterator($tokens); - - $ast = $this->parse($tokenIterator); - $type = $this->createType($ast, $context); - - return $this->tryParseRemainingCompoundTypes($tokenIterator, $context, $type); - } - - public function createType(?TypeNode $type, Context $context): Type - { - if ($type === null) { - return new Mixed_(); - } - - switch (get_class($type)) { - case ArrayTypeNode::class: - return new Array_( - $this->createType($type->type, $context) - ); - - case ArrayShapeNode::class: - return new ArrayShape( - ...array_map( - function (ArrayShapeItemNode $item) use ($context): ArrayShapeItem { - return new ArrayShapeItem( - (string) $item->keyName, - $this->createType($item->valueType, $context), - $item->optional - ); - }, - $type->items - ) - ); - - case CallableTypeNode::class: - return $this->createFromCallable($type, $context); - - case ConstTypeNode::class: - return $this->createFromConst($type, $context); - - case GenericTypeNode::class: - return $this->createFromGeneric($type, $context); - - case IdentifierTypeNode::class: - return $this->resolveSingleType($type->name, $context); - - case IntersectionTypeNode::class: - return new Intersection( - array_filter( - array_map( - function (TypeNode $nestedType) use ($context): Type { - $type = $this->createType($nestedType, $context); - if ($type instanceof AggregatedType) { - return new Expression($type); - } - - return $type; - }, - $type->types - ) - ) - ); - - case NullableTypeNode::class: - $nestedType = $this->createType($type->type, $context); - - return new Nullable($nestedType); - - case UnionTypeNode::class: - return new Compound( - array_filter( - array_map( - function (TypeNode $nestedType) use ($context): Type { - $type = $this->createType($nestedType, $context); - if ($type instanceof AggregatedType) { - return new Expression($type); - } - - return $type; - }, - $type->types - ) - ) - ); - - case ThisTypeNode::class: - return new This(); - - case ConditionalTypeNode::class: - case ConditionalTypeForParameterNode::class: - case OffsetAccessTypeNode::class: - default: - return new Mixed_(); - } - } - - private function createFromGeneric(GenericTypeNode $type, Context $context): Type - { - switch (strtolower($type->type->name)) { - case 'array': - return $this->createArray($type->genericTypes, $context); - - case 'class-string': - $subType = $this->createType($type->genericTypes[0], $context); - if (!$subType instanceof Object_ || $subType->getFqsen() === null) { - throw new RuntimeException( - $subType . ' is not a class string' - ); - } - - return new ClassString( - $subType->getFqsen() - ); - - case 'interface-string': - $subType = $this->createType($type->genericTypes[0], $context); - if (!$subType instanceof Object_ || $subType->getFqsen() === null) { - throw new RuntimeException( - $subType . ' is not a class string' - ); - } - - return new InterfaceString( - $subType->getFqsen() - ); - - case 'list': - return new List_( - $this->createType($type->genericTypes[0], $context) - ); - - case 'non-empty-list': - return new NonEmptyList( - $this->createType($type->genericTypes[0], $context) - ); - - case 'int': - if (isset($type->genericTypes[1]) === false) { - throw new RuntimeException('int has not the correct format'); - } - - return new IntegerRange((string) $type->genericTypes[0], (string) $type->genericTypes[1]); - - case 'iterable': - return new Iterable_( - ...array_reverse( - array_map( - function (TypeNode $genericType) use ($context): Type { - return $this->createType($genericType, $context); - }, - $type->genericTypes - ) - ) - ); - - default: - $collectionType = $this->createType($type->type, $context); - if ($collectionType instanceof Object_ === false) { - throw new RuntimeException(sprintf('%s is not a collection', (string) $collectionType)); - } - - return new Collection( - $collectionType->getFqsen(), - ...array_reverse( - array_map( - function (TypeNode $genericType) use ($context): Type { - return $this->createType($genericType, $context); - }, - $type->genericTypes - ) - ) - ); - } - } - - private function createFromCallable(CallableTypeNode $type, Context $context): Callable_ - { - return new Callable_(array_map( - function (CallableTypeParameterNode $param) use ($context): CallableParameter { - return new CallableParameter( - $this->createType($param->type, $context), - $param->parameterName !== '' ? trim($param->parameterName, '$') : null, - $param->isReference, - $param->isVariadic, - $param->isOptional - ); - }, - $type->parameters - ), $this->createType($type->returnType, $context)); - } - - private function createFromConst(ConstTypeNode $type, Context $context): Type - { - switch (true) { - case $type->constExpr instanceof ConstExprIntegerNode: - return new IntegerValue((int) $type->constExpr->value); - - case $type->constExpr instanceof ConstExprFloatNode: - return new FloatValue((float) $type->constExpr->value); - - case $type->constExpr instanceof ConstExprStringNode: - return new StringValue($type->constExpr->value); - - case $type->constExpr instanceof ConstFetchNode: - return new ConstExpression( - $this->resolve($type->constExpr->className, $context), - $type->constExpr->name - ); - - default: - throw new RuntimeException(sprintf('Unsupported constant type %s', get_class($type))); - } - } - - /** - * resolve the given type into a type object - * - * @param string $type the type string, representing a single type - * - * @return Type|Array_|Object_ - * - * @psalm-mutation-free - */ - private function resolveSingleType(string $type, Context $context): object - { - switch (true) { - case $this->isKeyword($type): - return $this->resolveKeyword($type); - - case $this->isFqsen($type): - return $this->resolveTypedObject($type); - - case $this->isPartialStructuralElementName($type): - return $this->resolveTypedObject($type, $context); - - // @codeCoverageIgnoreStart - default: - // I haven't got the foggiest how the logic would come here but added this as a defense. - throw new RuntimeException( - 'Unable to resolve type "' . $type . '", there is no known method to resolve it' - ); - } - - // @codeCoverageIgnoreEnd - } - - /** - * Adds a keyword to the list of Keywords and associates it with a specific Value Object. - * - * @psalm-param class-string $typeClassName - */ - public function addKeyword(string $keyword, string $typeClassName): void - { - if (!class_exists($typeClassName)) { - throw new InvalidArgumentException( - 'The Value Object that needs to be created with a keyword "' . $keyword . '" must be an existing class' - . ' but we could not find the class ' . $typeClassName - ); - } - - $interfaces = class_implements($typeClassName); - if ($interfaces === false) { - throw new InvalidArgumentException( - 'The Value Object that needs to be created with a keyword "' . $keyword . '" must be an existing class' - . ' but we could not find the class ' . $typeClassName - ); - } - - if (!in_array(Type::class, $interfaces, true)) { - throw new InvalidArgumentException( - 'The class "' . $typeClassName . '" must implement the interface "phpDocumentor\Reflection\Type"' - ); - } - - $this->keywords[$keyword] = $typeClassName; - } - - /** - * Detects whether the given type represents a PHPDoc keyword. - * - * @param string $type A relative or absolute type as defined in the phpDocumentor documentation. - * - * @psalm-mutation-free - */ - private function isKeyword(string $type): bool - { - return array_key_exists(strtolower($type), $this->keywords); - } - - /** - * Detects whether the given type represents a relative structural element name. - * - * @param string $type A relative or absolute type as defined in the phpDocumentor documentation. - * - * @psalm-mutation-free - */ - private function isPartialStructuralElementName(string $type): bool - { - return (isset($type[0]) && $type[0] !== self::OPERATOR_NAMESPACE) && !$this->isKeyword($type); - } - - /** - * Tests whether the given type is a Fully Qualified Structural Element Name. - * - * @psalm-mutation-free - */ - private function isFqsen(string $type): bool - { - return strpos($type, self::OPERATOR_NAMESPACE) === 0; - } - - /** - * Resolves the given keyword (such as `string`) into a Type object representing that keyword. - * - * @psalm-mutation-free - */ - private function resolveKeyword(string $type): Type - { - $className = $this->keywords[strtolower($type)]; - - return new $className(); - } - - /** - * Resolves the given FQSEN string into an FQSEN object. - * - * @psalm-mutation-free - */ - private function resolveTypedObject(string $type, ?Context $context = null): Object_ - { - return new Object_($this->fqsenResolver->resolve($type, $context)); - } - - /** @param TypeNode[] $typeNodes */ - private function createArray(array $typeNodes, Context $context): Array_ - { - $types = array_reverse( - array_map( - function (TypeNode $node) use ($context): Type { - return $this->createType($node, $context); - }, - $typeNodes - ) - ); - - if (isset($types[1]) === false) { - return new Array_(...$types); - } - - if ($this->validArrayKeyType($types[1]) || $types[1] instanceof ArrayKey) { - return new Array_(...$types); - } - - if ($types[1] instanceof Compound && $types[1]->getIterator()->count() === 2) { - if ($this->validArrayKeyType($types[1]->get(0)) && $this->validArrayKeyType($types[1]->get(1))) { - return new Array_(...$types); - } - } - - throw new RuntimeException('An array can have only integers or strings as keys'); - } - - private function validArrayKeyType(?Type $type): bool - { - return $type instanceof String_ || $type instanceof Integer; - } - - private function parse(TokenIterator $tokenIterator): TypeNode - { - try { - $ast = $this->typeParser->parse($tokenIterator); - } catch (ParserException $e) { - throw new RuntimeException($e->getMessage(), 0, $e); - } - - return $ast; - } - - /** - * Will try to parse unsupported type notations by phpstan - * - * The phpstan parser doesn't support the illegal nullable combinations like this library does. - * This method will warn the user about those notations but for bc purposes we will still have it here. - */ - private function tryParseRemainingCompoundTypes(TokenIterator $tokenIterator, Context $context, Type $type): Type - { - if ( - $tokenIterator->isCurrentTokenType(Lexer::TOKEN_UNION) || - $tokenIterator->isCurrentTokenType(Lexer::TOKEN_INTERSECTION) - ) { - Deprecation::trigger( - 'phpdocumentor/type-resolver', - 'https://github.com/phpDocumentor/TypeResolver/issues/184', - 'Legacy nullable type detected, please update your code as - you are using nullable types in a docblock. support will be removed in v2.0.0' - ); - } - - $continue = true; - while ($continue) { - $continue = false; - while ($tokenIterator->tryConsumeTokenType(Lexer::TOKEN_UNION)) { - $ast = $this->parse($tokenIterator); - $type2 = $this->createType($ast, $context); - $type = new Compound([$type, $type2]); - $continue = true; - } - - while ($tokenIterator->tryConsumeTokenType(Lexer::TOKEN_INTERSECTION)) { - $ast = $this->typeParser->parse($tokenIterator); - $type2 = $this->createType($ast, $context); - $type = new Intersection([$type, $type2]); - $continue = true; - } - } - - return $type; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/AbstractList.php b/vendor/phpdocumentor/type-resolver/src/Types/AbstractList.php deleted file mode 100644 index ee8ace8..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/AbstractList.php +++ /dev/null @@ -1,83 +0,0 @@ -valueType = $valueType; - $this->defaultKeyType = new Compound([new String_(), new Integer()]); - $this->keyType = $keyType; - } - - /** - * Returns the type for the keys of this array. - */ - public function getKeyType(): Type - { - return $this->keyType ?? $this->defaultKeyType; - } - - /** - * Returns the type for the values of this array. - */ - public function getValueType(): Type - { - return $this->valueType; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - if ($this->keyType) { - return 'array<' . $this->keyType . ',' . $this->valueType . '>'; - } - - if ($this->valueType instanceof Mixed_) { - return 'array'; - } - - if ($this->valueType instanceof Compound) { - return '(' . $this->valueType . ')[]'; - } - - return $this->valueType . '[]'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/AggregatedType.php b/vendor/phpdocumentor/type-resolver/src/Types/AggregatedType.php deleted file mode 100644 index e1da6cb..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/AggregatedType.php +++ /dev/null @@ -1,125 +0,0 @@ - - */ -abstract class AggregatedType implements Type, IteratorAggregate -{ - /** - * @psalm-allow-private-mutation - * @var array - */ - private $types = []; - - /** @var string */ - private $token; - - /** - * @param array $types - */ - public function __construct(array $types, string $token) - { - foreach ($types as $type) { - $this->add($type); - } - - $this->token = $token; - } - - /** - * Returns the type at the given index. - */ - public function get(int $index): ?Type - { - if (!$this->has($index)) { - return null; - } - - return $this->types[$index]; - } - - /** - * Tests if this compound type has a type with the given index. - */ - public function has(int $index): bool - { - return array_key_exists($index, $this->types); - } - - /** - * Tests if this compound type contains the given type. - */ - public function contains(Type $type): bool - { - foreach ($this->types as $typePart) { - // if the type is duplicate; do not add it - if ((string) $typePart === (string) $type) { - return true; - } - } - - return false; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - return implode($this->token, $this->types); - } - - /** - * @return ArrayIterator - */ - public function getIterator(): ArrayIterator - { - return new ArrayIterator($this->types); - } - - /** - * @psalm-suppress ImpureMethodCall - */ - private function add(Type $type): void - { - if ($type instanceof static) { - foreach ($type->getIterator() as $subType) { - $this->add($subType); - } - - return; - } - - // if the type is duplicate; do not add it - if ($this->contains($type)) { - return; - } - - $this->types[] = $type; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/ArrayKey.php b/vendor/phpdocumentor/type-resolver/src/Types/ArrayKey.php deleted file mode 100644 index cf86df0..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/ArrayKey.php +++ /dev/null @@ -1,42 +0,0 @@ -type = $type; - $this->isReference = $isReference; - $this->isVariadic = $isVariadic; - $this->isOptional = $isOptional; - $this->name = $name; - } - - public function getName(): ?string - { - return $this->name; - } - - public function getType(): Type - { - return $this->type; - } - - public function isReference(): bool - { - return $this->isReference; - } - - public function isVariadic(): bool - { - return $this->isVariadic; - } - - public function isOptional(): bool - { - return $this->isOptional; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Callable_.php b/vendor/phpdocumentor/type-resolver/src/Types/Callable_.php deleted file mode 100644 index 6b06489..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Callable_.php +++ /dev/null @@ -1,57 +0,0 @@ -parameters = $parameters; - $this->returnType = $returnType; - } - - /** @return CallableParameter[] */ - public function getParameters(): array - { - return $this->parameters; - } - - public function getReturnType(): ?Type - { - return $this->returnType; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - return 'callable'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/ClassString.php b/vendor/phpdocumentor/type-resolver/src/Types/ClassString.php deleted file mode 100644 index fbdd879..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/ClassString.php +++ /dev/null @@ -1,62 +0,0 @@ -fqsen = $fqsen; - } - - public function underlyingType(): Type - { - return new String_(); - } - - /** - * Returns the FQSEN associated with this object. - */ - public function getFqsen(): ?Fqsen - { - return $this->fqsen; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - if ($this->fqsen === null) { - return 'class-string'; - } - - return 'class-string<' . (string) $this->fqsen . '>'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Collection.php b/vendor/phpdocumentor/type-resolver/src/Types/Collection.php deleted file mode 100644 index 943cc22..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Collection.php +++ /dev/null @@ -1,68 +0,0 @@ -` - * 2. `ACollectionObject` - * - * - ACollectionObject can be 'array' or an object that can act as an array - * - aValueType and aKeyType can be any type expression - * - * @psalm-immutable - */ -final class Collection extends AbstractList -{ - /** @var Fqsen|null */ - private $fqsen; - - /** - * Initializes this representation of an array with the given Type or Fqsen. - */ - public function __construct(?Fqsen $fqsen, Type $valueType, ?Type $keyType = null) - { - parent::__construct($valueType, $keyType); - - $this->fqsen = $fqsen; - } - - /** - * Returns the FQSEN associated with this object. - */ - public function getFqsen(): ?Fqsen - { - return $this->fqsen; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - $objectType = (string) ($this->fqsen ?? 'object'); - - if ($this->keyType === null) { - return $objectType . '<' . $this->valueType . '>'; - } - - return $objectType . '<' . $this->keyType . ',' . $this->valueType . '>'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Compound.php b/vendor/phpdocumentor/type-resolver/src/Types/Compound.php deleted file mode 100644 index ad426cc..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Compound.php +++ /dev/null @@ -1,38 +0,0 @@ - $types - */ - public function __construct(array $types) - { - parent::__construct($types, '|'); - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Context.php b/vendor/phpdocumentor/type-resolver/src/Types/Context.php deleted file mode 100644 index 79aadaf..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Context.php +++ /dev/null @@ -1,95 +0,0 @@ - Fully Qualified Namespace. - * @psalm-var array - */ - private $namespaceAliases; - - /** - * Initializes the new context and normalizes all passed namespaces to be in Qualified Namespace Name (QNN) - * format (without a preceding `\`). - * - * @param string $namespace The namespace where this DocBlock resides in. - * @param string[] $namespaceAliases List of namespace aliases => Fully Qualified Namespace. - * @psalm-param array $namespaceAliases - */ - public function __construct(string $namespace, array $namespaceAliases = []) - { - $this->namespace = $namespace !== 'global' && $namespace !== 'default' - ? trim($namespace, '\\') - : ''; - - foreach ($namespaceAliases as $alias => $fqnn) { - if ($fqnn[0] === '\\') { - $fqnn = substr($fqnn, 1); - } - - if ($fqnn[strlen($fqnn) - 1] === '\\') { - $fqnn = substr($fqnn, 0, -1); - } - - $namespaceAliases[$alias] = $fqnn; - } - - $this->namespaceAliases = $namespaceAliases; - } - - /** - * Returns the Qualified Namespace Name (thus without `\` in front) where the associated element is in. - */ - public function getNamespace(): string - { - return $this->namespace; - } - - /** - * Returns a list of Qualified Namespace Names (thus without `\` in front) that are imported, the keys represent - * the alias for the imported Namespace. - * - * @return string[] - * @psalm-return array - */ - public function getNamespaceAliases(): array - { - return $this->namespaceAliases; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php b/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php deleted file mode 100644 index 2018ff5..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/ContextFactory.php +++ /dev/null @@ -1,422 +0,0 @@ - $reflector */ - - return $this->createFromReflectionClass($reflector); - } - - if ($reflector instanceof ReflectionParameter) { - return $this->createFromReflectionParameter($reflector); - } - - if ($reflector instanceof ReflectionMethod) { - return $this->createFromReflectionMethod($reflector); - } - - if ($reflector instanceof ReflectionProperty) { - return $this->createFromReflectionProperty($reflector); - } - - if ($reflector instanceof ReflectionClassConstant) { - return $this->createFromReflectionClassConstant($reflector); - } - - throw new UnexpectedValueException('Unhandled \Reflector instance given: ' . get_class($reflector)); - } - - private function createFromReflectionParameter(ReflectionParameter $parameter): Context - { - $class = $parameter->getDeclaringClass(); - if (!$class) { - throw new InvalidArgumentException('Unable to get class of ' . $parameter->getName()); - } - - return $this->createFromReflectionClass($class); - } - - private function createFromReflectionMethod(ReflectionMethod $method): Context - { - $class = $method->getDeclaringClass(); - - return $this->createFromReflectionClass($class); - } - - private function createFromReflectionProperty(ReflectionProperty $property): Context - { - $class = $property->getDeclaringClass(); - - return $this->createFromReflectionClass($class); - } - - private function createFromReflectionClassConstant(ReflectionClassConstant $constant): Context - { - //phpcs:ignore SlevomatCodingStandard.Commenting.InlineDocCommentDeclaration.MissingVariable - /** @phpstan-var ReflectionClass $class */ - $class = $constant->getDeclaringClass(); - - return $this->createFromReflectionClass($class); - } - - /** - * @phpstan-param ReflectionClass $class - */ - private function createFromReflectionClass(ReflectionClass $class): Context - { - $fileName = $class->getFileName(); - $namespace = $class->getNamespaceName(); - - if (is_string($fileName) && file_exists($fileName)) { - $contents = file_get_contents($fileName); - if ($contents === false) { - throw new RuntimeException('Unable to read file "' . $fileName . '"'); - } - - return $this->createForNamespace($namespace, $contents); - } - - return new Context($namespace, []); - } - - /** - * Build a Context for a namespace in the provided file contents. - * - * @see Context for more information on Contexts. - * - * @param string $namespace It does not matter if a `\` precedes the namespace name, - * this method first normalizes. - * @param string $fileContents The file's contents to retrieve the aliases from with the given namespace. - */ - public function createForNamespace(string $namespace, string $fileContents): Context - { - $namespace = trim($namespace, '\\'); - $useStatements = []; - $currentNamespace = ''; - $tokens = new ArrayIterator(token_get_all($fileContents)); - - while ($tokens->valid()) { - $currentToken = $tokens->current(); - switch ($currentToken[0]) { - case T_NAMESPACE: - $currentNamespace = $this->parseNamespace($tokens); - break; - case T_CLASS: - case T_TRAIT: - // Fast-forward the iterator through the class so that any - // T_USE tokens found within are skipped - these are not - // valid namespace use statements so should be ignored. - $braceLevel = 0; - $firstBraceFound = false; - while ($tokens->valid() && ($braceLevel > 0 || !$firstBraceFound)) { - $currentToken = $tokens->current(); - if ( - $currentToken === '{' - || in_array($currentToken[0], [T_CURLY_OPEN, T_DOLLAR_OPEN_CURLY_BRACES], true) - ) { - if (!$firstBraceFound) { - $firstBraceFound = true; - } - - ++$braceLevel; - } - - if ($currentToken === '}') { - --$braceLevel; - } - - $tokens->next(); - } - - break; - case T_USE: - if ($currentNamespace === $namespace) { - $useStatements += $this->parseUseStatement($tokens); - } - - break; - } - - $tokens->next(); - } - - return new Context($namespace, $useStatements); - } - - /** - * Deduce the name from tokens when we are at the T_NAMESPACE token. - * - * @param ArrayIterator $tokens - */ - private function parseNamespace(ArrayIterator $tokens): string - { - // skip to the first string or namespace separator - $this->skipToNextStringOrNamespaceSeparator($tokens); - - $name = ''; - $acceptedTokens = [T_STRING, T_NS_SEPARATOR, T_NAME_QUALIFIED]; - while ($tokens->valid() && in_array($tokens->current()[0], $acceptedTokens, true)) { - $name .= $tokens->current()[1]; - $tokens->next(); - } - - return $name; - } - - /** - * Deduce the names of all imports when we are at the T_USE token. - * - * @param ArrayIterator $tokens - * - * @return string[] - * @psalm-return array - */ - private function parseUseStatement(ArrayIterator $tokens): array - { - $uses = []; - - while ($tokens->valid()) { - $this->skipToNextStringOrNamespaceSeparator($tokens); - - $uses += $this->extractUseStatements($tokens); - $currentToken = $tokens->current(); - if ($currentToken[0] === self::T_LITERAL_END_OF_USE) { - return $uses; - } - } - - return $uses; - } - - /** - * Fast-forwards the iterator as longs as we don't encounter a T_STRING or T_NS_SEPARATOR token. - * - * @param ArrayIterator $tokens - */ - private function skipToNextStringOrNamespaceSeparator(ArrayIterator $tokens): void - { - while ($tokens->valid()) { - $currentToken = $tokens->current(); - if (in_array($currentToken[0], [T_STRING, T_NS_SEPARATOR], true)) { - break; - } - - if ($currentToken[0] === T_NAME_QUALIFIED) { - break; - } - - if (defined('T_NAME_FULLY_QUALIFIED') && $currentToken[0] === T_NAME_FULLY_QUALIFIED) { - break; - } - - $tokens->next(); - } - } - - /** - * Deduce the namespace name and alias of an import when we are at the T_USE token or have not reached the end of - * a USE statement yet. This will return a key/value array of the alias => namespace. - * - * @param ArrayIterator $tokens - * - * @return string[] - * @psalm-return array - * - * @psalm-suppress TypeDoesNotContainType - */ - private function extractUseStatements(ArrayIterator $tokens): array - { - $extractedUseStatements = []; - $groupedNs = ''; - $currentNs = ''; - $currentAlias = ''; - $state = 'start'; - - while ($tokens->valid()) { - $currentToken = $tokens->current(); - $tokenId = is_string($currentToken) ? $currentToken : $currentToken[0]; - $tokenValue = is_string($currentToken) ? null : $currentToken[1]; - switch ($state) { - case 'start': - switch ($tokenId) { - case T_STRING: - case T_NS_SEPARATOR: - $currentNs .= (string) $tokenValue; - $currentAlias = $tokenValue; - break; - case T_NAME_QUALIFIED: - case T_NAME_FULLY_QUALIFIED: - $currentNs .= (string) $tokenValue; - $currentAlias = substr( - (string) $tokenValue, - (int) (strrpos((string) $tokenValue, '\\')) + 1 - ); - break; - case T_CURLY_OPEN: - case '{': - $state = 'grouped'; - $groupedNs = $currentNs; - break; - case T_AS: - $state = 'start-alias'; - break; - case self::T_LITERAL_USE_SEPARATOR: - case self::T_LITERAL_END_OF_USE: - $state = 'end'; - break; - default: - break; - } - - break; - case 'start-alias': - switch ($tokenId) { - case T_STRING: - $currentAlias = $tokenValue; - break; - case self::T_LITERAL_USE_SEPARATOR: - case self::T_LITERAL_END_OF_USE: - $state = 'end'; - break; - default: - break; - } - - break; - case 'grouped': - switch ($tokenId) { - case T_STRING: - case T_NS_SEPARATOR: - $currentNs .= (string) $tokenValue; - $currentAlias = $tokenValue; - break; - case T_AS: - $state = 'grouped-alias'; - break; - case self::T_LITERAL_USE_SEPARATOR: - $state = 'grouped'; - $extractedUseStatements[(string) $currentAlias] = $currentNs; - $currentNs = $groupedNs; - $currentAlias = ''; - break; - case self::T_LITERAL_END_OF_USE: - $state = 'end'; - break; - default: - break; - } - - break; - case 'grouped-alias': - switch ($tokenId) { - case T_STRING: - $currentAlias = $tokenValue; - break; - case self::T_LITERAL_USE_SEPARATOR: - $state = 'grouped'; - $extractedUseStatements[(string) $currentAlias] = $currentNs; - $currentNs = $groupedNs; - $currentAlias = ''; - break; - case self::T_LITERAL_END_OF_USE: - $state = 'end'; - break; - default: - break; - } - } - - if ($state === 'end') { - break; - } - - $tokens->next(); - } - - if ($groupedNs !== $currentNs) { - $extractedUseStatements[(string) $currentAlias] = $currentNs; - } - - return $extractedUseStatements; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Expression.php b/vendor/phpdocumentor/type-resolver/src/Types/Expression.php deleted file mode 100644 index da5f65d..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Expression.php +++ /dev/null @@ -1,51 +0,0 @@ -valueType = $valueType; - } - - /** - * Returns the value for the keys of this array. - */ - public function getValueType(): Type - { - return $this->valueType; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - return '(' . $this->valueType . ')'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Float_.php b/vendor/phpdocumentor/type-resolver/src/Types/Float_.php deleted file mode 100644 index 85313a7..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Float_.php +++ /dev/null @@ -1,32 +0,0 @@ -fqsen = $fqsen; - } - - /** - * Returns the FQSEN associated with this object. - */ - public function getFqsen(): ?Fqsen - { - return $this->fqsen; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - if ($this->fqsen === null) { - return 'interface-string'; - } - - return 'interface-string<' . (string) $this->fqsen . '>'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Intersection.php b/vendor/phpdocumentor/type-resolver/src/Types/Intersection.php deleted file mode 100644 index ced37b6..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Intersection.php +++ /dev/null @@ -1,37 +0,0 @@ - $types - */ - public function __construct(array $types) - { - parent::__construct($types, '&'); - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php b/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php deleted file mode 100644 index 1ca069f..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Iterable_.php +++ /dev/null @@ -1,38 +0,0 @@ -keyType) { - return 'iterable<' . $this->keyType . ',' . $this->valueType . '>'; - } - - if ($this->valueType instanceof Mixed_) { - return 'iterable'; - } - - return 'iterable<' . $this->valueType . '>'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php b/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php deleted file mode 100644 index 56d1b6d..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Mixed_.php +++ /dev/null @@ -1,32 +0,0 @@ -realType = $realType; - } - - /** - * Provide access to the actual type directly, if needed. - */ - public function getActualType(): Type - { - return $this->realType; - } - - /** - * Returns a rendered output of the Type as it would be used in a DocBlock. - */ - public function __toString(): string - { - return '?' . $this->realType->__toString(); - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Object_.php b/vendor/phpdocumentor/type-resolver/src/Types/Object_.php deleted file mode 100644 index 90dee57..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Object_.php +++ /dev/null @@ -1,69 +0,0 @@ -fqsen = $fqsen; - } - - /** - * Returns the FQSEN associated with this object. - */ - public function getFqsen(): ?Fqsen - { - return $this->fqsen; - } - - public function __toString(): string - { - if ($this->fqsen) { - return (string) $this->fqsen; - } - - return 'object'; - } -} diff --git a/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php b/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php deleted file mode 100644 index 3483859..0000000 --- a/vendor/phpdocumentor/type-resolver/src/Types/Parent_.php +++ /dev/null @@ -1,34 +0,0 @@ -PHPDoc Parser for PHPStan - -

- Build Status - Latest Stable Version - License - PHPStan Enabled -

- -This library `phpstan/phpdoc-parser` represents PHPDocs with an AST (Abstract Syntax Tree). It supports parsing and modifying PHPDocs. - -For the complete list of supported PHPDoc features check out PHPStan documentation. PHPStan is the main (but not the only) user of this library. - -* [PHPDoc Basics](https://phpstan.org/writing-php-code/phpdocs-basics) (list of PHPDoc tags) -* [PHPDoc Types](https://phpstan.org/writing-php-code/phpdoc-types) (list of PHPDoc types) -* [phpdoc-parser API Reference](https://phpstan.github.io/phpdoc-parser/1.23.x/namespace-PHPStan.PhpDocParser.html) with all the AST node types etc. - -This parser also supports parsing [Doctrine Annotations](https://github.com/doctrine/annotations). The AST nodes live in the [PHPStan\PhpDocParser\Ast\PhpDoc\Doctrine namespace](https://phpstan.github.io/phpdoc-parser/1.23.x/namespace-PHPStan.PhpDocParser.Ast.PhpDoc.Doctrine.html). The support needs to be turned on by setting `bool $parseDoctrineAnnotations` to `true` in `Lexer` and `PhpDocParser` class constructors. - -## Installation - -``` -composer require phpstan/phpdoc-parser -``` - -## Basic usage - -```php -tokenize('/** @param Lorem $a */')); -$phpDocNode = $phpDocParser->parse($tokens); // PhpDocNode -$paramTags = $phpDocNode->getParamTagValues(); // ParamTagValueNode[] -echo $paramTags[0]->parameterName; // '$a' -echo $paramTags[0]->type; // IdentifierTypeNode - 'Lorem' -``` - -### Format-preserving printer - -This component can be used to modify the AST -and print it again as close as possible to the original. - -It's heavily inspired by format-preserving printer component in [nikic/PHP-Parser](https://github.com/nikic/PHP-Parser). - -```php - true, 'indexes' => true]; - -$lexer = new Lexer(); -$constExprParser = new ConstExprParser(true, true, $usedAttributes); -$typeParser = new TypeParser($constExprParser, true, $usedAttributes); -$phpDocParser = new PhpDocParser($typeParser, $constExprParser, true, true, $usedAttributes); - -$tokens = new TokenIterator($lexer->tokenize('/** @param Lorem $a */')); -$phpDocNode = $phpDocParser->parse($tokens); // PhpDocNode - -$cloningTraverser = new NodeTraverser([new CloningVisitor()]); - -/** @var PhpDocNode $newPhpDocNode */ -[$newPhpDocNode] = $cloningTraverser->traverse([$phpDocNode]); - -// change something in $newPhpDocNode -$newPhpDocNode->getParamTagValues()[0]->type = new IdentifierTypeNode('Ipsum'); - -// print changed PHPDoc -$printer = new Printer(); -$newPhpDoc = $printer->printFormatPreserving($newPhpDocNode, $phpDocNode, $tokens); -echo $newPhpDoc; // '/** @param Ipsum $a */' -``` - -## Code of Conduct - -This project adheres to a [Contributor Code of Conduct](CODE_OF_CONDUCT.md). By participating in this project and its community, you are expected to uphold this code. - -## Building - -Initially you need to run `composer install`, or `composer update` in case you aren't working in a folder which was built before. - -Afterwards you can either run the whole build including linting and coding standards using - - make - -or run only tests using - - make tests diff --git a/vendor/phpstan/phpdoc-parser/composer.json b/vendor/phpstan/phpdoc-parser/composer.json deleted file mode 100644 index f1c648e..0000000 --- a/vendor/phpstan/phpdoc-parser/composer.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "name": "phpstan/phpdoc-parser", - "description": "PHPDoc parser with support for nullable, intersection and generic types", - "license": "MIT", - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", - "symfony/process": "^5.2" - }, - "config": { - "platform": { - "php": "7.4.6" - }, - "sort-packages": true, - "allow-plugins": { - "phpstan/extension-installer": true - } - }, - "autoload": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "src/" - ] - } - }, - "autoload-dev": { - "psr-4": { - "PHPStan\\PhpDocParser\\": [ - "tests/PHPStan" - ] - } - }, - "minimum-stability": "dev", - "prefer-stable": true -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php b/vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php deleted file mode 100644 index 2b9c10e..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/AbstractNodeVisitor.php +++ /dev/null @@ -1,34 +0,0 @@ -key = $key; - $this->value = $value; - } - - - public function __toString(): string - { - if ($this->key !== null) { - return sprintf('%s => %s', $this->key, $this->value); - - } - - return (string) $this->value; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php deleted file mode 100644 index 1f9def3..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprArrayNode.php +++ /dev/null @@ -1,30 +0,0 @@ -items = $items; - } - - - public function __toString(): string - { - return '[' . implode(', ', $this->items) . ']'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php deleted file mode 100644 index e681127..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprFalseNode.php +++ /dev/null @@ -1,17 +0,0 @@ -value = $value; - } - - - public function __toString(): string - { - return $this->value; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php deleted file mode 100644 index 5339bb5..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprIntegerNode.php +++ /dev/null @@ -1,26 +0,0 @@ -value = $value; - } - - - public function __toString(): string - { - return $this->value; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php deleted file mode 100644 index 1859f03..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprNode.php +++ /dev/null @@ -1,10 +0,0 @@ -value = $value; - } - - - public function __toString(): string - { - return $this->value; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php deleted file mode 100644 index ec98032..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/ConstExprTrueNode.php +++ /dev/null @@ -1,17 +0,0 @@ -className = $className; - $this->name = $name; - } - - - public function __toString(): string - { - if ($this->className === '') { - return $this->name; - - } - - return "{$this->className}::{$this->name}"; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php deleted file mode 100644 index a503937..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/DoctrineConstExprStringNode.php +++ /dev/null @@ -1,42 +0,0 @@ -value = $value; - } - - public function __toString(): string - { - return self::escape($this->value); - } - - public static function unescape(string $value): string - { - // from https://github.com/doctrine/annotations/blob/a9ec7af212302a75d1f92fa65d3abfbd16245a2a/lib/Doctrine/Common/Annotations/DocLexer.php#L103-L107 - return str_replace('""', '"', substr($value, 1, strlen($value) - 2)); - } - - private static function escape(string $value): string - { - // from https://github.com/phpstan/phpdoc-parser/issues/205#issuecomment-1662323656 - return sprintf('"%s"', str_replace('"', '""', $value)); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/QuoteAwareConstExprStringNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/QuoteAwareConstExprStringNode.php deleted file mode 100644 index f2792b1..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/ConstExpr/QuoteAwareConstExprStringNode.php +++ /dev/null @@ -1,78 +0,0 @@ -quoteType = $quoteType; - } - - - public function __toString(): string - { - if ($this->quoteType === self::SINGLE_QUOTED) { - // from https://github.com/nikic/PHP-Parser/blob/0ffddce52d816f72d0efc4d9b02e276d3309ef01/lib/PhpParser/PrettyPrinter/Standard.php#L1007 - return sprintf("'%s'", addcslashes($this->value, '\'\\')); - } - - // from https://github.com/nikic/PHP-Parser/blob/0ffddce52d816f72d0efc4d9b02e276d3309ef01/lib/PhpParser/PrettyPrinter/Standard.php#L1010-L1040 - return sprintf('"%s"', $this->escapeDoubleQuotedString()); - } - - private function escapeDoubleQuotedString(): string - { - $quote = '"'; - $escaped = addcslashes($this->value, "\n\r\t\f\v$" . $quote . '\\'); - - // Escape control characters and non-UTF-8 characters. - // Regex based on https://stackoverflow.com/a/11709412/385378. - $regex = '/( - [\x00-\x08\x0E-\x1F] # Control characters - | [\xC0-\xC1] # Invalid UTF-8 Bytes - | [\xF5-\xFF] # Invalid UTF-8 Bytes - | \xE0(?=[\x80-\x9F]) # Overlong encoding of prior code point - | \xF0(?=[\x80-\x8F]) # Overlong encoding of prior code point - | [\xC2-\xDF](?![\x80-\xBF]) # Invalid UTF-8 Sequence Start - | [\xE0-\xEF](?![\x80-\xBF]{2}) # Invalid UTF-8 Sequence Start - | [\xF0-\xF4](?![\x80-\xBF]{3}) # Invalid UTF-8 Sequence Start - | (?<=[\x00-\x7F\xF5-\xFF])[\x80-\xBF] # Invalid UTF-8 Sequence Middle - | (? */ - private $attributes = []; - - /** - * @param mixed $value - */ - public function setAttribute(string $key, $value): void - { - $this->attributes[$key] = $value; - } - - public function hasAttribute(string $key): bool - { - return array_key_exists($key, $this->attributes); - } - - /** - * @return mixed - */ - public function getAttribute(string $key) - { - if ($this->hasAttribute($key)) { - return $this->attributes[$key]; - } - - return null; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php b/vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php deleted file mode 100644 index 63b25c3..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/NodeTraverser.php +++ /dev/null @@ -1,312 +0,0 @@ - Visitors */ - private $visitors = []; - - /** @var bool Whether traversal should be stopped */ - private $stopTraversal; - - /** - * @param list $visitors - */ - public function __construct(array $visitors) - { - $this->visitors = $visitors; - } - - /** - * Traverses an array of nodes using the registered visitors. - * - * @param Node[] $nodes Array of nodes - * - * @return Node[] Traversed array of nodes - */ - public function traverse(array $nodes): array - { - $this->stopTraversal = false; - - foreach ($this->visitors as $visitor) { - $return = $visitor->beforeTraverse($nodes); - if ($return === null) { - continue; - } - - $nodes = $return; - } - - $nodes = $this->traverseArray($nodes); - - foreach ($this->visitors as $visitor) { - $return = $visitor->afterTraverse($nodes); - if ($return === null) { - continue; - } - - $nodes = $return; - } - - return $nodes; - } - - /** - * Recursively traverse a node. - * - * @param Node $node Node to traverse. - * - * @return Node Result of traversal (may be original node or new one) - */ - private function traverseNode(Node $node): Node - { - $subNodeNames = array_keys(get_object_vars($node)); - foreach ($subNodeNames as $name) { - $subNode =& $node->$name; - - if (is_array($subNode)) { - $subNode = $this->traverseArray($subNode); - if ($this->stopTraversal) { - break; - } - } elseif ($subNode instanceof Node) { - $traverseChildren = true; - $breakVisitorIndex = null; - - foreach ($this->visitors as $visitorIndex => $visitor) { - $return = $visitor->enterNode($subNode); - if ($return === null) { - continue; - } - - if ($return instanceof Node) { - $this->ensureReplacementReasonable($subNode, $return); - $subNode = $return; - } elseif ($return === self::DONT_TRAVERSE_CHILDREN) { - $traverseChildren = false; - } elseif ($return === self::DONT_TRAVERSE_CURRENT_AND_CHILDREN) { - $traverseChildren = false; - $breakVisitorIndex = $visitorIndex; - break; - } elseif ($return === self::STOP_TRAVERSAL) { - $this->stopTraversal = true; - break 2; - } else { - throw new LogicException( - 'enterNode() returned invalid value of type ' . gettype($return) - ); - } - } - - if ($traverseChildren) { - $subNode = $this->traverseNode($subNode); - if ($this->stopTraversal) { - break; - } - } - - foreach ($this->visitors as $visitorIndex => $visitor) { - $return = $visitor->leaveNode($subNode); - - if ($return !== null) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($subNode, $return); - $subNode = $return; - } elseif ($return === self::STOP_TRAVERSAL) { - $this->stopTraversal = true; - break 2; - } elseif (is_array($return)) { - throw new LogicException( - 'leaveNode() may only return an array ' . - 'if the parent structure is an array' - ); - } else { - throw new LogicException( - 'leaveNode() returned invalid value of type ' . gettype($return) - ); - } - } - - if ($breakVisitorIndex === $visitorIndex) { - break; - } - } - } - } - - return $node; - } - - /** - * Recursively traverse array (usually of nodes). - * - * @param mixed[] $nodes Array to traverse - * - * @return mixed[] Result of traversal (may be original array or changed one) - */ - private function traverseArray(array $nodes): array - { - $doNodes = []; - - foreach ($nodes as $i => &$node) { - if ($node instanceof Node) { - $traverseChildren = true; - $breakVisitorIndex = null; - - foreach ($this->visitors as $visitorIndex => $visitor) { - $return = $visitor->enterNode($node); - if ($return === null) { - continue; - } - - if ($return instanceof Node) { - $this->ensureReplacementReasonable($node, $return); - $node = $return; - } elseif (is_array($return)) { - $doNodes[] = [$i, $return]; - continue 2; - } elseif ($return === self::REMOVE_NODE) { - $doNodes[] = [$i, []]; - continue 2; - } elseif ($return === self::DONT_TRAVERSE_CHILDREN) { - $traverseChildren = false; - } elseif ($return === self::DONT_TRAVERSE_CURRENT_AND_CHILDREN) { - $traverseChildren = false; - $breakVisitorIndex = $visitorIndex; - break; - } elseif ($return === self::STOP_TRAVERSAL) { - $this->stopTraversal = true; - break 2; - } else { - throw new LogicException( - 'enterNode() returned invalid value of type ' . gettype($return) - ); - } - } - - if ($traverseChildren) { - $node = $this->traverseNode($node); - if ($this->stopTraversal) { - break; - } - } - - foreach ($this->visitors as $visitorIndex => $visitor) { - $return = $visitor->leaveNode($node); - - if ($return !== null) { - if ($return instanceof Node) { - $this->ensureReplacementReasonable($node, $return); - $node = $return; - } elseif (is_array($return)) { - $doNodes[] = [$i, $return]; - break; - } elseif ($return === self::REMOVE_NODE) { - $doNodes[] = [$i, []]; - break; - } elseif ($return === self::STOP_TRAVERSAL) { - $this->stopTraversal = true; - break 2; - } else { - throw new LogicException( - 'leaveNode() returned invalid value of type ' . gettype($return) - ); - } - } - - if ($breakVisitorIndex === $visitorIndex) { - break; - } - } - } elseif (is_array($node)) { - throw new LogicException('Invalid node structure: Contains nested arrays'); - } - } - - if (count($doNodes) > 0) { - while ([$i, $replace] = array_pop($doNodes)) { - array_splice($nodes, $i, 1, $replace); - } - } - - return $nodes; - } - - private function ensureReplacementReasonable(Node $old, Node $new): void - { - if ($old instanceof TypeNode && !$new instanceof TypeNode) { - throw new LogicException(sprintf('Trying to replace TypeNode with %s', get_class($new))); - } - - if ($old instanceof ConstExprNode && !$new instanceof ConstExprNode) { - throw new LogicException(sprintf('Trying to replace ConstExprNode with %s', get_class($new))); - } - - if ($old instanceof PhpDocChildNode && !$new instanceof PhpDocChildNode) { - throw new LogicException(sprintf('Trying to replace PhpDocChildNode with %s', get_class($new))); - } - - if ($old instanceof PhpDocTagValueNode && !$new instanceof PhpDocTagValueNode) { - throw new LogicException(sprintf('Trying to replace PhpDocTagValueNode with %s', get_class($new))); - } - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php b/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php deleted file mode 100644 index bf7d784..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor.php +++ /dev/null @@ -1,87 +0,0 @@ - $node stays as-is - * * array (of Nodes) - * => The return value is merged into the parent array (at the position of the $node) - * * NodeTraverser::REMOVE_NODE - * => $node is removed from the parent array - * * NodeTraverser::DONT_TRAVERSE_CHILDREN - * => Children of $node are not traversed. $node stays as-is - * * NodeTraverser::DONT_TRAVERSE_CURRENT_AND_CHILDREN - * => Further visitors for the current node are skipped, and its children are not - * traversed. $node stays as-is. - * * NodeTraverser::STOP_TRAVERSAL - * => Traversal is aborted. $node stays as-is - * * otherwise - * => $node is set to the return value - * - * @param Node $node Node - * - * @return Node|Node[]|NodeTraverser::*|null Replacement node (or special return value) - */ - public function enterNode(Node $node); - - /** - * Called when leaving a node. - * - * Return value semantics: - * * null - * => $node stays as-is - * * NodeTraverser::REMOVE_NODE - * => $node is removed from the parent array - * * NodeTraverser::STOP_TRAVERSAL - * => Traversal is aborted. $node stays as-is - * * array (of Nodes) - * => The return value is merged into the parent array (at the position of the $node) - * * otherwise - * => $node is set to the return value - * - * @param Node $node Node - * - * @return Node|Node[]|NodeTraverser::REMOVE_NODE|NodeTraverser::STOP_TRAVERSAL|null Replacement node (or special return value) - */ - public function leaveNode(Node $node); - - /** - * Called once after traversal. - * - * Return value semantics: - * * null: $nodes stays as-is - * * otherwise: $nodes is set to the return value - * - * @param Node[] $nodes Array of nodes - * - * @return Node[]|null Array of nodes - */ - public function afterTraverse(array $nodes): ?array; - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php b/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php deleted file mode 100644 index 7200f3a..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/NodeVisitor/CloningVisitor.php +++ /dev/null @@ -1,20 +0,0 @@ -setAttribute(Attribute::ORIGINAL_NODE, $originalNode); - - return $node; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php deleted file mode 100644 index cf4f556..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagMethodValueNode.php +++ /dev/null @@ -1,50 +0,0 @@ -type = $type; - $this->parameter = $parameter; - $this->method = $method; - $this->isNegated = $isNegated; - $this->isEquality = $isEquality; - $this->description = $description; - } - - - public function __toString(): string - { - $isNegated = $this->isNegated ? '!' : ''; - $isEquality = $this->isEquality ? '=' : ''; - return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter}->{$this->method}() {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php deleted file mode 100644 index 4fb3180..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagPropertyValueNode.php +++ /dev/null @@ -1,50 +0,0 @@ -type = $type; - $this->parameter = $parameter; - $this->property = $property; - $this->isNegated = $isNegated; - $this->isEquality = $isEquality; - $this->description = $description; - } - - - public function __toString(): string - { - $isNegated = $this->isNegated ? '!' : ''; - $isEquality = $this->isEquality ? '=' : ''; - return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter}->{$this->property} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php deleted file mode 100644 index d6423f5..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/AssertTagValueNode.php +++ /dev/null @@ -1,46 +0,0 @@ -type = $type; - $this->parameter = $parameter; - $this->isNegated = $isNegated; - $this->isEquality = $isEquality; - $this->description = $description; - } - - - public function __toString(): string - { - $isNegated = $this->isNegated ? '!' : ''; - $isEquality = $this->isEquality ? '=' : ''; - return trim("{$isNegated}{$isEquality}{$this->type} {$this->parameter} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php deleted file mode 100644 index abf2f1a..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/DeprecatedTagValueNode.php +++ /dev/null @@ -1,27 +0,0 @@ -description = $description; - } - - - public function __toString(): string - { - return trim($this->description); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php deleted file mode 100644 index 3a93f5a..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineAnnotation.php +++ /dev/null @@ -1,35 +0,0 @@ - */ - public $arguments; - - /** - * @param list $arguments - */ - public function __construct(string $name, array $arguments) - { - $this->name = $name; - $this->arguments = $arguments; - } - - public function __toString(): string - { - $arguments = implode(', ', $this->arguments); - return $this->name . '(' . $arguments . ')'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php deleted file mode 100644 index f30812c..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArgument.php +++ /dev/null @@ -1,43 +0,0 @@ -key = $key; - $this->value = $value; - } - - - public function __toString(): string - { - if ($this->key === null) { - return (string) $this->value; - } - - return $this->key . '=' . $this->value; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php deleted file mode 100644 index e740567..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArray.php +++ /dev/null @@ -1,32 +0,0 @@ - */ - public $items; - - /** - * @param list $items - */ - public function __construct(array $items) - { - $this->items = $items; - } - - public function __toString(): string - { - $items = implode(', ', $this->items); - - return '{' . $items . '}'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php deleted file mode 100644 index d2dbf2b..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineArrayItem.php +++ /dev/null @@ -1,47 +0,0 @@ -key = $key; - $this->value = $value; - } - - - public function __toString(): string - { - if ($this->key === null) { - return (string) $this->value; - } - - return $this->key . '=' . $this->value; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php deleted file mode 100644 index 84f7b18..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/Doctrine/DoctrineTagValueNode.php +++ /dev/null @@ -1,36 +0,0 @@ -annotation = $annotation; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->annotation} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php deleted file mode 100644 index 3bf53e1..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ExtendsTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php deleted file mode 100644 index 026aa15..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/GenericTagValueNode.php +++ /dev/null @@ -1,26 +0,0 @@ -value = $value; - } - - - public function __toString(): string - { - return $this->value; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php deleted file mode 100644 index 99043d9..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ImplementsTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php deleted file mode 100644 index ca7b4f2..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/InvalidTagValueNode.php +++ /dev/null @@ -1,53 +0,0 @@ -value = $value; - $this->exceptionArgs = [ - $exception->getCurrentTokenValue(), - $exception->getCurrentTokenType(), - $exception->getCurrentOffset(), - $exception->getExpectedTokenType(), - $exception->getExpectedTokenValue(), - $exception->getCurrentTokenLine(), - ]; - } - - public function __get(string $name): ?ParserException - { - if ($name !== 'exception') { - trigger_error(sprintf('Undefined property: %s::$%s', self::class, $name), E_USER_WARNING); - return null; - } - - return new ParserException(...$this->exceptionArgs); - } - - public function __toString(): string - { - return $this->value; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php deleted file mode 100644 index 211510b..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueNode.php +++ /dev/null @@ -1,58 +0,0 @@ -isStatic = $isStatic; - $this->returnType = $returnType; - $this->methodName = $methodName; - $this->parameters = $parameters; - $this->description = $description; - $this->templateTypes = $templateTypes; - } - - - public function __toString(): string - { - $static = $this->isStatic ? 'static ' : ''; - $returnType = $this->returnType !== null ? "{$this->returnType} " : ''; - $parameters = implode(', ', $this->parameters); - $description = $this->description !== '' ? " {$this->description}" : ''; - $templateTypes = count($this->templateTypes) > 0 ? '<' . implode(', ', $this->templateTypes) . '>' : ''; - return "{$static}{$returnType}{$this->methodName}{$templateTypes}({$parameters}){$description}"; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php deleted file mode 100644 index 7c17e44..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MethodTagValueParameterNode.php +++ /dev/null @@ -1,49 +0,0 @@ -type = $type; - $this->isReference = $isReference; - $this->isVariadic = $isVariadic; - $this->parameterName = $parameterName; - $this->defaultValue = $defaultValue; - } - - - public function __toString(): string - { - $type = $this->type !== null ? "{$this->type} " : ''; - $isReference = $this->isReference ? '&' : ''; - $isVariadic = $this->isVariadic ? '...' : ''; - $default = $this->defaultValue !== null ? " = {$this->defaultValue}" : ''; - return "{$type}{$isReference}{$isVariadic}{$this->parameterName}{$default}"; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php deleted file mode 100644 index d9b7d78..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/MixinTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php deleted file mode 100644 index 0ac2131..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamClosureThisTagValueNode.php +++ /dev/null @@ -1,35 +0,0 @@ -type = $type; - $this->parameterName = $parameterName; - $this->description = $description; - } - - public function __toString(): string - { - return trim("{$this->type} {$this->parameterName} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php deleted file mode 100644 index 0f480f7..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamImmediatelyInvokedCallableTagValueNode.php +++ /dev/null @@ -1,30 +0,0 @@ -parameterName = $parameterName; - $this->description = $description; - } - - public function __toString(): string - { - return trim("{$this->parameterName} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php deleted file mode 100644 index eab353f..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamLaterInvokedCallableTagValueNode.php +++ /dev/null @@ -1,30 +0,0 @@ -parameterName = $parameterName; - $this->description = $description; - } - - public function __toString(): string - { - return trim("{$this->parameterName} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php deleted file mode 100644 index 9f374bf..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamOutTagValueNode.php +++ /dev/null @@ -1,35 +0,0 @@ -type = $type; - $this->parameterName = $parameterName; - $this->description = $description; - } - - public function __toString(): string - { - return trim("{$this->type} {$this->parameterName} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php deleted file mode 100644 index f93af0e..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ParamTagValueNode.php +++ /dev/null @@ -1,46 +0,0 @@ -type = $type; - $this->isReference = $isReference; - $this->isVariadic = $isVariadic; - $this->parameterName = $parameterName; - $this->description = $description; - } - - - public function __toString(): string - { - $reference = $this->isReference ? '&' : ''; - $variadic = $this->isVariadic ? '...' : ''; - return trim("{$this->type} {$reference}{$variadic}{$this->parameterName} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php deleted file mode 100644 index 6162f92..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocChildNode.php +++ /dev/null @@ -1,10 +0,0 @@ -children = $children; - } - - - /** - * @return PhpDocTagNode[] - */ - public function getTags(): array - { - return array_filter($this->children, static function (PhpDocChildNode $child): bool { - return $child instanceof PhpDocTagNode; - }); - } - - - /** - * @return PhpDocTagNode[] - */ - public function getTagsByName(string $tagName): array - { - return array_filter($this->getTags(), static function (PhpDocTagNode $tag) use ($tagName): bool { - return $tag->name === $tagName; - }); - } - - - /** - * @return VarTagValueNode[] - */ - public function getVarTagValues(string $tagName = '@var'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof VarTagValueNode; - } - ); - } - - - /** - * @return ParamTagValueNode[] - */ - public function getParamTagValues(string $tagName = '@param'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ParamTagValueNode; - } - ); - } - - - /** - * @return TypelessParamTagValueNode[] - */ - public function getTypelessParamTagValues(string $tagName = '@param'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof TypelessParamTagValueNode; - } - ); - } - - - /** - * @return ParamImmediatelyInvokedCallableTagValueNode[] - */ - public function getParamImmediatelyInvokedCallableTagValues(string $tagName = '@param-immediately-invoked-callable'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ParamImmediatelyInvokedCallableTagValueNode; - } - ); - } - - - /** - * @return ParamLaterInvokedCallableTagValueNode[] - */ - public function getParamLaterInvokedCallableTagValues(string $tagName = '@param-later-invoked-callable'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ParamLaterInvokedCallableTagValueNode; - } - ); - } - - - /** - * @return ParamClosureThisTagValueNode[] - */ - public function getParamClosureThisTagValues(string $tagName = '@param-closure-this'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ParamClosureThisTagValueNode; - } - ); - } - - /** - * @return PureUnlessCallableIsImpureTagValueNode[] - */ - public function getPureUnlessCallableIsImpureTagValues(string $tagName = '@pure-unless-callable-is-impure'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof PureUnlessCallableIsImpureTagValueNode; - } - ); - } - - /** - * @return TemplateTagValueNode[] - */ - public function getTemplateTagValues(string $tagName = '@template'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof TemplateTagValueNode; - } - ); - } - - - /** - * @return ExtendsTagValueNode[] - */ - public function getExtendsTagValues(string $tagName = '@extends'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ExtendsTagValueNode; - } - ); - } - - - /** - * @return ImplementsTagValueNode[] - */ - public function getImplementsTagValues(string $tagName = '@implements'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ImplementsTagValueNode; - } - ); - } - - - /** - * @return UsesTagValueNode[] - */ - public function getUsesTagValues(string $tagName = '@use'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof UsesTagValueNode; - } - ); - } - - - /** - * @return ReturnTagValueNode[] - */ - public function getReturnTagValues(string $tagName = '@return'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ReturnTagValueNode; - } - ); - } - - - /** - * @return ThrowsTagValueNode[] - */ - public function getThrowsTagValues(string $tagName = '@throws'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ThrowsTagValueNode; - } - ); - } - - - /** - * @return MixinTagValueNode[] - */ - public function getMixinTagValues(string $tagName = '@mixin'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof MixinTagValueNode; - } - ); - } - - /** - * @return RequireExtendsTagValueNode[] - */ - public function getRequireExtendsTagValues(string $tagName = '@phpstan-require-extends'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof RequireExtendsTagValueNode; - } - ); - } - - /** - * @return RequireImplementsTagValueNode[] - */ - public function getRequireImplementsTagValues(string $tagName = '@phpstan-require-implements'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof RequireImplementsTagValueNode; - } - ); - } - - /** - * @return DeprecatedTagValueNode[] - */ - public function getDeprecatedTagValues(): array - { - return array_filter( - array_column($this->getTagsByName('@deprecated'), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof DeprecatedTagValueNode; - } - ); - } - - - /** - * @return PropertyTagValueNode[] - */ - public function getPropertyTagValues(string $tagName = '@property'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof PropertyTagValueNode; - } - ); - } - - - /** - * @return PropertyTagValueNode[] - */ - public function getPropertyReadTagValues(string $tagName = '@property-read'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof PropertyTagValueNode; - } - ); - } - - - /** - * @return PropertyTagValueNode[] - */ - public function getPropertyWriteTagValues(string $tagName = '@property-write'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof PropertyTagValueNode; - } - ); - } - - - /** - * @return MethodTagValueNode[] - */ - public function getMethodTagValues(string $tagName = '@method'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof MethodTagValueNode; - } - ); - } - - - /** - * @return TypeAliasTagValueNode[] - */ - public function getTypeAliasTagValues(string $tagName = '@phpstan-type'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof TypeAliasTagValueNode; - } - ); - } - - - /** - * @return TypeAliasImportTagValueNode[] - */ - public function getTypeAliasImportTagValues(string $tagName = '@phpstan-import-type'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof TypeAliasImportTagValueNode; - } - ); - } - - - /** - * @return AssertTagValueNode[] - */ - public function getAssertTagValues(string $tagName = '@phpstan-assert'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof AssertTagValueNode; - } - ); - } - - - /** - * @return AssertTagPropertyValueNode[] - */ - public function getAssertPropertyTagValues(string $tagName = '@phpstan-assert'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof AssertTagPropertyValueNode; - } - ); - } - - - /** - * @return AssertTagMethodValueNode[] - */ - public function getAssertMethodTagValues(string $tagName = '@phpstan-assert'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof AssertTagMethodValueNode; - } - ); - } - - - /** - * @return SelfOutTagValueNode[] - */ - public function getSelfOutTypeTagValues(string $tagName = '@phpstan-this-out'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof SelfOutTagValueNode; - } - ); - } - - - /** - * @return ParamOutTagValueNode[] - */ - public function getParamOutTypeTagValues(string $tagName = '@param-out'): array - { - return array_filter( - array_column($this->getTagsByName($tagName), 'value'), - static function (PhpDocTagValueNode $value): bool { - return $value instanceof ParamOutTagValueNode; - } - ); - } - - - public function __toString(): string - { - $children = array_map( - static function (PhpDocChildNode $child): string { - $s = (string) $child; - return $s === '' ? '' : ' ' . $s; - }, - $this->children - ); - return "/**\n *" . implode("\n *", $children) . "\n */"; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php deleted file mode 100644 index d20746f..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagNode.php +++ /dev/null @@ -1,36 +0,0 @@ -name = $name; - $this->value = $value; - } - - - public function __toString(): string - { - if ($this->value instanceof DoctrineTagValueNode) { - return (string) $this->value; - } - - return trim("{$this->name} {$this->value}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php deleted file mode 100644 index 7723fa0..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PhpDocTagValueNode.php +++ /dev/null @@ -1,10 +0,0 @@ -text = $text; - } - - - public function __toString(): string - { - return $this->text; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php deleted file mode 100644 index 046003d..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PropertyTagValueNode.php +++ /dev/null @@ -1,36 +0,0 @@ -type = $type; - $this->propertyName = $propertyName; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->propertyName} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php deleted file mode 100644 index 4cf0937..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/PureUnlessCallableIsImpureTagValueNode.php +++ /dev/null @@ -1,30 +0,0 @@ -parameterName = $parameterName; - $this->description = $description; - } - - public function __toString(): string - { - return trim("{$this->parameterName} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php deleted file mode 100644 index 91c2689..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireExtendsTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php deleted file mode 100644 index 65c9213..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/RequireImplementsTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php deleted file mode 100644 index d53c8c7..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ReturnTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php deleted file mode 100644 index 83169af..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/SelfOutTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim($this->type . ' ' . $this->description); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php deleted file mode 100644 index 8bc01f6..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TemplateTagValueNode.php +++ /dev/null @@ -1,50 +0,0 @@ -name = $name; - $this->bound = $bound; - $this->lowerBound = $lowerBound; - $this->default = $default; - $this->description = $description; - } - - - public function __toString(): string - { - $upperBound = $this->bound !== null ? " of {$this->bound}" : ''; - $lowerBound = $this->lowerBound !== null ? " super {$this->lowerBound}" : ''; - $default = $this->default !== null ? " = {$this->default}" : ''; - return trim("{$this->name}{$upperBound}{$lowerBound}{$default} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php deleted file mode 100644 index 62d2aed..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/ThrowsTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php deleted file mode 100644 index ad6b85a..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasImportTagValueNode.php +++ /dev/null @@ -1,38 +0,0 @@ -importedAlias = $importedAlias; - $this->importedFrom = $importedFrom; - $this->importedAs = $importedAs; - } - - public function __toString(): string - { - return trim( - "{$this->importedAlias} from {$this->importedFrom}" - . ($this->importedAs !== null ? " as {$this->importedAs}" : '') - ); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php deleted file mode 100644 index 4ccaaac..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypeAliasTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -alias = $alias; - $this->type = $type; - } - - - public function __toString(): string - { - return trim("{$this->alias} {$this->type}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php deleted file mode 100644 index 8b98295..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/TypelessParamTagValueNode.php +++ /dev/null @@ -1,41 +0,0 @@ -isReference = $isReference; - $this->isVariadic = $isVariadic; - $this->parameterName = $parameterName; - $this->description = $description; - } - - - public function __toString(): string - { - $reference = $this->isReference ? '&' : ''; - $variadic = $this->isVariadic ? '...' : ''; - return trim("{$reference}{$variadic}{$this->parameterName} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php deleted file mode 100644 index cd573d9..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/UsesTagValueNode.php +++ /dev/null @@ -1,32 +0,0 @@ -type = $type; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("{$this->type} {$this->description}"); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php deleted file mode 100644 index afb941a..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/PhpDoc/VarTagValueNode.php +++ /dev/null @@ -1,36 +0,0 @@ -type = $type; - $this->variableName = $variableName; - $this->description = $description; - } - - - public function __toString(): string - { - return trim("$this->type " . trim("{$this->variableName} {$this->description}")); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php deleted file mode 100644 index 660c6c9..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeItemNode.php +++ /dev/null @@ -1,49 +0,0 @@ -keyName = $keyName; - $this->optional = $optional; - $this->valueType = $valueType; - } - - - public function __toString(): string - { - if ($this->keyName !== null) { - return sprintf( - '%s%s: %s', - (string) $this->keyName, - $this->optional ? '?' : '', - (string) $this->valueType - ); - } - - return (string) $this->valueType; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php deleted file mode 100644 index 1f4ed4a..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeNode.php +++ /dev/null @@ -1,57 +0,0 @@ -items = $items; - $this->sealed = $sealed; - $this->kind = $kind; - $this->unsealedType = $unsealedType; - } - - - public function __toString(): string - { - $items = $this->items; - - if (! $this->sealed) { - $items[] = '...' . $this->unsealedType; - } - - return $this->kind . '{' . implode(', ', $items) . '}'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php deleted file mode 100644 index 7ffdf1d..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayShapeUnsealedTypeNode.php +++ /dev/null @@ -1,34 +0,0 @@ -valueType = $valueType; - $this->keyType = $keyType; - } - - public function __toString(): string - { - if ($this->keyType !== null) { - return sprintf('<%s, %s>', $this->keyType, $this->valueType); - } - return sprintf('<%s>', $this->valueType); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php deleted file mode 100644 index d203103..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ArrayTypeNode.php +++ /dev/null @@ -1,34 +0,0 @@ -type = $type; - } - - - public function __toString(): string - { - if ( - $this->type instanceof CallableTypeNode - || $this->type instanceof ConstTypeNode - || $this->type instanceof NullableTypeNode - ) { - return '(' . $this->type . ')[]'; - } - - return $this->type . '[]'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php deleted file mode 100644 index 4c91319..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeNode.php +++ /dev/null @@ -1,52 +0,0 @@ -identifier = $identifier; - $this->parameters = $parameters; - $this->returnType = $returnType; - $this->templateTypes = $templateTypes; - } - - - public function __toString(): string - { - $returnType = $this->returnType; - if ($returnType instanceof self) { - $returnType = "({$returnType})"; - } - $template = $this->templateTypes !== [] - ? '<' . implode(', ', $this->templateTypes) . '>' - : ''; - $parameters = implode(', ', $this->parameters); - return "{$this->identifier}{$template}({$parameters}): {$returnType}"; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php deleted file mode 100644 index c78d4c7..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/CallableTypeParameterNode.php +++ /dev/null @@ -1,48 +0,0 @@ -type = $type; - $this->isReference = $isReference; - $this->isVariadic = $isVariadic; - $this->parameterName = $parameterName; - $this->isOptional = $isOptional; - } - - - public function __toString(): string - { - $type = "{$this->type} "; - $isReference = $this->isReference ? '&' : ''; - $isVariadic = $this->isVariadic ? '...' : ''; - $isOptional = $this->isOptional ? '=' : ''; - return trim("{$type}{$isReference}{$isVariadic}{$this->parameterName}") . $isOptional; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php deleted file mode 100644 index fbfcae9..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeForParameterNode.php +++ /dev/null @@ -1,49 +0,0 @@ -parameterName = $parameterName; - $this->targetType = $targetType; - $this->if = $if; - $this->else = $else; - $this->negated = $negated; - } - - public function __toString(): string - { - return sprintf( - '(%s %s %s ? %s : %s)', - $this->parameterName, - $this->negated ? 'is not' : 'is', - $this->targetType, - $this->if, - $this->else - ); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php deleted file mode 100644 index bfdb0db..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConditionalTypeNode.php +++ /dev/null @@ -1,49 +0,0 @@ -subjectType = $subjectType; - $this->targetType = $targetType; - $this->if = $if; - $this->else = $else; - $this->negated = $negated; - } - - public function __toString(): string - { - return sprintf( - '(%s %s %s ? %s : %s)', - $this->subjectType, - $this->negated ? 'is not' : 'is', - $this->targetType, - $this->if, - $this->else - ); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php deleted file mode 100644 index 0096055..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ConstTypeNode.php +++ /dev/null @@ -1,26 +0,0 @@ -constExpr = $constExpr; - } - - public function __toString(): string - { - return $this->constExpr->__toString(); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php deleted file mode 100644 index 44e1d16..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/GenericTypeNode.php +++ /dev/null @@ -1,58 +0,0 @@ -type = $type; - $this->genericTypes = $genericTypes; - $this->variances = $variances; - } - - - public function __toString(): string - { - $genericTypes = []; - - foreach ($this->genericTypes as $index => $type) { - $variance = $this->variances[$index] ?? self::VARIANCE_INVARIANT; - if ($variance === self::VARIANCE_INVARIANT) { - $genericTypes[] = (string) $type; - } elseif ($variance === self::VARIANCE_BIVARIANT) { - $genericTypes[] = '*'; - } else { - $genericTypes[] = sprintf('%s %s', $variance, $type); - } - } - - return $this->type . '<' . implode(', ', $genericTypes) . '>'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php deleted file mode 100644 index 29bac30..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/IdentifierTypeNode.php +++ /dev/null @@ -1,26 +0,0 @@ -name = $name; - } - - - public function __toString(): string - { - return $this->name; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php deleted file mode 100644 index fd761cf..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/IntersectionTypeNode.php +++ /dev/null @@ -1,37 +0,0 @@ -types = $types; - } - - - public function __toString(): string - { - return '(' . implode(' & ', array_map(static function (TypeNode $type): string { - if ($type instanceof NullableTypeNode) { - return '(' . $type . ')'; - } - - return (string) $type; - }, $this->types)) . ')'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php deleted file mode 100644 index 1ec47cf..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/InvalidTypeNode.php +++ /dev/null @@ -1,38 +0,0 @@ -exceptionArgs = [ - $exception->getCurrentTokenValue(), - $exception->getCurrentTokenType(), - $exception->getCurrentOffset(), - $exception->getExpectedTokenType(), - $exception->getExpectedTokenValue(), - $exception->getCurrentTokenLine(), - ]; - } - - public function getException(): ParserException - { - return new ParserException(...$this->exceptionArgs); - } - - public function __toString(): string - { - return '*Invalid type*'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php deleted file mode 100644 index 73f438c..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/NullableTypeNode.php +++ /dev/null @@ -1,26 +0,0 @@ -type = $type; - } - - - public function __toString(): string - { - return '?' . $this->type; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php deleted file mode 100644 index 2f01240..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeItemNode.php +++ /dev/null @@ -1,48 +0,0 @@ -keyName = $keyName; - $this->optional = $optional; - $this->valueType = $valueType; - } - - - public function __toString(): string - { - if ($this->keyName !== null) { - return sprintf( - '%s%s: %s', - (string) $this->keyName, - $this->optional ? '?' : '', - (string) $this->valueType - ); - } - - return (string) $this->valueType; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php deleted file mode 100644 index f418bc3..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ObjectShapeNode.php +++ /dev/null @@ -1,31 +0,0 @@ -items = $items; - } - - public function __toString(): string - { - $items = $this->items; - - return 'object{' . implode(', ', $items) . '}'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php deleted file mode 100644 index c27ec0a..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/OffsetAccessTypeNode.php +++ /dev/null @@ -1,36 +0,0 @@ -type = $type; - $this->offset = $offset; - } - - public function __toString(): string - { - if ( - $this->type instanceof CallableTypeNode - || $this->type instanceof NullableTypeNode - ) { - return '(' . $this->type . ')[' . $this->offset . ']'; - } - - return $this->type . '[' . $this->offset . ']'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php b/vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php deleted file mode 100644 index d94e6f8..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Ast/Type/ThisTypeNode.php +++ /dev/null @@ -1,17 +0,0 @@ -types = $types; - } - - - public function __toString(): string - { - return '(' . implode(' | ', array_map(static function (TypeNode $type): string { - if ($type instanceof NullableTypeNode) { - return '(' . $type . ')'; - } - - return (string) $type; - }, $this->types)) . ')'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php b/vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php deleted file mode 100644 index 32539fa..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Lexer/Lexer.php +++ /dev/null @@ -1,198 +0,0 @@ - '\'&\'', - self::TOKEN_UNION => '\'|\'', - self::TOKEN_INTERSECTION => '\'&\'', - self::TOKEN_NULLABLE => '\'?\'', - self::TOKEN_NEGATED => '\'!\'', - self::TOKEN_OPEN_PARENTHESES => '\'(\'', - self::TOKEN_CLOSE_PARENTHESES => '\')\'', - self::TOKEN_OPEN_ANGLE_BRACKET => '\'<\'', - self::TOKEN_CLOSE_ANGLE_BRACKET => '\'>\'', - self::TOKEN_OPEN_SQUARE_BRACKET => '\'[\'', - self::TOKEN_CLOSE_SQUARE_BRACKET => '\']\'', - self::TOKEN_OPEN_CURLY_BRACKET => '\'{\'', - self::TOKEN_CLOSE_CURLY_BRACKET => '\'}\'', - self::TOKEN_COMMA => '\',\'', - self::TOKEN_COLON => '\':\'', - self::TOKEN_VARIADIC => '\'...\'', - self::TOKEN_DOUBLE_COLON => '\'::\'', - self::TOKEN_DOUBLE_ARROW => '\'=>\'', - self::TOKEN_ARROW => '\'->\'', - self::TOKEN_EQUAL => '\'=\'', - self::TOKEN_OPEN_PHPDOC => '\'/**\'', - self::TOKEN_CLOSE_PHPDOC => '\'*/\'', - self::TOKEN_PHPDOC_TAG => 'TOKEN_PHPDOC_TAG', - self::TOKEN_DOCTRINE_TAG => 'TOKEN_DOCTRINE_TAG', - self::TOKEN_PHPDOC_EOL => 'TOKEN_PHPDOC_EOL', - self::TOKEN_FLOAT => 'TOKEN_FLOAT', - self::TOKEN_INTEGER => 'TOKEN_INTEGER', - self::TOKEN_SINGLE_QUOTED_STRING => 'TOKEN_SINGLE_QUOTED_STRING', - self::TOKEN_DOUBLE_QUOTED_STRING => 'TOKEN_DOUBLE_QUOTED_STRING', - self::TOKEN_DOCTRINE_ANNOTATION_STRING => 'TOKEN_DOCTRINE_ANNOTATION_STRING', - self::TOKEN_IDENTIFIER => 'type', - self::TOKEN_THIS_VARIABLE => '\'$this\'', - self::TOKEN_VARIABLE => 'variable', - self::TOKEN_HORIZONTAL_WS => 'TOKEN_HORIZONTAL_WS', - self::TOKEN_OTHER => 'TOKEN_OTHER', - self::TOKEN_END => 'TOKEN_END', - self::TOKEN_WILDCARD => '*', - ]; - - public const VALUE_OFFSET = 0; - public const TYPE_OFFSET = 1; - public const LINE_OFFSET = 2; - - /** @var bool */ - private $parseDoctrineAnnotations; - - /** @var string|null */ - private $regexp; - - public function __construct(bool $parseDoctrineAnnotations = false) - { - $this->parseDoctrineAnnotations = $parseDoctrineAnnotations; - } - - /** - * @return list - */ - public function tokenize(string $s): array - { - if ($this->regexp === null) { - $this->regexp = $this->generateRegexp(); - } - - preg_match_all($this->regexp, $s, $matches, PREG_SET_ORDER); - - $tokens = []; - $line = 1; - foreach ($matches as $match) { - $type = (int) $match['MARK']; - $tokens[] = [$match[0], $type, $line]; - if ($type !== self::TOKEN_PHPDOC_EOL) { - continue; - } - - $line++; - } - - $tokens[] = ['', self::TOKEN_END, $line]; - - return $tokens; - } - - - private function generateRegexp(): string - { - $patterns = [ - self::TOKEN_HORIZONTAL_WS => '[\\x09\\x20]++', - - self::TOKEN_IDENTIFIER => '(?:[\\\\]?+[a-z_\\x80-\\xFF][0-9a-z_\\x80-\\xFF-]*+)++', - self::TOKEN_THIS_VARIABLE => '\\$this(?![0-9a-z_\\x80-\\xFF])', - self::TOKEN_VARIABLE => '\\$[a-z_\\x80-\\xFF][0-9a-z_\\x80-\\xFF]*+', - - // '&' followed by TOKEN_VARIADIC, TOKEN_VARIABLE, TOKEN_EQUAL, TOKEN_EQUAL or TOKEN_CLOSE_PARENTHESES - self::TOKEN_REFERENCE => '&(?=\\s*+(?:[.,=)]|(?:\\$(?!this(?![0-9a-z_\\x80-\\xFF])))))', - self::TOKEN_UNION => '\\|', - self::TOKEN_INTERSECTION => '&', - self::TOKEN_NULLABLE => '\\?', - self::TOKEN_NEGATED => '!', - - self::TOKEN_OPEN_PARENTHESES => '\\(', - self::TOKEN_CLOSE_PARENTHESES => '\\)', - self::TOKEN_OPEN_ANGLE_BRACKET => '<', - self::TOKEN_CLOSE_ANGLE_BRACKET => '>', - self::TOKEN_OPEN_SQUARE_BRACKET => '\\[', - self::TOKEN_CLOSE_SQUARE_BRACKET => '\\]', - self::TOKEN_OPEN_CURLY_BRACKET => '\\{', - self::TOKEN_CLOSE_CURLY_BRACKET => '\\}', - - self::TOKEN_COMMA => ',', - self::TOKEN_VARIADIC => '\\.\\.\\.', - self::TOKEN_DOUBLE_COLON => '::', - self::TOKEN_DOUBLE_ARROW => '=>', - self::TOKEN_ARROW => '->', - self::TOKEN_EQUAL => '=', - self::TOKEN_COLON => ':', - - self::TOKEN_OPEN_PHPDOC => '/\\*\\*(?=\\s)\\x20?+', - self::TOKEN_CLOSE_PHPDOC => '\\*/', - self::TOKEN_PHPDOC_TAG => '@(?:[a-z][a-z0-9-\\\\]+:)?[a-z][a-z0-9-\\\\]*+', - self::TOKEN_PHPDOC_EOL => '\\r?+\\n[\\x09\\x20]*+(?:\\*(?!/)\\x20?+)?', - - self::TOKEN_FLOAT => '[+\-]?(?:(?:[0-9]++(_[0-9]++)*\\.[0-9]*+(_[0-9]++)*(?:e[+\-]?[0-9]++(_[0-9]++)*)?)|(?:[0-9]*+(_[0-9]++)*\\.[0-9]++(_[0-9]++)*(?:e[+\-]?[0-9]++(_[0-9]++)*)?)|(?:[0-9]++(_[0-9]++)*e[+\-]?[0-9]++(_[0-9]++)*))', - self::TOKEN_INTEGER => '[+\-]?(?:(?:0b[0-1]++(_[0-1]++)*)|(?:0o[0-7]++(_[0-7]++)*)|(?:0x[0-9a-f]++(_[0-9a-f]++)*)|(?:[0-9]++(_[0-9]++)*))', - self::TOKEN_SINGLE_QUOTED_STRING => '\'(?:\\\\[^\\r\\n]|[^\'\\r\\n\\\\])*+\'', - self::TOKEN_DOUBLE_QUOTED_STRING => '"(?:\\\\[^\\r\\n]|[^"\\r\\n\\\\])*+"', - - self::TOKEN_WILDCARD => '\\*', - ]; - - if ($this->parseDoctrineAnnotations) { - $patterns[self::TOKEN_DOCTRINE_TAG] = '@[a-z_\\\\][a-z0-9_\:\\\\]*[a-z_][a-z0-9_]*'; - $patterns[self::TOKEN_DOCTRINE_ANNOTATION_STRING] = '"(?:""|[^"])*+"'; - } - - // anything but TOKEN_CLOSE_PHPDOC or TOKEN_HORIZONTAL_WS or TOKEN_EOL - $patterns[self::TOKEN_OTHER] = '(?:(?!\\*/)[^\\s])++'; - - foreach ($patterns as $type => &$pattern) { - $pattern = '(?:' . $pattern . ')(*MARK:' . $type . ')'; - } - - return '~' . implode('|', $patterns) . '~Asi'; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php b/vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php deleted file mode 100644 index f6a7306..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Parser/ConstExprParser.php +++ /dev/null @@ -1,333 +0,0 @@ -unescapeStrings = $unescapeStrings; - $this->quoteAwareConstExprString = $quoteAwareConstExprString; - $this->useLinesAttributes = $usedAttributes['lines'] ?? false; - $this->useIndexAttributes = $usedAttributes['indexes'] ?? false; - $this->parseDoctrineStrings = false; - } - - /** - * @internal - */ - public function toDoctrine(): self - { - $self = new self( - $this->unescapeStrings, - $this->quoteAwareConstExprString, - [ - 'lines' => $this->useLinesAttributes, - 'indexes' => $this->useIndexAttributes, - ] - ); - $self->parseDoctrineStrings = true; - return $self; - } - - public function parse(TokenIterator $tokens, bool $trimStrings = false): Ast\ConstExpr\ConstExprNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_FLOAT)) { - $value = $tokens->currentTokenValue(); - $tokens->next(); - - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstExprFloatNode(str_replace('_', '', $value)), - $startLine, - $startIndex - ); - } - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) { - $value = $tokens->currentTokenValue(); - $tokens->next(); - - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $value)), - $startLine, - $startIndex - ); - } - - if ($this->parseDoctrineStrings && $tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) { - $value = $tokens->currentTokenValue(); - $tokens->next(); - - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\DoctrineConstExprStringNode(Ast\ConstExpr\DoctrineConstExprStringNode::unescape($value)), - $startLine, - $startIndex - ); - } - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING, Lexer::TOKEN_DOUBLE_QUOTED_STRING)) { - if ($this->parseDoctrineStrings) { - if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) { - throw new ParserException( - $tokens->currentTokenValue(), - $tokens->currentTokenType(), - $tokens->currentTokenOffset(), - Lexer::TOKEN_DOUBLE_QUOTED_STRING, - null, - $tokens->currentTokenLine() - ); - } - - $value = $tokens->currentTokenValue(); - $tokens->next(); - - return $this->enrichWithAttributes( - $tokens, - $this->parseDoctrineString($value, $tokens), - $startLine, - $startIndex - ); - } - $value = $tokens->currentTokenValue(); - $type = $tokens->currentTokenType(); - if ($trimStrings) { - if ($this->unescapeStrings) { - $value = StringUnescaper::unescapeString($value); - } else { - $value = substr($value, 1, -1); - } - } - $tokens->next(); - - if ($this->quoteAwareConstExprString) { - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\QuoteAwareConstExprStringNode( - $value, - $type === Lexer::TOKEN_SINGLE_QUOTED_STRING - ? Ast\ConstExpr\QuoteAwareConstExprStringNode::SINGLE_QUOTED - : Ast\ConstExpr\QuoteAwareConstExprStringNode::DOUBLE_QUOTED - ), - $startLine, - $startIndex - ); - } - - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstExprStringNode($value), - $startLine, - $startIndex - ); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) { - $identifier = $tokens->currentTokenValue(); - $tokens->next(); - - switch (strtolower($identifier)) { - case 'true': - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstExprTrueNode(), - $startLine, - $startIndex - ); - case 'false': - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstExprFalseNode(), - $startLine, - $startIndex - ); - case 'null': - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstExprNullNode(), - $startLine, - $startIndex - ); - case 'array': - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES); - return $this->parseArray($tokens, Lexer::TOKEN_CLOSE_PARENTHESES, $startIndex); - } - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_DOUBLE_COLON)) { - $classConstantName = ''; - $lastType = null; - while (true) { - if ($lastType !== Lexer::TOKEN_IDENTIFIER && $tokens->currentTokenType() === Lexer::TOKEN_IDENTIFIER) { - $classConstantName .= $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - $lastType = Lexer::TOKEN_IDENTIFIER; - - continue; - } - - if ($lastType !== Lexer::TOKEN_WILDCARD && $tokens->tryConsumeTokenType(Lexer::TOKEN_WILDCARD)) { - $classConstantName .= '*'; - $lastType = Lexer::TOKEN_WILDCARD; - - if ($tokens->getSkippedHorizontalWhiteSpaceIfAny() !== '') { - break; - } - - continue; - } - - if ($lastType === null) { - // trigger parse error if nothing valid was consumed - $tokens->consumeTokenType(Lexer::TOKEN_WILDCARD); - } - - break; - } - - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstFetchNode($identifier, $classConstantName), - $startLine, - $startIndex - ); - - } - - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstFetchNode('', $identifier), - $startLine, - $startIndex - ); - - } elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - return $this->parseArray($tokens, Lexer::TOKEN_CLOSE_SQUARE_BRACKET, $startIndex); - } - - throw new ParserException( - $tokens->currentTokenValue(), - $tokens->currentTokenType(), - $tokens->currentTokenOffset(), - Lexer::TOKEN_IDENTIFIER, - null, - $tokens->currentTokenLine() - ); - } - - - private function parseArray(TokenIterator $tokens, int $endToken, int $startIndex): Ast\ConstExpr\ConstExprArrayNode - { - $items = []; - - $startLine = $tokens->currentTokenLine(); - - if (!$tokens->tryConsumeTokenType($endToken)) { - do { - $items[] = $this->parseArrayItem($tokens); - } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA) && !$tokens->isCurrentTokenType($endToken)); - $tokens->consumeTokenType($endToken); - } - - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstExprArrayNode($items), - $startLine, - $startIndex - ); - } - - - /** - * This method is supposed to be called with TokenIterator after reading TOKEN_DOUBLE_QUOTED_STRING and shifting - * to the next token. - */ - public function parseDoctrineString(string $text, TokenIterator $tokens): Ast\ConstExpr\DoctrineConstExprStringNode - { - // Because of how Lexer works, a valid Doctrine string - // can consist of a sequence of TOKEN_DOUBLE_QUOTED_STRING and TOKEN_DOCTRINE_ANNOTATION_STRING - while ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING, Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) { - $text .= $tokens->currentTokenValue(); - $tokens->next(); - } - - return new Ast\ConstExpr\DoctrineConstExprStringNode(Ast\ConstExpr\DoctrineConstExprStringNode::unescape($text)); - } - - - private function parseArrayItem(TokenIterator $tokens): Ast\ConstExpr\ConstExprArrayItemNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - $expr = $this->parse($tokens); - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_DOUBLE_ARROW)) { - $key = $expr; - $value = $this->parse($tokens); - - } else { - $key = null; - $value = $expr; - } - - return $this->enrichWithAttributes( - $tokens, - new Ast\ConstExpr\ConstExprArrayItemNode($key, $value), - $startLine, - $startIndex - ); - } - - /** - * @template T of Ast\ConstExpr\ConstExprNode - * @param T $node - * @return T - */ - private function enrichWithAttributes(TokenIterator $tokens, Ast\ConstExpr\ConstExprNode $node, int $startLine, int $startIndex): Ast\ConstExpr\ConstExprNode - { - if ($this->useLinesAttributes) { - $node->setAttribute(Ast\Attribute::START_LINE, $startLine); - $node->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine()); - } - - if ($this->useIndexAttributes) { - $node->setAttribute(Ast\Attribute::START_INDEX, $startIndex); - $node->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken()); - } - - return $node; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php b/vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php deleted file mode 100644 index 6ab5cc0..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Parser/ParserException.php +++ /dev/null @@ -1,106 +0,0 @@ -currentTokenValue = $currentTokenValue; - $this->currentTokenType = $currentTokenType; - $this->currentOffset = $currentOffset; - $this->expectedTokenType = $expectedTokenType; - $this->expectedTokenValue = $expectedTokenValue; - $this->currentTokenLine = $currentTokenLine; - - parent::__construct(sprintf( - 'Unexpected token %s, expected %s%s at offset %d%s', - $this->formatValue($currentTokenValue), - Lexer::TOKEN_LABELS[$expectedTokenType], - $expectedTokenValue !== null ? sprintf(' (%s)', $this->formatValue($expectedTokenValue)) : '', - $currentOffset, - $currentTokenLine === null ? '' : sprintf(' on line %d', $currentTokenLine) - )); - } - - - public function getCurrentTokenValue(): string - { - return $this->currentTokenValue; - } - - - public function getCurrentTokenType(): int - { - return $this->currentTokenType; - } - - - public function getCurrentOffset(): int - { - return $this->currentOffset; - } - - - public function getExpectedTokenType(): int - { - return $this->expectedTokenType; - } - - - public function getExpectedTokenValue(): ?string - { - return $this->expectedTokenValue; - } - - - public function getCurrentTokenLine(): ?int - { - return $this->currentTokenLine; - } - - - private function formatValue(string $value): string - { - $json = json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_INVALID_UTF8_SUBSTITUTE); - assert($json !== false); - - return $json; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php b/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php deleted file mode 100644 index b6cd85e..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Parser/PhpDocParser.php +++ /dev/null @@ -1,1301 +0,0 @@ -typeParser = $typeParser; - $this->constantExprParser = $constantExprParser; - $this->doctrineConstantExprParser = $constantExprParser->toDoctrine(); - $this->requireWhitespaceBeforeDescription = $requireWhitespaceBeforeDescription; - $this->preserveTypeAliasesWithInvalidTypes = $preserveTypeAliasesWithInvalidTypes; - $this->parseDoctrineAnnotations = $parseDoctrineAnnotations; - $this->useLinesAttributes = $usedAttributes['lines'] ?? false; - $this->useIndexAttributes = $usedAttributes['indexes'] ?? false; - $this->textBetweenTagsBelongsToDescription = $textBetweenTagsBelongsToDescription; - } - - - public function parse(TokenIterator $tokens): Ast\PhpDoc\PhpDocNode - { - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PHPDOC); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $children = []; - - if ($this->parseDoctrineAnnotations) { - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) { - $lastChild = $this->parseChild($tokens); - $children[] = $lastChild; - while (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) { - if ( - $lastChild instanceof Ast\PhpDoc\PhpDocTagNode - && ( - $lastChild->value instanceof Doctrine\DoctrineTagValueNode - || $lastChild->value instanceof Ast\PhpDoc\GenericTagValueNode - ) - ) { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) { - break; - } - $lastChild = $this->parseChild($tokens); - $children[] = $lastChild; - continue; - } - - if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL)) { - break; - } - if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) { - break; - } - - $lastChild = $this->parseChild($tokens); - $children[] = $lastChild; - } - } - } else { - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) { - $children[] = $this->parseChild($tokens); - while ($tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL) && !$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) { - $children[] = $this->parseChild($tokens); - } - } - } - - try { - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PHPDOC); - } catch (ParserException $e) { - $name = ''; - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - if (count($children) > 0) { - $lastChild = $children[count($children) - 1]; - if ($lastChild instanceof Ast\PhpDoc\PhpDocTagNode) { - $name = $lastChild->name; - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - } - } - - $tag = new Ast\PhpDoc\PhpDocTagNode( - $name, - $this->enrichWithAttributes( - $tokens, - new Ast\PhpDoc\InvalidTagValueNode($e->getMessage(), $e), - $startLine, - $startIndex - ) - ); - - $tokens->forwardToTheEnd(); - - return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocNode([$this->enrichWithAttributes($tokens, $tag, $startLine, $startIndex)]), 1, 0); - } - - return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocNode(array_values($children)), 1, 0); - } - - - /** @phpstan-impure */ - private function parseChild(TokenIterator $tokens): Ast\PhpDoc\PhpDocChildNode - { - if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG)) { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - return $this->enrichWithAttributes($tokens, $this->parseTag($tokens), $startLine, $startIndex); - } - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_TAG)) { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - $tag = $tokens->currentTokenValue(); - $tokens->next(); - - $tagStartLine = $tokens->currentTokenLine(); - $tagStartIndex = $tokens->currentTokenIndex(); - - return $this->enrichWithAttributes($tokens, new Ast\PhpDoc\PhpDocTagNode( - $tag, - $this->enrichWithAttributes( - $tokens, - $this->parseDoctrineTagValue($tokens, $tag), - $tagStartLine, - $tagStartIndex - ) - ), $startLine, $startIndex); - } - - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - $text = $this->parseText($tokens); - - return $this->enrichWithAttributes($tokens, $text, $startLine, $startIndex); - } - - /** - * @template T of Ast\Node - * @param T $tag - * @return T - */ - private function enrichWithAttributes(TokenIterator $tokens, Ast\Node $tag, int $startLine, int $startIndex): Ast\Node - { - if ($this->useLinesAttributes) { - $tag->setAttribute(Ast\Attribute::START_LINE, $startLine); - $tag->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine()); - } - - if ($this->useIndexAttributes) { - $tag->setAttribute(Ast\Attribute::START_INDEX, $startIndex); - $tag->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken()); - } - - return $tag; - } - - - private function parseText(TokenIterator $tokens): Ast\PhpDoc\PhpDocTextNode - { - $text = ''; - - $endTokens = [Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END]; - if ($this->textBetweenTagsBelongsToDescription) { - $endTokens = [Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END]; - } - - $savepoint = false; - - // if the next token is EOL, everything below is skipped and empty string is returned - while ($this->textBetweenTagsBelongsToDescription || !$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) { - $tmpText = $tokens->getSkippedHorizontalWhiteSpaceIfAny() . $tokens->joinUntil(Lexer::TOKEN_PHPDOC_EOL, ...$endTokens); - $text .= $tmpText; - - // stop if we're not at EOL - meaning it's the end of PHPDoc - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC)) { - break; - } - - if ($this->textBetweenTagsBelongsToDescription) { - if (!$savepoint) { - $tokens->pushSavePoint(); - $savepoint = true; - } elseif ($tmpText !== '') { - $tokens->dropSavePoint(); - $tokens->pushSavePoint(); - } - } - - $tokens->pushSavePoint(); - $tokens->next(); - - // if we're at EOL, check what's next - // if next is a PHPDoc tag, EOL, or end of PHPDoc, stop - if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, ...$endTokens)) { - $tokens->rollback(); - break; - } - - // otherwise if the next is text, continue building the description string - - $tokens->dropSavePoint(); - $text .= $tokens->getDetectedNewline() ?? "\n"; - } - - if ($savepoint) { - $tokens->rollback(); - $text = rtrim($text, $tokens->getDetectedNewline() ?? "\n"); - } - - return new Ast\PhpDoc\PhpDocTextNode(trim($text, " \t")); - } - - - private function parseOptionalDescriptionAfterDoctrineTag(TokenIterator $tokens): string - { - $text = ''; - - $endTokens = [Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END]; - if ($this->textBetweenTagsBelongsToDescription) { - $endTokens = [Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END]; - } - - $savepoint = false; - - // if the next token is EOL, everything below is skipped and empty string is returned - while ($this->textBetweenTagsBelongsToDescription || !$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) { - $tmpText = $tokens->getSkippedHorizontalWhiteSpaceIfAny() . $tokens->joinUntil(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, Lexer::TOKEN_PHPDOC_EOL, ...$endTokens); - $text .= $tmpText; - - // stop if we're not at EOL - meaning it's the end of PHPDoc - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC)) { - if (!$tokens->isPrecededByHorizontalWhitespace()) { - return trim($text . $this->parseText($tokens)->text, " \t"); - } - if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG)) { - $tokens->pushSavePoint(); - $child = $this->parseChild($tokens); - if ($child instanceof Ast\PhpDoc\PhpDocTagNode) { - if ( - $child->value instanceof Ast\PhpDoc\GenericTagValueNode - || $child->value instanceof Doctrine\DoctrineTagValueNode - ) { - $tokens->rollback(); - break; - } - if ($child->value instanceof Ast\PhpDoc\InvalidTagValueNode) { - $tokens->rollback(); - $tokens->pushSavePoint(); - $tokens->next(); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) { - $tokens->rollback(); - break; - } - $tokens->rollback(); - return trim($text . $this->parseText($tokens)->text, " \t"); - } - } - - $tokens->rollback(); - return trim($text . $this->parseText($tokens)->text, " \t"); - } - break; - } - - if ($this->textBetweenTagsBelongsToDescription) { - if (!$savepoint) { - $tokens->pushSavePoint(); - $savepoint = true; - } elseif ($tmpText !== '') { - $tokens->dropSavePoint(); - $tokens->pushSavePoint(); - } - } - - $tokens->pushSavePoint(); - $tokens->next(); - - // if we're at EOL, check what's next - // if next is a PHPDoc tag, EOL, or end of PHPDoc, stop - if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG, ...$endTokens)) { - $tokens->rollback(); - break; - } - - // otherwise if the next is text, continue building the description string - - $tokens->dropSavePoint(); - $text .= $tokens->getDetectedNewline() ?? "\n"; - } - - if ($savepoint) { - $tokens->rollback(); - $text = rtrim($text, $tokens->getDetectedNewline() ?? "\n"); - } - - return trim($text, " \t"); - } - - - public function parseTag(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagNode - { - $tag = $tokens->currentTokenValue(); - $tokens->next(); - $value = $this->parseTagValue($tokens, $tag); - - return new Ast\PhpDoc\PhpDocTagNode($tag, $value); - } - - - public function parseTagValue(TokenIterator $tokens, string $tag): Ast\PhpDoc\PhpDocTagValueNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - try { - $tokens->pushSavePoint(); - - switch ($tag) { - case '@param': - case '@phpstan-param': - case '@psalm-param': - case '@phan-param': - $tagValue = $this->parseParamTagValue($tokens); - break; - - case '@param-immediately-invoked-callable': - case '@phpstan-param-immediately-invoked-callable': - $tagValue = $this->parseParamImmediatelyInvokedCallableTagValue($tokens); - break; - - case '@param-later-invoked-callable': - case '@phpstan-param-later-invoked-callable': - $tagValue = $this->parseParamLaterInvokedCallableTagValue($tokens); - break; - - case '@param-closure-this': - case '@phpstan-param-closure-this': - $tagValue = $this->parseParamClosureThisTagValue($tokens); - break; - - case '@pure-unless-callable-is-impure': - case '@phpstan-pure-unless-callable-is-impure': - $tagValue = $this->parsePureUnlessCallableIsImpureTagValue($tokens); - break; - - case '@var': - case '@phpstan-var': - case '@psalm-var': - case '@phan-var': - $tagValue = $this->parseVarTagValue($tokens); - break; - - case '@return': - case '@phpstan-return': - case '@psalm-return': - case '@phan-return': - case '@phan-real-return': - $tagValue = $this->parseReturnTagValue($tokens); - break; - - case '@throws': - case '@phpstan-throws': - $tagValue = $this->parseThrowsTagValue($tokens); - break; - - case '@mixin': - case '@phan-mixin': - $tagValue = $this->parseMixinTagValue($tokens); - break; - - case '@psalm-require-extends': - case '@phpstan-require-extends': - $tagValue = $this->parseRequireExtendsTagValue($tokens); - break; - - case '@psalm-require-implements': - case '@phpstan-require-implements': - $tagValue = $this->parseRequireImplementsTagValue($tokens); - break; - - case '@deprecated': - $tagValue = $this->parseDeprecatedTagValue($tokens); - break; - - case '@property': - case '@property-read': - case '@property-write': - case '@phpstan-property': - case '@phpstan-property-read': - case '@phpstan-property-write': - case '@psalm-property': - case '@psalm-property-read': - case '@psalm-property-write': - case '@phan-property': - case '@phan-property-read': - case '@phan-property-write': - $tagValue = $this->parsePropertyTagValue($tokens); - break; - - case '@method': - case '@phpstan-method': - case '@psalm-method': - case '@phan-method': - $tagValue = $this->parseMethodTagValue($tokens); - break; - - case '@template': - case '@phpstan-template': - case '@psalm-template': - case '@phan-template': - case '@template-covariant': - case '@phpstan-template-covariant': - case '@psalm-template-covariant': - case '@template-contravariant': - case '@phpstan-template-contravariant': - case '@psalm-template-contravariant': - $tagValue = $this->typeParser->parseTemplateTagValue( - $tokens, - function ($tokens) { - return $this->parseOptionalDescription($tokens); - } - ); - break; - - case '@extends': - case '@phpstan-extends': - case '@phan-extends': - case '@phan-inherits': - case '@template-extends': - $tagValue = $this->parseExtendsTagValue('@extends', $tokens); - break; - - case '@implements': - case '@phpstan-implements': - case '@template-implements': - $tagValue = $this->parseExtendsTagValue('@implements', $tokens); - break; - - case '@use': - case '@phpstan-use': - case '@template-use': - $tagValue = $this->parseExtendsTagValue('@use', $tokens); - break; - - case '@phpstan-type': - case '@psalm-type': - case '@phan-type': - $tagValue = $this->parseTypeAliasTagValue($tokens); - break; - - case '@phpstan-import-type': - case '@psalm-import-type': - $tagValue = $this->parseTypeAliasImportTagValue($tokens); - break; - - case '@phpstan-assert': - case '@phpstan-assert-if-true': - case '@phpstan-assert-if-false': - case '@psalm-assert': - case '@psalm-assert-if-true': - case '@psalm-assert-if-false': - case '@phan-assert': - case '@phan-assert-if-true': - case '@phan-assert-if-false': - $tagValue = $this->parseAssertTagValue($tokens); - break; - - case '@phpstan-this-out': - case '@phpstan-self-out': - case '@psalm-this-out': - case '@psalm-self-out': - $tagValue = $this->parseSelfOutTagValue($tokens); - break; - - case '@param-out': - case '@phpstan-param-out': - case '@psalm-param-out': - $tagValue = $this->parseParamOutTagValue($tokens); - break; - - default: - if ($this->parseDoctrineAnnotations) { - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) { - $tagValue = $this->parseDoctrineTagValue($tokens, $tag); - } else { - $tagValue = new Ast\PhpDoc\GenericTagValueNode($this->parseOptionalDescriptionAfterDoctrineTag($tokens)); - } - break; - } - - $tagValue = new Ast\PhpDoc\GenericTagValueNode($this->parseOptionalDescription($tokens)); - - break; - } - - $tokens->dropSavePoint(); - - } catch (ParserException $e) { - $tokens->rollback(); - $tagValue = new Ast\PhpDoc\InvalidTagValueNode($this->parseOptionalDescription($tokens), $e); - } - - return $this->enrichWithAttributes($tokens, $tagValue, $startLine, $startIndex); - } - - - private function parseDoctrineTagValue(TokenIterator $tokens, string $tag): Ast\PhpDoc\PhpDocTagValueNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - return new Doctrine\DoctrineTagValueNode( - $this->enrichWithAttributes( - $tokens, - new Doctrine\DoctrineAnnotation($tag, $this->parseDoctrineArguments($tokens, false)), - $startLine, - $startIndex - ), - $this->parseOptionalDescriptionAfterDoctrineTag($tokens) - ); - } - - - /** - * @return list - */ - private function parseDoctrineArguments(TokenIterator $tokens, bool $deep): array - { - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) { - return []; - } - - if (!$deep) { - $tokens->addEndOfLineToSkippedTokens(); - } - - $arguments = []; - - try { - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES); - - do { - if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) { - break; - } - $arguments[] = $this->parseDoctrineArgument($tokens); - } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)); - } finally { - if (!$deep) { - $tokens->removeEndOfLineFromSkippedTokens(); - } - } - - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES); - - return $arguments; - } - - - private function parseDoctrineArgument(TokenIterator $tokens): Doctrine\DoctrineArgument - { - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - return $this->enrichWithAttributes( - $tokens, - new Doctrine\DoctrineArgument(null, $this->parseDoctrineArgumentValue($tokens)), - $startLine, - $startIndex - ); - } - - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - try { - $tokens->pushSavePoint(); - $currentValue = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - - $key = $this->enrichWithAttributes( - $tokens, - new IdentifierTypeNode($currentValue), - $startLine, - $startIndex - ); - $tokens->consumeTokenType(Lexer::TOKEN_EQUAL); - - $value = $this->parseDoctrineArgumentValue($tokens); - - $tokens->dropSavePoint(); - - return $this->enrichWithAttributes( - $tokens, - new Doctrine\DoctrineArgument($key, $value), - $startLine, - $startIndex - ); - } catch (ParserException $e) { - $tokens->rollback(); - - return $this->enrichWithAttributes( - $tokens, - new Doctrine\DoctrineArgument(null, $this->parseDoctrineArgumentValue($tokens)), - $startLine, - $startIndex - ); - } - } - - - /** - * @return DoctrineValueType - */ - private function parseDoctrineArgumentValue(TokenIterator $tokens) - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_TAG, Lexer::TOKEN_DOCTRINE_TAG)) { - $name = $tokens->currentTokenValue(); - $tokens->next(); - - return $this->enrichWithAttributes( - $tokens, - new Doctrine\DoctrineAnnotation($name, $this->parseDoctrineArguments($tokens, true)), - $startLine, - $startIndex - ); - } - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET)) { - $items = []; - do { - if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) { - break; - } - $items[] = $this->parseDoctrineArrayItem($tokens); - } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)); - - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET); - - return $this->enrichWithAttributes( - $tokens, - new Doctrine\DoctrineArray($items), - $startLine, - $startIndex - ); - } - - $currentTokenValue = $tokens->currentTokenValue(); - $tokens->pushSavePoint(); // because of ConstFetchNode - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) { - $identifier = $this->enrichWithAttributes( - $tokens, - new Ast\Type\IdentifierTypeNode($currentTokenValue), - $startLine, - $startIndex - ); - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) { - $tokens->dropSavePoint(); - return $identifier; - } - - $tokens->rollback(); // because of ConstFetchNode - } else { - $tokens->dropSavePoint(); // because of ConstFetchNode - } - - $currentTokenValue = $tokens->currentTokenValue(); - $currentTokenType = $tokens->currentTokenType(); - $currentTokenOffset = $tokens->currentTokenOffset(); - $currentTokenLine = $tokens->currentTokenLine(); - - try { - $constExpr = $this->doctrineConstantExprParser->parse($tokens, true); - if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) { - throw new ParserException( - $currentTokenValue, - $currentTokenType, - $currentTokenOffset, - Lexer::TOKEN_IDENTIFIER, - null, - $currentTokenLine - ); - } - - return $constExpr; - } catch (LogicException $e) { - throw new ParserException( - $currentTokenValue, - $currentTokenType, - $currentTokenOffset, - Lexer::TOKEN_IDENTIFIER, - null, - $currentTokenLine - ); - } - } - - - private function parseDoctrineArrayItem(TokenIterator $tokens): Doctrine\DoctrineArrayItem - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - try { - $tokens->pushSavePoint(); - - $key = $this->parseDoctrineArrayKey($tokens); - if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL)) { - if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_COLON)) { - $tokens->consumeTokenType(Lexer::TOKEN_EQUAL); // will throw exception - } - } - - $value = $this->parseDoctrineArgumentValue($tokens); - - $tokens->dropSavePoint(); - - return $this->enrichWithAttributes( - $tokens, - new Doctrine\DoctrineArrayItem($key, $value), - $startLine, - $startIndex - ); - } catch (ParserException $e) { - $tokens->rollback(); - - return $this->enrichWithAttributes( - $tokens, - new Doctrine\DoctrineArrayItem(null, $this->parseDoctrineArgumentValue($tokens)), - $startLine, - $startIndex - ); - } - } - - - /** - * @return ConstExprIntegerNode|ConstExprStringNode|IdentifierTypeNode|ConstFetchNode - */ - private function parseDoctrineArrayKey(TokenIterator $tokens) - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) { - $key = new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $tokens->currentTokenValue())); - $tokens->next(); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOCTRINE_ANNOTATION_STRING)) { - $key = new Ast\ConstExpr\DoctrineConstExprStringNode(Ast\ConstExpr\DoctrineConstExprStringNode::unescape($tokens->currentTokenValue())); - - $tokens->next(); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) { - $value = $tokens->currentTokenValue(); - $tokens->next(); - $key = $this->doctrineConstantExprParser->parseDoctrineString($value, $tokens); - - } else { - $currentTokenValue = $tokens->currentTokenValue(); - $tokens->pushSavePoint(); // because of ConstFetchNode - if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) { - $tokens->dropSavePoint(); - throw new ParserException( - $tokens->currentTokenValue(), - $tokens->currentTokenType(), - $tokens->currentTokenOffset(), - Lexer::TOKEN_IDENTIFIER, - null, - $tokens->currentTokenLine() - ); - } - - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) { - $tokens->dropSavePoint(); - - return $this->enrichWithAttributes( - $tokens, - new IdentifierTypeNode($currentTokenValue), - $startLine, - $startIndex - ); - } - - $tokens->rollback(); - $constExpr = $this->doctrineConstantExprParser->parse($tokens, true); - if (!$constExpr instanceof Ast\ConstExpr\ConstFetchNode) { - throw new ParserException( - $tokens->currentTokenValue(), - $tokens->currentTokenType(), - $tokens->currentTokenOffset(), - Lexer::TOKEN_IDENTIFIER, - null, - $tokens->currentTokenLine() - ); - } - - return $constExpr; - } - - return $this->enrichWithAttributes($tokens, $key, $startLine, $startIndex); - } - - - /** - * @return Ast\PhpDoc\ParamTagValueNode|Ast\PhpDoc\TypelessParamTagValueNode - */ - private function parseParamTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode - { - if ( - $tokens->isCurrentTokenType(Lexer::TOKEN_REFERENCE, Lexer::TOKEN_VARIADIC, Lexer::TOKEN_VARIABLE) - ) { - $type = null; - } else { - $type = $this->typeParser->parse($tokens); - } - - $isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE); - $isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC); - $parameterName = $this->parseRequiredVariableName($tokens); - $description = $this->parseOptionalDescription($tokens); - - if ($type !== null) { - return new Ast\PhpDoc\ParamTagValueNode($type, $isVariadic, $parameterName, $description, $isReference); - } - - return new Ast\PhpDoc\TypelessParamTagValueNode($isVariadic, $parameterName, $description, $isReference); - } - - - private function parseParamImmediatelyInvokedCallableTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode - { - $parameterName = $this->parseRequiredVariableName($tokens); - $description = $this->parseOptionalDescription($tokens); - - return new Ast\PhpDoc\ParamImmediatelyInvokedCallableTagValueNode($parameterName, $description); - } - - - private function parseParamLaterInvokedCallableTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode - { - $parameterName = $this->parseRequiredVariableName($tokens); - $description = $this->parseOptionalDescription($tokens); - - return new Ast\PhpDoc\ParamLaterInvokedCallableTagValueNode($parameterName, $description); - } - - - private function parseParamClosureThisTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamClosureThisTagValueNode - { - $type = $this->typeParser->parse($tokens); - $parameterName = $this->parseRequiredVariableName($tokens); - $description = $this->parseOptionalDescription($tokens); - - return new Ast\PhpDoc\ParamClosureThisTagValueNode($type, $parameterName, $description); - } - - private function parsePureUnlessCallableIsImpureTagValue(TokenIterator $tokens): Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode - { - $parameterName = $this->parseRequiredVariableName($tokens); - $description = $this->parseOptionalDescription($tokens); - - return new Ast\PhpDoc\PureUnlessCallableIsImpureTagValueNode($parameterName, $description); - } - - private function parseVarTagValue(TokenIterator $tokens): Ast\PhpDoc\VarTagValueNode - { - $type = $this->typeParser->parse($tokens); - $variableName = $this->parseOptionalVariableName($tokens); - $description = $this->parseOptionalDescription($tokens, $variableName === ''); - return new Ast\PhpDoc\VarTagValueNode($type, $variableName, $description); - } - - - private function parseReturnTagValue(TokenIterator $tokens): Ast\PhpDoc\ReturnTagValueNode - { - $type = $this->typeParser->parse($tokens); - $description = $this->parseOptionalDescription($tokens, true); - return new Ast\PhpDoc\ReturnTagValueNode($type, $description); - } - - - private function parseThrowsTagValue(TokenIterator $tokens): Ast\PhpDoc\ThrowsTagValueNode - { - $type = $this->typeParser->parse($tokens); - $description = $this->parseOptionalDescription($tokens, true); - return new Ast\PhpDoc\ThrowsTagValueNode($type, $description); - } - - private function parseMixinTagValue(TokenIterator $tokens): Ast\PhpDoc\MixinTagValueNode - { - $type = $this->typeParser->parse($tokens); - $description = $this->parseOptionalDescription($tokens, true); - return new Ast\PhpDoc\MixinTagValueNode($type, $description); - } - - private function parseRequireExtendsTagValue(TokenIterator $tokens): Ast\PhpDoc\RequireExtendsTagValueNode - { - $type = $this->typeParser->parse($tokens); - $description = $this->parseOptionalDescription($tokens, true); - return new Ast\PhpDoc\RequireExtendsTagValueNode($type, $description); - } - - private function parseRequireImplementsTagValue(TokenIterator $tokens): Ast\PhpDoc\RequireImplementsTagValueNode - { - $type = $this->typeParser->parse($tokens); - $description = $this->parseOptionalDescription($tokens, true); - return new Ast\PhpDoc\RequireImplementsTagValueNode($type, $description); - } - - private function parseDeprecatedTagValue(TokenIterator $tokens): Ast\PhpDoc\DeprecatedTagValueNode - { - $description = $this->parseOptionalDescription($tokens); - return new Ast\PhpDoc\DeprecatedTagValueNode($description); - } - - - private function parsePropertyTagValue(TokenIterator $tokens): Ast\PhpDoc\PropertyTagValueNode - { - $type = $this->typeParser->parse($tokens); - $parameterName = $this->parseRequiredVariableName($tokens); - $description = $this->parseOptionalDescription($tokens); - return new Ast\PhpDoc\PropertyTagValueNode($type, $parameterName, $description); - } - - - private function parseMethodTagValue(TokenIterator $tokens): Ast\PhpDoc\MethodTagValueNode - { - $staticKeywordOrReturnTypeOrMethodName = $this->typeParser->parse($tokens); - - if ($staticKeywordOrReturnTypeOrMethodName instanceof Ast\Type\IdentifierTypeNode && $staticKeywordOrReturnTypeOrMethodName->name === 'static') { - $isStatic = true; - $returnTypeOrMethodName = $this->typeParser->parse($tokens); - - } else { - $isStatic = false; - $returnTypeOrMethodName = $staticKeywordOrReturnTypeOrMethodName; - } - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) { - $returnType = $returnTypeOrMethodName; - $methodName = $tokens->currentTokenValue(); - $tokens->next(); - - } elseif ($returnTypeOrMethodName instanceof Ast\Type\IdentifierTypeNode) { - $returnType = $isStatic ? $staticKeywordOrReturnTypeOrMethodName : null; - $methodName = $returnTypeOrMethodName->name; - $isStatic = false; - - } else { - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); // will throw exception - exit; - } - - $templateTypes = []; - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) { - do { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - $templateTypes[] = $this->enrichWithAttributes( - $tokens, - $this->typeParser->parseTemplateTagValue($tokens), - $startLine, - $startIndex - ); - } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)); - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); - } - - $parameters = []; - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES); - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) { - $parameters[] = $this->parseMethodTagValueParameter($tokens); - while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) { - $parameters[] = $this->parseMethodTagValueParameter($tokens); - } - } - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES); - - $description = $this->parseOptionalDescription($tokens); - return new Ast\PhpDoc\MethodTagValueNode($isStatic, $returnType, $methodName, $parameters, $description, $templateTypes); - } - - private function parseMethodTagValueParameter(TokenIterator $tokens): Ast\PhpDoc\MethodTagValueParameterNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - switch ($tokens->currentTokenType()) { - case Lexer::TOKEN_IDENTIFIER: - case Lexer::TOKEN_OPEN_PARENTHESES: - case Lexer::TOKEN_NULLABLE: - $parameterType = $this->typeParser->parse($tokens); - break; - - default: - $parameterType = null; - } - - $isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE); - $isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC); - - $parameterName = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE); - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL)) { - $defaultValue = $this->constantExprParser->parse($tokens); - - } else { - $defaultValue = null; - } - - return $this->enrichWithAttributes( - $tokens, - new Ast\PhpDoc\MethodTagValueParameterNode($parameterType, $isReference, $isVariadic, $parameterName, $defaultValue), - $startLine, - $startIndex - ); - } - - private function parseExtendsTagValue(string $tagName, TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - $baseType = new IdentifierTypeNode($tokens->currentTokenValue()); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - - $type = $this->typeParser->parseGeneric( - $tokens, - $this->typeParser->enrichWithAttributes($tokens, $baseType, $startLine, $startIndex) - ); - - $description = $this->parseOptionalDescription($tokens); - - switch ($tagName) { - case '@extends': - return new Ast\PhpDoc\ExtendsTagValueNode($type, $description); - case '@implements': - return new Ast\PhpDoc\ImplementsTagValueNode($type, $description); - case '@use': - return new Ast\PhpDoc\UsesTagValueNode($type, $description); - } - - throw new ShouldNotHappenException(); - } - - private function parseTypeAliasTagValue(TokenIterator $tokens): Ast\PhpDoc\TypeAliasTagValueNode - { - $alias = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - - // support phan-type/psalm-type syntax - $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL); - - if ($this->preserveTypeAliasesWithInvalidTypes) { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - try { - $type = $this->typeParser->parse($tokens); - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PHPDOC)) { - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL)) { - throw new ParserException( - $tokens->currentTokenValue(), - $tokens->currentTokenType(), - $tokens->currentTokenOffset(), - Lexer::TOKEN_PHPDOC_EOL, - null, - $tokens->currentTokenLine() - ); - } - } - - return new Ast\PhpDoc\TypeAliasTagValueNode($alias, $type); - } catch (ParserException $e) { - $this->parseOptionalDescription($tokens); - return new Ast\PhpDoc\TypeAliasTagValueNode( - $alias, - $this->enrichWithAttributes($tokens, new Ast\Type\InvalidTypeNode($e), $startLine, $startIndex) - ); - } - } - - $type = $this->typeParser->parse($tokens); - - return new Ast\PhpDoc\TypeAliasTagValueNode($alias, $type); - } - - private function parseTypeAliasImportTagValue(TokenIterator $tokens): Ast\PhpDoc\TypeAliasImportTagValueNode - { - $importedAlias = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - - $tokens->consumeTokenValue(Lexer::TOKEN_IDENTIFIER, 'from'); - - $identifierStartLine = $tokens->currentTokenLine(); - $identifierStartIndex = $tokens->currentTokenIndex(); - $importedFrom = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - $importedFromType = $this->enrichWithAttributes( - $tokens, - new IdentifierTypeNode($importedFrom), - $identifierStartLine, - $identifierStartIndex - ); - - $importedAs = null; - if ($tokens->tryConsumeTokenValue('as')) { - $importedAs = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - } - - return new Ast\PhpDoc\TypeAliasImportTagValueNode($importedAlias, $importedFromType, $importedAs); - } - - /** - * @return Ast\PhpDoc\AssertTagValueNode|Ast\PhpDoc\AssertTagPropertyValueNode|Ast\PhpDoc\AssertTagMethodValueNode - */ - private function parseAssertTagValue(TokenIterator $tokens): Ast\PhpDoc\PhpDocTagValueNode - { - $isNegated = $tokens->tryConsumeTokenType(Lexer::TOKEN_NEGATED); - $isEquality = $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL); - $type = $this->typeParser->parse($tokens); - $parameter = $this->parseAssertParameter($tokens); - $description = $this->parseOptionalDescription($tokens); - - if (array_key_exists('method', $parameter)) { - return new Ast\PhpDoc\AssertTagMethodValueNode($type, $parameter['parameter'], $parameter['method'], $isNegated, $description, $isEquality); - } elseif (array_key_exists('property', $parameter)) { - return new Ast\PhpDoc\AssertTagPropertyValueNode($type, $parameter['parameter'], $parameter['property'], $isNegated, $description, $isEquality); - } - - return new Ast\PhpDoc\AssertTagValueNode($type, $parameter['parameter'], $isNegated, $description, $isEquality); - } - - /** - * @return array{parameter: string}|array{parameter: string, property: string}|array{parameter: string, method: string} - */ - private function parseAssertParameter(TokenIterator $tokens): array - { - if ($tokens->isCurrentTokenType(Lexer::TOKEN_THIS_VARIABLE)) { - $parameter = '$this'; - $tokens->next(); - } else { - $parameter = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE); - } - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_ARROW)) { - $tokens->consumeTokenType(Lexer::TOKEN_ARROW); - - $propertyOrMethod = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) { - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES); - - return ['parameter' => $parameter, 'method' => $propertyOrMethod]; - } - - return ['parameter' => $parameter, 'property' => $propertyOrMethod]; - } - - return ['parameter' => $parameter]; - } - - private function parseSelfOutTagValue(TokenIterator $tokens): Ast\PhpDoc\SelfOutTagValueNode - { - $type = $this->typeParser->parse($tokens); - $description = $this->parseOptionalDescription($tokens); - - return new Ast\PhpDoc\SelfOutTagValueNode($type, $description); - } - - private function parseParamOutTagValue(TokenIterator $tokens): Ast\PhpDoc\ParamOutTagValueNode - { - $type = $this->typeParser->parse($tokens); - $parameterName = $this->parseRequiredVariableName($tokens); - $description = $this->parseOptionalDescription($tokens); - - return new Ast\PhpDoc\ParamOutTagValueNode($type, $parameterName, $description); - } - - private function parseOptionalVariableName(TokenIterator $tokens): string - { - if ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) { - $parameterName = $tokens->currentTokenValue(); - $tokens->next(); - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_THIS_VARIABLE)) { - $parameterName = '$this'; - $tokens->next(); - - } else { - $parameterName = ''; - } - - return $parameterName; - } - - - private function parseRequiredVariableName(TokenIterator $tokens): string - { - $parameterName = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE); - - return $parameterName; - } - - private function parseOptionalDescription(TokenIterator $tokens, bool $limitStartToken = false): string - { - if ($limitStartToken) { - foreach (self::DISALLOWED_DESCRIPTION_START_TOKENS as $disallowedStartToken) { - if (!$tokens->isCurrentTokenType($disallowedStartToken)) { - continue; - } - - $tokens->consumeTokenType(Lexer::TOKEN_OTHER); // will throw exception - } - - if ( - $this->requireWhitespaceBeforeDescription - && !$tokens->isCurrentTokenType(Lexer::TOKEN_PHPDOC_EOL, Lexer::TOKEN_CLOSE_PHPDOC, Lexer::TOKEN_END) - && !$tokens->isPrecededByHorizontalWhitespace() - ) { - $tokens->consumeTokenType(Lexer::TOKEN_HORIZONTAL_WS); // will throw exception - } - } - - return $this->parseText($tokens)->text; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php b/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php deleted file mode 100644 index a3bbeed..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Parser/StringUnescaper.php +++ /dev/null @@ -1,100 +0,0 @@ - '\\', - 'n' => "\n", - 'r' => "\r", - 't' => "\t", - 'f' => "\f", - 'v' => "\v", - 'e' => "\x1B", - ]; - - public static function unescapeString(string $string): string - { - $quote = $string[0]; - - if ($quote === '\'') { - return str_replace( - ['\\\\', '\\\''], - ['\\', '\''], - substr($string, 1, -1) - ); - } - - return self::parseEscapeSequences(substr($string, 1, -1), '"'); - } - - /** - * Implementation based on https://github.com/nikic/PHP-Parser/blob/b0edd4c41111042d43bb45c6c657b2e0db367d9e/lib/PhpParser/Node/Scalar/String_.php#L90-L130 - */ - private static function parseEscapeSequences(string $str, string $quote): string - { - $str = str_replace('\\' . $quote, $quote, $str); - - return preg_replace_callback( - '~\\\\([\\\\nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}|u\{([0-9a-fA-F]+)\})~', - static function ($matches) { - $str = $matches[1]; - - if (isset(self::REPLACEMENTS[$str])) { - return self::REPLACEMENTS[$str]; - } - if ($str[0] === 'x' || $str[0] === 'X') { - return chr((int) hexdec(substr($str, 1))); - } - if ($str[0] === 'u') { - if (!isset($matches[2])) { - throw new ShouldNotHappenException(); - } - return self::codePointToUtf8((int) hexdec($matches[2])); - } - - return chr((int) octdec($str)); - }, - $str - ); - } - - /** - * Implementation based on https://github.com/nikic/PHP-Parser/blob/b0edd4c41111042d43bb45c6c657b2e0db367d9e/lib/PhpParser/Node/Scalar/String_.php#L132-L154 - */ - private static function codePointToUtf8(int $num): string - { - if ($num <= 0x7F) { - return chr($num); - } - if ($num <= 0x7FF) { - return chr(($num >> 6) + 0xC0) - . chr(($num & 0x3F) + 0x80); - } - if ($num <= 0xFFFF) { - return chr(($num >> 12) + 0xE0) - . chr((($num >> 6) & 0x3F) + 0x80) - . chr(($num & 0x3F) + 0x80); - } - if ($num <= 0x1FFFFF) { - return chr(($num >> 18) + 0xF0) - . chr((($num >> 12) & 0x3F) + 0x80) - . chr((($num >> 6) & 0x3F) + 0x80) - . chr(($num & 0x3F) + 0x80); - } - - // Invalid UTF-8 codepoint escape sequence: Codepoint too large - return "\xef\xbf\xbd"; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php b/vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php deleted file mode 100644 index 9be7593..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Parser/TokenIterator.php +++ /dev/null @@ -1,383 +0,0 @@ - */ - private $tokens; - - /** @var int */ - private $index; - - /** @var int[] */ - private $savePoints = []; - - /** @var list */ - private $skippedTokenTypes = [Lexer::TOKEN_HORIZONTAL_WS]; - - /** @var string|null */ - private $newline = null; - - /** - * @param list $tokens - */ - public function __construct(array $tokens, int $index = 0) - { - $this->tokens = $tokens; - $this->index = $index; - - $this->skipIrrelevantTokens(); - } - - - /** - * @return list - */ - public function getTokens(): array - { - return $this->tokens; - } - - - public function getContentBetween(int $startPos, int $endPos): string - { - if ($startPos < 0 || $endPos > count($this->tokens)) { - throw new LogicException(); - } - - $content = ''; - for ($i = $startPos; $i < $endPos; $i++) { - $content .= $this->tokens[$i][Lexer::VALUE_OFFSET]; - } - - return $content; - } - - - public function getTokenCount(): int - { - return count($this->tokens); - } - - - public function currentTokenValue(): string - { - return $this->tokens[$this->index][Lexer::VALUE_OFFSET]; - } - - - public function currentTokenType(): int - { - return $this->tokens[$this->index][Lexer::TYPE_OFFSET]; - } - - - public function currentTokenOffset(): int - { - $offset = 0; - for ($i = 0; $i < $this->index; $i++) { - $offset += strlen($this->tokens[$i][Lexer::VALUE_OFFSET]); - } - - return $offset; - } - - - public function currentTokenLine(): int - { - return $this->tokens[$this->index][Lexer::LINE_OFFSET]; - } - - - public function currentTokenIndex(): int - { - return $this->index; - } - - - public function endIndexOfLastRelevantToken(): int - { - $endIndex = $this->currentTokenIndex(); - $endIndex--; - while (in_array($this->tokens[$endIndex][Lexer::TYPE_OFFSET], $this->skippedTokenTypes, true)) { - if (!isset($this->tokens[$endIndex - 1])) { - break; - } - $endIndex--; - } - - return $endIndex; - } - - - public function isCurrentTokenValue(string $tokenValue): bool - { - return $this->tokens[$this->index][Lexer::VALUE_OFFSET] === $tokenValue; - } - - - public function isCurrentTokenType(int ...$tokenType): bool - { - return in_array($this->tokens[$this->index][Lexer::TYPE_OFFSET], $tokenType, true); - } - - - public function isPrecededByHorizontalWhitespace(): bool - { - return ($this->tokens[$this->index - 1][Lexer::TYPE_OFFSET] ?? -1) === Lexer::TOKEN_HORIZONTAL_WS; - } - - - /** - * @throws ParserException - */ - public function consumeTokenType(int $tokenType): void - { - if ($this->tokens[$this->index][Lexer::TYPE_OFFSET] !== $tokenType) { - $this->throwError($tokenType); - } - - if ($tokenType === Lexer::TOKEN_PHPDOC_EOL) { - if ($this->newline === null) { - $this->detectNewline(); - } - } - - $this->index++; - $this->skipIrrelevantTokens(); - } - - - /** - * @throws ParserException - */ - public function consumeTokenValue(int $tokenType, string $tokenValue): void - { - if ($this->tokens[$this->index][Lexer::TYPE_OFFSET] !== $tokenType || $this->tokens[$this->index][Lexer::VALUE_OFFSET] !== $tokenValue) { - $this->throwError($tokenType, $tokenValue); - } - - $this->index++; - $this->skipIrrelevantTokens(); - } - - - /** @phpstan-impure */ - public function tryConsumeTokenValue(string $tokenValue): bool - { - if ($this->tokens[$this->index][Lexer::VALUE_OFFSET] !== $tokenValue) { - return false; - } - - $this->index++; - $this->skipIrrelevantTokens(); - - return true; - } - - - /** @phpstan-impure */ - public function tryConsumeTokenType(int $tokenType): bool - { - if ($this->tokens[$this->index][Lexer::TYPE_OFFSET] !== $tokenType) { - return false; - } - - if ($tokenType === Lexer::TOKEN_PHPDOC_EOL) { - if ($this->newline === null) { - $this->detectNewline(); - } - } - - $this->index++; - $this->skipIrrelevantTokens(); - - return true; - } - - - private function detectNewline(): void - { - $value = $this->currentTokenValue(); - if (substr($value, 0, 2) === "\r\n") { - $this->newline = "\r\n"; - } elseif (substr($value, 0, 1) === "\n") { - $this->newline = "\n"; - } - } - - - public function getSkippedHorizontalWhiteSpaceIfAny(): string - { - if ($this->index > 0 && $this->tokens[$this->index - 1][Lexer::TYPE_OFFSET] === Lexer::TOKEN_HORIZONTAL_WS) { - return $this->tokens[$this->index - 1][Lexer::VALUE_OFFSET]; - } - - return ''; - } - - - /** @phpstan-impure */ - public function joinUntil(int ...$tokenType): string - { - $s = ''; - while (!in_array($this->tokens[$this->index][Lexer::TYPE_OFFSET], $tokenType, true)) { - $s .= $this->tokens[$this->index++][Lexer::VALUE_OFFSET]; - } - return $s; - } - - - public function next(): void - { - $this->index++; - $this->skipIrrelevantTokens(); - } - - - private function skipIrrelevantTokens(): void - { - if (!isset($this->tokens[$this->index])) { - return; - } - - while (in_array($this->tokens[$this->index][Lexer::TYPE_OFFSET], $this->skippedTokenTypes, true)) { - if (!isset($this->tokens[$this->index + 1])) { - break; - } - $this->index++; - } - } - - - public function addEndOfLineToSkippedTokens(): void - { - $this->skippedTokenTypes = [Lexer::TOKEN_HORIZONTAL_WS, Lexer::TOKEN_PHPDOC_EOL]; - } - - - public function removeEndOfLineFromSkippedTokens(): void - { - $this->skippedTokenTypes = [Lexer::TOKEN_HORIZONTAL_WS]; - } - - /** @phpstan-impure */ - public function forwardToTheEnd(): void - { - $lastToken = count($this->tokens) - 1; - $this->index = $lastToken; - } - - - public function pushSavePoint(): void - { - $this->savePoints[] = $this->index; - } - - - public function dropSavePoint(): void - { - array_pop($this->savePoints); - } - - - public function rollback(): void - { - $index = array_pop($this->savePoints); - assert($index !== null); - $this->index = $index; - } - - - /** - * @throws ParserException - */ - private function throwError(int $expectedTokenType, ?string $expectedTokenValue = null): void - { - throw new ParserException( - $this->currentTokenValue(), - $this->currentTokenType(), - $this->currentTokenOffset(), - $expectedTokenType, - $expectedTokenValue, - $this->currentTokenLine() - ); - } - - /** - * Check whether the position is directly preceded by a certain token type. - * - * During this check TOKEN_HORIZONTAL_WS and TOKEN_PHPDOC_EOL are skipped - */ - public function hasTokenImmediatelyBefore(int $pos, int $expectedTokenType): bool - { - $tokens = $this->tokens; - $pos--; - for (; $pos >= 0; $pos--) { - $token = $tokens[$pos]; - $type = $token[Lexer::TYPE_OFFSET]; - if ($type === $expectedTokenType) { - return true; - } - if (!in_array($type, [ - Lexer::TOKEN_HORIZONTAL_WS, - Lexer::TOKEN_PHPDOC_EOL, - ], true)) { - break; - } - } - return false; - } - - /** - * Check whether the position is directly followed by a certain token type. - * - * During this check TOKEN_HORIZONTAL_WS and TOKEN_PHPDOC_EOL are skipped - */ - public function hasTokenImmediatelyAfter(int $pos, int $expectedTokenType): bool - { - $tokens = $this->tokens; - $pos++; - for ($c = count($tokens); $pos < $c; $pos++) { - $token = $tokens[$pos]; - $type = $token[Lexer::TYPE_OFFSET]; - if ($type === $expectedTokenType) { - return true; - } - if (!in_array($type, [ - Lexer::TOKEN_HORIZONTAL_WS, - Lexer::TOKEN_PHPDOC_EOL, - ], true)) { - break; - } - } - - return false; - } - - public function getDetectedNewline(): ?string - { - return $this->newline; - } - - /** - * Whether the given position is immediately surrounded by parenthesis. - */ - public function hasParentheses(int $startPos, int $endPos): bool - { - return $this->hasTokenImmediatelyBefore($startPos, Lexer::TOKEN_OPEN_PARENTHESES) - && $this->hasTokenImmediatelyAfter($endPos, Lexer::TOKEN_CLOSE_PARENTHESES); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php b/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php deleted file mode 100644 index 2be2839..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Parser/TypeParser.php +++ /dev/null @@ -1,1098 +0,0 @@ -constExprParser = $constExprParser; - $this->quoteAwareConstExprString = $quoteAwareConstExprString; - $this->useLinesAttributes = $usedAttributes['lines'] ?? false; - $this->useIndexAttributes = $usedAttributes['indexes'] ?? false; - } - - /** @phpstan-impure */ - public function parse(TokenIterator $tokens): Ast\Type\TypeNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) { - $type = $this->parseNullable($tokens); - - } else { - $type = $this->parseAtomic($tokens); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_UNION)) { - $type = $this->parseUnion($tokens, $type); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_INTERSECTION)) { - $type = $this->parseIntersection($tokens, $type); - } - } - - return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); - } - - /** - * @internal - * @template T of Ast\Node - * @param T $type - * @return T - */ - public function enrichWithAttributes(TokenIterator $tokens, Ast\Node $type, int $startLine, int $startIndex): Ast\Node - { - if ($this->useLinesAttributes) { - $type->setAttribute(Ast\Attribute::START_LINE, $startLine); - $type->setAttribute(Ast\Attribute::END_LINE, $tokens->currentTokenLine()); - } - - if ($this->useIndexAttributes) { - $type->setAttribute(Ast\Attribute::START_INDEX, $startIndex); - $type->setAttribute(Ast\Attribute::END_INDEX, $tokens->endIndexOfLastRelevantToken()); - } - - return $type; - } - - /** @phpstan-impure */ - private function subParse(TokenIterator $tokens): Ast\Type\TypeNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) { - $type = $this->parseNullable($tokens); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) { - $type = $this->parseConditionalForParameter($tokens, $tokens->currentTokenValue()); - - } else { - $type = $this->parseAtomic($tokens); - - if ($tokens->isCurrentTokenValue('is')) { - $type = $this->parseConditional($tokens, $type); - } else { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_UNION)) { - $type = $this->subParseUnion($tokens, $type); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_INTERSECTION)) { - $type = $this->subParseIntersection($tokens, $type); - } - } - } - - return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); - } - - - /** @phpstan-impure */ - private function parseAtomic(TokenIterator $tokens): Ast\Type\TypeNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $type = $this->subParse($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $type); - } - - return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); - } - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_THIS_VARIABLE)) { - $type = $this->enrichWithAttributes($tokens, new Ast\Type\ThisTypeNode(), $startLine, $startIndex); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $type); - } - - return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); - } - - $currentTokenValue = $tokens->currentTokenValue(); - $tokens->pushSavePoint(); // because of ConstFetchNode - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) { - $type = $this->enrichWithAttributes($tokens, new Ast\Type\IdentifierTypeNode($currentTokenValue), $startLine, $startIndex); - - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) { - $tokens->dropSavePoint(); // because of ConstFetchNode - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) { - $tokens->pushSavePoint(); - - $isHtml = $this->isHtml($tokens); - $tokens->rollback(); - if ($isHtml) { - return $type; - } - - $origType = $type; - $type = $this->tryParseCallable($tokens, $type, true); - if ($type === $origType) { - $type = $this->parseGeneric($tokens, $type); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $type); - } - } - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) { - $type = $this->tryParseCallable($tokens, $type, false); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $type); - - } elseif (in_array($type->name, ['array', 'list', 'object'], true) && $tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET) && !$tokens->isPrecededByHorizontalWhitespace()) { - if ($type->name === 'object') { - $type = $this->parseObjectShape($tokens); - } else { - $type = $this->parseArrayShape($tokens, $type, $type->name); - } - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess( - $tokens, - $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex) - ); - } - } - - return $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); - } else { - $tokens->rollback(); // because of ConstFetchNode - } - } else { - $tokens->dropSavePoint(); // because of ConstFetchNode - } - - $currentTokenValue = $tokens->currentTokenValue(); - $currentTokenType = $tokens->currentTokenType(); - $currentTokenOffset = $tokens->currentTokenOffset(); - $currentTokenLine = $tokens->currentTokenLine(); - - if ($this->constExprParser === null) { - throw new ParserException( - $currentTokenValue, - $currentTokenType, - $currentTokenOffset, - Lexer::TOKEN_IDENTIFIER, - null, - $currentTokenLine - ); - } - - try { - $constExpr = $this->constExprParser->parse($tokens, true); - if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) { - throw new ParserException( - $currentTokenValue, - $currentTokenType, - $currentTokenOffset, - Lexer::TOKEN_IDENTIFIER, - null, - $currentTokenLine - ); - } - - $type = $this->enrichWithAttributes( - $tokens, - new Ast\Type\ConstTypeNode($constExpr), - $startLine, - $startIndex - ); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $type); - } - - return $type; - } catch (LogicException $e) { - throw new ParserException( - $currentTokenValue, - $currentTokenType, - $currentTokenOffset, - Lexer::TOKEN_IDENTIFIER, - null, - $currentTokenLine - ); - } - } - - - /** @phpstan-impure */ - private function parseUnion(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode - { - $types = [$type]; - - while ($tokens->tryConsumeTokenType(Lexer::TOKEN_UNION)) { - $types[] = $this->parseAtomic($tokens); - } - - return new Ast\Type\UnionTypeNode($types); - } - - - /** @phpstan-impure */ - private function subParseUnion(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode - { - $types = [$type]; - - while ($tokens->tryConsumeTokenType(Lexer::TOKEN_UNION)) { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $types[] = $this->parseAtomic($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } - - return new Ast\Type\UnionTypeNode($types); - } - - - /** @phpstan-impure */ - private function parseIntersection(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode - { - $types = [$type]; - - while ($tokens->tryConsumeTokenType(Lexer::TOKEN_INTERSECTION)) { - $types[] = $this->parseAtomic($tokens); - } - - return new Ast\Type\IntersectionTypeNode($types); - } - - - /** @phpstan-impure */ - private function subParseIntersection(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode - { - $types = [$type]; - - while ($tokens->tryConsumeTokenType(Lexer::TOKEN_INTERSECTION)) { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $types[] = $this->parseAtomic($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } - - return new Ast\Type\IntersectionTypeNode($types); - } - - - /** @phpstan-impure */ - private function parseConditional(TokenIterator $tokens, Ast\Type\TypeNode $subjectType): Ast\Type\TypeNode - { - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - - $negated = false; - if ($tokens->isCurrentTokenValue('not')) { - $negated = true; - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - } - - $targetType = $this->parse($tokens); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $tokens->consumeTokenType(Lexer::TOKEN_NULLABLE); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $ifType = $this->parse($tokens); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $tokens->consumeTokenType(Lexer::TOKEN_COLON); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $elseType = $this->subParse($tokens); - - return new Ast\Type\ConditionalTypeNode($subjectType, $targetType, $ifType, $elseType, $negated); - } - - /** @phpstan-impure */ - private function parseConditionalForParameter(TokenIterator $tokens, string $parameterName): Ast\Type\TypeNode - { - $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE); - $tokens->consumeTokenValue(Lexer::TOKEN_IDENTIFIER, 'is'); - - $negated = false; - if ($tokens->isCurrentTokenValue('not')) { - $negated = true; - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - } - - $targetType = $this->parse($tokens); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $tokens->consumeTokenType(Lexer::TOKEN_NULLABLE); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $ifType = $this->parse($tokens); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $tokens->consumeTokenType(Lexer::TOKEN_COLON); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $elseType = $this->subParse($tokens); - - return new Ast\Type\ConditionalTypeForParameterNode($parameterName, $targetType, $ifType, $elseType, $negated); - } - - - /** @phpstan-impure */ - private function parseNullable(TokenIterator $tokens): Ast\Type\TypeNode - { - $tokens->consumeTokenType(Lexer::TOKEN_NULLABLE); - - $type = $this->parseAtomic($tokens); - - return new Ast\Type\NullableTypeNode($type); - } - - /** @phpstan-impure */ - public function isHtml(TokenIterator $tokens): bool - { - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET); - - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_IDENTIFIER)) { - return false; - } - - $htmlTagName = $tokens->currentTokenValue(); - - $tokens->next(); - - if (!$tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) { - return false; - } - - $endTag = ''; - $endTagSearchOffset = - strlen($endTag); - - while (!$tokens->isCurrentTokenType(Lexer::TOKEN_END)) { - if ( - ( - $tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET) - && strpos($tokens->currentTokenValue(), '/' . $htmlTagName . '>') !== false - ) - || substr_compare($tokens->currentTokenValue(), $endTag, $endTagSearchOffset) === 0 - ) { - return true; - } - - $tokens->next(); - } - - return false; - } - - /** @phpstan-impure */ - public function parseGeneric(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $baseType): Ast\Type\GenericTypeNode - { - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET); - - $startLine = $baseType->getAttribute(Ast\Attribute::START_LINE); - $startIndex = $baseType->getAttribute(Ast\Attribute::START_INDEX); - $genericTypes = []; - $variances = []; - - $isFirst = true; - while ($isFirst || $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - // trailing comma case - if (!$isFirst && $tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) { - break; - } - $isFirst = false; - - [$genericTypes[], $variances[]] = $this->parseGenericTypeArgument($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } - - $type = new Ast\Type\GenericTypeNode($baseType, $genericTypes, $variances); - if ($startLine !== null && $startIndex !== null) { - $type = $this->enrichWithAttributes($tokens, $type, $startLine, $startIndex); - } - - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); - - return $type; - } - - - /** - * @phpstan-impure - * @return array{Ast\Type\TypeNode, Ast\Type\GenericTypeNode::VARIANCE_*} - */ - public function parseGenericTypeArgument(TokenIterator $tokens): array - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_WILDCARD)) { - return [ - $this->enrichWithAttributes($tokens, new Ast\Type\IdentifierTypeNode('mixed'), $startLine, $startIndex), - Ast\Type\GenericTypeNode::VARIANCE_BIVARIANT, - ]; - } - - if ($tokens->tryConsumeTokenValue('contravariant')) { - $variance = Ast\Type\GenericTypeNode::VARIANCE_CONTRAVARIANT; - } elseif ($tokens->tryConsumeTokenValue('covariant')) { - $variance = Ast\Type\GenericTypeNode::VARIANCE_COVARIANT; - } else { - $variance = Ast\Type\GenericTypeNode::VARIANCE_INVARIANT; - } - - $type = $this->parse($tokens); - return [$type, $variance]; - } - - /** - * @throws ParserException - * @param ?callable(TokenIterator): string $parseDescription - */ - public function parseTemplateTagValue( - TokenIterator $tokens, - ?callable $parseDescription = null - ): TemplateTagValueNode - { - $name = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - - $upperBound = $lowerBound = null; - - if ($tokens->tryConsumeTokenValue('of') || $tokens->tryConsumeTokenValue('as')) { - $upperBound = $this->parse($tokens); - } - - if ($tokens->tryConsumeTokenValue('super')) { - $lowerBound = $this->parse($tokens); - } - - if ($tokens->tryConsumeTokenValue('=')) { - $default = $this->parse($tokens); - } else { - $default = null; - } - - if ($parseDescription !== null) { - $description = $parseDescription($tokens); - } else { - $description = ''; - } - - if ($name === '') { - throw new LogicException('Template tag name cannot be empty.'); - } - - return new Ast\PhpDoc\TemplateTagValueNode($name, $upperBound, $description, $default, $lowerBound); - } - - - /** @phpstan-impure */ - private function parseCallable(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $identifier, bool $hasTemplate): Ast\Type\TypeNode - { - $templates = $hasTemplate - ? $this->parseCallableTemplates($tokens) - : []; - - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $parameters = []; - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) { - $parameters[] = $this->parseCallableParameter($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_PARENTHESES)) { - break; - } - $parameters[] = $this->parseCallableParameter($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } - } - - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES); - $tokens->consumeTokenType(Lexer::TOKEN_COLON); - - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - $returnType = $this->enrichWithAttributes($tokens, $this->parseCallableReturnType($tokens), $startLine, $startIndex); - - return new Ast\Type\CallableTypeNode($identifier, $parameters, $returnType, $templates); - } - - - /** - * @return Ast\PhpDoc\TemplateTagValueNode[] - * - * @phpstan-impure - */ - private function parseCallableTemplates(TokenIterator $tokens): array - { - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET); - - $templates = []; - - $isFirst = true; - while ($isFirst || $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - // trailing comma case - if (!$isFirst && $tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET)) { - break; - } - $isFirst = false; - - $templates[] = $this->parseCallableTemplateArgument($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } - - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); - - return $templates; - } - - - private function parseCallableTemplateArgument(TokenIterator $tokens): Ast\PhpDoc\TemplateTagValueNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - return $this->enrichWithAttributes( - $tokens, - $this->parseTemplateTagValue($tokens), - $startLine, - $startIndex - ); - } - - - /** @phpstan-impure */ - private function parseCallableParameter(TokenIterator $tokens): Ast\Type\CallableTypeParameterNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - $type = $this->parse($tokens); - $isReference = $tokens->tryConsumeTokenType(Lexer::TOKEN_REFERENCE); - $isVariadic = $tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_VARIABLE)) { - $parameterName = $tokens->currentTokenValue(); - $tokens->consumeTokenType(Lexer::TOKEN_VARIABLE); - - } else { - $parameterName = ''; - } - - $isOptional = $tokens->tryConsumeTokenType(Lexer::TOKEN_EQUAL); - return $this->enrichWithAttributes( - $tokens, - new Ast\Type\CallableTypeParameterNode($type, $isReference, $isVariadic, $parameterName, $isOptional), - $startLine, - $startIndex - ); - } - - - /** @phpstan-impure */ - private function parseCallableReturnType(TokenIterator $tokens): Ast\Type\TypeNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_NULLABLE)) { - return $this->parseNullable($tokens); - - } elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_OPEN_PARENTHESES)) { - $type = $this->subParse($tokens); - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_PARENTHESES); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $type); - } - - return $type; - } elseif ($tokens->tryConsumeTokenType(Lexer::TOKEN_THIS_VARIABLE)) { - $type = new Ast\Type\ThisTypeNode(); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes( - $tokens, - $type, - $startLine, - $startIndex - )); - } - - return $type; - } else { - $currentTokenValue = $tokens->currentTokenValue(); - $tokens->pushSavePoint(); // because of ConstFetchNode - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_IDENTIFIER)) { - $type = new Ast\Type\IdentifierTypeNode($currentTokenValue); - - if (!$tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_COLON)) { - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) { - $type = $this->parseGeneric( - $tokens, - $this->enrichWithAttributes( - $tokens, - $type, - $startLine, - $startIndex - ) - ); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes( - $tokens, - $type, - $startLine, - $startIndex - )); - } - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes( - $tokens, - $type, - $startLine, - $startIndex - )); - - } elseif (in_array($type->name, ['array', 'list', 'object'], true) && $tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET) && !$tokens->isPrecededByHorizontalWhitespace()) { - if ($type->name === 'object') { - $type = $this->parseObjectShape($tokens); - } else { - $type = $this->parseArrayShape($tokens, $this->enrichWithAttributes( - $tokens, - $type, - $startLine, - $startIndex - ), $type->name); - } - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $this->enrichWithAttributes( - $tokens, - $type, - $startLine, - $startIndex - )); - } - } - - return $type; - } else { - $tokens->rollback(); // because of ConstFetchNode - } - } else { - $tokens->dropSavePoint(); // because of ConstFetchNode - } - } - - $currentTokenValue = $tokens->currentTokenValue(); - $currentTokenType = $tokens->currentTokenType(); - $currentTokenOffset = $tokens->currentTokenOffset(); - $currentTokenLine = $tokens->currentTokenLine(); - - if ($this->constExprParser === null) { - throw new ParserException( - $currentTokenValue, - $currentTokenType, - $currentTokenOffset, - Lexer::TOKEN_IDENTIFIER, - null, - $currentTokenLine - ); - } - - try { - $constExpr = $this->constExprParser->parse($tokens, true); - if ($constExpr instanceof Ast\ConstExpr\ConstExprArrayNode) { - throw new ParserException( - $currentTokenValue, - $currentTokenType, - $currentTokenOffset, - Lexer::TOKEN_IDENTIFIER, - null, - $currentTokenLine - ); - } - - $type = $this->enrichWithAttributes( - $tokens, - new Ast\Type\ConstTypeNode($constExpr), - $startLine, - $startIndex - ); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $type = $this->tryParseArrayOrOffsetAccess($tokens, $type); - } - - return $type; - } catch (LogicException $e) { - throw new ParserException( - $currentTokenValue, - $currentTokenType, - $currentTokenOffset, - Lexer::TOKEN_IDENTIFIER, - null, - $currentTokenLine - ); - } - } - - - /** @phpstan-impure */ - private function tryParseCallable(TokenIterator $tokens, Ast\Type\IdentifierTypeNode $identifier, bool $hasTemplate): Ast\Type\TypeNode - { - try { - $tokens->pushSavePoint(); - $type = $this->parseCallable($tokens, $identifier, $hasTemplate); - $tokens->dropSavePoint(); - - } catch (ParserException $e) { - $tokens->rollback(); - $type = $identifier; - } - - return $type; - } - - - /** @phpstan-impure */ - private function tryParseArrayOrOffsetAccess(TokenIterator $tokens, Ast\Type\TypeNode $type): Ast\Type\TypeNode - { - $startLine = $type->getAttribute(Ast\Attribute::START_LINE); - $startIndex = $type->getAttribute(Ast\Attribute::START_INDEX); - try { - while ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET)) { - $tokens->pushSavePoint(); - - $canBeOffsetAccessType = !$tokens->isPrecededByHorizontalWhitespace(); - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_SQUARE_BRACKET); - - if ($canBeOffsetAccessType && !$tokens->isCurrentTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET)) { - $offset = $this->parse($tokens); - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET); - $tokens->dropSavePoint(); - $type = new Ast\Type\OffsetAccessTypeNode($type, $offset); - - if ($startLine !== null && $startIndex !== null) { - $type = $this->enrichWithAttributes( - $tokens, - $type, - $startLine, - $startIndex - ); - } - } else { - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_SQUARE_BRACKET); - $tokens->dropSavePoint(); - $type = new Ast\Type\ArrayTypeNode($type); - - if ($startLine !== null && $startIndex !== null) { - $type = $this->enrichWithAttributes( - $tokens, - $type, - $startLine, - $startIndex - ); - } - } - } - - } catch (ParserException $e) { - $tokens->rollback(); - } - - return $type; - } - - - /** - * @phpstan-impure - * @param Ast\Type\ArrayShapeNode::KIND_* $kind - */ - private function parseArrayShape(TokenIterator $tokens, Ast\Type\TypeNode $type, string $kind): Ast\Type\ArrayShapeNode - { - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET); - - $items = []; - $sealed = true; - $unsealedType = null; - - do { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) { - return new Ast\Type\ArrayShapeNode($items, true, $kind); - } - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_VARIADIC)) { - $sealed = false; - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - if ($tokens->isCurrentTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET)) { - if ($kind === Ast\Type\ArrayShapeNode::KIND_ARRAY) { - $unsealedType = $this->parseArrayShapeUnsealedType($tokens); - } else { - $unsealedType = $this->parseListShapeUnsealedType($tokens); - } - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } - - $tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA); - break; - } - - $items[] = $this->parseArrayShapeItem($tokens); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET); - - return new Ast\Type\ArrayShapeNode($items, $sealed, $kind, $unsealedType); - } - - - /** @phpstan-impure */ - private function parseArrayShapeItem(TokenIterator $tokens): Ast\Type\ArrayShapeItemNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - try { - $tokens->pushSavePoint(); - $key = $this->parseArrayShapeKey($tokens); - $optional = $tokens->tryConsumeTokenType(Lexer::TOKEN_NULLABLE); - $tokens->consumeTokenType(Lexer::TOKEN_COLON); - $value = $this->parse($tokens); - $tokens->dropSavePoint(); - - return $this->enrichWithAttributes( - $tokens, - new Ast\Type\ArrayShapeItemNode($key, $optional, $value), - $startLine, - $startIndex - ); - } catch (ParserException $e) { - $tokens->rollback(); - $value = $this->parse($tokens); - - return $this->enrichWithAttributes( - $tokens, - new Ast\Type\ArrayShapeItemNode(null, false, $value), - $startLine, - $startIndex - ); - } - } - - /** - * @phpstan-impure - * @return Ast\ConstExpr\ConstExprIntegerNode|Ast\ConstExpr\ConstExprStringNode|Ast\Type\IdentifierTypeNode - */ - private function parseArrayShapeKey(TokenIterator $tokens) - { - $startIndex = $tokens->currentTokenIndex(); - $startLine = $tokens->currentTokenLine(); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_INTEGER)) { - $key = new Ast\ConstExpr\ConstExprIntegerNode(str_replace('_', '', $tokens->currentTokenValue())); - $tokens->next(); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) { - if ($this->quoteAwareConstExprString) { - $key = new Ast\ConstExpr\QuoteAwareConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\QuoteAwareConstExprStringNode::SINGLE_QUOTED); - } else { - $key = new Ast\ConstExpr\ConstExprStringNode(trim($tokens->currentTokenValue(), "'")); - } - $tokens->next(); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) { - if ($this->quoteAwareConstExprString) { - $key = new Ast\ConstExpr\QuoteAwareConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\QuoteAwareConstExprStringNode::DOUBLE_QUOTED); - } else { - $key = new Ast\ConstExpr\ConstExprStringNode(trim($tokens->currentTokenValue(), '"')); - } - - $tokens->next(); - - } else { - $key = new Ast\Type\IdentifierTypeNode($tokens->currentTokenValue()); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - } - - return $this->enrichWithAttributes( - $tokens, - $key, - $startLine, - $startIndex - ); - } - - /** - * @phpstan-impure - */ - private function parseArrayShapeUnsealedType(TokenIterator $tokens): Ast\Type\ArrayShapeUnsealedTypeNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $valueType = $this->parse($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $keyType = null; - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)) { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $keyType = $valueType; - $valueType = $this->parse($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } - - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); - - return $this->enrichWithAttributes( - $tokens, - new Ast\Type\ArrayShapeUnsealedTypeNode($valueType, $keyType), - $startLine, - $startIndex - ); - } - - /** - * @phpstan-impure - */ - private function parseListShapeUnsealedType(TokenIterator $tokens): Ast\Type\ArrayShapeUnsealedTypeNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_ANGLE_BRACKET); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $valueType = $this->parse($tokens); - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_ANGLE_BRACKET); - - return $this->enrichWithAttributes( - $tokens, - new Ast\Type\ArrayShapeUnsealedTypeNode($valueType, null), - $startLine, - $startIndex - ); - } - - /** - * @phpstan-impure - */ - private function parseObjectShape(TokenIterator $tokens): Ast\Type\ObjectShapeNode - { - $tokens->consumeTokenType(Lexer::TOKEN_OPEN_CURLY_BRACKET); - - $items = []; - - do { - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - - if ($tokens->tryConsumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET)) { - return new Ast\Type\ObjectShapeNode($items); - } - - $items[] = $this->parseObjectShapeItem($tokens); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - } while ($tokens->tryConsumeTokenType(Lexer::TOKEN_COMMA)); - - $tokens->tryConsumeTokenType(Lexer::TOKEN_PHPDOC_EOL); - $tokens->consumeTokenType(Lexer::TOKEN_CLOSE_CURLY_BRACKET); - - return new Ast\Type\ObjectShapeNode($items); - } - - /** @phpstan-impure */ - private function parseObjectShapeItem(TokenIterator $tokens): Ast\Type\ObjectShapeItemNode - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - $key = $this->parseObjectShapeKey($tokens); - $optional = $tokens->tryConsumeTokenType(Lexer::TOKEN_NULLABLE); - $tokens->consumeTokenType(Lexer::TOKEN_COLON); - $value = $this->parse($tokens); - - return $this->enrichWithAttributes($tokens, new Ast\Type\ObjectShapeItemNode($key, $optional, $value), $startLine, $startIndex); - } - - /** - * @phpstan-impure - * @return Ast\ConstExpr\ConstExprStringNode|Ast\Type\IdentifierTypeNode - */ - private function parseObjectShapeKey(TokenIterator $tokens) - { - $startLine = $tokens->currentTokenLine(); - $startIndex = $tokens->currentTokenIndex(); - - if ($tokens->isCurrentTokenType(Lexer::TOKEN_SINGLE_QUOTED_STRING)) { - if ($this->quoteAwareConstExprString) { - $key = new Ast\ConstExpr\QuoteAwareConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\QuoteAwareConstExprStringNode::SINGLE_QUOTED); - } else { - $key = new Ast\ConstExpr\ConstExprStringNode(trim($tokens->currentTokenValue(), "'")); - } - $tokens->next(); - - } elseif ($tokens->isCurrentTokenType(Lexer::TOKEN_DOUBLE_QUOTED_STRING)) { - if ($this->quoteAwareConstExprString) { - $key = new Ast\ConstExpr\QuoteAwareConstExprStringNode(StringUnescaper::unescapeString($tokens->currentTokenValue()), Ast\ConstExpr\QuoteAwareConstExprStringNode::DOUBLE_QUOTED); - } else { - $key = new Ast\ConstExpr\ConstExprStringNode(trim($tokens->currentTokenValue(), '"')); - } - $tokens->next(); - - } else { - $key = new Ast\Type\IdentifierTypeNode($tokens->currentTokenValue()); - $tokens->consumeTokenType(Lexer::TOKEN_IDENTIFIER); - } - - return $this->enrichWithAttributes($tokens, $key, $startLine, $startIndex); - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php b/vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php deleted file mode 100644 index 2684dfc..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Printer/DiffElem.php +++ /dev/null @@ -1,44 +0,0 @@ -type = $type; - $this->old = $old; - $this->new = $new; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Printer/Differ.php b/vendor/phpstan/phpdoc-parser/src/Printer/Differ.php deleted file mode 100644 index ab10be5..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Printer/Differ.php +++ /dev/null @@ -1,196 +0,0 @@ -isEqual = $isEqual; - } - - /** - * Calculate diff (edit script) from $old to $new. - * - * @param T[] $old Original array - * @param T[] $new New array - * - * @return DiffElem[] Diff (edit script) - */ - public function diff(array $old, array $new): array - { - [$trace, $x, $y] = $this->calculateTrace($old, $new); - return $this->extractDiff($trace, $x, $y, $old, $new); - } - - /** - * Calculate diff, including "replace" operations. - * - * If a sequence of remove operations is followed by the same number of add operations, these - * will be coalesced into replace operations. - * - * @param T[] $old Original array - * @param T[] $new New array - * - * @return DiffElem[] Diff (edit script), including replace operations - */ - public function diffWithReplacements(array $old, array $new): array - { - return $this->coalesceReplacements($this->diff($old, $new)); - } - - /** - * @param T[] $old - * @param T[] $new - * @return array{array>, int, int} - */ - private function calculateTrace(array $old, array $new): array - { - $n = count($old); - $m = count($new); - $max = $n + $m; - $v = [1 => 0]; - $trace = []; - for ($d = 0; $d <= $max; $d++) { - $trace[] = $v; - for ($k = -$d; $k <= $d; $k += 2) { - if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) { - $x = $v[$k + 1]; - } else { - $x = $v[$k - 1] + 1; - } - - $y = $x - $k; - while ($x < $n && $y < $m && ($this->isEqual)($old[$x], $new[$y])) { - $x++; - $y++; - } - - $v[$k] = $x; - if ($x >= $n && $y >= $m) { - return [$trace, $x, $y]; - } - } - } - throw new Exception('Should not happen'); - } - - /** - * @param array> $trace - * @param T[] $old - * @param T[] $new - * @return DiffElem[] - */ - private function extractDiff(array $trace, int $x, int $y, array $old, array $new): array - { - $result = []; - for ($d = count($trace) - 1; $d >= 0; $d--) { - $v = $trace[$d]; - $k = $x - $y; - - if ($k === -$d || ($k !== $d && $v[$k - 1] < $v[$k + 1])) { - $prevK = $k + 1; - } else { - $prevK = $k - 1; - } - - $prevX = $v[$prevK]; - $prevY = $prevX - $prevK; - - while ($x > $prevX && $y > $prevY) { - $result[] = new DiffElem(DiffElem::TYPE_KEEP, $old[$x - 1], $new[$y - 1]); - $x--; - $y--; - } - - if ($d === 0) { - break; - } - - while ($x > $prevX) { - $result[] = new DiffElem(DiffElem::TYPE_REMOVE, $old[$x - 1], null); - $x--; - } - - while ($y > $prevY) { - $result[] = new DiffElem(DiffElem::TYPE_ADD, null, $new[$y - 1]); - $y--; - } - } - return array_reverse($result); - } - - /** - * Coalesce equal-length sequences of remove+add into a replace operation. - * - * @param DiffElem[] $diff - * @return DiffElem[] - */ - private function coalesceReplacements(array $diff): array - { - $newDiff = []; - $c = count($diff); - for ($i = 0; $i < $c; $i++) { - $diffType = $diff[$i]->type; - if ($diffType !== DiffElem::TYPE_REMOVE) { - $newDiff[] = $diff[$i]; - continue; - } - - $j = $i; - while ($j < $c && $diff[$j]->type === DiffElem::TYPE_REMOVE) { - $j++; - } - - $k = $j; - while ($k < $c && $diff[$k]->type === DiffElem::TYPE_ADD) { - $k++; - } - - if ($j - $i === $k - $j) { - $len = $j - $i; - for ($n = 0; $n < $len; $n++) { - $newDiff[] = new DiffElem( - DiffElem::TYPE_REPLACE, - $diff[$i + $n]->old, - $diff[$j + $n]->new - ); - } - } else { - for (; $i < $k; $i++) { - $newDiff[] = $diff[$i]; - } - } - $i = $k - 1; - } - return $newDiff; - } - -} diff --git a/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php b/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php deleted file mode 100644 index f666598..0000000 --- a/vendor/phpstan/phpdoc-parser/src/Printer/Printer.php +++ /dev/null @@ -1,870 +0,0 @@ - */ - private $differ; - - /** - * Map From "{$class}->{$subNode}" to string that should be inserted - * between elements of this list subnode - * - * @var array - */ - private $listInsertionMap = [ - PhpDocNode::class . '->children' => "\n * ", - UnionTypeNode::class . '->types' => '|', - IntersectionTypeNode::class . '->types' => '&', - ArrayShapeNode::class . '->items' => ', ', - ObjectShapeNode::class . '->items' => ', ', - CallableTypeNode::class . '->parameters' => ', ', - CallableTypeNode::class . '->templateTypes' => ', ', - GenericTypeNode::class . '->genericTypes' => ', ', - ConstExprArrayNode::class . '->items' => ', ', - MethodTagValueNode::class . '->parameters' => ', ', - DoctrineArray::class . '->items' => ', ', - DoctrineAnnotation::class . '->arguments' => ', ', - ]; - - /** - * [$find, $extraLeft, $extraRight] - * - * @var array - */ - private $emptyListInsertionMap = [ - CallableTypeNode::class . '->parameters' => ['(', '', ''], - ArrayShapeNode::class . '->items' => ['{', '', ''], - ObjectShapeNode::class . '->items' => ['{', '', ''], - DoctrineArray::class . '->items' => ['{', '', ''], - DoctrineAnnotation::class . '->arguments' => ['(', '', ''], - ]; - - /** @var array>> */ - private $parenthesesMap = [ - CallableTypeNode::class . '->returnType' => [ - CallableTypeNode::class, - UnionTypeNode::class, - IntersectionTypeNode::class, - ], - ArrayTypeNode::class . '->type' => [ - CallableTypeNode::class, - UnionTypeNode::class, - IntersectionTypeNode::class, - ConstTypeNode::class, - NullableTypeNode::class, - ], - OffsetAccessTypeNode::class . '->type' => [ - CallableTypeNode::class, - UnionTypeNode::class, - IntersectionTypeNode::class, - NullableTypeNode::class, - ], - ]; - - /** @var array>> */ - private $parenthesesListMap = [ - IntersectionTypeNode::class . '->types' => [ - IntersectionTypeNode::class, - UnionTypeNode::class, - NullableTypeNode::class, - ], - UnionTypeNode::class . '->types' => [ - IntersectionTypeNode::class, - UnionTypeNode::class, - NullableTypeNode::class, - ], - ]; - - public function printFormatPreserving(PhpDocNode $node, PhpDocNode $originalNode, TokenIterator $originalTokens): string - { - $this->differ = new Differ(static function ($a, $b) { - if ($a instanceof Node && $b instanceof Node) { - return $a === $b->getAttribute(Attribute::ORIGINAL_NODE); - } - - return false; - }); - - $tokenIndex = 0; - $result = $this->printArrayFormatPreserving( - $node->children, - $originalNode->children, - $originalTokens, - $tokenIndex, - PhpDocNode::class, - 'children' - ); - if ($result !== null) { - return $result . $originalTokens->getContentBetween($tokenIndex, $originalTokens->getTokenCount()); - } - - return $this->print($node); - } - - public function print(Node $node): string - { - if ($node instanceof PhpDocNode) { - return "/**\n *" . implode("\n *", array_map( - function (PhpDocChildNode $child): string { - $s = $this->print($child); - return $s === '' ? '' : ' ' . $s; - }, - $node->children - )) . "\n */"; - } - if ($node instanceof PhpDocTextNode) { - return $node->text; - } - if ($node instanceof PhpDocTagNode) { - if ($node->value instanceof DoctrineTagValueNode) { - return $this->print($node->value); - } - - return trim(sprintf('%s %s', $node->name, $this->print($node->value))); - } - if ($node instanceof PhpDocTagValueNode) { - return $this->printTagValue($node); - } - if ($node instanceof TypeNode) { - return $this->printType($node); - } - if ($node instanceof ConstExprNode) { - return $this->printConstExpr($node); - } - if ($node instanceof MethodTagValueParameterNode) { - $type = $node->type !== null ? $this->print($node->type) . ' ' : ''; - $isReference = $node->isReference ? '&' : ''; - $isVariadic = $node->isVariadic ? '...' : ''; - $default = $node->defaultValue !== null ? ' = ' . $this->print($node->defaultValue) : ''; - return "{$type}{$isReference}{$isVariadic}{$node->parameterName}{$default}"; - } - if ($node instanceof CallableTypeParameterNode) { - $type = $this->print($node->type) . ' '; - $isReference = $node->isReference ? '&' : ''; - $isVariadic = $node->isVariadic ? '...' : ''; - $isOptional = $node->isOptional ? '=' : ''; - return trim("{$type}{$isReference}{$isVariadic}{$node->parameterName}") . $isOptional; - } - if ($node instanceof ArrayShapeUnsealedTypeNode) { - if ($node->keyType !== null) { - return sprintf('<%s, %s>', $this->printType($node->keyType), $this->printType($node->valueType)); - } - return sprintf('<%s>', $this->printType($node->valueType)); - } - if ($node instanceof DoctrineAnnotation) { - return (string) $node; - } - if ($node instanceof DoctrineArgument) { - return (string) $node; - } - if ($node instanceof DoctrineArray) { - return (string) $node; - } - if ($node instanceof DoctrineArrayItem) { - return (string) $node; - } - - throw new LogicException(sprintf('Unknown node type %s', get_class($node))); - } - - private function printTagValue(PhpDocTagValueNode $node): string - { - // only nodes that contain another node are handled here - // the rest falls back on (string) $node - - if ($node instanceof AssertTagMethodValueNode) { - $isNegated = $node->isNegated ? '!' : ''; - $isEquality = $node->isEquality ? '=' : ''; - $type = $this->printType($node->type); - return trim("{$isNegated}{$isEquality}{$type} {$node->parameter}->{$node->method}() {$node->description}"); - } - if ($node instanceof AssertTagPropertyValueNode) { - $isNegated = $node->isNegated ? '!' : ''; - $isEquality = $node->isEquality ? '=' : ''; - $type = $this->printType($node->type); - return trim("{$isNegated}{$isEquality}{$type} {$node->parameter}->{$node->property} {$node->description}"); - } - if ($node instanceof AssertTagValueNode) { - $isNegated = $node->isNegated ? '!' : ''; - $isEquality = $node->isEquality ? '=' : ''; - $type = $this->printType($node->type); - return trim("{$isNegated}{$isEquality}{$type} {$node->parameter} {$node->description}"); - } - if ($node instanceof ExtendsTagValueNode || $node instanceof ImplementsTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->description}"); - } - if ($node instanceof MethodTagValueNode) { - $static = $node->isStatic ? 'static ' : ''; - $returnType = $node->returnType !== null ? $this->printType($node->returnType) . ' ' : ''; - $parameters = implode(', ', array_map(function (MethodTagValueParameterNode $parameter): string { - return $this->print($parameter); - }, $node->parameters)); - $description = $node->description !== '' ? " {$node->description}" : ''; - $templateTypes = count($node->templateTypes) > 0 ? '<' . implode(', ', array_map(function (TemplateTagValueNode $templateTag): string { - return $this->print($templateTag); - }, $node->templateTypes)) . '>' : ''; - return "{$static}{$returnType}{$node->methodName}{$templateTypes}({$parameters}){$description}"; - } - if ($node instanceof MixinTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->description}"); - } - if ($node instanceof RequireExtendsTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->description}"); - } - if ($node instanceof RequireImplementsTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->description}"); - } - if ($node instanceof ParamOutTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->parameterName} {$node->description}"); - } - if ($node instanceof ParamTagValueNode) { - $reference = $node->isReference ? '&' : ''; - $variadic = $node->isVariadic ? '...' : ''; - $type = $this->printType($node->type); - return trim("{$type} {$reference}{$variadic}{$node->parameterName} {$node->description}"); - } - if ($node instanceof ParamImmediatelyInvokedCallableTagValueNode) { - return trim("{$node->parameterName} {$node->description}"); - } - if ($node instanceof ParamLaterInvokedCallableTagValueNode) { - return trim("{$node->parameterName} {$node->description}"); - } - if ($node instanceof ParamClosureThisTagValueNode) { - return trim("{$node->type} {$node->parameterName} {$node->description}"); - } - if ($node instanceof PureUnlessCallableIsImpureTagValueNode) { - return trim("{$node->parameterName} {$node->description}"); - } - if ($node instanceof PropertyTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->propertyName} {$node->description}"); - } - if ($node instanceof ReturnTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->description}"); - } - if ($node instanceof SelfOutTagValueNode) { - $type = $this->printType($node->type); - return trim($type . ' ' . $node->description); - } - if ($node instanceof TemplateTagValueNode) { - $upperBound = $node->bound !== null ? ' of ' . $this->printType($node->bound) : ''; - $lowerBound = $node->lowerBound !== null ? ' super ' . $this->printType($node->lowerBound) : ''; - $default = $node->default !== null ? ' = ' . $this->printType($node->default) : ''; - return trim("{$node->name}{$upperBound}{$lowerBound}{$default} {$node->description}"); - } - if ($node instanceof ThrowsTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->description}"); - } - if ($node instanceof TypeAliasImportTagValueNode) { - return trim( - "{$node->importedAlias} from " . $this->printType($node->importedFrom) - . ($node->importedAs !== null ? " as {$node->importedAs}" : '') - ); - } - if ($node instanceof TypeAliasTagValueNode) { - $type = $this->printType($node->type); - return trim("{$node->alias} {$type}"); - } - if ($node instanceof UsesTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} {$node->description}"); - } - if ($node instanceof VarTagValueNode) { - $type = $this->printType($node->type); - return trim("{$type} " . trim("{$node->variableName} {$node->description}")); - } - - return (string) $node; - } - - private function printType(TypeNode $node): string - { - if ($node instanceof ArrayShapeNode) { - $items = array_map(function (ArrayShapeItemNode $item): string { - return $this->printType($item); - }, $node->items); - - if (! $node->sealed) { - $items[] = '...' . ($node->unsealedType === null ? '' : $this->print($node->unsealedType)); - } - - return $node->kind . '{' . implode(', ', $items) . '}'; - } - if ($node instanceof ArrayShapeItemNode) { - if ($node->keyName !== null) { - return sprintf( - '%s%s: %s', - $this->print($node->keyName), - $node->optional ? '?' : '', - $this->printType($node->valueType) - ); - } - - return $this->printType($node->valueType); - } - if ($node instanceof ArrayTypeNode) { - return $this->printOffsetAccessType($node->type) . '[]'; - } - if ($node instanceof CallableTypeNode) { - if ($node->returnType instanceof CallableTypeNode || $node->returnType instanceof UnionTypeNode || $node->returnType instanceof IntersectionTypeNode) { - $returnType = $this->wrapInParentheses($node->returnType); - } else { - $returnType = $this->printType($node->returnType); - } - $template = $node->templateTypes !== [] - ? '<' . implode(', ', array_map(function (TemplateTagValueNode $templateNode): string { - return $this->print($templateNode); - }, $node->templateTypes)) . '>' - : ''; - $parameters = implode(', ', array_map(function (CallableTypeParameterNode $parameterNode): string { - return $this->print($parameterNode); - }, $node->parameters)); - return "{$node->identifier}{$template}({$parameters}): {$returnType}"; - } - if ($node instanceof ConditionalTypeForParameterNode) { - return sprintf( - '(%s %s %s ? %s : %s)', - $node->parameterName, - $node->negated ? 'is not' : 'is', - $this->printType($node->targetType), - $this->printType($node->if), - $this->printType($node->else) - ); - } - if ($node instanceof ConditionalTypeNode) { - return sprintf( - '(%s %s %s ? %s : %s)', - $this->printType($node->subjectType), - $node->negated ? 'is not' : 'is', - $this->printType($node->targetType), - $this->printType($node->if), - $this->printType($node->else) - ); - } - if ($node instanceof ConstTypeNode) { - return $this->printConstExpr($node->constExpr); - } - if ($node instanceof GenericTypeNode) { - $genericTypes = []; - - foreach ($node->genericTypes as $index => $type) { - $variance = $node->variances[$index] ?? GenericTypeNode::VARIANCE_INVARIANT; - if ($variance === GenericTypeNode::VARIANCE_INVARIANT) { - $genericTypes[] = $this->printType($type); - } elseif ($variance === GenericTypeNode::VARIANCE_BIVARIANT) { - $genericTypes[] = '*'; - } else { - $genericTypes[] = sprintf('%s %s', $variance, $this->print($type)); - } - } - - return $node->type . '<' . implode(', ', $genericTypes) . '>'; - } - if ($node instanceof IdentifierTypeNode) { - return $node->name; - } - if ($node instanceof IntersectionTypeNode || $node instanceof UnionTypeNode) { - $items = []; - foreach ($node->types as $type) { - if ( - $type instanceof IntersectionTypeNode - || $type instanceof UnionTypeNode - || $type instanceof NullableTypeNode - ) { - $items[] = $this->wrapInParentheses($type); - continue; - } - - $items[] = $this->printType($type); - } - - return implode($node instanceof IntersectionTypeNode ? '&' : '|', $items); - } - if ($node instanceof InvalidTypeNode) { - return (string) $node; - } - if ($node instanceof NullableTypeNode) { - if ($node->type instanceof IntersectionTypeNode || $node->type instanceof UnionTypeNode) { - return '?(' . $this->printType($node->type) . ')'; - } - - return '?' . $this->printType($node->type); - } - if ($node instanceof ObjectShapeNode) { - $items = array_map(function (ObjectShapeItemNode $item): string { - return $this->printType($item); - }, $node->items); - - return 'object{' . implode(', ', $items) . '}'; - } - if ($node instanceof ObjectShapeItemNode) { - if ($node->keyName !== null) { - return sprintf( - '%s%s: %s', - $this->print($node->keyName), - $node->optional ? '?' : '', - $this->printType($node->valueType) - ); - } - - return $this->printType($node->valueType); - } - if ($node instanceof OffsetAccessTypeNode) { - return $this->printOffsetAccessType($node->type) . '[' . $this->printType($node->offset) . ']'; - } - if ($node instanceof ThisTypeNode) { - return (string) $node; - } - - throw new LogicException(sprintf('Unknown node type %s', get_class($node))); - } - - private function wrapInParentheses(TypeNode $node): string - { - return '(' . $this->printType($node) . ')'; - } - - private function printOffsetAccessType(TypeNode $type): string - { - if ( - $type instanceof CallableTypeNode - || $type instanceof UnionTypeNode - || $type instanceof IntersectionTypeNode - || $type instanceof NullableTypeNode - ) { - return $this->wrapInParentheses($type); - } - - return $this->printType($type); - } - - private function printConstExpr(ConstExprNode $node): string - { - // this is fine - ConstExprNode classes do not contain nodes that need smart printer logic - return (string) $node; - } - - /** - * @param Node[] $nodes - * @param Node[] $originalNodes - */ - private function printArrayFormatPreserving(array $nodes, array $originalNodes, TokenIterator $originalTokens, int &$tokenIndex, string $parentNodeClass, string $subNodeName): ?string - { - $diff = $this->differ->diffWithReplacements($originalNodes, $nodes); - $mapKey = $parentNodeClass . '->' . $subNodeName; - $insertStr = $this->listInsertionMap[$mapKey] ?? null; - $result = ''; - $beforeFirstKeepOrReplace = true; - $delayedAdd = []; - - $insertNewline = false; - [$isMultiline, $beforeAsteriskIndent, $afterAsteriskIndent] = $this->isMultiline($tokenIndex, $originalNodes, $originalTokens); - - if ($insertStr === "\n * ") { - $insertStr = sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent); - } - - foreach ($diff as $i => $diffElem) { - $diffType = $diffElem->type; - $newNode = $diffElem->new; - $originalNode = $diffElem->old; - if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) { - $beforeFirstKeepOrReplace = false; - if (!$newNode instanceof Node || !$originalNode instanceof Node) { - return null; - } - $itemStartPos = $originalNode->getAttribute(Attribute::START_INDEX); - $itemEndPos = $originalNode->getAttribute(Attribute::END_INDEX); - if ($itemStartPos < 0 || $itemEndPos < 0 || $itemStartPos < $tokenIndex) { - throw new LogicException(); - } - - $result .= $originalTokens->getContentBetween($tokenIndex, $itemStartPos); - - if (count($delayedAdd) > 0) { - foreach ($delayedAdd as $delayedAddNode) { - $parenthesesNeeded = isset($this->parenthesesListMap[$mapKey]) - && in_array(get_class($delayedAddNode), $this->parenthesesListMap[$mapKey], true); - if ($parenthesesNeeded) { - $result .= '('; - } - $result .= $this->printNodeFormatPreserving($delayedAddNode, $originalTokens); - if ($parenthesesNeeded) { - $result .= ')'; - } - - if ($insertNewline) { - $result .= $insertStr . sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent); - } else { - $result .= $insertStr; - } - } - - $delayedAdd = []; - } - - $parenthesesNeeded = isset($this->parenthesesListMap[$mapKey]) - && in_array(get_class($newNode), $this->parenthesesListMap[$mapKey], true) - && !in_array(get_class($originalNode), $this->parenthesesListMap[$mapKey], true); - $addParentheses = $parenthesesNeeded && !$originalTokens->hasParentheses($itemStartPos, $itemEndPos); - if ($addParentheses) { - $result .= '('; - } - - $result .= $this->printNodeFormatPreserving($newNode, $originalTokens); - if ($addParentheses) { - $result .= ')'; - } - $tokenIndex = $itemEndPos + 1; - - } elseif ($diffType === DiffElem::TYPE_ADD) { - if ($insertStr === null) { - return null; - } - if (!$newNode instanceof Node) { - return null; - } - - if ($insertStr === ', ' && $isMultiline) { - $insertStr = ','; - $insertNewline = true; - } - - if ($beforeFirstKeepOrReplace) { - // Will be inserted at the next "replace" or "keep" element - $delayedAdd[] = $newNode; - continue; - } - - $itemEndPos = $tokenIndex - 1; - if ($insertNewline) { - $result .= $insertStr . sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent); - } else { - $result .= $insertStr; - } - - $parenthesesNeeded = isset($this->parenthesesListMap[$mapKey]) - && in_array(get_class($newNode), $this->parenthesesListMap[$mapKey], true); - if ($parenthesesNeeded) { - $result .= '('; - } - - $result .= $this->printNodeFormatPreserving($newNode, $originalTokens); - if ($parenthesesNeeded) { - $result .= ')'; - } - - $tokenIndex = $itemEndPos + 1; - - } elseif ($diffType === DiffElem::TYPE_REMOVE) { - if (!$originalNode instanceof Node) { - return null; - } - - $itemStartPos = $originalNode->getAttribute(Attribute::START_INDEX); - $itemEndPos = $originalNode->getAttribute(Attribute::END_INDEX); - if ($itemStartPos < 0 || $itemEndPos < 0) { - throw new LogicException(); - } - - if ($i === 0) { - // If we're removing from the start, keep the tokens before the node and drop those after it, - // instead of the other way around. - $originalTokensArray = $originalTokens->getTokens(); - for ($j = $tokenIndex; $j < $itemStartPos; $j++) { - if ($originalTokensArray[$j][Lexer::TYPE_OFFSET] === Lexer::TOKEN_PHPDOC_EOL) { - break; - } - $result .= $originalTokensArray[$j][Lexer::VALUE_OFFSET]; - } - } - - $tokenIndex = $itemEndPos + 1; - } - } - - if (count($delayedAdd) > 0) { - if (!isset($this->emptyListInsertionMap[$mapKey])) { - return null; - } - - [$findToken, $extraLeft, $extraRight] = $this->emptyListInsertionMap[$mapKey]; - if ($findToken !== null) { - $originalTokensArray = $originalTokens->getTokens(); - for (; $tokenIndex < count($originalTokensArray); $tokenIndex++) { - $result .= $originalTokensArray[$tokenIndex][Lexer::VALUE_OFFSET]; - if ($originalTokensArray[$tokenIndex][Lexer::VALUE_OFFSET] !== $findToken) { - continue; - } - - $tokenIndex++; - break; - } - } - $first = true; - $result .= $extraLeft; - foreach ($delayedAdd as $delayedAddNode) { - if (!$first) { - $result .= $insertStr; - if ($insertNewline) { - $result .= sprintf('%s%s*%s', $originalTokens->getDetectedNewline() ?? "\n", $beforeAsteriskIndent, $afterAsteriskIndent); - } - } - - $result .= $this->printNodeFormatPreserving($delayedAddNode, $originalTokens); - $first = false; - } - $result .= $extraRight; - } - - return $result; - } - - /** - * @param Node[] $nodes - * @return array{bool, string, string} - */ - private function isMultiline(int $initialIndex, array $nodes, TokenIterator $originalTokens): array - { - $isMultiline = count($nodes) > 1; - $pos = $initialIndex; - $allText = ''; - /** @var Node|null $node */ - foreach ($nodes as $node) { - if (!$node instanceof Node) { - continue; - } - - $endPos = $node->getAttribute(Attribute::END_INDEX) + 1; - $text = $originalTokens->getContentBetween($pos, $endPos); - $allText .= $text; - if (strpos($text, "\n") === false) { - // We require that a newline is present between *every* item. If the formatting - // is inconsistent, with only some items having newlines, we don't consider it - // as multiline - $isMultiline = false; - } - $pos = $endPos; - } - - $c = preg_match_all('~\n(?[\\x09\\x20]*)\*(?\\x20*)~', $allText, $matches, PREG_SET_ORDER); - if ($c === 0) { - return [$isMultiline, '', '']; - } - - $before = ''; - $after = ''; - foreach ($matches as $match) { - if (strlen($match['before']) > strlen($before)) { - $before = $match['before']; - } - if (strlen($match['after']) <= strlen($after)) { - continue; - } - - $after = $match['after']; - } - - return [$isMultiline, $before, $after]; - } - - private function printNodeFormatPreserving(Node $node, TokenIterator $originalTokens): string - { - /** @var Node|null $originalNode */ - $originalNode = $node->getAttribute(Attribute::ORIGINAL_NODE); - if ($originalNode === null) { - return $this->print($node); - } - - $class = get_class($node); - if ($class !== get_class($originalNode)) { - throw new LogicException(); - } - - $startPos = $originalNode->getAttribute(Attribute::START_INDEX); - $endPos = $originalNode->getAttribute(Attribute::END_INDEX); - if ($startPos < 0 || $endPos < 0) { - throw new LogicException(); - } - - $result = ''; - $pos = $startPos; - $subNodeNames = array_keys(get_object_vars($node)); - foreach ($subNodeNames as $subNodeName) { - $subNode = $node->$subNodeName; - $origSubNode = $originalNode->$subNodeName; - - if ( - (!$subNode instanceof Node && $subNode !== null) - || (!$origSubNode instanceof Node && $origSubNode !== null) - ) { - if ($subNode === $origSubNode) { - // Unchanged, can reuse old code - continue; - } - - if (is_array($subNode) && is_array($origSubNode)) { - // Array subnode changed, we might be able to reconstruct it - $listResult = $this->printArrayFormatPreserving( - $subNode, - $origSubNode, - $originalTokens, - $pos, - $class, - $subNodeName - ); - - if ($listResult === null) { - return $this->print($node); - } - - $result .= $listResult; - continue; - } - - return $this->print($node); - } - - if ($origSubNode === null) { - if ($subNode === null) { - // Both null, nothing to do - continue; - } - - return $this->print($node); - } - - $subStartPos = $origSubNode->getAttribute(Attribute::START_INDEX); - $subEndPos = $origSubNode->getAttribute(Attribute::END_INDEX); - if ($subStartPos < 0 || $subEndPos < 0) { - throw new LogicException(); - } - - if ($subEndPos < $subStartPos) { - return $this->print($node); - } - - if ($subNode === null) { - return $this->print($node); - } - - $result .= $originalTokens->getContentBetween($pos, $subStartPos); - $mapKey = get_class($node) . '->' . $subNodeName; - $parenthesesNeeded = isset($this->parenthesesMap[$mapKey]) - && in_array(get_class($subNode), $this->parenthesesMap[$mapKey], true); - - if ($subNode->getAttribute(Attribute::ORIGINAL_NODE) !== null) { - $parenthesesNeeded = $parenthesesNeeded - && !in_array(get_class($subNode->getAttribute(Attribute::ORIGINAL_NODE)), $this->parenthesesMap[$mapKey], true); - } - - $addParentheses = $parenthesesNeeded && !$originalTokens->hasParentheses($subStartPos, $subEndPos); - if ($addParentheses) { - $result .= '('; - } - - $result .= $this->printNodeFormatPreserving($subNode, $originalTokens); - if ($addParentheses) { - $result .= ')'; - } - - $pos = $subEndPos + 1; - } - - return $result . $originalTokens->getContentBetween($pos, $endPos + 1); - } - -} diff --git a/vendor/phpunit/php-code-coverage/ChangeLog-9.2.md b/vendor/phpunit/php-code-coverage/ChangeLog-9.2.md deleted file mode 100644 index 5176ae3..0000000 --- a/vendor/phpunit/php-code-coverage/ChangeLog-9.2.md +++ /dev/null @@ -1,584 +0,0 @@ -# ChangeLog - -All notable changes are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles. - -## [9.2.32] - 2024-08-22 - -### Changed - -* Updated dependencies (so that users that install using Composer's `--prefer-lowest` CLI option also get recent versions) - -## [9.2.31] - 2024-03-02 - -### Changed - -* Do not use implicitly nullable parameters - -## [9.2.30] - 2023-12-22 - -### Changed - -* This component is now compatible with `nikic/php-parser` 5.0 - -## [9.2.29] - 2023-09-19 - -### Fixed - -* [#1012](https://github.com/sebastianbergmann/php-code-coverage/issues/1012): Cobertura report pulls functions from report scope, not the individual element - -## [9.2.28] - 2023-09-12 - -### Changed - -* [#1011](https://github.com/sebastianbergmann/php-code-coverage/pull/1011): Avoid serialization of cache data in PHP report - -## [9.2.27] - 2023-07-26 - -### Changed - -* The result of `CodeCoverage::getReport()` is now cached - -### Fixed - -* Static analysis cache keys do not include configuration settings that affect source code parsing -* The Clover, Cobertura, Crap4j, and PHP report writers no longer create a `php:` directory when they should write to `php://stdout`, for instance - -## [9.2.26] - 2023-03-06 - -### Changed - -* Improved the legend on the file pages of the HTML code coverage report - -## [9.2.25] - 2023-02-25 - -### Fixed - -* [#981](https://github.com/sebastianbergmann/php-code-coverage/issues/981): `CodeUnitFindingVisitor` does not support DNF types - -## [9.2.24] - 2023-01-26 - -### Changed - -* [#970](https://github.com/sebastianbergmann/php-code-coverage/issues/970): CSS and JavaScript assets are now referenced using `?v=%s` URLs in the HTML report to avoid cache issues - -## [9.2.23] - 2022-12-28 - -### Fixed - -* [#971](https://github.com/sebastianbergmann/php-code-coverage/issues/971): PHP report does not handle serialized code coverage data larger than 2 GB -* [#974](https://github.com/sebastianbergmann/php-code-coverage/issues/974): Executable line analysis fails for declarations with enumerations and unions - -## [9.2.22] - 2022-12-18 - -### Fixed - -* [#969](https://github.com/sebastianbergmann/php-code-coverage/pull/969): Fixed identifying line with `throw` as executable - -## [9.2.21] - 2022-12-14 - -### Changed - -* [#964](https://github.com/sebastianbergmann/php-code-coverage/pull/964): Changed how executable lines are identified - -## [9.2.20] - 2022-12-13 - -### Fixed - -* [#960](https://github.com/sebastianbergmann/php-code-coverage/issues/960): New body font-size is way too big - -## [9.2.19] - 2022-11-18 - -### Fixed - -* [#949](https://github.com/sebastianbergmann/php-code-coverage/pull/949): Various issues related to identifying executable lines - -### Changed - -* Tweaked CSS for HTML report -* Updated bundled CSS/JavaScript components used for HTML report: Bootstrap 4.6.2 and jQuery 3.6.1 - -## [9.2.18] - 2022-10-27 - -### Fixed - -* [#935](https://github.com/sebastianbergmann/php-code-coverage/pull/935): Cobertura package name attribute is always empty -* [#946](https://github.com/sebastianbergmann/php-code-coverage/issues/946): `return` with multiline constant expression must only contain the last line - -## [9.2.17] - 2022-08-30 - -### Changed - -* [#928](https://github.com/sebastianbergmann/php-code-coverage/pull/928): Avoid unnecessary `is_file()` calls -* [#931](https://github.com/sebastianbergmann/php-code-coverage/pull/931): Use MD5 instead of CRC32 for static analysis cache file identifier - -### Fixed - -* [#926](https://github.com/sebastianbergmann/php-code-coverage/pull/926): Static Analysis cache does not work with `open_basedir` - -## [9.2.16] - 2022-08-20 - -### Fixed - -* [#926](https://github.com/sebastianbergmann/php-code-coverage/issues/926): File view has wrong colouring for the first column - -## [9.2.15] - 2022-03-07 - -### Fixed - -* [#885](https://github.com/sebastianbergmann/php-code-coverage/issues/885): Files that have only `\r` (CR, 0x0d) EOL characters are not handled correctly -* [#907](https://github.com/sebastianbergmann/php-code-coverage/issues/907): Line with only `return [` is not recognized as executable - -## [9.2.14] - 2022-02-28 - -### Fixed - -* [#904](https://github.com/sebastianbergmann/php-code-coverage/issues/904): Lines of code containing the `match` keyword were not recognized as executable correctly -* [#905](https://github.com/sebastianbergmann/php-code-coverage/issues/905): Lines of code in constructors were not recognized as executable correctly when constructor property promotion is used - -## [9.2.13] - 2022-02-23 - -### Changed - -* The contents of the static analysis sourcecode files is now used to generate the static analysis cache version identifier - -### Fixed - -* Reverted rename of `SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData` to `SebastianBergmann\CodeCoverage\Data\ProcessedCodeCoverageData` (this class is marked as `@internal` and not covered by the backward compatibility promise, but it is (still) used directly by PHPUnit) -* Reverted rename of `SebastianBergmann\CodeCoverage\RawCodeCoverageData` to `SebastianBergmann\CodeCoverage\Data\RawCodeCoverageData` (this class is marked as `@internal` and not covered by the backward compatibility promise, but it is (still) used directly by PHPUnit) -* The `ArrayDim`, `Cast`, and `MethodCall` nodes are now considered when determining whether a line of code is executable or not - -## [9.2.12] - 2022-02-23 [YANKED] - -### Changed - -* [#898](https://github.com/sebastianbergmann/php-code-coverage/pull/898): Use content hash instead of `filemtime()` to determine cache hit/miss - -### Fixed - -* [#736](https://github.com/sebastianbergmann/php-code-coverage/issues/736): HTML report generator allows invalid values for low upper bound and high lower bound -* [#854](https://github.com/sebastianbergmann/php-code-coverage/issues/854): "Class Coverage Distribution" and "Class Complexity" graphs are not displayed at full width -* [#897](https://github.com/sebastianbergmann/php-code-coverage/issues/897): `declare(strict_types=1)` marked as uncovered - -## [9.2.11] - 2022-02-18 - -### Changed - -* `CoveredFileAnalyser` and `UncoveredFileAnalyser` have been combined to `FileAnalyser` -* Updated bundled CSS/JavaScript components used for HTML report: Bootstrap 4.6.1, jQuery 3.6.0, and popper.js 1.16.1 - -### Fixed - -* [#889](https://github.com/sebastianbergmann/php-code-coverage/issues/889): Code Coverage depends on autoload order - -## [9.2.10] - 2021-12-05 - -### Fixed - -* [#887](https://github.com/sebastianbergmann/php-code-coverage/issues/887): Document return type of `CodeUnitFindingVisitor::enterNode()` so that Symfony's DebugClassLoader does not trigger a deprecation warning - -## [9.2.9] - 2021-11-19 - -### Fixed - -* [#882](https://github.com/sebastianbergmann/php-code-coverage/issues/882): PHPUnit 9.2.8 has wrong version number - -## [9.2.8] - 2021-10-30 - -### Fixed - -* [#866](https://github.com/sebastianbergmann/php-code-coverage/issues/866): `CodeUnitFindingVisitor` does not handle `enum` type introduced in PHP 8.1 -* [#868](https://github.com/sebastianbergmann/php-code-coverage/pull/868): Uncovered files should be ignored unless requested -* [#876](https://github.com/sebastianbergmann/php-code-coverage/issues/876): PCOV driver causes 2x slowdown after upgrade to PHPUnit 9.5 - -## [9.2.7] - 2021-09-17 - -### Fixed - -* [#860](https://github.com/sebastianbergmann/php-code-coverage/pull/860): Empty value for `XDEBUG_MODE` environment variable is not handled correctly - -## [9.2.6] - 2021-03-28 - -### Fixed - -* [#846](https://github.com/sebastianbergmann/php-code-coverage/issues/846): Method name should not appear in the method signature attribute of Cobertura XML - -## [9.2.5] - 2020-11-28 - -### Fixed - -* [#831](https://github.com/sebastianbergmann/php-code-coverage/issues/831): Files that do not contain a newline are not handled correctly - -## [9.2.4] - 2020-11-27 - -### Added - -* [#834](https://github.com/sebastianbergmann/php-code-coverage/issues/834): Support `XDEBUG_MODE` environment variable - -## [9.2.3] - 2020-10-30 - -### Changed - -* Bumped required version of `nikic/php-parser` - -## [9.2.2] - 2020-10-28 - -### Fixed - -* [#820](https://github.com/sebastianbergmann/php-code-coverage/issues/820): Hidden dependency on PHPUnit - -## [9.2.1] - 2020-10-26 - -### Fixed - -* `SebastianBergmann\CodeCoverage\Exception` now correctly extends `\Throwable` - -## [9.2.0] - 2020-10-02 - -### Added - -* [#812](https://github.com/sebastianbergmann/php-code-coverage/pull/812): Support for Cobertura XML report format - -### Changed - -* Reduced the number of I/O operations performed by the static analysis cache - -## [9.1.11] - 2020-09-19 - -### Fixed - -* [#811](https://github.com/sebastianbergmann/php-code-coverage/issues/811): `T_FN` constant is used on PHP 7.3 where it is not available - -## [9.1.10] - 2020-09-18 - -### Added - -* `SebastianBergmann\CodeCoverage\Driver\Selector::forLineCoverage()` and `SebastianBergmann\CodeCoverage\Driver\Selector::forLineAndPathCoverage()` have been added - -### Fixed - -* [#810](https://github.com/sebastianbergmann/php-code-coverage/issues/810): `SebastianBergmann\CodeCoverage\Driver\Driver::forLineCoverage()` and `SebastianBergmann\CodeCoverage\Driver\Driver::forLineAndPathCoverage()` are marked as internal - -### Removed - -* `SebastianBergmann\CodeCoverage\Driver\Driver::forLineCoverage()` and `SebastianBergmann\CodeCoverage\Driver\Driver::forLineAndPathCoverage()` are now deprecated - -## [9.1.9] - 2020-09-15 - -### Fixed - -* [#808](https://github.com/sebastianbergmann/php-code-coverage/issues/808): `PHP Warning: Use of undefined constant T_MATCH` - -## [9.1.8] - 2020-09-07 - -### Changed - -* [#800](https://github.com/sebastianbergmann/php-code-coverage/pull/800): All files on the inclusion list are no longer loaded when `SebastianBergmann\CodeCoverage::start()` is called for the first time and `processUncoveredFiles` is set to `true` - -### Fixed - -* [#799](https://github.com/sebastianbergmann/php-code-coverage/issues/799): Uncovered new line at end of file - -## [9.1.7] - 2020-09-03 - -### Fixed - -* Fixed regressions introduced in versions 9.1.5 and 9.1.6 - -## [9.1.6] - 2020-08-31 - -### Fixed - -* [#799](https://github.com/sebastianbergmann/php-code-coverage/issues/799): Uncovered new line at end of file -* [#803](https://github.com/sebastianbergmann/php-code-coverage/issues/803): HTML report does not sort directories and files anymore - -## [9.1.5] - 2020-08-27 - -### Changed - -* [#800](https://github.com/sebastianbergmann/php-code-coverage/pull/800): All files on the inclusion list are no longer loaded when `SebastianBergmann\CodeCoverage::start()` is called for the first time and `processUncoveredFiles` is set to `true` - -### Fixed - -* [#797](https://github.com/sebastianbergmann/php-code-coverage/pull/797): Class name is wrongly removed from namespace name - -## [9.1.4] - 2020-08-13 - -### Fixed - -* [#793](https://github.com/sebastianbergmann/php-code-coverage/issues/793): Lines with `::class` constant are not covered - -## [9.1.3] - 2020-08-10 - -### Changed - -* Changed PHP-Parser usage to parse sourcecode according to the PHP version we are currently running on instead of using emulative lexing - -## [9.1.2] - 2020-08-10 - -### Fixed - -* [#791](https://github.com/sebastianbergmann/php-code-coverage/pull/791): Cache Warmer does not warm all caches - -## [9.1.1] - 2020-08-10 - -### Added - -* Added `SebastianBergmann\CodeCoverage::cacheDirectory()` method for querying where the cache writes its files - -## [9.1.0] - 2020-08-10 - -### Added - -* Implemented a persistent cache for information gathered using PHP-Parser based static analysis (hereinafter referred to as "cache") -* Added `SebastianBergmann\CodeCoverage::cacheStaticAnalysis(string $cacheDirectory)` method for enabling the cache; it will write its files to `$directory` -* Added `SebastianBergmann\CodeCoverage::doNotCacheStaticAnalysis` method for disabling the cache -* Added `SebastianBergmann\CodeCoverage::cachesStaticAnalysis()` method for querying whether the cache is enabled -* Added `SebastianBergmann\CodeCoverage\StaticAnalysis\CacheWarmer::warmCache()` method for warming the cache - -## [9.0.0] - 2020-08-07 - -### Added - -* [#761](https://github.com/sebastianbergmann/php-code-coverage/pull/761): Support for Branch Coverage and Path Coverage -* Added `SebastianBergmann\CodeCoverage\Driver\Driver::forLineCoverage()` for selecting the best available driver for line coverage -* Added `SebastianBergmann\CodeCoverage\Driver\Driver::forLineAndPathCoverage()` for selecting the best available driver for path coverage -* This component is now supported on PHP 8 -* This component now supports Xdebug 3 - -### Changed - -* [#746](https://github.com/sebastianbergmann/php-code-coverage/pull/746): Remove some ancient workarounds for very old Xdebug versions -* [#747](https://github.com/sebastianbergmann/php-code-coverage/pull/747): Use native filtering in PCOV and Xdebug drivers -* [#748](https://github.com/sebastianbergmann/php-code-coverage/pull/748): Store raw code coverage in value objects instead of arrays -* [#749](https://github.com/sebastianbergmann/php-code-coverage/pull/749): Store processed code coverage in value objects instead of arrays -* [#752](https://github.com/sebastianbergmann/php-code-coverage/pull/752): Rework how code coverage settings are propagated to the driver -* [#754](https://github.com/sebastianbergmann/php-code-coverage/pull/754): Implement collection of raw branch and path coverage -* [#755](https://github.com/sebastianbergmann/php-code-coverage/pull/755): Implement processing of raw branch and path coverage -* [#756](https://github.com/sebastianbergmann/php-code-coverage/pull/756): Improve handling of uncovered files -* `SebastianBergmann\CodeCoverage\Filter::addDirectoryToWhitelist()` has been renamed to `SebastianBergmann\CodeCoverage\Filter::includeDirectory()` -* `SebastianBergmann\CodeCoverage\Filter::addFilesToWhitelist()` has been renamed to `SebastianBergmann\CodeCoverage\Filter::includeFiles()` -* `SebastianBergmann\CodeCoverage\Filter::addFileToWhitelist()` has been renamed to `SebastianBergmann\CodeCoverage\Filter::includeFile()` -* `SebastianBergmann\CodeCoverage\Filter::removeDirectoryFromWhitelist()` has been renamed to `SebastianBergmann\CodeCoverage\Filter::excludeDirectory()` -* `SebastianBergmann\CodeCoverage\Filter::removeFileFromWhitelist()` has been renamed to `SebastianBergmann\CodeCoverage\Filter::excludeFile()` -* `SebastianBergmann\CodeCoverage\Filter::isFiltered()` has been renamed to `SebastianBergmann\CodeCoverage\Filter::isExcluded()` -* `SebastianBergmann\CodeCoverage\Filter::getWhitelist()` has been renamed to `SebastianBergmann\CodeCoverage\Filter::files()` -* The arguments for `CodeCoverage::__construct()` are no longer optional - -### Fixed - -* [#700](https://github.com/sebastianbergmann/php-code-coverage/pull/700): Throw an exception if code coverage fails to write to disk - -### Removed - -* `SebastianBergmann\CodeCoverage\CodeCoverage::setCacheTokens()` and `SebastianBergmann\CodeCoverage\CodeCoverage::getCacheTokens()` have been removed -* `SebastianBergmann\CodeCoverage\CodeCoverage::setCheckForUnintentionallyCoveredCode()` has been removed, please use `SebastianBergmann\CodeCoverage\CodeCoverage::enableCheckForUnintentionallyCoveredCode()` or `SebastianBergmann\CodeCoverage\CodeCoverage::disableCheckForUnintentionallyCoveredCode()` instead -* `SebastianBergmann\CodeCoverage\CodeCoverage::setSubclassesExcludedFromUnintentionallyCoveredCodeCheck()` has been removed, please use `SebastianBergmann\CodeCoverage\CodeCoverage::excludeSubclassesOfThisClassFromUnintentionallyCoveredCodeCheck()` instead -* `SebastianBergmann\CodeCoverage\CodeCoverage::setAddUncoveredFilesFromWhitelist()` has been removed, please use `SebastianBergmann\CodeCoverage\CodeCoverage::includeUncoveredFiles()` or `SebastianBergmann\CodeCoverage\CodeCoverage::excludeUncoveredFiles()` instead -* `SebastianBergmann\CodeCoverage\CodeCoverage::setProcessUncoveredFiles()` has been removed, please use `SebastianBergmann\CodeCoverage\CodeCoverage::processUncoveredFiles()` or `SebastianBergmann\CodeCoverage\CodeCoverage::doNotProcessUncoveredFiles()` instead -* `SebastianBergmann\CodeCoverage\CodeCoverage::setIgnoreDeprecatedCode()` has been removed, please use `SebastianBergmann\CodeCoverage\CodeCoverage::ignoreDeprecatedCode()` or `SebastianBergmann\CodeCoverage\CodeCoverage::doNotIgnoreDeprecatedCode()` instead -* `SebastianBergmann\CodeCoverage\CodeCoverage::setDisableIgnoredLines()` has been removed, please use `SebastianBergmann\CodeCoverage\CodeCoverage::enableAnnotationsForIgnoringCode()` or `SebastianBergmann\CodeCoverage\CodeCoverage::disableAnnotationsForIgnoringCode()` instead -* `SebastianBergmann\CodeCoverage\CodeCoverage::setCheckForMissingCoversAnnotation()` has been removed -* `SebastianBergmann\CodeCoverage\CodeCoverage::setCheckForUnexecutedCoveredCode()` has been removed -* `SebastianBergmann\CodeCoverage\CodeCoverage::setForceCoversAnnotation()` has been removed -* `SebastianBergmann\CodeCoverage\Filter::hasWhitelist()` has been removed, please use `SebastianBergmann\CodeCoverage\Filter::isEmpty()` instead -* `SebastianBergmann\CodeCoverage\Filter::getWhitelistedFiles()` has been removed -* `SebastianBergmann\CodeCoverage\Filter::setWhitelistedFiles()` has been removed - -## [8.0.2] - 2020-05-23 - -### Fixed - -* [#750](https://github.com/sebastianbergmann/php-code-coverage/pull/750): Inconsistent handling of namespaces -* [#751](https://github.com/sebastianbergmann/php-code-coverage/pull/751): Dead code is not highlighted correctly -* [#753](https://github.com/sebastianbergmann/php-code-coverage/issues/753): Do not use `$_SERVER['REQUEST_TIME']` because the test(ed) code might unset it - -## [8.0.1] - 2020-02-19 - -### Fixed - -* [#731](https://github.com/sebastianbergmann/php-code-coverage/pull/731): Confusing footer in the HTML report - -## [8.0.0] - 2020-02-07 - -### Fixed - -* [#721](https://github.com/sebastianbergmann/php-code-coverage/pull/721): Workaround for PHP bug [#79191](https://bugs.php.net/bug.php?id=79191) - -### Removed - -* This component is no longer supported on PHP 7.2 - -## [7.0.15] - 2021-07-26 - -### Changed - -* Bumped required version of php-token-stream - -## [7.0.14] - 2020-12-02 - -### Changed - -* [#837](https://github.com/sebastianbergmann/php-code-coverage/issues/837): Allow version 4 of php-token-stream - -## [7.0.13] - 2020-11-30 - -### Changed - -* Changed PHP version constraint in `composer.json` from `^7.2` to `>=7.2` to allow installation of this version of this library on PHP 8. However, this version of this library does not work on PHP 8. PHPUnit 8.5, which uses this version of this library, does not call into this library and instead shows a message that code coverage functionality is not available for PHPUnit 8.5 on PHP 8. - -## [7.0.12] - 2020-11-27 - -### Added - -* [#834](https://github.com/sebastianbergmann/php-code-coverage/issues/834): Support `XDEBUG_MODE` environment variable - -## [7.0.11] - 2020-11-27 - -### Added - -* Support for Xdebug 3 - -## [7.0.10] - 2019-11-20 - -### Fixed - -* [#710](https://github.com/sebastianbergmann/php-code-coverage/pull/710): Code Coverage does not work in PhpStorm - -## [7.0.9] - 2019-11-20 - -### Changed - -* [#709](https://github.com/sebastianbergmann/php-code-coverage/pull/709): Prioritize PCOV over Xdebug - -## [7.0.8] - 2019-09-17 - -### Changed - -* Updated bundled CSS/JavaScript components used for HTML report: Bootstrap 4.3.1, jQuery 3.4.1, and popper.js 1.15.0 - -## [7.0.7] - 2019-07-25 - -### Changed - -* Bumped required version of php-token-stream - -## [7.0.6] - 2019-07-08 - -### Changed - -* Bumped required version of php-token-stream - -## [7.0.5] - 2019-06-06 - -### Fixed - -* [#681](https://github.com/sebastianbergmann/php-code-coverage/pull/681): `use function` statements are not ignored - -## [7.0.4] - 2019-05-29 - -### Fixed - -* [#682](https://github.com/sebastianbergmann/php-code-coverage/pull/682): Code that is not executed is reported as being executed when using PCOV - -## [7.0.3] - 2019-02-26 - -### Fixed - -* [#671](https://github.com/sebastianbergmann/php-code-coverage/issues/671): `TypeError` when directory name is a number - -## [7.0.2] - 2019-02-15 - -### Changed - -* Updated bundled CSS/JavaScript components used for HTML report: Bootstrap 4.3.0 - -### Fixed - -* [#667](https://github.com/sebastianbergmann/php-code-coverage/pull/667): `TypeError` in PHP reporter - -## [7.0.1] - 2019-02-01 - -### Fixed - -* [#664](https://github.com/sebastianbergmann/php-code-coverage/issues/664): `TypeError` when whitelisted file does not exist - -## [7.0.0] - 2019-02-01 - -### Added - -* [#663](https://github.com/sebastianbergmann/php-code-coverage/pull/663): Support for PCOV - -### Fixed - -* [#654](https://github.com/sebastianbergmann/php-code-coverage/issues/654): HTML report fails to load assets -* [#655](https://github.com/sebastianbergmann/php-code-coverage/issues/655): Popin pops in outside of screen - -### Removed - -* This component is no longer supported on PHP 7.1 - -[9.2.32]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.31...9.2.32 -[9.2.31]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.30...9.2.31 -[9.2.30]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.29...9.2.30 -[9.2.29]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.28...9.2.29 -[9.2.28]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.27...9.2.28 -[9.2.27]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.26...9.2.27 -[9.2.26]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.25...9.2.26 -[9.2.25]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.24...9.2.25 -[9.2.24]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.23...9.2.24 -[9.2.23]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.22...9.2.23 -[9.2.22]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.21...9.2.22 -[9.2.21]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.20...9.2.21 -[9.2.20]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.19...9.2.20 -[9.2.19]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.18...9.2.19 -[9.2.18]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.17...9.2.18 -[9.2.17]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.16...9.2.17 -[9.2.16]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.15...9.2.16 -[9.2.15]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.14...9.2.15 -[9.2.14]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.13...9.2.14 -[9.2.13]: https://github.com/sebastianbergmann/php-code-coverage/compare/c011a0b6aaa4acd2f39b7f51fb4ad4442b6ec631...9.2.13 -[9.2.12]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.11...c011a0b6aaa4acd2f39b7f51fb4ad4442b6ec631 -[9.2.11]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.10...9.2.11 -[9.2.10]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.9...9.2.10 -[9.2.9]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.8...9.2.9 -[9.2.8]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.7...9.2.8 -[9.2.7]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.6...9.2.7 -[9.2.6]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.5...9.2.6 -[9.2.5]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.4...9.2.5 -[9.2.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.3...9.2.4 -[9.2.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.2...9.2.3 -[9.2.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.1...9.2.2 -[9.2.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.2.0...9.2.1 -[9.2.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.11...9.2.0 -[9.1.11]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.10...9.1.11 -[9.1.10]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.9...9.1.10 -[9.1.9]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.8...9.1.9 -[9.1.8]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.7...9.1.8 -[9.1.7]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.6...9.1.7 -[9.1.6]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.5...9.1.6 -[9.1.5]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.4...9.1.5 -[9.1.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.3...9.1.4 -[9.1.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.2...9.1.3 -[9.1.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.1...9.1.2 -[9.1.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.1.0...9.1.1 -[9.1.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/9.0.0...9.1.0 -[9.0.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/8.0...9.0.0 -[8.0.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/8.0.1...8.0.2 -[8.0.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/8.0.0...8.0.1 -[8.0.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.10...8.0.0 -[7.0.15]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.14...7.0.15 -[7.0.14]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.13...7.0.14 -[7.0.13]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.12...7.0.13 -[7.0.12]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.11...7.0.12 -[7.0.11]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.10...7.0.11 -[7.0.10]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.9...7.0.10 -[7.0.9]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.8...7.0.9 -[7.0.8]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.7...7.0.8 -[7.0.7]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.6...7.0.7 -[7.0.6]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.5...7.0.6 -[7.0.5]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.4...7.0.5 -[7.0.4]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.3...7.0.4 -[7.0.3]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.2...7.0.3 -[7.0.2]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.1...7.0.2 -[7.0.1]: https://github.com/sebastianbergmann/php-code-coverage/compare/7.0.0...7.0.1 -[7.0.0]: https://github.com/sebastianbergmann/php-code-coverage/compare/6.1.4...7.0.0 diff --git a/vendor/phpunit/php-code-coverage/README.md b/vendor/phpunit/php-code-coverage/README.md deleted file mode 100644 index 53ce9b3..0000000 --- a/vendor/phpunit/php-code-coverage/README.md +++ /dev/null @@ -1,48 +0,0 @@ -# phpunit/php-code-coverage - -[![Latest Stable Version](https://poser.pugx.org/phpunit/php-code-coverage/v/stable.png)](https://packagist.org/packages/phpunit/php-code-coverage) -[![CI Status](https://github.com/sebastianbergmann/php-code-coverage/workflows/CI/badge.svg)](https://github.com/sebastianbergmann/php-code-coverage/actions) -[![Type Coverage](https://shepherd.dev/github/sebastianbergmann/php-code-coverage/coverage.svg)](https://shepherd.dev/github/sebastianbergmann/php-code-coverage) - -Provides collection, processing, and rendering functionality for PHP code coverage information. - -## Installation - -You can add this library as a local, per-project dependency to your project using [Composer](https://getcomposer.org/): - -``` -composer require phpunit/php-code-coverage -``` - -If you only need this library during development, for instance to run your project's test suite, then you should add it as a development-time dependency: - -``` -composer require --dev phpunit/php-code-coverage -``` - -## Usage - -```php -includeDirectory('/path/to/directory'); - -$coverage = new CodeCoverage( - (new Selector)->forLineCoverage($filter), - $filter -); - -$coverage->start(''); - -// ... - -$coverage->stop(); - - -(new HtmlReport)->process($coverage, '/tmp/code-coverage-report'); -``` diff --git a/vendor/phpunit/php-code-coverage/build/scripts/extract-release-notes.php b/vendor/phpunit/php-code-coverage/build/scripts/extract-release-notes.php deleted file mode 100755 index 3901439..0000000 --- a/vendor/phpunit/php-code-coverage/build/scripts/extract-release-notes.php +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/env php -' . PHP_EOL; - - exit(1); -} - -$version = $argv[1]; -$versionSeries = explode('.', $version)[0] . '.' . explode('.', $version)[1]; - -$file = __DIR__ . '/../../ChangeLog-' . $versionSeries . '.md'; - -if (!is_file($file) || !is_readable($file)) { - print $file . ' cannot be read' . PHP_EOL; - - exit(1); -} - -$buffer = ''; -$append = false; - -foreach (file($file) as $line) { - if (str_starts_with($line, '## [' . $version . ']')) { - $append = true; - - continue; - } - - if ($append && (str_starts_with($line, '## ') || str_starts_with($line, '['))) { - break; - } - - if ($append) { - $buffer .= $line; - } -} - -$buffer = trim($buffer); - -if ($buffer === '') { - print 'Unable to extract release notes' . PHP_EOL; - - exit(1); -} - -print $buffer . PHP_EOL; diff --git a/vendor/phpunit/php-code-coverage/composer.json b/vendor/phpunit/php-code-coverage/composer.json deleted file mode 100644 index f9fd361..0000000 --- a/vendor/phpunit/php-code-coverage/composer.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "phpunit/php-code-coverage", - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "type": "library", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "license": "BSD-3-Clause", - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy" - }, - "config": { - "platform": { - "php": "7.3.0" - }, - "optimize-autoloader": true, - "sort-packages": true - }, - "prefer-stable": true, - "require": { - "php": ">=7.3", - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.19.1 || ^5.1.0", - "phpunit/php-file-iterator": "^3.0.6", - "phpunit/php-text-template": "^2.0.4", - "sebastian/code-unit-reverse-lookup": "^2.0.3", - "sebastian/complexity": "^2.0.3", - "sebastian/environment": "^5.1.5", - "sebastian/lines-of-code": "^1.0.4", - "sebastian/version": "^3.0.2", - "theseer/tokenizer": "^1.2.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.6" - }, - "suggest": { - "ext-pcov": "PHP extension that provides line coverage", - "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "autoload-dev": { - "files": [ - "tests/TestCase.php", - "tests/_files/BankAccountTest.php" - ] - }, - "extra": { - "branch-alias": { - "dev-main": "9.2.x-dev" - } - } -} diff --git a/vendor/phpunit/php-code-coverage/src/CodeCoverage.php b/vendor/phpunit/php-code-coverage/src/CodeCoverage.php deleted file mode 100644 index ba4f1f8..0000000 --- a/vendor/phpunit/php-code-coverage/src/CodeCoverage.php +++ /dev/null @@ -1,709 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use function array_diff; -use function array_diff_key; -use function array_flip; -use function array_keys; -use function array_merge; -use function array_unique; -use function array_values; -use function count; -use function explode; -use function get_class; -use function is_array; -use function sort; -use PHPUnit\Framework\TestCase; -use PHPUnit\Runner\PhptTestCase; -use PHPUnit\Util\Test; -use ReflectionClass; -use SebastianBergmann\CodeCoverage\Driver\Driver; -use SebastianBergmann\CodeCoverage\Node\Builder; -use SebastianBergmann\CodeCoverage\Node\Directory; -use SebastianBergmann\CodeCoverage\StaticAnalysis\CachingFileAnalyser; -use SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; -use SebastianBergmann\CodeCoverage\StaticAnalysis\ParsingFileAnalyser; -use SebastianBergmann\CodeUnitReverseLookup\Wizard; - -/** - * Provides collection functionality for PHP code coverage information. - */ -final class CodeCoverage -{ - private const UNCOVERED_FILES = 'UNCOVERED_FILES'; - - /** - * @var Driver - */ - private $driver; - - /** - * @var Filter - */ - private $filter; - - /** - * @var Wizard - */ - private $wizard; - - /** - * @var bool - */ - private $checkForUnintentionallyCoveredCode = false; - - /** - * @var bool - */ - private $includeUncoveredFiles = true; - - /** - * @var bool - */ - private $processUncoveredFiles = false; - - /** - * @var bool - */ - private $ignoreDeprecatedCode = false; - - /** - * @var null|PhptTestCase|string|TestCase - */ - private $currentId; - - /** - * Code coverage data. - * - * @var ProcessedCodeCoverageData - */ - private $data; - - /** - * @var bool - */ - private $useAnnotationsForIgnoringCode = true; - - /** - * Test data. - * - * @var array - */ - private $tests = []; - - /** - * @psalm-var list - */ - private $parentClassesExcludedFromUnintentionallyCoveredCodeCheck = []; - - /** - * @var ?FileAnalyser - */ - private $analyser; - - /** - * @var ?string - */ - private $cacheDirectory; - - /** - * @var ?Directory - */ - private $cachedReport; - - public function __construct(Driver $driver, Filter $filter) - { - $this->driver = $driver; - $this->filter = $filter; - $this->data = new ProcessedCodeCoverageData; - $this->wizard = new Wizard; - } - - /** - * Returns the code coverage information as a graph of node objects. - */ - public function getReport(): Directory - { - if ($this->cachedReport === null) { - $this->cachedReport = (new Builder($this->analyser()))->build($this); - } - - return $this->cachedReport; - } - - /** - * Clears collected code coverage data. - */ - public function clear(): void - { - $this->currentId = null; - $this->data = new ProcessedCodeCoverageData; - $this->tests = []; - $this->cachedReport = null; - } - - /** - * @internal - */ - public function clearCache(): void - { - $this->cachedReport = null; - } - - /** - * Returns the filter object used. - */ - public function filter(): Filter - { - return $this->filter; - } - - /** - * Returns the collected code coverage data. - */ - public function getData(bool $raw = false): ProcessedCodeCoverageData - { - if (!$raw) { - if ($this->processUncoveredFiles) { - $this->processUncoveredFilesFromFilter(); - } elseif ($this->includeUncoveredFiles) { - $this->addUncoveredFilesFromFilter(); - } - } - - return $this->data; - } - - /** - * Sets the coverage data. - */ - public function setData(ProcessedCodeCoverageData $data): void - { - $this->data = $data; - } - - /** - * Returns the test data. - */ - public function getTests(): array - { - return $this->tests; - } - - /** - * Sets the test data. - */ - public function setTests(array $tests): void - { - $this->tests = $tests; - } - - /** - * Start collection of code coverage information. - * - * @param PhptTestCase|string|TestCase $id - */ - public function start($id, bool $clear = false): void - { - if ($clear) { - $this->clear(); - } - - $this->currentId = $id; - - $this->driver->start(); - - $this->cachedReport = null; - } - - /** - * Stop collection of code coverage information. - * - * @param array|false $linesToBeCovered - */ - public function stop(bool $append = true, $linesToBeCovered = [], array $linesToBeUsed = []): RawCodeCoverageData - { - if (!is_array($linesToBeCovered) && $linesToBeCovered !== false) { - throw new InvalidArgumentException( - '$linesToBeCovered must be an array or false' - ); - } - - $data = $this->driver->stop(); - $this->append($data, null, $append, $linesToBeCovered, $linesToBeUsed); - - $this->currentId = null; - $this->cachedReport = null; - - return $data; - } - - /** - * Appends code coverage data. - * - * @param PhptTestCase|string|TestCase $id - * @param array|false $linesToBeCovered - * - * @throws ReflectionException - * @throws TestIdMissingException - * @throws UnintentionallyCoveredCodeException - */ - public function append(RawCodeCoverageData $rawData, $id = null, bool $append = true, $linesToBeCovered = [], array $linesToBeUsed = []): void - { - if ($id === null) { - $id = $this->currentId; - } - - if ($id === null) { - throw new TestIdMissingException; - } - - $this->cachedReport = null; - - $this->applyFilter($rawData); - - $this->applyExecutableLinesFilter($rawData); - - if ($this->useAnnotationsForIgnoringCode) { - $this->applyIgnoredLinesFilter($rawData); - } - - $this->data->initializeUnseenData($rawData); - - if (!$append) { - return; - } - - if ($id !== self::UNCOVERED_FILES) { - $this->applyCoversAnnotationFilter( - $rawData, - $linesToBeCovered, - $linesToBeUsed - ); - - if (empty($rawData->lineCoverage())) { - return; - } - - $size = 'unknown'; - $status = -1; - $fromTestcase = false; - - if ($id instanceof TestCase) { - $fromTestcase = true; - $_size = $id->getSize(); - - if ($_size === Test::SMALL) { - $size = 'small'; - } elseif ($_size === Test::MEDIUM) { - $size = 'medium'; - } elseif ($_size === Test::LARGE) { - $size = 'large'; - } - - $status = $id->getStatus(); - $id = get_class($id) . '::' . $id->getName(); - } elseif ($id instanceof PhptTestCase) { - $fromTestcase = true; - $size = 'large'; - $id = $id->getName(); - } - - $this->tests[$id] = ['size' => $size, 'status' => $status, 'fromTestcase' => $fromTestcase]; - - $this->data->markCodeAsExecutedByTestCase($id, $rawData); - } - } - - /** - * Merges the data from another instance. - */ - public function merge(self $that): void - { - $this->filter->includeFiles( - $that->filter()->files() - ); - - $this->data->merge($that->data); - - $this->tests = array_merge($this->tests, $that->getTests()); - - $this->cachedReport = null; - } - - public function enableCheckForUnintentionallyCoveredCode(): void - { - $this->checkForUnintentionallyCoveredCode = true; - } - - public function disableCheckForUnintentionallyCoveredCode(): void - { - $this->checkForUnintentionallyCoveredCode = false; - } - - public function includeUncoveredFiles(): void - { - $this->includeUncoveredFiles = true; - } - - public function excludeUncoveredFiles(): void - { - $this->includeUncoveredFiles = false; - } - - public function processUncoveredFiles(): void - { - $this->processUncoveredFiles = true; - } - - public function doNotProcessUncoveredFiles(): void - { - $this->processUncoveredFiles = false; - } - - public function enableAnnotationsForIgnoringCode(): void - { - $this->useAnnotationsForIgnoringCode = true; - } - - public function disableAnnotationsForIgnoringCode(): void - { - $this->useAnnotationsForIgnoringCode = false; - } - - public function ignoreDeprecatedCode(): void - { - $this->ignoreDeprecatedCode = true; - } - - public function doNotIgnoreDeprecatedCode(): void - { - $this->ignoreDeprecatedCode = false; - } - - /** - * @psalm-assert-if-true !null $this->cacheDirectory - */ - public function cachesStaticAnalysis(): bool - { - return $this->cacheDirectory !== null; - } - - public function cacheStaticAnalysis(string $directory): void - { - $this->cacheDirectory = $directory; - } - - public function doNotCacheStaticAnalysis(): void - { - $this->cacheDirectory = null; - } - - /** - * @throws StaticAnalysisCacheNotConfiguredException - */ - public function cacheDirectory(): string - { - if (!$this->cachesStaticAnalysis()) { - throw new StaticAnalysisCacheNotConfiguredException( - 'The static analysis cache is not configured' - ); - } - - return $this->cacheDirectory; - } - - /** - * @psalm-param class-string $className - */ - public function excludeSubclassesOfThisClassFromUnintentionallyCoveredCodeCheck(string $className): void - { - $this->parentClassesExcludedFromUnintentionallyCoveredCodeCheck[] = $className; - } - - public function enableBranchAndPathCoverage(): void - { - $this->driver->enableBranchAndPathCoverage(); - } - - public function disableBranchAndPathCoverage(): void - { - $this->driver->disableBranchAndPathCoverage(); - } - - public function collectsBranchAndPathCoverage(): bool - { - return $this->driver->collectsBranchAndPathCoverage(); - } - - public function detectsDeadCode(): bool - { - return $this->driver->detectsDeadCode(); - } - - /** - * Applies the @covers annotation filtering. - * - * @param array|false $linesToBeCovered - * - * @throws ReflectionException - * @throws UnintentionallyCoveredCodeException - */ - private function applyCoversAnnotationFilter(RawCodeCoverageData $rawData, $linesToBeCovered, array $linesToBeUsed): void - { - if ($linesToBeCovered === false) { - $rawData->clear(); - - return; - } - - if (empty($linesToBeCovered)) { - return; - } - - if ($this->checkForUnintentionallyCoveredCode && - (!$this->currentId instanceof TestCase || - (!$this->currentId->isMedium() && !$this->currentId->isLarge()))) { - $this->performUnintentionallyCoveredCodeCheck($rawData, $linesToBeCovered, $linesToBeUsed); - } - - $rawLineData = $rawData->lineCoverage(); - $filesWithNoCoverage = array_diff_key($rawLineData, $linesToBeCovered); - - foreach (array_keys($filesWithNoCoverage) as $fileWithNoCoverage) { - $rawData->removeCoverageDataForFile($fileWithNoCoverage); - } - - if (is_array($linesToBeCovered)) { - foreach ($linesToBeCovered as $fileToBeCovered => $includedLines) { - $rawData->keepLineCoverageDataOnlyForLines($fileToBeCovered, $includedLines); - $rawData->keepFunctionCoverageDataOnlyForLines($fileToBeCovered, $includedLines); - } - } - } - - private function applyFilter(RawCodeCoverageData $data): void - { - if ($this->filter->isEmpty()) { - return; - } - - foreach (array_keys($data->lineCoverage()) as $filename) { - if ($this->filter->isExcluded($filename)) { - $data->removeCoverageDataForFile($filename); - } - } - } - - private function applyExecutableLinesFilter(RawCodeCoverageData $data): void - { - foreach (array_keys($data->lineCoverage()) as $filename) { - if (!$this->filter->isFile($filename)) { - continue; - } - - $linesToBranchMap = $this->analyser()->executableLinesIn($filename); - - $data->keepLineCoverageDataOnlyForLines( - $filename, - array_keys($linesToBranchMap) - ); - - $data->markExecutableLineByBranch( - $filename, - $linesToBranchMap - ); - } - } - - private function applyIgnoredLinesFilter(RawCodeCoverageData $data): void - { - foreach (array_keys($data->lineCoverage()) as $filename) { - if (!$this->filter->isFile($filename)) { - continue; - } - - $data->removeCoverageDataForLines( - $filename, - $this->analyser()->ignoredLinesFor($filename) - ); - } - } - - /** - * @throws UnintentionallyCoveredCodeException - */ - private function addUncoveredFilesFromFilter(): void - { - $uncoveredFiles = array_diff( - $this->filter->files(), - $this->data->coveredFiles() - ); - - foreach ($uncoveredFiles as $uncoveredFile) { - if ($this->filter->isFile($uncoveredFile)) { - $this->append( - RawCodeCoverageData::fromUncoveredFile( - $uncoveredFile, - $this->analyser() - ), - self::UNCOVERED_FILES - ); - } - } - } - - /** - * @throws UnintentionallyCoveredCodeException - */ - private function processUncoveredFilesFromFilter(): void - { - $uncoveredFiles = array_diff( - $this->filter->files(), - $this->data->coveredFiles() - ); - - $this->driver->start(); - - foreach ($uncoveredFiles as $uncoveredFile) { - if ($this->filter->isFile($uncoveredFile)) { - include_once $uncoveredFile; - } - } - - $this->append($this->driver->stop(), self::UNCOVERED_FILES); - } - - /** - * @throws ReflectionException - * @throws UnintentionallyCoveredCodeException - */ - private function performUnintentionallyCoveredCodeCheck(RawCodeCoverageData $data, array $linesToBeCovered, array $linesToBeUsed): void - { - $allowedLines = $this->getAllowedLines( - $linesToBeCovered, - $linesToBeUsed - ); - - $unintentionallyCoveredUnits = []; - - foreach ($data->lineCoverage() as $file => $_data) { - foreach ($_data as $line => $flag) { - if ($flag === 1 && !isset($allowedLines[$file][$line])) { - $unintentionallyCoveredUnits[] = $this->wizard->lookup($file, $line); - } - } - } - - $unintentionallyCoveredUnits = $this->processUnintentionallyCoveredUnits($unintentionallyCoveredUnits); - - if (!empty($unintentionallyCoveredUnits)) { - throw new UnintentionallyCoveredCodeException( - $unintentionallyCoveredUnits - ); - } - } - - private function getAllowedLines(array $linesToBeCovered, array $linesToBeUsed): array - { - $allowedLines = []; - - foreach (array_keys($linesToBeCovered) as $file) { - if (!isset($allowedLines[$file])) { - $allowedLines[$file] = []; - } - - $allowedLines[$file] = array_merge( - $allowedLines[$file], - $linesToBeCovered[$file] - ); - } - - foreach (array_keys($linesToBeUsed) as $file) { - if (!isset($allowedLines[$file])) { - $allowedLines[$file] = []; - } - - $allowedLines[$file] = array_merge( - $allowedLines[$file], - $linesToBeUsed[$file] - ); - } - - foreach (array_keys($allowedLines) as $file) { - $allowedLines[$file] = array_flip( - array_unique($allowedLines[$file]) - ); - } - - return $allowedLines; - } - - /** - * @throws ReflectionException - */ - private function processUnintentionallyCoveredUnits(array $unintentionallyCoveredUnits): array - { - $unintentionallyCoveredUnits = array_unique($unintentionallyCoveredUnits); - sort($unintentionallyCoveredUnits); - - foreach (array_keys($unintentionallyCoveredUnits) as $k => $v) { - $unit = explode('::', $unintentionallyCoveredUnits[$k]); - - if (count($unit) !== 2) { - continue; - } - - try { - $class = new ReflectionClass($unit[0]); - - foreach ($this->parentClassesExcludedFromUnintentionallyCoveredCodeCheck as $parentClass) { - if ($class->isSubclassOf($parentClass)) { - unset($unintentionallyCoveredUnits[$k]); - - break; - } - } - } catch (\ReflectionException $e) { - throw new ReflectionException( - $e->getMessage(), - $e->getCode(), - $e - ); - } - } - - return array_values($unintentionallyCoveredUnits); - } - - private function analyser(): FileAnalyser - { - if ($this->analyser !== null) { - return $this->analyser; - } - - $this->analyser = new ParsingFileAnalyser( - $this->useAnnotationsForIgnoringCode, - $this->ignoreDeprecatedCode - ); - - if ($this->cachesStaticAnalysis()) { - $this->analyser = new CachingFileAnalyser( - $this->cacheDirectory, - $this->analyser, - $this->useAnnotationsForIgnoringCode, - $this->ignoreDeprecatedCode - ); - } - - return $this->analyser; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Driver/Driver.php b/vendor/phpunit/php-code-coverage/src/Driver/Driver.php deleted file mode 100644 index dc2de68..0000000 --- a/vendor/phpunit/php-code-coverage/src/Driver/Driver.php +++ /dev/null @@ -1,167 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use function sprintf; -use SebastianBergmann\CodeCoverage\BranchAndPathCoverageNotSupportedException; -use SebastianBergmann\CodeCoverage\DeadCodeDetectionNotSupportedException; -use SebastianBergmann\CodeCoverage\Filter; -use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverAvailableException; -use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverWithPathCoverageSupportAvailableException; -use SebastianBergmann\CodeCoverage\RawCodeCoverageData; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -abstract class Driver -{ - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const LINE_NOT_EXECUTABLE = -2; - - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const LINE_NOT_EXECUTED = -1; - - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const LINE_EXECUTED = 1; - - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const BRANCH_NOT_HIT = 0; - - /** - * @var int - * - * @see http://xdebug.org/docs/code_coverage - */ - public const BRANCH_HIT = 1; - - /** - * @var bool - */ - private $collectBranchAndPathCoverage = false; - - /** - * @var bool - */ - private $detectDeadCode = false; - - /** - * @throws NoCodeCoverageDriverAvailableException - * @throws PcovNotAvailableException - * @throws PhpdbgNotAvailableException - * @throws Xdebug2NotEnabledException - * @throws Xdebug3NotEnabledException - * @throws XdebugNotAvailableException - * - * @deprecated Use DriverSelector::forLineCoverage() instead - */ - public static function forLineCoverage(Filter $filter): self - { - return (new Selector)->forLineCoverage($filter); - } - - /** - * @throws NoCodeCoverageDriverWithPathCoverageSupportAvailableException - * @throws Xdebug2NotEnabledException - * @throws Xdebug3NotEnabledException - * @throws XdebugNotAvailableException - * - * @deprecated Use DriverSelector::forLineAndPathCoverage() instead - */ - public static function forLineAndPathCoverage(Filter $filter): self - { - return (new Selector)->forLineAndPathCoverage($filter); - } - - public function canCollectBranchAndPathCoverage(): bool - { - return false; - } - - public function collectsBranchAndPathCoverage(): bool - { - return $this->collectBranchAndPathCoverage; - } - - /** - * @throws BranchAndPathCoverageNotSupportedException - */ - public function enableBranchAndPathCoverage(): void - { - if (!$this->canCollectBranchAndPathCoverage()) { - throw new BranchAndPathCoverageNotSupportedException( - sprintf( - '%s does not support branch and path coverage', - $this->nameAndVersion() - ) - ); - } - - $this->collectBranchAndPathCoverage = true; - } - - public function disableBranchAndPathCoverage(): void - { - $this->collectBranchAndPathCoverage = false; - } - - public function canDetectDeadCode(): bool - { - return false; - } - - public function detectsDeadCode(): bool - { - return $this->detectDeadCode; - } - - /** - * @throws DeadCodeDetectionNotSupportedException - */ - public function enableDeadCodeDetection(): void - { - if (!$this->canDetectDeadCode()) { - throw new DeadCodeDetectionNotSupportedException( - sprintf( - '%s does not support dead code detection', - $this->nameAndVersion() - ) - ); - } - - $this->detectDeadCode = true; - } - - public function disableDeadCodeDetection(): void - { - $this->detectDeadCode = false; - } - - abstract public function nameAndVersion(): string; - - abstract public function start(): void; - - abstract public function stop(): RawCodeCoverageData; -} diff --git a/vendor/phpunit/php-code-coverage/src/Driver/PcovDriver.php b/vendor/phpunit/php-code-coverage/src/Driver/PcovDriver.php deleted file mode 100644 index c30b30c..0000000 --- a/vendor/phpunit/php-code-coverage/src/Driver/PcovDriver.php +++ /dev/null @@ -1,75 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use const pcov\inclusive; -use function array_intersect; -use function extension_loaded; -use function pcov\clear; -use function pcov\collect; -use function pcov\start; -use function pcov\stop; -use function pcov\waiting; -use function phpversion; -use SebastianBergmann\CodeCoverage\Filter; -use SebastianBergmann\CodeCoverage\RawCodeCoverageData; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class PcovDriver extends Driver -{ - /** - * @var Filter - */ - private $filter; - - /** - * @throws PcovNotAvailableException - */ - public function __construct(Filter $filter) - { - if (!extension_loaded('pcov')) { - throw new PcovNotAvailableException; - } - - $this->filter = $filter; - } - - public function start(): void - { - start(); - } - - public function stop(): RawCodeCoverageData - { - stop(); - - $filesToCollectCoverageFor = waiting(); - $collected = []; - - if ($filesToCollectCoverageFor) { - if (!$this->filter->isEmpty()) { - $filesToCollectCoverageFor = array_intersect($filesToCollectCoverageFor, $this->filter->files()); - } - - $collected = collect(inclusive, $filesToCollectCoverageFor); - - clear(); - } - - return RawCodeCoverageData::fromXdebugWithoutPathCoverage($collected); - } - - public function nameAndVersion(): string - { - return 'PCOV ' . phpversion('pcov'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Driver/PhpdbgDriver.php b/vendor/phpunit/php-code-coverage/src/Driver/PhpdbgDriver.php deleted file mode 100644 index 7ee13b0..0000000 --- a/vendor/phpunit/php-code-coverage/src/Driver/PhpdbgDriver.php +++ /dev/null @@ -1,93 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use const PHP_SAPI; -use const PHP_VERSION; -use function array_diff; -use function array_keys; -use function array_merge; -use function get_included_files; -use function phpdbg_end_oplog; -use function phpdbg_get_executable; -use function phpdbg_start_oplog; -use SebastianBergmann\CodeCoverage\RawCodeCoverageData; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class PhpdbgDriver extends Driver -{ - /** - * @throws PhpdbgNotAvailableException - */ - public function __construct() - { - if (PHP_SAPI !== 'phpdbg') { - throw new PhpdbgNotAvailableException; - } - } - - public function start(): void - { - phpdbg_start_oplog(); - } - - public function stop(): RawCodeCoverageData - { - static $fetchedLines = []; - - $dbgData = phpdbg_end_oplog(); - - if ($fetchedLines === []) { - $sourceLines = phpdbg_get_executable(); - } else { - $newFiles = array_diff(get_included_files(), array_keys($fetchedLines)); - - $sourceLines = []; - - if ($newFiles) { - $sourceLines = phpdbg_get_executable(['files' => $newFiles]); - } - } - - foreach ($sourceLines as $file => $lines) { - foreach ($lines as $lineNo => $numExecuted) { - $sourceLines[$file][$lineNo] = self::LINE_NOT_EXECUTED; - } - } - - $fetchedLines = array_merge($fetchedLines, $sourceLines); - - return RawCodeCoverageData::fromXdebugWithoutPathCoverage( - $this->detectExecutedLines($fetchedLines, $dbgData) - ); - } - - public function nameAndVersion(): string - { - return 'PHPDBG ' . PHP_VERSION; - } - - private function detectExecutedLines(array $sourceLines, array $dbgData): array - { - foreach ($dbgData as $file => $coveredLines) { - foreach ($coveredLines as $lineNo => $numExecuted) { - // phpdbg also reports $lineNo=0 when e.g. exceptions get thrown. - // make sure we only mark lines executed which are actually executable. - if (isset($sourceLines[$file][$lineNo])) { - $sourceLines[$file][$lineNo] = self::LINE_EXECUTED; - } - } - } - - return $sourceLines; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Driver/Selector.php b/vendor/phpunit/php-code-coverage/src/Driver/Selector.php deleted file mode 100644 index 936ee89..0000000 --- a/vendor/phpunit/php-code-coverage/src/Driver/Selector.php +++ /dev/null @@ -1,79 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use function phpversion; -use function version_compare; -use SebastianBergmann\CodeCoverage\Filter; -use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverAvailableException; -use SebastianBergmann\CodeCoverage\NoCodeCoverageDriverWithPathCoverageSupportAvailableException; -use SebastianBergmann\Environment\Runtime; - -final class Selector -{ - /** - * @throws NoCodeCoverageDriverAvailableException - * @throws PcovNotAvailableException - * @throws PhpdbgNotAvailableException - * @throws Xdebug2NotEnabledException - * @throws Xdebug3NotEnabledException - * @throws XdebugNotAvailableException - */ - public function forLineCoverage(Filter $filter): Driver - { - $runtime = new Runtime; - - if ($runtime->hasPHPDBGCodeCoverage()) { - return new PhpdbgDriver; - } - - if ($runtime->hasPCOV()) { - return new PcovDriver($filter); - } - - if ($runtime->hasXdebug()) { - if (version_compare(phpversion('xdebug'), '3', '>=')) { - $driver = new Xdebug3Driver($filter); - } else { - $driver = new Xdebug2Driver($filter); - } - - $driver->enableDeadCodeDetection(); - - return $driver; - } - - throw new NoCodeCoverageDriverAvailableException; - } - - /** - * @throws NoCodeCoverageDriverWithPathCoverageSupportAvailableException - * @throws Xdebug2NotEnabledException - * @throws Xdebug3NotEnabledException - * @throws XdebugNotAvailableException - */ - public function forLineAndPathCoverage(Filter $filter): Driver - { - if ((new Runtime)->hasXdebug()) { - if (version_compare(phpversion('xdebug'), '3', '>=')) { - $driver = new Xdebug3Driver($filter); - } else { - $driver = new Xdebug2Driver($filter); - } - - $driver->enableDeadCodeDetection(); - $driver->enableBranchAndPathCoverage(); - - return $driver; - } - - throw new NoCodeCoverageDriverWithPathCoverageSupportAvailableException; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Driver/Xdebug2Driver.php b/vendor/phpunit/php-code-coverage/src/Driver/Xdebug2Driver.php deleted file mode 100644 index 74cbbfb..0000000 --- a/vendor/phpunit/php-code-coverage/src/Driver/Xdebug2Driver.php +++ /dev/null @@ -1,128 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use const XDEBUG_CC_BRANCH_CHECK; -use const XDEBUG_CC_DEAD_CODE; -use const XDEBUG_CC_UNUSED; -use const XDEBUG_FILTER_CODE_COVERAGE; -use const XDEBUG_PATH_INCLUDE; -use const XDEBUG_PATH_WHITELIST; -use function defined; -use function extension_loaded; -use function ini_get; -use function phpversion; -use function sprintf; -use function version_compare; -use function xdebug_get_code_coverage; -use function xdebug_set_filter; -use function xdebug_start_code_coverage; -use function xdebug_stop_code_coverage; -use SebastianBergmann\CodeCoverage\Filter; -use SebastianBergmann\CodeCoverage\RawCodeCoverageData; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Xdebug2Driver extends Driver -{ - /** - * @var bool - */ - private $pathCoverageIsMixedCoverage; - - /** - * @throws WrongXdebugVersionException - * @throws Xdebug2NotEnabledException - * @throws XdebugNotAvailableException - */ - public function __construct(Filter $filter) - { - if (!extension_loaded('xdebug')) { - throw new XdebugNotAvailableException; - } - - if (version_compare(phpversion('xdebug'), '3', '>=')) { - throw new WrongXdebugVersionException( - sprintf( - 'This driver requires Xdebug 2 but version %s is loaded', - phpversion('xdebug') - ) - ); - } - - if (!ini_get('xdebug.coverage_enable')) { - throw new Xdebug2NotEnabledException; - } - - if (!$filter->isEmpty()) { - if (defined('XDEBUG_PATH_WHITELIST')) { - $listType = XDEBUG_PATH_WHITELIST; - } else { - $listType = XDEBUG_PATH_INCLUDE; - } - - xdebug_set_filter( - XDEBUG_FILTER_CODE_COVERAGE, - $listType, - $filter->files() - ); - } - - $this->pathCoverageIsMixedCoverage = version_compare(phpversion('xdebug'), '2.9.6', '<'); - } - - public function canCollectBranchAndPathCoverage(): bool - { - return true; - } - - public function canDetectDeadCode(): bool - { - return true; - } - - public function start(): void - { - $flags = XDEBUG_CC_UNUSED; - - if ($this->detectsDeadCode() || $this->collectsBranchAndPathCoverage()) { - $flags |= XDEBUG_CC_DEAD_CODE; - } - - if ($this->collectsBranchAndPathCoverage()) { - $flags |= XDEBUG_CC_BRANCH_CHECK; - } - - xdebug_start_code_coverage($flags); - } - - public function stop(): RawCodeCoverageData - { - $data = xdebug_get_code_coverage(); - - xdebug_stop_code_coverage(); - - if ($this->collectsBranchAndPathCoverage()) { - if ($this->pathCoverageIsMixedCoverage) { - return RawCodeCoverageData::fromXdebugWithMixedCoverage($data); - } - - return RawCodeCoverageData::fromXdebugWithPathCoverage($data); - } - - return RawCodeCoverageData::fromXdebugWithoutPathCoverage($data); - } - - public function nameAndVersion(): string - { - return 'Xdebug ' . phpversion('xdebug'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Driver/Xdebug3Driver.php b/vendor/phpunit/php-code-coverage/src/Driver/Xdebug3Driver.php deleted file mode 100644 index b85db40..0000000 --- a/vendor/phpunit/php-code-coverage/src/Driver/Xdebug3Driver.php +++ /dev/null @@ -1,119 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use const XDEBUG_CC_BRANCH_CHECK; -use const XDEBUG_CC_DEAD_CODE; -use const XDEBUG_CC_UNUSED; -use const XDEBUG_FILTER_CODE_COVERAGE; -use const XDEBUG_PATH_INCLUDE; -use function explode; -use function extension_loaded; -use function getenv; -use function in_array; -use function ini_get; -use function phpversion; -use function sprintf; -use function version_compare; -use function xdebug_get_code_coverage; -use function xdebug_set_filter; -use function xdebug_start_code_coverage; -use function xdebug_stop_code_coverage; -use SebastianBergmann\CodeCoverage\Filter; -use SebastianBergmann\CodeCoverage\RawCodeCoverageData; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Xdebug3Driver extends Driver -{ - /** - * @throws WrongXdebugVersionException - * @throws Xdebug3NotEnabledException - * @throws XdebugNotAvailableException - */ - public function __construct(Filter $filter) - { - if (!extension_loaded('xdebug')) { - throw new XdebugNotAvailableException; - } - - if (version_compare(phpversion('xdebug'), '3', '<')) { - throw new WrongXdebugVersionException( - sprintf( - 'This driver requires Xdebug 3 but version %s is loaded', - phpversion('xdebug') - ) - ); - } - - $mode = getenv('XDEBUG_MODE'); - - if ($mode === false || $mode === '') { - $mode = ini_get('xdebug.mode'); - } - - if ($mode === false || - !in_array('coverage', explode(',', $mode), true)) { - throw new Xdebug3NotEnabledException; - } - - if (!$filter->isEmpty()) { - xdebug_set_filter( - XDEBUG_FILTER_CODE_COVERAGE, - XDEBUG_PATH_INCLUDE, - $filter->files() - ); - } - } - - public function canCollectBranchAndPathCoverage(): bool - { - return true; - } - - public function canDetectDeadCode(): bool - { - return true; - } - - public function start(): void - { - $flags = XDEBUG_CC_UNUSED; - - if ($this->detectsDeadCode() || $this->collectsBranchAndPathCoverage()) { - $flags |= XDEBUG_CC_DEAD_CODE; - } - - if ($this->collectsBranchAndPathCoverage()) { - $flags |= XDEBUG_CC_BRANCH_CHECK; - } - - xdebug_start_code_coverage($flags); - } - - public function stop(): RawCodeCoverageData - { - $data = xdebug_get_code_coverage(); - - xdebug_stop_code_coverage(); - - if ($this->collectsBranchAndPathCoverage()) { - return RawCodeCoverageData::fromXdebugWithPathCoverage($data); - } - - return RawCodeCoverageData::fromXdebugWithoutPathCoverage($data); - } - - public function nameAndVersion(): string - { - return 'Xdebug ' . phpversion('xdebug'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php b/vendor/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php deleted file mode 100644 index ab20891..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/BranchAndPathCoverageNotSupportedException.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class BranchAndPathCoverageNotSupportedException extends RuntimeException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php b/vendor/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php deleted file mode 100644 index d360064..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/DeadCodeDetectionNotSupportedException.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class DeadCodeDetectionNotSupportedException extends RuntimeException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php b/vendor/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php deleted file mode 100644 index fdd9bfd..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/DirectoryCouldNotBeCreatedException.php +++ /dev/null @@ -1,17 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Util; - -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class DirectoryCouldNotBeCreatedException extends RuntimeException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/Exception.php b/vendor/phpunit/php-code-coverage/src/Exception/Exception.php deleted file mode 100644 index 28dc48b..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/Exception.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use Throwable; - -interface Exception extends Throwable -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php b/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php deleted file mode 100644 index 17e4b70..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/InvalidArgumentException.php +++ /dev/null @@ -1,14 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -final class InvalidArgumentException extends \InvalidArgumentException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php b/vendor/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php deleted file mode 100644 index b1494e2..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverAvailableException.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class NoCodeCoverageDriverAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('No code coverage driver available'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php b/vendor/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php deleted file mode 100644 index 0065b74..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/NoCodeCoverageDriverWithPathCoverageSupportAvailableException.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class NoCodeCoverageDriverWithPathCoverageSupportAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('No code coverage driver with path coverage support available'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/ParserException.php b/vendor/phpunit/php-code-coverage/src/Exception/ParserException.php deleted file mode 100644 index a907e34..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/ParserException.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class ParserException extends RuntimeException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php b/vendor/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php deleted file mode 100644 index 54bd73f..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/PathExistsButIsNotDirectoryException.php +++ /dev/null @@ -1,22 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use function sprintf; -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class PathExistsButIsNotDirectoryException extends RuntimeException implements Exception -{ - public function __construct(string $path) - { - parent::__construct(sprintf('"%s" exists but is not a directory', $path)); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php b/vendor/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php deleted file mode 100644 index 2f0a66e..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/PcovNotAvailableException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class PcovNotAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('The PCOV extension is not available'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/PhpdbgNotAvailableException.php b/vendor/phpunit/php-code-coverage/src/Exception/PhpdbgNotAvailableException.php deleted file mode 100644 index bfb183d..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/PhpdbgNotAvailableException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class PhpdbgNotAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('The PHPDBG SAPI is not available'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/ReflectionException.php b/vendor/phpunit/php-code-coverage/src/Exception/ReflectionException.php deleted file mode 100644 index 78db430..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/ReflectionException.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class ReflectionException extends RuntimeException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php b/vendor/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php deleted file mode 100644 index 0481f16..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/ReportAlreadyFinalizedException.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class ReportAlreadyFinalizedException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('The code coverage report has already been finalized'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php b/vendor/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php deleted file mode 100644 index fd58fd6..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/StaticAnalysisCacheNotConfiguredException.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class StaticAnalysisCacheNotConfiguredException extends RuntimeException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php b/vendor/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php deleted file mode 100644 index 4cc3e0c..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/TestIdMissingException.php +++ /dev/null @@ -1,20 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class TestIdMissingException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('Test ID is missing'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php b/vendor/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php deleted file mode 100644 index cb7a975..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/UnintentionallyCoveredCodeException.php +++ /dev/null @@ -1,43 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class UnintentionallyCoveredCodeException extends RuntimeException implements Exception -{ - /** - * @var array - */ - private $unintentionallyCoveredUnits; - - public function __construct(array $unintentionallyCoveredUnits) - { - $this->unintentionallyCoveredUnits = $unintentionallyCoveredUnits; - - parent::__construct($this->toString()); - } - - public function getUnintentionallyCoveredUnits(): array - { - return $this->unintentionallyCoveredUnits; - } - - private function toString(): string - { - $message = ''; - - foreach ($this->unintentionallyCoveredUnits as $unit) { - $message .= '- ' . $unit . "\n"; - } - - return $message; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php b/vendor/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php deleted file mode 100644 index be549e1..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/WriteOperationFailedException.php +++ /dev/null @@ -1,22 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use function sprintf; -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class WriteOperationFailedException extends RuntimeException implements Exception -{ - public function __construct(string $path) - { - parent::__construct(sprintf('Cannot write to "%s"', $path)); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/WrongXdebugVersionException.php b/vendor/phpunit/php-code-coverage/src/Exception/WrongXdebugVersionException.php deleted file mode 100644 index 6e8f10a..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/WrongXdebugVersionException.php +++ /dev/null @@ -1,17 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class WrongXdebugVersionException extends RuntimeException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/Xdebug2NotEnabledException.php b/vendor/phpunit/php-code-coverage/src/Exception/Xdebug2NotEnabledException.php deleted file mode 100644 index 4ee232d..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/Xdebug2NotEnabledException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class Xdebug2NotEnabledException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('xdebug.coverage_enable=On (PHP configuration setting) has to be set'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/Xdebug3NotEnabledException.php b/vendor/phpunit/php-code-coverage/src/Exception/Xdebug3NotEnabledException.php deleted file mode 100644 index 6abc01f..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/Xdebug3NotEnabledException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class Xdebug3NotEnabledException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('XDEBUG_MODE=coverage (environment variable) or xdebug.mode=coverage (PHP configuration setting) has to be set'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php b/vendor/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php deleted file mode 100644 index 1622c5a..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/XdebugNotAvailableException.php +++ /dev/null @@ -1,21 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Driver; - -use RuntimeException; -use SebastianBergmann\CodeCoverage\Exception; - -final class XdebugNotAvailableException extends RuntimeException implements Exception -{ - public function __construct() - { - parent::__construct('The Xdebug extension is not available'); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Exception/XmlException.php b/vendor/phpunit/php-code-coverage/src/Exception/XmlException.php deleted file mode 100644 index 31e4623..0000000 --- a/vendor/phpunit/php-code-coverage/src/Exception/XmlException.php +++ /dev/null @@ -1,16 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use RuntimeException; - -final class XmlException extends RuntimeException implements Exception -{ -} diff --git a/vendor/phpunit/php-code-coverage/src/Filter.php b/vendor/phpunit/php-code-coverage/src/Filter.php deleted file mode 100644 index 5a0a142..0000000 --- a/vendor/phpunit/php-code-coverage/src/Filter.php +++ /dev/null @@ -1,118 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use function array_keys; -use function is_file; -use function realpath; -use function strpos; -use SebastianBergmann\FileIterator\Facade as FileIteratorFacade; - -final class Filter -{ - /** - * @psalm-var array - */ - private $files = []; - - /** - * @psalm-var array - */ - private $isFileCache = []; - - public function includeDirectory(string $directory, string $suffix = '.php', string $prefix = ''): void - { - foreach ((new FileIteratorFacade)->getFilesAsArray($directory, $suffix, $prefix) as $file) { - $this->includeFile($file); - } - } - - /** - * @psalm-param list $files - */ - public function includeFiles(array $filenames): void - { - foreach ($filenames as $filename) { - $this->includeFile($filename); - } - } - - public function includeFile(string $filename): void - { - $filename = realpath($filename); - - if (!$filename) { - return; - } - - $this->files[$filename] = true; - } - - public function excludeDirectory(string $directory, string $suffix = '.php', string $prefix = ''): void - { - foreach ((new FileIteratorFacade)->getFilesAsArray($directory, $suffix, $prefix) as $file) { - $this->excludeFile($file); - } - } - - public function excludeFile(string $filename): void - { - $filename = realpath($filename); - - if (!$filename || !isset($this->files[$filename])) { - return; - } - - unset($this->files[$filename]); - } - - public function isFile(string $filename): bool - { - if (isset($this->isFileCache[$filename])) { - return $this->isFileCache[$filename]; - } - - if ($filename === '-' || - strpos($filename, 'vfs://') === 0 || - strpos($filename, 'xdebug://debug-eval') !== false || - strpos($filename, 'eval()\'d code') !== false || - strpos($filename, 'runtime-created function') !== false || - strpos($filename, 'runkit created function') !== false || - strpos($filename, 'assert code') !== false || - strpos($filename, 'regexp code') !== false || - strpos($filename, 'Standard input code') !== false) { - $isFile = false; - } else { - $isFile = is_file($filename); - } - - $this->isFileCache[$filename] = $isFile; - - return $isFile; - } - - public function isExcluded(string $filename): bool - { - return !isset($this->files[$filename]) || !$this->isFile($filename); - } - - /** - * @psalm-return list - */ - public function files(): array - { - return array_keys($this->files); - } - - public function isEmpty(): bool - { - return empty($this->files); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php b/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php deleted file mode 100644 index 330fb57..0000000 --- a/vendor/phpunit/php-code-coverage/src/Node/AbstractNode.php +++ /dev/null @@ -1,253 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Node; - -use const DIRECTORY_SEPARATOR; -use function array_merge; -use function str_replace; -use function substr; -use Countable; -use SebastianBergmann\CodeCoverage\Util\Percentage; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -abstract class AbstractNode implements Countable -{ - /** - * @var string - */ - private $name; - - /** - * @var string - */ - private $pathAsString; - - /** - * @var array - */ - private $pathAsArray; - - /** - * @var AbstractNode - */ - private $parent; - - /** - * @var string - */ - private $id; - - public function __construct(string $name, ?self $parent = null) - { - if (substr($name, -1) === DIRECTORY_SEPARATOR) { - $name = substr($name, 0, -1); - } - - $this->name = $name; - $this->parent = $parent; - } - - public function name(): string - { - return $this->name; - } - - public function id(): string - { - if ($this->id === null) { - $parent = $this->parent(); - - if ($parent === null) { - $this->id = 'index'; - } else { - $parentId = $parent->id(); - - if ($parentId === 'index') { - $this->id = str_replace(':', '_', $this->name); - } else { - $this->id = $parentId . '/' . $this->name; - } - } - } - - return $this->id; - } - - public function pathAsString(): string - { - if ($this->pathAsString === null) { - if ($this->parent === null) { - $this->pathAsString = $this->name; - } else { - $this->pathAsString = $this->parent->pathAsString() . DIRECTORY_SEPARATOR . $this->name; - } - } - - return $this->pathAsString; - } - - public function pathAsArray(): array - { - if ($this->pathAsArray === null) { - if ($this->parent === null) { - $this->pathAsArray = []; - } else { - $this->pathAsArray = $this->parent->pathAsArray(); - } - - $this->pathAsArray[] = $this; - } - - return $this->pathAsArray; - } - - public function parent(): ?self - { - return $this->parent; - } - - public function percentageOfTestedClasses(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfTestedClasses(), - $this->numberOfClasses(), - ); - } - - public function percentageOfTestedTraits(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfTestedTraits(), - $this->numberOfTraits(), - ); - } - - public function percentageOfTestedClassesAndTraits(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfTestedClassesAndTraits(), - $this->numberOfClassesAndTraits(), - ); - } - - public function percentageOfTestedFunctions(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfTestedFunctions(), - $this->numberOfFunctions(), - ); - } - - public function percentageOfTestedMethods(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfTestedMethods(), - $this->numberOfMethods(), - ); - } - - public function percentageOfTestedFunctionsAndMethods(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfTestedFunctionsAndMethods(), - $this->numberOfFunctionsAndMethods(), - ); - } - - public function percentageOfExecutedLines(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfExecutedLines(), - $this->numberOfExecutableLines(), - ); - } - - public function percentageOfExecutedBranches(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfExecutedBranches(), - $this->numberOfExecutableBranches() - ); - } - - public function percentageOfExecutedPaths(): Percentage - { - return Percentage::fromFractionAndTotal( - $this->numberOfExecutedPaths(), - $this->numberOfExecutablePaths() - ); - } - - public function numberOfClassesAndTraits(): int - { - return $this->numberOfClasses() + $this->numberOfTraits(); - } - - public function numberOfTestedClassesAndTraits(): int - { - return $this->numberOfTestedClasses() + $this->numberOfTestedTraits(); - } - - public function classesAndTraits(): array - { - return array_merge($this->classes(), $this->traits()); - } - - public function numberOfFunctionsAndMethods(): int - { - return $this->numberOfFunctions() + $this->numberOfMethods(); - } - - public function numberOfTestedFunctionsAndMethods(): int - { - return $this->numberOfTestedFunctions() + $this->numberOfTestedMethods(); - } - - abstract public function classes(): array; - - abstract public function traits(): array; - - abstract public function functions(): array; - - /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} - */ - abstract public function linesOfCode(): array; - - abstract public function numberOfExecutableLines(): int; - - abstract public function numberOfExecutedLines(): int; - - abstract public function numberOfExecutableBranches(): int; - - abstract public function numberOfExecutedBranches(): int; - - abstract public function numberOfExecutablePaths(): int; - - abstract public function numberOfExecutedPaths(): int; - - abstract public function numberOfClasses(): int; - - abstract public function numberOfTestedClasses(): int; - - abstract public function numberOfTraits(): int; - - abstract public function numberOfTestedTraits(): int; - - abstract public function numberOfMethods(): int; - - abstract public function numberOfTestedMethods(): int; - - abstract public function numberOfFunctions(): int; - - abstract public function numberOfTestedFunctions(): int; -} diff --git a/vendor/phpunit/php-code-coverage/src/Node/Builder.php b/vendor/phpunit/php-code-coverage/src/Node/Builder.php deleted file mode 100644 index 6d11c77..0000000 --- a/vendor/phpunit/php-code-coverage/src/Node/Builder.php +++ /dev/null @@ -1,264 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Node; - -use const DIRECTORY_SEPARATOR; -use function array_shift; -use function basename; -use function count; -use function dirname; -use function explode; -use function implode; -use function is_file; -use function str_replace; -use function strpos; -use function substr; -use SebastianBergmann\CodeCoverage\CodeCoverage; -use SebastianBergmann\CodeCoverage\ProcessedCodeCoverageData; -use SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Builder -{ - /** - * @var FileAnalyser - */ - private $analyser; - - public function __construct(FileAnalyser $analyser) - { - $this->analyser = $analyser; - } - - public function build(CodeCoverage $coverage): Directory - { - $data = clone $coverage->getData(); // clone because path munging is destructive to the original data - $commonPath = $this->reducePaths($data); - $root = new Directory( - $commonPath, - null - ); - - $this->addItems( - $root, - $this->buildDirectoryStructure($data), - $coverage->getTests() - ); - - return $root; - } - - private function addItems(Directory $root, array $items, array $tests): void - { - foreach ($items as $key => $value) { - $key = (string) $key; - - if (substr($key, -2) === '/f') { - $key = substr($key, 0, -2); - $filename = $root->pathAsString() . DIRECTORY_SEPARATOR . $key; - - if (is_file($filename)) { - $root->addFile( - new File( - $key, - $root, - $value['lineCoverage'], - $value['functionCoverage'], - $tests, - $this->analyser->classesIn($filename), - $this->analyser->traitsIn($filename), - $this->analyser->functionsIn($filename), - $this->analyser->linesOfCodeFor($filename) - ) - ); - } - } else { - $child = $root->addDirectory($key); - - $this->addItems($child, $value, $tests); - } - } - } - - /** - * Builds an array representation of the directory structure. - * - * For instance, - * - * - * Array - * ( - * [Money.php] => Array - * ( - * ... - * ) - * - * [MoneyBag.php] => Array - * ( - * ... - * ) - * ) - * - * - * is transformed into - * - * - * Array - * ( - * [.] => Array - * ( - * [Money.php] => Array - * ( - * ... - * ) - * - * [MoneyBag.php] => Array - * ( - * ... - * ) - * ) - * ) - * - */ - private function buildDirectoryStructure(ProcessedCodeCoverageData $data): array - { - $result = []; - - foreach ($data->coveredFiles() as $originalPath) { - $path = explode(DIRECTORY_SEPARATOR, $originalPath); - $pointer = &$result; - $max = count($path); - - for ($i = 0; $i < $max; $i++) { - $type = ''; - - if ($i === ($max - 1)) { - $type = '/f'; - } - - $pointer = &$pointer[$path[$i] . $type]; - } - - $pointer = [ - 'lineCoverage' => $data->lineCoverage()[$originalPath] ?? [], - 'functionCoverage' => $data->functionCoverage()[$originalPath] ?? [], - ]; - } - - return $result; - } - - /** - * Reduces the paths by cutting the longest common start path. - * - * For instance, - * - * - * Array - * ( - * [/home/sb/Money/Money.php] => Array - * ( - * ... - * ) - * - * [/home/sb/Money/MoneyBag.php] => Array - * ( - * ... - * ) - * ) - * - * - * is reduced to - * - * - * Array - * ( - * [Money.php] => Array - * ( - * ... - * ) - * - * [MoneyBag.php] => Array - * ( - * ... - * ) - * ) - * - */ - private function reducePaths(ProcessedCodeCoverageData $coverage): string - { - if (empty($coverage->coveredFiles())) { - return '.'; - } - - $commonPath = ''; - $paths = $coverage->coveredFiles(); - - if (count($paths) === 1) { - $commonPath = dirname($paths[0]) . DIRECTORY_SEPARATOR; - $coverage->renameFile($paths[0], basename($paths[0])); - - return $commonPath; - } - - $max = count($paths); - - for ($i = 0; $i < $max; $i++) { - // strip phar:// prefixes - if (strpos($paths[$i], 'phar://') === 0) { - $paths[$i] = substr($paths[$i], 7); - $paths[$i] = str_replace('/', DIRECTORY_SEPARATOR, $paths[$i]); - } - $paths[$i] = explode(DIRECTORY_SEPARATOR, $paths[$i]); - - if (empty($paths[$i][0])) { - $paths[$i][0] = DIRECTORY_SEPARATOR; - } - } - - $done = false; - $max = count($paths); - - while (!$done) { - for ($i = 0; $i < $max - 1; $i++) { - if (!isset($paths[$i][0]) || - !isset($paths[$i + 1][0]) || - $paths[$i][0] !== $paths[$i + 1][0]) { - $done = true; - - break; - } - } - - if (!$done) { - $commonPath .= $paths[0][0]; - - if ($paths[0][0] !== DIRECTORY_SEPARATOR) { - $commonPath .= DIRECTORY_SEPARATOR; - } - - for ($i = 0; $i < $max; $i++) { - array_shift($paths[$i]); - } - } - } - - $original = $coverage->coveredFiles(); - $max = count($original); - - for ($i = 0; $i < $max; $i++) { - $coverage->renameFile($original[$i], implode(DIRECTORY_SEPARATOR, $paths[$i])); - } - - return substr($commonPath, 0, -1); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Node/CrapIndex.php b/vendor/phpunit/php-code-coverage/src/Node/CrapIndex.php deleted file mode 100644 index 30b86b7..0000000 --- a/vendor/phpunit/php-code-coverage/src/Node/CrapIndex.php +++ /dev/null @@ -1,50 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Node; - -use function sprintf; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class CrapIndex -{ - /** - * @var int - */ - private $cyclomaticComplexity; - - /** - * @var float - */ - private $codeCoverage; - - public function __construct(int $cyclomaticComplexity, float $codeCoverage) - { - $this->cyclomaticComplexity = $cyclomaticComplexity; - $this->codeCoverage = $codeCoverage; - } - - public function asString(): string - { - if ($this->codeCoverage === 0.0) { - return (string) ($this->cyclomaticComplexity ** 2 + $this->cyclomaticComplexity); - } - - if ($this->codeCoverage >= 95) { - return (string) $this->cyclomaticComplexity; - } - - return sprintf( - '%01.2F', - $this->cyclomaticComplexity ** 2 * (1 - $this->codeCoverage / 100) ** 3 + $this->cyclomaticComplexity - ); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Node/Directory.php b/vendor/phpunit/php-code-coverage/src/Node/Directory.php deleted file mode 100644 index d6ee07e..0000000 --- a/vendor/phpunit/php-code-coverage/src/Node/Directory.php +++ /dev/null @@ -1,440 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Node; - -use function array_merge; -use function count; -use IteratorAggregate; -use RecursiveIteratorIterator; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Directory extends AbstractNode implements IteratorAggregate -{ - /** - * @var AbstractNode[] - */ - private $children = []; - - /** - * @var Directory[] - */ - private $directories = []; - - /** - * @var File[] - */ - private $files = []; - - /** - * @var array - */ - private $classes; - - /** - * @var array - */ - private $traits; - - /** - * @var array - */ - private $functions; - - /** - * @psalm-var null|array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} - */ - private $linesOfCode; - - /** - * @var int - */ - private $numFiles = -1; - - /** - * @var int - */ - private $numExecutableLines = -1; - - /** - * @var int - */ - private $numExecutedLines = -1; - - /** - * @var int - */ - private $numExecutableBranches = -1; - - /** - * @var int - */ - private $numExecutedBranches = -1; - - /** - * @var int - */ - private $numExecutablePaths = -1; - - /** - * @var int - */ - private $numExecutedPaths = -1; - - /** - * @var int - */ - private $numClasses = -1; - - /** - * @var int - */ - private $numTestedClasses = -1; - - /** - * @var int - */ - private $numTraits = -1; - - /** - * @var int - */ - private $numTestedTraits = -1; - - /** - * @var int - */ - private $numMethods = -1; - - /** - * @var int - */ - private $numTestedMethods = -1; - - /** - * @var int - */ - private $numFunctions = -1; - - /** - * @var int - */ - private $numTestedFunctions = -1; - - public function count(): int - { - if ($this->numFiles === -1) { - $this->numFiles = 0; - - foreach ($this->children as $child) { - $this->numFiles += count($child); - } - } - - return $this->numFiles; - } - - public function getIterator(): RecursiveIteratorIterator - { - return new RecursiveIteratorIterator( - new Iterator($this), - RecursiveIteratorIterator::SELF_FIRST - ); - } - - public function addDirectory(string $name): self - { - $directory = new self($name, $this); - - $this->children[] = $directory; - $this->directories[] = &$this->children[count($this->children) - 1]; - - return $directory; - } - - public function addFile(File $file): void - { - $this->children[] = $file; - $this->files[] = &$this->children[count($this->children) - 1]; - - $this->numExecutableLines = -1; - $this->numExecutedLines = -1; - } - - public function directories(): array - { - return $this->directories; - } - - public function files(): array - { - return $this->files; - } - - public function children(): array - { - return $this->children; - } - - public function classes(): array - { - if ($this->classes === null) { - $this->classes = []; - - foreach ($this->children as $child) { - $this->classes = array_merge( - $this->classes, - $child->classes() - ); - } - } - - return $this->classes; - } - - public function traits(): array - { - if ($this->traits === null) { - $this->traits = []; - - foreach ($this->children as $child) { - $this->traits = array_merge( - $this->traits, - $child->traits() - ); - } - } - - return $this->traits; - } - - public function functions(): array - { - if ($this->functions === null) { - $this->functions = []; - - foreach ($this->children as $child) { - $this->functions = array_merge( - $this->functions, - $child->functions() - ); - } - } - - return $this->functions; - } - - /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} - */ - public function linesOfCode(): array - { - if ($this->linesOfCode === null) { - $this->linesOfCode = [ - 'linesOfCode' => 0, - 'commentLinesOfCode' => 0, - 'nonCommentLinesOfCode' => 0, - ]; - - foreach ($this->children as $child) { - $childLinesOfCode = $child->linesOfCode(); - - $this->linesOfCode['linesOfCode'] += $childLinesOfCode['linesOfCode']; - $this->linesOfCode['commentLinesOfCode'] += $childLinesOfCode['commentLinesOfCode']; - $this->linesOfCode['nonCommentLinesOfCode'] += $childLinesOfCode['nonCommentLinesOfCode']; - } - } - - return $this->linesOfCode; - } - - public function numberOfExecutableLines(): int - { - if ($this->numExecutableLines === -1) { - $this->numExecutableLines = 0; - - foreach ($this->children as $child) { - $this->numExecutableLines += $child->numberOfExecutableLines(); - } - } - - return $this->numExecutableLines; - } - - public function numberOfExecutedLines(): int - { - if ($this->numExecutedLines === -1) { - $this->numExecutedLines = 0; - - foreach ($this->children as $child) { - $this->numExecutedLines += $child->numberOfExecutedLines(); - } - } - - return $this->numExecutedLines; - } - - public function numberOfExecutableBranches(): int - { - if ($this->numExecutableBranches === -1) { - $this->numExecutableBranches = 0; - - foreach ($this->children as $child) { - $this->numExecutableBranches += $child->numberOfExecutableBranches(); - } - } - - return $this->numExecutableBranches; - } - - public function numberOfExecutedBranches(): int - { - if ($this->numExecutedBranches === -1) { - $this->numExecutedBranches = 0; - - foreach ($this->children as $child) { - $this->numExecutedBranches += $child->numberOfExecutedBranches(); - } - } - - return $this->numExecutedBranches; - } - - public function numberOfExecutablePaths(): int - { - if ($this->numExecutablePaths === -1) { - $this->numExecutablePaths = 0; - - foreach ($this->children as $child) { - $this->numExecutablePaths += $child->numberOfExecutablePaths(); - } - } - - return $this->numExecutablePaths; - } - - public function numberOfExecutedPaths(): int - { - if ($this->numExecutedPaths === -1) { - $this->numExecutedPaths = 0; - - foreach ($this->children as $child) { - $this->numExecutedPaths += $child->numberOfExecutedPaths(); - } - } - - return $this->numExecutedPaths; - } - - public function numberOfClasses(): int - { - if ($this->numClasses === -1) { - $this->numClasses = 0; - - foreach ($this->children as $child) { - $this->numClasses += $child->numberOfClasses(); - } - } - - return $this->numClasses; - } - - public function numberOfTestedClasses(): int - { - if ($this->numTestedClasses === -1) { - $this->numTestedClasses = 0; - - foreach ($this->children as $child) { - $this->numTestedClasses += $child->numberOfTestedClasses(); - } - } - - return $this->numTestedClasses; - } - - public function numberOfTraits(): int - { - if ($this->numTraits === -1) { - $this->numTraits = 0; - - foreach ($this->children as $child) { - $this->numTraits += $child->numberOfTraits(); - } - } - - return $this->numTraits; - } - - public function numberOfTestedTraits(): int - { - if ($this->numTestedTraits === -1) { - $this->numTestedTraits = 0; - - foreach ($this->children as $child) { - $this->numTestedTraits += $child->numberOfTestedTraits(); - } - } - - return $this->numTestedTraits; - } - - public function numberOfMethods(): int - { - if ($this->numMethods === -1) { - $this->numMethods = 0; - - foreach ($this->children as $child) { - $this->numMethods += $child->numberOfMethods(); - } - } - - return $this->numMethods; - } - - public function numberOfTestedMethods(): int - { - if ($this->numTestedMethods === -1) { - $this->numTestedMethods = 0; - - foreach ($this->children as $child) { - $this->numTestedMethods += $child->numberOfTestedMethods(); - } - } - - return $this->numTestedMethods; - } - - public function numberOfFunctions(): int - { - if ($this->numFunctions === -1) { - $this->numFunctions = 0; - - foreach ($this->children as $child) { - $this->numFunctions += $child->numberOfFunctions(); - } - } - - return $this->numFunctions; - } - - public function numberOfTestedFunctions(): int - { - if ($this->numTestedFunctions === -1) { - $this->numTestedFunctions = 0; - - foreach ($this->children as $child) { - $this->numTestedFunctions += $child->numberOfTestedFunctions(); - } - } - - return $this->numTestedFunctions; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Node/File.php b/vendor/phpunit/php-code-coverage/src/Node/File.php deleted file mode 100644 index af3764e..0000000 --- a/vendor/phpunit/php-code-coverage/src/Node/File.php +++ /dev/null @@ -1,651 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Node; - -use function array_filter; -use function count; -use function range; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class File extends AbstractNode -{ - /** - * @var array - */ - private $lineCoverageData; - - /** - * @var array - */ - private $functionCoverageData; - - /** - * @var array - */ - private $testData; - - /** - * @var int - */ - private $numExecutableLines = 0; - - /** - * @var int - */ - private $numExecutedLines = 0; - - /** - * @var int - */ - private $numExecutableBranches = 0; - - /** - * @var int - */ - private $numExecutedBranches = 0; - - /** - * @var int - */ - private $numExecutablePaths = 0; - - /** - * @var int - */ - private $numExecutedPaths = 0; - - /** - * @var array - */ - private $classes = []; - - /** - * @var array - */ - private $traits = []; - - /** - * @var array - */ - private $functions = []; - - /** - * @psalm-var array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} - */ - private $linesOfCode; - - /** - * @var int - */ - private $numClasses; - - /** - * @var int - */ - private $numTestedClasses = 0; - - /** - * @var int - */ - private $numTraits; - - /** - * @var int - */ - private $numTestedTraits = 0; - - /** - * @var int - */ - private $numMethods; - - /** - * @var int - */ - private $numTestedMethods; - - /** - * @var int - */ - private $numTestedFunctions; - - /** - * @var array - */ - private $codeUnitsByLine = []; - - /** - * @psalm-param array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} $linesOfCode - */ - public function __construct(string $name, AbstractNode $parent, array $lineCoverageData, array $functionCoverageData, array $testData, array $classes, array $traits, array $functions, array $linesOfCode) - { - parent::__construct($name, $parent); - - $this->lineCoverageData = $lineCoverageData; - $this->functionCoverageData = $functionCoverageData; - $this->testData = $testData; - $this->linesOfCode = $linesOfCode; - - $this->calculateStatistics($classes, $traits, $functions); - } - - public function count(): int - { - return 1; - } - - public function lineCoverageData(): array - { - return $this->lineCoverageData; - } - - public function functionCoverageData(): array - { - return $this->functionCoverageData; - } - - public function testData(): array - { - return $this->testData; - } - - public function classes(): array - { - return $this->classes; - } - - public function traits(): array - { - return $this->traits; - } - - public function functions(): array - { - return $this->functions; - } - - /** - * @psalm-return array{linesOfCode: int, commentLinesOfCode: int, nonCommentLinesOfCode: int} - */ - public function linesOfCode(): array - { - return $this->linesOfCode; - } - - public function numberOfExecutableLines(): int - { - return $this->numExecutableLines; - } - - public function numberOfExecutedLines(): int - { - return $this->numExecutedLines; - } - - public function numberOfExecutableBranches(): int - { - return $this->numExecutableBranches; - } - - public function numberOfExecutedBranches(): int - { - return $this->numExecutedBranches; - } - - public function numberOfExecutablePaths(): int - { - return $this->numExecutablePaths; - } - - public function numberOfExecutedPaths(): int - { - return $this->numExecutedPaths; - } - - public function numberOfClasses(): int - { - if ($this->numClasses === null) { - $this->numClasses = 0; - - foreach ($this->classes as $class) { - foreach ($class['methods'] as $method) { - if ($method['executableLines'] > 0) { - $this->numClasses++; - - continue 2; - } - } - } - } - - return $this->numClasses; - } - - public function numberOfTestedClasses(): int - { - return $this->numTestedClasses; - } - - public function numberOfTraits(): int - { - if ($this->numTraits === null) { - $this->numTraits = 0; - - foreach ($this->traits as $trait) { - foreach ($trait['methods'] as $method) { - if ($method['executableLines'] > 0) { - $this->numTraits++; - - continue 2; - } - } - } - } - - return $this->numTraits; - } - - public function numberOfTestedTraits(): int - { - return $this->numTestedTraits; - } - - public function numberOfMethods(): int - { - if ($this->numMethods === null) { - $this->numMethods = 0; - - foreach ($this->classes as $class) { - foreach ($class['methods'] as $method) { - if ($method['executableLines'] > 0) { - $this->numMethods++; - } - } - } - - foreach ($this->traits as $trait) { - foreach ($trait['methods'] as $method) { - if ($method['executableLines'] > 0) { - $this->numMethods++; - } - } - } - } - - return $this->numMethods; - } - - public function numberOfTestedMethods(): int - { - if ($this->numTestedMethods === null) { - $this->numTestedMethods = 0; - - foreach ($this->classes as $class) { - foreach ($class['methods'] as $method) { - if ($method['executableLines'] > 0 && - $method['coverage'] === 100) { - $this->numTestedMethods++; - } - } - } - - foreach ($this->traits as $trait) { - foreach ($trait['methods'] as $method) { - if ($method['executableLines'] > 0 && - $method['coverage'] === 100) { - $this->numTestedMethods++; - } - } - } - } - - return $this->numTestedMethods; - } - - public function numberOfFunctions(): int - { - return count($this->functions); - } - - public function numberOfTestedFunctions(): int - { - if ($this->numTestedFunctions === null) { - $this->numTestedFunctions = 0; - - foreach ($this->functions as $function) { - if ($function['executableLines'] > 0 && - $function['coverage'] === 100) { - $this->numTestedFunctions++; - } - } - } - - return $this->numTestedFunctions; - } - - private function calculateStatistics(array $classes, array $traits, array $functions): void - { - foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) { - $this->codeUnitsByLine[$lineNumber] = []; - } - - $this->processClasses($classes); - $this->processTraits($traits); - $this->processFunctions($functions); - - foreach (range(1, $this->linesOfCode['linesOfCode']) as $lineNumber) { - if (isset($this->lineCoverageData[$lineNumber])) { - foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) { - $codeUnit['executableLines']++; - } - - unset($codeUnit); - - $this->numExecutableLines++; - - if (count($this->lineCoverageData[$lineNumber]) > 0) { - foreach ($this->codeUnitsByLine[$lineNumber] as &$codeUnit) { - $codeUnit['executedLines']++; - } - - unset($codeUnit); - - $this->numExecutedLines++; - } - } - } - - foreach ($this->traits as &$trait) { - foreach ($trait['methods'] as &$method) { - $methodLineCoverage = $method['executableLines'] ? ($method['executedLines'] / $method['executableLines']) * 100 : 100; - $methodBranchCoverage = $method['executableBranches'] ? ($method['executedBranches'] / $method['executableBranches']) * 100 : 0; - $methodPathCoverage = $method['executablePaths'] ? ($method['executedPaths'] / $method['executablePaths']) * 100 : 0; - - $method['coverage'] = $methodBranchCoverage ?: $methodLineCoverage; - $method['crap'] = (new CrapIndex($method['ccn'], $methodPathCoverage ?: $methodLineCoverage))->asString(); - - $trait['ccn'] += $method['ccn']; - } - - unset($method); - - $traitLineCoverage = $trait['executableLines'] ? ($trait['executedLines'] / $trait['executableLines']) * 100 : 100; - $traitBranchCoverage = $trait['executableBranches'] ? ($trait['executedBranches'] / $trait['executableBranches']) * 100 : 0; - $traitPathCoverage = $trait['executablePaths'] ? ($trait['executedPaths'] / $trait['executablePaths']) * 100 : 0; - - $trait['coverage'] = $traitBranchCoverage ?: $traitLineCoverage; - $trait['crap'] = (new CrapIndex($trait['ccn'], $traitPathCoverage ?: $traitLineCoverage))->asString(); - - if ($trait['executableLines'] > 0 && $trait['coverage'] === 100) { - $this->numTestedClasses++; - } - } - - unset($trait); - - foreach ($this->classes as &$class) { - foreach ($class['methods'] as &$method) { - $methodLineCoverage = $method['executableLines'] ? ($method['executedLines'] / $method['executableLines']) * 100 : 100; - $methodBranchCoverage = $method['executableBranches'] ? ($method['executedBranches'] / $method['executableBranches']) * 100 : 0; - $methodPathCoverage = $method['executablePaths'] ? ($method['executedPaths'] / $method['executablePaths']) * 100 : 0; - - $method['coverage'] = $methodBranchCoverage ?: $methodLineCoverage; - $method['crap'] = (new CrapIndex($method['ccn'], $methodPathCoverage ?: $methodLineCoverage))->asString(); - - $class['ccn'] += $method['ccn']; - } - - unset($method); - - $classLineCoverage = $class['executableLines'] ? ($class['executedLines'] / $class['executableLines']) * 100 : 100; - $classBranchCoverage = $class['executableBranches'] ? ($class['executedBranches'] / $class['executableBranches']) * 100 : 0; - $classPathCoverage = $class['executablePaths'] ? ($class['executedPaths'] / $class['executablePaths']) * 100 : 0; - - $class['coverage'] = $classBranchCoverage ?: $classLineCoverage; - $class['crap'] = (new CrapIndex($class['ccn'], $classPathCoverage ?: $classLineCoverage))->asString(); - - if ($class['executableLines'] > 0 && $class['coverage'] === 100) { - $this->numTestedClasses++; - } - } - - unset($class); - - foreach ($this->functions as &$function) { - $functionLineCoverage = $function['executableLines'] ? ($function['executedLines'] / $function['executableLines']) * 100 : 100; - $functionBranchCoverage = $function['executableBranches'] ? ($function['executedBranches'] / $function['executableBranches']) * 100 : 0; - $functionPathCoverage = $function['executablePaths'] ? ($function['executedPaths'] / $function['executablePaths']) * 100 : 0; - - $function['coverage'] = $functionBranchCoverage ?: $functionLineCoverage; - $function['crap'] = (new CrapIndex($function['ccn'], $functionPathCoverage ?: $functionLineCoverage))->asString(); - - if ($function['coverage'] === 100) { - $this->numTestedFunctions++; - } - } - } - - private function processClasses(array $classes): void - { - $link = $this->id() . '.html#'; - - foreach ($classes as $className => $class) { - $this->classes[$className] = [ - 'className' => $className, - 'namespace' => $class['namespace'], - 'methods' => [], - 'startLine' => $class['startLine'], - 'executableLines' => 0, - 'executedLines' => 0, - 'executableBranches' => 0, - 'executedBranches' => 0, - 'executablePaths' => 0, - 'executedPaths' => 0, - 'ccn' => 0, - 'coverage' => 0, - 'crap' => 0, - 'link' => $link . $class['startLine'], - ]; - - foreach ($class['methods'] as $methodName => $method) { - $methodData = $this->newMethod($className, $methodName, $method, $link); - $this->classes[$className]['methods'][$methodName] = $methodData; - - $this->classes[$className]['executableBranches'] += $methodData['executableBranches']; - $this->classes[$className]['executedBranches'] += $methodData['executedBranches']; - $this->classes[$className]['executablePaths'] += $methodData['executablePaths']; - $this->classes[$className]['executedPaths'] += $methodData['executedPaths']; - - $this->numExecutableBranches += $methodData['executableBranches']; - $this->numExecutedBranches += $methodData['executedBranches']; - $this->numExecutablePaths += $methodData['executablePaths']; - $this->numExecutedPaths += $methodData['executedPaths']; - - foreach (range($method['startLine'], $method['endLine']) as $lineNumber) { - $this->codeUnitsByLine[$lineNumber] = [ - &$this->classes[$className], - &$this->classes[$className]['methods'][$methodName], - ]; - } - } - } - } - - private function processTraits(array $traits): void - { - $link = $this->id() . '.html#'; - - foreach ($traits as $traitName => $trait) { - $this->traits[$traitName] = [ - 'traitName' => $traitName, - 'namespace' => $trait['namespace'], - 'methods' => [], - 'startLine' => $trait['startLine'], - 'executableLines' => 0, - 'executedLines' => 0, - 'executableBranches' => 0, - 'executedBranches' => 0, - 'executablePaths' => 0, - 'executedPaths' => 0, - 'ccn' => 0, - 'coverage' => 0, - 'crap' => 0, - 'link' => $link . $trait['startLine'], - ]; - - foreach ($trait['methods'] as $methodName => $method) { - $methodData = $this->newMethod($traitName, $methodName, $method, $link); - $this->traits[$traitName]['methods'][$methodName] = $methodData; - - $this->traits[$traitName]['executableBranches'] += $methodData['executableBranches']; - $this->traits[$traitName]['executedBranches'] += $methodData['executedBranches']; - $this->traits[$traitName]['executablePaths'] += $methodData['executablePaths']; - $this->traits[$traitName]['executedPaths'] += $methodData['executedPaths']; - - $this->numExecutableBranches += $methodData['executableBranches']; - $this->numExecutedBranches += $methodData['executedBranches']; - $this->numExecutablePaths += $methodData['executablePaths']; - $this->numExecutedPaths += $methodData['executedPaths']; - - foreach (range($method['startLine'], $method['endLine']) as $lineNumber) { - $this->codeUnitsByLine[$lineNumber] = [ - &$this->traits[$traitName], - &$this->traits[$traitName]['methods'][$methodName], - ]; - } - } - } - } - - private function processFunctions(array $functions): void - { - $link = $this->id() . '.html#'; - - foreach ($functions as $functionName => $function) { - $this->functions[$functionName] = [ - 'functionName' => $functionName, - 'namespace' => $function['namespace'], - 'signature' => $function['signature'], - 'startLine' => $function['startLine'], - 'endLine' => $function['endLine'], - 'executableLines' => 0, - 'executedLines' => 0, - 'executableBranches' => 0, - 'executedBranches' => 0, - 'executablePaths' => 0, - 'executedPaths' => 0, - 'ccn' => $function['ccn'], - 'coverage' => 0, - 'crap' => 0, - 'link' => $link . $function['startLine'], - ]; - - foreach (range($function['startLine'], $function['endLine']) as $lineNumber) { - $this->codeUnitsByLine[$lineNumber] = [&$this->functions[$functionName]]; - } - - if (isset($this->functionCoverageData[$functionName]['branches'])) { - $this->functions[$functionName]['executableBranches'] = count( - $this->functionCoverageData[$functionName]['branches'] - ); - - $this->functions[$functionName]['executedBranches'] = count( - array_filter( - $this->functionCoverageData[$functionName]['branches'], - static function (array $branch) - { - return (bool) $branch['hit']; - } - ) - ); - } - - if (isset($this->functionCoverageData[$functionName]['paths'])) { - $this->functions[$functionName]['executablePaths'] = count( - $this->functionCoverageData[$functionName]['paths'] - ); - - $this->functions[$functionName]['executedPaths'] = count( - array_filter( - $this->functionCoverageData[$functionName]['paths'], - static function (array $path) - { - return (bool) $path['hit']; - } - ) - ); - } - - $this->numExecutableBranches += $this->functions[$functionName]['executableBranches']; - $this->numExecutedBranches += $this->functions[$functionName]['executedBranches']; - $this->numExecutablePaths += $this->functions[$functionName]['executablePaths']; - $this->numExecutedPaths += $this->functions[$functionName]['executedPaths']; - } - } - - private function newMethod(string $className, string $methodName, array $method, string $link): array - { - $methodData = [ - 'methodName' => $methodName, - 'visibility' => $method['visibility'], - 'signature' => $method['signature'], - 'startLine' => $method['startLine'], - 'endLine' => $method['endLine'], - 'executableLines' => 0, - 'executedLines' => 0, - 'executableBranches' => 0, - 'executedBranches' => 0, - 'executablePaths' => 0, - 'executedPaths' => 0, - 'ccn' => $method['ccn'], - 'coverage' => 0, - 'crap' => 0, - 'link' => $link . $method['startLine'], - ]; - - $key = $className . '->' . $methodName; - - if (isset($this->functionCoverageData[$key]['branches'])) { - $methodData['executableBranches'] = count( - $this->functionCoverageData[$key]['branches'] - ); - - $methodData['executedBranches'] = count( - array_filter( - $this->functionCoverageData[$key]['branches'], - static function (array $branch) - { - return (bool) $branch['hit']; - } - ) - ); - } - - if (isset($this->functionCoverageData[$key]['paths'])) { - $methodData['executablePaths'] = count( - $this->functionCoverageData[$key]['paths'] - ); - - $methodData['executedPaths'] = count( - array_filter( - $this->functionCoverageData[$key]['paths'], - static function (array $path) - { - return (bool) $path['hit']; - } - ) - ); - } - - return $methodData; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Node/Iterator.php b/vendor/phpunit/php-code-coverage/src/Node/Iterator.php deleted file mode 100644 index 0d1c735..0000000 --- a/vendor/phpunit/php-code-coverage/src/Node/Iterator.php +++ /dev/null @@ -1,90 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Node; - -use function count; -use RecursiveIterator; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Iterator implements RecursiveIterator -{ - /** - * @var int - */ - private $position; - - /** - * @var AbstractNode[] - */ - private $nodes; - - public function __construct(Directory $node) - { - $this->nodes = $node->children(); - } - - /** - * Rewinds the Iterator to the first element. - */ - public function rewind(): void - { - $this->position = 0; - } - - /** - * Checks if there is a current element after calls to rewind() or next(). - */ - public function valid(): bool - { - return $this->position < count($this->nodes); - } - - /** - * Returns the key of the current element. - */ - public function key(): int - { - return $this->position; - } - - /** - * Returns the current element. - */ - public function current(): ?AbstractNode - { - return $this->valid() ? $this->nodes[$this->position] : null; - } - - /** - * Moves forward to next element. - */ - public function next(): void - { - $this->position++; - } - - /** - * Returns the sub iterator for the current element. - */ - public function getChildren(): self - { - return new self($this->nodes[$this->position]); - } - - /** - * Checks whether the current element has children. - */ - public function hasChildren(): bool - { - return $this->nodes[$this->position] instanceof Directory; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php b/vendor/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php deleted file mode 100644 index 1ed29ad..0000000 --- a/vendor/phpunit/php-code-coverage/src/ProcessedCodeCoverageData.php +++ /dev/null @@ -1,255 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use function array_key_exists; -use function array_keys; -use function array_merge; -use function array_unique; -use function count; -use function is_array; -use function ksort; -use SebastianBergmann\CodeCoverage\Driver\Driver; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class ProcessedCodeCoverageData -{ - /** - * Line coverage data. - * An array of filenames, each having an array of linenumbers, each executable line having an array of testcase ids. - * - * @var array - */ - private $lineCoverage = []; - - /** - * Function coverage data. - * Maintains base format of raw data (@see https://xdebug.org/docs/code_coverage), but each 'hit' entry is an array - * of testcase ids. - * - * @var array - */ - private $functionCoverage = []; - - public function initializeUnseenData(RawCodeCoverageData $rawData): void - { - foreach ($rawData->lineCoverage() as $file => $lines) { - if (!isset($this->lineCoverage[$file])) { - $this->lineCoverage[$file] = []; - - foreach ($lines as $k => $v) { - $this->lineCoverage[$file][$k] = $v === Driver::LINE_NOT_EXECUTABLE ? null : []; - } - } - } - - foreach ($rawData->functionCoverage() as $file => $functions) { - foreach ($functions as $functionName => $functionData) { - if (isset($this->functionCoverage[$file][$functionName])) { - $this->initPreviouslySeenFunction($file, $functionName, $functionData); - } else { - $this->initPreviouslyUnseenFunction($file, $functionName, $functionData); - } - } - } - } - - public function markCodeAsExecutedByTestCase(string $testCaseId, RawCodeCoverageData $executedCode): void - { - foreach ($executedCode->lineCoverage() as $file => $lines) { - foreach ($lines as $k => $v) { - if ($v === Driver::LINE_EXECUTED) { - $this->lineCoverage[$file][$k][] = $testCaseId; - } - } - } - - foreach ($executedCode->functionCoverage() as $file => $functions) { - foreach ($functions as $functionName => $functionData) { - foreach ($functionData['branches'] as $branchId => $branchData) { - if ($branchData['hit'] === Driver::BRANCH_HIT) { - $this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'][] = $testCaseId; - } - } - - foreach ($functionData['paths'] as $pathId => $pathData) { - if ($pathData['hit'] === Driver::BRANCH_HIT) { - $this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'][] = $testCaseId; - } - } - } - } - } - - public function setLineCoverage(array $lineCoverage): void - { - $this->lineCoverage = $lineCoverage; - } - - public function lineCoverage(): array - { - ksort($this->lineCoverage); - - return $this->lineCoverage; - } - - public function setFunctionCoverage(array $functionCoverage): void - { - $this->functionCoverage = $functionCoverage; - } - - public function functionCoverage(): array - { - ksort($this->functionCoverage); - - return $this->functionCoverage; - } - - public function coveredFiles(): array - { - ksort($this->lineCoverage); - - return array_keys($this->lineCoverage); - } - - public function renameFile(string $oldFile, string $newFile): void - { - $this->lineCoverage[$newFile] = $this->lineCoverage[$oldFile]; - - if (isset($this->functionCoverage[$oldFile])) { - $this->functionCoverage[$newFile] = $this->functionCoverage[$oldFile]; - } - - unset($this->lineCoverage[$oldFile], $this->functionCoverage[$oldFile]); - } - - public function merge(self $newData): void - { - foreach ($newData->lineCoverage as $file => $lines) { - if (!isset($this->lineCoverage[$file])) { - $this->lineCoverage[$file] = $lines; - - continue; - } - - // we should compare the lines if any of two contains data - $compareLineNumbers = array_unique( - array_merge( - array_keys($this->lineCoverage[$file]), - array_keys($newData->lineCoverage[$file]) - ) - ); - - foreach ($compareLineNumbers as $line) { - $thatPriority = $this->priorityForLine($newData->lineCoverage[$file], $line); - $thisPriority = $this->priorityForLine($this->lineCoverage[$file], $line); - - if ($thatPriority > $thisPriority) { - $this->lineCoverage[$file][$line] = $newData->lineCoverage[$file][$line]; - } elseif ($thatPriority === $thisPriority && is_array($this->lineCoverage[$file][$line])) { - $this->lineCoverage[$file][$line] = array_unique( - array_merge($this->lineCoverage[$file][$line], $newData->lineCoverage[$file][$line]) - ); - } - } - } - - foreach ($newData->functionCoverage as $file => $functions) { - if (!isset($this->functionCoverage[$file])) { - $this->functionCoverage[$file] = $functions; - - continue; - } - - foreach ($functions as $functionName => $functionData) { - if (isset($this->functionCoverage[$file][$functionName])) { - $this->initPreviouslySeenFunction($file, $functionName, $functionData); - } else { - $this->initPreviouslyUnseenFunction($file, $functionName, $functionData); - } - - foreach ($functionData['branches'] as $branchId => $branchData) { - $this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'] = array_unique(array_merge($this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'], $branchData['hit'])); - } - - foreach ($functionData['paths'] as $pathId => $pathData) { - $this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'] = array_unique(array_merge($this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'], $pathData['hit'])); - } - } - } - } - - /** - * Determine the priority for a line. - * - * 1 = the line is not set - * 2 = the line has not been tested - * 3 = the line is dead code - * 4 = the line has been tested - * - * During a merge, a higher number is better. - */ - private function priorityForLine(array $data, int $line): int - { - if (!array_key_exists($line, $data)) { - return 1; - } - - if (is_array($data[$line]) && count($data[$line]) === 0) { - return 2; - } - - if ($data[$line] === null) { - return 3; - } - - return 4; - } - - /** - * For a function we have never seen before, copy all data over and simply init the 'hit' array. - */ - private function initPreviouslyUnseenFunction(string $file, string $functionName, array $functionData): void - { - $this->functionCoverage[$file][$functionName] = $functionData; - - foreach (array_keys($functionData['branches']) as $branchId) { - $this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'] = []; - } - - foreach (array_keys($functionData['paths']) as $pathId) { - $this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'] = []; - } - } - - /** - * For a function we have seen before, only copy over and init the 'hit' array for any unseen branches and paths. - * Techniques such as mocking and where the contents of a file are different vary during tests (e.g. compiling - * containers) mean that the functions inside a file cannot be relied upon to be static. - */ - private function initPreviouslySeenFunction(string $file, string $functionName, array $functionData): void - { - foreach ($functionData['branches'] as $branchId => $branchData) { - if (!isset($this->functionCoverage[$file][$functionName]['branches'][$branchId])) { - $this->functionCoverage[$file][$functionName]['branches'][$branchId] = $branchData; - $this->functionCoverage[$file][$functionName]['branches'][$branchId]['hit'] = []; - } - } - - foreach ($functionData['paths'] as $pathId => $pathData) { - if (!isset($this->functionCoverage[$file][$functionName]['paths'][$pathId])) { - $this->functionCoverage[$file][$functionName]['paths'][$pathId] = $pathData; - $this->functionCoverage[$file][$functionName]['paths'][$pathId]['hit'] = []; - } - } - } -} diff --git a/vendor/phpunit/php-code-coverage/src/RawCodeCoverageData.php b/vendor/phpunit/php-code-coverage/src/RawCodeCoverageData.php deleted file mode 100644 index 9cb20e7..0000000 --- a/vendor/phpunit/php-code-coverage/src/RawCodeCoverageData.php +++ /dev/null @@ -1,274 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage; - -use function array_diff; -use function array_diff_key; -use function array_flip; -use function array_intersect; -use function array_intersect_key; -use function count; -use function explode; -use function file_get_contents; -use function in_array; -use function is_file; -use function range; -use function trim; -use SebastianBergmann\CodeCoverage\Driver\Driver; -use SebastianBergmann\CodeCoverage\StaticAnalysis\FileAnalyser; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class RawCodeCoverageData -{ - /** - * @var array> - */ - private static $emptyLineCache = []; - - /** - * @var array - * - * @see https://xdebug.org/docs/code_coverage for format - */ - private $lineCoverage; - - /** - * @var array - * - * @see https://xdebug.org/docs/code_coverage for format - */ - private $functionCoverage; - - public static function fromXdebugWithoutPathCoverage(array $rawCoverage): self - { - return new self($rawCoverage, []); - } - - public static function fromXdebugWithPathCoverage(array $rawCoverage): self - { - $lineCoverage = []; - $functionCoverage = []; - - foreach ($rawCoverage as $file => $fileCoverageData) { - $lineCoverage[$file] = $fileCoverageData['lines']; - $functionCoverage[$file] = $fileCoverageData['functions']; - } - - return new self($lineCoverage, $functionCoverage); - } - - public static function fromXdebugWithMixedCoverage(array $rawCoverage): self - { - $lineCoverage = []; - $functionCoverage = []; - - foreach ($rawCoverage as $file => $fileCoverageData) { - if (!isset($fileCoverageData['functions'])) { - // Current file does not have functions, so line coverage - // is stored in $fileCoverageData, not in $fileCoverageData['lines'] - $lineCoverage[$file] = $fileCoverageData; - - continue; - } - - $lineCoverage[$file] = $fileCoverageData['lines']; - $functionCoverage[$file] = $fileCoverageData['functions']; - } - - return new self($lineCoverage, $functionCoverage); - } - - public static function fromUncoveredFile(string $filename, FileAnalyser $analyser): self - { - $lineCoverage = []; - - foreach ($analyser->executableLinesIn($filename) as $line => $branch) { - $lineCoverage[$line] = Driver::LINE_NOT_EXECUTED; - } - - return new self([$filename => $lineCoverage], []); - } - - private function __construct(array $lineCoverage, array $functionCoverage) - { - $this->lineCoverage = $lineCoverage; - $this->functionCoverage = $functionCoverage; - - $this->skipEmptyLines(); - } - - public function clear(): void - { - $this->lineCoverage = $this->functionCoverage = []; - } - - public function lineCoverage(): array - { - return $this->lineCoverage; - } - - public function functionCoverage(): array - { - return $this->functionCoverage; - } - - public function removeCoverageDataForFile(string $filename): void - { - unset($this->lineCoverage[$filename], $this->functionCoverage[$filename]); - } - - /** - * @param int[] $lines - */ - public function keepLineCoverageDataOnlyForLines(string $filename, array $lines): void - { - if (!isset($this->lineCoverage[$filename])) { - return; - } - - $this->lineCoverage[$filename] = array_intersect_key( - $this->lineCoverage[$filename], - array_flip($lines) - ); - } - - /** - * @param int[] $linesToBranchMap - */ - public function markExecutableLineByBranch(string $filename, array $linesToBranchMap): void - { - if (!isset($this->lineCoverage[$filename])) { - return; - } - - $linesByBranch = []; - - foreach ($linesToBranchMap as $line => $branch) { - $linesByBranch[$branch][] = $line; - } - - foreach ($this->lineCoverage[$filename] as $line => $lineStatus) { - if (!isset($linesToBranchMap[$line])) { - continue; - } - - $branch = $linesToBranchMap[$line]; - - if (!isset($linesByBranch[$branch])) { - continue; - } - - foreach ($linesByBranch[$branch] as $lineInBranch) { - $this->lineCoverage[$filename][$lineInBranch] = $lineStatus; - } - - if (Driver::LINE_EXECUTED === $lineStatus) { - unset($linesByBranch[$branch]); - } - } - } - - /** - * @param int[] $lines - */ - public function keepFunctionCoverageDataOnlyForLines(string $filename, array $lines): void - { - if (!isset($this->functionCoverage[$filename])) { - return; - } - - foreach ($this->functionCoverage[$filename] as $functionName => $functionData) { - foreach ($functionData['branches'] as $branchId => $branch) { - if (count(array_diff(range($branch['line_start'], $branch['line_end']), $lines)) > 0) { - unset($this->functionCoverage[$filename][$functionName]['branches'][$branchId]); - - foreach ($functionData['paths'] as $pathId => $path) { - if (in_array($branchId, $path['path'], true)) { - unset($this->functionCoverage[$filename][$functionName]['paths'][$pathId]); - } - } - } - } - } - } - - /** - * @param int[] $lines - */ - public function removeCoverageDataForLines(string $filename, array $lines): void - { - if (empty($lines)) { - return; - } - - if (!isset($this->lineCoverage[$filename])) { - return; - } - - $this->lineCoverage[$filename] = array_diff_key( - $this->lineCoverage[$filename], - array_flip($lines) - ); - - if (isset($this->functionCoverage[$filename])) { - foreach ($this->functionCoverage[$filename] as $functionName => $functionData) { - foreach ($functionData['branches'] as $branchId => $branch) { - if (count(array_intersect($lines, range($branch['line_start'], $branch['line_end']))) > 0) { - unset($this->functionCoverage[$filename][$functionName]['branches'][$branchId]); - - foreach ($functionData['paths'] as $pathId => $path) { - if (in_array($branchId, $path['path'], true)) { - unset($this->functionCoverage[$filename][$functionName]['paths'][$pathId]); - } - } - } - } - } - } - } - - /** - * At the end of a file, the PHP interpreter always sees an implicit return. Where this occurs in a file that has - * e.g. a class definition, that line cannot be invoked from a test and results in confusing coverage. This engine - * implementation detail therefore needs to be masked which is done here by simply ensuring that all empty lines - * are skipped over for coverage purposes. - * - * @see https://github.com/sebastianbergmann/php-code-coverage/issues/799 - */ - private function skipEmptyLines(): void - { - foreach ($this->lineCoverage as $filename => $coverage) { - foreach ($this->getEmptyLinesForFile($filename) as $emptyLine) { - unset($this->lineCoverage[$filename][$emptyLine]); - } - } - } - - private function getEmptyLinesForFile(string $filename): array - { - if (!isset(self::$emptyLineCache[$filename])) { - self::$emptyLineCache[$filename] = []; - - if (is_file($filename)) { - $sourceLines = explode("\n", file_get_contents($filename)); - - foreach ($sourceLines as $line => $source) { - if (trim($source) === '') { - self::$emptyLineCache[$filename][] = ($line + 1); - } - } - } - } - - return self::$emptyLineCache[$filename]; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Report/Clover.php b/vendor/phpunit/php-code-coverage/src/Report/Clover.php deleted file mode 100644 index d80ab4d..0000000 --- a/vendor/phpunit/php-code-coverage/src/Report/Clover.php +++ /dev/null @@ -1,258 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Report; - -use function count; -use function dirname; -use function file_put_contents; -use function is_string; -use function ksort; -use function max; -use function range; -use function strpos; -use function time; -use DOMDocument; -use SebastianBergmann\CodeCoverage\CodeCoverage; -use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException; -use SebastianBergmann\CodeCoverage\Node\File; -use SebastianBergmann\CodeCoverage\Util\Filesystem; - -final class Clover -{ - /** - * @throws WriteOperationFailedException - */ - public function process(CodeCoverage $coverage, ?string $target = null, ?string $name = null): string - { - $time = (string) time(); - - $xmlDocument = new DOMDocument('1.0', 'UTF-8'); - $xmlDocument->formatOutput = true; - - $xmlCoverage = $xmlDocument->createElement('coverage'); - $xmlCoverage->setAttribute('generated', $time); - $xmlDocument->appendChild($xmlCoverage); - - $xmlProject = $xmlDocument->createElement('project'); - $xmlProject->setAttribute('timestamp', $time); - - if (is_string($name)) { - $xmlProject->setAttribute('name', $name); - } - - $xmlCoverage->appendChild($xmlProject); - - $packages = []; - $report = $coverage->getReport(); - - foreach ($report as $item) { - if (!$item instanceof File) { - continue; - } - - /* @var File $item */ - - $xmlFile = $xmlDocument->createElement('file'); - $xmlFile->setAttribute('name', $item->pathAsString()); - - $classes = $item->classesAndTraits(); - $coverageData = $item->lineCoverageData(); - $lines = []; - $namespace = 'global'; - - foreach ($classes as $className => $class) { - $classStatements = 0; - $coveredClassStatements = 0; - $coveredMethods = 0; - $classMethods = 0; - - foreach ($class['methods'] as $methodName => $method) { - if ($method['executableLines'] == 0) { - continue; - } - - $classMethods++; - $classStatements += $method['executableLines']; - $coveredClassStatements += $method['executedLines']; - - if ($method['coverage'] == 100) { - $coveredMethods++; - } - - $methodCount = 0; - - foreach (range($method['startLine'], $method['endLine']) as $line) { - if (isset($coverageData[$line]) && ($coverageData[$line] !== null)) { - $methodCount = max($methodCount, count($coverageData[$line])); - } - } - - $lines[$method['startLine']] = [ - 'ccn' => $method['ccn'], - 'count' => $methodCount, - 'crap' => $method['crap'], - 'type' => 'method', - 'visibility' => $method['visibility'], - 'name' => $methodName, - ]; - } - - if (!empty($class['package']['namespace'])) { - $namespace = $class['package']['namespace']; - } - - $xmlClass = $xmlDocument->createElement('class'); - $xmlClass->setAttribute('name', $className); - $xmlClass->setAttribute('namespace', $namespace); - - if (!empty($class['package']['fullPackage'])) { - $xmlClass->setAttribute( - 'fullPackage', - $class['package']['fullPackage'] - ); - } - - if (!empty($class['package']['category'])) { - $xmlClass->setAttribute( - 'category', - $class['package']['category'] - ); - } - - if (!empty($class['package']['package'])) { - $xmlClass->setAttribute( - 'package', - $class['package']['package'] - ); - } - - if (!empty($class['package']['subpackage'])) { - $xmlClass->setAttribute( - 'subpackage', - $class['package']['subpackage'] - ); - } - - $xmlFile->appendChild($xmlClass); - - $xmlMetrics = $xmlDocument->createElement('metrics'); - $xmlMetrics->setAttribute('complexity', (string) $class['ccn']); - $xmlMetrics->setAttribute('methods', (string) $classMethods); - $xmlMetrics->setAttribute('coveredmethods', (string) $coveredMethods); - $xmlMetrics->setAttribute('conditionals', (string) $class['executableBranches']); - $xmlMetrics->setAttribute('coveredconditionals', (string) $class['executedBranches']); - $xmlMetrics->setAttribute('statements', (string) $classStatements); - $xmlMetrics->setAttribute('coveredstatements', (string) $coveredClassStatements); - $xmlMetrics->setAttribute('elements', (string) ($classMethods + $classStatements + $class['executableBranches'])); - $xmlMetrics->setAttribute('coveredelements', (string) ($coveredMethods + $coveredClassStatements + $class['executedBranches'])); - $xmlClass->appendChild($xmlMetrics); - } - - foreach ($coverageData as $line => $data) { - if ($data === null || isset($lines[$line])) { - continue; - } - - $lines[$line] = [ - 'count' => count($data), 'type' => 'stmt', - ]; - } - - ksort($lines); - - foreach ($lines as $line => $data) { - $xmlLine = $xmlDocument->createElement('line'); - $xmlLine->setAttribute('num', (string) $line); - $xmlLine->setAttribute('type', $data['type']); - - if (isset($data['name'])) { - $xmlLine->setAttribute('name', $data['name']); - } - - if (isset($data['visibility'])) { - $xmlLine->setAttribute('visibility', $data['visibility']); - } - - if (isset($data['ccn'])) { - $xmlLine->setAttribute('complexity', (string) $data['ccn']); - } - - if (isset($data['crap'])) { - $xmlLine->setAttribute('crap', (string) $data['crap']); - } - - $xmlLine->setAttribute('count', (string) $data['count']); - $xmlFile->appendChild($xmlLine); - } - - $linesOfCode = $item->linesOfCode(); - - $xmlMetrics = $xmlDocument->createElement('metrics'); - $xmlMetrics->setAttribute('loc', (string) $linesOfCode['linesOfCode']); - $xmlMetrics->setAttribute('ncloc', (string) $linesOfCode['nonCommentLinesOfCode']); - $xmlMetrics->setAttribute('classes', (string) $item->numberOfClassesAndTraits()); - $xmlMetrics->setAttribute('methods', (string) $item->numberOfMethods()); - $xmlMetrics->setAttribute('coveredmethods', (string) $item->numberOfTestedMethods()); - $xmlMetrics->setAttribute('conditionals', (string) $item->numberOfExecutableBranches()); - $xmlMetrics->setAttribute('coveredconditionals', (string) $item->numberOfExecutedBranches()); - $xmlMetrics->setAttribute('statements', (string) $item->numberOfExecutableLines()); - $xmlMetrics->setAttribute('coveredstatements', (string) $item->numberOfExecutedLines()); - $xmlMetrics->setAttribute('elements', (string) ($item->numberOfMethods() + $item->numberOfExecutableLines() + $item->numberOfExecutableBranches())); - $xmlMetrics->setAttribute('coveredelements', (string) ($item->numberOfTestedMethods() + $item->numberOfExecutedLines() + $item->numberOfExecutedBranches())); - $xmlFile->appendChild($xmlMetrics); - - if ($namespace === 'global') { - $xmlProject->appendChild($xmlFile); - } else { - if (!isset($packages[$namespace])) { - $packages[$namespace] = $xmlDocument->createElement( - 'package' - ); - - $packages[$namespace]->setAttribute('name', $namespace); - $xmlProject->appendChild($packages[$namespace]); - } - - $packages[$namespace]->appendChild($xmlFile); - } - } - - $linesOfCode = $report->linesOfCode(); - - $xmlMetrics = $xmlDocument->createElement('metrics'); - $xmlMetrics->setAttribute('files', (string) count($report)); - $xmlMetrics->setAttribute('loc', (string) $linesOfCode['linesOfCode']); - $xmlMetrics->setAttribute('ncloc', (string) $linesOfCode['nonCommentLinesOfCode']); - $xmlMetrics->setAttribute('classes', (string) $report->numberOfClassesAndTraits()); - $xmlMetrics->setAttribute('methods', (string) $report->numberOfMethods()); - $xmlMetrics->setAttribute('coveredmethods', (string) $report->numberOfTestedMethods()); - $xmlMetrics->setAttribute('conditionals', (string) $report->numberOfExecutableBranches()); - $xmlMetrics->setAttribute('coveredconditionals', (string) $report->numberOfExecutedBranches()); - $xmlMetrics->setAttribute('statements', (string) $report->numberOfExecutableLines()); - $xmlMetrics->setAttribute('coveredstatements', (string) $report->numberOfExecutedLines()); - $xmlMetrics->setAttribute('elements', (string) ($report->numberOfMethods() + $report->numberOfExecutableLines() + $report->numberOfExecutableBranches())); - $xmlMetrics->setAttribute('coveredelements', (string) ($report->numberOfTestedMethods() + $report->numberOfExecutedLines() + $report->numberOfExecutedBranches())); - $xmlProject->appendChild($xmlMetrics); - - $buffer = $xmlDocument->saveXML(); - - if ($target !== null) { - if (!strpos($target, '://') !== false) { - Filesystem::createDirectory(dirname($target)); - } - - if (@file_put_contents($target, $buffer) === false) { - throw new WriteOperationFailedException($target); - } - } - - return $buffer; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Report/Cobertura.php b/vendor/phpunit/php-code-coverage/src/Report/Cobertura.php deleted file mode 100644 index 138a31e..0000000 --- a/vendor/phpunit/php-code-coverage/src/Report/Cobertura.php +++ /dev/null @@ -1,309 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Report; - -use function basename; -use function count; -use function dirname; -use function file_put_contents; -use function preg_match; -use function range; -use function str_replace; -use function strpos; -use function time; -use DOMImplementation; -use SebastianBergmann\CodeCoverage\CodeCoverage; -use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException; -use SebastianBergmann\CodeCoverage\Node\File; -use SebastianBergmann\CodeCoverage\Util\Filesystem; - -final class Cobertura -{ - /** - * @throws WriteOperationFailedException - */ - public function process(CodeCoverage $coverage, ?string $target = null): string - { - $time = (string) time(); - - $report = $coverage->getReport(); - - $implementation = new DOMImplementation; - - $documentType = $implementation->createDocumentType( - 'coverage', - '', - 'http://cobertura.sourceforge.net/xml/coverage-04.dtd' - ); - - $document = $implementation->createDocument('', '', $documentType); - $document->xmlVersion = '1.0'; - $document->encoding = 'UTF-8'; - $document->formatOutput = true; - - $coverageElement = $document->createElement('coverage'); - - $linesValid = $report->numberOfExecutableLines(); - $linesCovered = $report->numberOfExecutedLines(); - $lineRate = $linesValid === 0 ? 0 : ($linesCovered / $linesValid); - $coverageElement->setAttribute('line-rate', (string) $lineRate); - - $branchesValid = $report->numberOfExecutableBranches(); - $branchesCovered = $report->numberOfExecutedBranches(); - $branchRate = $branchesValid === 0 ? 0 : ($branchesCovered / $branchesValid); - $coverageElement->setAttribute('branch-rate', (string) $branchRate); - - $coverageElement->setAttribute('lines-covered', (string) $report->numberOfExecutedLines()); - $coverageElement->setAttribute('lines-valid', (string) $report->numberOfExecutableLines()); - $coverageElement->setAttribute('branches-covered', (string) $report->numberOfExecutedBranches()); - $coverageElement->setAttribute('branches-valid', (string) $report->numberOfExecutableBranches()); - $coverageElement->setAttribute('complexity', ''); - $coverageElement->setAttribute('version', '0.4'); - $coverageElement->setAttribute('timestamp', $time); - - $document->appendChild($coverageElement); - - $sourcesElement = $document->createElement('sources'); - $coverageElement->appendChild($sourcesElement); - - $sourceElement = $document->createElement('source', $report->pathAsString()); - $sourcesElement->appendChild($sourceElement); - - $packagesElement = $document->createElement('packages'); - $coverageElement->appendChild($packagesElement); - - $complexity = 0; - - foreach ($report as $item) { - if (!$item instanceof File) { - continue; - } - - $packageElement = $document->createElement('package'); - $packageComplexity = 0; - - $packageElement->setAttribute('name', str_replace($report->pathAsString() . DIRECTORY_SEPARATOR, '', $item->pathAsString())); - - $linesValid = $item->numberOfExecutableLines(); - $linesCovered = $item->numberOfExecutedLines(); - $lineRate = $linesValid === 0 ? 0 : ($linesCovered / $linesValid); - - $packageElement->setAttribute('line-rate', (string) $lineRate); - - $branchesValid = $item->numberOfExecutableBranches(); - $branchesCovered = $item->numberOfExecutedBranches(); - $branchRate = $branchesValid === 0 ? 0 : ($branchesCovered / $branchesValid); - - $packageElement->setAttribute('branch-rate', (string) $branchRate); - - $packageElement->setAttribute('complexity', ''); - $packagesElement->appendChild($packageElement); - - $classesElement = $document->createElement('classes'); - - $packageElement->appendChild($classesElement); - - $classes = $item->classesAndTraits(); - $coverageData = $item->lineCoverageData(); - - foreach ($classes as $className => $class) { - $complexity += $class['ccn']; - $packageComplexity += $class['ccn']; - - if (!empty($class['package']['namespace'])) { - $className = $class['package']['namespace'] . '\\' . $className; - } - - $linesValid = $class['executableLines']; - $linesCovered = $class['executedLines']; - $lineRate = $linesValid === 0 ? 0 : ($linesCovered / $linesValid); - - $branchesValid = $class['executableBranches']; - $branchesCovered = $class['executedBranches']; - $branchRate = $branchesValid === 0 ? 0 : ($branchesCovered / $branchesValid); - - $classElement = $document->createElement('class'); - - $classElement->setAttribute('name', $className); - $classElement->setAttribute('filename', str_replace($report->pathAsString() . DIRECTORY_SEPARATOR, '', $item->pathAsString())); - $classElement->setAttribute('line-rate', (string) $lineRate); - $classElement->setAttribute('branch-rate', (string) $branchRate); - $classElement->setAttribute('complexity', (string) $class['ccn']); - - $classesElement->appendChild($classElement); - - $methodsElement = $document->createElement('methods'); - - $classElement->appendChild($methodsElement); - - $classLinesElement = $document->createElement('lines'); - - $classElement->appendChild($classLinesElement); - - foreach ($class['methods'] as $methodName => $method) { - if ($method['executableLines'] === 0) { - continue; - } - - preg_match("/\((.*?)\)/", $method['signature'], $signature); - - $linesValid = $method['executableLines']; - $linesCovered = $method['executedLines']; - $lineRate = $linesValid === 0 ? 0 : ($linesCovered / $linesValid); - - $branchesValid = $method['executableBranches']; - $branchesCovered = $method['executedBranches']; - $branchRate = $branchesValid === 0 ? 0 : ($branchesCovered / $branchesValid); - - $methodElement = $document->createElement('method'); - - $methodElement->setAttribute('name', $methodName); - $methodElement->setAttribute('signature', $signature[1]); - $methodElement->setAttribute('line-rate', (string) $lineRate); - $methodElement->setAttribute('branch-rate', (string) $branchRate); - $methodElement->setAttribute('complexity', (string) $method['ccn']); - - $methodLinesElement = $document->createElement('lines'); - - $methodElement->appendChild($methodLinesElement); - - foreach (range($method['startLine'], $method['endLine']) as $line) { - if (!isset($coverageData[$line]) || $coverageData[$line] === null) { - continue; - } - $methodLineElement = $document->createElement('line'); - - $methodLineElement->setAttribute('number', (string) $line); - $methodLineElement->setAttribute('hits', (string) count($coverageData[$line])); - - $methodLinesElement->appendChild($methodLineElement); - - $classLineElement = $methodLineElement->cloneNode(); - - $classLinesElement->appendChild($classLineElement); - } - - $methodsElement->appendChild($methodElement); - } - } - - if ($item->numberOfFunctions() === 0) { - $packageElement->setAttribute('complexity', (string) $packageComplexity); - - continue; - } - - $functionsComplexity = 0; - $functionsLinesValid = 0; - $functionsLinesCovered = 0; - $functionsBranchesValid = 0; - $functionsBranchesCovered = 0; - - $classElement = $document->createElement('class'); - $classElement->setAttribute('name', basename($item->pathAsString())); - $classElement->setAttribute('filename', str_replace($report->pathAsString() . DIRECTORY_SEPARATOR, '', $item->pathAsString())); - - $methodsElement = $document->createElement('methods'); - - $classElement->appendChild($methodsElement); - - $classLinesElement = $document->createElement('lines'); - - $classElement->appendChild($classLinesElement); - - $functions = $item->functions(); - - foreach ($functions as $functionName => $function) { - if ($function['executableLines'] === 0) { - continue; - } - - $complexity += $function['ccn']; - $packageComplexity += $function['ccn']; - $functionsComplexity += $function['ccn']; - - $linesValid = $function['executableLines']; - $linesCovered = $function['executedLines']; - $lineRate = $linesValid === 0 ? 0 : ($linesCovered / $linesValid); - - $functionsLinesValid += $linesValid; - $functionsLinesCovered += $linesCovered; - - $branchesValid = $function['executableBranches']; - $branchesCovered = $function['executedBranches']; - $branchRate = $branchesValid === 0 ? 0 : ($branchesCovered / $branchesValid); - - $functionsBranchesValid += $branchesValid; - $functionsBranchesCovered += $branchesValid; - - $methodElement = $document->createElement('method'); - - $methodElement->setAttribute('name', $functionName); - $methodElement->setAttribute('signature', $function['signature']); - $methodElement->setAttribute('line-rate', (string) $lineRate); - $methodElement->setAttribute('branch-rate', (string) $branchRate); - $methodElement->setAttribute('complexity', (string) $function['ccn']); - - $methodLinesElement = $document->createElement('lines'); - - $methodElement->appendChild($methodLinesElement); - - foreach (range($function['startLine'], $function['endLine']) as $line) { - if (!isset($coverageData[$line]) || $coverageData[$line] === null) { - continue; - } - $methodLineElement = $document->createElement('line'); - - $methodLineElement->setAttribute('number', (string) $line); - $methodLineElement->setAttribute('hits', (string) count($coverageData[$line])); - - $methodLinesElement->appendChild($methodLineElement); - - $classLineElement = $methodLineElement->cloneNode(); - - $classLinesElement->appendChild($classLineElement); - } - - $methodsElement->appendChild($methodElement); - } - - $packageElement->setAttribute('complexity', (string) $packageComplexity); - - if ($functionsLinesValid === 0) { - continue; - } - - $lineRate = $functionsLinesCovered / $functionsLinesValid; - $branchRate = $functionsBranchesValid === 0 ? 0 : ($functionsBranchesCovered / $functionsBranchesValid); - - $classElement->setAttribute('line-rate', (string) $lineRate); - $classElement->setAttribute('branch-rate', (string) $branchRate); - $classElement->setAttribute('complexity', (string) $functionsComplexity); - - $classesElement->appendChild($classElement); - } - - $coverageElement->setAttribute('complexity', (string) $complexity); - - $buffer = $document->saveXML(); - - if ($target !== null) { - if (!strpos($target, '://') !== false) { - Filesystem::createDirectory(dirname($target)); - } - - if (@file_put_contents($target, $buffer) === false) { - throw new WriteOperationFailedException($target); - } - } - - return $buffer; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php b/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php deleted file mode 100644 index 2d91567..0000000 --- a/vendor/phpunit/php-code-coverage/src/Report/Crap4j.php +++ /dev/null @@ -1,156 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Report; - -use function date; -use function dirname; -use function file_put_contents; -use function htmlspecialchars; -use function is_string; -use function round; -use function strpos; -use DOMDocument; -use SebastianBergmann\CodeCoverage\CodeCoverage; -use SebastianBergmann\CodeCoverage\Driver\WriteOperationFailedException; -use SebastianBergmann\CodeCoverage\Node\File; -use SebastianBergmann\CodeCoverage\Util\Filesystem; - -final class Crap4j -{ - /** - * @var int - */ - private $threshold; - - public function __construct(int $threshold = 30) - { - $this->threshold = $threshold; - } - - /** - * @throws WriteOperationFailedException - */ - public function process(CodeCoverage $coverage, ?string $target = null, ?string $name = null): string - { - $document = new DOMDocument('1.0', 'UTF-8'); - $document->formatOutput = true; - - $root = $document->createElement('crap_result'); - $document->appendChild($root); - - $project = $document->createElement('project', is_string($name) ? $name : ''); - $root->appendChild($project); - $root->appendChild($document->createElement('timestamp', date('Y-m-d H:i:s'))); - - $stats = $document->createElement('stats'); - $methodsNode = $document->createElement('methods'); - - $report = $coverage->getReport(); - unset($coverage); - - $fullMethodCount = 0; - $fullCrapMethodCount = 0; - $fullCrapLoad = 0; - $fullCrap = 0; - - foreach ($report as $item) { - $namespace = 'global'; - - if (!$item instanceof File) { - continue; - } - - $file = $document->createElement('file'); - $file->setAttribute('name', $item->pathAsString()); - - $classes = $item->classesAndTraits(); - - foreach ($classes as $className => $class) { - foreach ($class['methods'] as $methodName => $method) { - $crapLoad = $this->crapLoad((float) $method['crap'], $method['ccn'], $method['coverage']); - - $fullCrap += $method['crap']; - $fullCrapLoad += $crapLoad; - $fullMethodCount++; - - if ($method['crap'] >= $this->threshold) { - $fullCrapMethodCount++; - } - - $methodNode = $document->createElement('method'); - - if (!empty($class['namespace'])) { - $namespace = $class['namespace']; - } - - $methodNode->appendChild($document->createElement('package', $namespace)); - $methodNode->appendChild($document->createElement('className', $className)); - $methodNode->appendChild($document->createElement('methodName', $methodName)); - $methodNode->appendChild($document->createElement('methodSignature', htmlspecialchars($method['signature']))); - $methodNode->appendChild($document->createElement('fullMethod', htmlspecialchars($method['signature']))); - $methodNode->appendChild($document->createElement('crap', (string) $this->roundValue((float) $method['crap']))); - $methodNode->appendChild($document->createElement('complexity', (string) $method['ccn'])); - $methodNode->appendChild($document->createElement('coverage', (string) $this->roundValue($method['coverage']))); - $methodNode->appendChild($document->createElement('crapLoad', (string) round($crapLoad))); - - $methodsNode->appendChild($methodNode); - } - } - } - - $stats->appendChild($document->createElement('name', 'Method Crap Stats')); - $stats->appendChild($document->createElement('methodCount', (string) $fullMethodCount)); - $stats->appendChild($document->createElement('crapMethodCount', (string) $fullCrapMethodCount)); - $stats->appendChild($document->createElement('crapLoad', (string) round($fullCrapLoad))); - $stats->appendChild($document->createElement('totalCrap', (string) $fullCrap)); - - $crapMethodPercent = 0; - - if ($fullMethodCount > 0) { - $crapMethodPercent = $this->roundValue((100 * $fullCrapMethodCount) / $fullMethodCount); - } - - $stats->appendChild($document->createElement('crapMethodPercent', (string) $crapMethodPercent)); - - $root->appendChild($stats); - $root->appendChild($methodsNode); - - $buffer = $document->saveXML(); - - if ($target !== null) { - if (!strpos($target, '://') !== false) { - Filesystem::createDirectory(dirname($target)); - } - - if (@file_put_contents($target, $buffer) === false) { - throw new WriteOperationFailedException($target); - } - } - - return $buffer; - } - - private function crapLoad(float $crapValue, int $cyclomaticComplexity, float $coveragePercent): float - { - $crapLoad = 0; - - if ($crapValue >= $this->threshold) { - $crapLoad += $cyclomaticComplexity * (1.0 - $coveragePercent / 100); - $crapLoad += $cyclomaticComplexity / $this->threshold; - } - - return $crapLoad; - } - - private function roundValue(float $value): float - { - return round($value, 2); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php b/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php deleted file mode 100644 index 69935d7..0000000 --- a/vendor/phpunit/php-code-coverage/src/Report/Html/Facade.php +++ /dev/null @@ -1,147 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Report\Html; - -use const DIRECTORY_SEPARATOR; -use function copy; -use function date; -use function dirname; -use function substr; -use SebastianBergmann\CodeCoverage\CodeCoverage; -use SebastianBergmann\CodeCoverage\InvalidArgumentException; -use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; -use SebastianBergmann\CodeCoverage\Util\Filesystem; - -final class Facade -{ - /** - * @var string - */ - private $templatePath; - - /** - * @var string - */ - private $generator; - - /** - * @var int - */ - private $lowUpperBound; - - /** - * @var int - */ - private $highLowerBound; - - public function __construct(int $lowUpperBound = 50, int $highLowerBound = 90, string $generator = '') - { - if ($lowUpperBound > $highLowerBound) { - throw new InvalidArgumentException( - '$lowUpperBound must not be larger than $highLowerBound' - ); - } - - $this->generator = $generator; - $this->highLowerBound = $highLowerBound; - $this->lowUpperBound = $lowUpperBound; - $this->templatePath = __DIR__ . '/Renderer/Template/'; - } - - public function process(CodeCoverage $coverage, string $target): void - { - $target = $this->directory($target); - $report = $coverage->getReport(); - $date = date('D M j G:i:s T Y'); - - $dashboard = new Dashboard( - $this->templatePath, - $this->generator, - $date, - $this->lowUpperBound, - $this->highLowerBound, - $coverage->collectsBranchAndPathCoverage() - ); - - $directory = new Directory( - $this->templatePath, - $this->generator, - $date, - $this->lowUpperBound, - $this->highLowerBound, - $coverage->collectsBranchAndPathCoverage() - ); - - $file = new File( - $this->templatePath, - $this->generator, - $date, - $this->lowUpperBound, - $this->highLowerBound, - $coverage->collectsBranchAndPathCoverage() - ); - - $directory->render($report, $target . 'index.html'); - $dashboard->render($report, $target . 'dashboard.html'); - - foreach ($report as $node) { - $id = $node->id(); - - if ($node instanceof DirectoryNode) { - Filesystem::createDirectory($target . $id); - - $directory->render($node, $target . $id . '/index.html'); - $dashboard->render($node, $target . $id . '/dashboard.html'); - } else { - $dir = dirname($target . $id); - - Filesystem::createDirectory($dir); - - $file->render($node, $target . $id); - } - } - - $this->copyFiles($target); - } - - private function copyFiles(string $target): void - { - $dir = $this->directory($target . '_css'); - - copy($this->templatePath . 'css/bootstrap.min.css', $dir . 'bootstrap.min.css'); - copy($this->templatePath . 'css/nv.d3.min.css', $dir . 'nv.d3.min.css'); - copy($this->templatePath . 'css/style.css', $dir . 'style.css'); - copy($this->templatePath . 'css/custom.css', $dir . 'custom.css'); - copy($this->templatePath . 'css/octicons.css', $dir . 'octicons.css'); - - $dir = $this->directory($target . '_icons'); - copy($this->templatePath . 'icons/file-code.svg', $dir . 'file-code.svg'); - copy($this->templatePath . 'icons/file-directory.svg', $dir . 'file-directory.svg'); - - $dir = $this->directory($target . '_js'); - copy($this->templatePath . 'js/bootstrap.min.js', $dir . 'bootstrap.min.js'); - copy($this->templatePath . 'js/popper.min.js', $dir . 'popper.min.js'); - copy($this->templatePath . 'js/d3.min.js', $dir . 'd3.min.js'); - copy($this->templatePath . 'js/jquery.min.js', $dir . 'jquery.min.js'); - copy($this->templatePath . 'js/nv.d3.min.js', $dir . 'nv.d3.min.js'); - copy($this->templatePath . 'js/file.js', $dir . 'file.js'); - } - - private function directory(string $directory): string - { - if (substr($directory, -1, 1) != DIRECTORY_SEPARATOR) { - $directory .= DIRECTORY_SEPARATOR; - } - - Filesystem::createDirectory($directory); - - return $directory; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php deleted file mode 100644 index fe285b1..0000000 --- a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer.php +++ /dev/null @@ -1,314 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Report\Html; - -use function array_pop; -use function count; -use function sprintf; -use function str_repeat; -use function substr_count; -use SebastianBergmann\CodeCoverage\Node\AbstractNode; -use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; -use SebastianBergmann\CodeCoverage\Node\File as FileNode; -use SebastianBergmann\CodeCoverage\Version; -use SebastianBergmann\Environment\Runtime; -use SebastianBergmann\Template\Template; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -abstract class Renderer -{ - /** - * @var string - */ - protected $templatePath; - - /** - * @var string - */ - protected $generator; - - /** - * @var string - */ - protected $date; - - /** - * @var int - */ - protected $lowUpperBound; - - /** - * @var int - */ - protected $highLowerBound; - - /** - * @var bool - */ - protected $hasBranchCoverage; - - /** - * @var string - */ - protected $version; - - public function __construct(string $templatePath, string $generator, string $date, int $lowUpperBound, int $highLowerBound, bool $hasBranchCoverage) - { - $this->templatePath = $templatePath; - $this->generator = $generator; - $this->date = $date; - $this->lowUpperBound = $lowUpperBound; - $this->highLowerBound = $highLowerBound; - $this->version = Version::id(); - $this->hasBranchCoverage = $hasBranchCoverage; - } - - protected function renderItemTemplate(Template $template, array $data): string - { - $numSeparator = ' / '; - - if (isset($data['numClasses']) && $data['numClasses'] > 0) { - $classesLevel = $this->colorLevel($data['testedClassesPercent']); - - $classesNumber = $data['numTestedClasses'] . $numSeparator . - $data['numClasses']; - - $classesBar = $this->coverageBar( - $data['testedClassesPercent'] - ); - } else { - $classesLevel = ''; - $classesNumber = '0' . $numSeparator . '0'; - $classesBar = ''; - $data['testedClassesPercentAsString'] = 'n/a'; - } - - if ($data['numMethods'] > 0) { - $methodsLevel = $this->colorLevel($data['testedMethodsPercent']); - - $methodsNumber = $data['numTestedMethods'] . $numSeparator . - $data['numMethods']; - - $methodsBar = $this->coverageBar( - $data['testedMethodsPercent'] - ); - } else { - $methodsLevel = ''; - $methodsNumber = '0' . $numSeparator . '0'; - $methodsBar = ''; - $data['testedMethodsPercentAsString'] = 'n/a'; - } - - if ($data['numExecutableLines'] > 0) { - $linesLevel = $this->colorLevel($data['linesExecutedPercent']); - - $linesNumber = $data['numExecutedLines'] . $numSeparator . - $data['numExecutableLines']; - - $linesBar = $this->coverageBar( - $data['linesExecutedPercent'] - ); - } else { - $linesLevel = ''; - $linesNumber = '0' . $numSeparator . '0'; - $linesBar = ''; - $data['linesExecutedPercentAsString'] = 'n/a'; - } - - if ($data['numExecutablePaths'] > 0) { - $pathsLevel = $this->colorLevel($data['pathsExecutedPercent']); - - $pathsNumber = $data['numExecutedPaths'] . $numSeparator . - $data['numExecutablePaths']; - - $pathsBar = $this->coverageBar( - $data['pathsExecutedPercent'] - ); - } else { - $pathsLevel = ''; - $pathsNumber = '0' . $numSeparator . '0'; - $pathsBar = ''; - $data['pathsExecutedPercentAsString'] = 'n/a'; - } - - if ($data['numExecutableBranches'] > 0) { - $branchesLevel = $this->colorLevel($data['branchesExecutedPercent']); - - $branchesNumber = $data['numExecutedBranches'] . $numSeparator . - $data['numExecutableBranches']; - - $branchesBar = $this->coverageBar( - $data['branchesExecutedPercent'] - ); - } else { - $branchesLevel = ''; - $branchesNumber = '0' . $numSeparator . '0'; - $branchesBar = ''; - $data['branchesExecutedPercentAsString'] = 'n/a'; - } - - $template->setVar( - [ - 'icon' => $data['icon'] ?? '', - 'crap' => $data['crap'] ?? '', - 'name' => $data['name'], - 'lines_bar' => $linesBar, - 'lines_executed_percent' => $data['linesExecutedPercentAsString'], - 'lines_level' => $linesLevel, - 'lines_number' => $linesNumber, - 'paths_bar' => $pathsBar, - 'paths_executed_percent' => $data['pathsExecutedPercentAsString'], - 'paths_level' => $pathsLevel, - 'paths_number' => $pathsNumber, - 'branches_bar' => $branchesBar, - 'branches_executed_percent' => $data['branchesExecutedPercentAsString'], - 'branches_level' => $branchesLevel, - 'branches_number' => $branchesNumber, - 'methods_bar' => $methodsBar, - 'methods_tested_percent' => $data['testedMethodsPercentAsString'], - 'methods_level' => $methodsLevel, - 'methods_number' => $methodsNumber, - 'classes_bar' => $classesBar, - 'classes_tested_percent' => $data['testedClassesPercentAsString'] ?? '', - 'classes_level' => $classesLevel, - 'classes_number' => $classesNumber, - ] - ); - - return $template->render(); - } - - protected function setCommonTemplateVariables(Template $template, AbstractNode $node): void - { - $template->setVar( - [ - 'id' => $node->id(), - 'full_path' => $node->pathAsString(), - 'path_to_root' => $this->pathToRoot($node), - 'breadcrumbs' => $this->breadcrumbs($node), - 'date' => $this->date, - 'version' => $this->version, - 'runtime' => $this->runtimeString(), - 'generator' => $this->generator, - 'low_upper_bound' => $this->lowUpperBound, - 'high_lower_bound' => $this->highLowerBound, - ] - ); - } - - protected function breadcrumbs(AbstractNode $node): string - { - $breadcrumbs = ''; - $path = $node->pathAsArray(); - $pathToRoot = []; - $max = count($path); - - if ($node instanceof FileNode) { - $max--; - } - - for ($i = 0; $i < $max; $i++) { - $pathToRoot[] = str_repeat('../', $i); - } - - foreach ($path as $step) { - if ($step !== $node) { - $breadcrumbs .= $this->inactiveBreadcrumb( - $step, - array_pop($pathToRoot) - ); - } else { - $breadcrumbs .= $this->activeBreadcrumb($step); - } - } - - return $breadcrumbs; - } - - protected function activeBreadcrumb(AbstractNode $node): string - { - $buffer = sprintf( - ' ' . "\n", - $node->name() - ); - - if ($node instanceof DirectoryNode) { - $buffer .= ' ' . "\n"; - } - - return $buffer; - } - - protected function inactiveBreadcrumb(AbstractNode $node, string $pathToRoot): string - { - return sprintf( - ' ' . "\n", - $pathToRoot, - $node->name() - ); - } - - protected function pathToRoot(AbstractNode $node): string - { - $id = $node->id(); - $depth = substr_count($id, '/'); - - if ($id !== 'index' && - $node instanceof DirectoryNode) { - $depth++; - } - - return str_repeat('../', $depth); - } - - protected function coverageBar(float $percent): string - { - $level = $this->colorLevel($percent); - - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'coverage_bar_branch.html' : 'coverage_bar.html'); - $template = new Template( - $templateName, - '{{', - '}}' - ); - - $template->setVar(['level' => $level, 'percent' => sprintf('%.2F', $percent)]); - - return $template->render(); - } - - protected function colorLevel(float $percent): string - { - if ($percent <= $this->lowUpperBound) { - return 'danger'; - } - - if ($percent > $this->lowUpperBound && - $percent < $this->highLowerBound) { - return 'warning'; - } - - return 'success'; - } - - private function runtimeString(): string - { - $runtime = new Runtime; - - return sprintf( - '%s %s', - $runtime->getVendorUrl(), - $runtime->getName(), - $runtime->getVersion() - ); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php deleted file mode 100644 index b44870b..0000000 --- a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Dashboard.php +++ /dev/null @@ -1,288 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Report\Html; - -use function array_values; -use function arsort; -use function asort; -use function count; -use function explode; -use function floor; -use function json_encode; -use function sprintf; -use function str_replace; -use SebastianBergmann\CodeCoverage\Node\AbstractNode; -use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; -use SebastianBergmann\Template\Template; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Dashboard extends Renderer -{ - public function render(DirectoryNode $node, string $file): void - { - $classes = $node->classesAndTraits(); - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'dashboard_branch.html' : 'dashboard.html'); - $template = new Template( - $templateName, - '{{', - '}}' - ); - - $this->setCommonTemplateVariables($template, $node); - - $baseLink = $node->id() . '/'; - $complexity = $this->complexity($classes, $baseLink); - $coverageDistribution = $this->coverageDistribution($classes); - $insufficientCoverage = $this->insufficientCoverage($classes, $baseLink); - $projectRisks = $this->projectRisks($classes, $baseLink); - - $template->setVar( - [ - 'insufficient_coverage_classes' => $insufficientCoverage['class'], - 'insufficient_coverage_methods' => $insufficientCoverage['method'], - 'project_risks_classes' => $projectRisks['class'], - 'project_risks_methods' => $projectRisks['method'], - 'complexity_class' => $complexity['class'], - 'complexity_method' => $complexity['method'], - 'class_coverage_distribution' => $coverageDistribution['class'], - 'method_coverage_distribution' => $coverageDistribution['method'], - ] - ); - - $template->renderTo($file); - } - - protected function activeBreadcrumb(AbstractNode $node): string - { - return sprintf( - ' ' . "\n" . - ' ' . "\n", - $node->name() - ); - } - - /** - * Returns the data for the Class/Method Complexity charts. - */ - private function complexity(array $classes, string $baseLink): array - { - $result = ['class' => [], 'method' => []]; - - foreach ($classes as $className => $class) { - foreach ($class['methods'] as $methodName => $method) { - if ($className !== '*') { - $methodName = $className . '::' . $methodName; - } - - $result['method'][] = [ - $method['coverage'], - $method['ccn'], - sprintf( - '%s', - str_replace($baseLink, '', $method['link']), - $methodName - ), - ]; - } - - $result['class'][] = [ - $class['coverage'], - $class['ccn'], - sprintf( - '%s', - str_replace($baseLink, '', $class['link']), - $className - ), - ]; - } - - return [ - 'class' => json_encode($result['class']), - 'method' => json_encode($result['method']), - ]; - } - - /** - * Returns the data for the Class / Method Coverage Distribution chart. - */ - private function coverageDistribution(array $classes): array - { - $result = [ - 'class' => [ - '0%' => 0, - '0-10%' => 0, - '10-20%' => 0, - '20-30%' => 0, - '30-40%' => 0, - '40-50%' => 0, - '50-60%' => 0, - '60-70%' => 0, - '70-80%' => 0, - '80-90%' => 0, - '90-100%' => 0, - '100%' => 0, - ], - 'method' => [ - '0%' => 0, - '0-10%' => 0, - '10-20%' => 0, - '20-30%' => 0, - '30-40%' => 0, - '40-50%' => 0, - '50-60%' => 0, - '60-70%' => 0, - '70-80%' => 0, - '80-90%' => 0, - '90-100%' => 0, - '100%' => 0, - ], - ]; - - foreach ($classes as $class) { - foreach ($class['methods'] as $methodName => $method) { - if ($method['coverage'] === 0) { - $result['method']['0%']++; - } elseif ($method['coverage'] === 100) { - $result['method']['100%']++; - } else { - $key = floor($method['coverage'] / 10) * 10; - $key = $key . '-' . ($key + 10) . '%'; - $result['method'][$key]++; - } - } - - if ($class['coverage'] === 0) { - $result['class']['0%']++; - } elseif ($class['coverage'] === 100) { - $result['class']['100%']++; - } else { - $key = floor($class['coverage'] / 10) * 10; - $key = $key . '-' . ($key + 10) . '%'; - $result['class'][$key]++; - } - } - - return [ - 'class' => json_encode(array_values($result['class'])), - 'method' => json_encode(array_values($result['method'])), - ]; - } - - /** - * Returns the classes / methods with insufficient coverage. - */ - private function insufficientCoverage(array $classes, string $baseLink): array - { - $leastTestedClasses = []; - $leastTestedMethods = []; - $result = ['class' => '', 'method' => '']; - - foreach ($classes as $className => $class) { - foreach ($class['methods'] as $methodName => $method) { - if ($method['coverage'] < $this->highLowerBound) { - $key = $methodName; - - if ($className !== '*') { - $key = $className . '::' . $methodName; - } - - $leastTestedMethods[$key] = $method['coverage']; - } - } - - if ($class['coverage'] < $this->highLowerBound) { - $leastTestedClasses[$className] = $class['coverage']; - } - } - - asort($leastTestedClasses); - asort($leastTestedMethods); - - foreach ($leastTestedClasses as $className => $coverage) { - $result['class'] .= sprintf( - ' %s%d%%' . "\n", - str_replace($baseLink, '', $classes[$className]['link']), - $className, - $coverage - ); - } - - foreach ($leastTestedMethods as $methodName => $coverage) { - [$class, $method] = explode('::', $methodName); - - $result['method'] .= sprintf( - ' %s%d%%' . "\n", - str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), - $methodName, - $method, - $coverage - ); - } - - return $result; - } - - /** - * Returns the project risks according to the CRAP index. - */ - private function projectRisks(array $classes, string $baseLink): array - { - $classRisks = []; - $methodRisks = []; - $result = ['class' => '', 'method' => '']; - - foreach ($classes as $className => $class) { - foreach ($class['methods'] as $methodName => $method) { - if ($method['coverage'] < $this->highLowerBound && $method['ccn'] > 1) { - $key = $methodName; - - if ($className !== '*') { - $key = $className . '::' . $methodName; - } - - $methodRisks[$key] = $method['crap']; - } - } - - if ($class['coverage'] < $this->highLowerBound && - $class['ccn'] > count($class['methods'])) { - $classRisks[$className] = $class['crap']; - } - } - - arsort($classRisks); - arsort($methodRisks); - - foreach ($classRisks as $className => $crap) { - $result['class'] .= sprintf( - ' %s%d' . "\n", - str_replace($baseLink, '', $classes[$className]['link']), - $className, - $crap - ); - } - - foreach ($methodRisks as $methodName => $crap) { - [$class, $method] = explode('::', $methodName); - - $result['method'] .= sprintf( - ' %s%d' . "\n", - str_replace($baseLink, '', $classes[$class]['methods'][$method]['link']), - $methodName, - $method, - $crap - ); - } - - return $result; - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php deleted file mode 100644 index faacbc3..0000000 --- a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/Directory.php +++ /dev/null @@ -1,113 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Report\Html; - -use function count; -use function sprintf; -use function str_repeat; -use SebastianBergmann\CodeCoverage\Node\AbstractNode as Node; -use SebastianBergmann\CodeCoverage\Node\Directory as DirectoryNode; -use SebastianBergmann\Template\Template; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class Directory extends Renderer -{ - public function render(DirectoryNode $node, string $file): void - { - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'directory_branch.html' : 'directory.html'); - $template = new Template($templateName, '{{', '}}'); - - $this->setCommonTemplateVariables($template, $node); - - $items = $this->renderItem($node, true); - - foreach ($node->directories() as $item) { - $items .= $this->renderItem($item); - } - - foreach ($node->files() as $item) { - $items .= $this->renderItem($item); - } - - $template->setVar( - [ - 'id' => $node->id(), - 'items' => $items, - ] - ); - - $template->renderTo($file); - } - - private function renderItem(Node $node, bool $total = false): string - { - $data = [ - 'numClasses' => $node->numberOfClassesAndTraits(), - 'numTestedClasses' => $node->numberOfTestedClassesAndTraits(), - 'numMethods' => $node->numberOfFunctionsAndMethods(), - 'numTestedMethods' => $node->numberOfTestedFunctionsAndMethods(), - 'linesExecutedPercent' => $node->percentageOfExecutedLines()->asFloat(), - 'linesExecutedPercentAsString' => $node->percentageOfExecutedLines()->asString(), - 'numExecutedLines' => $node->numberOfExecutedLines(), - 'numExecutableLines' => $node->numberOfExecutableLines(), - 'branchesExecutedPercent' => $node->percentageOfExecutedBranches()->asFloat(), - 'branchesExecutedPercentAsString' => $node->percentageOfExecutedBranches()->asString(), - 'numExecutedBranches' => $node->numberOfExecutedBranches(), - 'numExecutableBranches' => $node->numberOfExecutableBranches(), - 'pathsExecutedPercent' => $node->percentageOfExecutedPaths()->asFloat(), - 'pathsExecutedPercentAsString' => $node->percentageOfExecutedPaths()->asString(), - 'numExecutedPaths' => $node->numberOfExecutedPaths(), - 'numExecutablePaths' => $node->numberOfExecutablePaths(), - 'testedMethodsPercent' => $node->percentageOfTestedFunctionsAndMethods()->asFloat(), - 'testedMethodsPercentAsString' => $node->percentageOfTestedFunctionsAndMethods()->asString(), - 'testedClassesPercent' => $node->percentageOfTestedClassesAndTraits()->asFloat(), - 'testedClassesPercentAsString' => $node->percentageOfTestedClassesAndTraits()->asString(), - ]; - - if ($total) { - $data['name'] = 'Total'; - } else { - $up = str_repeat('../', count($node->pathAsArray()) - 2); - $data['icon'] = sprintf('', $up); - - if ($node instanceof DirectoryNode) { - $data['name'] = sprintf( - '%s', - $node->name(), - $node->name() - ); - $data['icon'] = sprintf('', $up); - } elseif ($this->hasBranchCoverage) { - $data['name'] = sprintf( - '%s [line] [branch] [path]', - $node->name(), - $node->name(), - $node->name(), - $node->name() - ); - } else { - $data['name'] = sprintf( - '%s', - $node->name(), - $node->name() - ); - } - } - - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'directory_item_branch.html' : 'directory_item.html'); - - return $this->renderItemTemplate( - new Template($templateName, '{{', '}}'), - $data - ); - } -} diff --git a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php b/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php deleted file mode 100644 index b59dc89..0000000 --- a/vendor/phpunit/php-code-coverage/src/Report/Html/Renderer/File.php +++ /dev/null @@ -1,1162 +0,0 @@ - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ -namespace SebastianBergmann\CodeCoverage\Report\Html; - -use const ENT_COMPAT; -use const ENT_HTML401; -use const ENT_SUBSTITUTE; -use const T_ABSTRACT; -use const T_ARRAY; -use const T_AS; -use const T_BREAK; -use const T_CALLABLE; -use const T_CASE; -use const T_CATCH; -use const T_CLASS; -use const T_CLONE; -use const T_COMMENT; -use const T_CONST; -use const T_CONTINUE; -use const T_DECLARE; -use const T_DEFAULT; -use const T_DO; -use const T_DOC_COMMENT; -use const T_ECHO; -use const T_ELSE; -use const T_ELSEIF; -use const T_EMPTY; -use const T_ENDDECLARE; -use const T_ENDFOR; -use const T_ENDFOREACH; -use const T_ENDIF; -use const T_ENDSWITCH; -use const T_ENDWHILE; -use const T_EVAL; -use const T_EXIT; -use const T_EXTENDS; -use const T_FINAL; -use const T_FINALLY; -use const T_FOR; -use const T_FOREACH; -use const T_FUNCTION; -use const T_GLOBAL; -use const T_GOTO; -use const T_HALT_COMPILER; -use const T_IF; -use const T_IMPLEMENTS; -use const T_INCLUDE; -use const T_INCLUDE_ONCE; -use const T_INLINE_HTML; -use const T_INSTANCEOF; -use const T_INSTEADOF; -use const T_INTERFACE; -use const T_ISSET; -use const T_LIST; -use const T_NAMESPACE; -use const T_NEW; -use const T_PRINT; -use const T_PRIVATE; -use const T_PROTECTED; -use const T_PUBLIC; -use const T_REQUIRE; -use const T_REQUIRE_ONCE; -use const T_RETURN; -use const T_STATIC; -use const T_SWITCH; -use const T_THROW; -use const T_TRAIT; -use const T_TRY; -use const T_UNSET; -use const T_USE; -use const T_VAR; -use const T_WHILE; -use const T_YIELD; -use const T_YIELD_FROM; -use function array_key_exists; -use function array_keys; -use function array_merge; -use function array_pop; -use function array_unique; -use function constant; -use function count; -use function defined; -use function explode; -use function file_get_contents; -use function htmlspecialchars; -use function is_string; -use function ksort; -use function range; -use function sort; -use function sprintf; -use function str_replace; -use function substr; -use function token_get_all; -use function trim; -use PHPUnit\Runner\BaseTestRunner; -use SebastianBergmann\CodeCoverage\Node\File as FileNode; -use SebastianBergmann\CodeCoverage\Util\Percentage; -use SebastianBergmann\Template\Template; - -/** - * @internal This class is not covered by the backward compatibility promise for phpunit/php-code-coverage - */ -final class File extends Renderer -{ - /** - * @psalm-var array - */ - private static $keywordTokens = []; - - /** - * @var array - */ - private static $formattedSourceCache = []; - - /** - * @var int - */ - private $htmlSpecialCharsFlags = ENT_COMPAT | ENT_HTML401 | ENT_SUBSTITUTE; - - public function render(FileNode $node, string $file): void - { - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'file_branch.html' : 'file.html'); - $template = new Template($templateName, '{{', '}}'); - $this->setCommonTemplateVariables($template, $node); - - $template->setVar( - [ - 'items' => $this->renderItems($node), - 'lines' => $this->renderSourceWithLineCoverage($node), - 'legend' => '

Covered by small (and larger) testsCovered by medium (and large) testsCovered by large tests (and tests of unknown size)Not coveredNot coverable

', - 'structure' => '', - ] - ); - - $template->renderTo($file . '.html'); - - if ($this->hasBranchCoverage) { - $template->setVar( - [ - 'items' => $this->renderItems($node), - 'lines' => $this->renderSourceWithBranchCoverage($node), - 'legend' => '

Fully coveredPartially coveredNot covered

', - 'structure' => $this->renderBranchStructure($node), - ] - ); - - $template->renderTo($file . '_branch.html'); - - $template->setVar( - [ - 'items' => $this->renderItems($node), - 'lines' => $this->renderSourceWithPathCoverage($node), - 'legend' => '

Fully coveredPartially coveredNot covered

', - 'structure' => $this->renderPathStructure($node), - ] - ); - - $template->renderTo($file . '_path.html'); - } - } - - private function renderItems(FileNode $node): string - { - $templateName = $this->templatePath . ($this->hasBranchCoverage ? 'file_item_branch.html' : 'file_item.html'); - $template = new Template($templateName, '{{', '}}'); - - $methodTemplateName = $this->templatePath . ($this->hasBranchCoverage ? 'method_item_branch.html' : 'method_item.html'); - $methodItemTemplate = new Template( - $methodTemplateName, - '{{', - '}}' - ); - - $items = $this->renderItemTemplate( - $template, - [ - 'name' => 'Total', - 'numClasses' => $node->numberOfClassesAndTraits(), - 'numTestedClasses' => $node->numberOfTestedClassesAndTraits(), - 'numMethods' => $node->numberOfFunctionsAndMethods(), - 'numTestedMethods' => $node->numberOfTestedFunctionsAndMethods(), - 'linesExecutedPercent' => $node->percentageOfExecutedLines()->asFloat(), - 'linesExecutedPercentAsString' => $node->percentageOfExecutedLines()->asString(), - 'numExecutedLines' => $node->numberOfExecutedLines(), - 'numExecutableLines' => $node->numberOfExecutableLines(), - 'branchesExecutedPercent' => $node->percentageOfExecutedBranches()->asFloat(), - 'branchesExecutedPercentAsString' => $node->percentageOfExecutedBranches()->asString(), - 'numExecutedBranches' => $node->numberOfExecutedBranches(), - 'numExecutableBranches' => $node->numberOfExecutableBranches(), - 'pathsExecutedPercent' => $node->percentageOfExecutedPaths()->asFloat(), - 'pathsExecutedPercentAsString' => $node->percentageOfExecutedPaths()->asString(), - 'numExecutedPaths' => $node->numberOfExecutedPaths(), - 'numExecutablePaths' => $node->numberOfExecutablePaths(), - 'testedMethodsPercent' => $node->percentageOfTestedFunctionsAndMethods()->asFloat(), - 'testedMethodsPercentAsString' => $node->percentageOfTestedFunctionsAndMethods()->asString(), - 'testedClassesPercent' => $node->percentageOfTestedClassesAndTraits()->asFloat(), - 'testedClassesPercentAsString' => $node->percentageOfTestedClassesAndTraits()->asString(), - 'crap' => 'CRAP', - ] - ); - - $items .= $this->renderFunctionItems( - $node->functions(), - $methodItemTemplate - ); - - $items .= $this->renderTraitOrClassItems( - $node->traits(), - $template, - $methodItemTemplate - ); - - $items .= $this->renderTraitOrClassItems( - $node->classes(), - $template, - $methodItemTemplate - ); - - return $items; - } - - private function renderTraitOrClassItems(array $items, Template $template, Template $methodItemTemplate): string - { - $buffer = ''; - - if (empty($items)) { - return $buffer; - } - - foreach ($items as $name => $item) { - $numMethods = 0; - $numTestedMethods = 0; - - foreach ($item['methods'] as $method) { - if ($method['executableLines'] > 0) { - $numMethods++; - - if ($method['executedLines'] === $method['executableLines']) { - $numTestedMethods++; - } - } - } - - if ($item['executableLines'] > 0) { - $numClasses = 1; - $numTestedClasses = $numTestedMethods === $numMethods ? 1 : 0; - $linesExecutedPercentAsString = Percentage::fromFractionAndTotal( - $item['executedLines'], - $item['executableLines'] - )->asString(); - $branchesExecutedPercentAsString = Percentage::fromFractionAndTotal( - $item['executedBranches'], - $item['executableBranches'] - )->asString(); - $pathsExecutedPercentAsString = Percentage::fromFractionAndTotal( - $item['executedPaths'], - $item['executablePaths'] - )->asString(); - } else { - $numClasses = 0; - $numTestedClasses = 0; - $linesExecutedPercentAsString = 'n/a'; - $branchesExecutedPercentAsString = 'n/a'; - $pathsExecutedPercentAsString = 'n/a'; - } - - $testedMethodsPercentage = Percentage::fromFractionAndTotal( - $numTestedMethods, - $numMethods - ); - - $testedClassesPercentage = Percentage::fromFractionAndTotal( - $numTestedMethods === $numMethods ? 1 : 0, - 1 - ); - - $buffer .= $this->renderItemTemplate( - $template, - [ - 'name' => $this->abbreviateClassName($name), - 'numClasses' => $numClasses, - 'numTestedClasses' => $numTestedClasses, - 'numMethods' => $numMethods, - 'numTestedMethods' => $numTestedMethods, - 'linesExecutedPercent' => Percentage::fromFractionAndTotal( - $item['executedLines'], - $item['executableLines'], - )->asFloat(), - 'linesExecutedPercentAsString' => $linesExecutedPercentAsString, - 'numExecutedLines' => $item['executedLines'], - 'numExecutableLines' => $item['executableLines'], - 'branchesExecutedPercent' => Percentage::fromFractionAndTotal( - $item['executedBranches'], - $item['executableBranches'], - )->asFloat(), - 'branchesExecutedPercentAsString' => $branchesExecutedPercentAsString, - 'numExecutedBranches' => $item['executedBranches'], - 'numExecutableBranches' => $item['executableBranches'], - 'pathsExecutedPercent' => Percentage::fromFractionAndTotal( - $item['executedPaths'], - $item['executablePaths'] - )->asFloat(), - 'pathsExecutedPercentAsString' => $pathsExecutedPercentAsString, - 'numExecutedPaths' => $item['executedPaths'], - 'numExecutablePaths' => $item['executablePaths'], - 'testedMethodsPercent' => $testedMethodsPercentage->asFloat(), - 'testedMethodsPercentAsString' => $testedMethodsPercentage->asString(), - 'testedClassesPercent' => $testedClassesPercentage->asFloat(), - 'testedClassesPercentAsString' => $testedClassesPercentage->asString(), - 'crap' => $item['crap'], - ] - ); - - foreach ($item['methods'] as $method) { - $buffer .= $this->renderFunctionOrMethodItem( - $methodItemTemplate, - $method, - ' ' - ); - } - } - - return $buffer; - } - - private function renderFunctionItems(array $functions, Template $template): string - { - if (empty($functions)) { - return ''; - } - - $buffer = ''; - - foreach ($functions as $function) { - $buffer .= $this->renderFunctionOrMethodItem( - $template, - $function - ); - } - - return $buffer; - } - - private function renderFunctionOrMethodItem(Template $template, array $item, string $indent = ''): string - { - $numMethods = 0; - $numTestedMethods = 0; - - if ($item['executableLines'] > 0) { - $numMethods = 1; - - if ($item['executedLines'] === $item['executableLines']) { - $numTestedMethods = 1; - } - } - - $executedLinesPercentage = Percentage::fromFractionAndTotal( - $item['executedLines'], - $item['executableLines'] - ); - - $executedBranchesPercentage = Percentage::fromFractionAndTotal( - $item['executedBranches'], - $item['executableBranches'] - ); - - $executedPathsPercentage = Percentage::fromFractionAndTotal( - $item['executedPaths'], - $item['executablePaths'] - ); - - $testedMethodsPercentage = Percentage::fromFractionAndTotal( - $numTestedMethods, - 1 - ); - - return $this->renderItemTemplate( - $template, - [ - 'name' => sprintf( - '%s%s', - $indent, - $item['startLine'], - htmlspecialchars($item['signature'], $this->htmlSpecialCharsFlags), - $item['functionName'] ?? $item['methodName'] - ), - 'numMethods' => $numMethods, - 'numTestedMethods' => $numTestedMethods, - 'linesExecutedPercent' => $executedLinesPercentage->asFloat(), - 'linesExecutedPercentAsString' => $executedLinesPercentage->asString(), - 'numExecutedLines' => $item['executedLines'], - 'numExecutableLines' => $item['executableLines'], - 'branchesExecutedPercent' => $executedBranchesPercentage->asFloat(), - 'branchesExecutedPercentAsString' => $executedBranchesPercentage->asString(), - 'numExecutedBranches' => $item['executedBranches'], - 'numExecutableBranches' => $item['executableBranches'], - 'pathsExecutedPercent' => $executedPathsPercentage->asFloat(), - 'pathsExecutedPercentAsString' => $executedPathsPercentage->asString(), - 'numExecutedPaths' => $item['executedPaths'], - 'numExecutablePaths' => $item['executablePaths'], - 'testedMethodsPercent' => $testedMethodsPercentage->asFloat(), - 'testedMethodsPercentAsString' => $testedMethodsPercentage->asString(), - 'crap' => $item['crap'], - ] - ); - } - - private function renderSourceWithLineCoverage(FileNode $node): string - { - $linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}'); - $singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}'); - - $coverageData = $node->lineCoverageData(); - $testData = $node->testData(); - $codeLines = $this->loadFile($node->pathAsString()); - $lines = ''; - $i = 1; - - foreach ($codeLines as $line) { - $trClass = ''; - $popoverContent = ''; - $popoverTitle = ''; - - if (array_key_exists($i, $coverageData)) { - $numTests = ($coverageData[$i] ? count($coverageData[$i]) : 0); - - if ($coverageData[$i] === null) { - $trClass = 'warning'; - } elseif ($numTests === 0) { - $trClass = 'danger'; - } else { - if ($numTests > 1) { - $popoverTitle = $numTests . ' tests cover line ' . $i; - } else { - $popoverTitle = '1 test covers line ' . $i; - } - - $lineCss = 'covered-by-large-tests'; - $popoverContent = '
    '; - - foreach ($coverageData[$i] as $test) { - if ($lineCss === 'covered-by-large-tests' && $testData[$test]['size'] === 'medium') { - $lineCss = 'covered-by-medium-tests'; - } elseif ($testData[$test]['size'] === 'small') { - $lineCss = 'covered-by-small-tests'; - } - - $popoverContent .= $this->createPopoverContentForTest($test, $testData[$test]); - } - - $popoverContent .= '
'; - $trClass = $lineCss . ' popin'; - } - } - - $popover = ''; - - if (!empty($popoverTitle)) { - $popover = sprintf( - ' data-title="%s" data-content="%s" data-placement="top" data-html="true"', - $popoverTitle, - htmlspecialchars($popoverContent, $this->htmlSpecialCharsFlags) - ); - } - - $lines .= $this->renderLine($singleLineTemplate, $i, $line, $trClass, $popover); - - $i++; - } - - $linesTemplate->setVar(['lines' => $lines]); - - return $linesTemplate->render(); - } - - private function renderSourceWithBranchCoverage(FileNode $node): string - { - $linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}'); - $singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}'); - - $functionCoverageData = $node->functionCoverageData(); - $testData = $node->testData(); - $codeLines = $this->loadFile($node->pathAsString()); - - $lineData = []; - - /** @var int $line */ - foreach (array_keys($codeLines) as $line) { - $lineData[$line + 1] = [ - 'includedInBranches' => 0, - 'includedInHitBranches' => 0, - 'tests' => [], - ]; - } - - foreach ($functionCoverageData as $method) { - foreach ($method['branches'] as $branch) { - foreach (range($branch['line_start'], $branch['line_end']) as $line) { - if (!isset($lineData[$line])) { // blank line at end of file is sometimes included here - continue; - } - - $lineData[$line]['includedInBranches']++; - - if ($branch['hit']) { - $lineData[$line]['includedInHitBranches']++; - $lineData[$line]['tests'] = array_unique(array_merge($lineData[$line]['tests'], $branch['hit'])); - } - } - } - } - - $lines = ''; - $i = 1; - - /** @var string $line */ - foreach ($codeLines as $line) { - $trClass = ''; - $popover = ''; - - if ($lineData[$i]['includedInBranches'] > 0) { - $lineCss = 'success'; - - if ($lineData[$i]['includedInHitBranches'] === 0) { - $lineCss = 'danger'; - } elseif ($lineData[$i]['includedInHitBranches'] !== $lineData[$i]['includedInBranches']) { - $lineCss = 'warning'; - } - - $popoverContent = '
    '; - - if (count($lineData[$i]['tests']) === 1) { - $popoverTitle = '1 test covers line ' . $i; - } else { - $popoverTitle = count($lineData[$i]['tests']) . ' tests cover line ' . $i; - } - $popoverTitle .= '. These are covering ' . $lineData[$i]['includedInHitBranches'] . ' out of the ' . $lineData[$i]['includedInBranches'] . ' code branches.'; - - foreach ($lineData[$i]['tests'] as $test) { - $popoverContent .= $this->createPopoverContentForTest($test, $testData[$test]); - } - - $popoverContent .= '
'; - $trClass = $lineCss . ' popin'; - - $popover = sprintf( - ' data-title="%s" data-content="%s" data-placement="top" data-html="true"', - $popoverTitle, - htmlspecialchars($popoverContent, $this->htmlSpecialCharsFlags) - ); - } - - $lines .= $this->renderLine($singleLineTemplate, $i, $line, $trClass, $popover); - - $i++; - } - - $linesTemplate->setVar(['lines' => $lines]); - - return $linesTemplate->render(); - } - - private function renderSourceWithPathCoverage(FileNode $node): string - { - $linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}'); - $singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}'); - - $functionCoverageData = $node->functionCoverageData(); - $testData = $node->testData(); - $codeLines = $this->loadFile($node->pathAsString()); - - $lineData = []; - - /** @var int $line */ - foreach (array_keys($codeLines) as $line) { - $lineData[$line + 1] = [ - 'includedInPaths' => [], - 'includedInHitPaths' => [], - 'tests' => [], - ]; - } - - foreach ($functionCoverageData as $method) { - foreach ($method['paths'] as $pathId => $path) { - foreach ($path['path'] as $branchTaken) { - foreach (range($method['branches'][$branchTaken]['line_start'], $method['branches'][$branchTaken]['line_end']) as $line) { - if (!isset($lineData[$line])) { - continue; - } - $lineData[$line]['includedInPaths'][] = $pathId; - - if ($path['hit']) { - $lineData[$line]['includedInHitPaths'][] = $pathId; - $lineData[$line]['tests'] = array_unique(array_merge($lineData[$line]['tests'], $path['hit'])); - } - } - } - } - } - - $lines = ''; - $i = 1; - - /** @var string $line */ - foreach ($codeLines as $line) { - $trClass = ''; - $popover = ''; - $includedInPathsCount = count(array_unique($lineData[$i]['includedInPaths'])); - $includedInHitPathsCount = count(array_unique($lineData[$i]['includedInHitPaths'])); - - if ($includedInPathsCount > 0) { - $lineCss = 'success'; - - if ($includedInHitPathsCount === 0) { - $lineCss = 'danger'; - } elseif ($includedInHitPathsCount !== $includedInPathsCount) { - $lineCss = 'warning'; - } - - $popoverContent = '
    '; - - if (count($lineData[$i]['tests']) === 1) { - $popoverTitle = '1 test covers line ' . $i; - } else { - $popoverTitle = count($lineData[$i]['tests']) . ' tests cover line ' . $i; - } - $popoverTitle .= '. These are covering ' . $includedInHitPathsCount . ' out of the ' . $includedInPathsCount . ' code paths.'; - - foreach ($lineData[$i]['tests'] as $test) { - $popoverContent .= $this->createPopoverContentForTest($test, $testData[$test]); - } - - $popoverContent .= '
'; - $trClass = $lineCss . ' popin'; - - $popover = sprintf( - ' data-title="%s" data-content="%s" data-placement="top" data-html="true"', - $popoverTitle, - htmlspecialchars($popoverContent, $this->htmlSpecialCharsFlags) - ); - } - - $lines .= $this->renderLine($singleLineTemplate, $i, $line, $trClass, $popover); - - $i++; - } - - $linesTemplate->setVar(['lines' => $lines]); - - return $linesTemplate->render(); - } - - private function renderBranchStructure(FileNode $node): string - { - $branchesTemplate = new Template($this->templatePath . 'branches.html.dist', '{{', '}}'); - - $coverageData = $node->functionCoverageData(); - $testData = $node->testData(); - $codeLines = $this->loadFile($node->pathAsString()); - $branches = ''; - - ksort($coverageData); - - foreach ($coverageData as $methodName => $methodData) { - if (!$methodData['branches']) { - continue; - } - - $branchStructure = ''; - - foreach ($methodData['branches'] as $branch) { - $branchStructure .= $this->renderBranchLines($branch, $codeLines, $testData); - } - - if ($branchStructure !== '') { // don't show empty branches - $branches .= '
' . $this->abbreviateMethodName($methodName) . '
' . "\n"; - $branches .= $branchStructure; - } - } - - $branchesTemplate->setVar(['branches' => $branches]); - - return $branchesTemplate->render(); - } - - private function renderBranchLines(array $branch, array $codeLines, array $testData): string - { - $linesTemplate = new Template($this->templatePath . 'lines.html.dist', '{{', '}}'); - $singleLineTemplate = new Template($this->templatePath . 'line.html.dist', '{{', '}}'); - - $lines = ''; - - $branchLines = range($branch['line_start'], $branch['line_end']); - sort($branchLines); // sometimes end_line < start_line - - /** @var int $line */ - foreach ($branchLines as $line) { - if (!isset($codeLines[$line])) { // blank line at end of file is sometimes included here - continue; - } - - $popoverContent = ''; - $popoverTitle = ''; - - $numTests = count($branch['hit']); - - if ($numTests === 0) { - $trClass = 'danger'; - } else { - $lineCss = 'covered-by-large-tests'; - $popoverContent = '