diff --git a/src/Sylius/Bundle/AdminApiBundle/DependencyInjection/SyliusAdminApiExtension.php b/src/Sylius/Bundle/AdminApiBundle/DependencyInjection/SyliusAdminApiExtension.php index a050a7ccb1..7aa3cc6bbc 100644 --- a/src/Sylius/Bundle/AdminApiBundle/DependencyInjection/SyliusAdminApiExtension.php +++ b/src/Sylius/Bundle/AdminApiBundle/DependencyInjection/SyliusAdminApiExtension.php @@ -37,6 +37,8 @@ final class SyliusAdminApiExtension extends AbstractResourceExtension implements */ public function prepend(ContainerBuilder $container): void { + $this->prependDoctrineMigrations($container); + if (!$container->hasExtension('fos_oauth_server')) { throw new ServiceNotFoundException('FOSOAuthServerBundle must be registered in kernel.'); } @@ -56,4 +58,23 @@ final class SyliusAdminApiExtension extends AbstractResourceExtension implements ], ]); } + + private function prependDoctrineMigrations(ContainerBuilder $container): void + { + if (!$container->hasExtension('doctrine_migrations') || !$container->hasExtension('sylius_labs_doctrine_migrations_extra')) { + return; + } + + $container->prependExtensionConfig('doctrine_migrations', [ + 'migrations_paths' => [ + 'Sylius\Bundle\AdminApiBundle\Migrations' => '@SyliusAdminApiBundle/Migrations', + ], + ]); + + $container->prependExtensionConfig('sylius_labs_doctrine_migrations_extra', [ + 'migrations' => [ + 'Sylius\Bundle\AdminApiBundle\Migrations' => ['Sylius\Bundle\CoreBundle\Migrations'], + ], + ]); + } } diff --git a/src/Sylius/Bundle/AdminApiBundle/Migrations/Version20161202011556.php b/src/Sylius/Bundle/AdminApiBundle/Migrations/Version20161202011556.php new file mode 100644 index 0000000000..1511823342 --- /dev/null +++ b/src/Sylius/Bundle/AdminApiBundle/Migrations/Version20161202011556.php @@ -0,0 +1,68 @@ +abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + /** + * How this table could exist if not created by this migration before? + * Migration Version20161202011555 has been split between CoreBundle and AdminApiBundle. + * + * CoreBundle's one uses the same class name (Sylius\Bundle\CoreBundle\Migrations\Version20161202011555), but + * has all AdminApiBundle's queries removed. + * + * AdminApiBundle's one uses a different name (version number incremented by one, Sylius\Bundle\AdminApiBundle\Migrations\Version20161202011556), + * but it makes Doctrine Migrations run this migration after upgrading to Migrations v3. + * + * By performing this check, we can discover whether this migration is run just after the upgrade and skip it instead. + */ + if ($schema->hasTable('sylius_api_client')) { + return; + } + + $this->addSql('CREATE TABLE sylius_api_access_token (id INT AUTO_INCREMENT NOT NULL, client_id INT DEFAULT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_7D83AA7F5F37A13B (token), INDEX IDX_7D83AA7F19EB6921 (client_id), INDEX IDX_7D83AA7FA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); + $this->addSql('CREATE TABLE sylius_api_auth_code (id INT AUTO_INCREMENT NOT NULL, client_id INT DEFAULT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, redirect_uri LONGTEXT NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_C84041795F37A13B (token), INDEX IDX_C840417919EB6921 (client_id), INDEX IDX_C8404179A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); + $this->addSql('CREATE TABLE sylius_api_client (id INT AUTO_INCREMENT NOT NULL, random_id VARCHAR(255) NOT NULL, redirect_uris LONGTEXT NOT NULL COMMENT \'(DC2Type:array)\', secret VARCHAR(255) NOT NULL, allowed_grant_types LONGTEXT NOT NULL COMMENT \'(DC2Type:array)\', PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); + $this->addSql('CREATE TABLE sylius_api_refresh_token (id INT AUTO_INCREMENT NOT NULL, client_id INT DEFAULT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_445785255F37A13B (token), INDEX IDX_4457852519EB6921 (client_id), INDEX IDX_44578525A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); + $this->addSql('ALTER TABLE sylius_api_access_token ADD CONSTRAINT FK_7D83AA7F19EB6921 FOREIGN KEY (client_id) REFERENCES sylius_api_client (id)'); + $this->addSql('ALTER TABLE sylius_api_access_token ADD CONSTRAINT FK_7D83AA7FA76ED395 FOREIGN KEY (user_id) REFERENCES sylius_admin_user (id)'); + $this->addSql('ALTER TABLE sylius_api_auth_code ADD CONSTRAINT FK_C840417919EB6921 FOREIGN KEY (client_id) REFERENCES sylius_api_client (id)'); + $this->addSql('ALTER TABLE sylius_api_auth_code ADD CONSTRAINT FK_C8404179A76ED395 FOREIGN KEY (user_id) REFERENCES sylius_admin_user (id)'); + $this->addSql('ALTER TABLE sylius_api_refresh_token ADD CONSTRAINT FK_4457852519EB6921 FOREIGN KEY (client_id) REFERENCES sylius_api_client (id)'); + $this->addSql('ALTER TABLE sylius_api_refresh_token ADD CONSTRAINT FK_44578525A76ED395 FOREIGN KEY (user_id) REFERENCES sylius_admin_user (id)'); + } + + public function down(Schema $schema): void + { + $this->abortIf($this->connection->getDatabasePlatform()->getName() != 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('ALTER TABLE sylius_api_access_token DROP FOREIGN KEY FK_7D83AA7FA76ED395'); + $this->addSql('ALTER TABLE sylius_api_auth_code DROP FOREIGN KEY FK_C8404179A76ED395'); + $this->addSql('ALTER TABLE sylius_api_refresh_token DROP FOREIGN KEY FK_44578525A76ED395'); + $this->addSql('ALTER TABLE sylius_api_access_token DROP FOREIGN KEY FK_7D83AA7F19EB6921'); + $this->addSql('ALTER TABLE sylius_api_auth_code DROP FOREIGN KEY FK_C840417919EB6921'); + $this->addSql('ALTER TABLE sylius_api_refresh_token DROP FOREIGN KEY FK_4457852519EB6921'); + $this->addSql('DROP TABLE sylius_api_access_token'); + $this->addSql('DROP TABLE sylius_api_auth_code'); + $this->addSql('DROP TABLE sylius_api_client'); + $this->addSql('DROP TABLE sylius_api_refresh_token'); + } +} diff --git a/src/Sylius/Bundle/CoreBundle/Migrations/Version20170313125424.php b/src/Sylius/Bundle/AdminApiBundle/Migrations/Version20170313125424.php similarity index 99% rename from src/Sylius/Bundle/CoreBundle/Migrations/Version20170313125424.php rename to src/Sylius/Bundle/AdminApiBundle/Migrations/Version20170313125424.php index 24e780dbc9..36540f80cb 100644 --- a/src/Sylius/Bundle/CoreBundle/Migrations/Version20170313125424.php +++ b/src/Sylius/Bundle/AdminApiBundle/Migrations/Version20170313125424.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace Sylius\Bundle\CoreBundle\Migrations; +namespace Sylius\Bundle\AdminApiBundle\Migrations; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; diff --git a/src/Sylius/Bundle/CoreBundle/Migrations/Version20170711151342.php b/src/Sylius/Bundle/AdminApiBundle/Migrations/Version20170711151342.php similarity index 94% rename from src/Sylius/Bundle/CoreBundle/Migrations/Version20170711151342.php rename to src/Sylius/Bundle/AdminApiBundle/Migrations/Version20170711151342.php index 8b82a6d8f0..2963a6eae4 100644 --- a/src/Sylius/Bundle/CoreBundle/Migrations/Version20170711151342.php +++ b/src/Sylius/Bundle/AdminApiBundle/Migrations/Version20170711151342.php @@ -11,7 +11,7 @@ declare(strict_types=1); -namespace Sylius\Bundle\CoreBundle\Migrations; +namespace Sylius\Bundle\AdminApiBundle\Migrations; use Doctrine\DBAL\Schema\Schema; use Doctrine\Migrations\AbstractMigration; @@ -24,7 +24,9 @@ class Version20170711151342 extends AbstractMigration // Check if foreign key with correct name exists. If so, this indicates all other foreign keys are correct as well foreach ($schema->getTable('sylius_admin_api_access_token')->getForeignKeys() as $key) { - $this->skipIf($key->getName() === 'FK_2AA4915D19EB6921', 'Database has correct index name'); + if ($key->getName() === 'FK_2AA4915D19EB6921') { + return; + } } $this->addSql('ALTER TABLE sylius_admin_api_access_token DROP FOREIGN KEY FK_7D83AA7F19EB6921'); diff --git a/src/Sylius/Bundle/CoreBundle/Migrations/Version20161202011555.php b/src/Sylius/Bundle/CoreBundle/Migrations/Version20161202011555.php index 424bf4a87b..752ce867c1 100644 --- a/src/Sylius/Bundle/CoreBundle/Migrations/Version20161202011555.php +++ b/src/Sylius/Bundle/CoreBundle/Migrations/Version20161202011555.php @@ -86,10 +86,6 @@ class Version20161202011555 extends AbstractMigration $this->addSql('CREATE TABLE sylius_tax_rate (id INT AUTO_INCREMENT NOT NULL, category_id INT NOT NULL, zone_id INT NOT NULL, code VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, amount NUMERIC(10, 5) NOT NULL, included_in_price TINYINT(1) NOT NULL, calculator VARCHAR(255) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME DEFAULT NULL, UNIQUE INDEX UNIQ_3CD86B2E77153098 (code), INDEX IDX_3CD86B2E12469DE2 (category_id), INDEX IDX_3CD86B2E9F2C3FAB (zone_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); $this->addSql('CREATE TABLE sylius_gateway_config (id INT AUTO_INCREMENT NOT NULL, config LONGTEXT NOT NULL COMMENT \'(DC2Type:json_array)\', gateway_name VARCHAR(255) NOT NULL, factory_name VARCHAR(255) NOT NULL, PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); $this->addSql('CREATE TABLE sylius_payment_security_token (hash VARCHAR(255) NOT NULL, details LONGTEXT DEFAULT NULL COMMENT \'(DC2Type:object)\', after_url LONGTEXT DEFAULT NULL, target_url LONGTEXT NOT NULL, gateway_name VARCHAR(255) NOT NULL, PRIMARY KEY(hash)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); - $this->addSql('CREATE TABLE sylius_api_access_token (id INT AUTO_INCREMENT NOT NULL, client_id INT DEFAULT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_7D83AA7F5F37A13B (token), INDEX IDX_7D83AA7F19EB6921 (client_id), INDEX IDX_7D83AA7FA76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); - $this->addSql('CREATE TABLE sylius_api_auth_code (id INT AUTO_INCREMENT NOT NULL, client_id INT DEFAULT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, redirect_uri LONGTEXT NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_C84041795F37A13B (token), INDEX IDX_C840417919EB6921 (client_id), INDEX IDX_C8404179A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); - $this->addSql('CREATE TABLE sylius_api_client (id INT AUTO_INCREMENT NOT NULL, random_id VARCHAR(255) NOT NULL, redirect_uris LONGTEXT NOT NULL COMMENT \'(DC2Type:array)\', secret VARCHAR(255) NOT NULL, allowed_grant_types LONGTEXT NOT NULL COMMENT \'(DC2Type:array)\', PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); - $this->addSql('CREATE TABLE sylius_api_refresh_token (id INT AUTO_INCREMENT NOT NULL, client_id INT DEFAULT NULL, user_id INT DEFAULT NULL, token VARCHAR(255) NOT NULL, expires_at INT DEFAULT NULL, scope VARCHAR(255) DEFAULT NULL, UNIQUE INDEX UNIQ_445785255F37A13B (token), INDEX IDX_4457852519EB6921 (client_id), INDEX IDX_44578525A76ED395 (user_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ENGINE = InnoDB'); $this->addSql('ALTER TABLE sylius_adjustment ADD CONSTRAINT FK_ACA6E0F28D9F6D38 FOREIGN KEY (order_id) REFERENCES sylius_order (id) ON DELETE CASCADE'); $this->addSql('ALTER TABLE sylius_adjustment ADD CONSTRAINT FK_ACA6E0F2E415FB15 FOREIGN KEY (order_item_id) REFERENCES sylius_order_item (id) ON DELETE CASCADE'); $this->addSql('ALTER TABLE sylius_adjustment ADD CONSTRAINT FK_ACA6E0F2F720C233 FOREIGN KEY (order_item_unit_id) REFERENCES sylius_order_item_unit (id) ON DELETE CASCADE'); @@ -173,12 +169,6 @@ class Version20161202011555 extends AbstractMigration $this->addSql('ALTER TABLE sylius_taxon_image ADD CONSTRAINT FK_DBE52B287E3C61F9 FOREIGN KEY (owner_id) REFERENCES sylius_taxon (id) ON DELETE CASCADE'); $this->addSql('ALTER TABLE sylius_tax_rate ADD CONSTRAINT FK_3CD86B2E12469DE2 FOREIGN KEY (category_id) REFERENCES sylius_tax_category (id)'); $this->addSql('ALTER TABLE sylius_tax_rate ADD CONSTRAINT FK_3CD86B2E9F2C3FAB FOREIGN KEY (zone_id) REFERENCES sylius_zone (id)'); - $this->addSql('ALTER TABLE sylius_api_access_token ADD CONSTRAINT FK_7D83AA7F19EB6921 FOREIGN KEY (client_id) REFERENCES sylius_api_client (id)'); - $this->addSql('ALTER TABLE sylius_api_access_token ADD CONSTRAINT FK_7D83AA7FA76ED395 FOREIGN KEY (user_id) REFERENCES sylius_admin_user (id)'); - $this->addSql('ALTER TABLE sylius_api_auth_code ADD CONSTRAINT FK_C840417919EB6921 FOREIGN KEY (client_id) REFERENCES sylius_api_client (id)'); - $this->addSql('ALTER TABLE sylius_api_auth_code ADD CONSTRAINT FK_C8404179A76ED395 FOREIGN KEY (user_id) REFERENCES sylius_admin_user (id)'); - $this->addSql('ALTER TABLE sylius_api_refresh_token ADD CONSTRAINT FK_4457852519EB6921 FOREIGN KEY (client_id) REFERENCES sylius_api_client (id)'); - $this->addSql('ALTER TABLE sylius_api_refresh_token ADD CONSTRAINT FK_44578525A76ED395 FOREIGN KEY (user_id) REFERENCES sylius_admin_user (id)'); } public function down(Schema $schema): void @@ -215,9 +205,6 @@ class Version20161202011555 extends AbstractMigration $this->addSql('ALTER TABLE sylius_customer DROP FOREIGN KEY FK_7E82D5E6BD94FB16'); $this->addSql('ALTER TABLE sylius_order DROP FOREIGN KEY FK_6196A1F94D4CFF2B'); $this->addSql('ALTER TABLE sylius_order DROP FOREIGN KEY FK_6196A1F979D0C0E4'); - $this->addSql('ALTER TABLE sylius_api_access_token DROP FOREIGN KEY FK_7D83AA7FA76ED395'); - $this->addSql('ALTER TABLE sylius_api_auth_code DROP FOREIGN KEY FK_C8404179A76ED395'); - $this->addSql('ALTER TABLE sylius_api_refresh_token DROP FOREIGN KEY FK_44578525A76ED395'); $this->addSql('ALTER TABLE sylius_channel_currencies DROP FOREIGN KEY FK_AE491F9372F5A1AA'); $this->addSql('ALTER TABLE sylius_channel_locales DROP FOREIGN KEY FK_786B7A8472F5A1AA'); $this->addSql('ALTER TABLE sylius_channel_pricing DROP FOREIGN KEY FK_7801820C72F5A1AA'); @@ -271,9 +258,6 @@ class Version20161202011555 extends AbstractMigration $this->addSql('ALTER TABLE sylius_taxon DROP FOREIGN KEY FK_CFD811CAA977936C'); $this->addSql('ALTER TABLE sylius_taxon DROP FOREIGN KEY FK_CFD811CA727ACA70'); $this->addSql('ALTER TABLE sylius_taxon_image DROP FOREIGN KEY FK_DBE52B287E3C61F9'); - $this->addSql('ALTER TABLE sylius_api_access_token DROP FOREIGN KEY FK_7D83AA7F19EB6921'); - $this->addSql('ALTER TABLE sylius_api_auth_code DROP FOREIGN KEY FK_C840417919EB6921'); - $this->addSql('ALTER TABLE sylius_api_refresh_token DROP FOREIGN KEY FK_4457852519EB6921'); $this->addSql('DROP TABLE sylius_adjustment'); $this->addSql('DROP TABLE sylius_order_sequence'); $this->addSql('DROP TABLE sylius_currency'); @@ -338,9 +322,5 @@ class Version20161202011555 extends AbstractMigration $this->addSql('DROP TABLE sylius_tax_rate'); $this->addSql('DROP TABLE sylius_gateway_config'); $this->addSql('DROP TABLE sylius_payment_security_token'); - $this->addSql('DROP TABLE sylius_api_access_token'); - $this->addSql('DROP TABLE sylius_api_auth_code'); - $this->addSql('DROP TABLE sylius_api_client'); - $this->addSql('DROP TABLE sylius_api_refresh_token'); } } diff --git a/src/Sylius/Bundle/CoreBundle/Migrations/Version20191024065651.php b/src/Sylius/Bundle/CoreBundle/Migrations/Version20191024065651.php new file mode 100644 index 0000000000..75933dfc22 --- /dev/null +++ b/src/Sylius/Bundle/CoreBundle/Migrations/Version20191024065651.php @@ -0,0 +1,35 @@ +abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('CREATE TABLE sylius_shipping_method_rule (id INT AUTO_INCREMENT NOT NULL, shipping_method_id INT DEFAULT NULL, type VARCHAR(255) NOT NULL, configuration LONGTEXT NOT NULL COMMENT \'(DC2Type:array)\', INDEX IDX_88A0EB655F7D6850 (shipping_method_id), PRIMARY KEY(id)) DEFAULT CHARACTER SET UTF8 COLLATE UTF8_unicode_ci ENGINE = InnoDB'); + $this->addSql('ALTER TABLE sylius_shipping_method_rule ADD CONSTRAINT FK_88A0EB655F7D6850 FOREIGN KEY (shipping_method_id) REFERENCES sylius_shipping_method (id)'); + } + + public function down(Schema $schema): void + { + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('DROP TABLE sylius_shipping_method_rule'); + } +} diff --git a/src/Sylius/Bundle/CoreBundle/Migrations/Version20200309172908.php b/src/Sylius/Bundle/CoreBundle/Migrations/Version20200309172908.php new file mode 100644 index 0000000000..4d66b4fe47 --- /dev/null +++ b/src/Sylius/Bundle/CoreBundle/Migrations/Version20200309172908.php @@ -0,0 +1,35 @@ +abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('ALTER TABLE sylius_product_variant ADD enabled TINYINT(1) NOT NULL'); + $this->addSql('UPDATE sylius_product_variant SET enabled = 1'); + } + + public function down(Schema $schema): void + { + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('ALTER TABLE sylius_product_variant DROP enabled'); + } +} diff --git a/src/Sylius/Bundle/CoreBundle/Migrations/Version20200325075815.php b/src/Sylius/Bundle/CoreBundle/Migrations/Version20200325075815.php new file mode 100644 index 0000000000..39874415fe --- /dev/null +++ b/src/Sylius/Bundle/CoreBundle/Migrations/Version20200325075815.php @@ -0,0 +1,35 @@ +abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('ALTER TABLE sylius_taxon ADD enabled TINYINT(1) NOT NULL'); + $this->addSql('UPDATE sylius_taxon SET enabled = 1'); + } + + public function down(Schema $schema): void + { + $this->abortIf($this->connection->getDatabasePlatform()->getName() !== 'mysql', 'Migration can only be executed safely on \'mysql\'.'); + + $this->addSql('ALTER TABLE sylius_taxon DROP enabled'); + } +} diff --git a/symfony.lock b/symfony.lock index 3a680ae537..ade524df1e 100644 --- a/symfony.lock +++ b/symfony.lock @@ -52,6 +52,9 @@ "localheinz/diff": { "version": "1.0.1" }, + "marcj/topsort": { + "version": "1.1.0" + }, "namshi/jose": { "version": "7.2.3" }, @@ -268,6 +271,9 @@ "sylius-labs/coding-standard": { "version": "v2.0.0" }, + "sylius-labs/doctrine-migrations-extra-bundle": { + "version": "v0.1.3" + }, "sylius-labs/polyfill-symfony-event-dispatcher": { "version": "v1.0.0" }, @@ -451,6 +457,21 @@ "symfony/web-link": { "version": "v5.0.7" }, + "symplify/auto-bind-parameter": { + "version": "v8.2.9" + }, + "symplify/autowire-array-parameter": { + "version": "v8.2.9" + }, + "symplify/console-color-diff": { + "version": "v8.2.9" + }, + "symplify/parameter-name-guard": { + "version": "v8.2.1" + }, + "symplify/phpstan-extensions": { + "version": "v8.1.19" + }, "textalk/websocket": { "version": "1.2.0" }