From 1354e43bf0ea3bd8f019309f142ba3675d8a44b5 Mon Sep 17 00:00:00 2001
From: Norbert Orzechowicz <1921950+norberttech@users.noreply.github.com>
Date: Thu, 26 Sep 2024 22:26:09 +0200
Subject: [PATCH] symfony http foundation bridge - flow streamed response
(#1234)
* RM
* Added symfony-http-foundation-bridge
* Updated dependencies
* Fixed website
* Fixed failing tests
* Ignore first failure when removing container
---
.github/workflows/monorepo-split.yml | 2 +
.github/workflows/test-suite.yml | 4 +-
composer.json | 130 ++++----
composer.lock | 287 ++++++++++++++----
.../bridges/symfony-http-foundation-bridge.md | 110 +++++++
phpunit.xml.dist | 4 +-
.../src/Flow/ETL/Adapter/CSV/functions.php | 6 +-
.../Flow/ETL/Adapter/Parquet/functions.php | 8 +-
.../Integration/AzureBlobServiceTestCase.php | 7 +-
.../symfony/http-foundation/.gitattributes | 9 +
.../.github/workflows/readonly.yaml | 17 ++
.../symfony/http-foundation/CONTRIBUTING.md | 6 +
src/bridge/symfony/http-foundation/LICENSE | 19 ++
src/bridge/symfony/http-foundation/README.md | 9 +
.../symfony/http-foundation/composer.json | 40 +++
.../HttpFoundation/FlowStreamedResponse.php | 44 +++
.../Bridge/Symfony/HttpFoundation/Output.php | 15 +
.../HttpFoundation/Output/CSVOutput.php | 44 +++
.../HttpFoundation/Output/JsonOutput.php | 38 +++
.../HttpFoundation/Output/ParquetOutput.php | 47 +++
.../Symfony/HttpFoundation/Output/Type.php | 25 ++
.../HttpFoundation/Output/XMLOutput.php | 42 +++
.../Transformation/MaskColumns.php | 24 ++
.../Transformation/Transformations.php | 29 ++
.../Integration/FlowStreamedResponseTest.php | 83 +++++
.../MaskColumnTransformationTest.php | 36 +++
.../FilesystemStreamsTest.php | 6 +-
.../Azure/SDK/Exception/AzureException.php | 2 +-
.../src/Flow/Filesystem/DSL/functions.php | 10 +-
.../Local/StdOut/StdOutDestinationStream.php | 22 +-
.../filesystem/src/Flow/Filesystem/Path.php | 21 +-
.../src/Flow/Filesystem/Path/Options.php | 43 +++
.../Filesystem/Stream/ResourceContext.php | 2 +-
.../Integration/StdOutFilesystemTest.php | 35 ++-
.../Flow/Filesystem/Tests/Unit/PathTest.php | 5 +
tools/blackfire/composer.lock | 14 +-
tools/box/composer.lock | 98 +++---
tools/cs-fixer/composer.lock | 64 ++--
tools/infection/composer.lock | 60 ++--
tools/phpbench/composer.lock | 48 +--
tools/phpstan/composer.lock | 10 +-
tools/phpunit/composer.lock | 12 +-
42 files changed, 1214 insertions(+), 323 deletions(-)
create mode 100644 docs/components/bridges/symfony-http-foundation-bridge.md
create mode 100644 src/bridge/symfony/http-foundation/.gitattributes
create mode 100644 src/bridge/symfony/http-foundation/.github/workflows/readonly.yaml
create mode 100644 src/bridge/symfony/http-foundation/CONTRIBUTING.md
create mode 100644 src/bridge/symfony/http-foundation/LICENSE
create mode 100644 src/bridge/symfony/http-foundation/README.md
create mode 100644 src/bridge/symfony/http-foundation/composer.json
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/FlowStreamedResponse.php
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output.php
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/CSVOutput.php
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/JsonOutput.php
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/ParquetOutput.php
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/Type.php
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/XMLOutput.php
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Transformation/MaskColumns.php
create mode 100644 src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Transformation/Transformations.php
create mode 100644 src/bridge/symfony/http-foundation/tests/Flow/Bridge/Symfony/HttpFoundation/Tests/Integration/FlowStreamedResponseTest.php
create mode 100644 src/bridge/symfony/http-foundation/tests/Flow/Bridge/Symfony/HttpFoundation/Tests/Unit/Transformation/MaskColumnTransformationTest.php
create mode 100644 src/lib/filesystem/src/Flow/Filesystem/Path/Options.php
diff --git a/.github/workflows/monorepo-split.yml b/.github/workflows/monorepo-split.yml
index f1da1af68..90578cbab 100644
--- a/.github/workflows/monorepo-split.yml
+++ b/.github/workflows/monorepo-split.yml
@@ -74,6 +74,8 @@ jobs:
split_repository: 'filesystem-azure-bridge'
- local_path: 'src/bridge/monolog/http'
split_repository: 'monolog-http-bridge'
+ - local_path: 'src/bridge/symfony/http-foundation'
+ split_repository: 'symfony-http-foundation-bridge'
- local_path: 'src/tools/homebrew'
split_repository: 'homebrew-flow'
diff --git a/.github/workflows/test-suite.yml b/.github/workflows/test-suite.yml
index 79d126878..4f276ef22 100644
--- a/.github/workflows/test-suite.yml
+++ b/.github/workflows/test-suite.yml
@@ -110,7 +110,9 @@ jobs:
- name: Start Azurite blob endpoint
shell: bash
- run: azurite-blob --blobHost 0.0.0.0 --blobPort 10000 &
+ run: |
+ azurite-blob --blobHost 0.0.0.0 --blobPort 10000 &
+ sleep 5
env:
AZURITE_ACCOUNTS: flowphpaccount01:flowphpkey01
diff --git a/composer.json b/composer.json
index 51fbb6adb..1e9caf32d 100644
--- a/composer.json
+++ b/composer.json
@@ -1,14 +1,14 @@
{
"name": "flow-php/flow",
- "type": "library",
"description": "PHP ETL - Extract Transform Load - Data processing framework",
+ "license": "MIT",
+ "type": "library",
"keywords": [
"etl",
"extract",
"transform",
"load"
],
- "license": "MIT",
"require": {
"php": "~8.1.0 || ~8.2.0 || ~8.3.0",
"ext-bcmath": "*",
@@ -36,6 +36,7 @@
"psr/log": "^2.0 || ^3.0",
"psr/simple-cache": "^1.0 || ^2.0 || ^3.0",
"symfony/console": "^6.3 || ^7.0",
+ "symfony/http-foundation": "~5.4.0 || ~6.4.0 || ~7",
"webmozart/glob": "^3.0 || ^4.0"
},
"require-dev": {
@@ -53,29 +54,41 @@
"symfony/finder": "^6.3 || ^7.0",
"symfony/uid": "^6.3 || ^7.0"
},
+ "replace": {
+ "flow-php/array-dot": "self.version",
+ "flow-php/azure-sdk": "self.version",
+ "flow-php/doctrine-dbal-bulk": "self.version",
+ "flow-php/doctrine-dbal-bulk-tools": "self.version",
+ "flow-php/dremel": "self.version",
+ "flow-php/etl": "self.version",
+ "flow-php/etl-adapter-avro": "self.version",
+ "flow-php/etl-adapter-chartjs": "self.version",
+ "flow-php/etl-adapter-csv": "self.version",
+ "flow-php/etl-adapter-dbal-tools": "self.version",
+ "flow-php/etl-adapter-doctrine": "self.version",
+ "flow-php/etl-adapter-elasticsearch": "self.version",
+ "flow-php/etl-adapter-filesystem": "self.version",
+ "flow-php/etl-adapter-google-sheet": "self.version",
+ "flow-php/etl-adapter-http": "self.version",
+ "flow-php/etl-adapter-json": "self.version",
+ "flow-php/etl-adapter-logger": "self.version",
+ "flow-php/etl-adapter-logger-tools": "self.version",
+ "flow-php/etl-adapter-meilisearch": "self.version",
+ "flow-php/etl-adapter-parquet": "self.version",
+ "flow-php/etl-adapter-text": "self.version",
+ "flow-php/etl-adapter-xml": "self.version",
+ "flow-php/filesystem": "self.version",
+ "flow-php/filesytem-azure-bridge": "self.version",
+ "flow-php/monolog-http-bridge": "self.version",
+ "flow-php/parquet": "self.version",
+ "flow-php/parquet-viewer": "self.version",
+ "flow-php/rdsl": "self.version",
+ "flow-php/snappy": "self.version",
+ "flow-php/symfony-http-foundation": "self.version"
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true,
"autoload": {
- "files": [
- "src/adapter/etl-adapter-avro/src/Flow/ETL/Adapter/Avro/functions.php",
- "src/adapter/etl-adapter-chartjs/src/Flow/ETL/Adapter/ChartJS/functions.php",
- "src/adapter/etl-adapter-csv/src/Flow/ETL/Adapter/CSV/functions.php",
- "src/adapter/etl-adapter-doctrine/src/Flow/ETL/Adapter/Doctrine/functions.php",
- "src/adapter/etl-adapter-elasticsearch/src/Flow/ETL/Adapter/Elasticsearch/functions.php",
- "src/adapter/etl-adapter-google-sheet/src/Flow/ETL/Adapter/GoogleSheet/functions.php",
- "src/adapter/etl-adapter-json/src/Flow/ETL/Adapter/JSON/functions.php",
- "src/adapter/etl-adapter-meilisearch/src/Flow/ETL/Adapter/Meilisearch/functions.php",
- "src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/functions.php",
- "src/adapter/etl-adapter-text/src/Flow/ETL/Adapter/Text/functions.php",
- "src/adapter/etl-adapter-xml/src/Flow/ETL/Adapter/XML/functions.php",
- "src/bridge/filesystem/azure/src/Flow/Filesystem/Bridge/Azure/DSL/functions.php",
- "src/core/etl/src/Flow/ETL/DSL/functions.php",
- "src/functions.php",
- "src/lib/array-dot/src/Flow/ArrayDot/array_dot.php",
- "src/lib/azure-sdk/src/Flow/Azure/SDK/DSL/functions.php",
- "src/lib/filesystem/src/Flow/Filesystem/DSL/functions.php",
- "src/lib/parquet/src/Flow/Parquet/functions.php",
- "src/lib/parquet/src/stubs.php",
- "src/lib/snappy/polyfill.php"
- ],
"psr-4": {
"Flow\\": [
"src/adapter/etl-adapter-avro/src/Flow",
@@ -93,6 +106,7 @@
"src/adapter/etl-adapter-xml/src/Flow",
"src/bridge/filesystem/azure/src/Flow",
"src/bridge/monolog/http/src/Flow",
+ "src/bridge/symfony/http-foundation/src/Flow",
"src/core/etl/src/Flow",
"src/lib/array-dot/src/Flow",
"src/lib/azure-sdk/src/Flow",
@@ -111,7 +125,29 @@
"Flow\\ETL\\Adapter\\Doctrine\\": [
"src/adapter/etl-adapter-doctrine/src/Flow/ETL/Adapter/Doctrine"
]
- }
+ },
+ "files": [
+ "src/adapter/etl-adapter-avro/src/Flow/ETL/Adapter/Avro/functions.php",
+ "src/adapter/etl-adapter-chartjs/src/Flow/ETL/Adapter/ChartJS/functions.php",
+ "src/adapter/etl-adapter-csv/src/Flow/ETL/Adapter/CSV/functions.php",
+ "src/adapter/etl-adapter-doctrine/src/Flow/ETL/Adapter/Doctrine/functions.php",
+ "src/adapter/etl-adapter-elasticsearch/src/Flow/ETL/Adapter/Elasticsearch/functions.php",
+ "src/adapter/etl-adapter-google-sheet/src/Flow/ETL/Adapter/GoogleSheet/functions.php",
+ "src/adapter/etl-adapter-json/src/Flow/ETL/Adapter/JSON/functions.php",
+ "src/adapter/etl-adapter-meilisearch/src/Flow/ETL/Adapter/Meilisearch/functions.php",
+ "src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/functions.php",
+ "src/adapter/etl-adapter-text/src/Flow/ETL/Adapter/Text/functions.php",
+ "src/adapter/etl-adapter-xml/src/Flow/ETL/Adapter/XML/functions.php",
+ "src/bridge/filesystem/azure/src/Flow/Filesystem/Bridge/Azure/DSL/functions.php",
+ "src/core/etl/src/Flow/ETL/DSL/functions.php",
+ "src/functions.php",
+ "src/lib/array-dot/src/Flow/ArrayDot/array_dot.php",
+ "src/lib/azure-sdk/src/Flow/Azure/SDK/DSL/functions.php",
+ "src/lib/filesystem/src/Flow/Filesystem/DSL/functions.php",
+ "src/lib/parquet/src/Flow/Parquet/functions.php",
+ "src/lib/parquet/src/stubs.php",
+ "src/lib/snappy/polyfill.php"
+ ]
},
"autoload-dev": {
"psr-4": {
@@ -131,6 +167,7 @@
"src/adapter/etl-adapter-xml/tests/Flow",
"src/bridge/filesystem/azure/tests/Flow",
"src/bridge/monolog/http/tests/Flow",
+ "src/bridge/symfony/http-foundation/tests/Flow",
"src/core/etl/tests/Flow",
"src/lib/array-dot/tests/Flow",
"src/lib/azure-sdk/tests/Flow",
@@ -156,36 +193,10 @@
"sort-packages": true,
"allow-plugins": false
},
- "replace": {
- "flow-php/array-dot": "self.version",
- "flow-php/azure-sdk": "self.version",
- "flow-php/doctrine-dbal-bulk": "self.version",
- "flow-php/doctrine-dbal-bulk-tools": "self.version",
- "flow-php/dremel": "self.version",
- "flow-php/etl": "self.version",
- "flow-php/etl-adapter-avro": "self.version",
- "flow-php/etl-adapter-chartjs": "self.version",
- "flow-php/etl-adapter-csv": "self.version",
- "flow-php/etl-adapter-dbal-tools": "self.version",
- "flow-php/etl-adapter-doctrine": "self.version",
- "flow-php/etl-adapter-elasticsearch": "self.version",
- "flow-php/etl-adapter-filesystem": "self.version",
- "flow-php/etl-adapter-google-sheet": "self.version",
- "flow-php/etl-adapter-http": "self.version",
- "flow-php/etl-adapter-json": "self.version",
- "flow-php/etl-adapter-logger": "self.version",
- "flow-php/etl-adapter-logger-tools": "self.version",
- "flow-php/etl-adapter-meilisearch": "self.version",
- "flow-php/etl-adapter-parquet": "self.version",
- "flow-php/etl-adapter-text": "self.version",
- "flow-php/etl-adapter-xml": "self.version",
- "flow-php/filesystem": "self.version",
- "flow-php/filesytem-azure-bridge": "self.version",
- "flow-php/monolog-http-bridge": "self.version",
- "flow-php/parquet": "self.version",
- "flow-php/parquet-viewer": "self.version",
- "flow-php/rdsl": "self.version",
- "flow-php/snappy": "self.version"
+ "extra": {
+ "google/apiclient-services": [
+ "Sheets"
+ ]
},
"scripts": {
"build": [
@@ -278,12 +289,5 @@
"composer update --working-dir=./tools/psalm",
"composer update --working-dir=./tools/phpunit"
]
- },
- "extra": {
- "google/apiclient-services": [
- "Sheets"
- ]
- },
- "minimum-stability": "dev",
- "prefer-stable": true
+ }
}
diff --git a/composer.lock b/composer.lock
index c74a35532..097b62743 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "1dca31d78dafb7522f660262cdf1928e",
+ "content-hash": "796ddb9ea52075cec8c9425cae7d69a1",
"packages": [
{
"name": "aeon-php/calendar",
@@ -519,16 +519,16 @@
},
{
"name": "google/apiclient-services",
- "version": "v0.373.0",
+ "version": "v0.374.0",
"source": {
"type": "git",
"url": "https://github.com/googleapis/google-api-php-client-services.git",
- "reference": "88ee17077a2048ba0b2c637754b599be0523fe36"
+ "reference": "5f6060df419f4f72dcc970197f9a9b1613cecc62"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/88ee17077a2048ba0b2c637754b599be0523fe36",
- "reference": "88ee17077a2048ba0b2c637754b599be0523fe36",
+ "url": "https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/5f6060df419f4f72dcc970197f9a9b1613cecc62",
+ "reference": "5f6060df419f4f72dcc970197f9a9b1613cecc62",
"shasum": ""
},
"require": {
@@ -557,9 +557,9 @@
],
"support": {
"issues": "https://github.com/googleapis/google-api-php-client-services/issues",
- "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.373.0"
+ "source": "https://github.com/googleapis/google-api-php-client-services/tree/v0.374.0"
},
- "time": "2024-09-16T00:56:51+00:00"
+ "time": "2024-09-23T01:02:23+00:00"
},
{
"name": "google/auth",
@@ -1605,16 +1605,16 @@
},
{
"name": "php-http/httplug",
- "version": "2.4.0",
+ "version": "2.4.1",
"source": {
"type": "git",
"url": "https://github.com/php-http/httplug.git",
- "reference": "625ad742c360c8ac580fcc647a1541d29e257f67"
+ "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67",
- "reference": "625ad742c360c8ac580fcc647a1541d29e257f67",
+ "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4",
+ "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4",
"shasum": ""
},
"require": {
@@ -1656,9 +1656,9 @@
],
"support": {
"issues": "https://github.com/php-http/httplug/issues",
- "source": "https://github.com/php-http/httplug/tree/2.4.0"
+ "source": "https://github.com/php-http/httplug/tree/2.4.1"
},
- "time": "2023-04-14T15:10:03+00:00"
+ "time": "2024-09-23T11:39:58+00:00"
},
{
"name": "php-http/promise",
@@ -2231,16 +2231,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998"
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765",
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765",
"shasum": ""
},
"require": {
@@ -2305,7 +2305,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.11"
+ "source": "https://github.com/symfony/console/tree/v6.4.12"
},
"funding": [
{
@@ -2321,7 +2321,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-15T22:48:29+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -2390,6 +2390,83 @@
],
"time": "2024-04-18T09:32:20+00:00"
},
+ {
+ "name": "symfony/http-foundation",
+ "version": "v6.4.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-foundation.git",
+ "reference": "133ac043875f59c26c55e79cf074562127cce4d2"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-foundation/zipball/133ac043875f59c26c55e79cf074562127cce4d2",
+ "reference": "133ac043875f59c26c55e79cf074562127cce4d2",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.1",
+ "symfony/deprecation-contracts": "^2.5|^3",
+ "symfony/polyfill-mbstring": "~1.1",
+ "symfony/polyfill-php83": "^1.27"
+ },
+ "conflict": {
+ "symfony/cache": "<6.3"
+ },
+ "require-dev": {
+ "doctrine/dbal": "^2.13.1|^3|^4",
+ "predis/predis": "^1.1|^2.0",
+ "symfony/cache": "^6.3|^7.0",
+ "symfony/dependency-injection": "^5.4|^6.0|^7.0",
+ "symfony/expression-language": "^5.4|^6.0|^7.0",
+ "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0",
+ "symfony/mime": "^5.4|^6.0|^7.0",
+ "symfony/rate-limiter": "^5.4|^6.0|^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/v6.4.12"
+ },
+ "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-20T08:18:25+00:00"
+ },
{
"name": "symfony/polyfill-ctype",
"version": "v1.31.0",
@@ -2940,6 +3017,82 @@
],
"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/service-contracts",
"version": "v3.5.0",
@@ -3025,16 +3178,16 @@
},
{
"name": "symfony/string",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b"
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f8a1ccebd0997e16112dfecfd74220b78e5b284b",
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b",
"shasum": ""
},
"require": {
@@ -3091,7 +3244,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.11"
+ "source": "https://github.com/symfony/string/tree/v6.4.12"
},
"funding": [
{
@@ -3107,20 +3260,20 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "symfony/translation",
- "version": "v6.4.10",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/translation.git",
- "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9"
+ "reference": "cf8360b8352b086be620fae8342c4d96e391a489"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/translation/zipball/94041203f8ac200ae9e7c6a18fa6137814ccecc9",
- "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9",
+ "url": "https://api.github.com/repos/symfony/translation/zipball/cf8360b8352b086be620fae8342c4d96e391a489",
+ "reference": "cf8360b8352b086be620fae8342c4d96e391a489",
"shasum": ""
},
"require": {
@@ -3186,7 +3339,7 @@
"description": "Provides tools to internationalize your application",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/translation/tree/v6.4.10"
+ "source": "https://github.com/symfony/translation/tree/v6.4.12"
},
"funding": [
{
@@ -3202,7 +3355,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-26T12:30:32+00:00"
+ "time": "2024-09-16T06:02:54+00:00"
},
{
"name": "symfony/translation-contracts",
@@ -3284,16 +3437,16 @@
},
{
"name": "symfony/yaml",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
- "reference": "be37e7f13195e05ab84ca5269365591edd240335"
+ "reference": "762ee56b2649659380e0ef4d592d807bc17b7971"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/yaml/zipball/be37e7f13195e05ab84ca5269365591edd240335",
- "reference": "be37e7f13195e05ab84ca5269365591edd240335",
+ "url": "https://api.github.com/repos/symfony/yaml/zipball/762ee56b2649659380e0ef4d592d807bc17b7971",
+ "reference": "762ee56b2649659380e0ef4d592d807bc17b7971",
"shasum": ""
},
"require": {
@@ -3336,7 +3489,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/yaml/tree/v6.4.11"
+ "source": "https://github.com/symfony/yaml/tree/v6.4.12"
},
"funding": [
{
@@ -3352,7 +3505,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-09-17T12:47:12+00:00"
},
{
"name": "webmozart/glob",
@@ -3716,16 +3869,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.19.1",
+ "version": "v4.19.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b"
+ "reference": "0ed4c8949a32986043e977dbe14776c14d644c45"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b",
- "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ed4c8949a32986043e977dbe14776c14d644c45",
+ "reference": "0ed4c8949a32986043e977dbe14776c14d644c45",
"shasum": ""
},
"require": {
@@ -3766,9 +3919,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.2"
},
- "time": "2024-03-17T08:10:35+00:00"
+ "time": "2024-09-17T19:36:00+00:00"
},
{
"name": "nyholm/psr7",
@@ -3850,16 +4003,16 @@
},
{
"name": "php-http/client-common",
- "version": "2.7.1",
+ "version": "2.7.2",
"source": {
"type": "git",
"url": "https://github.com/php-http/client-common.git",
- "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612"
+ "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/php-http/client-common/zipball/1e19c059b0e4d5f717bf5d524d616165aeab0612",
- "reference": "1e19c059b0e4d5f717bf5d524d616165aeab0612",
+ "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46",
+ "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46",
"shasum": ""
},
"require": {
@@ -3913,9 +4066,9 @@
],
"support": {
"issues": "https://github.com/php-http/client-common/issues",
- "source": "https://github.com/php-http/client-common/tree/2.7.1"
+ "source": "https://github.com/php-http/client-common/tree/2.7.2"
},
- "time": "2023-11-30T10:31:25+00:00"
+ "time": "2024-09-24T06:21:48+00:00"
},
{
"name": "php-http/curl-client",
@@ -4296,16 +4449,16 @@
},
{
"name": "symfony/cache",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/cache.git",
- "reference": "36daef8fce88fe0b9a4f8cf4c342ced5c05616dc"
+ "reference": "a463451b7f6ac4a47b98dbfc78ec2d3560c759d8"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/cache/zipball/36daef8fce88fe0b9a4f8cf4c342ced5c05616dc",
- "reference": "36daef8fce88fe0b9a4f8cf4c342ced5c05616dc",
+ "url": "https://api.github.com/repos/symfony/cache/zipball/a463451b7f6ac4a47b98dbfc78ec2d3560c759d8",
+ "reference": "a463451b7f6ac4a47b98dbfc78ec2d3560c759d8",
"shasum": ""
},
"require": {
@@ -4372,7 +4525,7 @@
"psr6"
],
"support": {
- "source": "https://github.com/symfony/cache/tree/v6.4.11"
+ "source": "https://github.com/symfony/cache/tree/v6.4.12"
},
"funding": [
{
@@ -4388,7 +4541,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-05T07:40:31+00:00"
+ "time": "2024-09-16T16:01:33+00:00"
},
{
"name": "symfony/cache-contracts",
@@ -4468,16 +4621,16 @@
},
{
"name": "symfony/dotenv",
- "version": "v6.4.10",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/dotenv.git",
- "reference": "2ae0c84cc9be0dc1eeb86016970b63c764d8472e"
+ "reference": "815284236cab7d8e1280f53bf562c07a4dfe5954"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/dotenv/zipball/2ae0c84cc9be0dc1eeb86016970b63c764d8472e",
- "reference": "2ae0c84cc9be0dc1eeb86016970b63c764d8472e",
+ "url": "https://api.github.com/repos/symfony/dotenv/zipball/815284236cab7d8e1280f53bf562c07a4dfe5954",
+ "reference": "815284236cab7d8e1280f53bf562c07a4dfe5954",
"shasum": ""
},
"require": {
@@ -4522,7 +4675,7 @@
"environment"
],
"support": {
- "source": "https://github.com/symfony/dotenv/tree/v6.4.10"
+ "source": "https://github.com/symfony/dotenv/tree/v6.4.12"
},
"funding": [
{
@@ -4538,7 +4691,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-09T18:29:35+00:00"
+ "time": "2024-09-16T16:01:33+00:00"
},
{
"name": "symfony/finder",
@@ -4752,16 +4905,16 @@
},
{
"name": "symfony/uid",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/uid.git",
- "reference": "6a0394ad707de386547223948fac1e0f2805bc0b"
+ "reference": "2f16054e0a9b194b8ca581d4a64eee3f7d4a9d4d"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/uid/zipball/6a0394ad707de386547223948fac1e0f2805bc0b",
- "reference": "6a0394ad707de386547223948fac1e0f2805bc0b",
+ "url": "https://api.github.com/repos/symfony/uid/zipball/2f16054e0a9b194b8ca581d4a64eee3f7d4a9d4d",
+ "reference": "2f16054e0a9b194b8ca581d4a64eee3f7d4a9d4d",
"shasum": ""
},
"require": {
@@ -4806,7 +4959,7 @@
"uuid"
],
"support": {
- "source": "https://github.com/symfony/uid/tree/v6.4.11"
+ "source": "https://github.com/symfony/uid/tree/v6.4.12"
},
"funding": [
{
@@ -4822,7 +4975,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-09-20T08:32:26+00:00"
},
{
"name": "symfony/var-exporter",
diff --git a/docs/components/bridges/symfony-http-foundation-bridge.md b/docs/components/bridges/symfony-http-foundation-bridge.md
new file mode 100644
index 000000000..91a42018d
--- /dev/null
+++ b/docs/components/bridges/symfony-http-foundation-bridge.md
@@ -0,0 +1,110 @@
+# Symfony Http Foundation Bridge
+
+- [⬅️️ Back](../../introduction.md)
+
+Http Foundation Bridge provides seamless integration between Symfony Http Foundation and Flow PHP.
+
+`FlowStreamedResponse` is a Symfony Streamed Response that can:
+
+- stream to one of the available formats (CSV, JSON, Parquet, XML)
+- apply transformations on the fly
+- stream large datasets that normally would not fit in memory
+- use ETL to convert data on the fly
+
+## Installation
+
+```
+composer require flow-php/symfony-http-foundation-bridge
+```
+
+## Usage
+
+Stream a large parquet file converting it on the fly to CSV format.
+Since Flow is extracting data from datasets in chunk, FlowStreamedResponse allows to stream
+files that normally would not fit in memory.
+
+```php
+withColumn('time', \time());
+ }
+ }
+);
+```
+
+Above example will add a new column `time` to the dataset with the current timestamp.
+
+Predefined Transformations:
+
+- `Flow\Bridge\Symfony\HttpFoundation\Transformation\MaskColumns` - mask columns with `*****` value.
+
+```php
+
src/adapter/**/**/**/**/**/**/Tests/Unit
- src/bridge/**/**/**/**/**/**/Tests/Unit
+ src/bridge/**/**/**/**/**/**/**/Tests/Unit
src/core/etl/tests/Flow/ETL/Tests/Unit
src/lib/**/**/**/**/Tests/Unit
src/lib/doctrine-dbal-bulk/tests/Flow/Doctrine/Bulk/Tests/Unit
src/adapter/**/**/**/**/**/**/Tests/Integration
- src/bridge/**/**/**/**/**/**/Tests/Integration
+ src/bridge/**/**/**/**/**/**/**/Tests/Integration
src/core/etl/tests/Flow/ETL/Tests/Integration
src/lib/**/**/**/**/Tests/Integration
src/tools/**/**/**/**/Tests/Integration
diff --git a/src/adapter/etl-adapter-csv/src/Flow/ETL/Adapter/CSV/functions.php b/src/adapter/etl-adapter-csv/src/Flow/ETL/Adapter/CSV/functions.php
index 60a1eb5df..aff7d706a 100644
--- a/src/adapter/etl-adapter-csv/src/Flow/ETL/Adapter/CSV/functions.php
+++ b/src/adapter/etl-adapter-csv/src/Flow/ETL/Adapter/CSV/functions.php
@@ -9,8 +9,8 @@
use Flow\ETL\{Attribute\DocumentationDSL,
Attribute\DocumentationExample,
Attribute\Module,
- Attribute\Type as DSLType,
- Loader};
+ Attribute\Type as DSLType
+};
use Flow\Filesystem\{Path, SourceStream};
/**
@@ -78,7 +78,7 @@ function to_csv(
string $escape = '\\',
string $new_line_separator = PHP_EOL,
string $datetime_format = \DateTimeInterface::ATOM,
-) : Loader {
+) : CSVLoader {
return (new CSVLoader(\is_string($uri) ? Path::realpath($uri) : $uri))
->withHeader($with_header)
->withSeparator($separator)
diff --git a/src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/functions.php b/src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/functions.php
index 1d888060f..6c3309e19 100644
--- a/src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/functions.php
+++ b/src/adapter/etl-adapter-parquet/src/Flow/ETL/Adapter/Parquet/functions.php
@@ -8,8 +8,8 @@
use Flow\ETL\{Attribute\DocumentationDSL,
Attribute\DocumentationExample,
Attribute\Module,
- Attribute\Type as DSLType,
- Loader};
+ Attribute\Type as DSLType
+};
use Flow\Filesystem\Path;
use Flow\Parquet\ParquetFile\Compressions;
use Flow\Parquet\{ByteOrder, Options};
@@ -50,8 +50,6 @@ function from_parquet(
* @param null|Options $options - @deprecated use `withOptions` method instead
* @param Compressions $compressions - @deprecated use `withCompressions` method instead
* @param null|Schema $schema - @deprecated use `withSchema` method instead
- *
- * @return Loader
*/
#[DocumentationDSL(module: Module::PARQUET, type: DSLType::LOADER)]
#[DocumentationExample(topic: 'data_sink', example: 'parquet')]
@@ -60,7 +58,7 @@ function to_parquet(
?Options $options = null,
Compressions $compressions = Compressions::SNAPPY,
?Schema $schema = null,
-) : Loader {
+) : ParquetLoader {
$loader = (new ParquetLoader(\is_string($path) ? Path::realpath($path) : $path))
->withCompressions($compressions);
diff --git a/src/bridge/filesystem/azure/tests/Flow/Filesystem/Bridge/Azure/Tests/Integration/AzureBlobServiceTestCase.php b/src/bridge/filesystem/azure/tests/Flow/Filesystem/Bridge/Azure/Tests/Integration/AzureBlobServiceTestCase.php
index ca0136e24..8bdf0936b 100644
--- a/src/bridge/filesystem/azure/tests/Flow/Filesystem/Bridge/Azure/Tests/Integration/AzureBlobServiceTestCase.php
+++ b/src/bridge/filesystem/azure/tests/Flow/Filesystem/Bridge/Azure/Tests/Integration/AzureBlobServiceTestCase.php
@@ -5,7 +5,7 @@
namespace Flow\Filesystem\Bridge\Azure\Tests\Integration;
use function Flow\Azure\SDK\DSL\{azure_blob_service, azure_blob_service_config, azure_http_factory, azure_shared_key_authorization_factory, azurite_url_factory};
-use Flow\Azure\SDK\{BlobService};
+use Flow\Azure\SDK\{BlobService, Exception\AzureException};
use Http\Discovery\{Psr17FactoryDiscovery, Psr18ClientDiscovery};
use PHPUnit\Framework\TestCase;
@@ -19,7 +19,10 @@ abstract class AzureBlobServiceTestCase extends TestCase
protected function tearDown() : void
{
foreach ($this->containers as $container) {
- $this->blobService($container)->deleteContainer();
+ try {
+ $this->blobService($container)->deleteContainer();
+ } catch (AzureException $e) {
+ }
}
}
diff --git a/src/bridge/symfony/http-foundation/.gitattributes b/src/bridge/symfony/http-foundation/.gitattributes
new file mode 100644
index 000000000..e02097205
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/.gitattributes
@@ -0,0 +1,9 @@
+*.php text eol=lf
+
+/.github export-ignore
+/tests export-ignore
+
+/README.md export-ignore
+
+/.gitattributes export-ignore
+/.gitignore export-ignore
diff --git a/src/bridge/symfony/http-foundation/.github/workflows/readonly.yaml b/src/bridge/symfony/http-foundation/.github/workflows/readonly.yaml
new file mode 100644
index 000000000..da596bcdd
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/.github/workflows/readonly.yaml
@@ -0,0 +1,17 @@
+name: Readonly
+
+on:
+ pull_request_target:
+ types: [opened]
+
+jobs:
+ run:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: superbrothers/close-pull-request@v3
+ with:
+ comment: |
+ Hi, thank you for your contribution.
+ Unfortunately, this repository is read-only. It's a split from our main monorepo repository.
+ In order to proceed with this PR please open it against https://github.com/flow-php/flow repository.
+ Thank you.
\ No newline at end of file
diff --git a/src/bridge/symfony/http-foundation/CONTRIBUTING.md b/src/bridge/symfony/http-foundation/CONTRIBUTING.md
new file mode 100644
index 000000000..a2d0671c7
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/CONTRIBUTING.md
@@ -0,0 +1,6 @@
+## Contributing
+
+This repo is **READ ONLY**, in order to contribute to Flow PHP project, please
+open PR against [flow](https://github.com/flow-php/flow) monorepo.
+
+Changes merged to monorepo are automatically propagated into sub repositories.
\ No newline at end of file
diff --git a/src/bridge/symfony/http-foundation/LICENSE b/src/bridge/symfony/http-foundation/LICENSE
new file mode 100644
index 000000000..bc3cc4d08
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2020-present Flow PHP
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/src/bridge/symfony/http-foundation/README.md b/src/bridge/symfony/http-foundation/README.md
new file mode 100644
index 000000000..77cc449af
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/README.md
@@ -0,0 +1,9 @@
+# Symfony HTTP Foundation Bridge
+
+
+> [!IMPORTANT]
+> This repository is a subtree split from our monorepo. If you'd like to contribute, please visit our main monorepo [flow-php/flow](https://github.com/flow-php/flow).
+
+- 📜 [Documentation](https://github.com/flow-php/flow/blob/1.x/docs/components/bridges/symfony-http-foundation-bridge.md)
+- ➡️ [Installation](https://github.com/flow-php/flow/blob/1.x/docs/installation.md)
+- 🛠️ [Contributing](https://github.com/flow-php/flow/blob/1.x/CONTRIBUTING.md)
\ No newline at end of file
diff --git a/src/bridge/symfony/http-foundation/composer.json b/src/bridge/symfony/http-foundation/composer.json
new file mode 100644
index 000000000..9307f2437
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/composer.json
@@ -0,0 +1,40 @@
+{
+ "name": "flow-php/symfony-http-foundation",
+ "type": "library",
+ "description": "PHP ETL - Symfony HTTP foundation bridge",
+ "keywords": [
+ "symfony",
+ "http",
+ "foundation",
+ "bridge",
+ "streamed",
+ "response"
+ ],
+ "require": {
+ "php": "~8.1.0 || ~8.2.0 || ~8.3.0",
+ "symfony/http-foundation": "~5.4.0 || ~6.4.0 || ~7",
+ "flow-php/etl": "^0.9.0 || 1.x-dev"
+ },
+ "require-dev": {
+ "nyholm/psr7": "^1.8"
+ },
+ "config": {
+ "optimize-autoloader": true,
+ "sort-packages": true
+ },
+ "license": "MIT",
+ "autoload": {
+ "psr-4": {
+ "Flow\\": [
+ "src/Flow"
+ ]
+ }
+ },
+ "autoload-dev": {
+ "psr-4": {
+ "Flow\\": "tests/Flow"
+ }
+ },
+ "minimum-stability": "dev",
+ "prefer-stable": true
+}
diff --git a/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/FlowStreamedResponse.php b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/FlowStreamedResponse.php
new file mode 100644
index 000000000..d56695168
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/FlowStreamedResponse.php
@@ -0,0 +1,44 @@
+config = $config ?? Config::default();
+
+ parent::__construct($this->stream(...), $status, $headers);
+
+ if (!$this->headers->get('Content-Type')) {
+ $this->headers->set('Content-Type', $this->output->type()->toContentTypeHeader());
+ }
+ }
+
+ private function stream() : void
+ {
+ df($this->config)
+ ->read($this->extractor)
+ ->transform($this->transformations)
+ ->write($this->output->loader())
+ ->run();
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output.php b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output.php
new file mode 100644
index 000000000..cc845b675
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output.php
@@ -0,0 +1,15 @@
+ 'output']))
+ ->withHeader($this->withHeader)
+ ->withSeparator($this->separator)
+ ->withEnclosure($this->enclosure)
+ ->withEscape($this->escape)
+ ->withNewLineSeparator($this->newLineSeparator)
+ ->withDateTimeFormat($this->datetimeFormat);
+ }
+
+ public function type() : Type
+ {
+ return Type::CSV;
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/JsonOutput.php b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/JsonOutput.php
new file mode 100644
index 000000000..3d920fa01
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/JsonOutput.php
@@ -0,0 +1,38 @@
+ 'output']))
+ ->withFlags($this->flags)
+ ->withDateTimeFormat($this->dateTimeFormat)
+ ->withRowsInNewLines($this->putRowsInNewLines);
+ }
+
+ public function type() : Type
+ {
+ return Type::JSON;
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/ParquetOutput.php b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/ParquetOutput.php
new file mode 100644
index 000000000..d5e6824e8
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/ParquetOutput.php
@@ -0,0 +1,47 @@
+ 'output']))
+ ->withCompressions($this->compressions);
+
+ if ($this->options !== null) {
+ $loader->withOptions($this->options);
+ }
+
+ if ($this->schema !== null) {
+ $loader->withSchema($this->schema);
+ }
+
+ return $loader;
+ }
+
+ public function type() : Type
+ {
+ return Type::PARQUET;
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/Type.php b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/Type.php
new file mode 100644
index 000000000..c29636a86
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/Type.php
@@ -0,0 +1,25 @@
+ 'application/json',
+ self::CSV => 'text/csv',
+ self::XML => 'application/xml',
+ self::PARQUET => 'application/parquet',
+ self::TEXT => 'text/plain',
+ };
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/XMLOutput.php b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/XMLOutput.php
new file mode 100644
index 000000000..a09d54ef4
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Output/XMLOutput.php
@@ -0,0 +1,42 @@
+ 'output']), xml_writer: $this->xmlWriter)
+ ->withRootElementName($this->rootElementName)
+ ->withRowElementName($this->rowElementName)
+ ->withAttributePrefix($this->attributePrefix)
+ ->withDateTimeFormat($this->dateTimeFormat);
+ }
+
+ public function type() : Type
+ {
+ return Type::XML;
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Transformation/MaskColumns.php b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Transformation/MaskColumns.php
new file mode 100644
index 000000000..8bb143961
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Transformation/MaskColumns.php
@@ -0,0 +1,24 @@
+columns as $column) {
+ $dataFrame->withEntry($column, lit($this->mask));
+ }
+
+ return $dataFrame;
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Transformation/Transformations.php b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Transformation/Transformations.php
new file mode 100644
index 000000000..dfd1b68b7
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/src/Flow/Bridge/Symfony/HttpFoundation/Transformation/Transformations.php
@@ -0,0 +1,29 @@
+transformations = $transformations;
+ }
+
+ public function transform(DataFrame $dataFrame) : DataFrame
+ {
+ foreach ($this->transformations as $transformation) {
+ $dataFrame = $transformation->transform($dataFrame);
+ }
+
+ return $dataFrame;
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/tests/Flow/Bridge/Symfony/HttpFoundation/Tests/Integration/FlowStreamedResponseTest.php b/src/bridge/symfony/http-foundation/tests/Flow/Bridge/Symfony/HttpFoundation/Tests/Integration/FlowStreamedResponseTest.php
new file mode 100644
index 000000000..2c1bb4c58
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/tests/Flow/Bridge/Symfony/HttpFoundation/Tests/Integration/FlowStreamedResponseTest.php
@@ -0,0 +1,83 @@
+ 1, 'size' => 'XL', 'color' => 'red', 'ean' => '1234567890123'],
+ ['id' => 2, 'size' => 'M', 'color' => 'blue', 'ean' => '1234567890124'],
+ ['id' => 3, 'size' => 'S', 'color' => 'green', 'ean' => '1234567890125'],
+ ]),
+ new CSVOutput()
+ );
+
+ self::assertEquals(<<<'CSV'
+id,size,color,ean
+1,XL,red,1234567890123
+2,M,blue,1234567890124
+3,S,green,1234567890125
+
+CSV
+ , $this->sendResponse($response));
+ }
+
+ public function test_streaming_array_response_to_json() : void
+ {
+ $response = new FlowStreamedResponse(
+ from_array([
+ ['id' => 1, 'size' => 'XL', 'color' => 'red', 'ean' => '1234567890123'],
+ ['id' => 2, 'size' => 'M', 'color' => 'blue', 'ean' => '1234567890124'],
+ ['id' => 3, 'size' => 'S', 'color' => 'green', 'ean' => '1234567890125'],
+ ]),
+ new JsonOutput()
+ );
+
+ self::assertEquals(<<<'JSON'
+[{"id":1,"size":"XL","color":"red","ean":"1234567890123"},{"id":2,"size":"M","color":"blue","ean":"1234567890124"},{"id":3,"size":"S","color":"green","ean":"1234567890125"}]
+JSON
+ , $this->sendResponse($response));
+ }
+
+ public function test_streaming_array_response_to_xml() : void
+ {
+ $response = new FlowStreamedResponse(
+ from_array([
+ ['id' => 1, 'size' => 'XL', 'color' => 'red', 'ean' => '1234567890123'],
+ ['id' => 2, 'size' => 'M', 'color' => 'blue', 'ean' => '1234567890124'],
+ ['id' => 3, 'size' => 'S', 'color' => 'green', 'ean' => '1234567890125'],
+ ]),
+ new XMLOutput()
+ );
+
+ self::assertEquals(<<<'XML'
+
+
+1XLred1234567890123
+2Mblue1234567890124
+3Sgreen1234567890125
+
+XML
+ , $this->sendResponse($response));
+ }
+
+ private function sendResponse(FlowStreamedResponse $response) : string
+ {
+ ob_start();
+ $response->send();
+
+ return ob_get_clean();
+ }
+}
diff --git a/src/bridge/symfony/http-foundation/tests/Flow/Bridge/Symfony/HttpFoundation/Tests/Unit/Transformation/MaskColumnTransformationTest.php b/src/bridge/symfony/http-foundation/tests/Flow/Bridge/Symfony/HttpFoundation/Tests/Unit/Transformation/MaskColumnTransformationTest.php
new file mode 100644
index 000000000..f2b434cfa
--- /dev/null
+++ b/src/bridge/symfony/http-foundation/tests/Flow/Bridge/Symfony/HttpFoundation/Tests/Unit/Transformation/MaskColumnTransformationTest.php
@@ -0,0 +1,36 @@
+read(from_array([
+ ['id' => 1, 'name' => 'John Doe', 'salary' => 7000, 'currency' => 'USD'],
+ ['id' => 2, 'name' => 'Jane Doe', 'salary' => 8000, 'currency' => 'USD'],
+ ['id' => 3, 'name' => 'John Smith', 'salary' => 9000, 'currency' => 'USD'],
+ ['id' => 4, 'name' => 'Jane Smith', 'salary' => 10000, 'currency' => 'USD'],
+ ]))
+ ->transform(new MaskColumns(['salary']))
+ ->fetch()
+ ->toArray();
+
+ self::assertEquals(
+ [
+ ['id' => 1, 'name' => 'John Doe', 'salary' => '******', 'currency' => 'USD'],
+ ['id' => 2, 'name' => 'Jane Doe', 'salary' => '******', 'currency' => 'USD'],
+ ['id' => 3, 'name' => 'John Smith', 'salary' => '******', 'currency' => 'USD'],
+ ['id' => 4, 'name' => 'Jane Smith', 'salary' => '******', 'currency' => 'USD'],
+ ],
+ $output
+ );
+ }
+}
diff --git a/src/core/etl/tests/Flow/ETL/Tests/Integration/Filesystem/FilesystemStreams/FilesystemStreamsTest.php b/src/core/etl/tests/Flow/ETL/Tests/Integration/Filesystem/FilesystemStreams/FilesystemStreamsTest.php
index 417b5be2f..fb5e18316 100644
--- a/src/core/etl/tests/Flow/ETL/Tests/Integration/Filesystem/FilesystemStreams/FilesystemStreamsTest.php
+++ b/src/core/etl/tests/Flow/ETL/Tests/Integration/Filesystem/FilesystemStreams/FilesystemStreamsTest.php
@@ -36,8 +36,8 @@ public function test_open_two_write_streams_to_stdout() : void
$this->expectExceptionMessage('Only one stdout filesystem stream can be open at the same time');
$streams = $this->streams();
- $streams->writeTo(path_stdout('json'));
- $streams->writeTo(path_stdout('json'));
+ $streams->writeTo(path_stdout());
+ $streams->writeTo(path_stdout());
}
@@ -129,7 +129,7 @@ public function test_scan() : void
public function test_write_to_stdout() : void
{
$streams = $this->streams();
- $streams->writeTo(path_stdout('json'));
+ $streams->writeTo(path_stdout());
self::assertCount(1, $streams);
}
diff --git a/src/lib/azure-sdk/src/Flow/Azure/SDK/Exception/AzureException.php b/src/lib/azure-sdk/src/Flow/Azure/SDK/Exception/AzureException.php
index 96c1ff684..cfbda708c 100644
--- a/src/lib/azure-sdk/src/Flow/Azure/SDK/Exception/AzureException.php
+++ b/src/lib/azure-sdk/src/Flow/Azure/SDK/Exception/AzureException.php
@@ -10,6 +10,6 @@ final class AzureException extends Exception
{
public function __construct(string $endpoint, public readonly RequestInterface $request, public readonly ResponseInterface $response)
{
- parent::__construct(\sprintf('Azure SDK Exception: %s', $endpoint));
+ parent::__construct(\sprintf('Azure SDK Exception: %s, %d, %s', $endpoint, $this->response->getStatusCode(), $this->response->getBody()->getContents()));
}
}
diff --git a/src/lib/filesystem/src/Flow/Filesystem/DSL/functions.php b/src/lib/filesystem/src/Flow/Filesystem/DSL/functions.php
index 432dbe0a1..5cfaf0ec5 100644
--- a/src/lib/filesystem/src/Flow/Filesystem/DSL/functions.php
+++ b/src/lib/filesystem/src/Flow/Filesystem/DSL/functions.php
@@ -47,11 +47,15 @@ function path(string $path, array $options = []) : Path
/**
* Create a path to php stdout stream.
+ *
+ * @param null|array{'stream': 'output'|'stderr'|'stdout'} $options
+ *
+ * @return Path
*/
#[DocumentationDSL(module: Module::FILESYSTEM, type: Type::HELPER)]
-function path_stdout() : Path
+function path_stdout(?array $options = null) : Path
{
- return new Path('stdout://' . \bin2hex(random_bytes(16)) . '.stdout');
+ return new Path('stdout://' . \bin2hex(\random_bytes(16)) . '.stdout', $options ?? []);
}
/**
@@ -87,7 +91,7 @@ function fstab(Filesystem ...$filesystems) : FilesystemTable
{
if (!\count($filesystems)) {
$filesystems[] = native_local_filesystem();
- $filesystems[] = new StdOutFilesystem();
+ $filesystems[] = stdout_filesystem();
}
return new FilesystemTable(...$filesystems);
diff --git a/src/lib/filesystem/src/Flow/Filesystem/Local/StdOut/StdOutDestinationStream.php b/src/lib/filesystem/src/Flow/Filesystem/Local/StdOut/StdOutDestinationStream.php
index 1dea800ec..0382d349b 100644
--- a/src/lib/filesystem/src/Flow/Filesystem/Local/StdOut/StdOutDestinationStream.php
+++ b/src/lib/filesystem/src/Flow/Filesystem/Local/StdOut/StdOutDestinationStream.php
@@ -4,7 +4,7 @@
namespace Flow\Filesystem\Local\StdOut;
-use Flow\Filesystem\{DestinationStream, Path};
+use Flow\Filesystem\{DestinationStream, Exception\InvalidArgumentException, Path};
final class StdOutDestinationStream implements DestinationStream
{
@@ -15,12 +15,26 @@ final class StdOutDestinationStream implements DestinationStream
public function __construct(private readonly Path $path, ?\php_user_filter $filter = null)
{
+ /**
+ * @psalm-suppress PossiblyNullArgument
+ *
+ * @phpstan-ignore-next-line
+ */
+ $outputStream = \mb_strtolower($this->path->options()->getAsString('stream', 'stdout'));
+
+ if (!\in_array($outputStream, ['stdout', 'stderr', 'output'], true)) {
+ throw new InvalidArgumentException('Invalid output stream, allowed values are "stdout", "stderr" and "output", given: ' . $outputStream);
+ }
+
if ($filter !== null) {
- stream_filter_register('stdout', $filter::class);
- $this->handle = \STDOUT;
+ stream_filter_register($outputStream, $filter::class);
+ /** @phpstan-ignore-next-line */
+ $this->handle = fopen('php://' . $outputStream, 'wb');
+ /** @phpstan-ignore-next-line */
stream_filter_append($this->handle, 'stdout');
} else {
- $this->handle = STDOUT;
+ /** @phpstan-ignore-next-line */
+ $this->handle = fopen('php://' . $outputStream, 'wb');
}
}
diff --git a/src/lib/filesystem/src/Flow/Filesystem/Path.php b/src/lib/filesystem/src/Flow/Filesystem/Path.php
index 47c76ed3c..dfd80d45e 100644
--- a/src/lib/filesystem/src/Flow/Filesystem/Path.php
+++ b/src/lib/filesystem/src/Flow/Filesystem/Path.php
@@ -5,6 +5,7 @@
namespace Flow\Filesystem;
use Flow\Filesystem\Exception\{InvalidArgumentException, RuntimeException};
+use Flow\Filesystem\Path\Options;
use Flow\Filesystem\Stream\ResourceContext;
final class Path
@@ -17,6 +18,8 @@ final class Path
private ?bool $isPattern = null;
+ private Options $options;
+
private ?Partitions $partitions = null;
private string $path;
@@ -24,9 +27,9 @@ final class Path
private Protocol $protocol;
/**
- * @param array $options
+ * @param array|Options $options
*/
- public function __construct(string $uri, private readonly array $options = [])
+ public function __construct(string $uri, array|Options $options = [])
{
$scheme = \preg_match('/^([a-zA-Z0-9+-]+):\/\//', $uri, $matches) ? $matches[1] : 'file';
@@ -40,20 +43,21 @@ public function __construct(string $uri, private readonly array $options = [])
$this->path = $path;
$this->protocol = new Protocol($scheme);
- $this->extension = \array_key_exists('extension', $pathInfo) ? $pathInfo['extension'] : false;
+ $this->extension = \array_key_exists('extension', $pathInfo) ? \strtolower($pathInfo['extension']) : false;
$this->filename = $pathInfo['filename'];
$this->basename = $pathInfo['basename'];
+ $this->options = \is_array($options) ? new Options($options) : $options;
}
/**
* Turn relative path into absolute paths even when path does not exists or it's glob pattern.
*
- * @param array $options
+ * @param array|Options $options
*
* @throws InvalidArgumentException
* @throws RuntimeException
*/
- public static function realpath(string $path, array $options = []) : self
+ public static function realpath(string $path, array|Options $options = []) : self
{
// "" - empty path is current, local directory
if ('' === $path) {
@@ -179,7 +183,7 @@ public function filename() : bool|string
public function isEqual(self $path) : bool
{
return $this->uri() === $path->uri()
- && $this->options === $path->options();
+ && $this->options->toArray() === $path->options()->toArray();
}
public function isLocal() : bool
@@ -211,10 +215,7 @@ public function matches(self $path) : bool
return $this->fnmatch($this->path, $path->path);
}
- /**
- * @return array
- */
- public function options() : array
+ public function options() : Options
{
return $this->options;
}
diff --git a/src/lib/filesystem/src/Flow/Filesystem/Path/Options.php b/src/lib/filesystem/src/Flow/Filesystem/Path/Options.php
new file mode 100644
index 000000000..95eee2771
--- /dev/null
+++ b/src/lib/filesystem/src/Flow/Filesystem/Path/Options.php
@@ -0,0 +1,43 @@
+
+ */
+ private array $options;
+
+ public function __construct(array $options)
+ {
+ $normalizedOptions = [];
+
+ foreach ($options as $option => $value) {
+ $normalizedOptions[\mb_strtolower((string) $option)] = $value;
+ }
+
+ $this->options = $normalizedOptions;
+ }
+
+ public function getAsString(string $option, ?string $default = null) : ?string
+ {
+ if ($this->has($option)) {
+ return (string) $this->options[$option];
+ }
+
+ return $default;
+ }
+
+ public function has(string $option) : bool
+ {
+ return isset($this->options[\mb_strtolower($option)]);
+ }
+
+ public function toArray() : array
+ {
+ return $this->options;
+ }
+}
diff --git a/src/lib/filesystem/src/Flow/Filesystem/Stream/ResourceContext.php b/src/lib/filesystem/src/Flow/Filesystem/Stream/ResourceContext.php
index a4665a5f9..ecb063b84 100644
--- a/src/lib/filesystem/src/Flow/Filesystem/Stream/ResourceContext.php
+++ b/src/lib/filesystem/src/Flow/Filesystem/Stream/ResourceContext.php
@@ -17,7 +17,7 @@ private function __construct(private readonly string $scheme, private readonly a
public static function from(Path $path) : self
{
- return new self($path->protocol()->scheme(), $path->options());
+ return new self($path->protocol()->scheme(), $path->options()->toArray());
}
/**
diff --git a/src/lib/filesystem/tests/Flow/Filesystem/Tests/Integration/StdOutFilesystemTest.php b/src/lib/filesystem/tests/Flow/Filesystem/Tests/Integration/StdOutFilesystemTest.php
index 9a5d33116..fe14ea346 100644
--- a/src/lib/filesystem/tests/Flow/Filesystem/Tests/Integration/StdOutFilesystemTest.php
+++ b/src/lib/filesystem/tests/Flow/Filesystem/Tests/Integration/StdOutFilesystemTest.php
@@ -36,6 +36,22 @@ public function test_it_can_append_to_stdout() : void
$filter::$buffer = '';
}
+ public function test_it_can_write_to_output() : void
+ {
+ $filesystem = new StdOutFilesystem();
+
+ $destination = $filesystem->writeTo(new Path('stdout://', ['stream' => 'output']));
+
+ ob_start();
+ $destination->append('Hello');
+ $destination->append(' ');
+ $destination->append('World!');
+
+ $output = ob_get_clean();
+
+ self::assertSame('Hello World!', $output);
+ }
+
public function test_it_can_write_to_stdout() : void
{
$filesystem = new StdOutFilesystem($filter = new Intercept());
@@ -51,11 +67,20 @@ public function test_it_can_write_to_stdout() : void
$filter::$buffer = '';
}
+ public function test_it_cant_write_to_memory() : void
+ {
+ $filesystem = new StdOutFilesystem();
+
+ $this->expectExceptionMessage('Invalid output stream, allowed values are "stdout", "stderr" and "output", given: memory');
+
+ $destination = $filesystem->writeTo(new Path('stdout://', ['stream' => 'memory']));
+ }
+
public function test_list() : void
{
$filesystem = new StdOutFilesystem();
- $paths = iterator_to_array($filesystem->list(path_stdout('json')));
+ $paths = iterator_to_array($filesystem->list(path_stdout()));
self::assertCount(0, $paths);
}
@@ -66,7 +91,7 @@ public function test_mv() : void
$this->expectExceptionMessage('Cannot move files around in stdout');
- $filesystem->mv(path_stdout('json'), path_stdout('json'));
+ $filesystem->mv(path_stdout(), path_stdout());
}
public function test_protocol() : void
@@ -82,7 +107,7 @@ public function test_read_from() : void
$this->expectExceptionMessage('Cannot read from stdout');
- $filesystem->readFrom(path_stdout('json'));
+ $filesystem->readFrom(path_stdout());
}
public function test_rm() : void
@@ -91,13 +116,13 @@ public function test_rm() : void
$this->expectExceptionMessage('Cannot read from stdout');
- $filesystem->rm(path_stdout('json'));
+ $filesystem->rm(path_stdout());
}
public function test_status() : void
{
$filesystem = new StdOutFilesystem();
- self::assertNull($filesystem->status(path_stdout('json')));
+ self::assertNull($filesystem->status(path_stdout()));
}
}
diff --git a/src/lib/filesystem/tests/Flow/Filesystem/Tests/Unit/PathTest.php b/src/lib/filesystem/tests/Flow/Filesystem/Tests/Unit/PathTest.php
index ca70a5f08..bfd04a0ad 100644
--- a/src/lib/filesystem/tests/Flow/Filesystem/Tests/Unit/PathTest.php
+++ b/src/lib/filesystem/tests/Flow/Filesystem/Tests/Unit/PathTest.php
@@ -125,6 +125,11 @@ public function test_extension() : void
self::assertFalse((new Path(__DIR__))->extension());
}
+ public function test_extension_uppercase() : void
+ {
+ self::assertSame('php', (new Path('/var/file/code.PhP'))->extension());
+ }
+
public function test_file_prefix() : void
{
$path = new Path('flow-file://var/dir/file.csv', []);
diff --git a/tools/blackfire/composer.lock b/tools/blackfire/composer.lock
index 96f6ff6c3..b847c8262 100644
--- a/tools/blackfire/composer.lock
+++ b/tools/blackfire/composer.lock
@@ -85,16 +85,16 @@
},
{
"name": "composer/ca-bundle",
- "version": "1.5.1",
+ "version": "1.5.2",
"source": {
"type": "git",
"url": "https://github.com/composer/ca-bundle.git",
- "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a"
+ "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/ca-bundle/zipball/063d9aa8696582f5a41dffbbaf3c81024f0a604a",
- "reference": "063d9aa8696582f5a41dffbbaf3c81024f0a604a",
+ "url": "https://api.github.com/repos/composer/ca-bundle/zipball/48a792895a2b7a6ee65dd5442c299d7b835b6137",
+ "reference": "48a792895a2b7a6ee65dd5442c299d7b835b6137",
"shasum": ""
},
"require": {
@@ -104,8 +104,8 @@
},
"require-dev": {
"phpstan/phpstan": "^1.10",
+ "phpunit/phpunit": "^8 || ^9",
"psr/log": "^1.0 || ^2.0 || ^3.0",
- "symfony/phpunit-bridge": "^4.2 || ^5",
"symfony/process": "^4.0 || ^5.0 || ^6.0 || ^7.0"
},
"type": "library",
@@ -141,7 +141,7 @@
"support": {
"irc": "irc://irc.freenode.org/composer",
"issues": "https://github.com/composer/ca-bundle/issues",
- "source": "https://github.com/composer/ca-bundle/tree/1.5.1"
+ "source": "https://github.com/composer/ca-bundle/tree/1.5.2"
},
"funding": [
{
@@ -157,7 +157,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-08T15:28:20+00:00"
+ "time": "2024-09-25T07:49:53+00:00"
}
],
"aliases": [],
diff --git a/tools/box/composer.lock b/tools/box/composer.lock
index 7c164c76c..289f0eb16 100644
--- a/tools/box/composer.lock
+++ b/tools/box/composer.lock
@@ -633,24 +633,24 @@
},
{
"name": "composer/semver",
- "version": "3.4.2",
+ "version": "3.4.3",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6"
+ "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6",
- "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6",
+ "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.4",
- "symfony/phpunit-bridge": "^4.2 || ^5"
+ "phpstan/phpstan": "^1.11",
+ "symfony/phpunit-bridge": "^3 || ^7"
},
"type": "library",
"extra": {
@@ -694,7 +694,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.2"
+ "source": "https://github.com/composer/semver/tree/3.4.3"
},
"funding": [
{
@@ -710,7 +710,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-12T11:35:52+00:00"
+ "time": "2024-09-19T14:15:21+00:00"
},
{
"name": "composer/xdebug-handler",
@@ -1291,16 +1291,16 @@
},
{
"name": "laravel/serializable-closure",
- "version": "v1.3.4",
+ "version": "v1.3.5",
"source": {
"type": "git",
"url": "https://github.com/laravel/serializable-closure.git",
- "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81"
+ "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/61b87392d986dc49ad5ef64e75b1ff5fee24ef81",
- "reference": "61b87392d986dc49ad5ef64e75b1ff5fee24ef81",
+ "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c",
+ "reference": "1dc4a3dbfa2b7628a3114e43e32120cce7cdda9c",
"shasum": ""
},
"require": {
@@ -1348,7 +1348,7 @@
"issues": "https://github.com/laravel/serializable-closure/issues",
"source": "https://github.com/laravel/serializable-closure"
},
- "time": "2024-08-02T07:48:17+00:00"
+ "time": "2024-09-23T13:33:08+00:00"
},
{
"name": "nikic/iter",
@@ -1404,16 +1404,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.19.1",
+ "version": "v4.19.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b"
+ "reference": "0ed4c8949a32986043e977dbe14776c14d644c45"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b",
- "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ed4c8949a32986043e977dbe14776c14d644c45",
+ "reference": "0ed4c8949a32986043e977dbe14776c14d644c45",
"shasum": ""
},
"require": {
@@ -1454,9 +1454,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.2"
},
- "time": "2024-03-17T08:10:35+00:00"
+ "time": "2024-09-17T19:36:00+00:00"
},
{
"name": "paragonie/constant_time_encoding",
@@ -1702,16 +1702,16 @@
},
{
"name": "phpstan/phpdoc-parser",
- "version": "1.30.1",
+ "version": "1.32.0",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpdoc-parser.git",
- "reference": "51b95ec8670af41009e2b2b56873bad96682413e"
+ "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/51b95ec8670af41009e2b2b56873bad96682413e",
- "reference": "51b95ec8670af41009e2b2b56873bad96682413e",
+ "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6ca22b154efdd9e3c68c56f5d94670920a1c19a4",
+ "reference": "6ca22b154efdd9e3c68c56f5d94670920a1c19a4",
"shasum": ""
},
"require": {
@@ -1743,9 +1743,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.30.1"
+ "source": "https://github.com/phpstan/phpdoc-parser/tree/1.32.0"
},
- "time": "2024-09-07T20:13:05+00:00"
+ "time": "2024-09-26T07:23:32+00:00"
},
{
"name": "psr/container",
@@ -2032,16 +2032,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998"
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765",
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765",
"shasum": ""
},
"require": {
@@ -2106,7 +2106,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.11"
+ "source": "https://github.com/symfony/console/tree/v6.4.12"
},
"funding": [
{
@@ -2122,7 +2122,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-15T22:48:29+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -2269,16 +2269,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v6.4.9",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463"
+ "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/f810e3cbdf7fdc35983968523d09f349fa9ada12",
+ "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12",
"shasum": ""
},
"require": {
@@ -2315,7 +2315,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.9"
+ "source": "https://github.com/symfony/filesystem/tree/v6.4.12"
},
"funding": [
{
@@ -2331,7 +2331,7 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:49:33+00:00"
+ "time": "2024-09-16T16:01:33+00:00"
},
{
"name": "symfony/finder",
@@ -2797,16 +2797,16 @@
},
{
"name": "symfony/process",
- "version": "v6.4.8",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+ "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+ "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3",
+ "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3",
"shasum": ""
},
"require": {
@@ -2838,7 +2838,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.8"
+ "source": "https://github.com/symfony/process/tree/v6.4.12"
},
"funding": [
{
@@ -2854,7 +2854,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-17T12:47:12+00:00"
},
{
"name": "symfony/service-contracts",
@@ -2941,16 +2941,16 @@
},
{
"name": "symfony/string",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b"
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f8a1ccebd0997e16112dfecfd74220b78e5b284b",
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b",
"shasum": ""
},
"require": {
@@ -3007,7 +3007,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.11"
+ "source": "https://github.com/symfony/string/tree/v6.4.12"
},
"funding": [
{
@@ -3023,7 +3023,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "symfony/var-dumper",
diff --git a/tools/cs-fixer/composer.lock b/tools/cs-fixer/composer.lock
index f897e984e..f88353e65 100644
--- a/tools/cs-fixer/composer.lock
+++ b/tools/cs-fixer/composer.lock
@@ -152,24 +152,24 @@
},
{
"name": "composer/semver",
- "version": "3.4.2",
+ "version": "3.4.3",
"source": {
"type": "git",
"url": "https://github.com/composer/semver.git",
- "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6"
+ "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/composer/semver/zipball/c51258e759afdb17f1fd1fe83bc12baaef6309d6",
- "reference": "c51258e759afdb17f1fd1fe83bc12baaef6309d6",
+ "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.4",
- "symfony/phpunit-bridge": "^4.2 || ^5"
+ "phpstan/phpstan": "^1.11",
+ "symfony/phpunit-bridge": "^3 || ^7"
},
"type": "library",
"extra": {
@@ -213,7 +213,7 @@
"support": {
"irc": "ircs://irc.libera.chat:6697/composer",
"issues": "https://github.com/composer/semver/issues",
- "source": "https://github.com/composer/semver/tree/3.4.2"
+ "source": "https://github.com/composer/semver/tree/3.4.3"
},
"funding": [
{
@@ -229,7 +229,7 @@
"type": "tidelift"
}
],
- "time": "2024-07-12T11:35:52+00:00"
+ "time": "2024-09-19T14:15:21+00:00"
},
{
"name": "composer/xdebug-handler",
@@ -1260,16 +1260,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998"
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765",
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765",
"shasum": ""
},
"require": {
@@ -1334,7 +1334,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.11"
+ "source": "https://github.com/symfony/console/tree/v6.4.12"
},
"funding": [
{
@@ -1350,7 +1350,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-15T22:48:29+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -1577,16 +1577,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v6.4.9",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463"
+ "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/f810e3cbdf7fdc35983968523d09f349fa9ada12",
+ "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12",
"shasum": ""
},
"require": {
@@ -1623,7 +1623,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.9"
+ "source": "https://github.com/symfony/filesystem/tree/v6.4.12"
},
"funding": [
{
@@ -1639,7 +1639,7 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:49:33+00:00"
+ "time": "2024-09-16T16:01:33+00:00"
},
{
"name": "symfony/finder",
@@ -2248,16 +2248,16 @@
},
{
"name": "symfony/process",
- "version": "v6.4.8",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+ "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+ "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3",
+ "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3",
"shasum": ""
},
"require": {
@@ -2289,7 +2289,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.8"
+ "source": "https://github.com/symfony/process/tree/v6.4.12"
},
"funding": [
{
@@ -2305,7 +2305,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-17T12:47:12+00:00"
},
{
"name": "symfony/service-contracts",
@@ -2454,16 +2454,16 @@
},
{
"name": "symfony/string",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b"
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f8a1ccebd0997e16112dfecfd74220b78e5b284b",
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b",
"shasum": ""
},
"require": {
@@ -2520,7 +2520,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.11"
+ "source": "https://github.com/symfony/string/tree/v6.4.12"
},
"funding": [
{
@@ -2536,7 +2536,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
}
],
"aliases": [],
diff --git a/tools/infection/composer.lock b/tools/infection/composer.lock
index 8963ca576..9b94532a6 100644
--- a/tools/infection/composer.lock
+++ b/tools/infection/composer.lock
@@ -678,16 +678,16 @@
},
{
"name": "nikic/php-parser",
- "version": "v4.19.1",
+ "version": "v4.19.2",
"source": {
"type": "git",
"url": "https://github.com/nikic/PHP-Parser.git",
- "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b"
+ "reference": "0ed4c8949a32986043e977dbe14776c14d644c45"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4e1b88d21c69391150ace211e9eaf05810858d0b",
- "reference": "4e1b88d21c69391150ace211e9eaf05810858d0b",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ed4c8949a32986043e977dbe14776c14d644c45",
+ "reference": "0ed4c8949a32986043e977dbe14776c14d644c45",
"shasum": ""
},
"require": {
@@ -728,9 +728,9 @@
],
"support": {
"issues": "https://github.com/nikic/PHP-Parser/issues",
- "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.1"
+ "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.2"
},
- "time": "2024-03-17T08:10:35+00:00"
+ "time": "2024-09-17T19:36:00+00:00"
},
{
"name": "ondram/ci-detector",
@@ -1111,16 +1111,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998"
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765",
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765",
"shasum": ""
},
"require": {
@@ -1185,7 +1185,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.11"
+ "source": "https://github.com/symfony/console/tree/v6.4.12"
},
"funding": [
{
@@ -1201,7 +1201,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-15T22:48:29+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -1272,16 +1272,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v6.4.9",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463"
+ "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/f810e3cbdf7fdc35983968523d09f349fa9ada12",
+ "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12",
"shasum": ""
},
"require": {
@@ -1318,7 +1318,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.9"
+ "source": "https://github.com/symfony/filesystem/tree/v6.4.12"
},
"funding": [
{
@@ -1334,7 +1334,7 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:49:33+00:00"
+ "time": "2024-09-16T16:01:33+00:00"
},
{
"name": "symfony/finder",
@@ -1720,16 +1720,16 @@
},
{
"name": "symfony/process",
- "version": "v6.4.8",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+ "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+ "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3",
+ "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3",
"shasum": ""
},
"require": {
@@ -1761,7 +1761,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.8"
+ "source": "https://github.com/symfony/process/tree/v6.4.12"
},
"funding": [
{
@@ -1777,7 +1777,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-17T12:47:12+00:00"
},
{
"name": "symfony/service-contracts",
@@ -1864,16 +1864,16 @@
},
{
"name": "symfony/string",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b"
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f8a1ccebd0997e16112dfecfd74220b78e5b284b",
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b",
"shasum": ""
},
"require": {
@@ -1930,7 +1930,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.11"
+ "source": "https://github.com/symfony/string/tree/v6.4.12"
},
"funding": [
{
@@ -1946,7 +1946,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "thecodingmachine/safe",
diff --git a/tools/phpbench/composer.lock b/tools/phpbench/composer.lock
index dce1d9654..a1ebfe665 100644
--- a/tools/phpbench/composer.lock
+++ b/tools/phpbench/composer.lock
@@ -579,16 +579,16 @@
},
{
"name": "symfony/console",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/console.git",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998"
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/console/zipball/42686880adaacdad1835ee8fc2a9ec5b7bd63998",
- "reference": "42686880adaacdad1835ee8fc2a9ec5b7bd63998",
+ "url": "https://api.github.com/repos/symfony/console/zipball/72d080eb9edf80e36c19be61f72c98ed8273b765",
+ "reference": "72d080eb9edf80e36c19be61f72c98ed8273b765",
"shasum": ""
},
"require": {
@@ -653,7 +653,7 @@
"terminal"
],
"support": {
- "source": "https://github.com/symfony/console/tree/v6.4.11"
+ "source": "https://github.com/symfony/console/tree/v6.4.12"
},
"funding": [
{
@@ -669,7 +669,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-15T22:48:29+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "symfony/deprecation-contracts",
@@ -740,16 +740,16 @@
},
{
"name": "symfony/filesystem",
- "version": "v6.4.9",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/filesystem.git",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463"
+ "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463",
- "reference": "b51ef8059159330b74a4d52f68e671033c0fe463",
+ "url": "https://api.github.com/repos/symfony/filesystem/zipball/f810e3cbdf7fdc35983968523d09f349fa9ada12",
+ "reference": "f810e3cbdf7fdc35983968523d09f349fa9ada12",
"shasum": ""
},
"require": {
@@ -786,7 +786,7 @@
"description": "Provides basic utilities for the filesystem",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/filesystem/tree/v6.4.9"
+ "source": "https://github.com/symfony/filesystem/tree/v6.4.12"
},
"funding": [
{
@@ -802,7 +802,7 @@
"type": "tidelift"
}
],
- "time": "2024-06-28T09:49:33+00:00"
+ "time": "2024-09-16T16:01:33+00:00"
},
{
"name": "symfony/finder",
@@ -1255,16 +1255,16 @@
},
{
"name": "symfony/process",
- "version": "v6.4.8",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/process.git",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5"
+ "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/process/zipball/8d92dd79149f29e89ee0f480254db595f6a6a2c5",
- "reference": "8d92dd79149f29e89ee0f480254db595f6a6a2c5",
+ "url": "https://api.github.com/repos/symfony/process/zipball/3f94e5f13ff58df371a7ead461b6e8068900fbb3",
+ "reference": "3f94e5f13ff58df371a7ead461b6e8068900fbb3",
"shasum": ""
},
"require": {
@@ -1296,7 +1296,7 @@
"description": "Executes commands in sub-processes",
"homepage": "https://symfony.com",
"support": {
- "source": "https://github.com/symfony/process/tree/v6.4.8"
+ "source": "https://github.com/symfony/process/tree/v6.4.12"
},
"funding": [
{
@@ -1312,7 +1312,7 @@
"type": "tidelift"
}
],
- "time": "2024-05-31T14:49:08+00:00"
+ "time": "2024-09-17T12:47:12+00:00"
},
{
"name": "symfony/service-contracts",
@@ -1399,16 +1399,16 @@
},
{
"name": "symfony/string",
- "version": "v6.4.11",
+ "version": "v6.4.12",
"source": {
"type": "git",
"url": "https://github.com/symfony/string.git",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b"
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/symfony/string/zipball/5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
- "reference": "5bc3eb632cf9c8dbfd6529d89be9950d1518883b",
+ "url": "https://api.github.com/repos/symfony/string/zipball/f8a1ccebd0997e16112dfecfd74220b78e5b284b",
+ "reference": "f8a1ccebd0997e16112dfecfd74220b78e5b284b",
"shasum": ""
},
"require": {
@@ -1465,7 +1465,7 @@
"utf8"
],
"support": {
- "source": "https://github.com/symfony/string/tree/v6.4.11"
+ "source": "https://github.com/symfony/string/tree/v6.4.12"
},
"funding": [
{
@@ -1481,7 +1481,7 @@
"type": "tidelift"
}
],
- "time": "2024-08-12T09:55:28+00:00"
+ "time": "2024-09-20T08:15:52+00:00"
},
{
"name": "webmozart/glob",
diff --git a/tools/phpstan/composer.lock b/tools/phpstan/composer.lock
index 5c77e4557..558c39f9f 100644
--- a/tools/phpstan/composer.lock
+++ b/tools/phpstan/composer.lock
@@ -9,16 +9,16 @@
"packages-dev": [
{
"name": "phpstan/phpstan",
- "version": "1.12.4",
+ "version": "1.12.5",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
- "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd"
+ "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/phpstan/phpstan/zipball/ffa517cb918591b93acc9b95c0bebdcd0e4538bd",
- "reference": "ffa517cb918591b93acc9b95c0bebdcd0e4538bd",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17",
+ "reference": "7e6c6cb7cecb0a6254009a1a8a7d54ec99812b17",
"shasum": ""
},
"require": {
@@ -63,7 +63,7 @@
"type": "github"
}
],
- "time": "2024-09-19T07:58:01+00:00"
+ "time": "2024-09-26T12:45:22+00:00"
}
],
"aliases": [],
diff --git a/tools/phpunit/composer.lock b/tools/phpunit/composer.lock
index 4c1a2f4be..843f47071 100644
--- a/tools/phpunit/composer.lock
+++ b/tools/phpunit/composer.lock
@@ -566,16 +566,16 @@
},
{
"name": "phpunit/phpunit",
- "version": "10.5.34",
+ "version": "10.5.35",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/phpunit.git",
- "reference": "3c69d315bdf79080c8e115b69d1961c6905b0e18"
+ "reference": "7ac8b4e63f456046dcb4c9787da9382831a1874b"
},
"dist": {
"type": "zip",
- "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3c69d315bdf79080c8e115b69d1961c6905b0e18",
- "reference": "3c69d315bdf79080c8e115b69d1961c6905b0e18",
+ "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/7ac8b4e63f456046dcb4c9787da9382831a1874b",
+ "reference": "7ac8b4e63f456046dcb4c9787da9382831a1874b",
"shasum": ""
},
"require": {
@@ -647,7 +647,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.34"
+ "source": "https://github.com/sebastianbergmann/phpunit/tree/10.5.35"
},
"funding": [
{
@@ -663,7 +663,7 @@
"type": "tidelift"
}
],
- "time": "2024-09-13T05:19:38+00:00"
+ "time": "2024-09-19T10:52:21+00:00"
},
{
"name": "sebastian/cli-parser",