From 641ef9d48a53f6073d1080f15801a0e13b586bb0 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 3 Nov 2025 11:53:23 +0100 Subject: [PATCH 1/5] Replace Webmozart Assert with array_any/array_all --- composer.json | 6 +++--- .../DataTransformer/CronExpressionToPartsTransformer.php | 7 +------ .../CronExpressionToStringPartsTransformer.php | 5 +---- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/composer.json b/composer.json index f64fa16..d0d6bec 100644 --- a/composer.json +++ b/composer.json @@ -19,10 +19,10 @@ "symfony/form": "^5.4 || ^6.0 || ^7.0", "symfony/http-kernel": "^5.4 || ^6.0 || ^7.0", "symfony/options-resolver": "^5.4 || ^6.0 || ^7.0", - "symfony/polyfill-php83": "^1.27", + "symfony/polyfill-php83": "^1.33", + "symfony/polyfill-php84": "^1.33", "symfony/property-info": "^5.4 || ^6.0 || ^7.0", - "symfony/validator": "^5.4 || ^6.0 || ^7.0", - "webmozart/assert": "^1.10" + "symfony/validator": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { "ergebnis/composer-normalize": "^2.42", diff --git a/src/Form/DataTransformer/CronExpressionToPartsTransformer.php b/src/Form/DataTransformer/CronExpressionToPartsTransformer.php index 8a0e4cd..df3ac1a 100644 --- a/src/Form/DataTransformer/CronExpressionToPartsTransformer.php +++ b/src/Form/DataTransformer/CronExpressionToPartsTransformer.php @@ -7,7 +7,6 @@ use Cron\CronExpression; use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Exception\TransformationFailedException; -use Webmozart\Assert\Assert; /** * @template-implements DataTransformerInterface>> @@ -69,9 +68,7 @@ public function reverseTransform($value): CronExpression throw $exception; } - try { - Assert::allIsArray($value); - } catch (\InvalidArgumentException $e) { + if (array_any($value, fn($s) => !is_array($s) || array_any($s, fn($o) => !is_scalar($o)))) { throw $exception; } @@ -96,8 +93,6 @@ private function convertCronParts(array $cronArray): string return '*'; } - Assert::allScalar($cronArray); - return implode(',', $cronArray); } diff --git a/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php b/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php index 023c967..cb92234 100644 --- a/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php +++ b/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php @@ -7,7 +7,6 @@ use Cron\CronExpression; use Symfony\Component\Form\DataTransformerInterface; use Symfony\Component\Form\Exception\TransformationFailedException; -use Webmozart\Assert\Assert; /** * @template-implements DataTransformerInterface> @@ -69,9 +68,7 @@ public function reverseTransform($value): CronExpression throw $exception; } - try { - Assert::allString($value); - } catch (\InvalidArgumentException $e) { + if (!array_all($value, fn($s) => is_string($s))) { throw $exception; } From 455d64a92bd9da21cdfbc55163ff60f44565a582 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 3 Nov 2025 11:55:26 +0100 Subject: [PATCH 2/5] ignore polyfill-php84 --- composer-dependency-analyser.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/composer-dependency-analyser.php b/composer-dependency-analyser.php index 730b35e..a7801ad 100644 --- a/composer-dependency-analyser.php +++ b/composer-dependency-analyser.php @@ -21,6 +21,9 @@ if (version_compare(PHP_VERSION, '8.3.0', '>=')) { $config->ignoreErrorsOnPackage('symfony/polyfill-php83', [ErrorType::UNUSED_DEPENDENCY]); } +if (version_compare(PHP_VERSION, '8.4.0', '>=')) { + $config->ignoreErrorsOnPackage('symfony/polyfill-php84', [ErrorType::UNUSED_DEPENDENCY]); +} if (!class_exists(DataProvider::class)) { $config->ignoreUnknownClasses([DataProvider::class]); From 233d9721832f482084fd0688bb7699f8d28c9cd4 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 3 Nov 2025 12:02:50 +0100 Subject: [PATCH 3/5] fix style --- src/Form/DataTransformer/CronExpressionToPartsTransformer.php | 4 ++-- .../CronExpressionToStringPartsTransformer.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Form/DataTransformer/CronExpressionToPartsTransformer.php b/src/Form/DataTransformer/CronExpressionToPartsTransformer.php index df3ac1a..ea6286c 100644 --- a/src/Form/DataTransformer/CronExpressionToPartsTransformer.php +++ b/src/Form/DataTransformer/CronExpressionToPartsTransformer.php @@ -47,7 +47,7 @@ public function transform($value): array } /** - * @param mixed $value + * @param array>|null $value */ #[\Override] public function reverseTransform($value): CronExpression @@ -68,7 +68,7 @@ public function reverseTransform($value): CronExpression throw $exception; } - if (array_any($value, fn($s) => !is_array($s) || array_any($s, fn($o) => !is_scalar($o)))) { + if (array_any($value, fn (mixed $s) => !is_array($s) || array_any($s, fn (mixed $o) => !is_scalar($o)))) { throw $exception; } diff --git a/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php b/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php index cb92234..fa2baae 100644 --- a/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php +++ b/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php @@ -47,7 +47,7 @@ public function transform($value): array } /** - * @param mixed $value + * @param array|null $value */ #[\Override] public function reverseTransform($value): CronExpression @@ -68,7 +68,7 @@ public function reverseTransform($value): CronExpression throw $exception; } - if (!array_all($value, fn($s) => is_string($s))) { + if (!array_all($value, fn (mixed $s) => is_string($s))) { throw $exception; } From af5fffeab36114d1839deda00b2d441a8213f7f3 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 3 Nov 2025 12:31:16 +0100 Subject: [PATCH 4/5] use psalm-pure functions --- .../CronExpressionToPartsTransformer.php | 17 +++++++++++++++-- .../CronExpressionToStringPartsTransformer.php | 14 ++++++++++++-- 2 files changed, 27 insertions(+), 4 deletions(-) diff --git a/src/Form/DataTransformer/CronExpressionToPartsTransformer.php b/src/Form/DataTransformer/CronExpressionToPartsTransformer.php index ea6286c..82731cb 100644 --- a/src/Form/DataTransformer/CronExpressionToPartsTransformer.php +++ b/src/Form/DataTransformer/CronExpressionToPartsTransformer.php @@ -47,7 +47,7 @@ public function transform($value): array } /** - * @param array>|null $value + * @param mixed $value */ #[\Override] public function reverseTransform($value): CronExpression @@ -68,7 +68,7 @@ public function reverseTransform($value): CronExpression throw $exception; } - if (array_any($value, fn (mixed $s) => !is_array($s) || array_any($s, fn (mixed $o) => !is_scalar($o)))) { + if (!self::allArrayScalar($value)) { throw $exception; } @@ -87,6 +87,19 @@ public function reverseTransform($value): CronExpression } } + /** + * @psalm-pure + * + * @psalm-assert array> $value + */ + private static function allArrayScalar(array $value): bool + { + return array_all($value, fn (mixed $s) => is_array($s) && array_all($s, fn (mixed $o) => is_scalar($o))); + } + + /** + * @param array $cronArray + */ private function convertCronParts(array $cronArray): string { if ([] === $cronArray) { diff --git a/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php b/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php index fa2baae..1ed0963 100644 --- a/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php +++ b/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php @@ -47,7 +47,7 @@ public function transform($value): array } /** - * @param array|null $value + * @param mixed $value */ #[\Override] public function reverseTransform($value): CronExpression @@ -68,7 +68,7 @@ public function reverseTransform($value): CronExpression throw $exception; } - if (!array_all($value, fn (mixed $s) => is_string($s))) { + if (!self::allString($value)) { throw $exception; } @@ -86,4 +86,14 @@ public function reverseTransform($value): CronExpression return $cronExpression; } + + /** + * @psalm-pure + * + * @psalm-assert iterable $value + */ + private static function allString(array $value): bool + { + return array_all($value, fn (mixed $s) => is_string($s)); + } } From 00033a2c84981d74f5d4296cb1b2f9375ee7f5bd Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Mon, 3 Nov 2025 12:33:41 +0100 Subject: [PATCH 5/5] they are unpure --- src/Form/DataTransformer/CronExpressionToPartsTransformer.php | 2 -- .../DataTransformer/CronExpressionToStringPartsTransformer.php | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/Form/DataTransformer/CronExpressionToPartsTransformer.php b/src/Form/DataTransformer/CronExpressionToPartsTransformer.php index 82731cb..9a87d29 100644 --- a/src/Form/DataTransformer/CronExpressionToPartsTransformer.php +++ b/src/Form/DataTransformer/CronExpressionToPartsTransformer.php @@ -88,8 +88,6 @@ public function reverseTransform($value): CronExpression } /** - * @psalm-pure - * * @psalm-assert array> $value */ private static function allArrayScalar(array $value): bool diff --git a/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php b/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php index 1ed0963..20605fe 100644 --- a/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php +++ b/src/Form/DataTransformer/CronExpressionToStringPartsTransformer.php @@ -88,8 +88,6 @@ public function reverseTransform($value): CronExpression } /** - * @psalm-pure - * * @psalm-assert iterable $value */ private static function allString(array $value): bool