mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-22 13:12:41 +00:00
Merge branch 'master' into rpm
This commit is contained in:
commit
70b70b8af9
28 changed files with 1423 additions and 1024 deletions
|
@ -1,3 +1,9 @@
|
|||
Version 0.10.1 (2022-01-17)
|
||||
===========================
|
||||
|
||||
Changes:
|
||||
- Support PHP 8.1
|
||||
|
||||
Version 0.10.0 (2021-07-11)
|
||||
===========================
|
||||
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
<?php
|
||||
|
||||
use Robo\Collection\CollectionBuilder;
|
||||
use Robo\Result;
|
||||
|
||||
const BASE = __DIR__.\DIRECTORY_SEPARATOR;
|
||||
|
@ -166,7 +165,7 @@ class RoboFile extends \Robo\Tasks {
|
|||
(IS_WIN && (!exec(escapeshellarg($bin)." --help $blackhole", $junk, $status) || $status))
|
||||
|| (!IS_WIN && (!exec("which ".escapeshellarg($bin)." $blackhole", $junk, $status) || $status))
|
||||
) {
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -13,7 +13,7 @@ require_once BASE."vendor".DIRECTORY_SEPARATOR."autoload.php";
|
|||
ignore_user_abort(true);
|
||||
ini_set("memory_limit", "-1");
|
||||
ini_set("max_execution_time", "0");
|
||||
// FIXME: This is required by a dependency of Picofeed
|
||||
// FIXME: This is required because various dependencies have yet to adjust to PHP 8.1
|
||||
error_reporting(\E_ALL & ~\E_DEPRECATED);
|
||||
|
||||
if (\PHP_SAPI === "cli") {
|
||||
|
|
|
@ -40,6 +40,9 @@
|
|||
"config": {
|
||||
"platform": {
|
||||
"php": "7.1.33"
|
||||
},
|
||||
"allow-plugins": {
|
||||
"bamarni/composer-bin-plugin": true
|
||||
}
|
||||
},
|
||||
"scripts": {
|
||||
|
|
112
composer.lock
generated
112
composer.lock
generated
|
@ -129,16 +129,16 @@
|
|||
},
|
||||
{
|
||||
"name": "guzzlehttp/promises",
|
||||
"version": "1.4.1",
|
||||
"version": "1.5.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/promises.git",
|
||||
"reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d"
|
||||
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d",
|
||||
"reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d",
|
||||
"url": "https://api.github.com/repos/guzzle/promises/zipball/fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
|
||||
"reference": "fe752aedc9fd8fcca3fe7ad05d419d32998a06da",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -150,7 +150,7 @@
|
|||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.4-dev"
|
||||
"dev-master": "1.5-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -166,10 +166,25 @@
|
|||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
},
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "mtdowling@gmail.com",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Nyholm",
|
||||
"email": "tobias.nyholm@gmail.com",
|
||||
"homepage": "https://github.com/Nyholm"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Schultze",
|
||||
"email": "webmaster@tubo-world.de",
|
||||
"homepage": "https://github.com/Tobion"
|
||||
}
|
||||
],
|
||||
"description": "Guzzle promises library",
|
||||
|
@ -178,22 +193,36 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/promises/issues",
|
||||
"source": "https://github.com/guzzle/promises/tree/1.4.1"
|
||||
"source": "https://github.com/guzzle/promises/tree/1.5.1"
|
||||
},
|
||||
"time": "2021-03-07T09:25:29+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/Nyholm",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-10-22T20:56:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "guzzlehttp/psr7",
|
||||
"version": "1.8.2",
|
||||
"version": "1.8.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/guzzle/psr7.git",
|
||||
"reference": "dc960a912984efb74d0a90222870c72c87f10c91"
|
||||
"reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/dc960a912984efb74d0a90222870c72c87f10c91",
|
||||
"reference": "dc960a912984efb74d0a90222870c72c87f10c91",
|
||||
"url": "https://api.github.com/repos/guzzle/psr7/zipball/1afdd860a2566ed3c2b0b4a3de6e23434a79ec85",
|
||||
"reference": "1afdd860a2566ed3c2b0b4a3de6e23434a79ec85",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -230,13 +259,34 @@
|
|||
"MIT"
|
||||
],
|
||||
"authors": [
|
||||
{
|
||||
"name": "Graham Campbell",
|
||||
"email": "hello@gjcampbell.co.uk",
|
||||
"homepage": "https://github.com/GrahamCampbell"
|
||||
},
|
||||
{
|
||||
"name": "Michael Dowling",
|
||||
"email": "mtdowling@gmail.com",
|
||||
"homepage": "https://github.com/mtdowling"
|
||||
},
|
||||
{
|
||||
"name": "George Mponos",
|
||||
"email": "gmponos@gmail.com",
|
||||
"homepage": "https://github.com/gmponos"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Nyholm",
|
||||
"email": "tobias.nyholm@gmail.com",
|
||||
"homepage": "https://github.com/Nyholm"
|
||||
},
|
||||
{
|
||||
"name": "Márk Sági-Kazár",
|
||||
"email": "mark.sagikazar@gmail.com",
|
||||
"homepage": "https://github.com/sagikazarmark"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Schultze",
|
||||
"email": "webmaster@tubo-world.de",
|
||||
"homepage": "https://github.com/Tobion"
|
||||
}
|
||||
],
|
||||
|
@ -253,9 +303,23 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/guzzle/psr7/issues",
|
||||
"source": "https://github.com/guzzle/psr7/tree/1.8.2"
|
||||
"source": "https://github.com/guzzle/psr7/tree/1.8.3"
|
||||
},
|
||||
"time": "2021-04-26T09:17:50+00:00"
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/GrahamCampbell",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/Nyholm",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-10-05T13:56:00+00:00"
|
||||
},
|
||||
{
|
||||
"name": "hosteurope/password-generator",
|
||||
|
@ -1045,16 +1109,16 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-idn",
|
||||
"version": "v1.23.0",
|
||||
"version": "v1.24.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-idn.git",
|
||||
"reference": "65bd267525e82759e7d8c4e8ceea44f398838e65"
|
||||
"reference": "749045c69efb97c70d25d7463abba812e91f3a44"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65",
|
||||
"reference": "65bd267525e82759e7d8c4e8ceea44f398838e65",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/749045c69efb97c70d25d7463abba812e91f3a44",
|
||||
"reference": "749045c69efb97c70d25d7463abba812e91f3a44",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1112,7 +1176,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.24.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1128,11 +1192,11 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-05-27T09:27:20+00:00"
|
||||
"time": "2021-09-14T14:02:44+00:00"
|
||||
},
|
||||
{
|
||||
"name": "symfony/polyfill-intl-normalizer",
|
||||
"version": "v1.23.0",
|
||||
"version": "v1.24.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-intl-normalizer.git",
|
||||
|
@ -1196,7 +1260,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.23.0"
|
||||
"source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1216,7 +1280,7 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-php72",
|
||||
"version": "v1.23.0",
|
||||
"version": "v1.24.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-php72.git",
|
||||
|
@ -1272,7 +1336,7 @@
|
|||
"shim"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0"
|
||||
"source": "https://github.com/symfony/polyfill-php72/tree/v1.24.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1360,5 +1424,5 @@
|
|||
"platform-overrides": {
|
||||
"php": "7.1.33"
|
||||
},
|
||||
"plugin-api-version": "2.1.0"
|
||||
"plugin-api-version": "2.2.0"
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ declare(strict_types=1);
|
|||
namespace JKingWeb\Arsse;
|
||||
|
||||
class Arsse {
|
||||
public const VERSION = "0.10.0";
|
||||
public const VERSION = "0.10.1";
|
||||
public const REQUIRED_EXTENSIONS = [
|
||||
"intl", // as this extension is required to prepare formatted messages, its absence will throw a distinct English-only exception
|
||||
"dom",
|
||||
|
|
|
@ -163,6 +163,8 @@ class Driver extends \JKingWeb\Arsse\Db\AbstractDriver {
|
|||
}
|
||||
|
||||
protected function makeConnection(string $db, string $user, string $password, string $host, int $port, string $socket): void {
|
||||
$drv = new \mysqli_driver;
|
||||
$drv->report_mode = \MYSQLI_REPORT_OFF;
|
||||
$this->db = mysqli_init();
|
||||
$this->db->options(\MYSQLI_SET_CHARSET_NAME, "utf8mb4");
|
||||
$this->db->options(\MYSQLI_OPT_INT_AND_FLOAT_NATIVE, false);
|
||||
|
|
|
@ -28,7 +28,8 @@ class PDODriver extends Driver {
|
|||
]);
|
||||
try {
|
||||
$this->db = new \PDO($dsn, $user, $password, [
|
||||
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
|
||||
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
|
||||
\PDO::ATTR_STRINGIFY_FETCHES => true,
|
||||
]);
|
||||
} catch (\PDOException $e) {
|
||||
$msg = $e->getMessage();
|
||||
|
|
|
@ -211,7 +211,7 @@ class Driver extends \JKingWeb\Arsse\Db\AbstractDriver {
|
|||
|
||||
public function query(string $query): \JKingWeb\Arsse\Db\Result {
|
||||
$r = $this->dispatchQuery($query);
|
||||
if (is_resource($r)) {
|
||||
if (is_resource($r) || $r instanceof \PgSql\Result) { //class since PHP 8.1
|
||||
return new Result($this->db, $r);
|
||||
} else {
|
||||
[$excClass, $excMsg, $excData] = $r;
|
||||
|
|
|
@ -35,7 +35,7 @@ class Statement extends \JKingWeb\Arsse\Db\AbstractStatement {
|
|||
$this->bindValues($values);
|
||||
$r = $this->dispatchQuery($this->qMunged, $this->in);
|
||||
$this->in = [];
|
||||
if (is_resource($r)) {
|
||||
if (is_resource($r) || $r instanceof \PgSql\Result) { //class since PHP 8.1
|
||||
return new Result($this->db, $r);
|
||||
} else {
|
||||
[$excClass, $excMsg, $excData] = $r;
|
||||
|
|
|
@ -7,10 +7,15 @@ declare(strict_types=1);
|
|||
namespace JKingWeb\Arsse\Db;
|
||||
|
||||
interface Result extends \Iterator {
|
||||
#[\ReturnTypeWillChange]
|
||||
public function current();
|
||||
#[\ReturnTypeWillChange]
|
||||
public function key();
|
||||
#[\ReturnTypeWillChange]
|
||||
public function next();
|
||||
#[\ReturnTypeWillChange]
|
||||
public function rewind();
|
||||
#[\ReturnTypeWillChange]
|
||||
public function valid();
|
||||
|
||||
public function getRow();
|
||||
|
|
|
@ -18,7 +18,8 @@ class PDODriver extends AbstractPDODriver {
|
|||
|
||||
protected function makeConnection(string $file, string $key): void {
|
||||
$this->db = new \PDO("sqlite:".$file, "", "", [
|
||||
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
|
||||
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
|
||||
\PDO::ATTR_STRINGIFY_FETCHES => true,
|
||||
]);
|
||||
}
|
||||
|
||||
|
|
|
@ -12,9 +12,7 @@ const DOCROOT = BASE."tests".DIRECTORY_SEPARATOR."docroot".DIRECTORY_SEPARATOR;
|
|||
ini_set("memory_limit", "-1");
|
||||
ini_set("zend.assertions", "1");
|
||||
ini_set("assert.exception", "true");
|
||||
// FIXME: Workaround for a bug in PCRE2 10.37
|
||||
ini_set("pcre.jit", "0");
|
||||
// FIXME: This is required by a dependency of Picofeed
|
||||
// FIXME: This is required because various dependencies have yet to adjust to PHP 8.1
|
||||
error_reporting(\E_ALL & ~\E_DEPRECATED);
|
||||
require_once BASE."vendor".DIRECTORY_SEPARATOR."autoload.php";
|
||||
|
||||
|
|
|
@ -7,9 +7,10 @@ declare(strict_types=1);
|
|||
namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
||||
|
||||
use JKingWeb\Arsse\Arsse;
|
||||
use JKingWeb\Arsse\Db\Driver;
|
||||
|
||||
trait MySQL {
|
||||
use MySQLCommon;
|
||||
|
||||
protected static $implementation = "MySQL";
|
||||
protected static $backend = "MySQL";
|
||||
protected static $dbResultClass = \JKingWeb\Arsse\Db\MySQL\Result::class;
|
||||
|
@ -21,6 +22,8 @@ trait MySQL {
|
|||
if (!class_exists("mysqli")) {
|
||||
return null;
|
||||
}
|
||||
$drv = new \mysqli_driver;
|
||||
$drv->report_mode = \MYSQLI_REPORT_OFF;
|
||||
$d = mysqli_init();
|
||||
$d->options(\MYSQLI_OPT_INT_AND_FLOAT_NATIVE, false);
|
||||
$d->options(\MYSQLI_SET_CHARSET_NAME, "utf8mb4");
|
||||
|
@ -34,54 +37,4 @@ trait MySQL {
|
|||
}
|
||||
return $d;
|
||||
}
|
||||
|
||||
public static function dbTableList($db): array {
|
||||
$listTables = "SELECT table_name as name from information_schema.tables where table_schema = database() and table_name like 'arsse_%'";
|
||||
if ($db instanceof Driver) {
|
||||
$tables = $db->query($listTables)->getAll();
|
||||
} elseif ($db instanceof \PDO) {
|
||||
$tables = $db->query($listTables)->fetchAll(\PDO::FETCH_ASSOC);
|
||||
} else {
|
||||
$tables = $db->query($listTables)->fetch_all(\MYSQLI_ASSOC);
|
||||
}
|
||||
$tables = sizeof($tables) ? array_column($tables, "name") : [];
|
||||
return $tables;
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
$db->query("UNLOCK TABLES; ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
$db->query("SET FOREIGN_KEY_CHECKS=0");
|
||||
foreach (self::dbTableList($db) as $table) {
|
||||
if ($table === "arsse_meta") {
|
||||
$db->query("DELETE FROM $table where `key` <> 'schema_version'");
|
||||
} else {
|
||||
$db->query("DELETE FROM $table");
|
||||
}
|
||||
$db->query("ALTER TABLE $table auto_increment = 1");
|
||||
}
|
||||
$db->query("SET FOREIGN_KEY_CHECKS=1");
|
||||
foreach ($afterStatements as $st) {
|
||||
$db->query($st);
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
$db->query("UNLOCK TABLES; ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
$db->query("SET FOREIGN_KEY_CHECKS=0");
|
||||
foreach (self::dbTableList($db) as $table) {
|
||||
$db->query("DROP TABLE IF EXISTS $table");
|
||||
}
|
||||
$db->query("SET FOREIGN_KEY_CHECKS=1");
|
||||
foreach ($afterStatements as $st) {
|
||||
$db->query($st);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
60
tests/lib/DatabaseDrivers/MySQLCommon.php
Normal file
60
tests/lib/DatabaseDrivers/MySQLCommon.php
Normal file
|
@ -0,0 +1,60 @@
|
|||
<?php
|
||||
/** @license MIT
|
||||
* Copyright 2017 J. King, Dustin Wilson et al.
|
||||
* See LICENSE and AUTHORS files for details */
|
||||
|
||||
declare(strict_types=1);
|
||||
namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
||||
|
||||
use JKingWeb\Arsse\Db\Driver;
|
||||
|
||||
trait MySQLCommon {
|
||||
public static function dbTableList($db): array {
|
||||
$listTables = "SELECT table_name as name from information_schema.tables where table_schema = database() and table_name like 'arsse_%'";
|
||||
if ($db instanceof Driver) {
|
||||
$tables = $db->query($listTables)->getAll();
|
||||
} elseif ($db instanceof \PDO) {
|
||||
$tables = $db->query($listTables)->fetchAll(\PDO::FETCH_ASSOC);
|
||||
} else {
|
||||
$tables = $db->query($listTables)->fetch_all(\MYSQLI_ASSOC);
|
||||
}
|
||||
$tables = sizeof($tables) ? array_column($tables, "name") : [];
|
||||
return $tables;
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
$db->query("UNLOCK TABLES; ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
$db->query("SET FOREIGN_KEY_CHECKS=0");
|
||||
foreach (self::dbTableList($db) as $table) {
|
||||
if ($table === "arsse_meta") {
|
||||
$db->query("DELETE FROM $table where `key` <> 'schema_version'");
|
||||
} else {
|
||||
$db->query("TRUNCATE TABLE $table");
|
||||
}
|
||||
}
|
||||
foreach ($afterStatements as $st) {
|
||||
$db->query($st);
|
||||
}
|
||||
$db->query("SET FOREIGN_KEY_CHECKS=1");
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
$db->query("UNLOCK TABLES; ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
$db->query("SET FOREIGN_KEY_CHECKS=0");
|
||||
foreach (self::dbTableList($db) as $table) {
|
||||
$db->query("DROP TABLE IF EXISTS $table");
|
||||
}
|
||||
foreach ($afterStatements as $st) {
|
||||
$db->query($st);
|
||||
}
|
||||
$db->query("SET FOREIGN_KEY_CHECKS=1");
|
||||
}
|
||||
}
|
|
@ -9,6 +9,8 @@ namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
|||
use JKingWeb\Arsse\Arsse;
|
||||
|
||||
trait MySQLPDO {
|
||||
use MySQLCommon;
|
||||
|
||||
protected static $implementation = "PDO MySQL";
|
||||
protected static $backend = "MySQL";
|
||||
protected static $dbResultClass = \JKingWeb\Arsse\Db\PDOResult::class;
|
||||
|
@ -31,6 +33,7 @@ trait MySQLPDO {
|
|||
$dsn = "mysql:".implode(";", $dsn);
|
||||
$d = new \PDO($dsn, Arsse::$conf->dbMySQLUser, Arsse::$conf->dbMySQLPass, [
|
||||
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
|
||||
\PDO::ATTR_STRINGIFY_FETCHES => true,
|
||||
\PDO::MYSQL_ATTR_MULTI_STATEMENTS => false,
|
||||
]);
|
||||
foreach (\JKingWeb\Arsse\Db\MySQL\PDODriver::makeSetupQueries() as $q) {
|
||||
|
@ -41,16 +44,4 @@ trait MySQLPDO {
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbTableList($db): array {
|
||||
return MySQL::dbTableList($db);
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
MySQL::dbTruncate($db, $afterStatements);
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
MySQL::dbRaze($db, $afterStatements);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,9 +7,10 @@ declare(strict_types=1);
|
|||
namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
||||
|
||||
use JKingWeb\Arsse\Arsse;
|
||||
use JKingWeb\Arsse\Db\Driver;
|
||||
|
||||
trait PostgreSQL {
|
||||
use PostgreSQLCommon;
|
||||
|
||||
protected static $implementation = "PostgreSQL";
|
||||
protected static $backend = "PostgreSQL";
|
||||
protected static $dbResultClass = \JKingWeb\Arsse\Db\PostgreSQL\Result::class;
|
||||
|
@ -28,61 +29,4 @@ trait PostgreSQL {
|
|||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbExec($db, $q): void {
|
||||
if ($db instanceof Driver) {
|
||||
$db->exec($q);
|
||||
} elseif ($db instanceof \PDO) {
|
||||
$db->exec($q);
|
||||
} else {
|
||||
pg_query($db, $q);
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbTableList($db): array {
|
||||
$listObjects = "SELECT table_name as name, 'TABLE' as type from information_schema.tables where table_schema = current_schema() and table_name like 'arsse_%' union SELECT collation_name as name, 'COLLATION' as type from information_schema.collations where collation_schema = current_schema()";
|
||||
if ($db instanceof Driver) {
|
||||
return $db->query($listObjects)->getAll();
|
||||
} elseif ($db instanceof \PDO) {
|
||||
return $db->query($listObjects)->fetchAll(\PDO::FETCH_ASSOC);
|
||||
} else {
|
||||
$r = @pg_query($db, $listObjects);
|
||||
$out = $r ? pg_fetch_all($r) : false;
|
||||
return $out ? $out : [];
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
@self::dbExec($db, "ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
foreach (self::dbTableList($db) as $obj) {
|
||||
if ($obj['type'] !== "TABLE") {
|
||||
continue;
|
||||
} elseif ($obj['name'] === "arsse_meta") {
|
||||
self::dbExec($db, "DELETE FROM {$obj['name']} where key <> 'schema_version'");
|
||||
} else {
|
||||
self::dbExec($db, "TRUNCATE TABLE {$obj['name']} restart identity cascade");
|
||||
}
|
||||
}
|
||||
foreach ($afterStatements as $st) {
|
||||
self::dbExec($db, $st);
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
@self::dbExec($db, "ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
foreach (self::dbTableList($db) as $obj) {
|
||||
self::dbExec($db, "DROP {$obj['type']} IF EXISTS {$obj['name']} cascade");
|
||||
}
|
||||
foreach ($afterStatements as $st) {
|
||||
self::dbExec($db, $st);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
68
tests/lib/DatabaseDrivers/PostgreSQLCommon.php
Normal file
68
tests/lib/DatabaseDrivers/PostgreSQLCommon.php
Normal file
|
@ -0,0 +1,68 @@
|
|||
<?php
|
||||
/** @license MIT
|
||||
* Copyright 2017 J. King, Dustin Wilson et al.
|
||||
* See LICENSE and AUTHORS files for details */
|
||||
|
||||
declare(strict_types=1);
|
||||
namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
||||
|
||||
use JKingWeb\Arsse\Db\Driver;
|
||||
|
||||
trait PostgreSQLCommon {
|
||||
public static function dbExec($db, $q): void {
|
||||
if ($db instanceof Driver) {
|
||||
$db->exec($q);
|
||||
} elseif ($db instanceof \PDO) {
|
||||
$db->exec($q);
|
||||
} else {
|
||||
pg_query($db, $q);
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbTableList($db): array {
|
||||
$listObjects = "SELECT table_name as name, 'TABLE' as type from information_schema.tables where table_schema = current_schema() and table_name like 'arsse_%' union SELECT collation_name as name, 'COLLATION' as type from information_schema.collations where collation_schema = current_schema()";
|
||||
if ($db instanceof Driver) {
|
||||
return $db->query($listObjects)->getAll();
|
||||
} elseif ($db instanceof \PDO) {
|
||||
return $db->query($listObjects)->fetchAll(\PDO::FETCH_ASSOC);
|
||||
} else {
|
||||
$r = @pg_query($db, $listObjects);
|
||||
$out = $r ? pg_fetch_all($r) : false;
|
||||
return $out ? $out : [];
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
@self::dbExec($db, "ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
foreach (self::dbTableList($db) as $obj) {
|
||||
if ($obj['type'] !== "TABLE") {
|
||||
continue;
|
||||
} elseif ($obj['name'] === "arsse_meta") {
|
||||
self::dbExec($db, "DELETE FROM {$obj['name']} where key <> 'schema_version'");
|
||||
} else {
|
||||
self::dbExec($db, "TRUNCATE TABLE {$obj['name']} restart identity cascade");
|
||||
}
|
||||
}
|
||||
foreach ($afterStatements as $st) {
|
||||
self::dbExec($db, $st);
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
@self::dbExec($db, "ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
foreach (self::dbTableList($db) as $obj) {
|
||||
self::dbExec($db, "DROP {$obj['type']} IF EXISTS {$obj['name']} cascade");
|
||||
}
|
||||
foreach ($afterStatements as $st) {
|
||||
self::dbExec($db, $st);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -9,6 +9,8 @@ namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
|||
use JKingWeb\Arsse\Arsse;
|
||||
|
||||
trait PostgreSQLPDO {
|
||||
use PostgreSQLCommon;
|
||||
|
||||
protected static $implementation = "PDO PostgreSQL";
|
||||
protected static $backend = "PostgreSQL";
|
||||
protected static $dbResultClass = \JKingWeb\Arsse\Db\PostgreSQL\PDOResult::class;
|
||||
|
@ -28,16 +30,4 @@ trait PostgreSQLPDO {
|
|||
}
|
||||
return $d;
|
||||
}
|
||||
|
||||
public static function dbTableList($db): array {
|
||||
return PostgreSQL::dbTableList($db);
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
PostgreSQL::dbTruncate($db, $afterStatements);
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
PostgreSQL::dbRaze($db, $afterStatements);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,9 +7,10 @@ declare(strict_types=1);
|
|||
namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
||||
|
||||
use JKingWeb\Arsse\Arsse;
|
||||
use JKingWeb\Arsse\Db\Driver;
|
||||
|
||||
trait SQLite3 {
|
||||
use SQLite3Common;
|
||||
|
||||
protected static $implementation = "SQLite 3";
|
||||
protected static $backend = "SQLite 3";
|
||||
protected static $dbResultClass = \JKingWeb\Arsse\Db\SQLite3\Result::class;
|
||||
|
@ -26,63 +27,4 @@ trait SQLite3 {
|
|||
$d->enableExceptions(true);
|
||||
return $d;
|
||||
}
|
||||
|
||||
public static function dbTableList($db): array {
|
||||
$listTables = "SELECT name from sqlite_master where type = 'table' and name like 'arsse^_%' escape '^'";
|
||||
if ($db instanceof Driver) {
|
||||
$tables = $db->query($listTables)->getAll();
|
||||
$tables = sizeof($tables) ? array_column($tables, "name") : [];
|
||||
} elseif ($db instanceof \PDO) {
|
||||
retry:
|
||||
try {
|
||||
$tables = $db->query($listTables)->fetchAll(\PDO::FETCH_ASSOC);
|
||||
} catch (\PDOException $e) {
|
||||
goto retry;
|
||||
}
|
||||
$tables = sizeof($tables) ? array_column($tables, "name") : [];
|
||||
} else {
|
||||
$tables = [];
|
||||
$result = $db->query($listTables);
|
||||
while ($r = $result->fetchArray(\SQLITE3_ASSOC)) {
|
||||
$tables[] = $r['name'];
|
||||
}
|
||||
$result->finalize();
|
||||
}
|
||||
return $tables;
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
$db->exec("ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
foreach (self::dbTableList($db) as $table) {
|
||||
if ($table === "arsse_meta") {
|
||||
$db->exec("DELETE FROM $table where key <> 'schema_version'");
|
||||
} else {
|
||||
$db->exec("DELETE FROM $table");
|
||||
}
|
||||
}
|
||||
foreach ($afterStatements as $st) {
|
||||
$db->exec($st);
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
$db->exec("ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
$db->exec("PRAGMA foreign_keys=0");
|
||||
foreach (self::dbTableList($db) as $table) {
|
||||
$db->exec("DROP TABLE IF EXISTS $table");
|
||||
}
|
||||
$db->exec("PRAGMA user_version=0");
|
||||
$db->exec("PRAGMA foreign_keys=1");
|
||||
foreach ($afterStatements as $st) {
|
||||
$db->exec($st);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
70
tests/lib/DatabaseDrivers/SQLite3Common.php
Normal file
70
tests/lib/DatabaseDrivers/SQLite3Common.php
Normal file
|
@ -0,0 +1,70 @@
|
|||
<?php
|
||||
/** @license MIT
|
||||
* Copyright 2017 J. King, Dustin Wilson et al.
|
||||
* See LICENSE and AUTHORS files for details */
|
||||
|
||||
declare(strict_types=1);
|
||||
namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
||||
|
||||
use JKingWeb\Arsse\Db\Driver;
|
||||
|
||||
trait SQLite3Common {
|
||||
public static function dbTableList($db): array {
|
||||
$listTables = "SELECT name from sqlite_master where type = 'table' and name like 'arsse^_%' escape '^'";
|
||||
if ($db instanceof Driver) {
|
||||
$tables = $db->query($listTables)->getAll();
|
||||
$tables = sizeof($tables) ? array_column($tables, "name") : [];
|
||||
} elseif ($db instanceof \PDO) {
|
||||
retry:
|
||||
try {
|
||||
$tables = $db->query($listTables)->fetchAll(\PDO::FETCH_ASSOC);
|
||||
} catch (\PDOException $e) {
|
||||
goto retry;
|
||||
}
|
||||
$tables = sizeof($tables) ? array_column($tables, "name") : [];
|
||||
} else {
|
||||
$tables = [];
|
||||
$result = $db->query($listTables);
|
||||
while ($r = $result->fetchArray(\SQLITE3_ASSOC)) {
|
||||
$tables[] = $r['name'];
|
||||
}
|
||||
$result->finalize();
|
||||
}
|
||||
return $tables;
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
$db->exec("ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
foreach (self::dbTableList($db) as $table) {
|
||||
if ($table === "arsse_meta") {
|
||||
$db->exec("DELETE FROM $table where key <> 'schema_version'");
|
||||
} else {
|
||||
$db->exec("DELETE FROM $table");
|
||||
}
|
||||
}
|
||||
foreach ($afterStatements as $st) {
|
||||
$db->exec($st);
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
// rollback any pending transaction
|
||||
try {
|
||||
$db->exec("ROLLBACK");
|
||||
} catch (\Throwable $e) {
|
||||
}
|
||||
$db->exec("PRAGMA foreign_keys=0");
|
||||
foreach (self::dbTableList($db) as $table) {
|
||||
$db->exec("DROP TABLE IF EXISTS $table");
|
||||
}
|
||||
$db->exec("PRAGMA user_version=0");
|
||||
$db->exec("PRAGMA foreign_keys=1");
|
||||
foreach ($afterStatements as $st) {
|
||||
$db->exec($st);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -9,6 +9,8 @@ namespace JKingWeb\Arsse\Test\DatabaseDrivers;
|
|||
use JKingWeb\Arsse\Arsse;
|
||||
|
||||
trait SQLite3PDO {
|
||||
use SQLite3Common;
|
||||
|
||||
protected static $implementation = "PDO SQLite 3";
|
||||
protected static $backend = "SQLite 3";
|
||||
protected static $dbResultClass = \JKingWeb\Arsse\Db\PDOResult::class;
|
||||
|
@ -18,23 +20,14 @@ trait SQLite3PDO {
|
|||
|
||||
public static function dbInterface() {
|
||||
try {
|
||||
$d = new \PDO("sqlite:".Arsse::$conf->dbSQLite3File, "", "", [\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION]);
|
||||
$d = new \PDO("sqlite:".Arsse::$conf->dbSQLite3File, "", "", [
|
||||
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
|
||||
\PDO::ATTR_STRINGIFY_FETCHES => true,
|
||||
]);
|
||||
$d->exec("PRAGMA busy_timeout=0");
|
||||
return $d;
|
||||
} catch (\Throwable $e) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
public static function dbTableList($db): array {
|
||||
return SQLite3::dbTableList($db);
|
||||
}
|
||||
|
||||
public static function dbTruncate($db, array $afterStatements = []): void {
|
||||
SQLite3::dbTruncate($db, $afterStatements);
|
||||
}
|
||||
|
||||
public static function dbRaze($db, array $afterStatements = []): void {
|
||||
SQLite3::dbRaze($db, $afterStatements);
|
||||
}
|
||||
}
|
||||
|
|
490
vendor-bin/csfixer/composer.lock
generated
490
vendor-bin/csfixer/composer.lock
generated
File diff suppressed because it is too large
Load diff
478
vendor-bin/daux/composer.lock
generated
478
vendor-bin/daux/composer.lock
generated
File diff suppressed because it is too large
Load diff
5
vendor-bin/phpstan/composer.json
Normal file
5
vendor-bin/phpstan/composer.json
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"require-dev": {
|
||||
"phpstan/phpstan": "^0.12.99"
|
||||
}
|
||||
}
|
83
vendor-bin/phpstan/composer.lock
generated
Normal file
83
vendor-bin/phpstan/composer.lock
generated
Normal file
|
@ -0,0 +1,83 @@
|
|||
{
|
||||
"_readme": [
|
||||
"This file locks the dependencies of your project to a known state",
|
||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||
"This file is @generated automatically"
|
||||
],
|
||||
"content-hash": "b260ae3dc51b5d4100c545bf9e65f543",
|
||||
"packages": [],
|
||||
"packages-dev": [
|
||||
{
|
||||
"name": "phpstan/phpstan",
|
||||
"version": "0.12.99",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpstan/phpstan.git",
|
||||
"reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/b4d40f1d759942f523be267a1bab6884f46ca3f7",
|
||||
"reference": "b4d40f1d759942f523be267a1bab6884f46ca3f7",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": "^7.1|^8.0"
|
||||
},
|
||||
"conflict": {
|
||||
"phpstan/phpstan-shim": "*"
|
||||
},
|
||||
"bin": [
|
||||
"phpstan",
|
||||
"phpstan.phar"
|
||||
],
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "0.12-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
"files": [
|
||||
"bootstrap.php"
|
||||
]
|
||||
},
|
||||
"notification-url": "https://packagist.org/downloads/",
|
||||
"license": [
|
||||
"MIT"
|
||||
],
|
||||
"description": "PHPStan - PHP Static Analysis Tool",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpstan/phpstan/issues",
|
||||
"source": "https://github.com/phpstan/phpstan/tree/0.12.99"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://github.com/ondrejmirtes",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/phpstan",
|
||||
"type": "github"
|
||||
},
|
||||
{
|
||||
"url": "https://www.patreon.com/phpstan",
|
||||
"type": "patreon"
|
||||
},
|
||||
{
|
||||
"url": "https://tidelift.com/funding/github/packagist/phpstan/phpstan",
|
||||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-09-12T20:09:55+00:00"
|
||||
}
|
||||
],
|
||||
"aliases": [],
|
||||
"minimum-stability": "stable",
|
||||
"stability-flags": [],
|
||||
"prefer-stable": false,
|
||||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.2.0"
|
||||
}
|
189
vendor-bin/phpunit/composer.lock
generated
189
vendor-bin/phpunit/composer.lock
generated
|
@ -337,16 +337,16 @@
|
|||
},
|
||||
{
|
||||
"name": "mikey179/vfsstream",
|
||||
"version": "v1.6.8",
|
||||
"version": "v1.6.10",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/bovigo/vfsStream.git",
|
||||
"reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe"
|
||||
"reference": "250c0825537d501e327df879fb3d4cd751933b85"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/bovigo/vfsStream/zipball/231c73783ebb7dd9ec77916c10037eff5a2b6efe",
|
||||
"reference": "231c73783ebb7dd9ec77916c10037eff5a2b6efe",
|
||||
"url": "https://api.github.com/repos/bovigo/vfsStream/zipball/250c0825537d501e327df879fb3d4cd751933b85",
|
||||
"reference": "250c0825537d501e327df879fb3d4cd751933b85",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -384,7 +384,7 @@
|
|||
"source": "https://github.com/bovigo/vfsStream/tree/master",
|
||||
"wiki": "https://github.com/bovigo/vfsStream/wiki"
|
||||
},
|
||||
"time": "2019-10-30T15:31:00+00:00"
|
||||
"time": "2021-09-25T08:05:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "myclabs/deep-copy",
|
||||
|
@ -403,9 +403,6 @@
|
|||
"require": {
|
||||
"php": "^7.1 || ^8.0"
|
||||
},
|
||||
"replace": {
|
||||
"myclabs/deep-copy": "self.version"
|
||||
},
|
||||
"require-dev": {
|
||||
"doctrine/collections": "^1.0",
|
||||
"doctrine/common": "^2.6",
|
||||
|
@ -446,16 +443,16 @@
|
|||
},
|
||||
{
|
||||
"name": "nikic/php-parser",
|
||||
"version": "v4.11.0",
|
||||
"version": "v4.13.2",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/nikic/PHP-Parser.git",
|
||||
"reference": "fe14cf3672a149364fb66dfe11bf6549af899f94"
|
||||
"reference": "210577fe3cf7badcc5814d99455df46564f3c077"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/fe14cf3672a149364fb66dfe11bf6549af899f94",
|
||||
"reference": "fe14cf3672a149364fb66dfe11bf6549af899f94",
|
||||
"url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077",
|
||||
"reference": "210577fe3cf7badcc5814d99455df46564f3c077",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -496,22 +493,22 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/nikic/PHP-Parser/issues",
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.11.0"
|
||||
"source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2"
|
||||
},
|
||||
"time": "2021-07-03T13:36:55+00:00"
|
||||
"time": "2021-11-30T19:35:32+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phar-io/manifest",
|
||||
"version": "2.0.1",
|
||||
"version": "2.0.3",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phar-io/manifest.git",
|
||||
"reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133"
|
||||
"reference": "97803eca37d319dfa7826cc2437fc020857acb53"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phar-io/manifest/zipball/85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
|
||||
"reference": "85265efd3af7ba3ca4b2a2c34dbfc5788dd29133",
|
||||
"url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53",
|
||||
"reference": "97803eca37d319dfa7826cc2437fc020857acb53",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -556,9 +553,9 @@
|
|||
"description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)",
|
||||
"support": {
|
||||
"issues": "https://github.com/phar-io/manifest/issues",
|
||||
"source": "https://github.com/phar-io/manifest/tree/master"
|
||||
"source": "https://github.com/phar-io/manifest/tree/2.0.3"
|
||||
},
|
||||
"time": "2020-06-27T14:33:11+00:00"
|
||||
"time": "2021-07-20T11:28:43+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phar-io/version",
|
||||
|
@ -666,16 +663,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpdocumentor/reflection-docblock",
|
||||
"version": "5.2.2",
|
||||
"version": "5.3.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
|
||||
"reference": "069a785b2141f5bcf49f3e353548dc1cce6df556"
|
||||
"reference": "622548b623e81ca6d78b721c5e029f4ce664f170"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/069a785b2141f5bcf49f3e353548dc1cce6df556",
|
||||
"reference": "069a785b2141f5bcf49f3e353548dc1cce6df556",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170",
|
||||
"reference": "622548b623e81ca6d78b721c5e029f4ce664f170",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -686,7 +683,8 @@
|
|||
"webmozart/assert": "^1.9.1"
|
||||
},
|
||||
"require-dev": {
|
||||
"mockery/mockery": "~1.3.2"
|
||||
"mockery/mockery": "~1.3.2",
|
||||
"psalm/phar": "^4.8"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
|
@ -716,22 +714,22 @@
|
|||
"description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues",
|
||||
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/master"
|
||||
"source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0"
|
||||
},
|
||||
"time": "2020-09-03T19:13:55+00:00"
|
||||
"time": "2021-10-19T17:43:47+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpdocumentor/type-resolver",
|
||||
"version": "1.4.0",
|
||||
"version": "1.6.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpDocumentor/TypeResolver.git",
|
||||
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0"
|
||||
"reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
|
||||
"reference": "6a467b8989322d92aa1c8bf2bebcc6e5c2ba55c0",
|
||||
"url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706",
|
||||
"reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -739,7 +737,8 @@
|
|||
"phpdocumentor/reflection-common": "^2.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"ext-tokenizer": "*"
|
||||
"ext-tokenizer": "*",
|
||||
"psalm/phar": "^4.8"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
|
@ -765,39 +764,39 @@
|
|||
"description": "A PSR-5 based resolver of Class names, Types and Structural Element Names",
|
||||
"support": {
|
||||
"issues": "https://github.com/phpDocumentor/TypeResolver/issues",
|
||||
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.4.0"
|
||||
"source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0"
|
||||
},
|
||||
"time": "2020-09-17T18:55:26+00:00"
|
||||
"time": "2022-01-04T19:58:01+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpspec/prophecy",
|
||||
"version": "1.13.0",
|
||||
"version": "v1.15.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/phpspec/prophecy.git",
|
||||
"reference": "be1996ed8adc35c3fd795488a653f4b518be70ea"
|
||||
"reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/be1996ed8adc35c3fd795488a653f4b518be70ea",
|
||||
"reference": "be1996ed8adc35c3fd795488a653f4b518be70ea",
|
||||
"url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
|
||||
"reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"doctrine/instantiator": "^1.2",
|
||||
"php": "^7.2 || ~8.0, <8.1",
|
||||
"php": "^7.2 || ~8.0, <8.2",
|
||||
"phpdocumentor/reflection-docblock": "^5.2",
|
||||
"sebastian/comparator": "^3.0 || ^4.0",
|
||||
"sebastian/recursion-context": "^3.0 || ^4.0"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpspec/phpspec": "^6.0",
|
||||
"phpspec/phpspec": "^6.0 || ^7.0",
|
||||
"phpunit/phpunit": "^8.0 || ^9.0"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
"branch-alias": {
|
||||
"dev-master": "1.11.x-dev"
|
||||
"dev-master": "1.x-dev"
|
||||
}
|
||||
},
|
||||
"autoload": {
|
||||
|
@ -832,29 +831,29 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/phpspec/prophecy/issues",
|
||||
"source": "https://github.com/phpspec/prophecy/tree/1.13.0"
|
||||
"source": "https://github.com/phpspec/prophecy/tree/v1.15.0"
|
||||
},
|
||||
"time": "2021-03-17T13:42:18+00:00"
|
||||
"time": "2021-12-08T12:19:24+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-code-coverage",
|
||||
"version": "9.2.6",
|
||||
"version": "9.2.10",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
|
||||
"reference": "f6293e1b30a2354e8428e004689671b83871edde"
|
||||
"reference": "d5850aaf931743067f4bfc1ae4cbd06468400687"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f6293e1b30a2354e8428e004689671b83871edde",
|
||||
"reference": "f6293e1b30a2354e8428e004689671b83871edde",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687",
|
||||
"reference": "d5850aaf931743067f4bfc1ae4cbd06468400687",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"ext-dom": "*",
|
||||
"ext-libxml": "*",
|
||||
"ext-xmlwriter": "*",
|
||||
"nikic/php-parser": "^4.10.2",
|
||||
"nikic/php-parser": "^4.13.0",
|
||||
"php": ">=7.3",
|
||||
"phpunit/php-file-iterator": "^3.0.3",
|
||||
"phpunit/php-text-template": "^2.0.2",
|
||||
|
@ -903,7 +902,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.6"
|
||||
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -911,20 +910,20 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-03-28T07:26:59+00:00"
|
||||
"time": "2021-12-05T09:12:13+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-file-iterator",
|
||||
"version": "3.0.5",
|
||||
"version": "3.0.6",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/php-file-iterator.git",
|
||||
"reference": "aa4be8575f26070b100fccb67faabb28f21f66f8"
|
||||
"reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8",
|
||||
"reference": "aa4be8575f26070b100fccb67faabb28f21f66f8",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
|
||||
"reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -963,7 +962,7 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/php-file-iterator/issues",
|
||||
"source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5"
|
||||
"source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -971,7 +970,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-09-28T05:57:25+00:00"
|
||||
"time": "2021-12-02T12:48:52+00:00"
|
||||
},
|
||||
{
|
||||
"name": "phpunit/php-invoker",
|
||||
|
@ -1156,16 +1155,16 @@
|
|||
},
|
||||
{
|
||||
"name": "phpunit/phpunit",
|
||||
"version": "9.5.6",
|
||||
"version": "9.5.11",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/phpunit.git",
|
||||
"reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb"
|
||||
"reference": "2406855036db1102126125537adb1406f7242fdd"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb",
|
||||
"reference": "fb9b8333f14e3dce976a60ef6a7e05c7c7ed8bfb",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2406855036db1102126125537adb1406f7242fdd",
|
||||
"reference": "2406855036db1102126125537adb1406f7242fdd",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1177,11 +1176,11 @@
|
|||
"ext-xml": "*",
|
||||
"ext-xmlwriter": "*",
|
||||
"myclabs/deep-copy": "^1.10.1",
|
||||
"phar-io/manifest": "^2.0.1",
|
||||
"phar-io/manifest": "^2.0.3",
|
||||
"phar-io/version": "^3.0.2",
|
||||
"php": ">=7.3",
|
||||
"phpspec/prophecy": "^1.12.1",
|
||||
"phpunit/php-code-coverage": "^9.2.3",
|
||||
"phpunit/php-code-coverage": "^9.2.7",
|
||||
"phpunit/php-file-iterator": "^3.0.5",
|
||||
"phpunit/php-invoker": "^3.1.1",
|
||||
"phpunit/php-text-template": "^2.0.3",
|
||||
|
@ -1243,11 +1242,11 @@
|
|||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/phpunit/issues",
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.6"
|
||||
"source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.11"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
"url": "https://phpunit.de/donate.html",
|
||||
"url": "https://phpunit.de/sponsors.html",
|
||||
"type": "custom"
|
||||
},
|
||||
{
|
||||
|
@ -1255,7 +1254,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2021-06-23T05:14:38+00:00"
|
||||
"time": "2021-12-25T07:07:57+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/cli-parser",
|
||||
|
@ -1686,16 +1685,16 @@
|
|||
},
|
||||
{
|
||||
"name": "sebastian/exporter",
|
||||
"version": "4.0.3",
|
||||
"version": "4.0.4",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/sebastianbergmann/exporter.git",
|
||||
"reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65"
|
||||
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/d89cc98761b8cb5a1a235a6b703ae50d34080e65",
|
||||
"reference": "d89cc98761b8cb5a1a235a6b703ae50d34080e65",
|
||||
"url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9",
|
||||
"reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -1744,14 +1743,14 @@
|
|||
}
|
||||
],
|
||||
"description": "Provides the functionality to export PHP variables for visualization",
|
||||
"homepage": "http://www.github.com/sebastianbergmann/exporter",
|
||||
"homepage": "https://www.github.com/sebastianbergmann/exporter",
|
||||
"keywords": [
|
||||
"export",
|
||||
"exporter"
|
||||
],
|
||||
"support": {
|
||||
"issues": "https://github.com/sebastianbergmann/exporter/issues",
|
||||
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.3"
|
||||
"source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -1759,7 +1758,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-09-28T05:24:23+00:00"
|
||||
"time": "2021-11-11T14:18:36+00:00"
|
||||
},
|
||||
{
|
||||
"name": "sebastian/global-state",
|
||||
|
@ -2223,21 +2222,24 @@
|
|||
},
|
||||
{
|
||||
"name": "symfony/polyfill-ctype",
|
||||
"version": "v1.23.0",
|
||||
"version": "v1.24.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/symfony/polyfill-ctype.git",
|
||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce"
|
||||
"reference": "30885182c981ab175d4d034db0f6f469898070ab"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
||||
"reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce",
|
||||
"url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab",
|
||||
"reference": "30885182c981ab175d4d034db0f6f469898070ab",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
"php": ">=7.1"
|
||||
},
|
||||
"provide": {
|
||||
"ext-ctype": "*"
|
||||
},
|
||||
"suggest": {
|
||||
"ext-ctype": "For best performance"
|
||||
},
|
||||
|
@ -2282,7 +2284,7 @@
|
|||
"portable"
|
||||
],
|
||||
"support": {
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0"
|
||||
"source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -2298,20 +2300,20 @@
|
|||
"type": "tidelift"
|
||||
}
|
||||
],
|
||||
"time": "2021-02-19T12:13:01+00:00"
|
||||
"time": "2021-10-20T20:35:02+00:00"
|
||||
},
|
||||
{
|
||||
"name": "theseer/tokenizer",
|
||||
"version": "1.2.0",
|
||||
"version": "1.2.1",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/theseer/tokenizer.git",
|
||||
"reference": "75a63c33a8577608444246075ea0af0d052e452a"
|
||||
"reference": "34a41e998c2183e22995f158c581e7b5e755ab9e"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/75a63c33a8577608444246075ea0af0d052e452a",
|
||||
"reference": "75a63c33a8577608444246075ea0af0d052e452a",
|
||||
"url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e",
|
||||
"reference": "34a41e998c2183e22995f158c581e7b5e755ab9e",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -2340,7 +2342,7 @@
|
|||
"description": "A small library for converting tokenized PHP source code into XML and potentially other formats",
|
||||
"support": {
|
||||
"issues": "https://github.com/theseer/tokenizer/issues",
|
||||
"source": "https://github.com/theseer/tokenizer/tree/master"
|
||||
"source": "https://github.com/theseer/tokenizer/tree/1.2.1"
|
||||
},
|
||||
"funding": [
|
||||
{
|
||||
|
@ -2348,7 +2350,7 @@
|
|||
"type": "github"
|
||||
}
|
||||
],
|
||||
"time": "2020-07-12T23:59:07+00:00"
|
||||
"time": "2021-07-28T10:34:58+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/assert",
|
||||
|
@ -2410,16 +2412,16 @@
|
|||
},
|
||||
{
|
||||
"name": "webmozart/glob",
|
||||
"version": "4.3.0",
|
||||
"version": "4.4.0",
|
||||
"source": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/webmozarts/glob.git",
|
||||
"reference": "06358fafde0f32edb4513f4fd88fe113a40c90ee"
|
||||
"reference": "539b5dbc10021d3f9242e7a9e9b6b37843179e83"
|
||||
},
|
||||
"dist": {
|
||||
"type": "zip",
|
||||
"url": "https://api.github.com/repos/webmozarts/glob/zipball/06358fafde0f32edb4513f4fd88fe113a40c90ee",
|
||||
"reference": "06358fafde0f32edb4513f4fd88fe113a40c90ee",
|
||||
"url": "https://api.github.com/repos/webmozarts/glob/zipball/539b5dbc10021d3f9242e7a9e9b6b37843179e83",
|
||||
"reference": "539b5dbc10021d3f9242e7a9e9b6b37843179e83",
|
||||
"shasum": ""
|
||||
},
|
||||
"require": {
|
||||
|
@ -2427,8 +2429,8 @@
|
|||
"webmozart/path-util": "^2.2"
|
||||
},
|
||||
"require-dev": {
|
||||
"phpunit/phpunit": "^8.0",
|
||||
"symfony/filesystem": "^5.1"
|
||||
"phpunit/phpunit": "^9.5",
|
||||
"symfony/filesystem": "^5.3"
|
||||
},
|
||||
"type": "library",
|
||||
"extra": {
|
||||
|
@ -2454,9 +2456,9 @@
|
|||
"description": "A PHP implementation of Ant's glob.",
|
||||
"support": {
|
||||
"issues": "https://github.com/webmozarts/glob/issues",
|
||||
"source": "https://github.com/webmozarts/glob/tree/4.3.0"
|
||||
"source": "https://github.com/webmozarts/glob/tree/4.4.0"
|
||||
},
|
||||
"time": "2021-01-21T06:17:15+00:00"
|
||||
"time": "2021-10-07T16:13:08+00:00"
|
||||
},
|
||||
{
|
||||
"name": "webmozart/path-util",
|
||||
|
@ -2506,6 +2508,7 @@
|
|||
"issues": "https://github.com/webmozart/path-util/issues",
|
||||
"source": "https://github.com/webmozart/path-util/tree/2.3.0"
|
||||
},
|
||||
"abandoned": "symfony/filesystem",
|
||||
"time": "2015-12-17T08:42:14+00:00"
|
||||
}
|
||||
],
|
||||
|
@ -2516,5 +2519,5 @@
|
|||
"prefer-lowest": false,
|
||||
"platform": [],
|
||||
"platform-dev": [],
|
||||
"plugin-api-version": "2.0.0"
|
||||
"plugin-api-version": "2.2.0"
|
||||
}
|
||||
|
|
630
vendor-bin/robo/composer.lock
generated
630
vendor-bin/robo/composer.lock
generated
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue