diff --git a/.gitattributes b/.gitattributes index 6ad756877..532b148b6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -10,6 +10,7 @@ /.gitignore export-ignore /.markdownlint.yaml export-ignore /.markdownlint-cli2.yaml export-ignore +/composer.lock export-ignore /composer-dependency-analyser.php export-ignore /composer-require-checker.json export-ignore /docker-compose.yaml export-ignore @@ -20,6 +21,7 @@ /package-lock.json export-ignore /phpcs.xml export-ignore /phpstan.neon export-ignore +/phpstan-larastan.neon export-ignore /phpstan-baseline.neon export-ignore /phpstan-baseline-well-known.neon export-ignore /phpunit.xml export-ignore diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7137c2841..1fee7d8fe 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,6 +35,9 @@ jobs: # (because will install whole "laravel/framework") composer remove --no-interaction --no-progress --ansi --no-update "orchestra/testbench" composer remove --no-interaction --no-progress --ansi --no-update --dev "orchestra/testbench" + + # (because it used only to run phpstan) + composer remove --no-interaction --no-progress --ansi --no-update --dev "phpstan/phpstan" - name: Install dependencies uses: ramsey/composer-install@v3 @@ -162,10 +165,6 @@ jobs: uses: actions/checkout@v4 - name: Install PHP uses: ./.github/actions/php - - name: Install phpstan - uses: ./.github/actions/tool - with: - tool: phpstan - name: Execute run: | composer run-script phpstan -- --error-format=checkstyle | cs2pr diff --git a/composer-dependency-analyser.php b/composer-dependency-analyser.php index 80bb103eb..980ab2191 100644 --- a/composer-dependency-analyser.php +++ b/composer-dependency-analyser.php @@ -29,7 +29,13 @@ $path = Path::realpath(getopt('', ['composer-json:'])['composer-json'] ?? 'composer.json'); $root = Path::realpath(dirname(__FILE__).'/composer.json') === $path; -if (!$root) { +if ($root) { + $config + ->ignoreErrorsOnPackage('phpstan/phpstan-mockery', [ErrorType::UNUSED_DEPENDENCY]) + ->ignoreErrorsOnPackage('phpstan/phpstan-phpunit', [ErrorType::UNUSED_DEPENDENCY]) + ->ignoreErrorsOnPackage('phpstan/phpstan-strict-rules', [ErrorType::UNUSED_DEPENDENCY]) + ->ignoreErrorsOnPackage('spaze/phpstan-disallowed-calls', [ErrorType::UNUSED_DEPENDENCY]); +} else { $config->disableReportingUnmatchedIgnores(); } diff --git a/composer.json b/composer.json index fe4ba4578..eeb9713a6 100644 --- a/composer.json +++ b/composer.json @@ -61,14 +61,17 @@ "illuminate/testing": "^10.34.0|^11.0.0", "illuminate/translation": "^10.34.0|^11.0.0", "illuminate/validation": "^10.34.0|^11.0.0", + "larastan/larastan": "^2.8.1", "league/commonmark": "^2.5.1", "league/config": "^1.1.1", "mockery/mockery": "^1.6.5", + "nette/neon": "^3.4", "nikic/php-parser": "^5.0", "nuwave/lighthouse": "^6.5.0", "opis/json-schema": "^2.3.0", "phpdocumentor/type-resolver": "^1.7", "phpstan/phpdoc-parser": "^1.25", + "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^10.1.0|^11.0.0", "psr/http-message": "^1.0.0|^2.0.0", "sebastian/comparator": "^5.0|^6.0.0", @@ -85,6 +88,7 @@ "symfony/property-info": "^6.3.9|^7.0.0", "symfony/psr-http-message-bridge": "^2.0.0|^6.4.0|^7.0.0", "symfony/serializer": "^6.4.0|^7.0.0", + "symfony/var-dumper": "^6.3.0|^7.0.0", "webonyx/graphql-php": "^15.4.0" }, "require-dev": { @@ -95,7 +99,12 @@ "illuminate/cache": "^10.34.0|^11.0.0", "illuminate/config": "^10.34.0|^11.0.0", "laravel/scout": "^9.8.0|^10.0.0", - "orchestra/testbench": "^8.0.0|^9.0.0" + "orchestra/testbench": "^8.0.0|^9.0.0", + "phpstan/phpstan": "1.12.5", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpstan/phpstan-strict-rules": "^1.5", + "spaze/phpstan-disallowed-calls": "^3.0" }, "autoload": { "files": [ @@ -104,6 +113,7 @@ ], "psr-4": { "LastDragon_ru\\LaraASP\\Core\\": "packages/core/src/", + "LastDragon_ru\\LaraASP\\Dev\\": "packages/dev/src/", "LastDragon_ru\\LaraASP\\Documentator\\": "packages/documentator/src/", "LastDragon_ru\\LaraASP\\Eloquent\\": "packages/eloquent/src/", "LastDragon_ru\\LaraASP\\Formatter\\": "packages/formatter/src/", @@ -118,6 +128,7 @@ "autoload-dev": { "exclude-from-classmap": [ "packages/core/docs/", + "packages/dev/docs/", "packages/documentator/docs/", "packages/eloquent/docs/", "packages/formatter/docs/", @@ -130,6 +141,7 @@ ], "psr-4": { "LastDragon_ru\\LaraASP\\Core\\Docs\\": "packages/core/docs", + "LastDragon_ru\\LaraASP\\Dev\\Docs\\": "packages/dev/docs", "LastDragon_ru\\LaraASP\\Documentator\\Docs\\": "packages/documentator/docs", "LastDragon_ru\\LaraASP\\Eloquent\\Docs\\": "packages/eloquent/docs", "LastDragon_ru\\LaraASP\\Formatter\\Docs\\": "packages/formatter/docs", @@ -164,6 +176,7 @@ "laravel": { "providers": [ "LastDragon_ru\\LaraASP\\Core\\Provider", + "LastDragon_ru\\LaraASP\\Dev\\Provider", "LastDragon_ru\\LaraASP\\Documentator\\Provider", "LastDragon_ru\\LaraASP\\Eloquent\\Provider", "LastDragon_ru\\LaraASP\\Formatter\\Provider", @@ -175,6 +188,15 @@ } }, "scripts": { + "post-install-cmd": [ + "composer run-script dump:larastan" + ], + "post-update-cmd": [ + "composer run-script dump:larastan" + ], + "dump:larastan": [ + "LastDragon_ru\\LaraASP\\Dev\\PhpStan\\Larastan\\Extension::dump" + ], "validate:commit": [ "@phpstan", "@phpunit", @@ -192,7 +214,7 @@ "jq --indent 2 '.' composer.json > composer.tmp && mv composer.tmp composer.json" ], "phpstan": [ - "./vendor-bin/phpstan/vendor/bin/phpstan analyse -v" + "./vendor/bin/phpstan analyse -v" ], "phpunit": [ "./vendor/bin/phpunit" @@ -237,8 +259,8 @@ }, "replace": { "lastdragon-ru/lara-asp-core": "self.version", - "lastdragon-ru/lara-asp-documentator": "self.version", "lastdragon-ru/lara-asp-dev": "self.version", + "lastdragon-ru/lara-asp-documentator": "self.version", "lastdragon-ru/lara-asp-eloquent": "self.version", "lastdragon-ru/lara-asp-formatter": "self.version", "lastdragon-ru/lara-asp-graphql": "self.version", diff --git a/monorepo-builder.php b/monorepo-builder.php index 06a64dab2..3d4986e99 100644 --- a/monorepo-builder.php +++ b/monorepo-builder.php @@ -4,5 +4,4 @@ return static function (MBConfig $config): void { $config->packageDirectories([__DIR__.'/packages']); - $config->packageDirectoriesExcludes(['dev', 'src']); }; diff --git a/packages/core/src/Helpers/Translator.php b/packages/core/src/Helpers/Translator.php index 332f7d06b..3cbd57e97 100644 --- a/packages/core/src/Helpers/Translator.php +++ b/packages/core/src/Helpers/Translator.php @@ -74,7 +74,7 @@ protected function translate(array|string $variants, Closure $callback): string $translated = array_splice($variants, -1); $translated = (string) end($translated); - if ($variants) { + if ($variants !== []) { foreach ($variants as $variant) { $result = $callback($variant); diff --git a/packages/core/src/Utils/ConfigMerger.php b/packages/core/src/Utils/ConfigMerger.php index a7404d0f7..ef4543db1 100644 --- a/packages/core/src/Utils/ConfigMerger.php +++ b/packages/core/src/Utils/ConfigMerger.php @@ -91,7 +91,7 @@ protected function process(array &$target, array $config, string $path): void { // Merge foreach ($config as $key => &$value) { // Current path - $current = $path ? "{$path}.{$key}" : "{$key}"; + $current = $path !== '' ? "{$path}.{$key}" : "{$key}"; // Only scalars/nulls and arrays of them allowed if (!is_scalar($value) && !is_null($value) && !is_array($value)) { @@ -106,11 +106,11 @@ protected function process(array &$target, array $config, string $path): void { throw new InvalidArgumentException('Array cannot be replaced by scalar/null value.'); } - if ($target[$key][static::Replace] ?? false) { + if (isset($target[$key][static::Replace]) && $target[$key][static::Replace] === true) { $target[$key] = [static::Replace => true] + (array) $value; } elseif (is_string(key($target[$key]))) { $this->process($target[$key], (array) $value, $current); - } elseif (!$target[$key]) { + } elseif ($target[$key] === []) { $target[$key] = (array) $value; } else { $target[$key] = array_values((array) $value); diff --git a/packages/core/src/Utils/Scheduler.php b/packages/core/src/Utils/Scheduler.php index 3c803fbc7..bd61cac3e 100644 --- a/packages/core/src/Utils/Scheduler.php +++ b/packages/core/src/Utils/Scheduler.php @@ -39,7 +39,7 @@ public function register(Schedule $schedule, string $class): bool { $settings = $this->getSettings($class, $instance); // Enabled? - if (!($settings['enabled'] ?? true) || !$settings['cron']) { + if (!($settings['enabled'] ?? true) || $settings['cron'] === '') { return false; } diff --git a/packages/dev/composer.json b/packages/dev/composer.json index 63a69781b..955318e9a 100644 --- a/packages/dev/composer.json +++ b/packages/dev/composer.json @@ -40,7 +40,7 @@ "extra": { "laravel": { "providers": [ - "LastDragon_ru\\LaraASP\\Dev\\App\\Provider" + "LastDragon_ru\\LaraASP\\Dev\\Provider" ] } }, diff --git a/packages/dev/docs/.gitignore b/packages/dev/docs/.gitignore new file mode 100644 index 000000000..d6b7ef32c --- /dev/null +++ b/packages/dev/docs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/packages/dev/src/App/Dumper.php b/packages/dev/src/App/Dumper.php index fba40cd44..288172ca8 100644 --- a/packages/dev/src/App/Dumper.php +++ b/packages/dev/src/App/Dumper.php @@ -23,7 +23,7 @@ class Dumper { public function __construct() { $this->cloner = new VarCloner([ '*' => static function (object $obj, array $a, Stub $stub, bool $isNested, int $filter = 0): array { - return $filter ? Caster::filter($a, $filter) : $a; + return $filter > 0 ? Caster::filter($a, $filter) : $a; }, ]); $this->dumper = new CliDumper( @@ -50,7 +50,7 @@ public function dump(mixed $value, ?string $expression): void { public function raw(Stringable|string $value, ?string $expression, string $type): void { $dump = trim((string) $value); - $dump = ($expression ? "The `{$expression}` is:\n\n" : '')."```{$type}\n{$dump}\n```\n"; + $dump = ($expression !== null ? "The `{$expression}` is:\n\n" : '')."```{$type}\n{$dump}\n```\n"; $this->dumps[] = $dump; } } diff --git a/packages/dev/src/App/Example.php b/packages/dev/src/App/Example.php index e51b937ef..941dcf50e 100644 --- a/packages/dev/src/App/Example.php +++ b/packages/dev/src/App/Example.php @@ -8,6 +8,7 @@ use LastDragon_ru\LaraASP\Core\Utils\ConfigMerger; use LastDragon_ru\LaraASP\Documentator\Processor\FileSystem\File; use LastDragon_ru\LaraASP\Documentator\Processor\Tasks\Preprocess\Instructions\IncludeExample\Contracts\Runner; +use LastDragon_ru\LaraASP\Documentator\Utils\Text; use LogicException; use Override; use PhpParser\ErrorHandler\Collecting; @@ -25,7 +26,6 @@ use function debug_backtrace; use function end; use function implode; -use function preg_split; use function sprintf; use function str_contains; use function trim; @@ -44,7 +44,7 @@ public function __construct( } protected static function getDumper(): Dumper { - if (!self::$dumper) { + if (self::$dumper === null) { throw new LogicException( sprintf( 'The `%s` can be called only within example context.', @@ -79,7 +79,7 @@ public function __invoke(File $file): ?string { $dumps = self::$dumper->getDumps(); $output = implode("\n\n", array_map(trim(...), $dumps)); - if ($output) { + if ($output !== '') { $result = "{$output}"; } } finally { @@ -100,7 +100,7 @@ public static function raw(Stringable|string $value, string $type, ?string $expr } protected static function app(): Application { - if (!self::$app) { + if (self::$app === null) { throw new LogicException( sprintf( 'The `%s` can be called only within example context.', @@ -136,7 +136,7 @@ private static function getExpression(string $method): ?string { } // Extract first arg - $lines = preg_split('/\R/u', self::$file?->getContent() ?? '') ?: []; + $lines = Text::getLines(self::$file?->getContent() ?? ''); $code = implode("\n", array_slice($lines, $context['line'] - 1)); $parser = (new ParserFactory())->createForNewestSupportedVersion(); $stmts = (array) $parser->parse("getNativeReflection()->getShortName(); $filename = pathinfo((string) $reflection->getFileName(), PATHINFO_FILENAME); - $mustBe = $filename + $mustBe = $filename !== '' && str_ends_with($filename, 'Test') && str_starts_with($classname, "{$filename}_"); diff --git a/packages/dev/src/PhpStan/Larastan/Extension.php b/packages/dev/src/PhpStan/Larastan/Extension.php index 0b111018f..14755decc 100644 --- a/packages/dev/src/PhpStan/Larastan/Extension.php +++ b/packages/dev/src/PhpStan/Larastan/Extension.php @@ -14,6 +14,7 @@ use function array_filter; use function array_keys; use function array_values; +use function dirname; use function file_get_contents; use function file_put_contents; use function getcwd; @@ -27,13 +28,13 @@ class Extension { /** * Removes unwanted/conflicting services from `larastan/extension.neon` and - * dump remaining into `larastan.neon` (that should be used instead of the - * original file). + * dump remaining into `phpstan-larastan.neon` (that should be used instead + * of the original file). */ public static function dump(): void { // Prepare $origin = Path::join(self::getLarastanPath(), 'extension.neon'); - $target = Path::getPath(self::getRootPath(), 'larastan.neon'); + $target = Path::getPath(self::getRootPath(), 'phpstan-larastan.neon'); // Load $extension = Neon::decode((string) file_get_contents($origin)); @@ -68,7 +69,7 @@ private static function updateBootstrapFiles(string $path, array $extension): ar // Update $source = self::getLarastanPath(); $files = (array) ($extension['parameters']['bootstrapFiles'] ?? []); - $root = Path::getDirname($path); + $root = dirname($path); foreach ($files as $index => $file) { if (!is_string($file)) { @@ -118,7 +119,7 @@ private static function updateServices(string $path, array $extension): array { // Unused? $unused = array_keys(array_filter($disabled)); - if ($unused) { + if ($unused !== []) { throw new Exception( sprintf( 'The following services is unknown: `%s`', diff --git a/packages/dev/src/App/Provider.php b/packages/dev/src/Provider.php similarity index 83% rename from packages/dev/src/App/Provider.php rename to packages/dev/src/Provider.php index aac56f64a..88dd67c16 100644 --- a/packages/dev/src/App/Provider.php +++ b/packages/dev/src/Provider.php @@ -1,8 +1,9 @@ factory)(); foreach ($processor->tasks() as $index => $task) { - $description = '_No description provided_.'; - $description = trim($this->getProcessedHelpTaskDescription($task, $level + 1)) ?: $description; + $description = trim($this->getProcessedHelpTaskDescription($task, $level + 1)); + $description = $description !== '' ? $description : $default; $extensions = '`'.implode('`, `', $task::getExtensions()).'`'; - $title = trim((string) $this->getProcessedHelpTaskTitle($task)) ?: "Task №{$index}"; + $title = trim((string) $this->getProcessedHelpTaskTitle($task)); + $title = $title !== '' ? $title : "Task №{$index}"; $help .= <<getDocBlock($class, null, $level + 1); - $target = $this->getProcessedHelpTaskPreprocessInstructionTarget($instruction, 'target', 2); - $target = trim($target ?: '_No description provided_.'); + $target = trim((string) $this->getProcessedHelpTaskPreprocessInstructionTarget($instruction, 'target', 2)); + $target = $target !== '' ? $target : '_No description provided_.'; $params = $this->getProcessedHelpTaskPreprocessParameters($instruction, 'target', 2); if ($params !== null) { @@ -274,13 +276,13 @@ protected function getProcessedHelpTaskPreprocessParameters( } // Add - $parameters[trim($definition)] = trim( - $this->getDocBlock($property, $padding) ?: '_No description provided_.', - ); + $description = trim($this->getDocBlock($property, $padding)); + $description = $description !== '' ? $description : '_No description provided_.'; + $parameters[trim($definition)] = $description; } // Empty? - if (!$parameters) { + if ($parameters === []) { return null; } @@ -307,7 +309,7 @@ private function getDocBlock( ?int $padding = null, ?int $level = null, ): string { - $help = (new PhpDoc($object->getDocComment() ?: null))->getText(); + $help = (new PhpDoc((string) $object->getDocComment()))->getText(); if ($level !== null) { $level = max(1, min(6, $level)); diff --git a/packages/documentator/src/Commands/Requirements.php b/packages/documentator/src/Commands/Requirements.php index d4f66af8f..aeb4a7a16 100644 --- a/packages/documentator/src/Commands/Requirements.php +++ b/packages/documentator/src/Commands/Requirements.php @@ -116,7 +116,7 @@ public function __invoke( // Collect requirements $storage = new Storage($serializer, $cwd); $metadata = $storage->load(); - $packages = $metadata->require ?: [ + $packages = $metadata->require !== [] ? $metadata->require : [ 'php' => 'PHP', 'laravel/framework' => 'Laravel', ]; @@ -137,7 +137,7 @@ public function __invoke( // Load $package = $this->getPackageInfo($factory, $git, $tag, $cwd); - if (!$package) { + if ($package === null) { break; } @@ -161,7 +161,8 @@ public function __invoke( // Unreleased if ( - $metadata->version + $metadata->version !== null + && $metadata->version !== '' && !isset($metadata->requirements[$metadata->version]) && isset($metadata->requirements[self::HEAD]) ) { @@ -245,7 +246,7 @@ protected function getPackageRequirements(array $require, array $merge, Composer $match = false; foreach ($regexps as $regexp => $key) { - if (preg_match($regexp, $requirement)) { + if (preg_match($regexp, $requirement) > 0) { $requirement = $key; $match = true; break; @@ -263,7 +264,9 @@ protected function getPackageRequirements(array $require, array $merge, Composer // Add $required = explode('|', Cast::toString($constraint)); - $required = array_values(array_filter(array_map(trim(...), $required))); + $required = array_map(trim(...), $required); + $required = array_filter($required, static fn ($string) => $string !== ''); + $required = array_values($required); $requirement = Cast::toString($requirement); $requirements[$requirement] = array_merge($requirements[$requirement] ?? [], $required); $requirements[$requirement] = array_values(array_unique($requirements[$requirement])); @@ -336,7 +339,7 @@ protected function getMergedVersions(array $versions, array $merge): array { } } - if ($current) { + if ($current !== []) { $ranges[] = $current; } diff --git a/packages/documentator/src/Markdown/Document.php b/packages/documentator/src/Markdown/Document.php index 12026ff95..4eaf84ffb 100644 --- a/packages/documentator/src/Markdown/Document.php +++ b/packages/documentator/src/Markdown/Document.php @@ -65,7 +65,7 @@ public function getTitle(): ?string { $this->title = $title; } - return $this->title ?: null; + return $this->title !== '' ? $this->title : null; } /** @@ -79,7 +79,7 @@ public function getSummary(): ?string { $this->summary = $summary; } - return $this->summary ?: null; + return $this->summary !== '' ? $this->summary : null; } /** @@ -92,7 +92,8 @@ public function getBody(): ?string { $body = $start !== null && is_int($end) ? $this->getText(new Location($start + 1, $end)) : null; - $body = trim((string) $body) ?: null; + $body = trim((string) $body); + $body = $body !== '' ? $body : null; return $body; } @@ -102,7 +103,7 @@ public function getPath(): ?string { } public function setPath(?string $path): static { - $this->path = $path ? Path::normalize($path) : null; + $this->path = $path !== null ? Path::normalize($path) : null; return $this; } @@ -118,12 +119,7 @@ public function mutate(Mutation ...$mutations): static { $document = clone $this; foreach ($mutations as $mutation) { - $changes = $mutation($document, $document->getNode()); - - if (!$changes) { - continue; - } - + $changes = $mutation($document, $document->getNode()); $content = trim((string) $document->getEditor()->mutate($changes))."\n"; $document = $document->setContent($content); } @@ -222,7 +218,7 @@ private function getBlockText(?AbstractBlock $node): ?string { $location = $node?->getStartLine() !== null && $node->getEndLine() !== null ? new Location($node->getStartLine(), $node->getEndLine()) : null; - $text = $location + $text = $location !== null ? $this->getText($location) : null; diff --git a/packages/documentator/src/Markdown/Editor.php b/packages/documentator/src/Markdown/Editor.php index 227e301f8..4278232c5 100644 --- a/packages/documentator/src/Markdown/Editor.php +++ b/packages/documentator/src/Markdown/Editor.php @@ -104,7 +104,7 @@ public function mutate(iterable $changes): static { $line = $lines[$number] ?? ''; $count = count($text); $prefix = mb_substr($line, 0, $coordinate->offset); - $suffix = $coordinate->length + $suffix = $coordinate->length !== null ? mb_substr($line, $coordinate->offset + $coordinate->length) : ''; $padding = mb_substr($line, 0, $coordinate->padding); @@ -123,7 +123,7 @@ public function mutate(iterable $changes): static { array_splice($lines, $number, 1, $insert); } elseif ($count === 1) { $lines[$number] = rtrim($prefix.$text[0].$suffix); - } elseif (($prefix && $prefix !== $padding) || $suffix) { + } elseif (($prefix !== '' && $prefix !== $padding) || $suffix !== '') { $lines[$number] = rtrim($prefix.$suffix); } else { unset($lines[$number]); @@ -152,7 +152,7 @@ protected function prepare(iterable $changes): array { $coordinates[] = $coordinate; } - if ($coordinates) { + if ($coordinates !== []) { $prepared[] = [$coordinates, $text]; } } @@ -169,7 +169,12 @@ protected function expand(array $changes): array { $expanded = []; $append = []; $sort = static function (Coordinate $a, Coordinate $b): int { - return $a->line <=> $b->line ?: $a->offset <=> $b->offset; + $result = $a->line <=> $b->line; + $result = $result === 0 + ? $a->offset <=> $b->offset + : $result; + + return $result; }; foreach ($changes as [$coordinates, $text]) { @@ -212,12 +217,12 @@ protected function removeOverlaps(array $changes): array { $lines[$coordinate->line][] = $coordinate; if ($this->isOverlapped($used, $coordinate)) { - $lines = null; + $lines = []; break; } } - if ($lines) { + if ($lines !== []) { foreach ($lines as $line => $coords) { $used[$line] = array_merge($used[$line] ?? [], $coords); } diff --git a/packages/documentator/src/Markdown/Mutations/FootnotesPrefix.php b/packages/documentator/src/Markdown/Mutations/FootnotesPrefix.php index cc03c98df..97cc15259 100644 --- a/packages/documentator/src/Markdown/Mutations/FootnotesPrefix.php +++ b/packages/documentator/src/Markdown/Mutations/FootnotesPrefix.php @@ -41,9 +41,9 @@ public function __invoke(Document $document, DocumentNode $node): iterable { // Replace $label = $this->getLabel($document, $child); - $location = $label ? $this->getLabelLocation($child, $label) : null; + $location = $label !== null ? $this->getLabelLocation($child, $label) : null; - if ($location) { + if ($location !== null) { yield [$location, "{$this->prefix}-{$label}"]; } } @@ -56,8 +56,8 @@ private function getLabel(Document $document, Footnote|FootnoteRef $footnote): ? if ($footnote instanceof FootnoteRef) { $location = Utils::getLocation($footnote); - $label = $location - ? (mb_substr($document->getText($location) ?? '', 2, -1) ?: '') + $label = $location !== null + ? mb_substr($document->getText($location) ?? '', 2, -1) : null; } diff --git a/packages/documentator/src/Markdown/Mutations/FootnotesRemove.php b/packages/documentator/src/Markdown/Mutations/FootnotesRemove.php index ca4b76276..55cf4b63a 100644 --- a/packages/documentator/src/Markdown/Mutations/FootnotesRemove.php +++ b/packages/documentator/src/Markdown/Mutations/FootnotesRemove.php @@ -34,7 +34,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { default => null, }; - if ($location) { + if ($location !== null) { yield [$location, null]; } } diff --git a/packages/documentator/src/Markdown/Mutations/GeneratedUnwrap.php b/packages/documentator/src/Markdown/Mutations/GeneratedUnwrap.php index 869f7dd67..3d167d9a2 100644 --- a/packages/documentator/src/Markdown/Mutations/GeneratedUnwrap.php +++ b/packages/documentator/src/Markdown/Mutations/GeneratedUnwrap.php @@ -38,14 +38,14 @@ public function __invoke(Document $document, DocumentNode $node): iterable { // Start? $startMarker = Data::get($child, StartMarkerLocation::class); - if ($startMarker) { + if ($startMarker !== null) { yield [$startMarker, null]; } // End $endMarker = Data::get($child, EndMarkerLocation::class); - if ($endMarker) { + if ($endMarker !== null) { yield [$endMarker, null]; } } diff --git a/packages/documentator/src/Markdown/Mutations/HeadingsLevel.php b/packages/documentator/src/Markdown/Mutations/HeadingsLevel.php index 3a2526326..ac985a8c6 100644 --- a/packages/documentator/src/Markdown/Mutations/HeadingsLevel.php +++ b/packages/documentator/src/Markdown/Mutations/HeadingsLevel.php @@ -74,7 +74,7 @@ private function getHeadings(Document $document, DocumentNode $node, int &$highe // Location? $location = Utils::getLocation($child); - if (!$location) { + if ($location === null) { continue; } diff --git a/packages/documentator/src/Markdown/Mutations/Move.php b/packages/documentator/src/Markdown/Mutations/Move.php index 0b355cf04..dc256ffc2 100644 --- a/packages/documentator/src/Markdown/Mutations/Move.php +++ b/packages/documentator/src/Markdown/Mutations/Move.php @@ -71,7 +71,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { // Location? $location = Utils::getLocation($resource); - if (!$location) { + if ($location === null) { continue; } @@ -92,7 +92,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { $targetValue = Path::getRelativePath($newDirectory, $targetValue); $targetWrap = mb_substr(ltrim(ltrim($origin, '(')), 0, 1) === '<'; $target = Utils::getLinkTarget($resource, $targetValue, $targetWrap); - $text = $title ? "({$target} {$title})" : "({$target})"; + $text = $title !== '' ? "({$target} {$title})" : "({$target})"; } } elseif ($resource instanceof Reference) { $origin = trim((string) $document->getText($location)); diff --git a/packages/documentator/src/Markdown/Mutations/ReferencesInline.php b/packages/documentator/src/Markdown/Mutations/ReferencesInline.php index a260b518a..4b4015ffc 100644 --- a/packages/documentator/src/Markdown/Mutations/ReferencesInline.php +++ b/packages/documentator/src/Markdown/Mutations/ReferencesInline.php @@ -39,7 +39,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { // Location? $location = Utils::getLocation($reference); - if (!$location) { + if ($location === null) { continue; } @@ -53,7 +53,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { if ($location !== null) { $title = Utils::getLinkTitle($reference, (string) $reference->getTitle()); $target = Utils::getLinkTarget($reference, rawurldecode($reference->getUrl())); - $text = $title ? "({$target} {$title})" : "({$target})"; + $text = $title !== '' ? "({$target} {$title})" : "({$target})"; } } elseif ($reference instanceof Reference) { $text = ''; @@ -62,7 +62,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { } if ($location !== null && $text !== null) { - yield [$location, $text ?: null]; + yield [$location, $text !== '' ? $text : null]; } } } diff --git a/packages/documentator/src/Markdown/Mutations/ReferencesPrefix.php b/packages/documentator/src/Markdown/Mutations/ReferencesPrefix.php index 260c83041..8aad9b340 100644 --- a/packages/documentator/src/Markdown/Mutations/ReferencesPrefix.php +++ b/packages/documentator/src/Markdown/Mutations/ReferencesPrefix.php @@ -42,7 +42,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { // Location? $location = Utils::getLocation($reference); - if (!$location) { + if ($location === null) { continue; } @@ -67,7 +67,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { break; } - if ($coordinate) { + if ($coordinate !== null) { $startLine = $coordinate->line; $endLine = $startLine; $offset = $coordinate->offset + 1; diff --git a/packages/documentator/src/Markdown/Mutations/SelfLinksRemove.php b/packages/documentator/src/Markdown/Mutations/SelfLinksRemove.php index 45474e5f6..9ba7b61d1 100644 --- a/packages/documentator/src/Markdown/Mutations/SelfLinksRemove.php +++ b/packages/documentator/src/Markdown/Mutations/SelfLinksRemove.php @@ -37,7 +37,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { $location = Utils::getLocation($link); $offset = Data::get($link, Offset::class); - if (!$location || !$offset) { + if ($location === null || $offset === null) { continue; } diff --git a/packages/documentator/src/Markdown/Nodes/Generated/ParserContinue.php b/packages/documentator/src/Markdown/Nodes/Generated/ParserContinue.php index 0a81224ee..971f3e3fa 100644 --- a/packages/documentator/src/Markdown/Nodes/Generated/ParserContinue.php +++ b/packages/documentator/src/Markdown/Nodes/Generated/ParserContinue.php @@ -81,14 +81,14 @@ public function closeBlock(): void { // Start $start = $this->getStartMarkerLocation(); - if ($start) { + if ($start !== null) { Data::set($this->block, new StartMarkerLocation($start)); } // End $end = $this->getEndMarkerLocation(); - if ($end) { + if ($end !== null) { Data::set($this->block, new EndMarkerLocation($end)); } } diff --git a/packages/documentator/src/Markdown/Nodes/Generated/ParserStart.php b/packages/documentator/src/Markdown/Nodes/Generated/ParserStart.php index c52a8ba30..a9af2ffbc 100644 --- a/packages/documentator/src/Markdown/Nodes/Generated/ParserStart.php +++ b/packages/documentator/src/Markdown/Nodes/Generated/ParserStart.php @@ -32,7 +32,7 @@ public function tryStart(Cursor $cursor, MarkdownParserStateInterface $parserSta return BlockStart::none(); } - if (Utils::getParent($parserState->getActiveBlockParser()->getBlock(), Block::class)) { + if (Utils::getParent($parserState->getActiveBlockParser()->getBlock(), Block::class) !== null) { return BlockStart::none(); } @@ -40,7 +40,11 @@ public function tryStart(Cursor $cursor, MarkdownParserStateInterface $parserSta $padding = $cursor->getPosition(); $matches = []; - if (!preg_match('!^\[//]: # \(start: ([^)]+)\)($|\R)!u', $cursor->getRemainder(), $matches)) { + if ( + !(preg_match('!^\[//]: # \(start: ([^)]+)\)($|\R)!u', $cursor->getRemainder(), $matches) > 0) + || !isset($matches[0]) + || !isset($matches[1]) + ) { return BlockStart::none(); } diff --git a/packages/documentator/src/Markdown/Nodes/Locator/Listener.php b/packages/documentator/src/Markdown/Nodes/Locator/Listener.php index b0444191e..26ee7622c 100644 --- a/packages/documentator/src/Markdown/Nodes/Locator/Listener.php +++ b/packages/documentator/src/Markdown/Nodes/Locator/Listener.php @@ -87,7 +87,7 @@ private function fixTableSection(Document $document, TableSection $section): voi $start = null; $end = null; - if ($previous) { + if ($previous !== null) { $start = $previous->getEndLine(); if ($start !== null) { @@ -136,12 +136,9 @@ private function fixTableRow(Document $document, TableRow $row): void { } // Yep - $cells = preg_split('/(?toArray($row->children()); diff --git a/packages/documentator/src/Markdown/Nodes/Locator/Parser.php b/packages/documentator/src/Markdown/Nodes/Locator/Parser.php index 63adf6707..511cc2cc3 100644 --- a/packages/documentator/src/Markdown/Nodes/Locator/Parser.php +++ b/packages/documentator/src/Markdown/Nodes/Locator/Parser.php @@ -90,7 +90,7 @@ public function parse(InlineParserContext $inlineContext): bool { $container = $inlineContext->getContainer(); $child = $container->lastChild(); - if (!$child) { + if ($child === null) { return true; } @@ -113,9 +113,9 @@ public function parse(InlineParserContext $inlineContext): bool { $inlineLinesCount = count($inlineLines) - 1; $startLine = $startLine + $beforeLinesCount; $endLine = $startLine + $inlineLinesCount; - $start = (end($beforeLines) ?: '').(reset($inlineLines) ?: ''); + $start = ((string) end($beforeLines)).((string) reset($inlineLines)); - if ($beforeLinesCount) { + if ($beforeLinesCount > 0) { $correction = (mb_strlen(implode("\n", array_slice($beforeLines, 0, -1))) + 1); $offset -= $correction; $origin -= $correction; diff --git a/packages/documentator/src/Markdown/Nodes/Reference/Parser.php b/packages/documentator/src/Markdown/Nodes/Reference/Parser.php index dbd1f7551..761f98a32 100644 --- a/packages/documentator/src/Markdown/Nodes/Reference/Parser.php +++ b/packages/documentator/src/Markdown/Nodes/Reference/Parser.php @@ -32,7 +32,7 @@ public function __construct() { public function parse(string $line): bool { // Parse - $this->parser->parse($line ?: "\n"); + $this->parser->parse($line !== '' ? $line : "\n"); // Not a Reference if ($this->hasState($this->parserStateParagraph)) { diff --git a/packages/documentator/src/Markdown/Nodes/Reference/ParserContinue.php b/packages/documentator/src/Markdown/Nodes/Reference/ParserContinue.php index ee9ec0d6e..316056153 100644 --- a/packages/documentator/src/Markdown/Nodes/Reference/ParserContinue.php +++ b/packages/documentator/src/Markdown/Nodes/Reference/ParserContinue.php @@ -78,7 +78,11 @@ public function closeBlock(): void { $this->block->setReference($reference); - if ($reference && $this->referenceMap && !$this->referenceMap->contains($reference->getLabel())) { + if ( + $reference !== null + && $this->referenceMap !== null + && !$this->referenceMap->contains($reference->getLabel()) + ) { $this->referenceMap->add($reference); } diff --git a/packages/documentator/src/Markdown/Nodes/RendererWrapper.php b/packages/documentator/src/Markdown/Nodes/RendererWrapper.php index 5acbe3149..4f1480bb0 100644 --- a/packages/documentator/src/Markdown/Nodes/RendererWrapper.php +++ b/packages/documentator/src/Markdown/Nodes/RendererWrapper.php @@ -104,7 +104,7 @@ protected function location(?Location $location): ?string { $lines[] = '{'.implode(',', [$line->line, $line->offset, $line->length ?? 'null']).'}'; } - return $lines ? '['.implode(',', $lines).']' : null; + return $lines !== [] ? '['.implode(',', $lines).']' : null; } /** diff --git a/packages/documentator/src/Markdown/Utils.php b/packages/documentator/src/Markdown/Utils.php index c41de92ed..ea7965b17 100644 --- a/packages/documentator/src/Markdown/Utils.php +++ b/packages/documentator/src/Markdown/Utils.php @@ -186,7 +186,7 @@ public static function getReference(AbstractWebResource $node): ?ReferenceInterf } public static function getLinkTarget(Node $container, string $target, ?bool $wrap = null): string { - $target = ($wrap ?? preg_match('/\s/u', $target)) + $target = ($wrap ?? preg_match('/\s/u', $target) > 0) ? '<'.strtr($target, ['<' => '\\<', '>' => '\\>']).'>' : UrlEncoder::unescapeAndEncode($target); $target = self::escapeTextInTableCell($container, $target); @@ -195,7 +195,7 @@ public static function getLinkTarget(Node $container, string $target, ?bool $wra } public static function getLinkTitle(Node $container, string $title, ?string $wrapper = null): string { - if (!$title) { + if ($title === '') { return ''; } @@ -269,8 +269,8 @@ public static function isPathRelative(string $path): bool { public static function isPathToSelf(string $path, ?Document $document = null): bool { $name = Path::normalize(basename($document?->getPath() ?? '')); - $path = Path::normalize(parse_url($path, PHP_URL_PATH) ?: ''); - $self = $path === '' || ($name && $path === $name); + $path = Path::normalize((string) parse_url($path, PHP_URL_PATH)); + $self = $path === '' || ($name !== '' && $path === $name); return $self; } diff --git a/packages/documentator/src/Processor/Executor.php b/packages/documentator/src/Processor/Executor.php index 305609d43..2bb63b1b9 100644 --- a/packages/documentator/src/Processor/Executor.php +++ b/packages/documentator/src/Processor/Executor.php @@ -233,7 +233,7 @@ private function isSkipped(File $file): bool { $excluded = false; foreach ($this->exclude as $regexp) { - if (preg_match($regexp, $path)) { + if (preg_match($regexp, $path) > 0) { $excluded = true; break; } diff --git a/packages/documentator/src/Processor/InstanceList.php b/packages/documentator/src/Processor/InstanceList.php index 7d70f325f..dc8f0bae2 100644 --- a/packages/documentator/src/Processor/InstanceList.php +++ b/packages/documentator/src/Processor/InstanceList.php @@ -44,7 +44,7 @@ public function __construct( } public function isEmpty(): bool { - return !$this->map; + return $this->map === []; } /** @@ -121,7 +121,7 @@ public function add(object|string $instance, ?Closure $configurator = null): sta $this->map[$key][] = $class; $this->configurators[$class] = $configurator; - if ($resolved) { + if ($resolved !== null) { $this->instances[$class] = $resolved; } } diff --git a/packages/documentator/src/Processor/Metadata/PhpClassComment.php b/packages/documentator/src/Processor/Metadata/PhpClassComment.php index bd9be892c..fc117553e 100644 --- a/packages/documentator/src/Processor/Metadata/PhpClassComment.php +++ b/packages/documentator/src/Processor/Metadata/PhpClassComment.php @@ -25,7 +25,7 @@ public function __construct( #[Override] public function __invoke(File $file): mixed { $class = $file->getMetadata($this->class); - $comment = $class + $comment = $class !== null ? new class ($class->class, $class->context, new PhpDoc($class->class->getDocComment()?->getText())) { public function __construct( public readonly ClassLike $class, diff --git a/packages/documentator/src/Processor/Metadata/PhpClassMarkdown.php b/packages/documentator/src/Processor/Metadata/PhpClassMarkdown.php index ebdc5f63c..5ac0dee68 100644 --- a/packages/documentator/src/Processor/Metadata/PhpClassMarkdown.php +++ b/packages/documentator/src/Processor/Metadata/PhpClassMarkdown.php @@ -34,7 +34,7 @@ public function __invoke(File $file): mixed { // Comment? $comment = $file->getMetadata($this->comment); - if (!$comment) { + if ($comment === null) { return null; } @@ -57,7 +57,7 @@ static function (string $class) use ($context): string { }, ); - if ($reference) { + if ($reference !== null) { $result = "`{$reference}`"; } diff --git a/packages/documentator/src/Processor/Metadata/PhpDocBlock.php b/packages/documentator/src/Processor/Metadata/PhpDocBlock.php index 9dfcf5f4c..7f1821043 100644 --- a/packages/documentator/src/Processor/Metadata/PhpDocBlock.php +++ b/packages/documentator/src/Processor/Metadata/PhpDocBlock.php @@ -43,19 +43,15 @@ public function __invoke(File $file): mixed { // Class? $class = $file->getMetadata($this->class); - if (!$class) { + if ($class === null) { return null; } - // Parse + // Prepare $content = (new PhpDoc($class->class->getDocComment()?->getText()))->getText(); $content = $this->preprocess($class->context, $content); $content = trim($content); - if (!$content) { - return new Document('', $file->getPath()); - } - // Create return new Document($content, $file->getPath()); } @@ -72,7 +68,7 @@ static function (string $class) use ($context): string { }, ); - if ($reference) { + if ($reference !== null) { $result = "`{$reference}`"; } diff --git a/packages/documentator/src/Processor/Tasks/CodeLinks/Links/Base.php b/packages/documentator/src/Processor/Tasks/CodeLinks/Links/Base.php index 160afe7e9..229879dfb 100644 --- a/packages/documentator/src/Processor/Tasks/CodeLinks/Links/Base.php +++ b/packages/documentator/src/Processor/Tasks/CodeLinks/Links/Base.php @@ -34,7 +34,7 @@ public function getTitle(): ?string { $title = mb_substr($title, $position + 1); } - return $title ?: null; + return $title !== '' ? $title : null; } /** @@ -50,7 +50,7 @@ public function getTarget(Directory $root, File $file, File $source): ?LinkTarge // Class? $comment = $source->getMetadata($this->comment); - if (!$comment) { + if ($comment === null) { return null; } diff --git a/packages/documentator/src/Processor/Tasks/CodeLinks/Links/Factory.php b/packages/documentator/src/Processor/Tasks/CodeLinks/Links/Factory.php index ef1039697..6a85573e7 100644 --- a/packages/documentator/src/Processor/Tasks/CodeLinks/Links/Factory.php +++ b/packages/documentator/src/Processor/Tasks/CodeLinks/Links/Factory.php @@ -42,9 +42,11 @@ public function create(string $string, ?Closure $resolver = null): ?Link { $matches = []; $string = trim($string); - if (preg_match($regexp, $string, $matches, PREG_UNMATCHED_AS_NULL)) { - $class = $matches['class']; - $class = $resolver ? $resolver($class) : $class; + if (preg_match($regexp, $string, $matches, PREG_UNMATCHED_AS_NULL) > 0) { + $class = $matches['class'] ?? null; + $class = $class !== null && $resolver !== null + ? $resolver($class) + : $class; if ($class !== null) { $class = '\\'.ltrim($class, '\\'); diff --git a/packages/documentator/src/Processor/Tasks/CodeLinks/Task.php b/packages/documentator/src/Processor/Tasks/CodeLinks/Task.php index 2e5fd996c..40f87e0dd 100644 --- a/packages/documentator/src/Processor/Tasks/CodeLinks/Task.php +++ b/packages/documentator/src/Processor/Tasks/CodeLinks/Task.php @@ -90,7 +90,7 @@ public function __invoke(Directory $root, File $file): Generator { // Markdown? $document = $file->getMetadata($this->markdown); - if (!$document || $document->isEmpty()) { + if ($document === null || $document->isEmpty()) { return true; } @@ -115,12 +115,12 @@ public function __invoke(Directory $root, File $file): Generator { $path = $root->getPath($path); $source = Cast::toNullable(File::class, yield new Optional(new FileReference($path))); - if ($source) { + if ($source !== null) { break; } } - if (!$source && !$token->deprecated) { + if ($source === null && !$token->deprecated) { $unresolved[] = $token; continue; } @@ -128,10 +128,10 @@ public function __invoke(Directory $root, File $file): Generator { // Target? $target = null; - if ($source) { + if ($source !== null) { $target = $token->link->getTarget($root, $file, $source); - if (!$target && !$token->deprecated) { + if ($target === null && !$token->deprecated) { $unresolved[] = $token; continue; } @@ -142,7 +142,7 @@ public function __invoke(Directory $root, File $file): Generator { } // Unresolved? - if ($unresolved) { + if ($unresolved !== []) { $unresolved = array_map(static fn ($token) => (string) $token->link, $unresolved); sort($unresolved); @@ -153,7 +153,7 @@ public function __invoke(Directory $root, File $file): Generator { // Mutate $changes = $this->getChanges($document, $parsed['blocks'], $resolved); - if ($changes) { + if ($changes !== []) { $file->setContent( (string) $document->mutate(new Changeset($changes)), ); @@ -181,7 +181,7 @@ private function getChanges(Document $document, array $blocks, array $links): ar $refsParentNode = $block; $refsParentLocation = Utils::getLocation($block); - if ($refsParentLocation) { + if ($refsParentLocation !== null) { $changes[] = [$refsParentLocation, null]; } } @@ -193,7 +193,7 @@ private function getChanges(Document $document, array $blocks, array $links): ar foreach ($links as [$token, $target]) { $title = $token->link->getTitle(); - if (!$target || !$title) { + if ($target === null || $title === null || $title === '') { continue; } @@ -211,14 +211,14 @@ private function getChanges(Document $document, array $blocks, array $links): ar $link = (string) $token->link; $hash = static::BlockMarker.'/'.Text::hash($link); $title = $token->link->getTitle(); - $title = $target && $title && !isset($duplicates[$title]) + $title = $target !== null && $title !== null && $title !== '' && !isset($duplicates[$title]) ? $title : $link; - $title = !$target || $target->deprecated + $title = $target === null || $target->deprecated ? static::DeprecationMarker.$title : $title; - if ($target) { + if ($target !== null) { $referenceTitle = Utils::getLinkTitle($refsParentNode, $link); $referenceTarget = Utils::getLinkTarget($refsParentNode, (string) $target); $references[$referenceTitle] = "[{$hash}]: {$referenceTarget}\n {$referenceTitle}"; @@ -227,15 +227,15 @@ private function getChanges(Document $document, array $blocks, array $links): ar foreach ($token->nodes as $node) { $location = Utils::getLocation($node); - if ($location) { + if ($location !== null) { $linkTitle = Utils::escapeTextInTableCell($node, $title); - $changes[] = [$location, $target ? "[`{$linkTitle}`][{$hash}]" : "`{$linkTitle}`"]; + $changes[] = [$location, $target !== null ? "[`{$linkTitle}`][{$hash}]" : "`{$linkTitle}`"]; } } } // References - if ($references) { + if ($references !== []) { ksort($references); $location = $refsParentLocation ?? new Append(); @@ -276,7 +276,7 @@ protected function parse(Document $document): array { $link = $this->factory->create((string) $parent->getTitle()) ?? $link; } - if (!$link) { + if ($link === null) { continue; } diff --git a/packages/documentator/src/Processor/Tasks/Preprocess/Context.php b/packages/documentator/src/Processor/Tasks/Preprocess/Context.php index 3eaae7dc6..5069eeb3b 100644 --- a/packages/documentator/src/Processor/Tasks/Preprocess/Context.php +++ b/packages/documentator/src/Processor/Tasks/Preprocess/Context.php @@ -64,7 +64,7 @@ public function toSplittable(Document $document): Document { private function getMutation(Document $document): Mutation { $path = $this->file->getPath(); - $path = $document->getPath() + $path = $document->getPath() !== null ? Path::getPath(dirname($path), basename($document->getPath())) : $path; diff --git a/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeDocumentList/Instruction.php b/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeDocumentList/Instruction.php index 1b4ffe404..785054ce0 100644 --- a/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeDocumentList/Instruction.php +++ b/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeDocumentList/Instruction.php @@ -65,7 +65,7 @@ public function __invoke(Context $context, string $target, mixed $parameters): G // Empty? $document = $file->getMetadata($this->markdown); - if (!$document || $document->isEmpty()) { + if ($document === null || $document->isEmpty()) { continue; } @@ -79,7 +79,7 @@ public function __invoke(Context $context, string $target, mixed $parameters): G } // Empty? - if (!$documents) { + if ($documents === []) { return ''; } diff --git a/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeExample/Instruction.php b/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeExample/Instruction.php index b52ac5220..1c7d064b3 100644 --- a/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeExample/Instruction.php +++ b/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeExample/Instruction.php @@ -69,7 +69,7 @@ public function __invoke(Context $context, string $target, mixed $parameters): G CODE; // Runner? - if ($this->runner) { + if ($this->runner !== null) { // Run try { $output = trim((string) ($this->runner)($target)); @@ -117,7 +117,7 @@ public function __invoke(Context $context, string $target, mixed $parameters): G CODE; - } elseif ($output) { + } elseif ($output !== '') { $output = <<printer) { + if ($this->printer === null) { throw new DependencyIsMissing($context, Printer::class); } diff --git a/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludePackageList/Instruction.php b/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludePackageList/Instruction.php index d256240a2..3aab8ed49 100644 --- a/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludePackageList/Instruction.php +++ b/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludePackageList/Instruction.php @@ -66,16 +66,16 @@ public function __invoke(Context $context, string $target, mixed $parameters): G $packageFile = Cast::to(File::class, yield new FileReference($package->getPath('composer.json'))); $packageInfo = $packageFile->getMetadata($this->composer)->json ?? null; - if (!$packageInfo) { + if ($packageInfo === null) { throw new PackageComposerJsonIsMissing($context, $package); } // Readme - $readme = $package->getPath(Cast::toString($packageInfo->readme ?: 'README.md')); + $readme = $package->getPath(Cast::toString($packageInfo->readme ?? 'README.md')); $readme = Cast::to(File::class, yield new FileReference($readme)); $content = $readme->getMetadata($this->markdown); - if (!$content || $content->isEmpty()) { + if ($content === null || $content->isEmpty()) { throw new PackageReadmeIsEmpty($context, $package, $readme); } @@ -92,7 +92,7 @@ public function __invoke(Context $context, string $target, mixed $parameters): G } // Packages? - if (!$packages) { + if ($packages === []) { return ''; } diff --git a/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeTemplate/Instruction.php b/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeTemplate/Instruction.php index 1d49d2ed3..52f483870 100644 --- a/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeTemplate/Instruction.php +++ b/packages/documentator/src/Processor/Tasks/Preprocess/Instructions/IncludeTemplate/Instruction.php @@ -49,7 +49,7 @@ public static function getParameters(): string { #[Override] public function __invoke(Context $context, string $target, mixed $parameters): Generator { // Data? - if (!$parameters->data) { + if ($parameters->data === []) { throw new TemplateDataMissed($context); } @@ -85,14 +85,14 @@ public function __invoke(Context $context, string $target, mixed $parameters): G // Unused? $unused = array_diff($vars, $used); - if ($unused) { + if ($unused !== []) { throw new TemplateVariablesUnused($context, array_values($unused)); } // Missed? $missed = array_diff($known, $used); - if ($missed) { + if ($missed !== []) { throw new TemplateVariablesMissed($context, array_values($missed)); } diff --git a/packages/documentator/src/Processor/Tasks/Preprocess/Mutations/InstructionsRemove.php b/packages/documentator/src/Processor/Tasks/Preprocess/Mutations/InstructionsRemove.php index fa0e5612a..a9529a984 100644 --- a/packages/documentator/src/Processor/Tasks/Preprocess/Mutations/InstructionsRemove.php +++ b/packages/documentator/src/Processor/Tasks/Preprocess/Mutations/InstructionsRemove.php @@ -44,7 +44,7 @@ public function __invoke(Document $document, DocumentNode $node): iterable { // Location? $location = MarkdownUtils::getLocation($block); - if ($location) { + if ($location !== null) { $changes[] = [$location, null]; } } diff --git a/packages/documentator/src/Processor/Tasks/Preprocess/Task.php b/packages/documentator/src/Processor/Tasks/Preprocess/Task.php index 8b9108387..f83978027 100644 --- a/packages/documentator/src/Processor/Tasks/Preprocess/Task.php +++ b/packages/documentator/src/Processor/Tasks/Preprocess/Task.php @@ -117,7 +117,7 @@ public function __invoke(Directory $root, File $file): Generator { // Markdown? $document = $file->getMetadata($this->markdown); - if (!$document) { + if ($document === null) { return false; } @@ -161,20 +161,20 @@ public function __invoke(Directory $root, File $file): Generator { } else { $location = MarkdownUtils::getLocation($node); - if ($location) { + if ($location !== null) { $instruction = trim((string) $document->getText($location)); $text = "{$instruction}\n{$text}"; } } - if ($location) { + if ($location !== null) { $changes[] = [$location, $text]; } } } // Mutate - if ($changes) { + if ($changes !== []) { $file->setContent( (string) $document->mutate(new Changeset($changes)), ); @@ -204,7 +204,7 @@ protected function parse(Directory $root, File $file, Document $document): Token $name = $node->getLabel(); $instruction = $this->instructions->get($name)[0] ?? null; - if (!$instruction) { + if ($instruction === null) { continue; } @@ -221,7 +221,9 @@ protected function parse(Directory $root, File $file, Document $document): Token } // Parse - $context = new Context($root, $file, $node->getDestination(), $node->getTitle() ?: null, $mutation); + $title = $node->getTitle(); + $title = $title !== '' ? $title : null; + $context = new Context($root, $file, $node->getDestination(), $title, $mutation); $parameters = $instruction::getParameters(); $parameters = $this->serializer->deserialize($parameters, $params, 'json'); @@ -241,7 +243,9 @@ protected function parse(Directory $root, File $file, Document $document): Token } private function getParametersJson(string $target, ?string $json): string { - $parameters = (array) ($json ? json_decode($json, true, flags: JSON_THROW_ON_ERROR) : []); + $parameters = $json !== null && $json !== '' + ? (array) json_decode($json, true, flags: JSON_THROW_ON_ERROR) + : []; $parameters['target'] = $target; $parameters = $this->getParametersJsonNormalize($parameters); $parameters = json_encode($parameters, JSON_THROW_ON_ERROR); diff --git a/packages/documentator/src/Processor/Tasks/Preprocess/Utils.php b/packages/documentator/src/Processor/Tasks/Preprocess/Utils.php index 5b03ec38e..27a0169e4 100644 --- a/packages/documentator/src/Processor/Tasks/Preprocess/Utils.php +++ b/packages/documentator/src/Processor/Tasks/Preprocess/Utils.php @@ -27,7 +27,7 @@ class Utils { */ public static function isInstruction(Node $node, InstanceList $instructions): bool { return $node instanceof ReferenceNode - && !MarkdownUtils::getParent($node, GeneratedNode::class) + && MarkdownUtils::getParent($node, GeneratedNode::class) === null && $instructions->has($node->getLabel()); } @@ -36,7 +36,8 @@ public static function getSeed(Context $context, Document|File $file): string { $file instanceof Document => Path::getRelativePath($context->root->getPath(), $file->getPath() ?? ''), default => $file->getRelativePath($context->root), }; - $path = Text::hash($path ?: uniqid(self::class)); // @phpstan-ignore disallowed.function + $path = $path !== '' ? $path : uniqid(self::class); // @phpstan-ignore disallowed.function + $path = Text::hash($path); return $path; } diff --git a/packages/documentator/src/Utils/ArtisanSerializer.php b/packages/documentator/src/Utils/ArtisanSerializer.php index 7e95fef3e..449b9af9c 100644 --- a/packages/documentator/src/Utils/ArtisanSerializer.php +++ b/packages/documentator/src/Utils/ArtisanSerializer.php @@ -48,7 +48,7 @@ public function getOptionSignature(InputOption $option): string { $default = $option->getDefault() !== null && $option->acceptValue(); $signature = '--'; - if ($option->getShortcut()) { + if ($option->getShortcut() !== null && $option->getShortcut() !== '') { $signature .= $option->getShortcut().'|'; } diff --git a/packages/documentator/src/Utils/Git.php b/packages/documentator/src/Utils/Git.php index f26224bbc..b0e1e5f0b 100644 --- a/packages/documentator/src/Utils/Git.php +++ b/packages/documentator/src/Utils/Git.php @@ -24,7 +24,7 @@ public function __construct( public function getTags(?callable $filter = null, ?string $root = null): array { $tags = $this->run(['git', 'tag', '--list'], $root); $tags = explode("\n", $tags); - $tags = $filter ? array_filter($tags, $filter) : $tags; + $tags = $filter !== null ? array_filter($tags, $filter) : $tags; $tags = array_values($tags); return $tags; diff --git a/packages/documentator/src/Utils/Markdown.php b/packages/documentator/src/Utils/Markdown.php index 3dec8d46d..950be85fe 100644 --- a/packages/documentator/src/Utils/Markdown.php +++ b/packages/documentator/src/Utils/Markdown.php @@ -41,8 +41,8 @@ class Markdown { */ public static function getTitle(string $string): ?string { $title = static::getText($string, static::getTitleNode($string)); - $title = $title ? ltrim($title, '# ') : null; - $title = $title ?: null; + $title = $title !== null ? ltrim($title, '# ') : null; + $title = $title !== '' ? $title : null; return $title; } @@ -53,7 +53,7 @@ public static function getTitle(string $string): ?string { public static function getSummary(string $string): ?string { $title = static::getTitleNode($string); $summary = static::getFirstNode($title?->next(), Paragraph::class); - $summary = $summary + $summary = $summary !== null ? static::getText($string, $summary) : null; @@ -65,7 +65,8 @@ public static function getSummary(string $string): ?string { */ public static function setPadding(string $string, int $spaces): string { $prefix = str_repeat(' ', $spaces); - $lines = preg_split('/\R/u', $string) ?: []; + $lines = preg_split('/\R/u', $string); + $lines = $lines !== false ? $lines : []; $cut = PHP_INT_MAX; foreach ($lines as $line) { @@ -76,7 +77,7 @@ public static function setPadding(string $string, int $spaces): string { foreach ($lines as $i => $line) { $line = mb_substr($line, $cut); - $line = ($line ? $prefix : '').$line; + $line = ($line !== '' ? $prefix : '').$line; $lines[$i] = $line; } @@ -101,13 +102,14 @@ protected static function getTitleNode(string $string): ?Heading { protected static function getText(string $string, ?AbstractBlock $node): ?string { // todo(documentator): There is no way to convert AST back to Markdown yet // https://github.com/thephpleague/commonmark/issues/419 - if (!$node || $node->getStartLine() === null || $node->getEndLine() === null) { + if ($node?->getStartLine() === null || $node->getEndLine() === null) { return null; } $start = $node->getStartLine() - 1; $end = $node->getEndLine() - 1; - $lines = (array) preg_split('/\R/u', $string); + $lines = preg_split('/\R/u', $string); + $lines = $lines !== false ? $lines : []; $lines = array_slice($lines, $start, $end - $start + 1); $text = trim(implode("\n", $lines)); diff --git a/packages/documentator/src/Utils/PhpDoc.php b/packages/documentator/src/Utils/PhpDoc.php index 64e236c84..f295f7f47 100644 --- a/packages/documentator/src/Utils/PhpDoc.php +++ b/packages/documentator/src/Utils/PhpDoc.php @@ -46,7 +46,7 @@ public function getDescription(): string { } public function isDeprecated(): bool { - return $this->node && $this->node->getDeprecatedTagValues() !== []; + return $this->node !== null && $this->node->getDeprecatedTagValues() !== []; } /** @@ -58,7 +58,7 @@ private function join(array $strings): string { private function parse(?string $comment): ?PhpDocNode { // Empty? - if (!$comment || trim($comment) === '') { + if ($comment === null || trim($comment) === '') { return null; } diff --git a/packages/documentator/src/Utils/Text.php b/packages/documentator/src/Utils/Text.php index 805dfb36c..31b3fc4ba 100644 --- a/packages/documentator/src/Utils/Text.php +++ b/packages/documentator/src/Utils/Text.php @@ -35,13 +35,16 @@ public static function setPadding(string $text, int $level, string $padding = ' $cut = PHP_INT_MAX; foreach ($lines as $line) { - if (!$line) { + if ($line === '') { continue; } $trims = 0; - while ($line && (str_starts_with($line, $padding) || ($trimmed && str_starts_with($line, $trimmed)))) { + while ( + $line !== '' + && (str_starts_with($line, $padding) || ($trimmed !== '' && str_starts_with($line, $trimmed))) + ) { $line = mb_substr($line, $length); $trims++; @@ -64,7 +67,10 @@ public static function setPadding(string $text, int $level, string $padding = ' * @return list */ public static function getLines(string $text): array { - return preg_split('/\R/u', $text) ?: []; + $lines = preg_split('/\R/u', $text); + $lines = $lines !== false ? $lines : []; + + return $lines; } public static function getPathTitle(string $path): string { diff --git a/packages/eloquent/src/Iterators/ChunkedChangeSafeIterator.php b/packages/eloquent/src/Iterators/ChunkedChangeSafeIterator.php index b892601e8..92371c664 100644 --- a/packages/eloquent/src/Iterators/ChunkedChangeSafeIterator.php +++ b/packages/eloquent/src/Iterators/ChunkedChangeSafeIterator.php @@ -76,12 +76,12 @@ static function (Builder $builder, string|int|null $offset) use ($column): void protected function chunkProcessed(Collection $items): bool { $last = $this->column($items->last()); - if ($last) { + if ($last !== null) { $this->setOffset($last); } return parent::chunkProcessed($items) - && $last; + && $last !== null; } /** @@ -92,7 +92,7 @@ protected function column(Model|null $item): mixed { $column = explode('.', $this->getColumn()); $column = trim(end($column), '`"[]'); - if ($item) { + if ($item !== null) { $value = $item->getAttribute($column); } diff --git a/packages/eloquent/src/Iterators/IteratorImpl.php b/packages/eloquent/src/Iterators/IteratorImpl.php index 59ee94801..d7dfd52cc 100644 --- a/packages/eloquent/src/Iterators/IteratorImpl.php +++ b/packages/eloquent/src/Iterators/IteratorImpl.php @@ -100,7 +100,7 @@ public function setOffset(string|int|null $offset): static { #[Override] public function onBeforeChunk(?Closure $closure): static { - if ($closure) { + if ($closure !== null) { $this->beforeChunk->attach($closure); } else { $this->beforeChunk->reset(); @@ -111,7 +111,7 @@ public function onBeforeChunk(?Closure $closure): static { #[Override] public function onAfterChunk(?Closure $closure): static { - if ($closure) { + if ($closure !== null) { $this->afterChunk->attach($closure); } else { $this->afterChunk->reset(); @@ -127,7 +127,7 @@ public function onAfterChunk(?Closure $closure): static { public function getIterator(): Generator { // Prepare $index = $this->getIndex(); - $chunk = $this->limit ? min($this->limit, $this->chunk) : $this->chunk; + $chunk = $this->limit > 0 ? min($this->limit, $this->chunk) : $this->chunk; $limit = $this->limit; // Limit? @@ -140,7 +140,7 @@ public function getIterator(): Generator { $builder = (clone $this->getBuilder())->tap(static function (Builder $builder): void { $builder->offset(0); }); - $chunk = $limit ? min($chunk, $limit - $index) : $chunk; + $chunk = $limit > 0 ? min($chunk, $limit - $index) : $chunk; $items = $this->getChunk($builder, $chunk); $count = count($items); @@ -152,7 +152,7 @@ public function getIterator(): Generator { $this->setIndex($index); } - if (!$this->chunkProcessed($items) || ($limit && $index >= $limit)) { + if (!$this->chunkProcessed($items) || ($limit > 0 && $index >= $limit)) { break; } } while ($count !== 0 && $count >= $chunk); @@ -187,7 +187,7 @@ protected function chunkProcessed(Collection $items): bool { protected function getDefaultLimit(): ?int { $builder = $this->getBuilder()->getQuery(); - $limit = $builder->unions + $limit = $builder->unions !== null && $builder->unions !== [] ? $builder->unionLimit : $builder->limit; @@ -196,7 +196,7 @@ protected function getDefaultLimit(): ?int { protected function getDefaultOffset(): ?int { $builder = $this->getBuilder()->getQuery(); - $offset = $builder->unions + $offset = $builder->unions !== null && $builder->unions !== [] ? $builder->unionOffset : $builder->offset; diff --git a/packages/eloquent/src/Mixins/EloquentBuilderMixin.php b/packages/eloquent/src/Mixins/EloquentBuilderMixin.php index 19735d9fa..d84571a9c 100644 --- a/packages/eloquent/src/Mixins/EloquentBuilderMixin.php +++ b/packages/eloquent/src/Mixins/EloquentBuilderMixin.php @@ -40,7 +40,7 @@ public function getChunkedIterator(): Closure { /** @var Builder $this */ $iterator = new ChunkedIterator($this); - if ($chunk) { + if ($chunk !== null) { $iterator->setChunkSize($chunk); } @@ -56,7 +56,7 @@ public function getChangeSafeIterator(): Closure { /** @var Builder $this */ $iterator = new ChunkedChangeSafeIterator($this, $column); - if ($chunk) { + if ($chunk !== null) { $iterator->setChunkSize($chunk); } diff --git a/packages/formatter/src/Formatter.php b/packages/formatter/src/Formatter.php index 8a8f44edc..171f04ea0 100644 --- a/packages/formatter/src/Formatter.php +++ b/packages/formatter/src/Formatter.php @@ -17,7 +17,6 @@ use LastDragon_ru\LaraASP\Formatter\Exceptions\FailedToCreateNumberFormatter; use LastDragon_ru\LaraASP\Formatter\Exceptions\FailedToFormatValue; use LastDragon_ru\LaraASP\Formatter\Utils\DurationFormatter; -use Locale; use NumberFormatter; use OutOfBoundsException; @@ -258,11 +257,11 @@ protected function create(): static { // // ========================================================================= public function getLocale(): string { - return $this->locale ?: $this->getDefaultLocale(); + return $this->locale ?? $this->getDefaultLocale(); } public function getTimezone(): IntlTimeZone|DateTimeZone|string|null { - return $this->timezone ?: $this->getDefaultTimezone(); + return $this->timezone ?? $this->getDefaultTimezone(); } protected function getTranslator(): PackageTranslator { @@ -282,14 +281,14 @@ public function integer(int|float|null $value): string { public function decimal(float|int|null $value, ?int $decimals = null): string { return $this->formatValue(static::Decimal, $value, $decimals, function () use ($decimals): int { - return $decimals ?: Cast::toInt($this->getOptions(static::Decimal, 2)); + return $decimals ?? Cast::toInt($this->getOptions(static::Decimal, 2)); }); } public function currency(?float $value, ?string $currency = null): string { - $type = static::Currency; - $value = (float) $value; - $currency = $currency ?: Cast::toString($this->getOptions($type, 'USD')); + $type = static::Currency; + $value = (float) $value; + $currency ??= Cast::toString($this->getOptions($type, 'USD')); $formatter = $this->getIntlNumberFormatter($type); $formatted = $formatter->formatCurrency($value, $currency); @@ -305,7 +304,7 @@ public function currency(?float $value, ?string $currency = null): string { */ public function percent(?float $value, ?int $decimals = null): string { return $this->formatValue(static::Percent, (float) $value / 100, $decimals, function () use ($decimals): int { - return $decimals ?: Cast::toInt($this->getOptions(static::Percent, 0)); + return $decimals ?? Cast::toInt($this->getOptions(static::Percent, 0)); }); } @@ -323,7 +322,7 @@ public function ordinal(?int $value): string { public function duration(DateInterval|float|int|null $value, ?string $format = null): string { $type = static::Duration; - $format = $format ?: $this->getOptions($type); + $format ??= $this->getOptions($type); $format = is_string($format) ? Cast::toString($this->getLocaleOptions($type, $format)) : $format; @@ -371,7 +370,7 @@ public function datetime( public function filesize(string|float|int|null $bytes, ?int $decimals = null): string { return $this->formatFilesize( $bytes, - $decimals ?: Cast::toInt($this->getOptions(static::Filesize, 2)), + $decimals ?? Cast::toInt($this->getOptions(static::Filesize, 2)), 1024, [ $this->getTranslation(['filesize.B', 'B']), @@ -397,7 +396,7 @@ public function filesize(string|float|int|null $bytes, ?int $decimals = null): s public function disksize(string|float|int|null $bytes, ?int $decimals = null): string { return $this->formatFilesize( $bytes, - $decimals ?: Cast::toInt($this->getOptions(static::Disksize, 2)), + $decimals ?? Cast::toInt($this->getOptions(static::Disksize, 2)), 1000, [ $this->getTranslation(['disksize.B', 'B']), @@ -420,7 +419,7 @@ public function secret(?string $value, ?int $show = null): string { return ''; } - $show = $show ?: Cast::toInt($this->getOptions(static::Secret, 5)); + $show ??= Cast::toInt($this->getOptions(static::Secret, 5)); $length = mb_strlen($value); $hidden = $length - $show; @@ -447,12 +446,11 @@ public function secret(?string $value, ?int $show = null): string { // // ========================================================================= protected function getDefaultLocale(): string { - return $this->application->getInstance()->getLocale() - ?: Locale::getDefault(); + return $this->application->getInstance()->getLocale(); } protected function getDefaultTimezone(): IntlTimeZone|DateTimeZone|string|null { - return $this->config->getInstance()->get('app.timezone') ?: null; + return $this->config->getInstance()->get('app.timezone') ?? null; } protected function getOptions(string $type, mixed $default = null): mixed { @@ -468,7 +466,7 @@ protected function getLocaleOptions(string $type, string $option): mixed { $package = Package::Name; $locale = $this->getLocale(); $pattern = $repository->get("{$package}.locales.{$locale}.{$type}.{$option}") - ?: $repository->get("{$package}.all.{$type}.{$option}"); + ?? $repository->get("{$package}.all.{$type}.{$option}"); return $pattern; } @@ -511,7 +509,7 @@ protected function formatDateTime( return ''; } - $formatter = ($timezone ? $this->forTimezone($timezone) : $this)->getIntlDateFormatter($type, $format); + $formatter = ($timezone !== null ? $this->forTimezone($timezone) : $this)->getIntlDateFormatter($type, $format); $value = $formatter->format($value); if ($value === false) { @@ -531,7 +529,8 @@ protected function formatFilesize(string|float|int|null $bytes, int $decimals, i $scale = 2 * $decimals; $bytes = match (true) { is_float($bytes) => sprintf('%0.0f', $bytes), - default => ((string) $bytes) ?: '0', + $bytes === null => '0', + default => (string) $bytes, }; $length = static function (string $bytes): int { return mb_strlen(Str::before($bytes, '.')); @@ -555,7 +554,7 @@ private function getIntlDateFormatter(string $type, ?string $format = null): Int $key = json_encode([$type, $format], JSON_THROW_ON_ERROR); $formatter = $this->dateFormatters[$key] ?? $this->createIntlDateFormatter($type, $format); - if ($formatter) { + if ($formatter !== null) { $this->dateFormatters[$key] = $formatter; } else { throw new FailedToCreateDateFormatter($type, $format); @@ -568,7 +567,7 @@ private function createIntlDateFormatter(string $type, ?string $format = null): $formatter = null; $pattern = ''; $default = IntlDateFormatter::SHORT; - $format = $format ?: $this->getOptions($type, $default); + $format ??= $this->getOptions($type, $default); $tz = $this->getTimezone(); if (is_string($format)) { @@ -630,7 +629,7 @@ private function getIntlNumberFormatter( $key = json_encode([$type, $decimals], JSON_THROW_ON_ERROR); $formatter = $this->numbersFormatters[$key] ?? $this->createIntlNumberFormatter($type, $decimals, $closure); - if ($formatter) { + if ($formatter !== null) { $this->numbersFormatters[$key] = $formatter; } else { throw new FailedToCreateNumberFormatter($type); @@ -652,7 +651,7 @@ private function createIntlNumberFormatter( $symbols = []; $texts = []; - if ($closure) { + if ($closure !== null) { $decimals = $closure($type, $decimals); } @@ -695,7 +694,7 @@ private function createIntlNumberFormatter( break; } - if ($formatter) { + if ($formatter !== null) { $attributes = $attributes + (array) $this->getLocaleOptions($type, self::IntlAttributes) + (array) $this->getOptions(self::IntlAttributes); diff --git a/packages/formatter/src/FormatterTest.php b/packages/formatter/src/FormatterTest.php index ed4a0fa0d..ef217308d 100644 --- a/packages/formatter/src/FormatterTest.php +++ b/packages/formatter/src/FormatterTest.php @@ -149,8 +149,9 @@ public function testDurationCustomFormat(): void { } public function testTime(): void { - $time = DateTime::createFromFormat('H:i:s', '23:24:59') ?: null; + $time = DateTime::createFromFormat('H:i:s', '23:24:59'); + self::assertIsObject($time); self::assertEquals('11:24 PM', str_replace("\u{202F}", ' ', $this->formatter->time($time))); self::assertEquals( '2:24 AM', @@ -163,8 +164,9 @@ public function testTimeConfig(): void { Package::Name.'.options.'.Formatter::Time => IntlDateFormatter::MEDIUM, ]); - $time = DateTime::createFromFormat('H:i:s', '23:24:59') ?: null; + $time = DateTime::createFromFormat('H:i:s', '23:24:59'); + self::assertIsObject($time); self::assertEquals('11:24:59 PM', str_replace("\u{202F}", ' ', $this->formatter->time($time))); } @@ -175,15 +177,17 @@ public function testTimeCustomFormat(): void { Package::Name.'.all.'.Formatter::Time.'.custom2' => 'HH:mm:ss.SSS', ]); - $time = DateTime::createFromFormat('H:i:s', '23:24:59') ?: null; + $time = DateTime::createFromFormat('H:i:s', '23:24:59'); + self::assertIsObject($time); self::assertEquals('23:24:59.000', $this->formatter->time($time)); self::assertEquals('23:24:59.000', $this->formatter->time($time, 'custom2')); } public function testDate(): void { - $date = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00') ?: null; + $date = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00'); + self::assertIsObject($date); self::assertEquals('5/12/05', $this->formatter->date($date)); self::assertEquals('5/13/05', $this->formatter->date($date, null, 'Europe/Moscow')); } @@ -193,8 +197,9 @@ public function testDateConfig(): void { Package::Name.'.options.'.Formatter::Date => IntlDateFormatter::MEDIUM, ]); - $date = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00') ?: null; + $date = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00'); + self::assertIsObject($date); self::assertEquals('May 12, 2005', $this->formatter->date($date)); } @@ -205,15 +210,17 @@ public function testDateCustomFormat(): void { Package::Name.'.all.'.Formatter::Date.'.custom2' => 'd MMM YYYY', ]); - $date = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00') ?: null; + $date = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00'); + self::assertIsObject($date); self::assertEquals('12 May 2005', $this->formatter->date($date)); self::assertEquals('12 May 2005', $this->formatter->date($date, 'custom2')); } public function testDatetime(): void { - $datetime = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00') ?: null; + $datetime = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00'); + self::assertIsObject($datetime); self::assertEquals('5/12/05, 11:00 PM', str_replace("\u{202F}", ' ', $this->formatter->datetime($datetime))); self::assertEquals( '5/13/05, 3:00 AM', @@ -226,8 +233,9 @@ public function testDatetimeConfig(): void { Package::Name.'.options.'.Formatter::DateTime => IntlDateFormatter::MEDIUM, ]); - $datetime = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00') ?: null; + $datetime = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00'); + self::assertIsObject($datetime); self::assertEquals( 'May 12, 2005, 11:00:00 PM', str_replace("\u{202F}", ' ', $this->formatter->datetime($datetime)), @@ -241,8 +249,9 @@ public function testDatetimeCustomFormat(): void { Package::Name.'.all.'.Formatter::DateTime.'.custom2' => 'd MMM YYYY || HH:mm:ss', ]); - $datetime = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00') ?: null; + $datetime = DateTime::createFromFormat('d.m.Y H:i:s', '12.05.2005 23:00:00'); + self::assertIsObject($datetime); self::assertEquals('12 May 2005 || 23:00:00', $this->formatter->datetime($datetime)); self::assertEquals('12 May 2005 || 23:00:00', $this->formatter->datetime($datetime, 'custom2')); } diff --git a/packages/formatter/src/Utils/DurationFormatter.php b/packages/formatter/src/Utils/DurationFormatter.php index b75d9c5c3..9142262fd 100644 --- a/packages/formatter/src/Utils/DurationFormatter.php +++ b/packages/formatter/src/Utils/DurationFormatter.php @@ -5,7 +5,6 @@ use DateInterval; use function abs; -use function array_filter; use function array_key_exists; use function array_reduce; use function floor; @@ -52,7 +51,7 @@ public function __construct( } public static function getTimestamp(DateInterval $interval): float { - return ($interval->invert ? -1 : 1) * (0 + return ($interval->invert !== 0 ? -1 : 1) * (0 + $interval->y * self::SecondsInYear + $interval->m * self::SecondsInMonth + $interval->d * self::SecondsInDay @@ -97,18 +96,16 @@ public function format(float|int $value): string { private function prepare(array $tokens, float|int $value, array $units): array { // Calculate values $values = []; - $patterns = array_filter( - array_reduce( - $tokens, - static function (array $used, UnicodeDateTimeFormatToken $token) use ($units): array { - if (array_key_exists($token->pattern, $units)) { - $used[$token->pattern] = true; - } - - return $used; - }, - [], - ), + $patterns = array_reduce( + $tokens, + static function (array $used, UnicodeDateTimeFormatToken $token) use ($units): array { + if (array_key_exists($token->pattern, $units)) { + $used[$token->pattern] = true; + } + + return $used; + }, + [], ); foreach ($units as $pattern => $multiplier) { diff --git a/packages/formatter/src/Utils/UnicodeDateTimeFormatParser.php b/packages/formatter/src/Utils/UnicodeDateTimeFormatParser.php index 03d0e4411..7e10affd4 100644 --- a/packages/formatter/src/Utils/UnicodeDateTimeFormatParser.php +++ b/packages/formatter/src/Utils/UnicodeDateTimeFormatParser.php @@ -43,7 +43,7 @@ public function getIterator(): Traversable { foreach ($this->tokenize($this->pattern) as $token => $value) { $isEscape = $token === $escape; - $isPattern = !$isEscape && !$inEscape && preg_match('/[a-z]+/i', $token); + $isPattern = !$isEscape && !$inEscape && preg_match('/[a-z]+/i', $token) > 0; if ($inEscape) { if ($isEscape) { @@ -60,7 +60,7 @@ public function getIterator(): Traversable { $text .= $value; } } elseif ($isPattern) { - if ($text) { + if ($text !== null) { yield new UnicodeDateTimeFormatToken($escape, strtr($text, $replace)); $text = null; @@ -72,7 +72,7 @@ public function getIterator(): Traversable { } } - if ($text) { + if ($text !== null) { yield new UnicodeDateTimeFormatToken($escape, strtr($text, $replace)); } @@ -86,7 +86,7 @@ private function tokenize(string $pattern): Iterator { // Split into char & string of the same chars $strings = preg_split('/((.)\g{-1}*)/um', $pattern, flags: PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE); - if (!$strings) { + if ($strings === false || $strings === []) { yield from []; return; diff --git a/packages/graphql-printer/src/Blocks/Block.php b/packages/graphql-printer/src/Blocks/Block.php index ee603593d..3887415d7 100644 --- a/packages/graphql-printer/src/Blocks/Block.php +++ b/packages/graphql-printer/src/Blocks/Block.php @@ -49,7 +49,7 @@ public function serialize(Collector $collector, int $level, int $used): string { $this->statistics = $collector; $this->level = $level; $this->used = $used; - } elseif ($this->statistics) { + } elseif ($this->statistics !== null) { $collector->addUsed($this->statistics); } else { // empty diff --git a/packages/graphql-printer/src/Blocks/Document/ArgumentTest.php b/packages/graphql-printer/src/Blocks/Document/ArgumentTest.php index 9f2797060..e40187d34 100644 --- a/packages/graphql-printer/src/Blocks/Document/ArgumentTest.php +++ b/packages/graphql-printer/src/Blocks/Document/ArgumentTest.php @@ -36,7 +36,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new Argument($context, $argumentNode, $argumentType))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::argument($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/DirectiveDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/DirectiveDefinitionTest.php index 06466fc12..bf08166a3 100644 --- a/packages/graphql-printer/src/Blocks/Document/DirectiveDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/DirectiveDefinitionTest.php @@ -38,7 +38,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new DirectiveDefinition($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::directiveDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/DirectiveTest.php b/packages/graphql-printer/src/Blocks/Document/DirectiveTest.php index 77679720f..3d5a8bc54 100644 --- a/packages/graphql-printer/src/Blocks/Document/DirectiveTest.php +++ b/packages/graphql-printer/src/Blocks/Document/DirectiveTest.php @@ -38,11 +38,11 @@ public function testSerialize( ?Schema $schema, ): void { $collector = new Collector(); - $resolver = $directive ? $this->getDirectiveResolver($directive) : null; + $resolver = $directive !== null ? $this->getDirectiveResolver($directive) : null; $context = new Context($settings, $resolver, $schema); $actual = (new Directive($context, $node))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::directive($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/DocumentTest.php b/packages/graphql-printer/src/Blocks/Document/DocumentTest.php index dfdf56832..c95b8418b 100644 --- a/packages/graphql-printer/src/Blocks/Document/DocumentTest.php +++ b/packages/graphql-printer/src/Blocks/Document/DocumentTest.php @@ -34,7 +34,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new Document($context, $document))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::parse($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/EnumTypeDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/EnumTypeDefinitionTest.php index 0f60bb18a..51a5669d4 100644 --- a/packages/graphql-printer/src/Blocks/Document/EnumTypeDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/EnumTypeDefinitionTest.php @@ -33,7 +33,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new EnumTypeDefinition($context, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::enumTypeDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/EnumTypeExtensionTest.php b/packages/graphql-printer/src/Blocks/Document/EnumTypeExtensionTest.php index 80944adea..86bda8fb1 100644 --- a/packages/graphql-printer/src/Blocks/Document/EnumTypeExtensionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/EnumTypeExtensionTest.php @@ -32,7 +32,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new EnumTypeExtension($context, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::enumTypeExtension($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/Field.php b/packages/graphql-printer/src/Blocks/Document/Field.php index acdb175a6..72a468e45 100644 --- a/packages/graphql-printer/src/Blocks/Document/Field.php +++ b/packages/graphql-printer/src/Blocks/Document/Field.php @@ -38,7 +38,7 @@ protected function name(): string { #[Override] protected function prefix(): ?string { $definition = $this->getDefinition(); - $type = $definition->alias + $type = $definition->alias !== null ? "{$definition->alias->value}:" : ''; @@ -49,7 +49,7 @@ protected function prefix(): ?string { protected function content(Collector $collector, int $level, int $used): string { // Print? $parent = $this->type; - $type = $parent + $type = $parent !== null ? $this->getContext()->getField($parent, $this->name())?->getType() : null; @@ -61,12 +61,12 @@ protected function content(Collector $collector, int $level, int $used): string $content = parent::content($collector, $level, $used); // Statistics - if ($content) { - if ($parent) { + if ($content !== '') { + if ($parent !== null) { $collector->addUsedType($this->getTypeName($parent)); } - if ($type) { + if ($type !== null) { $collector->addUsedType($this->getTypeName($type)); } } @@ -86,7 +86,7 @@ protected function arguments(bool $multiline): ?Block { $definition->arguments, static function (ArgumentNode $argument) use ($context, $type, $field): TypeNode|Type|null { $name = $argument->name->value; - $type = $type + $type = $type !== null ? $context->getFieldArgument($type, $field, $name)?->getType() : null; @@ -100,10 +100,10 @@ static function (ArgumentNode $argument) use ($context, $type, $field): TypeNode #[Override] protected function fields(bool $multiline): ?Block { $definition = $this->getDefinition(); - $type = $this->type + $type = $this->type !== null ? $this->getContext()->getField($this->type, $this->name())?->getType() : null; - $set = $definition->selectionSet + $set = $definition->selectionSet !== null ? new SelectionSet($this->getContext(), $definition->selectionSet, $type) : null; diff --git a/packages/graphql-printer/src/Blocks/Document/FieldTest.php b/packages/graphql-printer/src/Blocks/Document/FieldTest.php index cb780b3d2..ce31f95ef 100644 --- a/packages/graphql-printer/src/Blocks/Document/FieldTest.php +++ b/packages/graphql-printer/src/Blocks/Document/FieldTest.php @@ -38,7 +38,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new Field($context, $definition, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::field($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/FragmentDefinition.php b/packages/graphql-printer/src/Blocks/Document/FragmentDefinition.php index 37d99d89a..a1c48618f 100644 --- a/packages/graphql-printer/src/Blocks/Document/FragmentDefinition.php +++ b/packages/graphql-printer/src/Blocks/Document/FragmentDefinition.php @@ -34,7 +34,7 @@ protected function content(Collector $collector, int $level, int $used): string $content = parent::content($collector, $level, $used); // Statistics - if ($content) { + if ($content !== '') { $collector->addUsedType($this->getTypeName($this->getDefinition()->typeCondition)); } diff --git a/packages/graphql-printer/src/Blocks/Document/FragmentDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/FragmentDefinitionTest.php index dd04244cc..1d5603d27 100644 --- a/packages/graphql-printer/src/Blocks/Document/FragmentDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/FragmentDefinitionTest.php @@ -34,7 +34,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new FragmentDefinition($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::fragmentDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/FragmentSpread.php b/packages/graphql-printer/src/Blocks/Document/FragmentSpread.php index dc0f25ce2..8bc1fc6fb 100644 --- a/packages/graphql-printer/src/Blocks/Document/FragmentSpread.php +++ b/packages/graphql-printer/src/Blocks/Document/FragmentSpread.php @@ -49,7 +49,7 @@ protected function content(Collector $collector, int $level, int $used): string $content = parent::content($collector, $level, $used); // Statistics - if ($content && $this->type) { + if ($content !== '' && $this->type !== null) { $collector->addUsedType($this->getTypeName($this->type)); } diff --git a/packages/graphql-printer/src/Blocks/Document/FragmentSpreadTest.php b/packages/graphql-printer/src/Blocks/Document/FragmentSpreadTest.php index 2c23a6757..07282a0cc 100644 --- a/packages/graphql-printer/src/Blocks/Document/FragmentSpreadTest.php +++ b/packages/graphql-printer/src/Blocks/Document/FragmentSpreadTest.php @@ -39,7 +39,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new FragmentSpread($context, $definition, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::fragment($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/InlineFragment.php b/packages/graphql-printer/src/Blocks/Document/InlineFragment.php index 2d8a39560..990fc89c1 100644 --- a/packages/graphql-printer/src/Blocks/Document/InlineFragment.php +++ b/packages/graphql-printer/src/Blocks/Document/InlineFragment.php @@ -36,7 +36,7 @@ public function getName(): string { $name = '...'; $type = $this->getDefinition()->typeCondition->name->value ?? null; - if ($type) { + if ($type !== null) { $space = $this->space(); $name = "{$name}{$space}on{$space}{$type}"; } @@ -55,7 +55,7 @@ protected function content(Collector $collector, int $level, int $used): string $content = parent::content($collector, $level, $used); // Statistics - if ($content && $this->type) { + if ($content !== '' && $this->type !== null) { $collector->addUsedType($this->getTypeName($this->type)); } diff --git a/packages/graphql-printer/src/Blocks/Document/InlineFragmentTest.php b/packages/graphql-printer/src/Blocks/Document/InlineFragmentTest.php index 0443b94f2..101aae4ec 100644 --- a/packages/graphql-printer/src/Blocks/Document/InlineFragmentTest.php +++ b/packages/graphql-printer/src/Blocks/Document/InlineFragmentTest.php @@ -39,7 +39,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new InlineFragment($context, $definition, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::fragment($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/InputObjectTypeDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/InputObjectTypeDefinitionTest.php index 0982fa8af..69399b451 100644 --- a/packages/graphql-printer/src/Blocks/Document/InputObjectTypeDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/InputObjectTypeDefinitionTest.php @@ -34,7 +34,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new InputObjectTypeDefinition($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::inputObjectTypeDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/InputObjectTypeExtensionTest.php b/packages/graphql-printer/src/Blocks/Document/InputObjectTypeExtensionTest.php index ed04bf212..4a3387108 100644 --- a/packages/graphql-printer/src/Blocks/Document/InputObjectTypeExtensionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/InputObjectTypeExtensionTest.php @@ -35,7 +35,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new InputObjectTypeExtension($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::inputObjectTypeExtension($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/InterfaceTypeDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/InterfaceTypeDefinitionTest.php index 5d61846b0..c2e147168 100644 --- a/packages/graphql-printer/src/Blocks/Document/InterfaceTypeDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/InterfaceTypeDefinitionTest.php @@ -34,7 +34,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new InterfaceTypeDefinition($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::interfaceTypeDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/InterfaceTypeExtensionTest.php b/packages/graphql-printer/src/Blocks/Document/InterfaceTypeExtensionTest.php index cf13257ea..82bce4b04 100644 --- a/packages/graphql-printer/src/Blocks/Document/InterfaceTypeExtensionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/InterfaceTypeExtensionTest.php @@ -34,7 +34,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new InterfaceTypeExtension($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::interfaceTypeExtension($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/ObjectTypeDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/ObjectTypeDefinitionTest.php index fc8620513..930df5f4b 100644 --- a/packages/graphql-printer/src/Blocks/Document/ObjectTypeDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/ObjectTypeDefinitionTest.php @@ -34,7 +34,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new ObjectTypeDefinition($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::objectTypeDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/ObjectTypeExtensionTest.php b/packages/graphql-printer/src/Blocks/Document/ObjectTypeExtensionTest.php index 9fd8a770f..458a6700f 100644 --- a/packages/graphql-printer/src/Blocks/Document/ObjectTypeExtensionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/ObjectTypeExtensionTest.php @@ -34,7 +34,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new ObjectTypeExtension($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::objectTypeExtension($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/OperationDefinition.php b/packages/graphql-printer/src/Blocks/Document/OperationDefinition.php index 2cd520097..593ddd6bf 100644 --- a/packages/graphql-printer/src/Blocks/Document/OperationDefinition.php +++ b/packages/graphql-printer/src/Blocks/Document/OperationDefinition.php @@ -47,7 +47,7 @@ protected function content(Collector $collector, int $level, int $used): string $content = parent::content($collector, $level, $used); // Statistics - if ($content && $type) { + if ($content !== '' && $type !== null) { $collector->addUsedType($this->getTypeName($type)); } diff --git a/packages/graphql-printer/src/Blocks/Document/OperationDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/OperationDefinitionTest.php index b8844b358..9279b560a 100644 --- a/packages/graphql-printer/src/Blocks/Document/OperationDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/OperationDefinitionTest.php @@ -38,7 +38,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new OperationDefinition($context, $definition, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::operationDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/ScalarTypeDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/ScalarTypeDefinitionTest.php index 2be371720..60a03dfee 100644 --- a/packages/graphql-printer/src/Blocks/Document/ScalarTypeDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/ScalarTypeDefinitionTest.php @@ -33,7 +33,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new ScalarTypeDefinition($context, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::scalarTypeDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/ScalarTypeExtensionTest.php b/packages/graphql-printer/src/Blocks/Document/ScalarTypeExtensionTest.php index d11d85c63..293235167 100644 --- a/packages/graphql-printer/src/Blocks/Document/ScalarTypeExtensionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/ScalarTypeExtensionTest.php @@ -31,7 +31,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new ScalarTypeExtension($context, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::scalarTypeExtension($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/SchemaDefinition.php b/packages/graphql-printer/src/Blocks/Document/SchemaDefinition.php index c2f397832..5539ec954 100644 --- a/packages/graphql-printer/src/Blocks/Document/SchemaDefinition.php +++ b/packages/graphql-printer/src/Blocks/Document/SchemaDefinition.php @@ -85,7 +85,7 @@ static function (NamedTypeNode|ObjectType $type, string $operation) use ($defaul ARRAY_FILTER_USE_BOTH, ); - return !$nonStandard; + return $nonStandard === []; } /** @@ -106,7 +106,7 @@ private function getOperationsTypes(): array { foreach ($operations as $operation => $type) { $type = $definition->getOperationType($operation); - if ($type) { + if ($type !== null) { $operations[$operation] = $type; } } diff --git a/packages/graphql-printer/src/Blocks/Document/SchemaDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/SchemaDefinitionTest.php index 4285a6a02..3a79288b7 100644 --- a/packages/graphql-printer/src/Blocks/Document/SchemaDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/SchemaDefinitionTest.php @@ -39,7 +39,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new SchemaDefinition($context, $definition))->serialize($collector, $level, $used); - if ($expected && !str_starts_with($actual, '"""')) { + if ($expected !== '' && !str_starts_with($actual, '"""')) { // https://github.com/webonyx/graphql-php/issues/1027 Parser::schemaDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/SchemaExtensionTest.php b/packages/graphql-printer/src/Blocks/Document/SchemaExtensionTest.php index 00fd75d92..fa247a5ab 100644 --- a/packages/graphql-printer/src/Blocks/Document/SchemaExtensionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/SchemaExtensionTest.php @@ -36,7 +36,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new SchemaExtension($context, $node))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::schemaTypeExtension($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/UnionTypeDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/UnionTypeDefinitionTest.php index bfa8786ce..912afdaeb 100644 --- a/packages/graphql-printer/src/Blocks/Document/UnionTypeDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/UnionTypeDefinitionTest.php @@ -35,7 +35,7 @@ public function testSerialize( $context = new Context($settings, null, null); $actual = (new UnionTypeDefinition($context, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::unionTypeDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/UnionTypeExtensionTest.php b/packages/graphql-printer/src/Blocks/Document/UnionTypeExtensionTest.php index 6953b752e..e7dd813e4 100644 --- a/packages/graphql-printer/src/Blocks/Document/UnionTypeExtensionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/UnionTypeExtensionTest.php @@ -35,7 +35,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new UnionTypeExtension($context, $type))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::unionTypeExtension($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/Value.php b/packages/graphql-printer/src/Blocks/Document/Value.php index 9395d4cfd..e51f45cdc 100644 --- a/packages/graphql-printer/src/Blocks/Document/Value.php +++ b/packages/graphql-printer/src/Blocks/Document/Value.php @@ -82,7 +82,7 @@ protected function content(Collector $collector, int $level, int $used): string // Statistics $collector->addUsed($content); - if ($this->type) { + if ($this->type !== null) { $collector->addUsedType($this->getTypeName($this->type)); } diff --git a/packages/graphql-printer/src/Blocks/Document/ValueTest.php b/packages/graphql-printer/src/Blocks/Document/ValueTest.php index 43a1da5da..ea8cff2bf 100644 --- a/packages/graphql-printer/src/Blocks/Document/ValueTest.php +++ b/packages/graphql-printer/src/Blocks/Document/ValueTest.php @@ -52,7 +52,7 @@ public function testSerialize( $actual = (new Value($context, $node, $type))->serialize($collector, $level, $used); $parsed = null; - if ($expected) { + if ($expected !== '') { $parsed = Parser::valueLiteral($actual); } diff --git a/packages/graphql-printer/src/Blocks/Document/VariableDefinition.php b/packages/graphql-printer/src/Blocks/Document/VariableDefinition.php index b455f1e64..99048c8f6 100644 --- a/packages/graphql-printer/src/Blocks/Document/VariableDefinition.php +++ b/packages/graphql-printer/src/Blocks/Document/VariableDefinition.php @@ -37,7 +37,7 @@ protected function type(bool $multiline): ?Block { #[Override] protected function value(bool $multiline): ?Block { $definition = $this->getDefinition(); - $value = $definition->defaultValue + $value = $definition->defaultValue !== null ? new Value($this->getContext(), $definition->defaultValue, $definition->type) : null; diff --git a/packages/graphql-printer/src/Blocks/Document/VariableDefinitionTest.php b/packages/graphql-printer/src/Blocks/Document/VariableDefinitionTest.php index 1052e9512..f8fb9f6e9 100644 --- a/packages/graphql-printer/src/Blocks/Document/VariableDefinitionTest.php +++ b/packages/graphql-printer/src/Blocks/Document/VariableDefinitionTest.php @@ -34,7 +34,7 @@ public function testSerialize( $context = new Context($settings, null, $schema); $actual = (new VariableDefinition($context, $definition))->serialize($collector, $level, $used); - if ($expected) { + if ($expected !== '') { Parser::variableDefinition($actual); } diff --git a/packages/graphql-printer/src/Blocks/ListBlock.php b/packages/graphql-printer/src/Blocks/ListBlock.php index 3f4ca4d0c..eff028145 100644 --- a/packages/graphql-printer/src/Blocks/ListBlock.php +++ b/packages/graphql-printer/src/Blocks/ListBlock.php @@ -135,7 +135,7 @@ protected function content(Collector $collector, int $level, int $used): string $blockContent = $block->serialize($collector, $blockLevel, $used); $blockMultiline = $this->isStringMultiline($blockContent); - if (!$blockContent) { + if ($blockContent === '') { continue; } @@ -160,7 +160,7 @@ protected function content(Collector $collector, int $level, int $used): string } // Empty? - if (!$serialized) { + if ($serialized === []) { return $this->getEmptyValue(); } @@ -196,12 +196,12 @@ protected function content(Collector $collector, int $level, int $used): string } // Prefix & Suffix - if ($prefix) { + if ($prefix !== '') { $prefix = $multiline ? $prefix.$eol : $prefix; $content = "{$prefix}{$content}"; } - if ($suffix) { + if ($suffix !== '') { $indent = $multiline ? $eol.$this->indent($level) : ''; $content .= "{$indent}{$suffix}"; } diff --git a/packages/graphql-printer/src/Blocks/Printer/PrintableList.php b/packages/graphql-printer/src/Blocks/Printer/PrintableList.php index 60fcc97ab..01a557476 100644 --- a/packages/graphql-printer/src/Blocks/Printer/PrintableList.php +++ b/packages/graphql-printer/src/Blocks/Printer/PrintableList.php @@ -68,7 +68,7 @@ protected function getItems(): iterable { protected function content(Collector $collector, int $level, int $used): string { $content = parent::content($collector, $level, $used); - if ($content && $this->isRoot()) { + if ($content !== '' && $this->isRoot()) { $content = "{$this->indent($level)}{$content}"; if ($this->eof) { @@ -131,9 +131,10 @@ public function offsetUnset(mixed $offset): void { } private function offset(?Block $offset): ?string { - return $offset instanceof NamedBlock - ? ($offset->getName() ?: null) - : null; + $offset = $offset instanceof NamedBlock ? $offset->getName() : null; + $offset = $offset !== '' ? $offset : null; + + return $offset; } // } diff --git a/packages/graphql-printer/src/Blocks/Types/DefinitionBlock.php b/packages/graphql-printer/src/Blocks/Types/DefinitionBlock.php index 4eac65622..9cff9582c 100644 --- a/packages/graphql-printer/src/Blocks/Types/DefinitionBlock.php +++ b/packages/graphql-printer/src/Blocks/Types/DefinitionBlock.php @@ -52,12 +52,12 @@ public function __construct( #[Override] public function getName(): string { $name = $this->name(); - $prefix = $this->prefix(); + $prefix = (string) $this->prefix(); - if ($prefix && $name) { + if ($prefix !== '' && $name !== '') { $space = $this->space(); $name = "{$prefix}{$space}{$name}"; - } elseif ($prefix) { + } elseif ($prefix !== '') { $name = $prefix; } else { // empty @@ -95,7 +95,7 @@ protected function content(Collector $collector, int $level, int $used): string // Description $description = $this->description()?->serialize($collector, $level, $used); - if ($description) { + if ($description !== null && $description !== '') { $content .= "{$description}{$eol}{$indent}"; $used = $indentLength; // because new line has started } @@ -108,7 +108,7 @@ protected function content(Collector $collector, int $level, int $used): string // Arguments $arguments = $this->arguments($multiline); - if ($arguments) { + if ($arguments !== null) { $serialized = $arguments->serialize($collector, $level, $used); $content .= $serialized; @@ -124,7 +124,7 @@ protected function content(Collector $collector, int $level, int $used): string $prefix = ":{$space}"; $type = $this->type($multiline); - if ($type) { + if ($type !== null) { $serialized = "{$prefix}{$type->serialize($collector, $level, $used + mb_strlen($prefix))}"; $content .= $serialized; @@ -140,7 +140,7 @@ protected function content(Collector $collector, int $level, int $used): string $prefix = "{$space}={$space}"; $value = $this->value($multiline); - if ($value) { + if ($value !== null) { $serialized = "{$prefix}{$value->serialize($collector, $level, $used + mb_strlen($prefix))}"; $content .= $serialized; @@ -154,10 +154,8 @@ protected function content(Collector $collector, int $level, int $used): string // Body $body = $this->body($multiline); - $serialized = $body - ? $body->serialize($collector, $level, $used + $spaceLength) - : ''; - $hasBody = $body && $serialized !== ''; + $serialized = (string) $body?->serialize($collector, $level, $used + $spaceLength); + $hasBody = $body !== null && $serialized !== ''; if ($hasBody) { if ($multiline || ($body instanceof UsageList && $this->isStringMultiline($serialized))) { @@ -178,10 +176,8 @@ protected function content(Collector $collector, int $level, int $used): string $directives = $this->getSettings()->isPrintDirectives() ? $this->directives($multiline) : null; - $serialized = $directives - ? $directives->serialize($collector, $level, $indentLength) - : ''; - $hasDirectives = $directives && $serialized !== ''; + $serialized = (string) $directives?->serialize($collector, $level, $indentLength); + $hasDirectives = $directives !== null && $serialized !== ''; if ($hasDirectives) { $multiline = true; @@ -192,11 +188,9 @@ protected function content(Collector $collector, int $level, int $used): string // Fields $prefix = $space; $fields = $this->fields($multiline); - $serialized = $fields - ? $fields->serialize($collector, $level, $used) - : ''; + $serialized = (string) $fields?->serialize($collector, $level, $used); - if ($fields && $serialized !== '') { + if ($fields !== null && $serialized !== '') { if ($multiline && ($hasBody || $hasDirectives)) { $content .= "{$eol}{$indent}{$serialized}"; } else { @@ -208,7 +202,7 @@ protected function content(Collector $collector, int $level, int $used): string if (!($this instanceof ExtensionDefinitionBlock) && !($this instanceof ExecutableDefinitionBlock)) { $name = $this->name(); - if ($name) { + if ($name !== '') { if ($this instanceof DirectiveDefinition) { $collector->addUsedDirective($name); } elseif ($this instanceof TypeDefinitionBlock) { @@ -358,7 +352,7 @@ protected function getDefinitionDirectives(): NodeList { ? $definition->extensionASTNodes : []; - foreach ($astExtensionNodes ?: [] as $astExtensionNode) { + foreach ($astExtensionNodes as $astExtensionNode) { $directives = $directives->merge($astExtensionNode->directives ?? []); } diff --git a/packages/graphql-printer/src/Blocks/Types/DescriptionBlockTest.php b/packages/graphql-printer/src/Blocks/Types/DescriptionBlockTest.php index 6223e294d..78f88ea6a 100644 --- a/packages/graphql-printer/src/Blocks/Types/DescriptionBlockTest.php +++ b/packages/graphql-printer/src/Blocks/Types/DescriptionBlockTest.php @@ -34,7 +34,7 @@ public function testSerialize( self::assertEquals($expected, $actual); - if ($expected) { + if ($expected !== '') { Parser::valueLiteral($actual); } } diff --git a/packages/graphql-printer/src/Blocks/Types/UsageList.php b/packages/graphql-printer/src/Blocks/Types/UsageList.php index b6084207e..a67e823c5 100644 --- a/packages/graphql-printer/src/Blocks/Types/UsageList.php +++ b/packages/graphql-printer/src/Blocks/Types/UsageList.php @@ -56,15 +56,15 @@ protected function content(Collector $collector, int $level, int $used): string $used = $used + mb_strlen("{$prefix}{$space}"); $content = parent::content($collector, $level, $used); - if ($content) { + if ($content !== '') { if ($this->isAlwaysMultiline() || $this->isStringMultiline($content)) { $eol = $this->eol(); $indent = $this->indent($level); - if ($prefix) { + if ($prefix !== '') { $content = "{$prefix}{$eol}{$indent}{$content}"; } - } elseif ($prefix) { + } elseif ($prefix !== '') { $content = "{$prefix}{$space}{$content}"; } else { // empty diff --git a/packages/graphql-printer/src/Blocks/Values/ObjectValue.php b/packages/graphql-printer/src/Blocks/Values/ObjectValue.php index debec93ad..a138ee08f 100644 --- a/packages/graphql-printer/src/Blocks/Values/ObjectValue.php +++ b/packages/graphql-printer/src/Blocks/Values/ObjectValue.php @@ -54,7 +54,7 @@ protected function isNormalized(): bool { #[Override] protected function block(string|int $key, mixed $item): Block { $name = $item->name->value; - $type = $this->type + $type = $this->type !== null ? $this->getContext()->getField($this->type, $name)?->getType() : null; diff --git a/packages/graphql-printer/src/Blocks/Values/StringValue.php b/packages/graphql-printer/src/Blocks/Values/StringValue.php index 2f1cdda7e..9e00b5b2f 100644 --- a/packages/graphql-printer/src/Blocks/Values/StringValue.php +++ b/packages/graphql-printer/src/Blocks/Values/StringValue.php @@ -44,7 +44,7 @@ protected function content(Collector $collector, int $level, int $used): string $content = $this->getString(); // Whitespace only? (it cannot be rendered as BlockString) - if (preg_match('/^\h+$/u', $content)) { + if (preg_match('/^\h+$/u', $content) > 0) { return json_encode($content, JSON_THROW_ON_ERROR); } diff --git a/packages/graphql-printer/src/Misc/Context.php b/packages/graphql-printer/src/Misc/Context.php index 1684dfa1b..0f55a2e97 100644 --- a/packages/graphql-printer/src/Misc/Context.php +++ b/packages/graphql-printer/src/Misc/Context.php @@ -102,7 +102,7 @@ public function getOperationsDefaultTypes(): array { public function getOperationType(string $operation): (Type&NamedType)|null { $type = $this->getSchema()?->getOperationType($operation); - if (!$type && $this->getSchema()) { + if ($type === null && $this->getSchema() !== null) { throw new TypeNotFound($operation); } @@ -122,7 +122,7 @@ public function getTypes(): array { public function getType(string $name): (Type&NamedType)|null { $type = $this->getSchema()?->getType($name); - if (!$type && $this->getSchema()) { + if ($type === null && $this->getSchema() !== null) { throw new TypeNotFound($name); } @@ -131,7 +131,7 @@ public function getType(string $name): (Type&NamedType)|null { public function isTypeAllowed(string $type): bool { // Schema? - if (!$this->getSchema()) { + if ($this->getSchema() === null) { return true; } @@ -233,7 +233,7 @@ public function getDirective(string $name): DirectiveDefinitionNode|Directive|nu $directive = $this->getSchema()?->getDirective($name) ?? $this->getDirectiveResolver()?->getDefinition($name); - if (!$directive && $this->getSchema()) { + if ($directive === null && $this->getSchema() !== null) { throw new DirectiveDefinitionNotFound($name); } @@ -316,7 +316,7 @@ public function getDirectiveArgument(DirectiveNode $object, string $name): Input // empty } - if ($this->getSchema() && !$argument) { + if ($argument === null && $this->getSchema() !== null) { throw new DirectiveArgumentNotFound("@{$directive}", $name); } @@ -335,7 +335,7 @@ public function getField((TypeNode&Node)|Type $object, string $name): InputObjec $field = $definition->findField($name); } - if ($this->getSchema() && !$field) { + if ($field === null && $this->getSchema() !== null) { throw new FieldNotFound($type, $name); } @@ -355,7 +355,7 @@ public function getFieldArgument((TypeNode&Node)|Type $object, string $field, st } } - if ($this->getSchema() && !$argument) { + if ($argument === null && $this->getSchema() !== null) { throw new FieldArgumentNotFound($this->getTypeName($object), $field, $name); } diff --git a/packages/graphql-printer/src/Printer.php b/packages/graphql-printer/src/Printer.php index 4e79e768a..e1e7b59de 100644 --- a/packages/graphql-printer/src/Printer.php +++ b/packages/graphql-printer/src/Printer.php @@ -202,7 +202,7 @@ protected function process( if ($directives) { $directive = $context->getDirective(mb_substr($name, 1)); - if ($directive) { + if ($directive !== null) { $block = $this->getBlock($context, $directive); $printed[$name] = true; } @@ -210,14 +210,14 @@ protected function process( } else { $type = $context->getType($name); - if ($type) { + if ($type !== null) { $block = $this->getBlock($context, $type); $printed[$name] = true; } } // Stack - if ($block && !isset($output[$block]) && !isset($root[$block])) { + if ($block !== null && !isset($output[$block]) && !isset($root[$block])) { $statistics = new Collector(); $output[] = $this->analyze($statistics, $block, $level, $used); $statistics = $collector->addUsed($statistics); diff --git a/packages/graphql-printer/src/PrinterTest.php b/packages/graphql-printer/src/PrinterTest.php index fc5bcc312..ea665655d 100644 --- a/packages/graphql-printer/src/PrinterTest.php +++ b/packages/graphql-printer/src/PrinterTest.php @@ -54,7 +54,7 @@ public function testPrint( ): void { $schema = $schemaFactory($this); $printer = new Printer($settings, null, $schema); - $type = $typeFactory ? $typeFactory($this, $schema) : null; + $type = $typeFactory !== null ? $typeFactory($this, $schema) : null; $printable = $printableFactory($this, $schema); $actual = $printer->print($printable, $level, $used, $type); @@ -83,7 +83,7 @@ public function testExport( ): void { $schema = $schemaFactory($this); $printer = new Printer($settings, null, $schema); - $type = $typeFactory ? $typeFactory($this, $schema) : null; + $type = $typeFactory !== null ? $typeFactory($this, $schema) : null; $exportable = $exportableFactory($this, $schema); $actual = $printer->export($exportable, $level, $used, $type); diff --git a/packages/graphql/UPGRADE.md b/packages/graphql/UPGRADE.md index 2b169d921..576e145e8 100644 --- a/packages/graphql/UPGRADE.md +++ b/packages/graphql/UPGRADE.md @@ -60,6 +60,8 @@ Please also see [changelog](https://github.com/LastDragon-ru/lara-asp/releases) } ``` +* [`GraphQLAssertions`][code-links/a6029821bb9d8f2e] methods updated to allow `null` for `$message` argument. + ## API This section is actual only if you are extending the package. Please review and update (listed the most significant changes only): diff --git a/packages/graphql/src/Builder/BuilderInfoDetector.php b/packages/graphql/src/Builder/BuilderInfoDetector.php index 4e9fd1d5f..f3b846bb9 100644 --- a/packages/graphql/src/Builder/BuilderInfoDetector.php +++ b/packages/graphql/src/Builder/BuilderInfoDetector.php @@ -85,7 +85,7 @@ protected function getSourceBuilderInfo( $reason = $exception; } - if (!$builder) { + if ($builder === null) { throw new BuilderUnknown($source, $reason); } @@ -133,7 +133,7 @@ static function (Directive $directive): bool { ); $directive = reset($directives); - if ($directive) { + if ($directive instanceof Directive) { $type = null; if ($directive instanceof PaginateDirective) { @@ -176,7 +176,7 @@ public function isArgument(BaseDirective $directive, string $argument): bool { $resolver = $directive->getResolverFromArgument($argument); $return = $this->getCallableReturnType($resolver); - if ($return) { + if ($return !== null) { $type = $return; } @@ -204,7 +204,7 @@ private function getCallableReturnType(Closure $resolver): ?string { $return = $return instanceof ReflectionNamedType ? $return->getName() : null; - $return = $return && class_exists($return) + $return = $return !== null && class_exists($return) ? $return : null; diff --git a/packages/graphql/src/Builder/Defaults/BuilderFieldResolver.php b/packages/graphql/src/Builder/Defaults/BuilderFieldResolver.php index 19fdc736a..bea323f62 100644 --- a/packages/graphql/src/Builder/Defaults/BuilderFieldResolver.php +++ b/packages/graphql/src/Builder/Defaults/BuilderFieldResolver.php @@ -23,7 +23,7 @@ public function __construct( #[Override] public function getField(object $builder, Field $field): string { - return $builder instanceof ScoutBuilder && $this->resolver + return $builder instanceof ScoutBuilder && $this->resolver !== null ? $this->resolver->getField($builder->model, new Property(...$field->getPath())) : implode('.', $field->getPath()); } diff --git a/packages/graphql/src/Builder/Directives/HandlerDirective.php b/packages/graphql/src/Builder/Directives/HandlerDirective.php index bbabe1c2c..3fe25e882 100644 --- a/packages/graphql/src/Builder/Directives/HandlerDirective.php +++ b/packages/graphql/src/Builder/Directives/HandlerDirective.php @@ -44,7 +44,6 @@ use function array_map; use function count; use function is_array; -use function reset; /** * @see HandlerContextBuilderInfo @@ -201,7 +200,7 @@ protected function call( $field = $field->getChild($name); $value = $argument; - $op = reset($operators); + $op = $operators[0] ?? null; if (count($operators) > 1) { throw new ConditionTooManyOperators( @@ -216,7 +215,7 @@ static function (Operator $operator): string { } // Operator? - if (!$op || !$value) { + if ($op === null || $value === null) { throw new ConditionEmpty(); } @@ -287,17 +286,17 @@ protected function getArgumentTypeDefinitionNode( $provider = $context->get(HandlerContextOperators::class)?->value; $operator = $provider?->getOperator($manipulator, $operator, $argument, $context); - if (!$operator) { + if ($operator === null) { return null; } // Type - $definition = $context->get(HandlerContextImplicit::class)?->value + $definition = $context->get(HandlerContextImplicit::class)?->value === true ? $manipulator->getTypeDefinition($manipulator->getOriginType($argument->getField())) : $argument->getTypeDefinition(); $source = $manipulator->getTypeSource($definition); $type = $operator->getFieldType($manipulator, $source, $context); - $type = $type ? Parser::typeReference($type) : null; + $type = $type !== null ? Parser::typeReference($type) : null; return $type; } diff --git a/packages/graphql/src/Builder/Directives/OperatorDirective.php b/packages/graphql/src/Builder/Directives/OperatorDirective.php index 3c6e4c663..00f386fce 100644 --- a/packages/graphql/src/Builder/Directives/OperatorDirective.php +++ b/packages/graphql/src/Builder/Directives/OperatorDirective.php @@ -72,7 +72,7 @@ public function isAvailable(TypeProvider $provider, TypeSource $source, Context // Builder? $builder = $context->get(HandlerContextBuilderInfo::class)?->value->getBuilder(); - if (!$builder || !$this->isBuilderSupported($builder)) { + if ($builder === null || !$this->isBuilderSupported($builder)) { return false; } diff --git a/packages/graphql/src/Builder/Exceptions/BuilderUnknown.php b/packages/graphql/src/Builder/Exceptions/BuilderUnknown.php index 81ce10d68..8d490b87f 100644 --- a/packages/graphql/src/Builder/Exceptions/BuilderUnknown.php +++ b/packages/graphql/src/Builder/Exceptions/BuilderUnknown.php @@ -15,7 +15,7 @@ public function __construct( parent::__construct( sprintf( 'Impossible to determine builder type for `%s`.', - $this->source ?: 'null', + $this->source ?? 'null', ), $previous, ); diff --git a/packages/graphql/src/Builder/Field.php b/packages/graphql/src/Builder/Field.php index c35aeb109..b6c1b7729 100644 --- a/packages/graphql/src/Builder/Field.php +++ b/packages/graphql/src/Builder/Field.php @@ -19,7 +19,7 @@ final public function __construct( } public function getName(): string { - return end($this->path) ?: ''; + return (string) end($this->path); } /** diff --git a/packages/graphql/src/Builder/Manipulator.php b/packages/graphql/src/Builder/Manipulator.php index 1675ea208..912fa0489 100644 --- a/packages/graphql/src/Builder/Manipulator.php +++ b/packages/graphql/src/Builder/Manipulator.php @@ -76,7 +76,7 @@ public function getType(string $definition, TypeSource $source, Context $context // Create new $node = $instance->getTypeDefinition($this, $source, $context, $name); - if (!$node) { + if ($node === null) { throw new TypeDefinitionImpossibleToCreateType($definition, $source, $context); } @@ -132,7 +132,7 @@ public function getOperatorDirective( // Operators? $provider = $context->get(HandlerContextOperators::class)?->value; - if (!$provider) { + if ($provider === null) { return null; } @@ -143,7 +143,7 @@ public function getOperatorDirective( foreach ($directives as $directive) { $directive = $provider->getOperator($this, $directive, $source, $context); - if ($directive) { + if ($directive !== null) { $instance = $directive; break; } @@ -181,12 +181,12 @@ public function getOperatorField( // Type? $type = $operator->getFieldType($this, $source, $context); - if (!$type) { + if ($type === null) { throw new OperatorImpossibleToCreateField($operator, $source, $context); } // Definition - $field = $field ?: $operator::getName(); + $field ??= $operator::getName(); $directives = implode( "\n", array_map( @@ -194,8 +194,9 @@ public function getOperatorField( $directives, ), ); - $description = $description ?: $operator->getFieldDescription(); - $description = BlockString::print((string) $description); + $description = BlockString::print( + (string) ($description ?? $operator->getFieldDescription()), + ); return <<findOperators($manipulator, $type, $level + 1, $processed); } diff --git a/packages/graphql/src/Builder/Traits/BuilderHelperFactory.php b/packages/graphql/src/Builder/Traits/BuilderHelperFactory.php index baa2dc346..f701a0197 100644 --- a/packages/graphql/src/Builder/Traits/BuilderHelperFactory.php +++ b/packages/graphql/src/Builder/Traits/BuilderHelperFactory.php @@ -49,7 +49,7 @@ private function getHelper(object|string $builder): ?object { if (!array_key_exists($builder, $this->instances)) { $class = $this->getHelperClass($builder); - $this->instances[$builder] = $class + $this->instances[$builder] = $class !== null ? $this->getContainerResolver()->getInstance()->make($class) : null; } diff --git a/packages/graphql/src/Builder/Types/InputObject.php b/packages/graphql/src/Builder/Types/InputObject.php index 14f06b625..d2faf4d0a 100644 --- a/packages/graphql/src/Builder/Types/InputObject.php +++ b/packages/graphql/src/Builder/Types/InputObject.php @@ -39,7 +39,6 @@ use function count; use function is_a; use function is_string; -use function reset; use function trim; abstract class InputObject implements TypeDefinition { @@ -110,7 +109,7 @@ public function getTypeDefinition( // Add $fieldDefinition = $this->getFieldDefinition($manipulator, $fieldSource, $context); - if ($fieldDefinition) { + if ($fieldDefinition !== null) { $definition->fields[] = $fieldDefinition; } } @@ -137,7 +136,7 @@ protected function getOperators( ): array { $type = $this->getTypeForOperators(); $provider = $context->get(HandlerContextOperators::class)?->value; - $operators = $type && $provider + $operators = $type !== null && $provider !== null ? $provider->getOperators($manipulator, $type, $source, $context) : []; @@ -182,7 +181,7 @@ protected function isFieldConvertable( } // Convertable? - $convertable = $context->get(HandlerContextImplicit::class)?->value + $convertable = $context->get(HandlerContextImplicit::class)?->value === true ? $this->isFieldConvertableImplicit($manipulator, $field, $context) : $this->isFieldConvertableExplicit($manipulator, $field, $context); @@ -221,19 +220,19 @@ protected function isFieldConvertableImplicit( // Operator? $operator = $this->getFieldOperatorDirective($manipulator, $field, $context, $this->getFieldMarkerOperator()); - if ($operator) { + if ($operator !== null) { return true; } // Resolver? $resolver = $manipulator->getDirective($field->getField(), FieldResolver::class); - if ($resolver && !$this->isFieldConvertableResolver($manipulator, $field, $context, $resolver)) { + if ($resolver !== null && !$this->isFieldConvertableResolver($manipulator, $field, $context, $resolver)) { return false; } // Object/Arguments allowed only if Resolver defined and convertable - if (($field->hasArguments() || $field->isObject()) && !$resolver) { + if (($field->hasArguments() || $field->isObject()) && $resolver === null) { return false; } @@ -264,7 +263,7 @@ protected function isFieldConvertableIgnored( // Marker? $marker = $this->getFieldMarkerIgnored(); - if (!$marker) { + if ($marker === null) { return false; } @@ -306,7 +305,7 @@ protected function getFieldDefinition( // Operator? $operator = $this->getFieldOperator($manipulator, $field, $context); - if (!$operator) { + if ($operator === null) { return null; } @@ -333,13 +332,13 @@ protected function getFieldOperator( ): ?Operator { $operator = $this->getFieldOperatorDirective($manipulator, $field, $context, $this->getFieldMarkerOperator()); - if (!$operator) { + if ($operator === null) { $type = $this->getTypeForFieldOperator(); $provider = $context->get(HandlerContextOperators::class)?->value; - if ($type && $provider) { + if ($type !== null && $provider !== null) { $operators = $provider->getOperators($manipulator, $type, $field, $context); - $operator = reset($operators) ?: null; + $operator = $operators[0] ?? null; } } @@ -366,7 +365,7 @@ protected function getFieldOperatorDirective( foreach ($nodes as $node) { $operator = $manipulator->getOperatorDirective($node, $directive, $field, $context); - if ($operator) { + if ($operator !== null) { break; } } @@ -390,8 +389,9 @@ protected function getFieldDescription( $description = $description->value; } - if ($description) { - $description = trim($description) ?: null; + if ($description !== null) { + $description = trim($description); + $description = $description !== '' ? $description : null; } return $description; @@ -411,7 +411,7 @@ protected function getFieldDirectives( if ($this->isFieldDirectiveAllowed($manipulator, $field, $context, $directive)) { $node = $manipulator->getDirectiveNode($directive); - if ($node) { + if ($node !== null) { $directives[] = $node; } } @@ -428,7 +428,7 @@ protected function isFieldDirectiveAllowed( ): bool { // Explicit type is an `input` and we are expecting this type was created // for the directive, so all field's directives are allowed. - if (!$context->get(HandlerContextImplicit::class)?->value) { + if (!($context->get(HandlerContextImplicit::class)?->value === true)) { if ($directive instanceof Operator) { return is_a($directive, $this->getFieldMarkerOperator()); } diff --git a/packages/graphql/src/Printer/DirectiveResolver.php b/packages/graphql/src/Printer/DirectiveResolver.php index b5613b52f..58417c0aa 100644 --- a/packages/graphql/src/Printer/DirectiveResolver.php +++ b/packages/graphql/src/Printer/DirectiveResolver.php @@ -54,7 +54,7 @@ public function getDefinition(string $name): DirectiveDefinitionNode|GraphQLDire $directive = null; $class = $this->getDirectiveClass($name); - if ($class) { + if ($class !== null) { $document = Parser::parse($class::definition()); foreach ($document->definitions as $definition) { @@ -120,7 +120,7 @@ private function registerDirectiveType(TypeDefinitionNode&Node $definition): voi } } - if ($type) { + if ($type !== null) { $this->registry->register($type); } } diff --git a/packages/graphql/src/Printer/PrinterTest.php b/packages/graphql/src/Printer/PrinterTest.php index 070ee8f3d..a88458ffc 100644 --- a/packages/graphql/src/Printer/PrinterTest.php +++ b/packages/graphql/src/Printer/PrinterTest.php @@ -65,7 +65,7 @@ public function testPrint( $schema = $schemaFactory($this); $schema = $this->useGraphQLSchema($schema)->getGraphQLSchema(); $printer = $this->app()->make(Printer::class)->setSettings($settings); - $type = $typeFactory ? $typeFactory($this, $schema) : null; + $type = $typeFactory !== null ? $typeFactory($this, $schema) : null; $printable = $printableFactory($this, $schema); $actual = $printer->print($printable, $level, $used, $type); @@ -92,7 +92,7 @@ public function testExport( $schema = $schemaFactory($this); $schema = $this->useGraphQLSchema($schema)->getGraphQLSchema(); $printer = $this->app()->make(Printer::class)->setSettings($settings); - $type = $typeFactory ? $typeFactory($this, $schema) : null; + $type = $typeFactory !== null ? $typeFactory($this, $schema) : null; $exportable = $exportableFactory($this, $schema); $actual = $printer->export($exportable, $level, $used, $type); diff --git a/packages/graphql/src/SearchBy/Directives/Directive.php b/packages/graphql/src/SearchBy/Directives/Directive.php index 0edfcd2e5..2ce2a04bb 100644 --- a/packages/graphql/src/SearchBy/Directives/Directive.php +++ b/packages/graphql/src/SearchBy/Directives/Directive.php @@ -68,7 +68,7 @@ protected function getArgDefinitionType( ): ListTypeNode|NamedTypeNode|NonNullTypeNode { $type = $this->getArgumentTypeDefinitionNode($manipulator, $document, $argument, $context, Root::class); - if (!$type) { + if ($type === null) { throw new FailedToCreateSearchCondition($argument); } diff --git a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php index a3b961704..8465e4190 100644 --- a/packages/graphql/src/SearchBy/Directives/DirectiveTest.php +++ b/packages/graphql/src/SearchBy/Directives/DirectiveTest.php @@ -104,7 +104,7 @@ protected function getPackageProviders(mixed $app): array { */ #[DataProvider('dataProviderManipulateArgDefinition')] public function testManipulateArgDefinition(string $expected, string $graphql, ?Closure $prepare = null): void { - if ($prepare) { + if ($prepare !== null) { $prepare($this); } @@ -427,7 +427,7 @@ public function testHandleScoutBuilder( $this->app()->make(DirectiveLocator::class) ->setResolved('search', SearchDirective::class); - if ($resolver) { + if ($resolver !== null) { $this->override( BuilderFieldResolver::class, static function (MockInterface $mock) use ($resolver): void { @@ -440,7 +440,7 @@ static function (MockInterface $mock) use ($resolver): void { ); } - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } @@ -505,7 +505,7 @@ public function testHandleScoutBuilderV5Compat( $this->app()->make(DirectiveLocator::class) ->setResolved('search', SearchDirective::class); - if ($resolver) { + if ($resolver !== null) { $this->override( BuilderFieldResolver::class, static function (MockInterface $mock) use ($resolver): void { @@ -518,7 +518,7 @@ static function (MockInterface $mock) use ($resolver): void { ); } - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php index 129b0154c..593fa9d42 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/EqualTest.php @@ -81,7 +81,7 @@ public function testCallScoutBuilder( ?Closure $resolver, ?Closure $fieldResolver, ): void { - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php index 2fb887d90..f7f14ec17 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/InTest.php @@ -81,7 +81,7 @@ public function testCallScoutBuilder( ?Closure $resolver, ?Closure $fieldResolver = null, ): void { - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } diff --git a/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php b/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php index faabd7934..0175616ed 100644 --- a/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php +++ b/packages/graphql/src/SearchBy/Operators/Comparison/NotInTest.php @@ -84,7 +84,7 @@ public function testCallScoutBuilder( ?Closure $fieldResolver, ): void { // Prepare - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } diff --git a/packages/graphql/src/SearchBy/Operators/Complex/Relationship.php b/packages/graphql/src/SearchBy/Operators/Complex/Relationship.php index 794c314f5..0c35881be 100644 --- a/packages/graphql/src/SearchBy/Operators/Complex/Relationship.php +++ b/packages/graphql/src/SearchBy/Operators/Complex/Relationship.php @@ -129,7 +129,7 @@ public function call( $operator, $count, static function (EloquentBuilder $builder) use ($context, $relation, $handler, $alias, $has): void { - if (!$alias || $alias === $relation->getRelationCountHash(false)) { + if ($alias === '' || $alias === $relation->getRelationCountHash(false)) { $alias = $builder->getModel()->getTable(); } diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php b/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php index 5dccf66b6..c15b0c340 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AllOf.php @@ -31,7 +31,7 @@ public function getFieldDescription(): ?string { #[Override] public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): ?string { $parent = parent::getFieldType($provider, $source, $context); - $type = $parent ? "[{$parent}!]" : null; + $type = $parent !== null ? "[{$parent}!]" : null; return $type; } diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php b/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php index f98442509..cc6dfb515 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AllOfTest.php @@ -83,7 +83,7 @@ public function testCallScoutBuilder( ?Closure $resolver, ?Closure $fieldResolver, ): void { - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } diff --git a/packages/graphql/src/SearchBy/Operators/Logical/AnyOf.php b/packages/graphql/src/SearchBy/Operators/Logical/AnyOf.php index 2242b1ad9..047241f0f 100644 --- a/packages/graphql/src/SearchBy/Operators/Logical/AnyOf.php +++ b/packages/graphql/src/SearchBy/Operators/Logical/AnyOf.php @@ -24,7 +24,7 @@ public function getFieldDescription(): ?string { #[Override] public function getFieldType(TypeProvider $provider, TypeSource $source, Context $context): ?string { $parent = parent::getFieldType($provider, $source, $context); - $type = $parent ? "[{$parent}!]" : null; + $type = $parent !== null ? "[{$parent}!]" : null; return $type; } diff --git a/packages/graphql/src/SearchBy/Types/Enumeration.php b/packages/graphql/src/SearchBy/Types/Enumeration.php index d194fea53..64cab7419 100644 --- a/packages/graphql/src/SearchBy/Types/Enumeration.php +++ b/packages/graphql/src/SearchBy/Types/Enumeration.php @@ -47,16 +47,19 @@ public function getTypeDefinition( // Operators? $provider = $context->get(HandlerContextOperators::class)?->value; - if (!$provider) { + if ($provider === null) { return null; } // Operators $type = $manipulator->getTypeSource($source->getType()); - $operators = $provider->getOperators($manipulator, $type->getTypeName(), $type, $context) - ?: $provider->getOperators($manipulator, Operators::Enum, $type, $context); + $operators = $provider->getOperators($manipulator, $type->getTypeName(), $type, $context); - if (!$operators) { + if ($operators === []) { + $operators = $provider->getOperators($manipulator, Operators::Enum, $type, $context); + } + + if ($operators === []) { return null; } diff --git a/packages/graphql/src/SearchBy/Types/Scalar.php b/packages/graphql/src/SearchBy/Types/Scalar.php index e795531fa..0237915a9 100644 --- a/packages/graphql/src/SearchBy/Types/Scalar.php +++ b/packages/graphql/src/SearchBy/Types/Scalar.php @@ -47,7 +47,7 @@ public function getTypeDefinition( // Operators? $provider = $context->get(HandlerContextOperators::class)?->value; - if (!$provider) { + if ($provider === null) { return null; } @@ -55,7 +55,7 @@ public function getTypeDefinition( $type = $manipulator->getTypeSource($source->getType()); $operators = $provider->getOperators($manipulator, $type->getTypeName(), $type, $context); - if (!$operators) { + if ($operators === []) { return null; } diff --git a/packages/graphql/src/SortBy/Directives/Directive.php b/packages/graphql/src/SortBy/Directives/Directive.php index 8678a73b6..4cf97afc7 100644 --- a/packages/graphql/src/SortBy/Directives/Directive.php +++ b/packages/graphql/src/SortBy/Directives/Directive.php @@ -65,7 +65,7 @@ protected function getArgDefinitionType( ): ListTypeNode|NamedTypeNode|NonNullTypeNode { $type = $this->getArgumentTypeDefinitionNode($manipulator, $document, $argument, $context, Root::class); - if (!$type) { + if ($type === null) { throw new FailedToCreateSortClause($argument); } diff --git a/packages/graphql/src/SortBy/Directives/DirectiveTest.php b/packages/graphql/src/SortBy/Directives/DirectiveTest.php index 06052218e..8d1a22b1a 100644 --- a/packages/graphql/src/SortBy/Directives/DirectiveTest.php +++ b/packages/graphql/src/SortBy/Directives/DirectiveTest.php @@ -89,7 +89,7 @@ protected function getPackageProviders(mixed $app): array { */ #[DataProvider('dataProviderManipulateArgDefinition')] public function testManipulateArgDefinition(string $expected, string $graphql, ?Closure $prepare = null): void { - if ($prepare) { + if ($prepare !== null) { $prepare($this); } @@ -192,7 +192,7 @@ public function testDirective( mixed $value, ?Closure $prepare = null, ): void { - if ($prepare) { + if ($prepare !== null) { $prepare($this); } @@ -253,7 +253,7 @@ public function testDirectiveV5Compat( $this->app()->bind(Root::class, V5::class); $this->app()->bind(Clause::class, V5::class); - if ($prepare) { + if ($prepare !== null) { $prepare($this); } @@ -309,7 +309,7 @@ public function testHandleBuilder( mixed $value, ?Closure $prepare = null, ): void { - if ($prepare) { + if ($prepare !== null) { $prepare($this); } @@ -371,7 +371,7 @@ public function testHandleBuilderV5Compat( $this->app()->bind(Root::class, V5::class); $this->app()->bind(Clause::class, V5::class); - if ($prepare) { + if ($prepare !== null) { $prepare($this); } @@ -437,7 +437,7 @@ public function testHandleScoutBuilder( $this->app()->make(DirectiveLocator::class) ->setResolved('search', SearchDirective::class); - if ($resolver) { + if ($resolver !== null) { $this->override( BuilderFieldResolver::class, static function (MockInterface $mock) use ($resolver): void { @@ -450,7 +450,7 @@ static function (MockInterface $mock) use ($resolver): void { ); } - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } @@ -515,7 +515,7 @@ public function testHandleScoutBuilderV5Compat( $this->app()->make(DirectiveLocator::class) ->setResolved('search', SearchDirective::class); - if ($resolver) { + if ($resolver !== null) { $this->override( BuilderFieldResolver::class, static function (MockInterface $mock) use ($resolver): void { @@ -528,7 +528,7 @@ static function (MockInterface $mock) use ($resolver): void { ); } - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } diff --git a/packages/graphql/src/SortBy/Operators/Sort.php b/packages/graphql/src/SortBy/Operators/Sort.php index 21b59798e..ceb8b259a 100644 --- a/packages/graphql/src/SortBy/Operators/Sort.php +++ b/packages/graphql/src/SortBy/Operators/Sort.php @@ -79,7 +79,7 @@ public function call( ): object { $sorter = $this->factory->create($builder); - if ($sorter) { + if ($sorter !== null) { $direction = $argument->value instanceof Direction ? $argument->value : Direction::Asc; $nulls = $this->getNulls($sorter, $context, $direction); diff --git a/packages/graphql/src/SortBy/Sorters/DatabaseSorter.php b/packages/graphql/src/SortBy/Sorters/DatabaseSorter.php index beb6cf476..7c9c4f9bb 100644 --- a/packages/graphql/src/SortBy/Sorters/DatabaseSorter.php +++ b/packages/graphql/src/SortBy/Sorters/DatabaseSorter.php @@ -93,7 +93,7 @@ protected function sortByColumn( $query = $builder instanceof EloquentBuilder ? $builder->getQuery() : $builder; $columns = $query->columns ?? []; - if (!$columns) { + if ($columns === []) { $builder->addSelect('*'); } diff --git a/packages/graphql/src/SortBy/Sorters/EloquentSorter.php b/packages/graphql/src/SortBy/Sorters/EloquentSorter.php index b61e2a260..907f8cf65 100644 --- a/packages/graphql/src/SortBy/Sorters/EloquentSorter.php +++ b/packages/graphql/src/SortBy/Sorters/EloquentSorter.php @@ -33,7 +33,7 @@ public function sort(object $builder, Field $field, Direction $direction, ?Nulls // Column $relation = $field->getParent()->getPath(); - if ($relation) { + if ($relation !== []) { $column = $field->getName(); $column = $this->getRelationColumn($builder, $relation, $column, $direction); } else { @@ -126,7 +126,7 @@ protected function joinRelation( $currentAlias, "{$currentAlias}.{$relation->getOwnerKeyName()}", '=', - $parentAlias + $parentAlias !== '' ? "{$parentAlias}.{$relation->getForeignKeyName()}" : $relation->getQualifiedForeignKeyName(), ); @@ -138,7 +138,7 @@ static function (JoinClause $join) use ($relation, $currentAlias, $parentAlias): $join->on( "{$currentAlias}.{$relation->getForeignKeyName()}", '=', - $parentAlias + $parentAlias !== '' ? "{$parentAlias}.{$relation->getLocalKeyName()}" : $relation->getQualifiedParentKeyName(), ); @@ -155,7 +155,7 @@ static function (JoinClause $join) use ($relation, $currentAlias, $parentAlias): $currentAlias, "{$currentAlias}.{$relation->getForeignKeyName()}", '=', - $parentAlias + $parentAlias !== '' ? "{$parentAlias}.{$relation->getLocalKeyName()}" : $relation->getQualifiedParentKeyName(), ); @@ -173,7 +173,7 @@ class_exists(HasOneOrManyThrough::class) && $relation instanceof HasOneOrManyThr $currentAlias, "{$currentAlias}.{$currentAlias}_key", '=', - $parentAlias + $parentAlias !== '' ? "{$parentAlias}.{$relation->getLocalKeyName()}" : $relation->getQualifiedLocalKeyName(), ); @@ -183,7 +183,7 @@ class_exists(HasOneOrManyThrough::class) && $relation instanceof HasOneOrManyThr $currentAlias, "{$currentAlias}.{$relation->getParentKeyName()}", '=', - $parentAlias + $parentAlias !== '' ? "{$parentAlias}.{$relation->getRelatedKeyName()}" : $relation->getQualifiedRelatedKeyName(), ); diff --git a/packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php b/packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php index f5677fc62..edcc833d8 100644 --- a/packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php +++ b/packages/graphql/src/SortBy/Sorters/EloquentSorterTest.php @@ -61,7 +61,7 @@ public function testSort( self::expectExceptionObject($expected); } - if ($resolver) { + if ($resolver !== null) { $this->override( BuilderFieldResolver::class, static function (MockInterface $mock) use ($resolver): void { diff --git a/packages/graphql/src/SortBy/Sorters/QuerySorterTest.php b/packages/graphql/src/SortBy/Sorters/QuerySorterTest.php index 493697fbe..c2c2c962e 100644 --- a/packages/graphql/src/SortBy/Sorters/QuerySorterTest.php +++ b/packages/graphql/src/SortBy/Sorters/QuerySorterTest.php @@ -43,7 +43,7 @@ public function testSort( self::expectExceptionObject($expected); } - if ($resolver) { + if ($resolver !== null) { $this->override( BuilderFieldResolver::class, static function (MockInterface $mock) use ($resolver): void { diff --git a/packages/graphql/src/SortBy/Sorters/ScoutSorter.php b/packages/graphql/src/SortBy/Sorters/ScoutSorter.php index f8ddd169d..8ce62e222 100644 --- a/packages/graphql/src/SortBy/Sorters/ScoutSorter.php +++ b/packages/graphql/src/SortBy/Sorters/ScoutSorter.php @@ -29,7 +29,7 @@ public function isNullsSupported(): bool { #[Override] public function sort(object $builder, Field $field, Direction $direction, ?Nulls $nulls = null): object { - if ($nulls) { + if ($nulls !== null) { throw new NotImplemented('NULLs ordering'); } diff --git a/packages/graphql/src/SortBy/Sorters/ScoutSorterTest.php b/packages/graphql/src/SortBy/Sorters/ScoutSorterTest.php index 744103ddc..3d4f11af4 100644 --- a/packages/graphql/src/SortBy/Sorters/ScoutSorterTest.php +++ b/packages/graphql/src/SortBy/Sorters/ScoutSorterTest.php @@ -45,7 +45,7 @@ public function testSort( self::expectExceptionObject($expected); } - if ($resolver) { + if ($resolver !== null) { $this->override( BuilderFieldResolver::class, static function (MockInterface $mock) use ($resolver): void { @@ -58,7 +58,7 @@ static function (MockInterface $mock) use ($resolver): void { ); } - if ($fieldResolver) { + if ($fieldResolver !== null) { $this->override(FieldResolver::class, $fieldResolver); } diff --git a/packages/graphql/src/Stream/Directives/Directive.php b/packages/graphql/src/Stream/Directives/Directive.php index 3619b47e9..5620ec98d 100644 --- a/packages/graphql/src/Stream/Directives/Directive.php +++ b/packages/graphql/src/Stream/Directives/Directive.php @@ -234,7 +234,7 @@ public function manipulateFieldDefinition( $manipulator, $source, SearchByDirective::class, - Cast::toString($repository->get("{$prefix}.search.name") ?: 'where'), + Cast::toString($repository->get("{$prefix}.search.name") ?? 'where'), $manipulator::Placeholder, ); } @@ -251,7 +251,7 @@ public function manipulateFieldDefinition( $manipulator, $source, SortByDirective::class, - Cast::toString($repository->get("{$prefix}.sort.name") ?: 'order'), + Cast::toString($repository->get("{$prefix}.sort.name") ?? 'order'), $manipulator::Placeholder, ); } @@ -319,19 +319,19 @@ static function (mixed $argument) use ($manipulator, $directive): bool { }, ); - if ($argument && $arguments) { + if ($argument !== null && $arguments !== []) { // todo(graphql/@stream): Move to AstManipulator + check definition. $directiveNode = $manipulator->getDirective($argument, $directive); - $directiveNode = $directiveNode + $directiveNode = $directiveNode !== null ? $manipulator->getDirectiveNode($directiveNode) : null; - if ($directiveNode) { + if ($directiveNode !== null) { foreach ($arguments as $argName => $argValue) { $argNode = $manipulator->getArgument($directiveNode, $argName); $argValue = json_encode($argValue, JSON_THROW_ON_ERROR); - if ($argNode) { + if ($argNode !== null) { $argNode->value = Parser::valueLiteral($argValue); } else { $directiveNode->arguments[] = Parser::argument("{$argName}: {$argValue}"); @@ -340,7 +340,7 @@ static function (mixed $argument) use ($manipulator, $directive): bool { } } - if ($argument && !$manipulator->isDeprecated($argument)) { + if ($argument !== null && !$manipulator->isDeprecated($argument)) { return; } @@ -389,12 +389,12 @@ public function getBuilderInfo(TypeSource $source): ?BuilderInfo { $type = $type instanceof ReflectionNamedType ? $type->getName() : null; - $type = $type && class_exists($type) + $type = $type !== null && class_exists($type) ? $type : null; // Scout? - if ($type && !is_a($type, ScoutBuilder::class, true)) { + if ($type !== null && !is_a($type, ScoutBuilder::class, true)) { $scout = $field->hasArgument( static function (mixed $argument, AstManipulator $manipulator): bool { return $manipulator->getDirective($argument, SearchDirective::class) !== null; @@ -536,7 +536,7 @@ protected function getResolver(ObjectFieldSource|InterfaceFieldSource $source): $resolver = null; $builder = (array) $this->directiveArgValue(self::ArgBuilder); - if ($builder) { + if ($builder !== []) { if (count($builder) > 1) { // empty } elseif (isset($builder['builder'])) { @@ -558,7 +558,7 @@ protected function getResolver(ObjectFieldSource|InterfaceFieldSource $source): $parent = $source->getParent()->getTypeName(); $resolver = $this->getResolverQuery($parent, $source->getName()); - if (!$resolver) { + if ($resolver === null) { $resolver = RootType::isRootType($parent) ? $this->getResolverModel( $this->streamType->getOriginalTypeName($source->getTypeName()), @@ -634,7 +634,7 @@ public function getResolverClass(ResolverProvider $provider, FieldValue $value, } }; $class = $helper->getResolverClass($this->provider, $value, $method); - $resolver = $class ? [$class, $method] : null; + $resolver = $class !== null ? [$class, $method] : null; return $resolver; } @@ -698,15 +698,13 @@ protected function getArgKey( } // Key - if ($field) { + if ($field !== null) { $rename = $manipulator->getDirective($field, RenameDirective::class); - $key = $rename - ? $rename->attributeArgValue() - : $manipulator->getName($field); + $key = $rename?->attributeArgValue() ?? $manipulator->getName($field); } // Found? - if (!$key) { + if ($key === null) { throw new KeyUnknown($source); } diff --git a/packages/graphql/src/Stream/Directives/DirectiveTest.php b/packages/graphql/src/Stream/Directives/DirectiveTest.php index 424d9871b..102e9038c 100644 --- a/packages/graphql/src/Stream/Directives/DirectiveTest.php +++ b/packages/graphql/src/Stream/Directives/DirectiveTest.php @@ -869,7 +869,7 @@ public function testGetResolverExplicit(array|null $expected, string $arguments) $field, ); - if ($expected) { + if ($expected !== null) { $directive ->shouldReceive($expected['method']) ->withArgs($expected['args']) diff --git a/packages/graphql/src/Testing/GraphQLAssertions.php b/packages/graphql/src/Testing/GraphQLAssertions.php index 9929116b8..0debb7cbd 100644 --- a/packages/graphql/src/Testing/GraphQLAssertions.php +++ b/packages/graphql/src/Testing/GraphQLAssertions.php @@ -104,7 +104,7 @@ public function assertGraphQLSchemaEquals( /** * Validates current (application) schema. */ - public function assertGraphQLSchemaValid(string $message = ''): void { + public function assertGraphQLSchemaValid(?string $message = null): void { // To perform validation, we should load all directives first. This is // required because they can be defined inside the schema (and it is // fine) or as a PHP class (in this case, the definition should be added @@ -113,13 +113,14 @@ public function assertGraphQLSchemaValid(string $message = ''): void { // Why do not use `lighthouse:validate-schema` command? Because it loads // all existing directives (even not used) and thus extremely slow. - $valid = true; + $valid = true; + $message ??= 'The schema is not valid.'; try { BuildSchema::build($this->getGraphQLSchemaString())->assertValid(); } catch (Exception $exception) { $valid = false; - $message = ($message ?: 'The schema is not valid.')."\n\n".$exception->getMessage(); + $message = "{$message}\n\n{$exception->getMessage()}"; } self::assertTrue($valid, $message); @@ -130,13 +131,13 @@ public function assertGraphQLSchemaValid(string $message = ''): void { */ public function assertGraphQLSchemaNoBreakingChanges( SplFileInfo|string $expected, - string $message = '', + ?string $message = null, ): void { $oldSchema = BuildSchema::build(Args::content($expected)); $newSchema = BuildSchema::build($this->getGraphQLSchemaString()); $changes = BreakingChangesFinder::findBreakingChanges($oldSchema, $newSchema); $changes = $this->getGraphQLChanges($changes); - $message = ($message ?: 'The breaking changes found!')."\n\n{$changes}\n"; + $message = ($message ?? 'The breaking changes found!')."\n\n{$changes}\n"; self::assertTrue($changes === '', $message); } @@ -146,13 +147,13 @@ public function assertGraphQLSchemaNoBreakingChanges( */ public function assertGraphQLSchemaNoDangerousChanges( SplFileInfo|string $expected, - string $message = '', + ?string $message = null, ): void { $oldSchema = BuildSchema::build(Args::content($expected)); $newSchema = BuildSchema::build($this->getGraphQLSchemaString()); $changes = BreakingChangesFinder::findDangerousChanges($oldSchema, $newSchema); $changes = $this->getGraphQLChanges($changes); - $message = ($message ?: 'The dangerous changes found!')."\n\n{$changes}\n"; + $message = ($message ?? 'The dangerous changes found!')."\n\n{$changes}\n"; self::assertTrue($changes === '', $message); } diff --git a/packages/graphql/src/Testing/Package/OperatorTests.php b/packages/graphql/src/Testing/Package/OperatorTests.php index 8042a9a28..40144d5db 100644 --- a/packages/graphql/src/Testing/Package/OperatorTests.php +++ b/packages/graphql/src/Testing/Package/OperatorTests.php @@ -58,7 +58,7 @@ private function testOperator( self::expectExceptionObject($expected); } - if ($resolver) { + if ($resolver !== null) { $this->override( BuilderFieldResolver::class, static function (MockInterface $mock) use ($resolver): void { @@ -73,7 +73,7 @@ static function (MockInterface $mock) use ($resolver): void { $operator = $this->app()->make($this->getOperator()); $argument = $argumentFactory($this); - $context = $contextFactory ? $contextFactory($this) : new Context(); + $context = $contextFactory !== null ? $contextFactory($this) : new Context(); $handler = $this->app()->make($directive); $builder = $builderFactory($this); $actual = $operator->call($handler, $builder, $field, $argument, $context); @@ -112,9 +112,9 @@ private function getOperator(): string { $class = new ReflectionClass($this); $attrs = $class->getAttributes(CoversClass::class, ReflectionAttribute::IS_INSTANCEOF); $attr = reset($attrs); - $class = $attr ? $attr->newInstance()->className() : null; + $class = $attr !== false ? $attr->newInstance()->className() : null; - if (!$class || !is_a($class, Operator::class, true)) { + if ($class === null || !is_a($class, Operator::class, true)) { throw new LogicException( sprintf( 'The `%s` attribute is missed or is not an `%s` instance.', diff --git a/packages/graphql/src/Testing/Package/TestCase.php b/packages/graphql/src/Testing/Package/TestCase.php index 823b0b6d8..3029e464d 100644 --- a/packages/graphql/src/Testing/Package/TestCase.php +++ b/packages/graphql/src/Testing/Package/TestCase.php @@ -69,7 +69,7 @@ protected function getGraphQLArgument( Schema|SplFileInfo|string|null $schema = null, ): Argument { try { - if ($schema) { + if ($schema !== null) { $this->useGraphQLSchema($schema); } diff --git a/packages/graphql/src/Testing/SchemaBuilderWrapper.php b/packages/graphql/src/Testing/SchemaBuilderWrapper.php index d99e340f7..eba130608 100644 --- a/packages/graphql/src/Testing/SchemaBuilderWrapper.php +++ b/packages/graphql/src/Testing/SchemaBuilderWrapper.php @@ -55,7 +55,7 @@ public function schemaHash(): string { public function setSchema(Container $container, ?SchemaSourceProvider $provider): void { // Origins - if (!$this->singletons) { + if ($this->singletons === []) { $this->singletons = [ ASTCache::class => $container->make(ASTCache::class), ASTBuilder::class => $container->make(ASTBuilder::class), @@ -65,7 +65,7 @@ public function setSchema(Container $container, ?SchemaSourceProvider $provider) // Build $builder = null; - if ($provider) { + if ($provider !== null) { $types = $container->make(TypeRegistry::class); $dispatcher = $container->make(Dispatcher::class); $directives = $container->make(DirectiveLocator::class); diff --git a/packages/graphql/src/Utils/AstManipulator.php b/packages/graphql/src/Utils/AstManipulator.php index c86b2807a..4239b87e0 100644 --- a/packages/graphql/src/Utils/AstManipulator.php +++ b/packages/graphql/src/Utils/AstManipulator.php @@ -316,7 +316,7 @@ public function getOriginType( ? PaginateDirectiveHelper::getPaginationType($directive) : RelationDirectiveHelper::getPaginationType($directive); - if ($pagination) { + if ($pagination !== null) { if ($pagination->isPaginator()) { $type = mb_substr($name, 0, -mb_strlen('Paginator')); } elseif ($pagination->isSimple()) { @@ -331,7 +331,7 @@ public function getOriginType( // empty } - if ($type) { + if ($type !== null) { $origin = Parser::typeReference("[{$type}!]!"); } @@ -363,7 +363,7 @@ public function getDirective( } // Callback? - if ($callback && !$callback($directive)) { + if ($callback !== null && !$callback($directive)) { continue; } @@ -391,8 +391,10 @@ public function getDirectives( $directives = []; if ($node instanceof NamedType) { - if ($node->astNode()) { - $directives = $this->getDirectives($node->astNode(), $class, $callback); + $astNode = $node->astNode(); + + if ($astNode !== null) { + $directives = $this->getDirectives($astNode, $class, $callback); } } elseif ($node instanceof Node) { $associated = $this->getDirectiveLocator()->associated($node); @@ -400,12 +402,12 @@ public function getDirectives( if ($class !== null || $callback !== null) { foreach ($associated as $directive) { // Class? - if ($class && !($directive instanceof $class)) { + if ($class !== null && !($directive instanceof $class)) { continue; } // Callback? - if ($callback && !$callback($directive)) { + if ($callback !== null && !$callback($directive)) { continue; } @@ -416,7 +418,7 @@ public function getDirectives( $directives = $associated->all(); } } elseif ($node instanceof InputObjectField || $node instanceof FieldDefinition || $node instanceof Argument) { - if ($node->astNode) { + if ($node->astNode !== null) { $directives = $this->getDirectives($node->astNode, $class, $callback); } } else { @@ -680,7 +682,7 @@ public function addArgument( ?string $description = null, ): InputValueDefinitionNode|Argument { // Added? - if ($this->getArgument($field, $name)) { + if ($this->getArgument($field, $name) !== null) { throw new ArgumentAlreadyDefined( sprintf( '%s { %s(%s) }', @@ -694,7 +696,7 @@ public function addArgument( // Add if ($field instanceof FieldDefinitionNode) { $argument = '' - .($description ? BlockString::print($description) : '') + .($description !== null && $description !== '' ? BlockString::print($description) : '') ."{$name}: {$type}" .($default !== null ? ' = '.json_encode($default, JSON_THROW_ON_ERROR) : ''); $argument = Parser::inputValueDefinition($argument); @@ -720,7 +722,7 @@ public function addArgument( // Field? $interfaceField = $this->getField($interface, $fieldName); - if (!$interfaceField) { + if ($interfaceField === null) { continue; } @@ -752,7 +754,7 @@ public function addDirective( if ($node instanceof Argument) { // Unfortunately directives exists only in AST :( // https://github.com/webonyx/graphql-php/issues/588 - if ($node->astNode) { + if ($node->astNode !== null) { return $this->addDirective($node->astNode, $directive, $arguments); } else { throw new NotImplemented($node::class); @@ -794,7 +796,7 @@ public function setFieldType( // Field? $interfaceField = $this->getField($interface, $fieldName); - if (!$interfaceField) { + if ($interfaceField === null) { continue; } @@ -831,7 +833,7 @@ public function setArgumentType( // Field? $interfaceField = $this->getField($interface, $fieldName); - if (!$interfaceField) { + if ($interfaceField === null) { continue; } diff --git a/packages/graphql/src/Utils/AstManipulatorTest.php b/packages/graphql/src/Utils/AstManipulatorTest.php index 3ff9dc481..7f15442fe 100644 --- a/packages/graphql/src/Utils/AstManipulatorTest.php +++ b/packages/graphql/src/Utils/AstManipulatorTest.php @@ -277,7 +277,7 @@ public function testGetDirectives(): void { // Field $schema = $this->app()->make(SchemaBuilder::class)->schema(); $query = $schema->getQueryType(); - $field = $query ? $manipulator->getField($query, 'test') : null; + $field = $query !== null ? $manipulator->getField($query, 'test') : null; $expected = [ AllDirective::class, AstManipulatorTest_BDirective::class, @@ -600,7 +600,7 @@ public function testGetOriginType(string $expected, string $graphql): void { // // ========================================================================= protected function getManipulator(?string $schema = null): AstManipulator { - $document = $schema + $document = $schema !== null ? DocumentAST::fromSource($schema) : $this->app()->make(ASTBuilder::class)->documentAST(); $manipulator = $this->app()->make(AstManipulator::class, [ diff --git a/packages/migrator/src/Concerns/RawSqlHelper.php b/packages/migrator/src/Concerns/RawSqlHelper.php index 45be88564..7c375184f 100644 --- a/packages/migrator/src/Concerns/RawSqlHelper.php +++ b/packages/migrator/src/Concerns/RawSqlHelper.php @@ -39,7 +39,7 @@ protected function getRawPath(?string $type = null): string { $file = basename($path, '.php'); $dir = dirname($path); - return $type + return $type !== null && $type !== '' ? "{$dir}/{$file}~{$type}.sql" : "{$dir}/{$file}.sql"; } diff --git a/packages/migrator/src/Migrations/SqlMigration.php b/packages/migrator/src/Migrations/SqlMigration.php index a4eaf8af2..2353d23c4 100644 --- a/packages/migrator/src/Migrations/SqlMigration.php +++ b/packages/migrator/src/Migrations/SqlMigration.php @@ -96,7 +96,7 @@ public function __invoke(Migrator $migrator): static { // Defaults $file = (new ReflectionClass($this))->getFileName(); - if ($file) { + if ($file !== false) { $this->upFrom($file); $this->downFrom($file); } diff --git a/packages/migrator/src/Seeders/SeederService.php b/packages/migrator/src/Seeders/SeederService.php index 995212fe5..a32f3d19f 100644 --- a/packages/migrator/src/Seeders/SeederService.php +++ b/packages/migrator/src/Seeders/SeederService.php @@ -72,7 +72,7 @@ protected function getMigrationsTable(): string { // https://github.com/LastDragon-ru/lara-asp/issues/143 $default = 'migrations'; $table = $this->config->getInstance()->get('database.migrations', $default); - $table = is_array($table) ? ($table['table'] ?: $default) : $table; + $table = is_array($table) ? ($table['table'] ?? $default) : $table; $table = mb_strtolower(Cast::toString($table)); return $table; diff --git a/packages/migrator/src/Seeders/SmartSeeder.php b/packages/migrator/src/Seeders/SmartSeeder.php index ea688df0f..cf4b62f3e 100644 --- a/packages/migrator/src/Seeders/SmartSeeder.php +++ b/packages/migrator/src/Seeders/SmartSeeder.php @@ -43,7 +43,7 @@ protected function isSeeded(): bool { if (is_string($target) && is_subclass_of($target, Model::class, true)) { $seeded = $target::query()->count() > 0; - } elseif ($target) { + } elseif ($target !== null && $target !== '') { $seeded = $this->getConnectionInstance()->table($target)->count() > 0; } else { $seeded = $this->service->isSeeded(); @@ -58,7 +58,7 @@ protected function isSeeded(): bool { public function run(): void { $reason = $this->isSkipped(); - if ($reason) { + if ($reason !== false) { if (is_string($reason)) { $this->skipped($reason); } else { @@ -82,7 +82,9 @@ abstract public function seed(): void; protected function skipped(?string $reason = null): void { if ($this->command !== null) { $this->command->getOutput() - ->writeln(' skipped'.($reason ? " ({$reason})" : '')); + ->writeln( + ' skipped'.($reason !== null && $reason !== '' ? " ({$reason})" : ''), + ); } } diff --git a/packages/migrator/src/Traits/SqlHelper.php b/packages/migrator/src/Traits/SqlHelper.php index 67e91ce02..ee803f13f 100644 --- a/packages/migrator/src/Traits/SqlHelper.php +++ b/packages/migrator/src/Traits/SqlHelper.php @@ -42,9 +42,9 @@ protected function getSqlPath(string $path, ?string ...$type): string { if ($extension !== $sql) { $directory = dirname($path); - $type = implode('.', array_filter($type)); + $type = implode('.', array_filter($type, static fn ($type) => $type !== null && $type !== '')); $name = pathinfo($path, PATHINFO_FILENAME); - $path = $type + $path = $type !== '' ? "{$directory}/{$name}~{$type}.{$sql}" : "{$directory}/{$name}.{$sql}"; } diff --git a/packages/serializer/src/Casts/AsSerializable.php b/packages/serializer/src/Casts/AsSerializable.php index 553f8960c..f883fe8e5 100644 --- a/packages/serializer/src/Casts/AsSerializable.php +++ b/packages/serializer/src/Casts/AsSerializable.php @@ -44,7 +44,7 @@ public function __construct( * @param class-string $class */ public static function using(string $class, ?string $format = null): string { - return static::class.':'.$class.($format ? ",{$format}" : ''); + return static::class.':'.$class.($format !== null && $format !== '' ? ",{$format}" : ''); } /** diff --git a/packages/serializer/src/Factory.php b/packages/serializer/src/Factory.php index f05ed778d..21f4ccf68 100644 --- a/packages/serializer/src/Factory.php +++ b/packages/serializer/src/Factory.php @@ -99,7 +99,7 @@ protected function make( protected function getConfigFormat(?string $config): ?string { /** @var ?string $format */ - $format = $config + $format = $config !== null && $config !== '' ? $this->config->getInstance()->get("{$config}.default") : null; @@ -111,7 +111,7 @@ protected function getConfigFormat(?string $config): ?string { */ protected function getConfigContext(?string $config): array { /** @var array $context */ - $context = $config + $context = $config !== null && $config !== '' ? (array) $this->config->getInstance()->get("{$config}.context") : []; @@ -146,7 +146,7 @@ protected function getEncoders(array $encoders, array &$context, ?string $config */ protected function getConfigEncoders(?string $config): array { /** @var array, array> $encoders */ - $encoders = $config + $encoders = $config !== null && $config !== '' ? (array) $this->config->getInstance()->get("{$config}.encoders") : []; @@ -208,7 +208,7 @@ protected function getNormalizers(array $normalizers, array &$context, ?string $ */ protected function getConfigNormalizers(?string $config): array { /** @var array, array|null> $normalizers */ - $normalizers = $config + $normalizers = $config !== null && $config !== '' ? (array) $this->config->getInstance()->get("{$config}.normalizers") : $config; diff --git a/packages/serializer/src/Metadata/MetadataFactory.php b/packages/serializer/src/Metadata/MetadataFactory.php index 657ebcefd..474bbc2e3 100644 --- a/packages/serializer/src/Metadata/MetadataFactory.php +++ b/packages/serializer/src/Metadata/MetadataFactory.php @@ -26,7 +26,6 @@ use function get_debug_type; use function is_object; use function is_string; -use function reset; use function sprintf; class MetadataFactory implements ClassMetadataFactoryInterface, PropertyTypeExtractorInterface { @@ -103,7 +102,7 @@ public function getTypes(string $class, string $property, array $context = []): } protected function getTypeExtractor(): PropertyTypeExtractorInterface { - if (!$this->extractor) { + if ($this->extractor === null) { if (!class_exists(ContextFactory::class) || !class_exists(PhpDocParser::class)) { /** * These classes are required for {@see PhpStanExtractor}. We @@ -167,7 +166,7 @@ protected function getDiscriminatorMapping(ReflectionClass $class): ?ClassDiscri */ private function getAttribute(ReflectionProperty $object, string $attribute): ?object { $attributes = $object->getAttributes($attribute, ReflectionAttribute::IS_INSTANCEOF); - $instance = (reset($attributes) ?: null)?->newInstance(); + $instance = ($attributes[0] ?? null)?->newInstance(); return $instance; } diff --git a/packages/serializer/src/Normalizers/SerializableNormalizer.php b/packages/serializer/src/Normalizers/SerializableNormalizer.php index 625986740..7b0a26be9 100644 --- a/packages/serializer/src/Normalizers/SerializableNormalizer.php +++ b/packages/serializer/src/Normalizers/SerializableNormalizer.php @@ -134,7 +134,7 @@ static function (mixed $attribute): string { ); $this->attributes[$class] = array_fill_keys($properties, true); - if ($mapping) { + if ($mapping !== null) { $property = $mapping->getTypeProperty(); $this->discriminators[$class] = $property; @@ -221,8 +221,8 @@ private function isAttribute(string $class, string $attribute): bool { private function getTypeClass(string $type, mixed $data): string { $mapping = $this->classDiscriminatorResolver?->getMappingForClass($type); $property = $mapping?->getTypeProperty(); - $class = $property && is_array($data) && isset($data[$property]) && is_string($data[$property]) - ? $mapping->getClassForType($data[$property]) + $class = $property !== null && is_array($data) && isset($data[$property]) && is_string($data[$property]) + ? $mapping?->getClassForType($data[$property]) : null; return $class ?? $type; diff --git a/packages/spa/src/Angular/Url.php b/packages/spa/src/Angular/Url.php index 897afca2b..acdb0cfa1 100644 --- a/packages/spa/src/Angular/Url.php +++ b/packages/spa/src/Angular/Url.php @@ -58,7 +58,7 @@ public function build(array $parameters = []): string { $params = $this->getParameters(); $missed = array_diff_key(array_fill_keys($params, null), $parameters); - if ($missed) { + if ($missed !== []) { throw new InvalidArgumentException( sprintf('Url requires the following parameters: %s.', implode(', ', array_keys($missed))), ); @@ -77,11 +77,11 @@ public function build(array $parameters = []): string { } // Add query params - if ($parameters) { + if ($parameters !== []) { $query = http_build_query($parameters, '', '&', PHP_QUERY_RFC3986); $query = (string) preg_replace('/%5B\d+%5D/ui', '', $query); - if ($url->getQuery()) { + if ($url->getQuery() !== '') { $url = $url->withQuery("{$url->getQuery()}&{$query}"); } else { $url = $url->withQuery($query); diff --git a/packages/spa/src/Http/WithValueProvider.php b/packages/spa/src/Http/WithValueProvider.php index 4085da24d..1d622783f 100644 --- a/packages/spa/src/Http/WithValueProvider.php +++ b/packages/spa/src/Http/WithValueProvider.php @@ -39,7 +39,7 @@ public function validated(mixed $key = null, mixed $default = null): mixed { } } - if ($provider && Arr::has($validated, $attribute)) { + if ($provider !== null && Arr::has($validated, $attribute)) { $value = Arr::get($validated, $attribute); if (!is_null($value)) { diff --git a/packages/spa/src/Http/WithValueProviderTest.php b/packages/spa/src/Http/WithValueProviderTest.php index ae6255719..d0cd1a87c 100644 --- a/packages/spa/src/Http/WithValueProviderTest.php +++ b/packages/spa/src/Http/WithValueProviderTest.php @@ -49,7 +49,7 @@ protected function resolve(mixed $value, array $parameters): mixed { $rule = new class() implements ValidationRule { #[Override] public function validate(string $attribute, mixed $value, Closure $fail): void { - if (!$value) { + if (! ((bool) $value)) { $fail(static::class); } } diff --git a/packages/spa/src/Routing/Resolver.php b/packages/spa/src/Routing/Resolver.php index a0a03afa7..9b7f52bda 100644 --- a/packages/spa/src/Routing/Resolver.php +++ b/packages/spa/src/Routing/Resolver.php @@ -55,8 +55,8 @@ protected function resolveParameters(?Request $request = null, ?Route $route = n * @throws UnresolvedValueException */ public function get(mixed $value, ?Request $request = null, ?Route $route = null): mixed { - $route = $route ?: $this->router->getCurrentRoute(); - $request = $request ?: $this->router->getCurrentRequest(); + $route ??= $this->router->getCurrentRoute(); + $request ??= $this->router->getCurrentRequest(); $parameters = $this->resolveParameters($request, $route); $key = $this->key(array_merge([$value], $parameters)); diff --git a/packages/spa/src/Routing/UnresolvedValueException.php b/packages/spa/src/Routing/UnresolvedValueException.php index 786d58370..e9d9ecd27 100644 --- a/packages/spa/src/Routing/UnresolvedValueException.php +++ b/packages/spa/src/Routing/UnresolvedValueException.php @@ -21,6 +21,6 @@ public function getValue(): mixed { } public function getInnerException(): Exception { - return new NotFoundHttpException($this->getMessage() ?: 'Not found.', $this); + return new NotFoundHttpException($this->getMessage() !== '' ? $this->getMessage() : 'Not found.', $this); } } diff --git a/packages/spa/src/Validation/Rules/DateRule.php b/packages/spa/src/Validation/Rules/DateRule.php index 1837afc91..dc73229a9 100644 --- a/packages/spa/src/Validation/Rules/DateRule.php +++ b/packages/spa/src/Validation/Rules/DateRule.php @@ -19,7 +19,7 @@ public function isValid(string $attribute, mixed $value): bool { try { $date = $this->getValue($value); - $valid = $date && $date->format($this->getFormat()) === $value; + $valid = $date !== null && $date->format($this->getFormat()) === $value; } catch (InvalidArgumentException $exception) { // ignored } @@ -29,7 +29,10 @@ public function isValid(string $attribute, mixed $value): bool { #[Override] public function getValue(mixed $value): DateTimeInterface|null { - return Date::createFromFormat("{$this->getFormat()}|", $value) ?: null; + $value = Date::createFromFormat("{$this->getFormat()}|", $value); + $value = $value instanceof DateTimeInterface ? $value : null; + + return $value; } protected function getFormat(): string { diff --git a/packages/spa/src/Validation/Rules/DateRuleTest.php b/packages/spa/src/Validation/Rules/DateRuleTest.php index a116333d9..5e795a299 100644 --- a/packages/spa/src/Validation/Rules/DateRuleTest.php +++ b/packages/spa/src/Validation/Rules/DateRuleTest.php @@ -55,7 +55,7 @@ public function testGetValue(Exception|string|null $expected, string $value): vo $rule = new DateRule($translator); $date = $rule->getValue($value); - self::assertEquals($expected, $date ? $date->format('Y-m-d\TH:i:s.uP') : null); + self::assertEquals($expected, $date?->format('Y-m-d\TH:i:s.uP')); } // diff --git a/packages/spa/src/Validation/Rules/DateTimeRule.php b/packages/spa/src/Validation/Rules/DateTimeRule.php index 18231e842..17bdead45 100644 --- a/packages/spa/src/Validation/Rules/DateTimeRule.php +++ b/packages/spa/src/Validation/Rules/DateTimeRule.php @@ -24,7 +24,7 @@ public function __construct( #[Override] public function getValue(mixed $value): DateTimeInterface|null { $value = parent::getValue($value); - $tz = $this->config->getInstance()->get('app.timezone') ?: 'UTC'; + $tz = $this->config->getInstance()->get('app.timezone') ?? 'UTC'; if ($value instanceof DateTime || $value instanceof DateTimeImmutable) { $value = $value->setTimezone($tz); diff --git a/packages/spa/src/Validation/Rules/DateTimeRuleTest.php b/packages/spa/src/Validation/Rules/DateTimeRuleTest.php index a80a80e65..253b10469 100644 --- a/packages/spa/src/Validation/Rules/DateTimeRuleTest.php +++ b/packages/spa/src/Validation/Rules/DateTimeRuleTest.php @@ -68,7 +68,7 @@ public function testGetValue(string|array $expected, ?string $tz, string $value) $date = $rule->getValue($value); - self::assertEquals($expected, $date ? $date->format('Y-m-d\TH:i:s.uP') : null); + self::assertEquals($expected, $date?->format('Y-m-d\TH:i:s.uP')); } // diff --git a/packages/spa/src/Validation/Rules/ResolverRuleTest.php b/packages/spa/src/Validation/Rules/ResolverRuleTest.php index d0980df18..333eeb53c 100644 --- a/packages/spa/src/Validation/Rules/ResolverRuleTest.php +++ b/packages/spa/src/Validation/Rules/ResolverRuleTest.php @@ -27,7 +27,7 @@ public function testRule(): void { */ #[Override] protected function resolve(mixed $value, array $parameters): mixed { - return $value ? new stdClass() : null; + return $value !== false ? new stdClass() : null; } }; $rule = new ResolverRule($translator, $resolver); diff --git a/packages/spa/src/Validation/Rules/Rule.php b/packages/spa/src/Validation/Rules/Rule.php index b62e8dd8d..97e084fdc 100644 --- a/packages/spa/src/Validation/Rules/Rule.php +++ b/packages/spa/src/Validation/Rules/Rule.php @@ -93,9 +93,9 @@ protected function getMessage(): string { return [$variant => $this->translate($variant, $replace)]; }) ->first(static function (string $value, string $key): bool { - return $key !== $value; + return $key !== $value && $value !== ''; }) - ?: $this->getMessageDefault(); + ?? $this->getMessageDefault(); return $translation; } diff --git a/packages/testing/UPGRADE.md b/packages/testing/UPGRADE.md index 0086a0336..0b5344d2d 100644 --- a/packages/testing/UPGRADE.md +++ b/packages/testing/UPGRADE.md @@ -52,7 +52,7 @@ Please also see [changelog](https://github.com/LastDragon-ru/lara-asp/releases) } ``` -* [ ] [`ScheduleAssertions`][code-links/5bf3a6e818e8ec48] methods became non-static (#151). +* [ ] [`ScheduleAssertions`][code-links/5bf3a6e818e8ec48] methods became non-static and signature changes (#151). # Upgrade from v5 diff --git a/packages/testing/src/Assertions/Application/ScheduleAssertions.php b/packages/testing/src/Assertions/Application/ScheduleAssertions.php index af4bdf4da..4c3ca65e8 100644 --- a/packages/testing/src/Assertions/Application/ScheduleAssertions.php +++ b/packages/testing/src/Assertions/Application/ScheduleAssertions.php @@ -25,8 +25,8 @@ abstract protected function app(): Application; /** * Asserts that Schedule contains task. */ - public function assertScheduled(string $expected, string $message = ''): void { - $message = $message ?: sprintf('The `%s` is not scheduled.', $expected); + public function assertScheduled(string $expected, ?string $message = null): void { + $message ??= sprintf('The `%s` is not scheduled.', $expected); $scheduled = $this->isScheduledEvent($expected); Assert::assertTrue($scheduled, $message); diff --git a/packages/testing/src/Assertions/Application/ScheduleMatchers/CommandMatcher.php b/packages/testing/src/Assertions/Application/ScheduleMatchers/CommandMatcher.php index 6538ffb3c..c7495dd45 100644 --- a/packages/testing/src/Assertions/Application/ScheduleMatchers/CommandMatcher.php +++ b/packages/testing/src/Assertions/Application/ScheduleMatchers/CommandMatcher.php @@ -34,10 +34,17 @@ public function isMatch(Event $event, mixed $task): bool { // Check $variants = match (true) { - is_string($task) && is_a($task, Command::class, true) => array_unique(array_filter([ - Application::formatCommandString($this->container->make($task)->getName() ?? ''), - Application::formatCommandString($task::getDefaultName() ?? ''), - ])), + is_string($task) && is_a($task, Command::class, true) => array_unique( + array_filter( + [ + Application::formatCommandString($this->container->make($task)->getName() ?? ''), + Application::formatCommandString($task::getDefaultName() ?? ''), + ], + static function (string $command): bool { + return $command !== ''; + }, + ), + ), is_string($task) => [ Application::formatCommandString($task), $task, diff --git a/packages/testing/src/Comparators/DatabaseQueryComparator.php b/packages/testing/src/Comparators/DatabaseQueryComparator.php index 265ce17bb..15da23462 100644 --- a/packages/testing/src/Comparators/DatabaseQueryComparator.php +++ b/packages/testing/src/Comparators/DatabaseQueryComparator.php @@ -85,7 +85,7 @@ protected function normalize(Query $query): Query { // Laravel's aliases have a global counter and are dependent on tests // execution order -> we need to normalize them before comparison. - if (preg_match_all('/(?laravel_reserved_[\d]+)/', $sql, $matches, PREG_SET_ORDER)) { + if (preg_match_all('/(?laravel_reserved_[\d]+)/', $sql, $matches, PREG_SET_ORDER) > 0) { $matches = array_unique(array_column($matches, 'group')); natsort($matches); diff --git a/packages/testing/src/Comparators/DatabaseQueryComparatorTest.php b/packages/testing/src/Comparators/DatabaseQueryComparatorTest.php index 174b30f24..04199ab2c 100644 --- a/packages/testing/src/Comparators/DatabaseQueryComparatorTest.php +++ b/packages/testing/src/Comparators/DatabaseQueryComparatorTest.php @@ -27,7 +27,9 @@ public function testAccepts(bool $equals, mixed $expected, mixed $actual): void public function testAssertEquals(bool|string $equals, mixed $expected, mixed $actual): void { if ($equals !== true) { self::expectException(ComparisonFailure::class); - self::expectExceptionMessageMatches($equals ?: '/Failed asserting that two database queries are equal/i'); + self::expectExceptionMessageMatches( + $equals !== false ? $equals : '/Failed asserting that two database queries are equal/i', + ); } $comparator = new DatabaseQueryComparator(); diff --git a/packages/testing/src/Comparators/EloquentModelComparatorTest.php b/packages/testing/src/Comparators/EloquentModelComparatorTest.php index b8affc053..2c9d01c79 100644 --- a/packages/testing/src/Comparators/EloquentModelComparatorTest.php +++ b/packages/testing/src/Comparators/EloquentModelComparatorTest.php @@ -26,7 +26,9 @@ public function testAccepts(bool $equals, mixed $expected, mixed $actual): void public function testAssertEquals(bool|string $equals, mixed $expected, mixed $actual): void { if ($equals !== true) { self::expectException(ComparisonFailure::class); - self::expectExceptionMessageMatches($equals ?: '/Failed asserting that two models are equal/i'); + self::expectExceptionMessageMatches( + $equals !== false ? $equals : '/Failed asserting that two models are equal/i', + ); } $comparator = new EloquentModelComparator(); diff --git a/packages/testing/src/Concerns/Override.php b/packages/testing/src/Concerns/Override.php index 03a858b72..3ed2b8001 100644 --- a/packages/testing/src/Concerns/Override.php +++ b/packages/testing/src/Concerns/Override.php @@ -89,7 +89,7 @@ protected function override(string $class, mixed $factory = null): mixed { : $factory; if (is_callable($factory)) { - $mock = $factory($mock, $this) ?: $mock; + $mock = $factory($mock, $this) ?? $mock; } elseif (is_string($factory)) { $mock = $this->app()->make($factory); } else { diff --git a/packages/testing/src/Constraints/Json/JsonMatchesSchema.php b/packages/testing/src/Constraints/Json/JsonMatchesSchema.php index 18d566f1f..26a570707 100644 --- a/packages/testing/src/Constraints/Json/JsonMatchesSchema.php +++ b/packages/testing/src/Constraints/Json/JsonMatchesSchema.php @@ -59,10 +59,10 @@ protected function failureDescription(mixed $other): string { protected function additionalFailureDescription(mixed $other): string { $description = parent::additionalFailureDescription($other); - if ($this->result) { + if ($this->result !== null) { $error = $this->result->error(); - if ($error) { + if ($error !== null) { $formatted = (new ErrorFormatter())->format($error); $padding = ' '; $description .= PHP_EOL.$padding.'Errors: '; diff --git a/packages/testing/src/Constraints/Json/Protocol.php b/packages/testing/src/Constraints/Json/Protocol.php index e246d0d53..f7c46bfb3 100644 --- a/packages/testing/src/Constraints/Json/Protocol.php +++ b/packages/testing/src/Constraints/Json/Protocol.php @@ -70,7 +70,7 @@ public function __invoke(Uri $uri): ?string { if ($uri->host() === self::HostWindows) { // For Windows it can be `/C:/path`, so we need to remove the slash - if (preg_match('/^\/[a-z]\:/i', $path)) { + if (preg_match('/^\/[a-z]\:/i', $path) > 0) { $path = ltrim($path, '/'); } } diff --git a/packages/testing/src/Constraints/Json/Template.php b/packages/testing/src/Constraints/Json/Template.php index e9a378f6d..72ad8820d 100644 --- a/packages/testing/src/Constraints/Json/Template.php +++ b/packages/testing/src/Constraints/Json/Template.php @@ -27,7 +27,7 @@ public function build(array $parameters): string { $result = $this->content; $matches = []; - if (preg_match_all('/\$\{(?[^}]+)\}/u', $result, $matches, PREG_SET_ORDER)) { + if (preg_match_all('/\$\{(?[^}]+)\}/u', $result, $matches, PREG_SET_ORDER) > 0) { $variables = array_unique(array_column($matches, 'var')); foreach ($variables as $name) { diff --git a/packages/testing/src/Constraints/Response/Factory.php b/packages/testing/src/Constraints/Response/Factory.php index 7066adb6b..1d9774cf1 100644 --- a/packages/testing/src/Constraints/Response/Factory.php +++ b/packages/testing/src/Constraints/Response/Factory.php @@ -14,14 +14,17 @@ class Factory { /** - * @var WeakMap + * @var WeakMap|Response,ResponseInterface> */ protected static WeakMap $cache; + /** + * @param TestResponse<*>|Response $response + */ public static function make(TestResponse|Response $response): ResponseInterface { $psrResponse = static::getCache()[$response] ?? null; - if (!$psrResponse) { + if ($psrResponse === null) { if ($response instanceof TestResponse) { $psrResponse = static::create($response->baseResponse); } else { @@ -35,7 +38,7 @@ public static function make(TestResponse|Response $response): ResponseInterface } /** - * @return WeakMap + * @return WeakMap|Response,ResponseInterface> */ protected static function getCache(): WeakMap { if (!isset(static::$cache)) { diff --git a/packages/testing/src/Constraints/Response/Header.php b/packages/testing/src/Constraints/Response/Header.php index 47f927978..45f4ff103 100644 --- a/packages/testing/src/Constraints/Response/Header.php +++ b/packages/testing/src/Constraints/Response/Header.php @@ -34,7 +34,7 @@ protected function matches(mixed $other): bool { #[Override] public function toString(): string { return "has {$this->getName()} header".( - $this->getConstraints() ? ' that '.parent::toString() : '' + $this->getConstraints() !== [] ? ' that '.parent::toString() : '' ); } diff --git a/packages/testing/src/Constraints/Response/Response.php b/packages/testing/src/Constraints/Response/Response.php index 0b0b1eeb4..c3e3e09cb 100644 --- a/packages/testing/src/Constraints/Response/Response.php +++ b/packages/testing/src/Constraints/Response/Response.php @@ -99,7 +99,7 @@ protected function additionalFailureDescription(mixed $other, bool $root = true) $description = []; - if ($this->failed) { + if ($this->failed !== null) { $description[] = $this->failed instanceof self ? $this->failed->additionalFailureDescription($other, false) : $this->failed->additionalFailureDescription($other); @@ -113,8 +113,8 @@ protected function additionalFailureDescription(mixed $other, bool $root = true) return trim($text, PHP_EOL); }, $description); $description = array_unique($description); - $description = array_filter($description); - $description = $description + $description = array_filter($description, static fn ($line) => $line !== ''); + $description = $description !== [] ? PHP_EOL.implode(PHP_EOL.PHP_EOL, $description).PHP_EOL : ''; diff --git a/packages/testing/src/Constraints/Xml/XmlMatchesSchema.php b/packages/testing/src/Constraints/Xml/XmlMatchesSchema.php index 8a5fc4f23..ae6ea9516 100644 --- a/packages/testing/src/Constraints/Xml/XmlMatchesSchema.php +++ b/packages/testing/src/Constraints/Xml/XmlMatchesSchema.php @@ -71,7 +71,7 @@ protected function matches(mixed $other): bool { libxml_clear_errors(); try { - $matches = $constraint && $constraint->isMatchesSchema($this->schema, $other); + $matches = $constraint !== null && $constraint->isMatchesSchema($this->schema, $other); } finally { $this->errors = libxml_get_errors(); diff --git a/packages/testing/src/Database/RefreshDatabaseIfEmpty.php b/packages/testing/src/Database/RefreshDatabaseIfEmpty.php index aa6694c40..082072f6a 100644 --- a/packages/testing/src/Database/RefreshDatabaseIfEmpty.php +++ b/packages/testing/src/Database/RefreshDatabaseIfEmpty.php @@ -36,7 +36,7 @@ protected function refreshTestDatabase(): void { $connection = $this->app()->make(DatabaseManager::class)->connection(); $tables = $connection->getSchemaBuilder()->getTables(); - if ($tables) { + if ($tables !== []) { RefreshDatabaseState::$migrated = true; } } diff --git a/packages/testing/src/Mixins/Assert.php b/packages/testing/src/Mixins/Assert.php index ce1bedc71..5b066583b 100644 --- a/packages/testing/src/Mixins/Assert.php +++ b/packages/testing/src/Mixins/Assert.php @@ -8,6 +8,7 @@ use LastDragon_ru\LaraASP\Testing\Constraints\Response\Factory; use PHPUnit\Framework\Assert as PHPUnitAssert; use PHPUnit\Framework\Constraint\Constraint; +use Symfony\Component\HttpFoundation\Response; /** * @internal @@ -18,6 +19,10 @@ class Assert extends PHPUnitAssert { /** * Asserts that TestResponse satisfies given constraint. + * + * @template T of Response + * + * @param TestResponse $response */ public static function assertThatResponse( TestResponse $response, diff --git a/packages/testing/src/Mixins/TestResponseMixin.php b/packages/testing/src/Mixins/TestResponseMixin.php index 73c98d020..05a4e7f45 100644 --- a/packages/testing/src/Mixins/TestResponseMixin.php +++ b/packages/testing/src/Mixins/TestResponseMixin.php @@ -9,17 +9,18 @@ use LastDragon_ru\LaraASP\Testing\Constraints\Response\StatusCode; use PHPUnit\Framework\Constraint\Constraint; use SplFileInfo; +use Symfony\Component\HttpFoundation\Response; /** * @internal */ class TestResponseMixin { /** - * @return Closure(Constraint, string): TestResponse + * @return Closure(Constraint, string): TestResponse */ public function assertThat(): Closure { return function (Constraint $constraint, string $message = ''): TestResponse { - /** @var TestResponse $this */ + /** @var TestResponse $this */ Assert::assertThatResponse($this, $constraint, $message); return $this; @@ -27,11 +28,11 @@ public function assertThat(): Closure { } /** - * @return Closure(JsonSchema, string): TestResponse + * @return Closure(JsonSchema, string): TestResponse */ public function assertJsonMatchesSchema(): Closure { return function (JsonSchema $schema, string $message = ''): TestResponse { - /** @var TestResponse $this */ + /** @var TestResponse $this */ Assert::assertJsonMatchesSchema($schema, $this->json(), $message); return $this; @@ -39,11 +40,11 @@ public function assertJsonMatchesSchema(): Closure { } /** - * @return Closure(string, string): TestResponse + * @return Closure(string, string): TestResponse */ public function assertContentType(): Closure { return function (string $contentType, string $message = ''): TestResponse { - /** @var TestResponse $this */ + /** @var TestResponse $this */ Assert::assertThatResponse($this, new ContentType($contentType), $message); return $this; @@ -51,11 +52,11 @@ public function assertContentType(): Closure { } /** - * @return Closure(int, string): TestResponse + * @return Closure(int, string): TestResponse */ public function assertStatusCode(): Closure { return function (int $statusCode, string $message = ''): TestResponse { - /** @var TestResponse $this */ + /** @var TestResponse $this */ Assert::assertThatResponse($this, new StatusCode($statusCode), $message); return $this; @@ -63,11 +64,11 @@ public function assertStatusCode(): Closure { } /** - * @return Closure(SplFileInfo, string): TestResponse + * @return Closure(SplFileInfo, string): TestResponse */ public function assertXmlMatchesSchema(): Closure { return function (SplFileInfo $schema, string $message = ''): TestResponse { - /** @var TestResponse $this */ + /** @var TestResponse $this */ Assert::assertXmlMatchesSchema($schema, (string) $this->getContent(), $message); return $this; diff --git a/packages/testing/src/Mockery/MockProperties.php b/packages/testing/src/Mockery/MockProperties.php index d7a7e1dc1..929405785 100644 --- a/packages/testing/src/Mockery/MockProperties.php +++ b/packages/testing/src/Mockery/MockProperties.php @@ -43,7 +43,7 @@ public function shouldUseProperty(string $name): MockedProperty { $property = "{$this->mockery_getName()}::\${$name}"; $director = $this->mockery_getExpectationsFor($method); - if ($director) { + if ($director !== null) { throw new BadMethodCallException( "The property `{$property}` already mocked.", ); diff --git a/packages/testing/src/Providers/CompositeDataProvider.php b/packages/testing/src/Providers/CompositeDataProvider.php index 9ccdcbbb6..44b9c771d 100644 --- a/packages/testing/src/Providers/CompositeDataProvider.php +++ b/packages/testing/src/Providers/CompositeDataProvider.php @@ -72,7 +72,7 @@ public function getData(bool $raw = false): array { $cExpected = reset($cData); $cParameters = array_slice($cData, 1); - if ($this->isExpectedFinal($cExpected) || !$previous) { + if ($this->isExpectedFinal($cExpected) || $previous === []) { $data[$cKey] = array_merge([$cExpected], $cParameters); } else { foreach ($previous as $pKey => $pData) { diff --git a/packages/testing/src/Requirements/PhpUnit/Checker.php b/packages/testing/src/Requirements/PhpUnit/Checker.php index a2cb26da7..2cfff9bae 100644 --- a/packages/testing/src/Requirements/PhpUnit/Checker.php +++ b/packages/testing/src/Requirements/PhpUnit/Checker.php @@ -36,7 +36,7 @@ public function __construct() { public function isSatisfied(string $class, ?string $method = null, array &$failed = []): bool { $failed = array_merge( $this->getClassFailedRequirements($class), - $method + $method !== null ? $this->getMethodFailedRequirements($class, $method) : [], ); @@ -77,7 +77,7 @@ protected function getFailedRequirements(ReflectionClass|ReflectionMethod $objec $instance = $requirement->newInstance(); $reason = $instance->isSatisfied() ? false : (string) $instance; - if ($reason) { + if ($reason !== false) { $failed[] = $reason; break; } diff --git a/packages/testing/src/Requirements/PhpUnit/Listener.php b/packages/testing/src/Requirements/PhpUnit/Listener.php index c4d84358c..cf1a2d10b 100644 --- a/packages/testing/src/Requirements/PhpUnit/Listener.php +++ b/packages/testing/src/Requirements/PhpUnit/Listener.php @@ -27,7 +27,7 @@ public function notify(Event $event): void { // Supported? [$class, $method] = $this->getTarget($event); - if (!$class) { + if ($class === null) { return; } @@ -36,7 +36,7 @@ public function notify(Event $event): void { $satisfied = $this->checker->isSatisfied($class, $method, $failed); if (!$satisfied) { - Assert::markTestSkipped(implode(PHP_EOL, $failed ?: ['Unknown requirement.'])); + Assert::markTestSkipped(implode(PHP_EOL, $failed !== [] ? $failed : ['Unknown requirement.'])); } } diff --git a/packages/testing/src/Requirements/Requirements/RequiresComposerPackage.php b/packages/testing/src/Requirements/Requirements/RequiresComposerPackage.php index 8be279b5e..d90df6907 100644 --- a/packages/testing/src/Requirements/Requirements/RequiresComposerPackage.php +++ b/packages/testing/src/Requirements/Requirements/RequiresComposerPackage.php @@ -16,6 +16,10 @@ */ #[Attribute(Attribute::TARGET_CLASS | Attribute::TARGET_METHOD)] class RequiresComposerPackage implements Requirement { + /** + * @param non-empty-string $package + * @param non-empty-string|null $version + */ public function __construct( protected readonly string $package, protected readonly ?string $version = null, @@ -25,7 +29,7 @@ public function __construct( #[Override] public function isSatisfied(): bool { - return $this->version + return $this->version !== null ? InstalledVersions::satisfies(new VersionParser(), $this->package, $this->version) : InstalledVersions::isInstalled($this->package); } @@ -34,7 +38,7 @@ public function isSatisfied(): bool { public function __toString(): string { return sprintf( 'The package `%s` is not installed.', - $this->package.($this->version ? ":{$this->version}" : ''), + $this->package.($this->version !== null ? ":{$this->version}" : ''), ); } } diff --git a/packages/testing/src/Responses/JsonResponse.php b/packages/testing/src/Responses/JsonResponse.php index d2d32fd6d..74ed4e0bb 100644 --- a/packages/testing/src/Responses/JsonResponse.php +++ b/packages/testing/src/Responses/JsonResponse.php @@ -25,8 +25,9 @@ public function __construct( JsonSchema $schema, JsonSerializable|SplFileInfo|stdClass|array|string|int|float|bool|null $content = null, ) { - if ($content) { + if ($content !== null) { $content = Args::getJson($content); + $content = new JsonMatches(Args::getJsonString($content)); } parent::__construct( @@ -34,9 +35,7 @@ public function __construct( new JsonContentType(), new JsonBody(...array_filter([ new JsonMatchesSchema($schema), - $content - ? new JsonMatches(Args::getJsonString($content)) - : null, + $content, ])), ); } diff --git a/packages/testing/src/Responses/Laravel/Json/ValidationErrorResponse.php b/packages/testing/src/Responses/Laravel/Json/ValidationErrorResponse.php index d0a7e5714..517ae7fb7 100644 --- a/packages/testing/src/Responses/Laravel/Json/ValidationErrorResponse.php +++ b/packages/testing/src/Responses/Laravel/Json/ValidationErrorResponse.php @@ -32,7 +32,7 @@ public function __construct(?array $errors = null) { new JsonContentType(), new JsonBody(...array_filter([ new JsonMatchesSchema(new JsonSchemaFile(self::getTestData(self::class)->file('.json'))), - $errors + $errors !== null && $errors !== [] ? new JsonMatchesSchema(new JsonSchemaValue($this->getErrorsSchema($errors))) : null, ])), @@ -48,7 +48,7 @@ protected function getErrorsSchema(array $errors): array { $properties = []; foreach ($errors as $key => $error) { - if (is_null($error) || (is_array($error) && !$error)) { + if (is_null($error) || (is_array($error) && $error !== [])) { $properties[$key] = [ 'type' => 'array', 'minItems' => 1, diff --git a/packages/testing/src/Utils/TestData.php b/packages/testing/src/Utils/TestData.php index cf591dfd4..0afc35f49 100644 --- a/packages/testing/src/Utils/TestData.php +++ b/packages/testing/src/Utils/TestData.php @@ -27,7 +27,7 @@ class TestData { public function __construct(string $test) { $path = (new ReflectionClass($test))->getFileName(); - if (!$path) { + if ($path === false) { throw new InvalidArgumentClass('$test', $test); } diff --git a/packages/testing/src/Utils/WithTempFile.php b/packages/testing/src/Utils/WithTempFile.php index 87459626e..0bfb28c13 100644 --- a/packages/testing/src/Utils/WithTempFile.php +++ b/packages/testing/src/Utils/WithTempFile.php @@ -20,7 +20,7 @@ public static function getTempFile(?string $content = null, string $suffix = '') $path = $fs->tempnam(sys_get_temp_dir(), $pkg, $suffix); $file = new SplFileInfo($path); - if ($content) { + if ($content !== null) { $fs->dumpFile($path, $content); } diff --git a/phpstan-baseline-well-known.neon b/phpstan-baseline-well-known.neon index 235c8e578..732477740 100644 --- a/phpstan-baseline-well-known.neon +++ b/phpstan-baseline-well-known.neon @@ -5,7 +5,6 @@ parameters: ignoreErrors: # Unwanted strict rules # (is there a better way to disable them?) - - "#^Short ternary operator is not allowed\\. Use null coalesce operator if applicable or consider using long ternary\\.$#" - message: "#does not call parent constructor from#" path: packages/**/*Test.php @@ -15,7 +14,7 @@ parameters: - "#^Dynamic call to static method Illuminate\\\\Contracts\\\\Foundation\\\\CachesConfiguration\\:\\:(configurationIsCached|routesAreCached|langPath)\\(\\)\\.$#" - "#^Dynamic call to static method Illuminate\\\\Contracts\\\\Foundation\\\\CachesRoutes\\:\\:routesAreCached\\(\\)\\.$#" - "#^Dynamic call to static method Illuminate\\\\Validation\\\\Factory\\:\\:(validate)\\(\\)\\.$#" - - "#^Dynamic call to static method Illuminate\\\\Testing\\\\TestResponse\\:\\:assert[^(]+\\(\\)\\.$#" + - "#^Dynamic call to static method Illuminate\\\\Testing\\\\TestResponse\\<[^>]+\\>\\:\\:assert[^(]+\\(\\)\\.$#" - "#^Dynamic call to static method Illuminate\\\\Database\\\\Eloquent\\\\Model(\\<[^>]+\\>)?\\:\\:[^(]+\\(\\)\\.$#" - "#^Dynamic call to static method Illuminate\\\\Database\\\\Eloquent\\\\Builder(\\<[^>]+\\>)?\\:\\:[^(]+\\(\\)\\.$#" - "#^Dynamic call to static method Illuminate\\\\Database\\\\Eloquent\\\\Relations\\\\[^\\\\]+(\\<[^>]+\\>)?\\:\\:[^(]+\\(\\)\\.$#" @@ -69,12 +68,13 @@ parameters: # PHPStan doesn't allow use `@var` and `assert()` for `$this` inside Closure yet # https://github.com/phpstan/phpstan/issues/149 # https://github.com/phpstan/phpstan/issues/8904 + # https://github.com/phpstan/phpstan/issues/11267 - message: "#^PHPDoc tag @var with type Illuminate\\\\Database\\\\Eloquent\\\\Builder\\ is not subtype of native type \\$this\\(LastDragon_ru\\\\LaraASP\\\\Eloquent\\\\Mixins\\\\EloquentBuilderMixin\\)\\.$#" paths: - packages/eloquent/src/Mixins/EloquentBuilderMixin.php - - message: "#^PHPDoc tag @var with type Illuminate\\\\Testing\\\\TestResponse is not subtype of native type \\$this\\(LastDragon_ru\\\\LaraASP\\\\Testing\\\\Mixins\\\\TestResponseMixin\\)\\.$#" + message: "#^PHPDoc tag @var with type Illuminate\\\\Testing\\\\TestResponse\\ is not subtype of native type \\$this\\(LastDragon_ru\\\\LaraASP\\\\Testing\\\\Mixins\\\\TestResponseMixin\\)\\.$#" paths: - packages/testing/src/Mixins/TestResponseMixin.php diff --git a/phpstan-baseline.neon b/phpstan-baseline.neon index 81f632412..5d696927d 100644 --- a/phpstan-baseline.neon +++ b/phpstan-baseline.neon @@ -60,11 +60,6 @@ parameters: count: 1 path: packages/spa/src/Http/Resources/Resource.php - - - message: "#^Method class@anonymous/packages/spa/src/Http/WithValueProviderTest\\.php\\:49\\:\\:validate\\(\\) has parameter \\$fail with no signature specified for Closure\\.$#" - count: 1 - path: packages/spa/src/Http/WithValueProviderTest.php - - message: "#^Cannot access property \\$id on mixed\\.$#" count: 1 @@ -75,11 +70,6 @@ parameters: count: 1 path: packages/spa/src/Validation/Rules/DateTimeRule.php - - - message: "#^Method LastDragon_ru\\\\LaraASP\\\\Spa\\\\Validation\\\\Rules\\\\Rule\\:\\:validate\\(\\) has parameter \\$fail with no signature specified for Closure\\.$#" - count: 1 - path: packages/spa/src/Validation/Rules/Rule.php - - message: "#^Parameter \\#1 \\$query of method LastDragon_ru\\\\LaraASP\\\\Testing\\\\Comparators\\\\DatabaseQueryComparator\\:\\:normalize\\(\\) expects LastDragon_ru\\\\LaraASP\\\\Testing\\\\Database\\\\QueryLog\\\\Query, mixed given\\.$#" count: 2 diff --git a/vendor-bin/phpstan/larastan.neon b/phpstan-larastan.neon similarity index 100% rename from vendor-bin/phpstan/larastan.neon rename to phpstan-larastan.neon diff --git a/phpstan.neon b/phpstan.neon index f64e92979..32d334c60 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -7,7 +7,7 @@ parameters: - dev/storage - dev/vendor (?) scanDirectories: - - vendor-bin/phpstan/vendor/larastan/larastan + - vendor/larastan/larastan # The level 9 is the highest level level: max @@ -20,9 +20,6 @@ parameters: checkBenevolentUnionTypes: true checkUninitializedProperties: true noEnvCallsOutsideOfConfig: true - strictRules: - strictArrayFilter: false - booleansInConditions: false # Package classMustBeFinal: @@ -47,22 +44,22 @@ parameters: includes: # Vendor - - ./vendor-bin/phpstan/vendor/phpstan/phpstan/conf/bleedingEdge.neon - - ./vendor-bin/phpstan/vendor/phpstan/phpstan-mockery/extension.neon - - ./vendor-bin/phpstan/vendor/phpstan/phpstan-phpunit/extension.neon - - ./vendor-bin/phpstan/vendor/phpstan/phpstan-phpunit/rules.neon - - ./vendor-bin/phpstan/vendor/phpstan/phpstan-strict-rules/rules.neon - - ./vendor-bin/phpstan/vendor/spaze/phpstan-disallowed-calls/extension.neon - - ./vendor-bin/phpstan/vendor/spaze/phpstan-disallowed-calls/disallowed-dangerous-calls.neon - - ./vendor-bin/phpstan/vendor/spaze/phpstan-disallowed-calls/disallowed-execution-calls.neon - - ./vendor-bin/phpstan/vendor/spaze/phpstan-disallowed-calls/disallowed-insecure-calls.neon - - ./vendor-bin/phpstan/vendor/spaze/phpstan-disallowed-calls/disallowed-loose-calls.neon + - ./vendor/phpstan/phpstan/conf/bleedingEdge.neon + - ./vendor/phpstan/phpstan-mockery/extension.neon + - ./vendor/phpstan/phpstan-phpunit/extension.neon + - ./vendor/phpstan/phpstan-phpunit/rules.neon + - ./vendor/phpstan/phpstan-strict-rules/rules.neon + - ./vendor/spaze/phpstan-disallowed-calls/extension.neon + - ./vendor/spaze/phpstan-disallowed-calls/disallowed-dangerous-calls.neon + - ./vendor/spaze/phpstan-disallowed-calls/disallowed-execution-calls.neon + - ./vendor/spaze/phpstan-disallowed-calls/disallowed-insecure-calls.neon + - ./vendor/spaze/phpstan-disallowed-calls/disallowed-loose-calls.neon # Package - - ./vendor-bin/phpstan/larastan.neon - - ./vendor-bin/phpstan/vendor/lastdragon-ru/lara-asp-dev/src/PhpStan/Container/extension.neon - - ./vendor-bin/phpstan/vendor/lastdragon-ru/lara-asp-dev/src/PhpStan/ClassMustBeFinal/extension.neon - - ./vendor-bin/phpstan/vendor/lastdragon-ru/lara-asp-dev/src/PhpStan/ClassMustBeInternal/extension.neon + - ./phpstan-larastan.neon + - ./packages/dev/src/PhpStan/Container/extension.neon + - ./packages/dev/src/PhpStan/ClassMustBeFinal/extension.neon + - ./packages/dev/src/PhpStan/ClassMustBeInternal/extension.neon # Baseline - phpstan-baseline-well-known.neon diff --git a/vendor-bin/phpstan/composer.json b/vendor-bin/phpstan/composer.json deleted file mode 100644 index 434f5922f..000000000 --- a/vendor-bin/phpstan/composer.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "require-dev": { - "phpstan/phpstan": "^1.11.4", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.3", - "phpstan/phpstan-strict-rules": "^1.5", - "spaze/phpstan-disallowed-calls": "^3.0", - "lastdragon-ru/lara-asp-core": "self.version", - "lastdragon-ru/lara-asp-dev": "self.version" - }, - "scripts": { - "post-install-cmd": [ - "composer run-script dump:larastan" - ], - "post-update-cmd": [ - "composer run-script dump:larastan" - ], - "dump:larastan": [ - "LastDragon_ru\\LaraASP\\Dev\\PhpStan\\Larastan\\Extension::dump" - ] - }, - "minimum-stability": "dev", - "prefer-stable": true, - "config": { - "sort-packages": true, - "optimize-autoloader": true - }, - "repositories": { - "lara-asp": { - "type": "path", - "url": "../../packages/*" - } - } -} diff --git a/vendor-bin/phpstan/composer.lock b/vendor-bin/phpstan/composer.lock deleted file mode 100644 index 09abf5814..000000000 --- a/vendor-bin/phpstan/composer.lock +++ /dev/null @@ -1,6478 +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": "b524258a0c1f10f616f15f5dff8105c0", - "packages": [], - "packages-dev": [ - { - "name": "brick/math", - "version": "0.12.1", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/f510c0a40911935b77b86859eb5223d58d660df1", - "reference": "f510c0a40911935b77b86859eb5223d58d660df1", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^10.1", - "vimeo/psalm": "5.16.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "bignumber", - "brick", - "decimal", - "integer", - "math", - "mathematics", - "rational" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.12.1" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2023-11-29T23:19:16+00:00" - }, - { - "name": "carbonphp/carbon-doctrine-types", - "version": "3.2.0", - "source": { - "type": "git", - "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "reference": "18ba5ddfec8976260ead6e866180bd5d2f71aa1d", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "conflict": { - "doctrine/dbal": "<4.0.0 || >=5.0.0" - }, - "require-dev": { - "doctrine/dbal": "^4.0.0", - "nesbot/carbon": "^2.71.0 || ^3.0.0", - "phpunit/phpunit": "^10.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "KyleKatarn", - "email": "kylekatarnls@gmail.com" - } - ], - "description": "Types to use Carbon in Doctrine", - "keywords": [ - "carbon", - "date", - "datetime", - "doctrine", - "time" - ], - "support": { - "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.2.0" - }, - "funding": [ - { - "url": "https://github.com/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" - }, - { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", - "type": "tidelift" - } - ], - "time": "2024-02-09T16:56:22+00:00" - }, - { - "name": "composer/semver", - "version": "3.4.3", - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "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" - } - ], - "time": "2024-09-19T14:15:21+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "v3.0.3", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" - }, - "time": "2024-07-08T12:26:09+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "1.1.3", - "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" - }, - "type": "library", - "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" - }, - "time": "2024-01-30T19:34:25+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.10", - "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" - }, - "type": "library", - "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" - } - ], - "time": "2024-02-18T20:23:39+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", - "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6|^7" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.3.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2023-10-12T05:21:21+00:00" - }, - { - "name": "guzzlehttp/guzzle", - "version": "7.9.2", - "source": { - "type": "git", - "url": "https://github.com/guzzle/guzzle.git", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b", - "reference": "d281ed313b989f213357e3be1a179f02196ac99b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0.3", - "guzzlehttp/psr7": "^2.7.0", - "php": "^7.2.5 || ^8.0", - "psr/http-client": "^1.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "provide": { - "psr/http-client-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "ext-curl": "*", - "guzzle/client-integration-tests": "3.0.2", - "php-http/message-factory": "^1.1", - "phpunit/phpunit": "^8.5.39 || ^9.6.20", - "psr/log": "^1.1 || ^2.0 || ^3.0" - }, - "suggest": { - "ext-curl": "Required for CURL handler support", - "ext-intl": "Required for Internationalized Domain Name (IDN) support", - "psr/log": "Required for using the Log middleware" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "files": [ - "src/functions_include.php" - ], - "psr-4": { - "GuzzleHttp\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Jeremy Lindblom", - "email": "jeremeamia@gmail.com", - "homepage": "https://github.com/jeremeamia" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle is a PHP HTTP client library", - "keywords": [ - "client", - "curl", - "framework", - "http", - "http client", - "psr-18", - "psr-7", - "rest", - "web service" - ], - "support": { - "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.9.2" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle", - "type": "tidelift" - } - ], - "time": "2024-07-24T11:22:20+00:00" - }, - { - "name": "guzzlehttp/promises", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/promises.git", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "reference": "6ea8dd08867a2a42619d65c3deb2c0fcbf81c8f8", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Promise\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - } - ], - "description": "Guzzle promises library", - "keywords": [ - "promise" - ], - "support": { - "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises", - "type": "tidelift" - } - ], - "time": "2024-07-18T10:29:17+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.7.0", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.1 || ^2.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "http-interop/http-factory-tests": "0.9.0", - "phpunit/phpunit": "^8.5.39 || ^9.6.20" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://github.com/sagikazarmark" - }, - { - "name": "Tobias Schultze", - "email": "webmaster@tubo-world.de", - "homepage": "https://github.com/Tobion" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.7.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7", - "type": "tidelift" - } - ], - "time": "2024-07-18T11:15:46+00:00" - }, - { - "name": "guzzlehttp/uri-template", - "version": "v1.0.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "symfony/polyfill-php80": "^1.24" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.36 || ^9.6.15", - "uri-template/tests": "1.0.0" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\UriTemplate\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Michael Dowling", - "email": "mtdowling@gmail.com", - "homepage": "https://github.com/mtdowling" - }, - { - "name": "George Mponos", - "email": "gmponos@gmail.com", - "homepage": "https://github.com/gmponos" - }, - { - "name": "Tobias Nyholm", - "email": "tobias.nyholm@gmail.com", - "homepage": "https://github.com/Nyholm" - } - ], - "description": "A polyfill class for uri_template of PHP", - "keywords": [ - "guzzlehttp", - "uri-template" - ], - "support": { - "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://github.com/Nyholm", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", - "type": "tidelift" - } - ], - "time": "2023-12-03T19:50:20+00:00" - }, - { - "name": "illuminate/bus", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/bus.git", - "reference": "96d0fba7928cd0bc93198b9310065917340125ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/bus/zipball/96d0fba7928cd0bc93198b9310065917340125ed", - "reference": "96d0fba7928cd0bc93198b9310065917340125ed", - "shasum": "" - }, - "require": { - "illuminate/collections": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/pipeline": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2" - }, - "suggest": { - "illuminate/queue": "Required to use closures when chaining jobs (^7.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Bus\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Bus package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-08-31T23:42:47+00:00" - }, - { - "name": "illuminate/collections", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/collections.git", - "reference": "cbea9d7a82984bbc1a9376498533cc77513f9a09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/collections/zipball/cbea9d7a82984bbc1a9376498533cc77513f9a09", - "reference": "cbea9d7a82984bbc1a9376498533cc77513f9a09", - "shasum": "" - }, - "require": { - "illuminate/conditionable": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/macroable": "^11.0", - "php": "^8.2" - }, - "suggest": { - "symfony/var-dumper": "Required to use the dump method (^7.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "files": [ - "helpers.php" - ], - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Collections package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-12T14:50:04+00:00" - }, - { - "name": "illuminate/conditionable", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/conditionable.git", - "reference": "362dd761b9920367bca1427a902158225e9e3a23" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/conditionable/zipball/362dd761b9920367bca1427a902158225e9e3a23", - "reference": "362dd761b9920367bca1427a902158225e9e3a23", - "shasum": "" - }, - "require": { - "php": "^8.0.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Conditionable package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-06-28T20:10:30+00:00" - }, - { - "name": "illuminate/console", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/console.git", - "reference": "39baf2ed821a1a95ba7e75cde1e2f16ef2ac47b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/console/zipball/39baf2ed821a1a95ba7e75cde1e2f16ef2ac47b6", - "reference": "39baf2ed821a1a95ba7e75cde1e2f16ef2ac47b6", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "illuminate/collections": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/macroable": "^11.0", - "illuminate/support": "^11.0", - "illuminate/view": "^11.0", - "laravel/prompts": "^0.1.12", - "nunomaduro/termwind": "^2.0", - "php": "^8.2", - "symfony/console": "^7.0", - "symfony/polyfill-php83": "^1.28", - "symfony/process": "^7.0" - }, - "suggest": { - "dragonmantank/cron-expression": "Required to use scheduler (^3.3.2).", - "ext-pcntl": "Required to use signal trapping.", - "guzzlehttp/guzzle": "Required to use the ping methods on schedules (^7.8).", - "illuminate/bus": "Required to use the scheduled job dispatcher (^11.0).", - "illuminate/container": "Required to use the scheduler (^11.0).", - "illuminate/filesystem": "Required to use the generator command (^11.0).", - "illuminate/queue": "Required to use closures for scheduled jobs (^11.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Console\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Console package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-12T12:33:31+00:00" - }, - { - "name": "illuminate/container", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/container.git", - "reference": "66d20471c8c55ef056044dc1ff16da90d7b4d649" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/container/zipball/66d20471c8c55ef056044dc1ff16da90d7b4d649", - "reference": "66d20471c8c55ef056044dc1ff16da90d7b4d649", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^11.0", - "php": "^8.2", - "psr/container": "^1.1.1|^2.0.1" - }, - "provide": { - "psr/container-implementation": "1.1|2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Container\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Container package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-11T20:15:17+00:00" - }, - { - "name": "illuminate/contracts", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/contracts.git", - "reference": "5a4c6dcf633c1f69e1b70bbea1ef1b7d2186d3da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/contracts/zipball/5a4c6dcf633c1f69e1b70bbea1ef1b7d2186d3da", - "reference": "5a4c6dcf633c1f69e1b70bbea1ef1b7d2186d3da", - "shasum": "" - }, - "require": { - "php": "^8.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/simple-cache": "^1.0|^2.0|^3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Contracts\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Contracts package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-12T15:25:08+00:00" - }, - { - "name": "illuminate/database", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/database.git", - "reference": "98f3c91362e687e21f31a88eda8194c381a51953" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/database/zipball/98f3c91362e687e21f31a88eda8194c381a51953", - "reference": "98f3c91362e687e21f31a88eda8194c381a51953", - "shasum": "" - }, - "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", - "ext-pdo": "*", - "illuminate/collections": "^11.0", - "illuminate/container": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/macroable": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2" - }, - "suggest": { - "ext-filter": "Required to use the Postgres database driver.", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.21).", - "illuminate/console": "Required to use the database commands (^11.0).", - "illuminate/events": "Required to use the observers with Eloquent (^11.0).", - "illuminate/filesystem": "Required to use the migrations (^11.0).", - "illuminate/pagination": "Required to paginate the result set (^11.0).", - "symfony/finder": "Required to use Eloquent model factories (^7.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Database\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Database package.", - "homepage": "https://laravel.com", - "keywords": [ - "database", - "laravel", - "orm", - "sql" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-12T18:04:04+00:00" - }, - { - "name": "illuminate/events", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/events.git", - "reference": "cfd8a636234cc5b5f736f2987f33b0d471d974b3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/events/zipball/cfd8a636234cc5b5f736f2987f33b0d471d974b3", - "reference": "cfd8a636234cc5b5f736f2987f33b0d471d974b3", - "shasum": "" - }, - "require": { - "illuminate/bus": "^11.0", - "illuminate/collections": "^11.0", - "illuminate/container": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/macroable": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Illuminate\\Events\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Events package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-08-07T14:43:54+00:00" - }, - { - "name": "illuminate/filesystem", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/filesystem.git", - "reference": "87f93ffa6f1bcbe0dfd16ed97e3e1e537002c22d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/filesystem/zipball/87f93ffa6f1bcbe0dfd16ed97e3e1e537002c22d", - "reference": "87f93ffa6f1bcbe0dfd16ed97e3e1e537002c22d", - "shasum": "" - }, - "require": { - "illuminate/collections": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/macroable": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2", - "symfony/finder": "^7.0" - }, - "suggest": { - "ext-fileinfo": "Required to use the Filesystem class.", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-hash": "Required to use the Filesystem class.", - "illuminate/http": "Required for handling uploaded files (^7.0).", - "league/flysystem": "Required to use the Flysystem local driver (^3.0.16).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^7.0).", - "symfony/mime": "Required to enable support for guessing extensions (^7.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "files": [ - "functions.php" - ], - "psr-4": { - "Illuminate\\Filesystem\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Filesystem package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-12T12:32:25+00:00" - }, - { - "name": "illuminate/http", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/http.git", - "reference": "63e5cc3ddf87f7271fee6644274bc44e15b34af8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/http/zipball/63e5cc3ddf87f7271fee6644274bc44e15b34af8", - "reference": "63e5cc3ddf87f7271fee6644274bc44e15b34af8", - "shasum": "" - }, - "require": { - "ext-filter": "*", - "fruitcake/php-cors": "^1.3", - "guzzlehttp/guzzle": "^7.8", - "guzzlehttp/uri-template": "^1.0", - "illuminate/collections": "^11.0", - "illuminate/macroable": "^11.0", - "illuminate/session": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2", - "symfony/http-foundation": "^7.0", - "symfony/http-kernel": "^7.0", - "symfony/mime": "^7.0", - "symfony/polyfill-php83": "^1.28" - }, - "suggest": { - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image()." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Http\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Http package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-09T13:51:02+00:00" - }, - { - "name": "illuminate/macroable", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/macroable.git", - "reference": "e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/macroable/zipball/e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed", - "reference": "e1cb9e51b9ed5d3c9bc1ab431d0a52fe42a990ed", - "shasum": "" - }, - "require": { - "php": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Macroable package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-06-28T20:10:30+00:00" - }, - { - "name": "illuminate/pipeline", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/pipeline.git", - "reference": "ca9266eecf659f7e60c06758969b2ae3918ea3da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/pipeline/zipball/ca9266eecf659f7e60c06758969b2ae3918ea3da", - "reference": "ca9266eecf659f7e60c06758969b2ae3918ea3da", - "shasum": "" - }, - "require": { - "illuminate/contracts": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Pipeline\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Pipeline package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-06-28T20:10:30+00:00" - }, - { - "name": "illuminate/process", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/process.git", - "reference": "69df5be9de8389a2aed90dc2555b898ee0f3d231" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/process/zipball/69df5be9de8389a2aed90dc2555b898ee0f3d231", - "reference": "69df5be9de8389a2aed90dc2555b898ee0f3d231", - "shasum": "" - }, - "require": { - "illuminate/collections": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/macroable": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2", - "symfony/process": "^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Process\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Process package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-06-28T20:10:30+00:00" - }, - { - "name": "illuminate/session", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/session.git", - "reference": "cc4be7c46678328858ef2aa692013536717f32ec" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/session/zipball/cc4be7c46678328858ef2aa692013536717f32ec", - "reference": "cc4be7c46678328858ef2aa692013536717f32ec", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "ext-session": "*", - "illuminate/collections": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/filesystem": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2", - "symfony/finder": "^7.0", - "symfony/http-foundation": "^7.0" - }, - "suggest": { - "illuminate/console": "Required to use the session:table command (^11.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\Session\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Session package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-08-08T13:30:23+00:00" - }, - { - "name": "illuminate/support", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/support.git", - "reference": "8199097b4e24b05e8a035a6ea2fb5aeba645d71b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/support/zipball/8199097b4e24b05e8a035a6ea2fb5aeba645d71b", - "reference": "8199097b4e24b05e8a035a6ea2fb5aeba645d71b", - "shasum": "" - }, - "require": { - "doctrine/inflector": "^2.0", - "ext-ctype": "*", - "ext-filter": "*", - "ext-mbstring": "*", - "illuminate/collections": "^11.0", - "illuminate/conditionable": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/macroable": "^11.0", - "nesbot/carbon": "^2.72.2|^3.0", - "php": "^8.2", - "voku/portable-ascii": "^2.0" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "replace": { - "spatie/once": "*" - }, - "suggest": { - "illuminate/filesystem": "Required to use the composer class (^11.0).", - "laravel/serializable-closure": "Required to use the once function (^1.3).", - "league/commonmark": "Required to use Str::markdown() and Stringable::markdown() (^2.0.2).", - "ramsey/uuid": "Required to use Str::uuid() (^4.7).", - "symfony/process": "Required to use the composer class (^7.0).", - "symfony/uid": "Required to use Str::ulid() (^7.0).", - "symfony/var-dumper": "Required to use the dd function (^7.0).", - "vlucas/phpdotenv": "Required to use the Env class and env helper (^5.4.1)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "files": [ - "helpers.php" - ], - "psr-4": { - "Illuminate\\Support\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate Support package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-12T15:25:39+00:00" - }, - { - "name": "illuminate/view", - "version": "v11.23.5", - "source": { - "type": "git", - "url": "https://github.com/illuminate/view.git", - "reference": "1e8753ef1a3be0fe913b530babd08f6cc238bca0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/illuminate/view/zipball/1e8753ef1a3be0fe913b530babd08f6cc238bca0", - "reference": "1e8753ef1a3be0fe913b530babd08f6cc238bca0", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "illuminate/collections": "^11.0", - "illuminate/container": "^11.0", - "illuminate/contracts": "^11.0", - "illuminate/events": "^11.0", - "illuminate/filesystem": "^11.0", - "illuminate/macroable": "^11.0", - "illuminate/support": "^11.0", - "php": "^8.2" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "11.x-dev" - } - }, - "autoload": { - "psr-4": { - "Illuminate\\View\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Illuminate View package.", - "homepage": "https://laravel.com", - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2024-09-09T14:45:14+00:00" - }, - { - "name": "larastan/larastan", - "version": "v2.9.8", - "source": { - "type": "git", - "url": "https://github.com/larastan/larastan.git", - "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/340badd89b0eb5bddbc503a4829c08cf9a2819d7", - "reference": "340badd89b0eb5bddbc503a4829c08cf9a2819d7", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/console": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/container": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/contracts": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/database": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/http": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/pipeline": "^9.52.16 || ^10.28.0 || ^11.0", - "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.0", - "php": "^8.0.2", - "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^1.11.2" - }, - "require-dev": { - "doctrine/coding-standard": "^12.0", - "nikic/php-parser": "^4.19.1", - "orchestra/canvas": "^7.11.1 || ^8.11.0 || ^9.0.2", - "orchestra/testbench": "^7.33.0 || ^8.13.0 || ^9.0.3", - "phpunit/phpunit": "^9.6.13 || ^10.5.16" - }, - "suggest": { - "orchestra/testbench": "Using Larastan for analysing a package needs Testbench" - }, - "type": "phpstan-extension", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Larastan\\Larastan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Can Vural", - "email": "can9119@gmail.com" - }, - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", - "keywords": [ - "PHPStan", - "code analyse", - "code analysis", - "larastan", - "laravel", - "package", - "php", - "static analysis" - ], - "support": { - "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.8" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/canvural", - "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" - } - ], - "time": "2024-07-06T17:46:02+00:00" - }, - { - "name": "laravel/prompts", - "version": "v0.1.25", - "source": { - "type": "git", - "url": "https://github.com/laravel/prompts.git", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "illuminate/collections": "^10.0|^11.0", - "php": "^8.1", - "symfony/console": "^6.2|^7.0" - }, - "conflict": { - "illuminate/console": ">=10.17.0 <10.25.0", - "laravel/framework": ">=10.17.0 <10.25.0" - }, - "require-dev": { - "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3", - "phpstan/phpstan": "^1.11", - "phpstan/phpstan-mockery": "^1.1" - }, - "suggest": { - "ext-pcntl": "Required for the spinner to be animated." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "0.1.x-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Laravel\\Prompts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Add beautiful and user-friendly forms to your command-line applications.", - "support": { - "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.25" - }, - "time": "2024-08-12T22:06:33+00:00" - }, - { - "name": "lastdragon-ru/lara-asp-core", - "version": "dev-main", - "dist": { - "type": "path", - "url": "../../packages/core", - "reference": "a2fb967bdabf3de4a416f71f71a4d3e5846ba425" - }, - "require": { - "illuminate/console": "^10.34.0|^11.0.0", - "illuminate/container": "^10.34.0|^11.0.0", - "illuminate/contracts": "^10.34.0|^11.0.0", - "illuminate/support": "^10.34.0|^11.0.0", - "php": "^8.2|^8.3", - "symfony/deprecation-contracts": "^3.0.0", - "symfony/filesystem": "^6.3.0|^7.0.0", - "symfony/polyfill-php83": "^1.28" - }, - "require-dev": { - "lastdragon-ru/lara-asp-testing": "self.version", - "mockery/mockery": "^1.6.5", - "orchestra/testbench": "^8.0.0|^9.0.0", - "phpunit/phpunit": "^10.1.0|^11.0.0" - }, - "type": "library", - "extra": { - "lara-asp": { - "ci": { - "required-extensions": { - "league/flysystem": [ - "ext-fileinfo" - ], - "illuminate/console": [ - "ext-mbstring" - ] - } - } - }, - "laravel": { - "providers": [ - "LastDragon_ru\\LaraASP\\Core\\Provider" - ] - } - }, - "autoload": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Core\\": "src/" - }, - "exclude-from-classmap": [ - "src/**Test.php", - "src/Testing/**.php" - ] - }, - "autoload-dev": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Core\\Docs\\": "docs" - }, - "exclude-from-classmap": [ - "docs/" - ] - }, - "license": [ - "MIT" - ], - "description": "The Awesome Set of Packages for Laravel - The Core.", - "homepage": "https://github.com/LastDragon-ru/lara-asp", - "keywords": [ - "laravel", - "laravel-package", - "laravel-queue", - "php", - "queue" - ], - "support": { - "issues": "https://github.com/LastDragon-ru/lara-asp/issues", - "source": "https://github.com/LastDragon-ru/lara-asp", - "forum": "https://github.com/LastDragon-ru/lara-asp/discussions" - }, - "transport-options": { - "relative": true - } - }, - { - "name": "lastdragon-ru/lara-asp-dev", - "version": "dev-main", - "dist": { - "type": "path", - "url": "../../packages/dev", - "reference": "854b6f60f647713a6681bbd9ca44d4885002acf0" - }, - "require": { - "illuminate/contracts": "^10.34.0|^11.0.0", - "illuminate/support": "^10.34.0|^11.0.0", - "larastan/larastan": "^2.8.1", - "lastdragon-ru/lara-asp-core": "self.version", - "lastdragon-ru/lara-asp-documentator": "self.version", - "nette/neon": "^3.4", - "nikic/php-parser": "^4.18|^5.0", - "php": "^8.2|^8.3", - "phpstan/phpstan": "^1.10", - "symfony/var-dumper": "^6.3.0|^7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "^10.1.0|^11.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LastDragon_ru\\LaraASP\\Dev\\App\\Provider" - ] - } - }, - "autoload": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Dev\\": "src/" - }, - "exclude-from-classmap": [ - "src/**Test.php" - ] - }, - "license": [ - "MIT" - ], - "description": "The Awesome Set of Packages for Laravel - Dev tools.", - "homepage": "https://github.com/LastDragon-ru/lara-asp", - "keywords": [ - "dev", - "php", - "phpstan", - "phpstan-extension", - "phpstan-rule" - ], - "support": { - "issues": "https://github.com/LastDragon-ru/lara-asp/issues", - "source": "https://github.com/LastDragon-ru/lara-asp", - "forum": "https://github.com/LastDragon-ru/lara-asp/discussions" - }, - "transport-options": { - "relative": true - } - }, - { - "name": "lastdragon-ru/lara-asp-documentator", - "version": "dev-main", - "dist": { - "type": "path", - "url": "../../packages/documentator", - "reference": "4bb7390da487f7df7e3979cc974a0edf50d2aa9c" - }, - "require": { - "composer/semver": "^3.2", - "ext-filter": "*", - "ext-mbstring": "*", - "illuminate/console": "^10.34.0|^11.0.0", - "illuminate/contracts": "^10.34.0|^11.0.0", - "illuminate/process": "^10.34.0|^11.0.0", - "illuminate/support": "^10.34.0|^11.0.0", - "lastdragon-ru/lara-asp-core": "self.version", - "lastdragon-ru/lara-asp-formatter": "self.version", - "lastdragon-ru/lara-asp-graphql-printer": "self.version", - "lastdragon-ru/lara-asp-serializer": "self.version", - "league/commonmark": "^2.5.1", - "league/config": "^1.1.1", - "nikic/php-parser": "^4.18|^5.0", - "php": "^8.2|^8.3", - "phpstan/phpdoc-parser": "^1.25", - "symfony/console": "^6.3.0|^7.0.0", - "symfony/deprecation-contracts": "^3.0.0", - "symfony/filesystem": "^6.3.0|^7.0.0", - "symfony/finder": "^6.3.0|^7.0.0", - "symfony/polyfill-php83": "^1.28", - "symfony/serializer": "^6.3.3|^7.0.0" - }, - "require-dev": { - "lastdragon-ru/lara-asp-testing": "self.version", - "mockery/mockery": "^1.6.5", - "orchestra/testbench": "^8.0.0|^9.0.0", - "phpunit/phpunit": "^10.1.0|^11.0.0", - "webonyx/graphql-php": "^15.4.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LastDragon_ru\\LaraASP\\Documentator\\Provider" - ] - }, - "lara-asp": { - "ci": { - "required-extensions": { - "league/flysystem": [ - "ext-fileinfo" - ], - "illuminate/console": [ - "ext-mbstring" - ] - } - } - } - }, - "autoload": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Documentator\\": "src/" - }, - "exclude-from-classmap": [ - "src/**Test.php", - "src/Testing/**.php" - ] - }, - "autoload-dev": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Documentator\\Docs\\": "docs" - }, - "exclude-from-classmap": [ - "docs/" - ] - }, - "license": [ - "MIT" - ], - "description": "The Awesome Set of Packages for Laravel - The Documentator.", - "homepage": "https://github.com/LastDragon-ru/lara-asp", - "keywords": [ - "documetation", - "laravel", - "laravel-package", - "php", - "utils" - ], - "support": { - "issues": "https://github.com/LastDragon-ru/lara-asp/issues", - "source": "https://github.com/LastDragon-ru/lara-asp", - "forum": "https://github.com/LastDragon-ru/lara-asp/discussions" - }, - "transport-options": { - "relative": true - } - }, - { - "name": "lastdragon-ru/lara-asp-formatter", - "version": "dev-main", - "dist": { - "type": "path", - "url": "../../packages/formatter", - "reference": "c6139925539ce20c40b5c04905c6503faffcdaab" - }, - "require": { - "ext-bcmath": "*", - "ext-intl": "*", - "ext-mbstring": "*", - "illuminate/macroable": "^10.34.0|^11.0.0", - "illuminate/support": "^10.34.0|^11.0.0", - "lastdragon-ru/lara-asp-core": "self.version", - "php": "^8.2|^8.3", - "symfony/polyfill-php83": "^1.28" - }, - "require-dev": { - "lastdragon-ru/lara-asp-testing": "self.version", - "orchestra/testbench": "^8.0.0|^9.0.0", - "phpunit/phpunit": "^10.1.0|^11.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LastDragon_ru\\LaraASP\\Formatter\\Provider" - ] - }, - "lara-asp": { - "ci": { - "required-extensions": { - "league/flysystem": [ - "ext-fileinfo" - ] - } - } - } - }, - "autoload": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Formatter\\": "src/" - }, - "exclude-from-classmap": [ - "src/**Test.php", - "src/Testing/**.php" - ] - }, - "autoload-dev": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Formatter\\Docs\\": "docs" - }, - "exclude-from-classmap": [ - "docs/" - ] - }, - "license": [ - "MIT" - ], - "description": "The Awesome Set of Packages for Laravel - The Formatter.", - "homepage": "https://github.com/LastDragon-ru/lara-asp", - "keywords": [ - "formatter", - "intl", - "laravel", - "laravel-package", - "php" - ], - "support": { - "issues": "https://github.com/LastDragon-ru/lara-asp/issues", - "source": "https://github.com/LastDragon-ru/lara-asp", - "forum": "https://github.com/LastDragon-ru/lara-asp/discussions" - }, - "transport-options": { - "relative": true - } - }, - { - "name": "lastdragon-ru/lara-asp-graphql-printer", - "version": "dev-main", - "dist": { - "type": "path", - "url": "../../packages/graphql-printer", - "reference": "99ede8e795f25a8b29b7ce07f84e0513af6b09cc" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.2|^8.3", - "symfony/polyfill-php83": "^1.28", - "webonyx/graphql-php": "^15.4.0" - }, - "require-dev": { - "composer/class-map-generator": "^1.0", - "lastdragon-ru/lara-asp-testing": "self.version", - "mockery/mockery": "^1.6.5", - "phpunit/phpunit": "^10.1.0|^11.0.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "LastDragon_ru\\LaraASP\\GraphQLPrinter\\": "src/" - }, - "exclude-from-classmap": [ - "src/**Test.php", - "src/Testing/**.php" - ] - }, - "autoload-dev": { - "psr-4": { - "LastDragon_ru\\LaraASP\\GraphQLPrinter\\Docs\\": "docs" - }, - "exclude-from-classmap": [ - "docs/" - ] - }, - "license": [ - "MIT" - ], - "description": "The Awesome Set of Packages for Laravel - The GraphQL Printer.", - "homepage": "https://github.com/LastDragon-ru/lara-asp", - "keywords": [ - "GraphQL", - "GraphQL Printer", - "GraphQL Schema Printer", - "php" - ], - "support": { - "issues": "https://github.com/LastDragon-ru/lara-asp/issues", - "source": "https://github.com/LastDragon-ru/lara-asp", - "forum": "https://github.com/LastDragon-ru/lara-asp/discussions" - }, - "transport-options": { - "relative": true - } - }, - { - "name": "lastdragon-ru/lara-asp-serializer", - "version": "dev-main", - "dist": { - "type": "path", - "url": "../../packages/serializer", - "reference": "25faa7a957b4a03f63a513a9be2337b62040c641" - }, - "require": { - "illuminate/container": "^10.34.0|^11.0.0", - "illuminate/contracts": "^10.34.0|^11.0.0", - "illuminate/database": "^10.34.0|^11.0.0", - "illuminate/support": "^10.34.0|^11.0.0", - "lastdragon-ru/lara-asp-core": "self.version", - "php": "^8.2|^8.3", - "phpdocumentor/type-resolver": "^1.7", - "phpstan/phpdoc-parser": "^1.25", - "symfony/deprecation-contracts": "^3.0.0", - "symfony/polyfill-php83": "^1.28", - "symfony/property-access": "^6.3.0|^7.0.0", - "symfony/property-info": "^6.3.9|^7.0.0", - "symfony/serializer": "^6.3.3|^7.0.0" - }, - "require-dev": { - "lastdragon-ru/lara-asp-testing": "self.version", - "mockery/mockery": "^1.6.5", - "orchestra/testbench": "^8.0.0|^9.0.0", - "phpunit/phpunit": "^10.1.0|^11.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "LastDragon_ru\\LaraASP\\Serializer\\Provider" - ] - }, - "lara-asp": { - "ci": { - "required-extensions": { - "league/flysystem": [ - "ext-fileinfo" - ] - } - } - } - }, - "autoload": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Serializer\\": "src/" - }, - "exclude-from-classmap": [ - "src/**Test.php", - "src/Testing/**.php" - ] - }, - "autoload-dev": { - "psr-4": { - "LastDragon_ru\\LaraASP\\Serializer\\Docs\\": "docs" - }, - "exclude-from-classmap": [ - "docs/" - ] - }, - "license": [ - "MIT" - ], - "description": "The Awesome Set of Packages for Laravel - The Serializer.", - "homepage": "https://github.com/LastDragon-ru/lara-asp", - "keywords": [ - "laravel", - "laravel-package", - "php", - "serializer" - ], - "support": { - "issues": "https://github.com/LastDragon-ru/lara-asp/issues", - "source": "https://github.com/LastDragon-ru/lara-asp", - "forum": "https://github.com/LastDragon-ru/lara-asp/discussions" - }, - "transport-options": { - "relative": true - } - }, - { - "name": "league/commonmark", - "version": "2.5.3", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.31.1", - "commonmark/commonmark.js": "0.31.1", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4 || ^2.0", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 || ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", - "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.6-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2024-08-16T11:46:16+00:00" - }, - { - "name": "league/config", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0.1", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2022-12-11T20:36:23+00:00" - }, - { - "name": "nesbot/carbon", - "version": "3.8.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bbd3eef89af8ba66a3aa7952b5439168fbcc529f", - "reference": "bbd3eef89af8ba66a3aa7952b5439168fbcc529f", - "shasum": "" - }, - "require": { - "carbonphp/carbon-doctrine-types": "*", - "ext-json": "*", - "php": "^8.1", - "psr/clock": "^1.0", - "symfony/clock": "^6.3 || ^7.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/translation": "^4.4.18 || ^5.2.1|| ^6.0 || ^7.0" - }, - "provide": { - "psr/clock-implementation": "1.0" - }, - "require-dev": { - "doctrine/dbal": "^3.6.3 || ^4.0", - "doctrine/orm": "^2.15.2 || ^3.0", - "friendsofphp/php-cs-fixer": "^3.57.2", - "kylekatarnls/multi-tester": "^2.5.3", - "ondrejmirtes/better-reflection": "^6.25.0.4", - "phpmd/phpmd": "^2.15.0", - "phpstan/extension-installer": "^1.3.1", - "phpstan/phpstan": "^1.11.2", - "phpunit/phpunit": "^10.5.20", - "squizlabs/php_codesniffer": "^3.9.0" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://github.com/sponsors/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon#sponsor", - "type": "opencollective" - }, - { - "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", - "type": "tidelift" - } - ], - "time": "2024-08-19T06:22:39+00:00" - }, - { - "name": "nette/neon", - "version": "v3.4.3", - "source": { - "type": "git", - "url": "https://github.com/nette/neon.git", - "reference": "c8481c104431c8d94cc88424a1e21f47f8c93280" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/neon/zipball/c8481c104431c8d94cc88424a1e21f47f8c93280", - "reference": "c8481c104431c8d94cc88424a1e21f47f8c93280", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "8.0 - 8.3" - }, - "require-dev": { - "nette/tester": "^2.4", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.7" - }, - "bin": [ - "bin/neon-lint" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🍸 Nette NEON: encodes and decodes NEON file format.", - "homepage": "https://ne-on.org", - "keywords": [ - "export", - "import", - "neon", - "nette", - "yaml" - ], - "support": { - "issues": "https://github.com/nette/neon/issues", - "source": "https://github.com/nette/neon/tree/v3.4.3" - }, - "time": "2024-06-26T14:53:59+00:00" - }, - { - "name": "nette/schema", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", - "reference": "a6d3a6d1f545f01ef38e60f375d1cf1f4de98188", - "shasum": "" - }, - "require": { - "nette/utils": "^4.0", - "php": "8.1 - 8.3" - }, - "require-dev": { - "nette/tester": "^2.4", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.3-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.3.0" - }, - "time": "2023-12-11T11:54:22+00:00" - }, - { - "name": "nette/utils", - "version": "v4.0.5", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96", - "shasum": "" - }, - "require": { - "php": "8.0 - 8.4" - }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.5", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.9" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.5" - }, - "time": "2024-08-07T15:39:19+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v5.2.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" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "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" - }, - "time": "2024-09-15T16:40:33+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v2.1.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/e5f21eade88689536c0cdad4c3cd75f3ed26e01a", - "reference": "e5f21eade88689536c0cdad4c3cd75f3ed26e01a", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.2", - "symfony/console": "^7.0.4" - }, - "require-dev": { - "ergebnis/phpstan-rules": "^2.2.0", - "illuminate/console": "^11.1.1", - "laravel/pint": "^1.15.0", - "mockery/mockery": "^1.6.11", - "pestphp/pest": "^2.34.6", - "phpstan/phpstan": "^1.10.66", - "phpstan/phpstan-strict-rules": "^1.5.2", - "symfony/var-dumper": "^7.0.4", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] - }, - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "autoload": { - "files": [ - "src/Functions.php" - ], - "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v2.1.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2024-09-05T15:25:50+00:00" - }, - { - "name": "phpdocumentor/reflection-common", - "version": "2.2.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } - }, - "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" - }, - "time": "2020-06-27T09:03:43+00:00" - }, - { - "name": "phpdocumentor/type-resolver", - "version": "1.8.2", - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "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" - }, - "time": "2024-02-23T11:10:43+00:00" - }, - { - "name": "phpmyadmin/sql-parser", - "version": "5.10.0", - "source": { - "type": "git", - "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "91d980ab76c3f152481e367f62b921adc38af451" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/91d980ab76c3f152481e367f62b921adc38af451", - "reference": "91d980ab76c3f152481e367f62b921adc38af451", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.16" - }, - "conflict": { - "phpmyadmin/motranslator": "<3.0" - }, - "require-dev": { - "phpbench/phpbench": "^1.1", - "phpmyadmin/coding-standard": "^3.0", - "phpmyadmin/motranslator": "^4.0 || ^5.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.9.12", - "phpstan/phpstan-phpunit": "^1.3.3", - "phpunit/phpunit": "^8.5 || ^9.6", - "psalm/plugin-phpunit": "^0.16.1", - "vimeo/psalm": "^4.11", - "zumba/json-serializer": "~3.0.2" - }, - "suggest": { - "ext-mbstring": "For best performance", - "phpmyadmin/motranslator": "Translate messages to your favorite locale" - }, - "bin": [ - "bin/highlight-query", - "bin/lint-query", - "bin/sql-parser", - "bin/tokenize-query" - ], - "type": "library", - "autoload": { - "psr-4": { - "PhpMyAdmin\\SqlParser\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "The phpMyAdmin Team", - "email": "developers@phpmyadmin.net", - "homepage": "https://www.phpmyadmin.net/team/" - } - ], - "description": "A validating SQL lexer and parser with a focus on MySQL dialect.", - "homepage": "https://github.com/phpmyadmin/sql-parser", - "keywords": [ - "analysis", - "lexer", - "parser", - "query linter", - "sql", - "sql lexer", - "sql linter", - "sql parser", - "sql syntax highlighter", - "sql tokenizer" - ], - "support": { - "issues": "https://github.com/phpmyadmin/sql-parser/issues", - "source": "https://github.com/phpmyadmin/sql-parser" - }, - "funding": [ - { - "url": "https://www.phpmyadmin.net/donate/", - "type": "other" - } - ], - "time": "2024-08-29T20:56:34+00:00" - }, - { - "name": "phpstan/phpdoc-parser", - "version": "1.30.1", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "51b95ec8670af41009e2b2b56873bad96682413e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e", - "reference": "51b95ec8670af41009e2b2b56873bad96682413e", - "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" - }, - "type": "library", - "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.30.1" - }, - "time": "2024-09-07T20:13:05+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.12.4", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ffa517cb918591b93acc9b95c0bebdcd0e4538bd", - "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", - "keywords": [ - "dev", - "static analysis" - ], - "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" - }, - "funding": [ - { - "url": "https://github.com/ondrejmirtes", - "type": "github" - }, - { - "url": "https://github.com/phpstan", - "type": "github" - } - ], - "time": "2024-09-19T07:58:01+00:00" - }, - { - "name": "phpstan/phpstan-mockery", - "version": "1.1.3", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-mockery.git", - "reference": "98cac6e256b4ee60fdeb26a7dd81bb271b454e80" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-mockery/zipball/98cac6e256b4ee60fdeb26a7dd81bb271b454e80", - "reference": "98cac6e256b4ee60fdeb26a7dd81bb271b454e80", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.12" - }, - "require-dev": { - "mockery/mockery": "^1.6.11", - "nikic/php-parser": "^4.13.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-phpunit": "^1.4", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "^9.5" - }, - "type": "phpstan-extension", - "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan Mockery extension", - "support": { - "issues": "https://github.com/phpstan/phpstan-mockery/issues", - "source": "https://github.com/phpstan/phpstan-mockery/tree/1.1.3" - }, - "time": "2024-09-11T15:47:29+00:00" - }, - { - "name": "phpstan/phpstan-phpunit", - "version": "1.4.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-phpunit.git", - "reference": "f3ea021866f4263f07ca3636bf22c64be9610c11" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/f3ea021866f4263f07ca3636bf22c64be9610c11", - "reference": "f3ea021866f4263f07ca3636bf22c64be9610c11", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.11" - }, - "conflict": { - "phpunit/phpunit": "<7.0" - }, - "require-dev": { - "nikic/php-parser": "^4.13.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-strict-rules": "^1.5.1", - "phpunit/phpunit": "^9.5" - }, - "type": "phpstan-extension", - "extra": { - "phpstan": { - "includes": [ - "extension.neon", - "rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPUnit extensions and rules for PHPStan", - "support": { - "issues": "https://github.com/phpstan/phpstan-phpunit/issues", - "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.4.0" - }, - "time": "2024-04-20T06:39:00+00:00" - }, - { - "name": "phpstan/phpstan-strict-rules", - "version": "1.6.0", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan-strict-rules.git", - "reference": "363f921dd8441777d4fc137deb99beb486c77df1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/363f921dd8441777d4fc137deb99beb486c77df1", - "reference": "363f921dd8441777d4fc137deb99beb486c77df1", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.11" - }, - "require-dev": { - "nikic/php-parser": "^4.13.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpstan/phpstan-deprecation-rules": "^1.1", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^9.5" - }, - "type": "phpstan-extension", - "extra": { - "phpstan": { - "includes": [ - "rules.neon" - ] - } - }, - "autoload": { - "psr-4": { - "PHPStan\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Extra strict and opinionated rules for PHPStan", - "support": { - "issues": "https://github.com/phpstan/phpstan-strict-rules/issues", - "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.0" - }, - "time": "2024-04-20T06:37:51+00:00" - }, - { - "name": "psr/clock", - "version": "1.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" - }, - "type": "library", - "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" - }, - "time": "2022-11-25T14:36:26+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "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" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "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" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-client", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-client.git", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90", - "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90", - "shasum": "" - }, - "require": { - "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Client\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP clients", - "homepage": "https://github.com/php-fig/http-client", - "keywords": [ - "http", - "http-client", - "psr", - "psr-18" - ], - "support": { - "source": "https://github.com/php-fig/http-client" - }, - "time": "2023-09-23T14:17:50+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "psr/http-message": "^1.0 || ^2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory" - }, - "time": "2024-04-15T12:06:14+00:00" - }, - { - "name": "psr/http-message", - "version": "2.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/2.0" - }, - "time": "2023-04-04T09:54:51+00:00" - }, - { - "name": "psr/log", - "version": "3.0.2", - "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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "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" - }, - "time": "2024-09-11T13:17:53+00:00" - }, - { - "name": "psr/simple-cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" - }, - "time": "2021-10-29T13:26:27+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "spaze/phpstan-disallowed-calls", - "version": "v3.4.0", - "source": { - "type": "git", - "url": "https://github.com/spaze/phpstan-disallowed-calls.git", - "reference": "f7f1dc8d5ceeb2d0532dc9df66d13964b4baa5f4" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spaze/phpstan-disallowed-calls/zipball/f7f1dc8d5ceeb2d0532dc9df66d13964b4baa5f4", - "reference": "f7f1dc8d5ceeb2d0532dc9df66d13964b4baa5f4", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "phpstan/phpstan": "^1.10.52" - }, - "require-dev": { - "nette/neon": "^3.2", - "nikic/php-parser": "^4.13 || ^5.0", - "php-parallel-lint/php-console-highlighter": "^1.0", - "php-parallel-lint/php-parallel-lint": "^1.2", - "phpunit/phpunit": "^8.5 || ^10.1 || ^11.0", - "spaze/coding-standard": "^1.7" - }, - "type": "phpstan-extension", - "extra": { - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Spaze\\PHPStan\\Rules\\Disallowed\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Michal Špaček", - "email": "mail@michalspacek.cz", - "homepage": "https://www.michalspacek.cz" - } - ], - "description": "PHPStan rules to detect disallowed method & function calls, constant, namespace & superglobal usages", - "keywords": [ - "static analysis" - ], - "support": { - "issues": "https://github.com/spaze/phpstan-disallowed-calls/issues", - "source": "https://github.com/spaze/phpstan-disallowed-calls/tree/v3.4.0" - }, - "funding": [ - { - "url": "https://github.com/spaze", - "type": "github" - } - ], - "time": "2024-05-14T16:23:53+00:00" - }, - { - "name": "symfony/clock", - "version": "v7.1.1", - "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" - }, - "type": "library", - "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" - } - ], - "time": "2024-05-31T14:57:53+00:00" - }, - { - "name": "symfony/console", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/1eed7af6961d763e7832e874d7f9b21c3ea9c111", - "reference": "1eed7af6961d763e7832e874d7f9b21c3ea9c111", - "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" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-08-15T22:48:53+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.5.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "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" - } - ], - "time": "2024-04-18T09:32:20+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v7.1.3", - "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" - }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "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" - } - ], - "time": "2024-07-26T13:02:51+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v7.1.1", - "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" - }, - "type": "library", - "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" - } - ], - "time": "2024-05-31T14:57:53+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "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" - } - ], - "time": "2024-04-18T09:32:20+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v7.1.2", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/92a91985250c251de9b947a14bb2c9390b1a562c", - "reference": "92a91985250c251de9b947a14bb2c9390b1a562c", - "shasum": "" - }, - "require": { - "php": ">=8.2", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "require-dev": { - "symfony/process": "^6.4|^7.0" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-06-28T10:03:55+00:00" - }, - { - "name": "symfony/finder", - "version": "v7.1.4", - "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" - }, - "type": "library", - "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" - } - ], - "time": "2024-08-13T14:28:19+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v7.1.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", - "reference": "f602d5c17d1fa02f8019ace2687d9d136b7f4a1a", - "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" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-07-26T12:41:01+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6efcbd1b3f444f631c386504fc83eeca25963747", - "reference": "6efcbd1b3f444f631c386504fc83eeca25963747", - "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" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-08-30T17:02:28+00:00" - }, - { - "name": "symfony/mime", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "ccaa6c2503db867f472a587291e764d6a1e58758" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ccaa6c2503db867f472a587291e764d6a1e58758", - "reference": "ccaa6c2503db867f472a587291e764d6a1e58758", - "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" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-08-13T14:28:19+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", - "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/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" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.31.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" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.31.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" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.31.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" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.31.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" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.31.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8", - "shasum": "" - }, - "require": { - "php": ">=7.2" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/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" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/polyfill-php83", - "version": "v1.31.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" - }, - "type": "library", - "extra": { - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "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" - } - ], - "time": "2024-09-09T11:45:10+00:00" - }, - { - "name": "symfony/process", - "version": "v7.1.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/7f2f542c668ad6c313dc4a5e9c3321f733197eca", - "reference": "7f2f542c668ad6c313dc4a5e9c3321f733197eca", - "shasum": "" - }, - "require": { - "php": ">=8.2" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-07-26T12:44:47+00:00" - }, - { - "name": "symfony/property-access", - "version": "v7.1.4", - "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" - }, - "type": "library", - "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" - } - ], - "time": "2024-08-30T16:12:47+00:00" - }, - { - "name": "symfony/property-info", - "version": "v7.1.3", - "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" - }, - "type": "library", - "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" - } - ], - "time": "2024-07-26T07:36:36+00:00" - }, - { - "name": "symfony/serializer", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/serializer.git", - "reference": "0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb", - "reference": "0158b0e91b7cf7e744a6fb9acaeb613d1ca40dbb", - "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/uid": "<6.4", - "symfony/validator": "<6.4", - "symfony/yaml": "<6.4" - }, - "require-dev": { - "phpdocumentor/reflection-docblock": "^3.2|^4.0|^5.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", - "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" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-08-22T09:39:57+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.5.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "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" - } - ], - "time": "2024-04-18T09:32:20+00:00" - }, - { - "name": "symfony/string", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/6cd670a6d968eaeb1c77c2e76091c45c56bc367b", - "reference": "6cd670a6d968eaeb1c77c2e76091c45c56bc367b", - "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" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-08-12T09:59:40+00:00" - }, - { - "name": "symfony/translation", - "version": "v7.1.3", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/8d5e50c813ba2859a6dfc99a0765c550507934a1", - "reference": "8d5e50c813ba2859a6dfc99a0765c550507934a1", - "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" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-07-26T12:41:01+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.5.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" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "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" - } - ], - "time": "2024-04-18T09:32:20+00:00" - }, - { - "name": "symfony/type-info", - "version": "v7.1.1", - "source": { - "type": "git", - "url": "https://github.com/symfony/type-info.git", - "reference": "60b28eb733f1453287f1263ed305b96091e0d1dc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/type-info/zipball/60b28eb733f1453287f1263ed305b96091e0d1dc", - "reference": "60b28eb733f1453287f1263ed305b96091e0d1dc", - "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" - }, - "type": "library", - "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.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" - } - ], - "time": "2024-05-31T14:59:31+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v7.1.4", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a5fa7481b199090964d6fd5dab6294d5a870c7aa", - "reference": "a5fa7481b199090964d6fd5dab6294d5a870c7aa", - "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" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "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.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" - } - ], - "time": "2024-08-30T16:12:47+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2022-03-08T17:03:00+00:00" - }, - { - "name": "webonyx/graphql-php", - "version": "v15.14.0", - "source": { - "type": "git", - "url": "https://github.com/webonyx/graphql-php.git", - "reference": "87f956498895757f0808f22c193577ed090f7f3b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/87f956498895757f0808f22c193577ed090f7f3b", - "reference": "87f956498895757f0808f22c193577ed090f7f3b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^7.4 || ^8" - }, - "require-dev": { - "amphp/amp": "^2.6", - "amphp/http-server": "^2.1", - "dms/phpunit-arraysubset-asserts": "dev-master", - "ergebnis/composer-normalize": "^2.28", - "friendsofphp/php-cs-fixer": "3.64.0", - "mll-lab/php-cs-fixer-config": "^5.9.2", - "nyholm/psr7": "^1.5", - "phpbench/phpbench": "^1.2", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "1.12.3", - "phpstan/phpstan-phpunit": "1.4.0", - "phpstan/phpstan-strict-rules": "1.6.0", - "phpunit/phpunit": "^9.5 || ^10.5.21", - "psr/http-message": "^1 || ^2", - "react/http": "^1.6", - "react/promise": "^2.0 || ^3.0", - "rector/rector": "^1.0", - "symfony/polyfill-php81": "^1.23", - "symfony/var-exporter": "^5 || ^6 || ^7", - "thecodingmachine/safe": "^1.3 || ^2" - }, - "suggest": { - "amphp/http-server": "To leverage async resolving with webserver on AMPHP platform", - "psr/http-message": "To use standard GraphQL server", - "react/promise": "To leverage async resolving on React PHP platform" - }, - "type": "library", - "autoload": { - "psr-4": { - "GraphQL\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP port of GraphQL reference implementation", - "homepage": "https://github.com/webonyx/graphql-php", - "keywords": [ - "api", - "graphql" - ], - "support": { - "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v15.14.0" - }, - "funding": [ - { - "url": "https://opencollective.com/webonyx-graphql-php", - "type": "open_collective" - } - ], - "time": "2024-09-10T10:36:37+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "lastdragon-ru/lara-asp-core": 20, - "lastdragon-ru/lara-asp-dev": 20 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": [], - "platform-dev": [], - "plugin-api-version": "2.6.0" -}