diff --git a/bin/flow.php b/bin/flow.php index 95b5e88fe..a875a00c4 100755 --- a/bin/flow.php +++ b/bin/flow.php @@ -16,7 +16,7 @@ use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; -if ('' !== \Phar::running(false)) { +if ('' !== Phar::running(false)) { require 'phar://flow.phar/vendor/autoload.php'; } else { require __DIR__ . '/../vendor/autoload.php'; @@ -57,7 +57,7 @@ public function execute(InputInterface $input, OutputInterface $output) : int $dataFrame->run(); } - } catch (\Exception $exception) { + } catch (Exception $exception) { $style = new SymfonyStyle($input, $output); $style->error($exception->getMessage()); diff --git a/composer.lock b/composer.lock index e8d9d8376..e52f018d5 100644 --- a/composer.lock +++ b/composer.lock @@ -735,27 +735,27 @@ }, { "name": "google/apiclient", - "version": "v2.15.1", + "version": "v2.15.3", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client.git", - "reference": "7a95ed29e4b6c6859d2d22300c5455a92e2622ad" + "reference": "e70273c06d18824de77e114247ae3102f8aec64d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/7a95ed29e4b6c6859d2d22300c5455a92e2622ad", - "reference": "7a95ed29e4b6c6859d2d22300c5455a92e2622ad", + "url": "https://api.github.com/repos/googleapis/google-api-php-client/zipball/e70273c06d18824de77e114247ae3102f8aec64d", + "reference": "e70273c06d18824de77e114247ae3102f8aec64d", "shasum": "" }, "require": { "firebase/php-jwt": "~6.0", "google/apiclient-services": "~0.200", - "google/auth": "^1.28", - "guzzlehttp/guzzle": "~6.5||~7.0", + "google/auth": "^1.33", + "guzzlehttp/guzzle": "^6.5.8||^7.4.5", "guzzlehttp/psr7": "^1.8.4||^2.2.1", "monolog/monolog": "^2.9||^3.0", "php": "^7.4|^8.0", - "phpseclib/phpseclib": "^3.0.19" + "phpseclib/phpseclib": "^3.0.34" }, "require-dev": { "cache/filesystem-adapter": "^1.1", @@ -763,7 +763,7 @@ "phpcompatibility/php-compatibility": "^9.2", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "squizlabs/php_codesniffer": "^3.0", + "squizlabs/php_codesniffer": "^3.8", "symfony/css-selector": "~2.1", "symfony/dom-crawler": "~2.1" }, @@ -798,22 +798,22 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client/issues", - "source": "https://github.com/googleapis/google-api-php-client/tree/v2.15.1" + "source": "https://github.com/googleapis/google-api-php-client/tree/v2.15.3" }, - "time": "2023-09-13T21:46:39+00:00" + "time": "2024-01-04T19:15:22+00:00" }, { "name": "google/apiclient-services", - "version": "v0.329.0", + "version": "v0.332.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-api-php-client-services.git", - "reference": "3216fd1b6ba33c5f6658c3581e9723ff21d9acb7" + "reference": "027cc7fe60877c2b6ba0f380d419acf65a3755d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/3216fd1b6ba33c5f6658c3581e9723ff21d9acb7", - "reference": "3216fd1b6ba33c5f6658c3581e9723ff21d9acb7", + "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/027cc7fe60877c2b6ba0f380d419acf65a3755d2", + "reference": "027cc7fe60877c2b6ba0f380d419acf65a3755d2", "shasum": "" }, "require": { @@ -842,22 +842,22 @@ ], "support": { "issues": "https://github.com/googleapis/google-api-php-client-services/issues", - "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.329.0" + "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.332.0" }, - "time": "2023-12-24T01:02:15+00:00" + "time": "2024-01-15T00:56:15+00:00" }, { "name": "google/auth", - "version": "v1.33.0", + "version": "v1.34.0", "source": { "type": "git", "url": "https://github.com/googleapis/google-auth-library-php.git", - "reference": "682dc6c30bb509953c9e43bb0960d901582da00b" + "reference": "155daeadfd2f09743f611ea493b828d382519575" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/682dc6c30bb509953c9e43bb0960d901582da00b", - "reference": "682dc6c30bb509953c9e43bb0960d901582da00b", + "url": "https://api.github.com/repos/googleapis/google-auth-library-php/zipball/155daeadfd2f09743f611ea493b828d382519575", + "reference": "155daeadfd2f09743f611ea493b828d382519575", "shasum": "" }, "require": { @@ -900,9 +900,9 @@ "support": { "docs": "https://googleapis.github.io/google-auth-library-php/main/", "issues": "https://github.com/googleapis/google-auth-library-php/issues", - "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.33.0" + "source": "https://github.com/googleapis/google-auth-library-php/tree/v1.34.0" }, - "time": "2023-11-30T15:49:27+00:00" + "time": "2024-01-03T20:45:15+00:00" }, { "name": "guzzlehttp/guzzle", @@ -1496,16 +1496,16 @@ }, { "name": "meilisearch/meilisearch-php", - "version": "v1.5.0", + "version": "v1.6.0", "source": { "type": "git", "url": "https://github.com/meilisearch/meilisearch-php.git", - "reference": "c5d217c779348a66712505ede5167325bc79d5bc" + "reference": "4dbb26d583bd14506784846fb86cbb408007b132" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/c5d217c779348a66712505ede5167325bc79d5bc", - "reference": "c5d217c779348a66712505ede5167325bc79d5bc", + "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/4dbb26d583bd14506784846fb86cbb408007b132", + "reference": "4dbb26d583bd14506784846fb86cbb408007b132", "shasum": "" }, "require": { @@ -1520,7 +1520,7 @@ "guzzlehttp/guzzle": "^7.1", "http-interop/http-factory-guzzle": "^1.0", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "1.10.40", + "phpstan/phpstan": "1.10.50", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", @@ -1558,9 +1558,9 @@ ], "support": { "issues": "https://github.com/meilisearch/meilisearch-php/issues", - "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.5.0" + "source": "https://github.com/meilisearch/meilisearch-php/tree/v1.6.0" }, - "time": "2023-11-20T13:57:38+00:00" + "time": "2024-01-15T13:07:32+00:00" }, { "name": "monolog/monolog", @@ -2094,16 +2094,16 @@ }, { "name": "php-http/promise", - "version": "1.2.1", + "version": "1.3.0", "source": { "type": "git", "url": "https://github.com/php-http/promise.git", - "reference": "44a67cb59f708f826f3bec35f22030b3edb90119" + "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/promise/zipball/44a67cb59f708f826f3bec35f22030b3edb90119", - "reference": "44a67cb59f708f826f3bec35f22030b3edb90119", + "url": "https://api.github.com/repos/php-http/promise/zipball/2916a606d3b390f4e9e8e2b8dd68581508be0f07", + "reference": "2916a606d3b390f4e9e8e2b8dd68581508be0f07", "shasum": "" }, "require": { @@ -2140,9 +2140,9 @@ ], "support": { "issues": "https://github.com/php-http/promise/issues", - "source": "https://github.com/php-http/promise/tree/1.2.1" + "source": "https://github.com/php-http/promise/tree/1.3.0" }, - "time": "2023-11-08T12:57:08+00:00" + "time": "2024-01-04T18:49:48+00:00" }, { "name": "phpseclib/phpseclib", @@ -3822,16 +3822,16 @@ }, { "name": "aws/aws-sdk-php", - "version": "3.295.4", + "version": "3.296.4", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "2372661db989fe4229abd95f4434b37252076d58" + "reference": "2efd701a5e5f50560319ffe0669942dc8d3a4a54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2372661db989fe4229abd95f4434b37252076d58", - "reference": "2372661db989fe4229abd95f4434b37252076d58", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/2efd701a5e5f50560319ffe0669942dc8d3a4a54", + "reference": "2efd701a5e5f50560319ffe0669942dc8d3a4a54", "shasum": "" }, "require": { @@ -3911,9 +3911,9 @@ "support": { "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "issues": "https://github.com/aws/aws-sdk-php/issues", - "source": "https://github.com/aws/aws-sdk-php/tree/3.295.4" + "source": "https://github.com/aws/aws-sdk-php/tree/3.296.4" }, - "time": "2023-12-29T19:07:49+00:00" + "time": "2024-01-17T23:34:36+00:00" }, { "name": "brick/math", @@ -3972,16 +3972,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { @@ -4007,11 +4007,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -4034,9 +4029,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "time": "2023-06-12T08:44:38+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { "name": "fig/log-test", diff --git a/examples/data/orders_flow.php b/examples/data/orders_flow.php index 3ab59e171..b2be69fa6 100644 --- a/examples/data/orders_flow.php +++ b/examples/data/orders_flow.php @@ -15,9 +15,9 @@ $orders = \array_map( static fn (int $i) : array => [ 'order_id' => $faker->uuid, - 'created_at' => $faker->dateTimeThisYear->format(\DateTimeInterface::RFC3339), - 'updated_at' => $faker->dateTimeThisMonth->format(\DateTimeInterface::RFC3339), - 'cancelled_at' => $faker->optional(0.1)->dateTimeThisMonth?->format(\DateTimeInterface::RFC3339), + 'created_at' => $faker->dateTimeThisYear->format(DateTimeInterface::RFC3339), + 'updated_at' => $faker->dateTimeThisMonth->format(DateTimeInterface::RFC3339), + 'cancelled_at' => $faker->optional(0.1)->dateTimeThisMonth?->format(DateTimeInterface::RFC3339), 'total_price' => $faker->randomFloat(2, 0, 500), 'discount' => $faker->randomFloat(2, 0, 50), 'customer' => [ diff --git a/examples/run_examples.php b/examples/run_examples.php index c1c33c33d..6a4a0570b 100755 --- a/examples/run_examples.php +++ b/examples/run_examples.php @@ -45,7 +45,7 @@ try { include $file->getRealPath(); - } catch (\Exception $e) { + } catch (Exception $e) { print "Example failed: {$e->getMessage()}\n"; } } diff --git a/examples/topics/dataframe/partition_by.php b/examples/topics/dataframe/partition_by.php index f6283bcaa..319724ff0 100644 --- a/examples/topics/dataframe/partition_by.php +++ b/examples/topics/dataframe/partition_by.php @@ -22,7 +22,7 @@ function (int $i) : array { for ($d = 0; $d < $maxItems; $d++) { $data[] = [ 'id' => Uuid::uuid4()->toString(), - 'created_at' => (new \DateTimeImmutable('2020-01-01'))->add(new \DateInterval('P' . $i . 'D'))->setTime(\random_int(0, 23), \random_int(0, 59), \random_int(0, 59)), + 'created_at' => (new DateTimeImmutable('2020-01-01'))->add(new DateInterval('P' . $i . 'D'))->setTime(\random_int(0, 23), \random_int(0, 59), \random_int(0, 59)), 'value' => \random_int(1, 1000), ]; } diff --git a/psalm.xml b/psalm.xml index cebe0fdf1..5e1fa3ca2 100644 --- a/psalm.xml +++ b/psalm.xml @@ -37,4 +37,7 @@ + + + diff --git a/src/adapter/etl-adapter-avro/src/Flow/ETL/Adapter/Avro/FlixTech/SchemaConverter.php b/src/adapter/etl-adapter-avro/src/Flow/ETL/Adapter/Avro/FlixTech/SchemaConverter.php index 9cf7a51bd..23901ab64 100644 --- a/src/adapter/etl-adapter-avro/src/Flow/ETL/Adapter/Avro/FlixTech/SchemaConverter.php +++ b/src/adapter/etl-adapter-avro/src/Flow/ETL/Adapter/Avro/FlixTech/SchemaConverter.php @@ -48,7 +48,7 @@ private function convert(Definition $definition) : array if ($type === ListEntry::class) { /** @var ListType $listType */ - $listType = $definition->metadata()->get(Schema\FlowMetadata::METADATA_LIST_ENTRY_TYPE); + $listType = $definition->metadata()->get(FlowMetadata::METADATA_LIST_ENTRY_TYPE); $listElement = $listType->element(); if ($listElement->type() instanceof ScalarType) { @@ -72,7 +72,7 @@ private function convert(Definition $definition) : array if ($type === Entry\MapEntry::class) { /** @var MapType $mapType */ - $mapType = $definition->metadata()->get(Schema\FlowMetadata::METADATA_MAP_ENTRY_TYPE); + $mapType = $definition->metadata()->get(FlowMetadata::METADATA_MAP_ENTRY_TYPE); return match ($mapType->value()->type()->toString()) { ScalarType::STRING => ['name' => $definition->entry()->name(), 'type' => ['type' => 'map', 'values' => \AvroSchema::STRING_TYPE]], @@ -126,7 +126,7 @@ private function convert(Definition $definition) : array 'type' => \AvroSchema::ENUM_SCHEMA, 'symbols' => \array_map( fn (\UnitEnum $e) => $e->name, - $definition->metadata()->get(Schema\FlowMetadata::METADATA_ENUM_CASES) + $definition->metadata()->get(FlowMetadata::METADATA_ENUM_CASES) ), ], ], @@ -135,7 +135,7 @@ private function convert(Definition $definition) : array Entry\BooleanEntry::class => ['name' => $definition->entry()->name(), 'type' => \AvroSchema::BOOLEAN_TYPE], Entry\ArrayEntry::class => throw new RuntimeException("ArrayEntry entry can't be saved in Avro file, try convert it to ListEntry"), Entry\DateTimeEntry::class => ['name' => $definition->entry()->name(), 'type' => 'long', \AvroSchema::LOGICAL_TYPE_ATTR => 'timestamp-micros'], - Entry\NullEntry::class => ['name' => $definition->entry()->name(), 'type' => \AvroSchema::NULL_TYPE], + NullEntry::class => ['name' => $definition->entry()->name(), 'type' => \AvroSchema::NULL_TYPE], default => throw new RuntimeException($type . ' is not yet supported.') }; diff --git a/src/adapter/etl-adapter-elasticsearch/src/Flow/ETL/Adapter/Elasticsearch/EntryIdFactory/HashIdFactory.php b/src/adapter/etl-adapter-elasticsearch/src/Flow/ETL/Adapter/Elasticsearch/EntryIdFactory/HashIdFactory.php index d76e8e22b..4742b31b5 100644 --- a/src/adapter/etl-adapter-elasticsearch/src/Flow/ETL/Adapter/Elasticsearch/EntryIdFactory/HashIdFactory.php +++ b/src/adapter/etl-adapter-elasticsearch/src/Flow/ETL/Adapter/Elasticsearch/EntryIdFactory/HashIdFactory.php @@ -25,7 +25,7 @@ public function __construct(string ...$entryNames) public function create(Row $row) : Entry { - return new Row\Entry\StringEntry( + return new Entry\StringEntry( 'id', \hash( $this->hashName, diff --git a/src/adapter/etl-adapter-http/src/Flow/ETL/Adapter/Http/RequestEntriesFactory.php b/src/adapter/etl-adapter-http/src/Flow/ETL/Adapter/Http/RequestEntriesFactory.php index 6f549f108..d205abff6 100644 --- a/src/adapter/etl-adapter-http/src/Flow/ETL/Adapter/Http/RequestEntriesFactory.php +++ b/src/adapter/etl-adapter-http/src/Flow/ETL/Adapter/Http/RequestEntriesFactory.php @@ -55,7 +55,7 @@ public function create(RequestInterface $request) : Row\Entries if (!empty($requestBodyContent)) { switch ($requestType) { case 'json': - if (\class_exists(\Flow\ETL\Row\Entry\JsonEntry::class)) { + if (\class_exists(Row\Entry\JsonEntry::class)) { $requestBodyEntry = new Row\Entry\JsonEntry('request_body', (array) \json_decode($requestBodyContent, true, 512, JSON_THROW_ON_ERROR)); } else { $requestBodyEntry = new Row\Entry\StringEntry('request_body', $requestBodyContent); diff --git a/src/adapter/etl-adapter-http/src/Flow/ETL/Adapter/Http/ResponseEntriesFactory.php b/src/adapter/etl-adapter-http/src/Flow/ETL/Adapter/Http/ResponseEntriesFactory.php index ac54e21f3..8dbf5d5ec 100644 --- a/src/adapter/etl-adapter-http/src/Flow/ETL/Adapter/Http/ResponseEntriesFactory.php +++ b/src/adapter/etl-adapter-http/src/Flow/ETL/Adapter/Http/ResponseEntriesFactory.php @@ -45,7 +45,7 @@ public function create(ResponseInterface $response) : Row\Entries switch ($responseType) { case 'json': - if (\class_exists(\Flow\ETL\Row\Entry\JsonEntry::class)) { + if (\class_exists(Row\Entry\JsonEntry::class)) { $responseBodyEntry = new Row\Entry\JsonEntry('response_body', (array) \json_decode($responseBodyContent, true, 512, JSON_THROW_ON_ERROR)); } else { $responseBodyEntry = new Row\Entry\StringEntry('response_body', $responseBodyContent); diff --git a/src/adapter/etl-adapter-meilisearch/src/Flow/ETL/Adapter/Meilisearch/functions.php b/src/adapter/etl-adapter-meilisearch/src/Flow/ETL/Adapter/Meilisearch/functions.php index 03d377907..996bc9e58 100644 --- a/src/adapter/etl-adapter-meilisearch/src/Flow/ETL/Adapter/Meilisearch/functions.php +++ b/src/adapter/etl-adapter-meilisearch/src/Flow/ETL/Adapter/Meilisearch/functions.php @@ -34,7 +34,7 @@ function to_meilisearch_bulk_update( */ function meilisearch_hits_to_rows() : MeilisearchPHP\HitsIntoRowsTransformer { - return new \Flow\ETL\Adapter\Meilisearch\MeilisearchPHP\HitsIntoRowsTransformer(); + return new MeilisearchPHP\HitsIntoRowsTransformer(); } /** diff --git a/src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/SchemaConverter.php b/src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/SchemaConverter.php index 91a2727fa..1baee4f38 100644 --- a/src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/SchemaConverter.php +++ b/src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/SchemaConverter.php @@ -280,7 +280,7 @@ private function typeFromDefinition(Definition $definition) : Type case Entry\JsonEntry::class: case Entry\StringEntry::class: return type_string($definition->isNullable()); - case Entry\NullEntry::class: + case NullEntry::class: return type_null(); case Entry\DateTimeEntry::class: return type_object(\DateTimeInterface::class, $definition->isNullable()); diff --git a/src/core/etl/src/Flow/ETL/DSL/functions.php b/src/core/etl/src/Flow/ETL/DSL/functions.php index 3c6ef37a4..5ad47e6f3 100644 --- a/src/core/etl/src/Flow/ETL/DSL/functions.php +++ b/src/core/etl/src/Flow/ETL/DSL/functions.php @@ -156,7 +156,7 @@ function from_memory(Memory $memory) : Extractor\MemoryExtractor return new Extractor\MemoryExtractor($memory); } -function local_files(string|Path $directory, bool $recursive = false) : Extractor\LocalFileListExtractor +function local_files(string|Path $directory, bool $recursive = false) : LocalFileListExtractor { return new LocalFileListExtractor(\is_string($directory) ? Path::realpath($directory) : $directory, $recursive); } diff --git a/src/core/etl/src/Flow/ETL/ExternalSort/CacheExternalSort.php b/src/core/etl/src/Flow/ETL/ExternalSort/CacheExternalSort.php index e91e39ecc..a99efcb6e 100644 --- a/src/core/etl/src/Flow/ETL/ExternalSort/CacheExternalSort.php +++ b/src/core/etl/src/Flow/ETL/ExternalSort/CacheExternalSort.php @@ -55,7 +55,7 @@ public function sortBy(Reference ...$refs) : Extractor $minHeap = $cachedParts->createHeap(...$refs); - $bufferCache = new ExternalSort\BufferCache($this->cache, $maxRowsSize); + $bufferCache = new BufferCache($this->cache, $maxRowsSize); while ($cachedParts->notEmpty() || !$minHeap->isEmpty()) { $cachedParts->takeNext($minHeap, $this->id, $bufferCache); diff --git a/src/core/etl/src/Flow/ETL/Filesystem/Path.php b/src/core/etl/src/Flow/ETL/Filesystem/Path.php index 9a0bc5be2..3925714da 100644 --- a/src/core/etl/src/Flow/ETL/Filesystem/Path.php +++ b/src/core/etl/src/Flow/ETL/Filesystem/Path.php @@ -18,6 +18,8 @@ final class Path private string $filename; + private Partitions|null $partitions = null; + private string $path; private string $scheme; @@ -233,11 +235,15 @@ public function parentDirectory() : self public function partitions() : Partitions { - if ($this->isPathPattern($this->path)) { - return new Partitions(); + if ($this->partitions === null) { + if ($this->isPathPattern($this->path)) { + $this->partitions = new Partitions(); + } else { + $this->partitions = Partition::fromUri($this->path); + } } - return Partition::fromUri($this->path); + return $this->partitions; } public function path() : string diff --git a/src/core/etl/src/Flow/ETL/Function/ScalarFunctionChain.php b/src/core/etl/src/Flow/ETL/Function/ScalarFunctionChain.php index 7d11809f9..f7a9850ab 100644 --- a/src/core/etl/src/Flow/ETL/Function/ScalarFunctionChain.php +++ b/src/core/etl/src/Flow/ETL/Function/ScalarFunctionChain.php @@ -16,37 +16,37 @@ abstract class ScalarFunctionChain implements ScalarFunction { public function arrayGet(string $path) : self { - return new Function\ArrayGet($this, $path); + return new ArrayGet($this, $path); } public function arrayGetCollection(string ...$keys) : self { - return new Function\ArrayGetCollection($this, $keys); + return new ArrayGetCollection($this, $keys); } public function arrayGetCollectionFirst(string ...$keys) : self { - return Function\ArrayGetCollection::fromFirst($this, $keys); + return ArrayGetCollection::fromFirst($this, $keys); } public function arrayMerge(ScalarFunction $ref) : self { - return new Function\ArrayMerge($this, $ref); + return new ArrayMerge($this, $ref); } public function arrayMergeCollection() : self { - return new Function\ArrayMergeCollection($this); + return new ArrayMergeCollection($this); } public function arrayReverse(bool $preserveKeys = false) : self { - return new Function\ArrayReverse($this, $preserveKeys); + return new ArrayReverse($this, $preserveKeys); } public function arraySort(?string $algorithm = null, ?int $flags = null, bool $recursive = true) : self { - return new Function\ArraySort($this, $algorithm ? Sort::fromString($algorithm) : Sort::sort, $flags, $recursive); + return new ArraySort($this, $algorithm ? Sort::fromString($algorithm) : Sort::sort, $flags, $recursive); } public function between(ScalarFunction $lowerBoundRef, ScalarFunction $upperBoundRef, Boundary $boundary = Boundary::LEFT_INCLUSIVE) : self @@ -56,7 +56,7 @@ public function between(ScalarFunction $lowerBoundRef, ScalarFunction $upperBoun public function capitalize() : self { - return new Function\Capitalize($this); + return new Capitalize($this); } public function cast(string $type) : self @@ -66,7 +66,7 @@ public function cast(string $type) : self public function concat(ScalarFunction ...$params) : self { - return new Function\Concat($this, ...$params); + return new Concat($this, ...$params); } public function contains(ScalarFunction $needle) : self @@ -76,12 +76,12 @@ public function contains(ScalarFunction $needle) : self public function dateFormat(string $format = 'Y-m-d') : self { - return new Function\DateTimeFormat($this, $format); + return new DateTimeFormat($this, $format); } public function dateTimeFormat(string $format = 'Y-m-d H:i:s') : self { - return new Function\DateTimeFormat($this, $format); + return new DateTimeFormat($this, $format); } public function divide(ScalarFunction $ref) : self @@ -91,12 +91,12 @@ public function divide(ScalarFunction $ref) : self public function domNodeAttribute(string $attribute) : self { - return new Function\DOMNodeAttribute($this, $attribute); + return new DOMNodeAttribute($this, $attribute); } public function domNodeValue() : self { - return new Function\DOMNodeValue($this); + return new DOMNodeValue($this); } public function endsWith(ScalarFunction $needle) : self @@ -111,7 +111,7 @@ public function equals(ScalarFunction $ref) : self public function exists() : self { - return new Function\Exists($this); + return new Exists($this); } /** @@ -151,7 +151,7 @@ public function greaterThanEqual(ScalarFunction $ref) : self public function hash(string $algorithm = 'xxh128', bool $binary = false, array $options = []) : self { - return new Function\Hash($this, $algorithm, $binary, $options); + return new Hash($this, $algorithm, $binary, $options); } public function isEven() : self @@ -213,12 +213,12 @@ public function isType(string ...$entryClass) : self public function jsonDecode(int $flags = JSON_THROW_ON_ERROR) : self { - return new Function\JsonDecode($this, $flags); + return new JsonDecode($this, $flags); } public function jsonEncode(int $flags = JSON_THROW_ON_ERROR) : self { - return new Function\JsonEncode($this, $flags); + return new JsonEncode($this, $flags); } public function lessThan(ScalarFunction $ref) : self @@ -238,12 +238,12 @@ public function literal(mixed $value) : self public function lower() : self { - return new Function\ToLower($this); + return new ToLower($this); } public function method(ScalarFunction $method, ScalarFunction ...$params) : self { - return new Function\CallMethod($this, $method, ...$params); + return new CallMethod($this, $method, ...$params); } public function minus(ScalarFunction $ref) : self @@ -285,7 +285,7 @@ public function numberFormat(?ScalarFunction $decimals = null, ?ScalarFunction $ $thousandsSeparator = lit(','); } - return new Function\NumberFormat($this, $decimals, $decimalSeparator, $thousandsSeparator); + return new NumberFormat($this, $decimals, $decimalSeparator, $thousandsSeparator); } public function plus(ScalarFunction $ref) : self @@ -300,17 +300,17 @@ public function power(ScalarFunction $ref) : self public function regexMatch(ScalarFunction $pattern) : self { - return new Function\PregMatch($pattern, $this); + return new PregMatch($pattern, $this); } public function regexMatchAll(ScalarFunction $pattern, ?ScalarFunction $flags = null) : self { - return new Function\PregMatchAll($pattern, $this, $flags); + return new PregMatchAll($pattern, $this, $flags); } public function regexReplace(ScalarFunction $pattern, ScalarFunction $replacement) : self { - return new Function\PregReplace($pattern, $replacement, $this); + return new PregReplace($pattern, $replacement, $this); } /** @@ -319,7 +319,7 @@ public function regexReplace(ScalarFunction $pattern, ScalarFunction $replacemen */ public function round(ScalarFunction $precision, int $mode = PHP_ROUND_HALF_UP) : self { - return new Function\Round($this, $precision, $mode); + return new Round($this, $precision, $mode); } public function same(ScalarFunction $ref) : self @@ -329,17 +329,17 @@ public function same(ScalarFunction $ref) : self public function sanitize(?ScalarFunction $placeholder = null, ?ScalarFunction $skipCharacters = null) : self { - return new Function\Sanitize($this, $placeholder ?: new Function\Literal('*'), $skipCharacters ?: new Function\Literal(0)); + return new Sanitize($this, $placeholder ?: new Literal('*'), $skipCharacters ?: new Literal(0)); } public function size() : self { - return new Function\Size($this); + return new Size($this); } public function sprintf(ScalarFunction ...$params) : self { - return new Function\Sprintf($this, ...$params); + return new Sprintf($this, ...$params); } public function startsWith(ScalarFunction $needle) : self @@ -349,22 +349,22 @@ public function startsWith(ScalarFunction $needle) : self public function strPad(int $length, string $pad_string = ' ', int $type = STR_PAD_RIGHT) : self { - return new Function\StrPad($this, $length, $pad_string, $type); + return new StrPad($this, $length, $pad_string, $type); } public function strPadBoth(int $length, string $pad_string = ' ') : self { - return new Function\StrPad($this, $length, $pad_string, STR_PAD_BOTH); + return new StrPad($this, $length, $pad_string, STR_PAD_BOTH); } public function strPadLeft(int $length, string $pad_string = ' ') : self { - return new Function\StrPad($this, $length, $pad_string, STR_PAD_LEFT); + return new StrPad($this, $length, $pad_string, STR_PAD_LEFT); } public function strPadRight(int $length, string $pad_string = ' ') : self { - return new Function\StrPad($this, $length, $pad_string, STR_PAD_RIGHT); + return new StrPad($this, $length, $pad_string, STR_PAD_RIGHT); } /** @@ -373,7 +373,7 @@ public function strPadRight(int $length, string $pad_string = ' ') : self */ public function strReplace(string|array $search, string|array $replace) : self { - return new Function\StrReplace($this, $search, $replace); + return new StrReplace($this, $search, $replace); } /** @@ -382,7 +382,7 @@ public function strReplace(string|array $search, string|array $replace) : self */ public function toDate(string $format = \DateTimeInterface::RFC3339, \DateTimeZone $timeZone = new \DateTimeZone('UTC')) : self { - return new Function\ToDate($this, $format, $timeZone); + return new ToDate($this, $format, $timeZone); } /** @@ -391,12 +391,12 @@ public function toDate(string $format = \DateTimeInterface::RFC3339, \DateTimeZo */ public function toDateTime(string $format = 'Y-m-d H:i:s', \DateTimeZone $timeZone = new \DateTimeZone('UTC')) : self { - return new Function\ToDateTime($this, $format, $timeZone); + return new ToDateTime($this, $format, $timeZone); } public function trim(Trim\Type $type = Trim\Type::BOTH, string $characters = " \t\n\r\0\x0B") : self { - return new Function\Trim($this, $type, $characters); + return new Trim($this, $type, $characters); } /** @@ -420,16 +420,16 @@ public function trim(Trim\Type $type = Trim\Type::BOTH, string $characters = " \ */ public function unpack(array $skipKeys = [], ?string $entryPrefix = null) : self { - return new Function\ArrayUnpack($this, $skipKeys, $entryPrefix); + return new ArrayUnpack($this, $skipKeys, $entryPrefix); } public function upper() : self { - return new Function\ToUpper($this); + return new ToUpper($this); } public function xpath(string $string) : self { - return new Function\XPath($this, $string); + return new XPath($this, $string); } } diff --git a/src/core/etl/src/Flow/ETL/PHP/Type/Logical/ListType.php b/src/core/etl/src/Flow/ETL/PHP/Type/Logical/ListType.php index 73c4bf6e5..aca4665b8 100644 --- a/src/core/etl/src/Flow/ETL/PHP/Type/Logical/ListType.php +++ b/src/core/etl/src/Flow/ETL/PHP/Type/Logical/ListType.php @@ -7,7 +7,7 @@ final class ListType implements LogicalType { - public function __construct(private readonly List\ListElement $element) + public function __construct(private readonly ListElement $element) { } diff --git a/src/core/etl/src/Flow/ETL/PHP/Type/Logical/MapType.php b/src/core/etl/src/Flow/ETL/PHP/Type/Logical/MapType.php index 30a25dce1..c8cb45e23 100644 --- a/src/core/etl/src/Flow/ETL/PHP/Type/Logical/MapType.php +++ b/src/core/etl/src/Flow/ETL/PHP/Type/Logical/MapType.php @@ -8,7 +8,7 @@ final class MapType implements LogicalType { - public function __construct(private readonly Map\MapKey $key, private readonly Map\MapValue $value) + public function __construct(private readonly MapKey $key, private readonly MapValue $value) { } diff --git a/src/core/etl/src/Flow/ETL/Row/Factory/NativeEntryFactory.php b/src/core/etl/src/Flow/ETL/Row/Factory/NativeEntryFactory.php index fe46c299f..e1582df95 100644 --- a/src/core/etl/src/Flow/ETL/Row/Factory/NativeEntryFactory.php +++ b/src/core/etl/src/Flow/ETL/Row/Factory/NativeEntryFactory.php @@ -17,7 +17,7 @@ use function Flow\ETL\DSL\null_entry; use function Flow\ETL\DSL\obj_entry; use function Flow\ETL\DSL\object_entry; -use function Flow\ETL\DSL\string_entry; +use function Flow\ETL\DSL\str_entry; use function Flow\ETL\DSL\struct_entry; use function Flow\ETL\DSL\uuid_entry; use function Flow\ETL\DSL\xml_entry; @@ -32,7 +32,6 @@ use Flow\ETL\PHP\Type\Native\ObjectType; use Flow\ETL\PHP\Type\Native\ScalarType; use Flow\ETL\PHP\Type\TypeDetector; -use Flow\ETL\Row; use Flow\ETL\Row\Entry; use Flow\ETL\Row\EntryFactory; use Flow\ETL\Row\Schema; @@ -52,7 +51,7 @@ public function create(string $entryName, mixed $value, ?Schema $schema = null) } if (null === $value) { - return new Row\Entry\NullEntry($entryName); + return new Entry\NullEntry($entryName); } $valueType = (new TypeDetector())->detectType($value); @@ -75,7 +74,7 @@ public function create(string $entryName, mixed $value, ?Schema $schema = null) } } - return string_entry($entryName, $value); + return str_entry($entryName, $value); } if ($valueType->isFloat()) { @@ -128,11 +127,11 @@ public function create(string $entryName, mixed $value, ?Schema $schema = null) } if ($valueType instanceof MapType) { - return new Row\Entry\MapEntry($entryName, $value, $valueType); + return new Entry\MapEntry($entryName, $value, $valueType); } if ($valueType instanceof StructureType) { - return new Row\Entry\StructureEntry($entryName, $value, $valueType); + return new Entry\StructureEntry($entryName, $value, $valueType); } throw new InvalidArgumentException("{$valueType->toString()} can't be converted to any known Entry"); @@ -147,7 +146,7 @@ private function fromDefinition(Schema\Definition $definition, mixed $value) : E try { foreach ($definition->types() as $type) { if ($type === Entry\StringEntry::class) { - return string_entry($definition->entry()->name(), $value); + return str_entry($definition->entry()->name(), $value); } if ($type === Entry\IntegerEntry::class) { diff --git a/src/core/etl/src/Flow/ETL/Row/Schema/Definition.php b/src/core/etl/src/Flow/ETL/Row/Schema/Definition.php index 3f3830da2..648a0f2b0 100644 --- a/src/core/etl/src/Flow/ETL/Row/Schema/Definition.php +++ b/src/core/etl/src/Flow/ETL/Row/Schema/Definition.php @@ -233,7 +233,7 @@ public function isUnion() : bool public function matches(Entry $entry) : bool { - if ($this->isNullable() && $entry instanceof Entry\NullEntry && $entry->is($this->ref)) { + if ($this->isNullable() && $entry instanceof NullEntry && $entry->is($this->ref)) { return true; } diff --git a/src/core/etl/tests/Flow/ETL/Tests/Unit/Row/Factory/NativeEntryFactoryTest.php b/src/core/etl/tests/Flow/ETL/Tests/Unit/Row/Factory/NativeEntryFactoryTest.php index 859ea48c0..8fc0e84f2 100644 --- a/src/core/etl/tests/Flow/ETL/Tests/Unit/Row/Factory/NativeEntryFactoryTest.php +++ b/src/core/etl/tests/Flow/ETL/Tests/Unit/Row/Factory/NativeEntryFactoryTest.php @@ -105,7 +105,7 @@ public function test_boolean_with_schema() : void public function test_conversion_to_different_type_with_schema() : void { $this->expectException(InvalidArgumentException::class); - $this->expectExceptionMessage("Field \"e\" conversion exception. Flow\ETL\DSL\string_entry(): Argument #2 (\$value) must be of type string, int given, called in"); + $this->expectExceptionMessage("Field \"e\" conversion exception. Flow\ETL\DSL\str_entry(): Argument #2 (\$value) must be of type string, int given, called in"); (new NativeEntryFactory()) ->create('e', 1, new Schema(Schema\Definition::string('e'))); diff --git a/src/core/etl/tests/Flow/ETL/Tests/Unit/Transformer/CallbackRowTransformerTest.php b/src/core/etl/tests/Flow/ETL/Tests/Unit/Transformer/CallbackRowTransformerTest.php index d17599640..21b312302 100755 --- a/src/core/etl/tests/Flow/ETL/Tests/Unit/Transformer/CallbackRowTransformerTest.php +++ b/src/core/etl/tests/Flow/ETL/Tests/Unit/Transformer/CallbackRowTransformerTest.php @@ -23,7 +23,7 @@ public function test_replacing_dashes_in_entry_name_with_str_replace_callback() $rows = $callbackTransformer->transform( new Rows( Row::create( - new Row\Entry\IntegerEntry('old-int', 1000), + new Entry\IntegerEntry('old-int', 1000), new Entry\StringEntry('string-entry ', 'String entry') ) ), diff --git a/tools/box/composer.lock b/tools/box/composer.lock index 3d95cc171..f83c14e39 100644 --- a/tools/box/composer.lock +++ b/tools/box/composer.lock @@ -1639,16 +1639,16 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.8.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/fad452781b3d774e3337b0c0b245dd8e5a4455fc", + "reference": "fad452781b3d774e3337b0c0b245dd8e5a4455fc", "shasum": "" }, "require": { @@ -1691,22 +1691,22 @@ "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.7.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.8.0" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-01-11T11:49:22+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.5", + "version": "1.25.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "fedf211ff14ec8381c9bf5714e33a7a552dd1acc" + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/fedf211ff14ec8381c9bf5714e33a7a552dd1acc", - "reference": "fedf211ff14ec8381c9bf5714e33a7a552dd1acc", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/bd84b629c8de41aa2ae82c067c955e06f1b00240", + "reference": "bd84b629c8de41aa2ae82c067c955e06f1b00240", "shasum": "" }, "require": { @@ -1738,9 +1738,9 @@ "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.24.5" + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.25.0" }, - "time": "2023-12-16T09:33:33+00:00" + "time": "2024-01-04T17:06:16+00:00" }, { "name": "psr/container", diff --git a/tools/cs-fixer/composer.lock b/tools/cs-fixer/composer.lock index fac4818a7..5fd6fd09a 100644 --- a/tools/cs-fixer/composer.lock +++ b/tools/cs-fixer/composer.lock @@ -227,21 +227,22 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.45.0", + "version": "v3.47.1", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "c0daa33cb2533cd73f48dde1c70c2afa3e7953b5" + "reference": "173c60d1eff911c9c54322704623a45561d3241d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/c0daa33cb2533cd73f48dde1c70c2afa3e7953b5", - "reference": "c0daa33cb2533cd73f48dde1c70c2afa3e7953b5", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/173c60d1eff911c9c54322704623a45561d3241d", + "reference": "173c60d1eff911c9c54322704623a45561d3241d", "shasum": "" }, "require": { "composer/semver": "^3.4", "composer/xdebug-handler": "^3.0.3", + "ext-filter": "*", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", @@ -305,7 +306,7 @@ ], "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.45.0" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.47.1" }, "funding": [ { @@ -313,7 +314,7 @@ "type": "github" } ], - "time": "2023-12-30T02:07:07+00:00" + "time": "2024-01-16T18:54:21+00:00" }, { "name": "psr/container", diff --git a/tools/phpunit/composer.lock b/tools/phpunit/composer.lock index 117b3f9d0..376ef143b 100644 --- a/tools/phpunit/composer.lock +++ b/tools/phpunit/composer.lock @@ -68,25 +68,27 @@ }, { "name": "nikic/php-parser", - "version": "v4.18.0", + "version": "v5.0.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999" + "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/1bcbb2179f97633e98bbbc87044ee2611c7d7999", - "reference": "1bcbb2179f97633e98bbbc87044ee2611c7d7999", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4a21235f7e56e713259a6f76bf4b5ea08502b9dc", + "reference": "4a21235f7e56e713259a6f76bf4b5ea08502b9dc", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -94,7 +96,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -118,9 +120,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.18.0" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.0" }, - "time": "2023-12-10T21:03:43+00:00" + "time": "2024-01-07T17:17:35+00:00" }, { "name": "phar-io/manifest", @@ -556,16 +558,16 @@ }, { "name": "phpunit/phpunit", - "version": "10.5.5", + "version": "10.5.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "ed21115d505b4b4f7dc7b5651464e19a2c7f7856" + "reference": "e5c5b397a95cb0db013270a985726fcae93e61b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/ed21115d505b4b4f7dc7b5651464e19a2c7f7856", - "reference": "ed21115d505b4b4f7dc7b5651464e19a2c7f7856", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e5c5b397a95cb0db013270a985726fcae93e61b8", + "reference": "e5c5b397a95cb0db013270a985726fcae93e61b8", "shasum": "" }, "require": { @@ -637,7 +639,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.5" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.7" }, "funding": [ { @@ -653,7 +655,7 @@ "type": "tidelift" } ], - "time": "2023-12-27T15:13:52+00:00" + "time": "2024-01-14T16:40:30+00:00" }, { "name": "sebastian/cli-parser", diff --git a/tools/psalm/composer.lock b/tools/psalm/composer.lock index dbe272a78..70405afda 100644 --- a/tools/psalm/composer.lock +++ b/tools/psalm/composer.lock @@ -9,16 +9,16 @@ "packages-dev": [ { "name": "psalm/phar", - "version": "5.19.1", + "version": "5.20.0", "source": { "type": "git", "url": "https://github.com/psalm/phar.git", - "reference": "c062e477cae7068a4cbcf3dba2a176687c5565a1" + "reference": "459eb19aa1cdf405d86d48d9529735facc82a6f4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/psalm/phar/zipball/c062e477cae7068a4cbcf3dba2a176687c5565a1", - "reference": "c062e477cae7068a4cbcf3dba2a176687c5565a1", + "url": "https://api.github.com/repos/psalm/phar/zipball/459eb19aa1cdf405d86d48d9529735facc82a6f4", + "reference": "459eb19aa1cdf405d86d48d9529735facc82a6f4", "shasum": "" }, "require": { @@ -38,9 +38,9 @@ "description": "Composer-based Psalm Phar", "support": { "issues": "https://github.com/psalm/phar/issues", - "source": "https://github.com/psalm/phar/tree/5.19.1" + "source": "https://github.com/psalm/phar/tree/5.20.0" }, - "time": "2024-01-17T11:52:12+00:00" + "time": "2024-01-18T12:24:24+00:00" } ], "aliases": [],