From 65563bee88df51404d2252c2af0a73a2db765a44 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Tue, 2 Nov 2021 17:27:51 +0100 Subject: [PATCH 1/3] Add a selfoss CLI tool MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This introduces two commands for dumping and loading the database contents: - `php bin/selfoss db:export path.json` - `php bin/selfoss db:import path.json` Those are useful for testing, as well as for moving data from one database backend to another. Different databases support different formats of a datetime so we use ISO 8601 (“ATOM”) format as a normal form in the JSON file no matter the backend. Similarly, we use arrays instead of comma-separated-values strings since different backends might choose to implement them differently (e.g. using JSON data types). --- .php-cs-fixer.php | 3 +- bin/selfoss | 23 + composer.json | 2 + composer.lock | 2383 ++++++++++++----------- src/Commands/Database/ExportCommand.php | 64 + src/Commands/Database/ImportCommand.php | 69 + src/daos/CommonSqlDatabase.php | 20 + src/daos/DatabaseInterface.php | 9 + src/daos/Items.php | 8 + src/daos/ItemsInterface.php | 14 + src/daos/Sources.php | 11 + src/daos/SourcesInterface.php | 14 + src/daos/Tags.php | 8 + src/daos/TagsInterface.php | 14 + src/daos/mysql/Items.php | 38 + src/daos/mysql/Sources.php | 40 + src/daos/mysql/Tags.php | 13 + 17 files changed, 1549 insertions(+), 1184 deletions(-) create mode 100755 bin/selfoss create mode 100644 src/Commands/Database/ExportCommand.php create mode 100644 src/Commands/Database/ImportCommand.php diff --git a/.php-cs-fixer.php b/.php-cs-fixer.php index 9e398ebf03..80f9ad856c 100644 --- a/.php-cs-fixer.php +++ b/.php-cs-fixer.php @@ -4,7 +4,8 @@ ->exclude('client') ->exclude('utils') ->in(__DIR__) - ->name('*.phtml'); + ->name('*.phtml') + ->name('selfoss'); $rules = [ '@Symfony' => true, diff --git a/bin/selfoss b/bin/selfoss new file mode 100755 index 0000000000..c7a9f37e04 --- /dev/null +++ b/bin/selfoss @@ -0,0 +1,23 @@ +#!/usr/bin/env php + +// SPDX-License-Identifier: GPL-3.0-or-later + +require __DIR__ . '/../src/common.php'; + +use Commands\Database\ExportCommand as DatabaseExportCommand; +use Commands\Database\ImportCommand as DatabaseImportCommand; +use Monolog\Handler\StreamHandler; +use Symfony\Component\Console\Application; + +$application = new Application(); + +$log->popHandler(); +$handler = new StreamHandler('php://stderr'); +$log->pushHandler($handler); + +$application->add($dice->create(DatabaseExportCommand::class)); +$application->add($dice->create(DatabaseImportCommand::class)); + +$application->run(); diff --git a/composer.json b/composer.json index 479a7942a9..3cdc41682a 100644 --- a/composer.json +++ b/composer.json @@ -23,6 +23,7 @@ "simplepie/simplepie": "^1.8", "smottt/wideimage": "^1.1", "symfony/cache": "^5.4", + "symfony/console": "^5.4", "symfony/polyfill-php80": "^1.26", "violet/streaming-json-encoder": "^1.1", "vstelmakh/url-highlight": "^3.0", @@ -43,6 +44,7 @@ ], "autoload": { "psr-4": { + "Commands\\": "src/Commands/", "controllers\\": "src/controllers/", "daos\\": "src/daos/", "helpers\\": "src/helpers/", diff --git a/composer.lock b/composer.lock index 9aec0bbd3a..4591d14f24 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": "3d8473e8857fadb3e40111ac659d7270", + "content-hash": "383540fee55e340df75d5e8426d327f0", "packages": [ { "name": "bcosca/fatfree-core", @@ -208,16 +208,16 @@ }, { "name": "fossar/htmlawed", - "version": "1.3.2", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/fossar/HTMLawed.git", - "reference": "8aa21f94a7fc684dda9d62b4134ae5911bbe207c" + "reference": "5bd4ce8bca395685a06f7dd18cc40832c77aa60f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/fossar/HTMLawed/zipball/8aa21f94a7fc684dda9d62b4134ae5911bbe207c", - "reference": "8aa21f94a7fc684dda9d62b4134ae5911bbe207c", + "url": "https://api.github.com/repos/fossar/HTMLawed/zipball/5bd4ce8bca395685a06f7dd18cc40832c77aa60f", + "reference": "5bd4ce8bca395685a06f7dd18cc40832c77aa60f", "shasum": "" }, "require": { @@ -259,9 +259,9 @@ ], "support": { "issues": "https://github.com/fossar/HTMLawed/issues", - "source": "https://github.com/fossar/HTMLawed/tree/1.3.2" + "source": "https://github.com/fossar/HTMLawed/tree/1.3.1" }, - "time": "2023-05-22T07:47:31+00:00" + "time": "2022-06-07T07:27:07+00:00" }, { "name": "fossar/transcoder", @@ -330,22 +330,22 @@ }, { "name": "guzzlehttp/guzzle", - "version": "7.7.0", + "version": "7.5.0", "source": { "type": "git", "url": "https://github.com/guzzle/guzzle.git", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5" + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/guzzle/zipball/fb7566caccf22d74d1ab270de3551f72a58399f5", - "reference": "fb7566caccf22d74d1ab270de3551f72a58399f5", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/b50a2a1251152e43f6a37f0fa053e730a67d25ba", + "reference": "b50a2a1251152e43f6a37f0fa053e730a67d25ba", "shasum": "" }, "require": { "ext-json": "*", - "guzzlehttp/promises": "^1.5.3 || ^2.0", - "guzzlehttp/psr7": "^1.9.1 || ^2.4.5", + "guzzlehttp/promises": "^1.5", + "guzzlehttp/psr7": "^1.9 || ^2.4", "php": "^7.2.5 || ^8.0", "psr/http-client": "^1.0", "symfony/deprecation-contracts": "^2.2 || ^3.0" @@ -356,8 +356,7 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.8.1", "ext-curl": "*", - "php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999", - "php-http/message-factory": "^1.1", + "php-http/client-integration-tests": "^3.0", "phpunit/phpunit": "^8.5.29 || ^9.5.23", "psr/log": "^1.1 || ^2.0 || ^3.0" }, @@ -371,6 +370,9 @@ "bamarni-bin": { "bin-links": true, "forward-command": false + }, + "branch-alias": { + "dev-master": "7.5-dev" } }, "autoload": { @@ -436,7 +438,7 @@ ], "support": { "issues": "https://github.com/guzzle/guzzle/issues", - "source": "https://github.com/guzzle/guzzle/tree/7.7.0" + "source": "https://github.com/guzzle/guzzle/tree/7.5.0" }, "funding": [ { @@ -452,7 +454,7 @@ "type": "tidelift" } ], - "time": "2023-05-21T14:04:53+00:00" + "time": "2022-08-28T15:39:27+00:00" }, { "name": "guzzlehttp/oauth-subscriber", @@ -515,33 +517,34 @@ }, { "name": "guzzlehttp/promises", - "version": "2.0.0", + "version": "1.5.2", "source": { "type": "git", "url": "https://github.com/guzzle/promises.git", - "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6" + "reference": "b94b2807d85443f9719887892882d0329d1e2598" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/promises/zipball/3a494dc7dc1d7d12e511890177ae2d0e6c107da6", - "reference": "3a494dc7dc1d7d12e511890177ae2d0e6c107da6", + "url": "https://api.github.com/repos/guzzle/promises/zipball/b94b2807d85443f9719887892882d0329d1e2598", + "reference": "b94b2807d85443f9719887892882d0329d1e2598", "shasum": "" }, "require": { - "php": "^7.2.5 || ^8.0" + "php": ">=5.5" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" + "symfony/phpunit-bridge": "^4.4 || ^5.1" }, "type": "library", "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false + "branch-alias": { + "dev-master": "1.5-dev" } }, "autoload": { + "files": [ + "src/functions_include.php" + ], "psr-4": { "GuzzleHttp\\Promise\\": "src/" } @@ -578,7 +581,7 @@ ], "support": { "issues": "https://github.com/guzzle/promises/issues", - "source": "https://github.com/guzzle/promises/tree/2.0.0" + "source": "https://github.com/guzzle/promises/tree/1.5.2" }, "funding": [ { @@ -594,26 +597,26 @@ "type": "tidelift" } ], - "time": "2023-05-21T13:50:22+00:00" + "time": "2022-08-28T14:55:35+00:00" }, { "name": "guzzlehttp/psr7", - "version": "2.5.0", + "version": "2.4.4", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6" + "reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/b635f279edd83fc275f822a1188157ffea568ff6", - "reference": "b635f279edd83fc275f822a1188157ffea568ff6", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf", + "reference": "3cf1b6d4f0c820a2cf8bcaec39fc698f3443b5cf", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.1 || ^2.0", + "psr/http-message": "^1.0", "ralouphie/getallheaders": "^3.0" }, "provide": { @@ -633,6 +636,9 @@ "bamarni-bin": { "bin-links": true, "forward-command": false + }, + "branch-alias": { + "dev-master": "2.4-dev" } }, "autoload": { @@ -694,7 +700,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.5.0" + "source": "https://github.com/guzzle/psr7/tree/2.4.4" }, "funding": [ { @@ -710,7 +716,7 @@ "type": "tidelift" } ], - "time": "2023-04-17T16:11:26+00:00" + "time": "2023-03-09T13:19:02+00:00" }, { "name": "http-interop/http-factory-guzzle", @@ -902,16 +908,16 @@ }, { "name": "j0k3r/graby-site-config", - "version": "1.0.168", + "version": "1.0.165", "source": { "type": "git", "url": "https://github.com/j0k3r/graby-site-config.git", - "reference": "db9306a6e1cb8d0e7ac70496dc397a6472cb4a60" + "reference": "a93b4d1b6fbf5e82c7d5798c463355fa4f9d91e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/j0k3r/graby-site-config/zipball/db9306a6e1cb8d0e7ac70496dc397a6472cb4a60", - "reference": "db9306a6e1cb8d0e7ac70496dc397a6472cb4a60", + "url": "https://api.github.com/repos/j0k3r/graby-site-config/zipball/a93b4d1b6fbf5e82c7d5798c463355fa4f9d91e8", + "reference": "a93b4d1b6fbf5e82c7d5798c463355fa4f9d91e8", "shasum": "" }, "require": { @@ -940,9 +946,9 @@ "description": "Graby site config files", "support": { "issues": "https://github.com/j0k3r/graby-site-config/issues", - "source": "https://github.com/j0k3r/graby-site-config/tree/1.0.168" + "source": "https://github.com/j0k3r/graby-site-config/tree/1.0.165" }, - "time": "2023-06-01T02:35:37+00:00" + "time": "2023-04-01T02:14:35+00:00" }, { "name": "j0k3r/httplug-ssrf-plugin", @@ -1204,24 +1210,26 @@ }, { "name": "masterminds/html5", - "version": "2.8.0", + "version": "2.7.6", "source": { "type": "git", "url": "https://github.com/Masterminds/html5-php.git", - "reference": "3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3" + "reference": "897eb517a343a2281f11bc5556d6548db7d93947" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3", - "reference": "3c5d5a56d56f48a1ca08a0670f0f80c1dad368f3", + "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/897eb517a343a2281f11bc5556d6548db7d93947", + "reference": "897eb517a343a2281f11bc5556d6548db7d93947", "shasum": "" }, "require": { + "ext-ctype": "*", "ext-dom": "*", + "ext-libxml": "*", "php": ">=5.3.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7 || ^8" + "phpunit/phpunit": "^4.8.35 || ^5.7.21 || ^6 || ^7" }, "type": "library", "extra": { @@ -1265,22 +1273,22 @@ ], "support": { "issues": "https://github.com/Masterminds/html5-php/issues", - "source": "https://github.com/Masterminds/html5-php/tree/2.8.0" + "source": "https://github.com/Masterminds/html5-php/tree/2.7.6" }, - "time": "2023-04-26T07:27:39+00:00" + "time": "2022-08-18T16:18:26+00:00" }, { "name": "mibe/feedwriter", - "version": "v1.1.2", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/mibe/FeedWriter.git", - "reference": "b32ed2a68e612a1f6045d00d342df6928ecfecad" + "reference": "f4cc748ad8700e36663f08cfeebe7fd39b00eea2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/mibe/FeedWriter/zipball/b32ed2a68e612a1f6045d00d342df6928ecfecad", - "reference": "b32ed2a68e612a1f6045d00d342df6928ecfecad", + "url": "https://api.github.com/repos/mibe/FeedWriter/zipball/f4cc748ad8700e36663f08cfeebe7fd39b00eea2", + "reference": "f4cc748ad8700e36663f08cfeebe7fd39b00eea2", "shasum": "" }, "require": { @@ -1302,10 +1310,6 @@ "GPL-3.0" ], "authors": [ - { - "name": "Anis uddin Ahmad", - "email": "anis.programmer@gmail.com" - }, { "name": "Michael Bemmerl", "email": "mail@mx-server.de" @@ -1335,6 +1339,10 @@ { "name": "Julian Bogdani" }, + { + "name": "Anis Uddin Ahmad", + "email": "anis.programmer@gmail.com" + }, { "name": "Cedric Gampert" }, @@ -1366,9 +1374,9 @@ ], "support": { "issues": "https://github.com/mibe/FeedWriter/issues", - "source": "https://github.com/mibe/FeedWriter/tree/v1.1.2" + "source": "https://github.com/mibe/FeedWriter/tree/master" }, - "time": "2023-05-24T23:01:35+00:00" + "time": "2016-11-19T20:47:44+00:00" }, { "name": "monolog/monolog", @@ -1474,25 +1482,26 @@ }, { "name": "php-http/client-common", - "version": "2.7.0", + "version": "2.6.0", "source": { "type": "git", "url": "https://github.com/php-http/client-common.git", - "reference": "880509727a447474d2a71b7d7fa5d268ddd3db4b" + "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/client-common/zipball/880509727a447474d2a71b7d7fa5d268ddd3db4b", - "reference": "880509727a447474d2a71b7d7fa5d268ddd3db4b", + "url": "https://api.github.com/repos/php-http/client-common/zipball/45db684cd4e186dcdc2b9c06b22970fe123796c0", + "reference": "45db684cd4e186dcdc2b9c06b22970fe123796c0", "shasum": "" }, "require": { "php": "^7.1 || ^8.0", "php-http/httplug": "^2.0", "php-http/message": "^1.6", + "php-http/message-factory": "^1.0", "psr/http-client": "^1.0", "psr/http-factory": "^1.0", - "psr/http-message": "^1.0 || ^2.0", + "psr/http-message": "^1.0", "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0", "symfony/polyfill-php80": "^1.17" }, @@ -1502,7 +1511,7 @@ "nyholm/psr7": "^1.2", "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", "phpspec/prophecy": "^1.10.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7" + "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.3" }, "suggest": { "ext-json": "To detect JSON responses with the ContentTypePlugin", @@ -1512,6 +1521,11 @@ "php-http/stopwatch-plugin": "Symfony Stopwatch plugin" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3.x-dev" + } + }, "autoload": { "psr-4": { "Http\\Client\\Common\\": "src/" @@ -1537,22 +1551,22 @@ ], "support": { "issues": "https://github.com/php-http/client-common/issues", - "source": "https://github.com/php-http/client-common/tree/2.7.0" + "source": "https://github.com/php-http/client-common/tree/2.6.0" }, - "time": "2023-05-17T06:46:59+00:00" + "time": "2022-09-29T09:59:43+00:00" }, { "name": "php-http/discovery", - "version": "1.18.1", + "version": "1.15.3", "source": { "type": "git", "url": "https://github.com/php-http/discovery.git", - "reference": "f258b3a1d16acb7b21f3b42d7a2494a733365237" + "reference": "3ccd28dd9fb34b52db946abea1b538568e34eae8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/discovery/zipball/f258b3a1d16acb7b21f3b42d7a2494a733365237", - "reference": "f258b3a1d16acb7b21f3b42d7a2494a733365237", + "url": "https://api.github.com/repos/php-http/discovery/zipball/3ccd28dd9fb34b52db946abea1b538568e34eae8", + "reference": "3ccd28dd9fb34b52db946abea1b538568e34eae8", "shasum": "" }, "require": { @@ -1560,8 +1574,7 @@ "php": "^7.1 || ^8.0" }, "conflict": { - "nyholm/psr7": "<1.0", - "zendframework/zend-diactoros": "*" + "nyholm/psr7": "<1.0" }, "provide": { "php-http/async-client-implementation": "*", @@ -1586,10 +1599,7 @@ "autoload": { "psr-4": { "Http\\Discovery\\": "src/" - }, - "exclude-from-classmap": [ - "src/Composer/Plugin.php" - ] + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1615,9 +1625,9 @@ ], "support": { "issues": "https://github.com/php-http/discovery/issues", - "source": "https://github.com/php-http/discovery/tree/1.18.1" + "source": "https://github.com/php-http/discovery/tree/1.15.3" }, - "time": "2023-05-17T08:53:10+00:00" + "time": "2023-03-31T14:40:37+00:00" }, { "name": "php-http/guzzle7-adapter", @@ -1683,29 +1693,34 @@ }, { "name": "php-http/httplug", - "version": "2.4.0", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/php-http/httplug.git", - "reference": "625ad742c360c8ac580fcc647a1541d29e257f67" + "reference": "f640739f80dfa1152533976e3c112477f69274eb" }, "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/f640739f80dfa1152533976e3c112477f69274eb", + "reference": "f640739f80dfa1152533976e3c112477f69274eb", "shasum": "" }, "require": { "php": "^7.1 || ^8.0", "php-http/promise": "^1.1", "psr/http-client": "^1.0", - "psr/http-message": "^1.0 || ^2.0" + "psr/http-message": "^1.0" }, "require-dev": { - "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0", - "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0" + "friends-of-phpspec/phpspec-code-coverage": "^4.1", + "phpspec/phpspec": "^5.1 || ^6.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.x-dev" + } + }, "autoload": { "psr-4": { "Http\\Client\\": "src/" @@ -1734,28 +1749,29 @@ ], "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.3.0" }, - "time": "2023-04-14T15:10:03+00:00" + "time": "2022-02-21T09:52:22+00:00" }, { "name": "php-http/message", - "version": "1.16.0", + "version": "1.13.0", "source": { "type": "git", "url": "https://github.com/php-http/message.git", - "reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd" + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message/zipball/47a14338bf4ebd67d317bf1144253d7db4ab55fd", - "reference": "47a14338bf4ebd67d317bf1144253d7db4ab55fd", + "url": "https://api.github.com/repos/php-http/message/zipball/7886e647a30a966a1a8d1dad1845b71ca8678361", + "reference": "7886e647a30a966a1a8d1dad1845b71ca8678361", "shasum": "" }, "require": { "clue/stream-filter": "^1.5", - "php": "^7.2 || ^8.0", - "psr/http-message": "^1.1 || ^2.0" + "php": "^7.1 || ^8.0", + "php-http/message-factory": "^1.0.2", + "psr/http-message": "^1.0" }, "provide": { "php-http/message-factory-implementation": "1.0" @@ -1763,9 +1779,8 @@ "require-dev": { "ergebnis/composer-normalize": "^2.6", "ext-zlib": "*", - "guzzlehttp/psr7": "^1.0 || ^2.0", - "laminas/laminas-diactoros": "^2.0 || ^3.0", - "php-http/message-factory": "^1.0.2", + "guzzlehttp/psr7": "^1.0", + "laminas/laminas-diactoros": "^2.0", "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1", "slim/slim": "^3.0" }, @@ -1776,6 +1791,11 @@ "slim/slim": "Used with Slim Framework PSR-7 implementation" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, "autoload": { "files": [ "src/filters.php" @@ -1803,32 +1823,32 @@ ], "support": { "issues": "https://github.com/php-http/message/issues", - "source": "https://github.com/php-http/message/tree/1.16.0" + "source": "https://github.com/php-http/message/tree/1.13.0" }, - "time": "2023-05-17T06:43:38+00:00" + "time": "2022-02-11T13:41:14+00:00" }, { "name": "php-http/message-factory", - "version": "1.1.0", + "version": "v1.0.2", "source": { "type": "git", "url": "https://github.com/php-http/message-factory.git", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57" + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57", - "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57", + "url": "https://api.github.com/repos/php-http/message-factory/zipball/a478cb11f66a6ac48d8954216cfed9aa06a501a1", + "reference": "a478cb11f66a6ac48d8954216cfed9aa06a501a1", "shasum": "" }, "require": { "php": ">=5.4", - "psr/http-message": "^1.0 || ^2.0" + "psr/http-message": "^1.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -1857,10 +1877,9 @@ ], "support": { "issues": "https://github.com/php-http/message-factory/issues", - "source": "https://github.com/php-http/message-factory/tree/1.1.0" + "source": "https://github.com/php-http/message-factory/tree/master" }, - "abandoned": "psr/http-factory", - "time": "2023-04-14T14:16:17+00:00" + "time": "2015-12-19T14:08:53+00:00" }, { "name": "php-http/promise", @@ -2018,21 +2037,21 @@ }, { "name": "psr/http-client", - "version": "1.0.2", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-client.git", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31" + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-client/zipball/0955afe48220520692d2d09f7ab7e0f93ffd6a31", - "reference": "0955afe48220520692d2d09f7ab7e0f93ffd6a31", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", "shasum": "" }, "require": { "php": "^7.0 || ^8.0", - "psr/http-message": "^1.0 || ^2.0" + "psr/http-message": "^1.0" }, "type": "library", "extra": { @@ -2052,7 +2071,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "description": "Common interface for HTTP clients", @@ -2064,27 +2083,27 @@ "psr-18" ], "support": { - "source": "https://github.com/php-fig/http-client/tree/1.0.2" + "source": "https://github.com/php-fig/http-client/tree/master" }, - "time": "2023-04-10T20:12:12+00:00" + "time": "2020-06-29T06:28:15+00:00" }, { "name": "psr/http-factory", - "version": "1.0.2", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-factory.git", - "reference": "e616d01114759c4c489f93b099585439f795fe35" + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35", - "reference": "e616d01114759c4c489f93b099585439f795fe35", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", "shasum": "" }, "require": { "php": ">=7.0.0", - "psr/http-message": "^1.0 || ^2.0" + "psr/http-message": "^1.0" }, "type": "library", "extra": { @@ -2104,7 +2123,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" + "homepage": "http://www.php-fig.org/" } ], "description": "Common interfaces for PSR-7 HTTP message factories", @@ -2119,9 +2138,9 @@ "response" ], "support": { - "source": "https://github.com/php-fig/http-factory/tree/1.0.2" + "source": "https://github.com/php-fig/http-factory/tree/master" }, - "time": "2023-04-10T20:10:41+00:00" + "time": "2019-04-30T12:38:16+00:00" }, { "name": "psr/http-message", @@ -2488,16 +2507,16 @@ }, { "name": "symfony/cache", - "version": "v5.4.23", + "version": "v5.4.22", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "983c79ff28612cdfd66d8e44e1a06e5afc87e107" + "reference": "5ed986c4ef65f0dea5e9753630b5cb1f07f847d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/983c79ff28612cdfd66d8e44e1a06e5afc87e107", - "reference": "983c79ff28612cdfd66d8e44e1a06e5afc87e107", + "url": "https://api.github.com/repos/symfony/cache/zipball/5ed986c4ef65f0dea5e9753630b5cb1f07f847d6", + "reference": "5ed986c4ef65f0dea5e9753630b5cb1f07f847d6", "shasum": "" }, "require": { @@ -2565,7 +2584,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v5.4.23" + "source": "https://github.com/symfony/cache/tree/v5.4.22" }, "funding": [ { @@ -2581,7 +2600,7 @@ "type": "tidelift" } ], - "time": "2023-04-21T15:38:51+00:00" + "time": "2023-03-29T20:01:08+00:00" }, { "name": "symfony/cache-contracts", @@ -2662,6 +2681,105 @@ ], "time": "2022-01-02T09:53:40+00:00" }, + { + "name": "symfony/console", + "version": "v5.4.24", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "560fc3ed7a43e6d30ea94a07d77f9a60b8ed0fb8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/560fc3ed7a43e6d30ea94a07d77f9a60b8ed0fb8", + "reference": "560fc3ed7a43e6d30ea94a07d77f9a60b8ed0fb8", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php73": "^1.9", + "symfony/polyfill-php80": "^1.16", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.1|^6.0" + }, + "conflict": { + "psr/log": ">=3", + "symfony/dependency-injection": "<4.4", + "symfony/dotenv": "<5.1", + "symfony/event-dispatcher": "<4.4", + "symfony/lock": "<4.4", + "symfony/process": "<4.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0" + }, + "require-dev": { + "psr/log": "^1|^2", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/event-dispatcher": "^4.4|^5.0|^6.0", + "symfony/lock": "^4.4|^5.0|^6.0", + "symfony/process": "^4.4|^5.0|^6.0", + "symfony/var-dumper": "^4.4|^5.0|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command-line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v5.4.24" + }, + "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": "2023-05-26T05:13:16+00:00" + }, { "name": "symfony/deprecation-contracts", "version": "v2.5.2", @@ -2862,27 +2980,27 @@ "time": "2023-02-14T08:03:56+00:00" }, { - "name": "symfony/polyfill-mbstring", + "name": "symfony/polyfill-ctype", "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { "php": ">=7.1" }, "provide": { - "ext-mbstring": "*" + "ext-ctype": "*" }, "suggest": { - "ext-mbstring": "For best performance" + "ext-ctype": "For best performance" }, "type": "library", "extra": { @@ -2899,7 +3017,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" + "Symfony\\Polyfill\\Ctype\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2908,25 +3026,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Mbstring extension", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "mbstring", + "ctype", "polyfill", - "portable", - "shim" + "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -2945,22 +3062,25 @@ "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php72", + "name": "symfony/polyfill-intl-grapheme", "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { "php": ">=7.1" }, + "suggest": { + "ext-intl": "For best performance" + }, "type": "library", "extra": { "branch-alias": { @@ -2976,7 +3096,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -2993,16 +3113,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "description": "Symfony polyfill for intl's grapheme_* functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "grapheme", + "intl", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -3021,22 +3143,25 @@ "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php73", + "name": "symfony/polyfill-intl-normalizer", "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", - "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { "php": ">=7.1" }, + "suggest": { + "ext-intl": "For best performance" + }, "type": "library", "extra": { "branch-alias": { @@ -3052,7 +3177,7 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" }, "classmap": [ "Resources/stubs" @@ -3072,16 +3197,18 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill for intl's Normalizer class and related functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "intl", + "normalizer", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -3100,22 +3227,28 @@ "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/polyfill-php80", + "name": "symfony/polyfill-mbstring", "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, "type": "library", "extra": { "branch-alias": { @@ -3131,21 +3264,14 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3155,16 +3281,17 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill for the Mbstring extension", "homepage": "https://symfony.com", "keywords": [ "compatibility", + "mbstring", "polyfill", "portable", "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -3183,43 +3310,38 @@ "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/service-contracts", - "version": "v2.5.2", + "name": "symfony/polyfill-php72", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", - "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" + "php": ">=7.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "1.27-dev" }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" } }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Contracts\\Service\\": "" + "Symfony\\Polyfill\\Php72\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3236,18 +3358,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Generic abstractions related to writing services", + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -3263,36 +3383,44 @@ "type": "tidelift" } ], - "time": "2022-05-30T19:17:29+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { - "name": "symfony/var-exporter", - "version": "v5.4.21", + "name": "symfony/polyfill-php73", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/symfony/var-exporter.git", - "reference": "be74908a6942fdd331554b3cec27ff41b45ccad4" + "url": "https://github.com/symfony/polyfill-php73.git", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/be74908a6942fdd331554b3cec27ff41b45ccad4", - "reference": "be74908a6942fdd331554b3cec27ff41b45ccad4", + "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/9e8ecb5f92152187c4799efd3c96b78ccab18ff9", + "reference": "9e8ecb5f92152187c4799efd3c96b78ccab18ff9", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" + "php": ">=7.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "Symfony\\Component\\VarExporter\\": "" + "Symfony\\Polyfill\\Php73\\": "" }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "Resources/stubs" ] }, "notification-url": "https://packagist.org/downloads/", @@ -3309,18 +3437,16 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ - "clone", - "construct", - "export", - "hydrate", - "instantiate", - "serialize" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v5.4.21" + "source": "https://github.com/symfony/polyfill-php73/tree/v1.27.0" }, "funding": [ { @@ -3336,35 +3462,45 @@ "type": "tidelift" } ], - "time": "2023-02-21T19:46:44+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { - "name": "true/punycode", - "version": "v2.1.1", + "name": "symfony/polyfill-php80", + "version": "v1.27.0", "source": { "type": "git", - "url": "https://github.com/true/php-punycode.git", - "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/true/php-punycode/zipball/a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", - "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { - "php": ">=5.3.0", - "symfony/polyfill-mbstring": "^1.3" - }, - "require-dev": { - "phpunit/phpunit": "~4.7", - "squizlabs/php_codesniffer": "~2.0" + "php": ">=7.1" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, "autoload": { + "files": [ + "bootstrap.php" + ], "psr-4": { - "TrueBV\\": "src/" - } + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3372,45 +3508,83 @@ ], "authors": [ { - "name": "Renan Gonçalves", - "email": "renan.saddam@gmail.com" + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)", - "homepage": "https://github.com/true/php-punycode", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", "keywords": [ - "idna", - "punycode" + "compatibility", + "polyfill", + "portable", + "shim" ], "support": { - "issues": "https://github.com/true/php-punycode/issues", - "source": "https://github.com/true/php-punycode/tree/master" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, - "abandoned": true, - "time": "2016-11-16T10:37:54+00:00" + "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": "2022-11-03T14:55:06+00:00" }, { - "name": "violet/streaming-json-encoder", - "version": "v1.1.5", + "name": "symfony/service-contracts", + "version": "v2.5.2", "source": { "type": "git", - "url": "https://github.com/violet-php/streaming-json-encoder.git", - "reference": "5cc3d506ba7768f8db8ad3d21dcd251a64598805" + "url": "https://github.com/symfony/service-contracts.git", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/violet-php/streaming-json-encoder/zipball/5cc3d506ba7768f8db8ad3d21dcd251a64598805", - "reference": "5cc3d506ba7768f8db8ad3d21dcd251a64598805", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/4b426aac47d6427cc1a1d0f7e2ac724627f5966c", + "reference": "4b426aac47d6427cc1a1d0f7e2ac724627f5966c", "shasum": "" }, "require": { - "php": ">=5.6.0", - "psr/http-message": "^1.0" + "php": ">=7.2.5", + "psr/container": "^1.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.5-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, "autoload": { "psr-4": { - "Violet\\StreamingJsonEncoder\\": "src/" + "Symfony\\Contracts\\Service\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -3419,109 +3593,85 @@ ], "authors": [ { - "name": "Riikka Kalliomäki", - "email": "riikka.kalliomaki@gmail.com", - "homepage": "http://riimu.net" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "Library for iteratively encoding large JSON documents piece by piece", - "homepage": "http://violet.riimu.net", + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", "keywords": [ - "encoder", - "json", - "psr-7", - "streaming" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "issues": "https://github.com/violet-php/streaming-json-encoder/issues", - "source": "https://github.com/violet-php/streaming-json-encoder/tree/v1.1.5" - }, - "time": "2022-12-09T15:47:21+00:00" - }, - { - "name": "vstelmakh/url-highlight", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/vstelmakh/url-highlight.git", - "reference": "458f1af6acdf63d33e7fb43aeeecb4bfe64bda2b" + "source": "https://github.com/symfony/service-contracts/tree/v2.5.2" }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vstelmakh/url-highlight/zipball/458f1af6acdf63d33e7fb43aeeecb4bfe64bda2b", - "reference": "458f1af6acdf63d33e7fb43aeeecb4bfe64bda2b", - "shasum": "" - }, - "require": { - "ext-json": "*", - "ext-mbstring": "*", - "php": "^7.1 || ^8", - "symfony/polyfill-php72": "^1.10" - }, - "require-dev": { - "phpbench/phpbench": "^0.16 || ^1.2.6", - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^7.5.3 || ^8 || ^9.3", - "squizlabs/php_codesniffer": "^3.7.1", - "vstelmakh/covelyzer": "^0.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "VStelmakh\\UrlHighlight\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ + "funding": [ { - "name": "Volodymyr Stelmakh", - "homepage": "https://github.com/vstelmakh" + "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" } ], - "description": "Library to parse urls from string input", - "homepage": "https://github.com/vstelmakh/url-highlight", - "keywords": [ - "Linkify", - "clickable", - "extract", - "html", - "parser", - "url" - ], - "support": { - "issues": "https://github.com/vstelmakh/url-highlight/issues", - "source": "https://github.com/vstelmakh/url-highlight/tree/v3.0.2" - }, - "time": "2023-01-15T16:58:38+00:00" + "time": "2022-05-30T19:17:29+00:00" }, { - "name": "willwashburn/phpamo", - "version": "1.0.4", + "name": "symfony/string", + "version": "v5.4.22", "source": { "type": "git", - "url": "https://github.com/willwashburn/phpamo.git", - "reference": "026e44648c7e4154ef50763a3f0feed81b259054" + "url": "https://github.com/symfony/string.git", + "reference": "8036a4c76c0dd29e60b6a7cafcacc50cf088ea62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/willwashburn/phpamo/zipball/026e44648c7e4154ef50763a3f0feed81b259054", - "reference": "026e44648c7e4154ef50763a3f0feed81b259054", + "url": "https://api.github.com/repos/symfony/string/zipball/8036a4c76c0dd29e60b6a7cafcacc50cf088ea62", + "reference": "8036a4c76c0dd29e60b6a7cafcacc50cf088ea62", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0", + "symfony/polyfill-php80": "~1.15" + }, + "conflict": { + "symfony/translation-contracts": ">=3.0" }, "require-dev": { - "phpunit/phpunit": "~4.0" + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/http-client": "^4.4|^5.0|^6.0", + "symfony/translation-contracts": "^1.1|^2", + "symfony/var-exporter": "^4.4|^5.0|^6.0" }, "type": "library", "autoload": { + "files": [ + "Resources/functions.php" + ], "psr-4": { - "WillWashburn\\Phpamo\\": "src/" - } + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3529,61 +3679,72 @@ ], "authors": [ { - "name": "Will Washburn", - "email": "will.washburn@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "A PHP library to create urls for Camo - the SSL image proxy", - "homepage": "https://github.com/willwashburn/phpamo", + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", "keywords": [ - "atmos camo", - "camo", - "proxy", - "ssl", - "ssl proxy", - "tls", - "tls proxy" + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" ], "support": { - "issues": "https://github.com/willwashburn/phpamo/issues", - "source": "https://github.com/willwashburn/phpamo/tree/v1.0.4" + "source": "https://github.com/symfony/string/tree/v5.4.22" }, - "time": "2020-04-21T12:28:46+00:00" - } - ], - "packages-dev": [ + "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": "2023-03-14T06:11:53+00:00" + }, { - "name": "composer/pcre", - "version": "3.1.0", + "name": "symfony/var-exporter", + "version": "v5.4.21", "source": { "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + "url": "https://github.com/symfony/var-exporter.git", + "reference": "be74908a6942fdd331554b3cec27ff41b45ccad4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/be74908a6942fdd331554b3cec27ff41b45ccad4", + "reference": "be74908a6942fdd331554b3cec27ff41b45ccad4", "shasum": "" }, "require": { - "php": "^7.4 || ^8.0" + "php": ">=7.2.5", + "symfony/polyfill-php80": "^1.16" }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "symfony/var-dumper": "^4.4.9|^5.0.9|^6.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Pcre\\": "src" - } + "Symfony\\Component\\VarExporter\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3591,68 +3752,69 @@ ], "authors": [ { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" } ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "description": "Allows exporting any serializable PHP data structure to plain PHP code", + "homepage": "https://symfony.com", "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" + "clone", + "construct", + "export", + "hydrate", + "instantiate", + "serialize" ], "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" + "source": "https://github.com/symfony/var-exporter/tree/v5.4.21" }, "funding": [ { - "url": "https://packagist.com", + "url": "https://symfony.com/sponsor", "type": "custom" }, { - "url": "https://github.com/composer", + "url": "https://github.com/fabpot", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", "type": "tidelift" } ], - "time": "2022-11-17T09:50:14+00:00" + "time": "2023-02-21T19:46:44+00:00" }, { - "name": "composer/semver", - "version": "3.3.2", + "name": "true/punycode", + "version": "v2.1.1", "source": { "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + "url": "https://github.com/true/php-punycode.git", + "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "url": "https://api.github.com/repos/true/php-punycode/zipball/a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", + "reference": "a4d0c11a36dd7f4e7cd7096076cab6d3378a071e", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": ">=5.3.0", + "symfony/polyfill-mbstring": "^1.3" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpunit/phpunit": "~4.7", + "squizlabs/php_codesniffer": "~2.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, "autoload": { "psr-4": { - "Composer\\Semver\\": "src" + "TrueBV\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3661,77 +3823,45 @@ ], "authors": [ { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" + "name": "Renan Gonçalves", + "email": "renan.saddam@gmail.com" } ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", + "description": "A Bootstring encoding of Unicode for Internationalized Domain Names in Applications (IDNA)", + "homepage": "https://github.com/true/php-punycode", "keywords": [ - "semantic", - "semver", - "validation", - "versioning" + "idna", + "punycode" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" + "issues": "https://github.com/true/php-punycode/issues", + "source": "https://github.com/true/php-punycode/tree/master" }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-04-01T19:23:25+00:00" + "abandoned": true, + "time": "2016-11-16T10:37:54+00:00" }, { - "name": "composer/xdebug-handler", - "version": "3.0.3", + "name": "violet/streaming-json-encoder", + "version": "v1.1.5", "source": { "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "url": "https://github.com/violet-php/streaming-json-encoder.git", + "reference": "5cc3d506ba7768f8db8ad3d21dcd251a64598805" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/violet-php/streaming-json-encoder/zipball/5cc3d506ba7768f8db8ad3d21dcd251a64598805", + "reference": "5cc3d506ba7768f8db8ad3d21dcd251a64598805", "shasum": "" }, "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "php": ">=5.6.0", + "psr/http-message": "^1.0" }, "type": "library", "autoload": { "psr-4": { - "Composer\\XdebugHandler\\": "src" + "Violet\\StreamingJsonEncoder\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3740,71 +3870,56 @@ ], "authors": [ { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" + "name": "Riikka Kalliomäki", + "email": "riikka.kalliomaki@gmail.com", + "homepage": "http://riimu.net" } ], - "description": "Restarts a process without Xdebug.", + "description": "Library for iteratively encoding large JSON documents piece by piece", + "homepage": "http://violet.riimu.net", "keywords": [ - "Xdebug", - "performance" + "encoder", + "json", + "psr-7", + "streaming" ], "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "issues": "https://github.com/violet-php/streaming-json-encoder/issues", + "source": "https://github.com/violet-php/streaming-json-encoder/tree/v1.1.5" }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2022-12-09T15:47:21+00:00" }, { - "name": "doctrine/annotations", - "version": "2.0.1", + "name": "vstelmakh/url-highlight", + "version": "v3.0.2", "source": { "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" + "url": "https://github.com/vstelmakh/url-highlight.git", + "reference": "458f1af6acdf63d33e7fb43aeeecb4bfe64bda2b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "url": "https://api.github.com/repos/vstelmakh/url-highlight/zipball/458f1af6acdf63d33e7fb43aeeecb4bfe64bda2b", + "reference": "458f1af6acdf63d33e7fb43aeeecb4bfe64bda2b", "shasum": "" }, "require": { - "doctrine/lexer": "^2 || ^3", - "ext-tokenizer": "*", - "php": "^7.2 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" + "ext-json": "*", + "ext-mbstring": "*", + "php": "^7.1 || ^8", + "symfony/polyfill-php72": "^1.10" }, "require-dev": { - "doctrine/cache": "^2.0", - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + "phpbench/phpbench": "^0.16 || ^1.2.6", + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^7.5.3 || ^8 || ^9.3", + "squizlabs/php_codesniffer": "^3.7.1", + "vstelmakh/covelyzer": "^0.2" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + "VStelmakh\\UrlHighlight\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -3813,115 +3928,112 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Volodymyr Stelmakh", + "homepage": "https://github.com/vstelmakh" } ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "description": "Library to parse urls from string input", + "homepage": "https://github.com/vstelmakh/url-highlight", "keywords": [ - "annotations", - "docblock", - "parser" + "Linkify", + "clickable", + "extract", + "html", + "parser", + "url" ], "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" + "issues": "https://github.com/vstelmakh/url-highlight/issues", + "source": "https://github.com/vstelmakh/url-highlight/tree/v3.0.2" }, - "time": "2023-02-02T22:02:53+00:00" + "time": "2023-01-15T16:58:38+00:00" }, { - "name": "doctrine/deprecations", - "version": "v1.1.1", + "name": "willwashburn/phpamo", + "version": "1.0.4", "source": { "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3" + "url": "https://github.com/willwashburn/phpamo.git", + "reference": "026e44648c7e4154ef50763a3f0feed81b259054" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", - "reference": "612a3ee5ab0d5dd97b7cf3874a6efe24325efac3", + "url": "https://api.github.com/repos/willwashburn/phpamo/zipball/026e44648c7e4154ef50763a3f0feed81b259054", + "reference": "026e44648c7e4154ef50763a3f0feed81b259054", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": ">=5.3.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + "phpunit/phpunit": "~4.0" }, "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "WillWashburn\\Phpamo\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", + "authors": [ + { + "name": "Will Washburn", + "email": "will.washburn@gmail.com" + } + ], + "description": "A PHP library to create urls for Camo - the SSL image proxy", + "homepage": "https://github.com/willwashburn/phpamo", + "keywords": [ + "atmos camo", + "camo", + "proxy", + "ssl", + "ssl proxy", + "tls", + "tls proxy" + ], "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.1.1" + "issues": "https://github.com/willwashburn/phpamo/issues", + "source": "https://github.com/willwashburn/phpamo/tree/v1.0.4" }, - "time": "2023-06-03T09:27:29+00:00" - }, + "time": "2020-04-21T12:28:46+00:00" + } + ], + "packages-dev": [ { - "name": "doctrine/lexer", - "version": "2.1.0", + "name": "composer/pcre", + "version": "3.1.0", "source": { "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + "url": "https://github.com/composer/pcre.git", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" + "Composer\\Pcre\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -3930,108 +4042,68 @@ ], "authors": [ { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" } ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" + "PCRE", + "preg", + "regex", + "regular expression" ], "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.0" }, "funding": [ { - "url": "https://www.doctrine-project.org/sponsorship.html", + "url": "https://packagist.com", "type": "custom" }, { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" + "url": "https://github.com/composer", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], - "time": "2022-12-14T08:49:07+00:00" + "time": "2022-11-17T09:50:14+00:00" }, { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.17.0", + "name": "composer/semver", + "version": "3.3.2", "source": { "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "3f0ed862f22386c55a767461ef5083bddceeed79" + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3f0ed862f22386c55a767461ef5083bddceeed79", - "reference": "3f0ed862f22386c55a767461ef5083bddceeed79", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", "shasum": "" }, "require": { - "composer/semver": "^3.3", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^2", - "doctrine/lexer": "^2 || ^3", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0 || ^5.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" + "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", "autoload": { "psr-4": { - "PhpCsFixer\\": "src/" + "Composer\\Semver\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -4040,178 +4112,150 @@ ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" }, { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" } ], - "description": "A tool to automatically fix PHP code style", + "description": "Semver library that offers utilities, version constraint parsing and validation.", "keywords": [ - "Static code analysis", - "fixer", - "standards", - "static analysis" + "semantic", + "semver", + "validation", + "versioning" ], "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.17.0" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" }, "funding": [ { - "url": "https://github.com/keradus", + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" } ], - "time": "2023-05-22T19:59:32+00:00" + "time": "2022-04-01T19:23:25+00:00" }, { - "name": "php-parallel-lint/php-parallel-lint", - "version": "v1.3.2", + "name": "composer/xdebug-handler", + "version": "3.0.3", "source": { "type": "git", - "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de" + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de", - "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "ext-json": "*", - "php": ">=5.3.0" - }, - "replace": { - "grogy/php-parallel-lint": "*", - "jakub-onderka/php-parallel-lint": "*" + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" }, "require-dev": { - "nette/tester": "^1.3 || ^2.0", - "php-parallel-lint/php-console-highlighter": "0.* || ^1.0", - "squizlabs/php_codesniffer": "^3.6" - }, - "suggest": { - "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" }, - "bin": [ - "parallel-lint" - ], "type": "library", "autoload": { - "classmap": [ - "./src/" - ] + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-2-Clause" + "MIT" ], "authors": [ { - "name": "Jakub Onderka", - "email": "ahoj@jakubonderka.cz" + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" } ], - "description": "This tool check syntax of PHP files about 20x faster than serial check.", - "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", - "support": { - "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", - "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2" - }, - "time": "2022-02-21T12:50:22+00:00" - }, - { - "name": "phpstan/phpstan", - "version": "1.10.18", - "source": { - "type": "git", - "url": "https://github.com/phpstan/phpstan.git", - "reference": "52b6416c579663eebdd2f1d97df21971daf3b43f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/52b6416c579663eebdd2f1d97df21971daf3b43f", - "reference": "52b6416c579663eebdd2f1d97df21971daf3b43f", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0" - }, - "conflict": { - "phpstan/phpstan-shim": "*" - }, - "bin": [ - "phpstan", - "phpstan.phar" - ], - "type": "library", - "autoload": { - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "PHPStan - PHP Static Analysis Tool", + "description": "Restarts a process without Xdebug.", "keywords": [ - "dev", - "static analysis" + "Xdebug", + "performance" ], "support": { - "docs": "https://phpstan.org/user-guide/getting-started", - "forum": "https://github.com/phpstan/phpstan/discussions", - "issues": "https://github.com/phpstan/phpstan/issues", - "security": "https://github.com/phpstan/phpstan/security/policy", - "source": "https://github.com/phpstan/phpstan-src" + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { - "url": "https://github.com/ondrejmirtes", - "type": "github" + "url": "https://packagist.com", + "type": "custom" }, { - "url": "https://github.com/phpstan", + "url": "https://github.com/composer", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", + "url": "https://tidelift.com/funding/github/packagist/composer/composer", "type": "tidelift" } ], - "time": "2023-06-07T22:00:43+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { - "name": "psr/event-dispatcher", - "version": "1.0.0", + "name": "doctrine/annotations", + "version": "2.0.1", "source": { "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + "url": "https://github.com/doctrine/annotations.git", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", "shasum": "" }, "require": { - "php": ">=7.2.0" + "doctrine/lexer": "^2 || ^3", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } + "require-dev": { + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" }, + "type": "library", "autoload": { "psr-4": { - "Psr\\EventDispatcher\\": "src/" + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" } }, "notification-url": "https://packagist.org/downloads/", @@ -4220,145 +4264,222 @@ ], "authors": [ { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", "keywords": [ - "events", - "psr", - "psr-14" + "annotations", + "docblock", + "parser" ], "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/2.0.1" }, - "time": "2019-01-08T18:20:26+00:00" + "time": "2023-02-02T22:02:53+00:00" }, { - "name": "sebastian/diff", - "version": "4.0.5", + "name": "doctrine/deprecations", + "version": "v1.0.0", "source": { "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", "shasum": "" }, "require": { - "php": ">=7.3" + "php": "^7.1|^8.0" }, "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" } }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" + }, + { + "name": "doctrine/lexer", + "version": "2.1.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "shasum": "" + }, + "require": { + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^4.11 || ^5.0" + }, + "type": "library", "autoload": { - "classmap": [ - "src/" - ] + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" }, { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" } ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" + "annotations", + "docblock", + "lexer", + "parser", + "php" ], "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/2.1.0" }, "funding": [ { - "url": "https://github.com/sebastianbergmann", - "type": "github" + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2022-12-14T08:49:07+00:00" }, { - "name": "symfony/console", - "version": "v5.4.24", + "name": "friendsofphp/php-cs-fixer", + "version": "v3.16.0", "source": { "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "560fc3ed7a43e6d30ea94a07d77f9a60b8ed0fb8" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "d40f9436e1c448d309fa995ab9c14c5c7a96f2dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/560fc3ed7a43e6d30ea94a07d77f9a60b8ed0fb8", - "reference": "560fc3ed7a43e6d30ea94a07d77f9a60b8ed0fb8", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/d40f9436e1c448d309fa995ab9c14c5c7a96f2dc", + "reference": "d40f9436e1c448d309fa995ab9c14c5c7a96f2dc", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" - }, - "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0" + "composer/semver": "^3.3", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^2", + "doctrine/lexer": "^2 || ^3", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "sebastian/diff": "^4.0 || ^5.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.16", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", + "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." }, - "type": "library", + "bin": [ + "php-cs-fixer" + ], + "type": "application", "autoload": { "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] + "PhpCsFixer\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4370,156 +4491,174 @@ "email": "fabien@symfony.com" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" } ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", + "description": "A tool to automatically fix PHP code style", "keywords": [ - "cli", - "command-line", - "console", - "terminal" + "Static code analysis", + "fixer", + "standards", + "static analysis" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.24" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.16.0" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/keradus", "type": "github" - }, + } + ], + "time": "2023-04-02T19:30:06+00:00" + }, + { + "name": "php-parallel-lint/php-parallel-lint", + "version": "v1.3.2", + "source": { + "type": "git", + "url": "https://github.com/php-parallel-lint/PHP-Parallel-Lint.git", + "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-parallel-lint/PHP-Parallel-Lint/zipball/6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "reference": "6483c9832e71973ed29cf71bd6b3f4fde438a9de", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": ">=5.3.0" + }, + "replace": { + "grogy/php-parallel-lint": "*", + "jakub-onderka/php-parallel-lint": "*" + }, + "require-dev": { + "nette/tester": "^1.3 || ^2.0", + "php-parallel-lint/php-console-highlighter": "0.* || ^1.0", + "squizlabs/php_codesniffer": "^3.6" + }, + "suggest": { + "php-parallel-lint/php-console-highlighter": "Highlight syntax in code snippet" + }, + "bin": [ + "parallel-lint" + ], + "type": "library", + "autoload": { + "classmap": [ + "./src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "name": "Jakub Onderka", + "email": "ahoj@jakubonderka.cz" } ], - "time": "2023-05-26T05:13:16+00:00" + "description": "This tool check syntax of PHP files about 20x faster than serial check.", + "homepage": "https://github.com/php-parallel-lint/PHP-Parallel-Lint", + "support": { + "issues": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/issues", + "source": "https://github.com/php-parallel-lint/PHP-Parallel-Lint/tree/v1.3.2" + }, + "time": "2022-02-21T12:50:22+00:00" }, { - "name": "symfony/event-dispatcher", - "version": "v5.4.22", + "name": "phpstan/phpstan", + "version": "1.10.11", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "1df20e45d56da29a4b1d8259dd6e950acbf1b13f" + "url": "https://github.com/phpstan/phpstan.git", + "reference": "8aa62e6ea8b58ffb650e02940e55a788cbc3fe21" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1df20e45d56da29a4b1d8259dd6e950acbf1b13f", - "reference": "1df20e45d56da29a4b1d8259dd6e950acbf1b13f", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/8aa62e6ea8b58ffb650e02940e55a788cbc3fe21", + "reference": "8aa62e6ea8b58ffb650e02940e55a788cbc3fe21", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/event-dispatcher-contracts": "^2|^3", - "symfony/polyfill-php80": "^1.16" + "php": "^7.2|^8.0" }, "conflict": { - "symfony/dependency-injection": "<4.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^4.4|^5.0|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" + "phpstan/phpstan-shim": "*" }, + "bin": [ + "phpstan", + "phpstan.phar" + ], "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "files": [ + "bootstrap.php" ] }, "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": "PHPStan - PHP Static Analysis Tool", + "keywords": [ + "dev", + "static analysis" ], - "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", - "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.22" + "docs": "https://phpstan.org/user-guide/getting-started", + "forum": "https://github.com/phpstan/phpstan/discussions", + "issues": "https://github.com/phpstan/phpstan/issues", + "security": "https://github.com/phpstan/phpstan/security/policy", + "source": "https://github.com/phpstan/phpstan-src" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/ondrejmirtes", + "type": "github" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/phpstan", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan", "type": "tidelift" } ], - "time": "2023-03-17T11:31:58+00:00" + "time": "2023-04-04T19:17:42+00:00" }, { - "name": "symfony/event-dispatcher-contracts", - "version": "v2.5.2", + "name": "psr/event-dispatcher", + "version": "1.0.0", "source": { "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", - "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" + "php": ">=7.2.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "dev-master": "1.0.x-dev" } }, "autoload": { "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" + "Psr\\EventDispatcher\\": "src/" } }, "notification-url": "https://packagist.org/downloads/", @@ -4528,148 +4667,133 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" } ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", + "description": "Standard interfaces for event handling.", "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" + "events", + "psr", + "psr-14" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.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": "2022-01-02T09:53:40+00:00" + "time": "2019-01-08T18:20:26+00:00" }, { - "name": "symfony/filesystem", - "version": "v5.4.23", + "name": "sebastian/diff", + "version": "4.0.4", "source": { "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5" + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5", - "reference": "b2f79d86cd9e7de0fff6d03baa80eaed7a5f38b5", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8", - "symfony/polyfill-php80": "^1.16" + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "BSD-3-Clause" ], "authors": [ { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" } ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], "support": { - "source": "https://github.com/symfony/filesystem/tree/v5.4.23" + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", + "url": "https://github.com/sebastianbergmann", "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" } ], - "time": "2023-03-02T11:38:35+00:00" + "time": "2020-10-26T13:10:38+00:00" }, { - "name": "symfony/phpunit-bridge", - "version": "v6.3.0", + "name": "symfony/event-dispatcher", + "version": "v5.4.22", "source": { "type": "git", - "url": "https://github.com/symfony/phpunit-bridge.git", - "reference": "f8d75b4d9bf7243979b2c2e5e6cd73f03e10579f" + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "1df20e45d56da29a4b1d8259dd6e950acbf1b13f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/f8d75b4d9bf7243979b2c2e5e6cd73f03e10579f", - "reference": "f8d75b4d9bf7243979b2c2e5e6cd73f03e10579f", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/1df20e45d56da29a4b1d8259dd6e950acbf1b13f", + "reference": "1df20e45d56da29a4b1d8259dd6e950acbf1b13f", "shasum": "" }, "require": { - "php": ">=7.1.3" + "php": ">=7.2.5", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/event-dispatcher-contracts": "^2|^3", + "symfony/polyfill-php80": "^1.16" }, "conflict": { - "phpunit/phpunit": "<7.5|9.1.2" + "symfony/dependency-injection": "<4.4" }, - "require-dev": { - "symfony/deprecation-contracts": "^2.5|^3.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/polyfill-php81": "^1.27" + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0" }, - "bin": [ - "bin/simple-phpunit" - ], - "type": "symfony-bridge", - "extra": { - "thanks": { - "name": "phpunit/phpunit", - "url": "https://github.com/sebastianbergmann/phpunit" - } + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^4.4|^5.0|^6.0", + "symfony/dependency-injection": "^4.4|^5.0|^6.0", + "symfony/error-handler": "^4.4|^5.0|^6.0", + "symfony/expression-language": "^4.4|^5.0|^6.0", + "symfony/http-foundation": "^4.4|^5.0|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^4.4|^5.0|^6.0" }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Bridge\\PhpUnit\\": "" + "Symfony\\Component\\EventDispatcher\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -4681,18 +4805,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Provides utilities for PHPUnit, especially user deprecation notices management", + "description": "Provides tools that allow your application components to communicate with each other by dispatching events and listening to them", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/phpunit-bridge/tree/v6.3.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v5.4.22" }, "funding": [ { @@ -4708,47 +4832,42 @@ "type": "tidelift" } ], - "time": "2023-05-30T09:01:24+00:00" + "time": "2023-03-17T11:31:58+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.27.0", + "name": "symfony/event-dispatcher-contracts", + "version": "v2.5.2", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/f98b54df6ad059855739db6fcbc2d36995283fe1", + "reference": "f98b54df6ad059855739db6fcbc2d36995283fe1", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" + "php": ">=7.2.5", + "psr/event-dispatcher": "^1" }, "suggest": { - "ext-ctype": "For best performance" + "symfony/event-dispatcher-implementation": "" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.27-dev" + "dev-main": "2.5-dev" }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" } }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Symfony\\Contracts\\EventDispatcher\\": "" } }, "notification-url": "https://packagist.org/downloads/", @@ -4757,24 +4876,26 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Nicolas Grekas", + "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Generic abstractions related to dispatching event", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v2.5.2" }, "funding": [ { @@ -4790,45 +4911,36 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2022-01-02T09:53:40+00:00" }, { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", + "name": "symfony/filesystem", + "version": "v5.4.21", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + "url": "https://github.com/symfony/filesystem.git", + "reference": "e75960b1bbfd2b8c9e483e0d74811d555ca3de9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e75960b1bbfd2b8c9e483e0d74811d555ca3de9f", + "reference": "e75960b1bbfd2b8c9e483e0d74811d555ca3de9f", "shasum": "" }, "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" + "php": ">=7.2.5", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8", + "symfony/polyfill-php80": "^1.16" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { - "files": [ - "bootstrap.php" - ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4836,26 +4948,18 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's grapheme_* functions", + "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + "source": "https://github.com/symfony/filesystem/tree/v5.4.21" }, "funding": [ { @@ -4871,36 +4975,43 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-02-14T08:03:56+00:00" }, { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", + "name": "symfony/phpunit-bridge", + "version": "v6.2.7", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + "url": "https://github.com/symfony/phpunit-bridge.git", + "reference": "56965fae0b6b8d271015990eff5240ffff02e185" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "url": "https://api.github.com/repos/symfony/phpunit-bridge/zipball/56965fae0b6b8d271015990eff5240ffff02e185", + "reference": "56965fae0b6b8d271015990eff5240ffff02e185", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1.3" + }, + "conflict": { + "phpunit/phpunit": "<7.5|9.1.2" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3.0", + "symfony/error-handler": "^5.4|^6.0" }, "suggest": { - "ext-intl": "For best performance" + "symfony/error-handler": "For tracking deprecated interfaces usages at runtime with DebugClassLoader" }, - "type": "library", + "bin": [ + "bin/simple-phpunit" + ], + "type": "symfony-bridge", "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "name": "phpunit/phpunit", + "url": "https://github.com/sebastianbergmann/phpunit" } }, "autoload": { @@ -4908,10 +5019,10 @@ "bootstrap.php" ], "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + "Symfony\\Bridge\\PhpUnit\\": "" }, - "classmap": [ - "Resources/stubs" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -4928,18 +5039,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", + "description": "Provides utilities for PHPUnit, especially user deprecation notices management", "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + "source": "https://github.com/symfony/phpunit-bridge/tree/v6.2.7" }, "funding": [ { @@ -4955,7 +5058,7 @@ "type": "tidelift" } ], - "time": "2022-11-03T14:55:06+00:00" + "time": "2023-02-16T09:57:23+00:00" }, { "name": "symfony/polyfill-php81", @@ -5038,16 +5141,16 @@ }, { "name": "symfony/process", - "version": "v5.4.24", + "version": "v5.4.22", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "e3c46cc5689c8782944274bb30702106ecbe3b64" + "reference": "4b850da0cc3a2a9181c1ed407adbca4733dc839b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/e3c46cc5689c8782944274bb30702106ecbe3b64", - "reference": "e3c46cc5689c8782944274bb30702106ecbe3b64", + "url": "https://api.github.com/repos/symfony/process/zipball/4b850da0cc3a2a9181c1ed407adbca4733dc839b", + "reference": "4b850da0cc3a2a9181c1ed407adbca4733dc839b", "shasum": "" }, "require": { @@ -5080,7 +5183,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.24" + "source": "https://github.com/symfony/process/tree/v5.4.22" }, "funding": [ { @@ -5096,7 +5199,7 @@ "type": "tidelift" } ], - "time": "2023-05-17T11:26:05+00:00" + "time": "2023-03-06T21:29:33+00:00" }, { "name": "symfony/stopwatch", @@ -5159,92 +5262,6 @@ } ], "time": "2023-02-14T08:03:56+00:00" - }, - { - "name": "symfony/string", - "version": "v5.4.22", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "8036a4c76c0dd29e60b6a7cafcacc50cf088ea62" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/8036a4c76c0dd29e60b6a7cafcacc50cf088ea62", - "reference": "8036a4c76c0dd29e60b6a7cafcacc50cf088ea62", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "~1.15" - }, - "conflict": { - "symfony/translation-contracts": ">=3.0" - }, - "require-dev": { - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/http-client": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2", - "symfony/var-exporter": "^4.4|^5.0|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v5.4.22" - }, - "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": "2023-03-14T06:11:53+00:00" } ], "aliases": [], diff --git a/src/Commands/Database/ExportCommand.php b/src/Commands/Database/ExportCommand.php new file mode 100644 index 0000000000..b867844a44 --- /dev/null +++ b/src/Commands/Database/ExportCommand.php @@ -0,0 +1,64 @@ + +// SPDX-License-Identifier: GPL-3.0-or-later + +declare(strict_types=1); + +namespace Commands\Database; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ExportCommand extends Command { + protected static $defaultName = 'db:export'; + protected static $defaultDescription = 'Exports the database contents into a JSON file.'; + + /** @var \daos\DatabaseInterface database object to create the tables */ + private $database; + + /** @var \daos\Items */ + private $items; + + /** @var \daos\Sources */ + private $sources; + + /** @var \daos\Tags */ + private $tags; + + public function __construct( + \daos\DatabaseInterface $database, + \daos\Items $items, + \daos\Sources $sources, + \daos\Tags $tags + ) { + $this->database = $database; + $this->items = $items; + $this->sources = $sources; + $this->tags = $tags; + + parent::__construct(); + } + + /** + * @return void + */ + protected function configure() { + $this->addArgument('path', InputArgument::REQUIRED, 'Path to file to export the database to.'); + } + + protected function execute(InputInterface $input, OutputInterface $output): int { + $data = [ + 'schemaVersion' => $this->database->getSchemaVersion(), + 'tags' => $this->tags->getRaw(), + 'sources' => $this->sources->getRaw(), + 'items' => $this->items->getRaw(), + ]; + + file_put_contents($input->getArgument('path'), json_encode($data)); + + return self::SUCCESS; + } +} diff --git a/src/Commands/Database/ImportCommand.php b/src/Commands/Database/ImportCommand.php new file mode 100644 index 0000000000..9be7bf6cfe --- /dev/null +++ b/src/Commands/Database/ImportCommand.php @@ -0,0 +1,69 @@ + +// SPDX-License-Identifier: GPL-3.0-or-later + +declare(strict_types=1); + +namespace Commands\Database; + +use Symfony\Component\Console\Command\Command; +use Symfony\Component\Console\Input\InputArgument; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class ImportCommand extends Command { + protected static $defaultName = 'db:import'; + protected static $defaultDescription = 'Imports the database contents from a JSON file.'; + + /** @var \daos\DatabaseInterface database object to create the tables */ + private $database; + + /** @var \daos\Items */ + private $items; + + /** @var \daos\Sources */ + private $sources; + + /** @var \daos\Tags */ + private $tags; + + public function __construct( + \daos\DatabaseInterface $database, + \daos\Items $items, + \daos\Sources $sources, + \daos\Tags $tags + ) { + $this->database = $database; + $this->items = $items; + $this->sources = $sources; + $this->tags = $tags; + + parent::__construct(); + } + + /** + * @return void + */ + protected function configure() { + $this->addArgument('path', InputArgument::REQUIRED, 'Path to file to import the database from.'); + } + + protected function execute(InputInterface $input, OutputInterface $output) { + $data = file_get_contents($input->getArgument('path')); + assert($data !== false); + $data = json_decode($data, true, 512, JSON_THROW_ON_ERROR); + + $currentDbSchemaVersion = $this->database->getSchemaVersion(); + + if ($data['schemaVersion'] !== $currentDbSchemaVersion) { + $output->writeln('The database schema version of the current selfoss installation does not match the installation the data was exported from, which may cause issues. For best compatibility, upgrade ' . ($data['schemaVersion'] < $currentDbSchemaVersion ? 'the source selfoss' : 'this selfoss') . ' installation before importing.'); + } + + $this->tags->insertRaw($data['tags']); + $this->sources->insertRaw($data['sources']); + $this->items->insertRaw($data['items']); + + return self::SUCCESS; + } +} diff --git a/src/daos/CommonSqlDatabase.php b/src/daos/CommonSqlDatabase.php index 4eb77eae40..ce87d2644c 100644 --- a/src/daos/CommonSqlDatabase.php +++ b/src/daos/CommonSqlDatabase.php @@ -60,4 +60,24 @@ public function getSchemaVersion(): int { return (int) $version[0]['version']; } + + /** + * Insert raw table data into given table. + * + * @param string $table target database table + * @param string[] $fields column names + * @param array $data rows to insert + */ + public function insertRaw(string $table, array $fields, array $data): void { + $fieldsSql = implode(', ', $fields); + $valuesSql = implode(', ', array_map(function($field) { + return ":$field"; + }, $fields)); + $values = []; + foreach ($fields as $field) { + $values[":$field"] = $data[$field]; + } + + $this->exec("insert into $table($fieldsSql) values($valuesSql)", $values); + } } diff --git a/src/daos/DatabaseInterface.php b/src/daos/DatabaseInterface.php index aeba90a37f..639747d0a3 100644 --- a/src/daos/DatabaseInterface.php +++ b/src/daos/DatabaseInterface.php @@ -40,6 +40,15 @@ public function exec(string $cmd, array $args = []): array; */ public function insert(string $query, array $params): int; + /** + * Insert raw table data into given table. + * + * @param string $table target database table + * @param string[] $fields column names + * @param array $data rows to insert + */ + public function insertRaw(string $table, array $fields, array $data): void; + /** * Quote string * diff --git a/src/daos/Items.php b/src/daos/Items.php index 533174d73f..0412dcb2fe 100644 --- a/src/daos/Items.php +++ b/src/daos/Items.php @@ -154,4 +154,12 @@ public function statuses(DateTime $since): array { public function bulkStatusUpdate(array $statuses): void { $this->backend->bulkStatusUpdate($statuses); } + + public function getRaw(): array { + return $this->backend->getRaw(); + } + + public function insertRaw(array $items): void { + $this->backend->insertRaw($items); + } } diff --git a/src/daos/ItemsInterface.php b/src/daos/ItemsInterface.php index 816ada0817..5217478e26 100644 --- a/src/daos/ItemsInterface.php +++ b/src/daos/ItemsInterface.php @@ -183,4 +183,18 @@ public function statuses(DateTime $since): array; * @param array $statuses array of statuses updates */ public function bulkStatusUpdate(array $statuses): void; + + /** + * returns raw items table contents + * + * @return array of all items + */ + public function getRaw(): array; + + /** + * inserts raw data into items table + * + * @param array $items + */ + public function insertRaw(array $items): void; } diff --git a/src/daos/Sources.php b/src/daos/Sources.php index c334e58cc1..90fecf283c 100644 --- a/src/daos/Sources.php +++ b/src/daos/Sources.php @@ -200,4 +200,15 @@ public function validate(string $title, string $spout, array $params) { return true; } + + public function getRaw(): array { + /** @var array */ + $sources = $this->backend->getRaw(); + + return $sources; + } + + public function insertRaw(array $items): void { + $this->backend->insertRaw($items); + } } diff --git a/src/daos/SourcesInterface.php b/src/daos/SourcesInterface.php index 6f37ec992f..f09bce86a1 100644 --- a/src/daos/SourcesInterface.php +++ b/src/daos/SourcesInterface.php @@ -115,4 +115,18 @@ public function getTags(int $id): array; * @return int id if any record is found */ public function checkIfExists(string $title, string $spout, array $params): int; + + /** + * returns raw sources table contents + * + * @return array of all sources + */ + public function getRaw(): array; + + /** + * inserts raw data into sources table + * + * @param array $sources + */ + public function insertRaw(array $sources): void; } diff --git a/src/daos/Tags.php b/src/daos/Tags.php index c72efb57b3..8b3b29fc82 100644 --- a/src/daos/Tags.php +++ b/src/daos/Tags.php @@ -64,4 +64,12 @@ public function hasTag(string $tag): bool { public function delete(string $tag): void { $this->backend->delete($tag); } + + public function getRaw(): array { + return $this->backend->getRaw(); + } + + public function insertRaw(array $items): void { + $this->backend->insertRaw($items); + } } diff --git a/src/daos/TagsInterface.php b/src/daos/TagsInterface.php index 19b13344a8..96efe222ff 100644 --- a/src/daos/TagsInterface.php +++ b/src/daos/TagsInterface.php @@ -50,4 +50,18 @@ public function hasTag(string $tag): bool; * delete tag */ public function delete(string $tag): void; + + /** + * returns raw tags table contents + * + * @return array of all tags + */ + public function getRaw(): array; + + /** + * inserts raw data into tags table + * + * @param array $tags + */ + public function insertRaw(array $tags): void; } diff --git a/src/daos/mysql/Items.php b/src/daos/mysql/Items.php index f8b3e4d687..d6aba1b2d3 100644 --- a/src/daos/mysql/Items.php +++ b/src/daos/mysql/Items.php @@ -685,4 +685,42 @@ public function bulkStatusUpdate(array $statuses): void { $this->database->commit(); } } + + public function getRaw(): array { + $stmt = static::$stmt; + $items = $this->database->exec('SELECT * FROM ' . $this->configuration->dbPrefix . 'items'); + + /** @var array */ + $items = array_map(function($row) { + // Use ISO 8601 as export format. + $row['datetime'] = $row['datetime']->format(\DateTimeInterface::ATOM); + $row['updatetime'] = $row['updatetime']->format(\DateTimeInterface::ATOM); + $row['lastseen'] = $row['lastseen']->format(\DateTimeInterface::ATOM); + + return $row; + }, $stmt::ensureRowTypes($items, [ + 'id' => DatabaseInterface::PARAM_INT, + 'datetime' => DatabaseInterface::PARAM_DATETIME, + 'unread' => DatabaseInterface::PARAM_BOOL, + 'starred' => DatabaseInterface::PARAM_BOOL, + 'source' => DatabaseInterface::PARAM_INT, + 'updatetime' => DatabaseInterface::PARAM_DATETIME, + 'shared' => DatabaseInterface::PARAM_INT, + 'lastseen' => DatabaseInterface::PARAM_DATETIME, + ])); + + return $items; + } + + public function insertRaw(array $items): void { + $stmt = static::$stmt; + foreach ($items as $item) { + // Use ISO 8601 as export format. + $item['datetime'] = $stmt::datetime(\DateTime::createFromFormat(\DateTimeInterface::ATOM, $item['datetime'])); + $item['updatetime'] = $stmt::datetime(\DateTime::createFromFormat(\DateTimeInterface::ATOM, $item['updatetime'])); + $item['lastseen'] = $stmt::datetime(\DateTime::createFromFormat(\DateTimeInterface::ATOM, $item['lastseen'])); + + $this->database->insertRaw($this->configuration->dbPrefix . 'items', ['id', 'datetime', 'title', 'content', 'thumbnail', 'icon', 'unread', 'starred', 'source', 'uid', 'link', 'updatetime', 'author', 'shared', 'lastseen'], $item); + } + } } diff --git a/src/daos/mysql/Sources.php b/src/daos/mysql/Sources.php index 6897e5f48d..5845733fe7 100644 --- a/src/daos/mysql/Sources.php +++ b/src/daos/mysql/Sources.php @@ -311,4 +311,44 @@ public function checkIfExists(string $title, string $spout, array $params): int return 0; } + + public function getRaw(): array { + $stmt = static::$stmt; + $sources = $this->database->exec('SELECT * FROM ' . $this->configuration->dbPrefix . 'sources'); + + return array_map(function($row) { + // Stored as UNIX timestamp, use ISO 8601 as export format. + $row['lastentry'] = (new \DateTime('@' . $row['lastentry']))->format(\DateTimeInterface::ATOM); + $row['lastupdate'] = (new \DateTime('@' . $row['lastupdate']))->format(\DateTimeInterface::ATOM); + + return $row; + }, $stmt::ensureRowTypes($sources, [ + 'id' => DatabaseInterface::PARAM_INT, + 'tags' => DatabaseInterface::PARAM_CSV, + 'lastupdate' => DatabaseInterface::PARAM_INT, + 'lastentry' => DatabaseInterface::PARAM_INT, + ])); + } + + public function insertRaw(array $sources): void { + $stmt = static::$stmt; + foreach ($sources as $source) { + // Stored as UNIX timestamp, use ISO 8601 as export format. + $lastentry = \DateTime::createFromFormat(\DateTimeInterface::ATOM, $source['lastentry']); + if ($lastentry === false) { + throw new Exception("Last entry time in unsupported format: {$source['lastentry']}”"); + } + + $lastupdate = \DateTime::createFromFormat(\DateTimeInterface::ATOM, $source['lastupdate']); + if ($lastupdate === false) { + throw new Exception("Last update time in unsupported format: {$source['lastupdate']}”"); + } + + $source['lastentry'] = $lastentry->getTimestamp(); + $source['lastupdate'] = $lastupdate->getTimestamp(); + $source['tags'] = $stmt::csvRow($source['tags']); + + $this->database->insertRaw($this->configuration->dbPrefix . 'sources', ['id', 'title', 'tags', 'filter', 'spout', 'params', 'error', 'lastupdate', 'lastentry'], $source); + } + } } diff --git a/src/daos/mysql/Tags.php b/src/daos/mysql/Tags.php index ca6c995f15..128806e658 100644 --- a/src/daos/mysql/Tags.php +++ b/src/daos/mysql/Tags.php @@ -144,4 +144,17 @@ public function hasTag(string $tag): bool { public function delete(string $tag): void { $this->database->exec('DELETE FROM ' . $this->configuration->dbPrefix . 'tags WHERE tag=:tag', [':tag' => $tag]); } + + public function getRaw(): array { + /** @var array */ + $tags = $this->database->exec('SELECT * FROM ' . $this->configuration->dbPrefix . 'tags'); + + return $tags; + } + + public function insertRaw(array $tags): void { + foreach ($tags as $tag) { + $this->database->insertRaw($this->configuration->dbPrefix . 'tags', ['tag', 'color'], $tag); + } + } } From cfd7ce90d23197ea0e171b9070a8ff62b55e37df Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Fri, 26 Nov 2021 02:52:56 +0100 Subject: [PATCH 2/3] Fix running out of memory --- composer.json | 3 +++ src/Commands/Database/ExportCommand.php | 4 +++- src/daos/mysql/Items.php | 5 +++-- src/daos/mysql/Sources.php | 3 ++- src/helpers/Functions.php | 22 ++++++++++++++++++++++ 5 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 src/helpers/Functions.php diff --git a/composer.json b/composer.json index 3cdc41682a..622ec9c6f0 100644 --- a/composer.json +++ b/composer.json @@ -43,6 +43,9 @@ } ], "autoload": { + "files": [ + "src/helpers/Functions.php" + ], "psr-4": { "Commands\\": "src/Commands/", "controllers\\": "src/controllers/", diff --git a/src/Commands/Database/ExportCommand.php b/src/Commands/Database/ExportCommand.php index b867844a44..0a2b6d8604 100644 --- a/src/Commands/Database/ExportCommand.php +++ b/src/Commands/Database/ExportCommand.php @@ -57,7 +57,9 @@ protected function execute(InputInterface $input, OutputInterface $output): int 'items' => $this->items->getRaw(), ]; - file_put_contents($input->getArgument('path'), json_encode($data)); + $encoder = new \Violet\StreamingJsonEncoder\BufferJsonEncoder($data); + $stream = new \Violet\StreamingJsonEncoder\JsonStream($encoder); + file_put_contents($input->getArgument('path'), $stream); return self::SUCCESS; } diff --git a/src/daos/mysql/Items.php b/src/daos/mysql/Items.php index d6aba1b2d3..b9603363b0 100644 --- a/src/daos/mysql/Items.php +++ b/src/daos/mysql/Items.php @@ -9,6 +9,7 @@ use DateTime; use DateTimeImmutable; use helpers\Configuration; +use function helpers\functions\map; use helpers\HtmlString; use Monolog\Logger; @@ -690,8 +691,8 @@ public function getRaw(): array { $stmt = static::$stmt; $items = $this->database->exec('SELECT * FROM ' . $this->configuration->dbPrefix . 'items'); - /** @var array */ - $items = array_map(function($row) { + /** @var iterable */ + $items = map(function($row) { // Use ISO 8601 as export format. $row['datetime'] = $row['datetime']->format(\DateTimeInterface::ATOM); $row['updatetime'] = $row['updatetime']->format(\DateTimeInterface::ATOM); diff --git a/src/daos/mysql/Sources.php b/src/daos/mysql/Sources.php index 5845733fe7..95470ee45e 100644 --- a/src/daos/mysql/Sources.php +++ b/src/daos/mysql/Sources.php @@ -7,6 +7,7 @@ use daos\DatabaseInterface; use Exception; use helpers\Configuration; +use function helpers\Functions\map; use function json_encode; use const JSON_ERROR_NONE; use function json_last_error; @@ -316,7 +317,7 @@ public function getRaw(): array { $stmt = static::$stmt; $sources = $this->database->exec('SELECT * FROM ' . $this->configuration->dbPrefix . 'sources'); - return array_map(function($row) { + return map(function($row) { // Stored as UNIX timestamp, use ISO 8601 as export format. $row['lastentry'] = (new \DateTime('@' . $row['lastentry']))->format(\DateTimeInterface::ATOM); $row['lastupdate'] = (new \DateTime('@' . $row['lastupdate']))->format(\DateTimeInterface::ATOM); diff --git a/src/helpers/Functions.php b/src/helpers/Functions.php new file mode 100644 index 0000000000..a6cea6fb21 --- /dev/null +++ b/src/helpers/Functions.php @@ -0,0 +1,22 @@ + $collection + * + * @return Generator + */ +function map(callable $function, iterable $collection): Generator { + foreach ($collection as $item) { + yield $function($item); + } +} From acafe64d00dce463267e6a0bbe41d99523b9e734 Mon Sep 17 00:00:00 2001 From: Jan Tojnar Date: Sat, 14 May 2022 08:20:18 +0200 Subject: [PATCH 3/3] Use generators for database access This will make it possible to GC memory when working with huge number of items. --- src/daos/Items.php | 2 +- src/daos/ItemsInterface.php | 4 ++-- src/daos/Sources.php | 4 ++-- src/daos/SourcesInterface.php | 4 ++-- src/daos/StatementsInterface.php | 9 ++++----- src/daos/mysql/Items.php | 8 ++++---- src/daos/mysql/Sources.php | 2 +- src/daos/mysql/Statements.php | 17 ++++++++--------- src/daos/pgsql/Statements.php | 17 ++++++++--------- 9 files changed, 32 insertions(+), 35 deletions(-) diff --git a/src/daos/Items.php b/src/daos/Items.php index 0412dcb2fe..2f60170fa6 100644 --- a/src/daos/Items.php +++ b/src/daos/Items.php @@ -155,7 +155,7 @@ public function bulkStatusUpdate(array $statuses): void { $this->backend->bulkStatusUpdate($statuses); } - public function getRaw(): array { + public function getRaw(): iterable { return $this->backend->getRaw(); } diff --git a/src/daos/ItemsInterface.php b/src/daos/ItemsInterface.php index 5217478e26..1dd8a04f5a 100644 --- a/src/daos/ItemsInterface.php +++ b/src/daos/ItemsInterface.php @@ -187,9 +187,9 @@ public function bulkStatusUpdate(array $statuses): void; /** * returns raw items table contents * - * @return array of all items + * @return iterable of all items */ - public function getRaw(): array; + public function getRaw(): iterable; /** * inserts raw data into items table diff --git a/src/daos/Sources.php b/src/daos/Sources.php index 90fecf283c..9a206956f9 100644 --- a/src/daos/Sources.php +++ b/src/daos/Sources.php @@ -201,8 +201,8 @@ public function validate(string $title, string $spout, array $params) { return true; } - public function getRaw(): array { - /** @var array */ + public function getRaw(): iterable { + /** @var iterable */ $sources = $this->backend->getRaw(); return $sources; diff --git a/src/daos/SourcesInterface.php b/src/daos/SourcesInterface.php index f09bce86a1..8f33c0b1e8 100644 --- a/src/daos/SourcesInterface.php +++ b/src/daos/SourcesInterface.php @@ -119,9 +119,9 @@ public function checkIfExists(string $title, string $spout, array $params): int; /** * returns raw sources table contents * - * @return array of all sources + * @return iterable of all sources */ - public function getRaw(): array; + public function getRaw(): iterable; /** * inserts raw data into sources table diff --git a/src/daos/StatementsInterface.php b/src/daos/StatementsInterface.php index ce045ab906..396beef6a1 100644 --- a/src/daos/StatementsInterface.php +++ b/src/daos/StatementsInterface.php @@ -100,16 +100,15 @@ public static function bool(bool $bool): string; public static function datetime(\DateTime $date): string; /** - * Ensure row values have the appropriate PHP type. This assumes we are - * using buffered queries (sql results are in PHP memory);. + * Ensure row values have the appropriate PHP type. * - * @param array> $rows array of associative array representing row results + * @param iterable> $rows array of associative array representing row results * @param array $expectedRowTypes associative array mapping columns to PDO types * - * @return array> of associative array representing row results having + * @return iterable> of associative array representing row results having * expected types */ - public static function ensureRowTypes(array $rows, array $expectedRowTypes): array; + public static function ensureRowTypes(iterable $rows, array $expectedRowTypes): iterable; /** * convert string array to string for storage in table row diff --git a/src/daos/mysql/Items.php b/src/daos/mysql/Items.php index b9603363b0..bb23d7b0ea 100644 --- a/src/daos/mysql/Items.php +++ b/src/daos/mysql/Items.php @@ -418,7 +418,7 @@ public function sync(int $sinceId, DateTime $notBefore, DateTime $since, int $ho * @return int lowest id of interest */ public function lowestIdOfInterest(): int { - $lowest = static::$stmt::ensureRowTypes( + $lowests = static::$stmt::ensureRowTypes( $this->database->exec( 'SELECT id FROM ' . $this->configuration->dbPrefix . 'items AS items WHERE ' . static::$stmt::isTrue('unread') . @@ -427,8 +427,8 @@ public function lowestIdOfInterest(): int { ), ['id' => DatabaseInterface::PARAM_INT] ); - if ($lowest) { - return $lowest[0]['id']; + foreach ($lowests as $lowest) { + return $lowest['id']; } return 0; @@ -687,7 +687,7 @@ public function bulkStatusUpdate(array $statuses): void { } } - public function getRaw(): array { + public function getRaw(): iterable { $stmt = static::$stmt; $items = $this->database->exec('SELECT * FROM ' . $this->configuration->dbPrefix . 'items'); diff --git a/src/daos/mysql/Sources.php b/src/daos/mysql/Sources.php index 95470ee45e..92f7589991 100644 --- a/src/daos/mysql/Sources.php +++ b/src/daos/mysql/Sources.php @@ -313,7 +313,7 @@ public function checkIfExists(string $title, string $spout, array $params): int return 0; } - public function getRaw(): array { + public function getRaw(): iterable { $stmt = static::$stmt; $sources = $this->database->exec('SELECT * FROM ' . $this->configuration->dbPrefix . 'sources'); diff --git a/src/daos/mysql/Statements.php b/src/daos/mysql/Statements.php index 6503dc97e8..8b21bce8cf 100644 --- a/src/daos/mysql/Statements.php +++ b/src/daos/mysql/Statements.php @@ -138,17 +138,16 @@ public static function datetime(\DateTime $date): string { } /** - * Ensure row values have the appropriate PHP type. This assumes we are - * using buffered queries (sql results are in PHP memory). + * Ensure row values have the appropriate PHP type. * - * @param array> $rows array of associative array representing row results + * @param iterable> $rows array of associative array representing row results * @param array $expectedRowTypes associative array mapping columns to PDO types * - * @return array> of associative array representing row results having + * @return iterable> of associative array representing row results having * expected types */ - public static function ensureRowTypes(array $rows, array $expectedRowTypes): array { - foreach ($rows as $rowIndex => $row) { + public static function ensureRowTypes(iterable $rows, array $expectedRowTypes): iterable { + foreach ($rows as $row) { foreach ($expectedRowTypes as $columnIndex => $type) { if (array_key_exists($columnIndex, $row)) { if ($type & DatabaseInterface::PARAM_NULL) { @@ -185,13 +184,13 @@ public static function ensureRowTypes(array $rows, array $expectedRowTypes): arr $value = null; } if ($value !== null) { - $rows[$rowIndex][$columnIndex] = $value; + $row[$columnIndex] = $value; } } } - } - return $rows; + yield $row; + } } /** diff --git a/src/daos/pgsql/Statements.php b/src/daos/pgsql/Statements.php index 2f44c36f33..936a952c76 100644 --- a/src/daos/pgsql/Statements.php +++ b/src/daos/pgsql/Statements.php @@ -74,17 +74,16 @@ public static function csvRowMatches(string $column, string $value): string { } /** - * Ensure row values have the appropriate PHP type. This assumes we are - * using buffered queries (sql results are in PHP memory). + * Ensure row values have the appropriate PHP type. * - * @param array> $rows array of associative array representing row results + * @param iterable> $rows array of associative array representing row results * @param array $expectedRowTypes associative array mapping columns to PDO types * - * @return array> of associative array representing row results having + * @return iterable> of associative array representing row results having * expected types */ - public static function ensureRowTypes(array $rows, array $expectedRowTypes): array { - foreach ($rows as $rowIndex => $row) { + public static function ensureRowTypes(iterable $rows, array $expectedRowTypes): iterable { + foreach ($rows as $row) { foreach ($expectedRowTypes as $columnIndex => $type) { if (array_key_exists($columnIndex, $row)) { if ($type & DatabaseInterface::PARAM_NULL) { @@ -110,13 +109,13 @@ public static function ensureRowTypes(array $rows, array $expectedRowTypes): arr $value = null; } if ($value !== null) { - $rows[$rowIndex][$columnIndex] = $value; + $row[$columnIndex] = $value; } } } - } - return $rows; + yield $row; + } } /**