升级到 php8.2

格式化代码
This commit is contained in:
iVampireSP.com 2023-01-05 22:12:47 +08:00
parent b499284855
commit af6c0d97b4
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132
13 changed files with 402 additions and 388 deletions

View File

@ -82,24 +82,9 @@ public function handle(): int
return CommandAlias::SUCCESS;
}
public function addFileToZip(string $path, ZipArchive $zip): void
{
$handler = opendir($path);
while (($filename = readdir($handler)) !== false) {
if ($filename != '.' && $filename != '..') {
if (is_dir($path . '/' . $filename)) {
$this->addFileToZip($path . '/' . $filename, $zip);
} else {
$zip->addFile($path . '/' . $filename);
}
}
}
@closedir($handler);
}
public function upload($node_type)
{
$this->warn("正在上传 ${node_type} 文件。");
$this->warn("正在上传 {$node_type} 文件。");
$this->info('正在打包 config 目录。');
if ($node_type === 'master') {
@ -114,12 +99,12 @@ public function upload($node_type)
$this->info('正在上传 config 目录。');
$cache_key = "${node_type}_config_zip";
$cache_key = "{$node_type}_config_zip";
Cluster::forever($cache_key, file_get_contents($cacheZip));
// md5
$this->info('正在报告 cache 目录的 MD5 值。');
$cache_md5_key = "${node_type}_config_zip_md5";
$cache_md5_key = "{$node_type}_config_zip_md5";
Cluster::forever($cache_md5_key, md5_file($cacheZip));
unlink($cacheZip);
@ -127,14 +112,29 @@ public function upload($node_type)
// 上传 .env 文件
$this->info('正在上传 .env 文件。');
$env_key = "${node_type}_env";
$env_key = "{$node_type}_env";
Cluster::forever($env_key, file_get_contents(base_path('.env')));
// 上传 .env 文件的 MD5
$this->info('正在报告 .env 文件的 MD5 值。');
$env_md5_key = "${node_type}_env_md5";
$env_md5_key = "{$node_type}_env_md5";
Cluster::forever($env_md5_key, md5_file(base_path('.env')));
$this->info('完成。');
}
public function addFileToZip(string $path, ZipArchive $zip): void
{
$handler = opendir($path);
while (($filename = readdir($handler)) !== false) {
if ($filename != '.' && $filename != '..') {
if (is_dir($path . '/' . $filename)) {
$this->addFileToZip($path . '/' . $filename, $zip);
} else {
$zip->addFile($path . '/' . $filename);
}
}
}
@closedir($handler);
}
}

View File

@ -137,6 +137,59 @@ public function handle(): int
return CommandAlias::SUCCESS;
}
private function pipeCommand($command): void
{
$descriptor_spec = [
0 => ['pipe', 'r'],
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$pipes = [];
$process = proc_open($command, $descriptor_spec, $pipes);
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
echo $s;
}
}
// 命令结束后,关闭管道
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
// 关闭进程
proc_close($process);
}
private function report(): void
{
$this->info('正在报告此系统,请保持此命令一直运行。');
Artisan::call('config:cache');
$cpu = $this->getCpuUsage();
while (1) {
Cluster::publish('system_usage', [
'cpu' => $cpu,
]);
sleep(1);
}
}
private function getCpuUsage(): float
{
// 获取 CPU 使用率
$cpu = sys_getloadavg();
return $cpu[0];
}
private function work(): void
{
@ -187,57 +240,4 @@ private function dispatchEvent($event, $message = []): void
$events[$event]($message);
}
}
private function report(): void
{
$this->info('正在报告此系统,请保持此命令一直运行。');
Artisan::call('config:cache');
$cpu = $this->getCpuUsage();
while (1) {
Cluster::publish('system_usage', [
'cpu' => $cpu,
]);
sleep(1);
}
}
private function getCpuUsage(): float
{
// 获取 CPU 使用率
$cpu = sys_getloadavg();
return $cpu[0];
}
private function pipeCommand($command): void
{
$descriptor_spec = [
0 => ['pipe', 'r'],
1 => ['pipe', 'w'],
2 => ['pipe', 'w'],
];
$process = proc_open($command, $descriptor_spec, $pipes);
if (is_resource($process)) {
while ($s = fgets($pipes[1])) {
echo $s;
}
}
// 命令结束后,关闭管道
fclose($pipes[0]);
fclose($pipes[1]);
fclose($pipes[2]);
// 关闭进程
proc_close($process);
}
}

View File

@ -66,6 +66,16 @@ public function store(Request $request): RedirectResponse
}
private function rules(): array
{
return [
'id' => 'required|string|max:255',
'name' => 'required|string|max:255',
'url' => 'required|url',
'status' => 'required|string|in:up,down,maintenance',
];
}
/**
* Display the specified resource.
*
@ -165,6 +175,9 @@ public function allows_store(Request $request, Module $module)
return back()->with('success', '已信任该模块。');
}
// fast login
public function allows_destroy(Module $module, ModuleAllow $allow)
{
$allow->delete();
@ -172,8 +185,6 @@ public function allows_destroy(Module $module, ModuleAllow $allow)
return redirect()->route('admin.modules.allows', $module)->with('success', '取消信任完成。');
}
// fast login
public function fast_login(Module $module): View|RedirectResponse
{
$resp = $module->baseRequest('post', 'fast-login', []);
@ -185,14 +196,4 @@ public function fast_login(Module $module): View|RedirectResponse
return redirect()->route('admin.modules.show', $module)->with('error', '快速登录失败,可能是模块不支持。');
}
}
private function rules(): array
{
return [
'id' => 'required|string|max:255',
'name' => 'required|string|max:255',
'url' => 'required|url',
'status' => 'required|string|in:up,down,maintenance',
];
}
}

View File

@ -23,7 +23,8 @@ public function module_reports(Request $request)
return $this->success($servers);
}
public function nodes() {
public function nodes()
{
$nodes = Cluster::nodes(true);
$current_node_id = Cluster::currentNode()['id'];

View File

@ -2,9 +2,7 @@
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Middleware\TrustProxies as Middleware;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Request as RequestAlias;
class TrustProxies extends Middleware

View File

@ -77,31 +77,6 @@ class Balance extends Model
'amount' => 'decimal:2',
];
public function user(): BelongsToAlias
{
return $this->belongsTo(User::class);
}
public function scopeThisUser($query)
{
return $query->where('user_id', auth()->id());
}
public function isPaid(): bool
{
return $this->paid_at !== null;
}
public function isOverdue(): bool
{
return $this->created_at->diffInDays(now()) > 1 && !$this->isPaid();
}
public function canPay(): bool
{
return !$this->isPaid() && !$this->isOverdue();
}
protected static function boot()
{
parent::boot();
@ -113,4 +88,29 @@ protected static function boot()
$balance->order_id = date('YmdHis') . $balance->id . rand(1000, 9999);
});
}
public function user(): BelongsToAlias
{
return $this->belongsTo(User::class);
}
public function scopeThisUser($query)
{
return $query->where('user_id', auth()->id());
}
public function canPay(): bool
{
return !$this->isPaid() && !$this->isOverdue();
}
public function isPaid(): bool
{
return $this->paid_at !== null;
}
public function isOverdue(): bool
{
return $this->created_at->diffInDays(now()) > 1 && !$this->isPaid();
}
}

View File

@ -124,22 +124,6 @@ class User extends Authenticatable
'birthday_at' => 'date',
];
public function hosts(): HasMany
{
return $this->hasMany(Host::class);
}
public function user_group(): BelongsTo
{
return $this->belongsTo(UserGroup::class);
}
public function scopeBirthday()
{
return $this->select(['id', 'name', 'birthday_at', 'email_md5', 'created_at'])->whereMonth('birthday_at', now()->month)
->whereDay('birthday_at', now()->day);
}
protected static function boot()
{
parent::boot();
@ -159,4 +143,20 @@ protected static function boot()
}
});
}
public function hosts(): HasMany
{
return $this->hasMany(Host::class);
}
public function user_group(): BelongsTo
{
return $this->belongsTo(UserGroup::class);
}
public function scopeBirthday()
{
return $this->select(['id', 'name', 'birthday_at', 'email_md5', 'created_at'])->whereMonth('birthday_at', now()->month)
->whereDay('birthday_at', now()->day);
}
}

View File

@ -73,38 +73,6 @@ class Reply extends Model
'role'
];
public function scopeWorkOrderId($query, $work_order_id)
{
return $query->where('work_order_id', $work_order_id);
}
public function scopeWithUser($query)
{
return $query->with(['user' => function ($query) {
$query->select('id', 'name', 'email_md5');
}]);
}
public function workOrder(): BelongsTo
{
return $this->belongsTo(WorkOrder::class, 'work_order_id', 'id');
}
public function module(): BelongsTo
{
return $this->belongsTo(Module::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function safeDelete(): void
{
dispatch(new \App\Jobs\Module\WorkOrder\Reply($this, 'delete'));
}
protected static function boot()
{
parent::boot();
@ -159,4 +127,36 @@ protected static function boot()
dispatch(new \App\Jobs\Module\WorkOrder\Reply($model, 'patch'));
});
}
public function scopeWorkOrderId($query, $work_order_id)
{
return $query->where('work_order_id', $work_order_id);
}
public function scopeWithUser($query)
{
return $query->with(['user' => function ($query) {
$query->select('id', 'name', 'email_md5');
}]);
}
public function workOrder(): BelongsTo
{
return $this->belongsTo(WorkOrder::class, 'work_order_id', 'id');
}
public function module(): BelongsTo
{
return $this->belongsTo(Module::class);
}
public function user(): BelongsTo
{
return $this->belongsTo(User::class);
}
public function safeDelete(): void
{
dispatch(new \App\Jobs\Module\WorkOrder\Reply($this, 'delete'));
}
}

View File

@ -89,6 +89,52 @@ class WorkOrder extends Model
'notify' => 'boolean'
];
protected static function boot()
{
parent::boot();
static::creating(function (self $model) {
$model->uuid = Str::uuid()->toString();
if ($model->host_id) {
$model->load(['host']);
$model->module_id = $model->host->module_id;
}
if (auth('sanctum')->check()) {
$model->user_id = auth()->id();
if ($model->host_id) {
if (!$model->user_id == $model->host->user_id) {
throw new CommonException('user_id not match host user_id');
}
}
} else {
if (!$model->user_id) {
throw new CommonException('user_id is required');
}
}
if ($model->host_id) {
$model->host->load('module');
$module = $model->host->module;
if ($module === null) {
$model->status = 'open';
} else {
$model->status = 'pending';
}
}
$model->notify = true;
});
// updated
static::updated(function ($model) {
dispatch(new WorkOrderJob($model, 'put'));
});
}
public function scopeThisModule($query)
{
return $query->where('module_id', auth('module')->id());
@ -147,50 +193,4 @@ public function safeDelete(): bool
return true;
}
protected static function boot()
{
parent::boot();
static::creating(function (self $model) {
$model->uuid = Str::uuid()->toString();
if ($model->host_id) {
$model->load(['host']);
$model->module_id = $model->host->module_id;
}
if (auth('sanctum')->check()) {
$model->user_id = auth()->id();
if ($model->host_id) {
if (!$model->user_id == $model->host->user_id) {
throw new CommonException('user_id not match host user_id');
}
}
} else {
if (!$model->user_id) {
throw new CommonException('user_id is required');
}
}
if ($model->host_id) {
$model->host->load('module');
$module = $model->host->module;
if ($module === null) {
$model->status = 'open';
} else {
$model->status = 'pending';
}
}
$model->notify = true;
});
// updated
static::updated(function ($model) {
dispatch(new WorkOrderJob($model, 'put'));
});
}
}

View File

@ -2,7 +2,6 @@
namespace App\Providers;
use App\Http\Middleware\TrustProxies;
use App\Models\PersonalAccessToken;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Http;

View File

@ -9,6 +9,11 @@ class Cluster
public static string $prefix = 'cluster:';
public static function isCluster(): bool
{
return self::isMaster() || self::isSlave();
}
public static function isMaster(): bool
{
return config('settings.node.type') === 'master';
@ -19,11 +24,6 @@ public static function isSlave(): bool
return config('settings.node.type') === 'slave';
}
public static function isCluster(): bool
{
return self::isMaster() || self::isSlave();
}
public static function publish($event, $data = []): void
{
Redis::publish('cluster_ready', json_encode([
@ -40,6 +40,28 @@ public static function publish($event, $data = []): void
self::registerThisNode(false);
}
public static function registerThisNode($report = true): void
{
$node_id = config('settings.node.id');
Cluster::hset('nodes', $node_id, [
'type' => config('settings.node.type'),
'id' => $node_id,
'ip' => config('settings.node.ip'),
// utc +8 timestamp
'last_heartbeat' => time(),
]);
if ($report) {
Cluster::publish('node.ok');
}
}
public static function hset($key, $value, $data = []): void
{
Redis::hset(self::$prefix . $key, $value, json_encode($data));
}
/**
* @param string|array $events 事件名称
* @param $callback callable 回调函数,接收一个参数,为事件数据。
@ -71,21 +93,11 @@ public static function listen(string|array $events, callable $callback, bool $ig
});
}
public static function hset($key, $value, $data = []): void
{
Redis::hset(self::$prefix . $key, $value, json_encode($data));
}
public static function get($key, $default = null): string|array|null
{
return Redis::get(self::$prefix . $key, $default);
}
public static function set($key, $value, $ttl = null): void
{
Redis::set(self::$prefix . $key, $value, $ttl);
}
public static function forget($key): void
{
Redis::forget(self::$prefix . $key);
@ -97,6 +109,11 @@ public static function forever($key, $value): void
self::set($key, $value, -1);
}
public static function set($key, $value, $ttl = null): void
{
Redis::set(self::$prefix . $key, $value, $ttl);
}
public static function hget($key, $hashKey, $default = []): string|array|null
{
$value = Redis::hget(self::$prefix . $key, $hashKey);
@ -104,13 +121,6 @@ public static function hget($key, $hashKey, $default = []): string|array|null
return $value ?: $default;
}
public static function hgetAll($hashKey, $default = []): array
{
$value = Redis::hgetall(self::$prefix . $hashKey);
return $value ?: $default;
}
public static function nodes($hide_ip = false): array
{
$nodes = self::hgetAll('nodes');
@ -126,21 +136,11 @@ public static function nodes($hide_ip = false): array
return $nodes;
}
public static function registerThisNode($report = true): void
public static function hgetAll($hashKey, $default = []): array
{
$node_id = config('settings.node.id');
$value = Redis::hgetall(self::$prefix . $hashKey);
Cluster::hset('nodes', $node_id, [
'type' => config('settings.node.type'),
'id' => $node_id,
'ip' => config('settings.node.ip'),
// utc +8 timestamp
'last_heartbeat' => time(),
]);
if ($report) {
Cluster::publish('node.ok');
}
return $value ?: $default;
}
public static function currentNode()

View File

@ -8,7 +8,7 @@
],
"license": "MIT",
"require": {
"php": "^8.1",
"php": "^8.2",
"ext-zip": "^1.19",
"doctrine/dbal": "^3.4",
"erusev/parsedown": "^1.7",

303
composer.lock generated
View File

@ -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": "81fa8fb300376dbf0ae3eb8771d2018f",
"content-hash": "7354c998d6e06ecf6a4dd7c044db632e",
"packages": [
{
"name": "bacon/bacon-qr-code",
@ -813,16 +813,16 @@
},
{
"name": "doctrine/lexer",
"version": "1.2.3",
"version": "2.1.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/lexer.git",
"reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229"
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/c268e882d4dbdd85e36e4ad69e02dc284f89d229",
"reference": "c268e882d4dbdd85e36e4ad69e02dc284f89d229",
"url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124",
"shasum": "",
"mirrors": [
{
@ -832,18 +832,20 @@
]
},
"require": {
"doctrine/deprecations": "^1.0",
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9.0",
"doctrine/coding-standard": "^9 || ^10",
"phpstan/phpstan": "^1.3",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.11"
"psalm/plugin-phpunit": "^0.18.3",
"vimeo/psalm": "^4.11 || ^5.0"
},
"type": "library",
"autoload": {
"psr-4": {
"Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer"
"Doctrine\\Common\\Lexer\\": "src"
}
},
"notification-url": "https://packagist.org/downloads/",
@ -875,7 +877,7 @@
],
"support": {
"issues": "https://github.com/doctrine/lexer/issues",
"source": "https://github.com/doctrine/lexer/tree/1.2.3"
"source": "https://github.com/doctrine/lexer/tree/2.1.0"
},
"funding": [
{
@ -891,7 +893,7 @@
"type": "tidelift"
}
],
"time": "2022-02-28T11:07:21+00:00"
"time": "2022-12-14T08:49:07+00:00"
},
{
"name": "dragonmantank/cron-expression",
@ -962,16 +964,16 @@
},
{
"name": "egulias/email-validator",
"version": "3.2.1",
"version": "3.2.4",
"source": {
"type": "git",
"url": "https://github.com/egulias/EmailValidator.git",
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715"
"reference": "5f35e41eba05fdfbabd95d72f83795c835fb7ed2"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/f88dcf4b14af14a98ad96b14b2b317969eab6715",
"reference": "f88dcf4b14af14a98ad96b14b2b317969eab6715",
"url": "https://api.github.com/repos/egulias/EmailValidator/zipball/5f35e41eba05fdfbabd95d72f83795c835fb7ed2",
"reference": "5f35e41eba05fdfbabd95d72f83795c835fb7ed2",
"shasum": "",
"mirrors": [
{
@ -981,7 +983,7 @@
]
},
"require": {
"doctrine/lexer": "^1.2",
"doctrine/lexer": "^1.2|^2",
"php": ">=7.2",
"symfony/polyfill-intl-idn": "^1.15"
},
@ -1024,7 +1026,7 @@
],
"support": {
"issues": "https://github.com/egulias/EmailValidator/issues",
"source": "https://github.com/egulias/EmailValidator/tree/3.2.1"
"source": "https://github.com/egulias/EmailValidator/tree/3.2.4"
},
"funding": [
{
@ -1032,7 +1034,7 @@
"type": "github"
}
],
"time": "2022-06-18T20:57:19+00:00"
"time": "2022-12-30T14:09:25+00:00"
},
{
"name": "erusev/parsedown",
@ -3156,16 +3158,16 @@
},
{
"name": "nesbot/carbon",
"version": "2.64.0",
"version": "2.64.1",
"source": {
"type": "git",
"url": "https://github.com/briannesbitt/Carbon.git",
"reference": "889546413c97de2d05063b8cb7b193c2531ea211"
"reference": "f2e59963f4c4f4fdfb9fcfd752e8d2e2b79a4e2c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/889546413c97de2d05063b8cb7b193c2531ea211",
"reference": "889546413c97de2d05063b8cb7b193c2531ea211",
"url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/f2e59963f4c4f4fdfb9fcfd752e8d2e2b79a4e2c",
"reference": "f2e59963f4c4f4fdfb9fcfd752e8d2e2b79a4e2c",
"shasum": "",
"mirrors": [
{
@ -3260,7 +3262,7 @@
"type": "tidelift"
}
],
"time": "2022-11-26T17:36:00+00:00"
"time": "2023-01-01T23:17:36+00:00"
},
{
"name": "nette/schema",
@ -4663,16 +4665,16 @@
},
{
"name": "ramsey/collection",
"version": "1.2.2",
"version": "1.3.0",
"source": {
"type": "git",
"url": "https://github.com/ramsey/collection.git",
"reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a"
"reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a",
"reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a",
"url": "https://api.github.com/repos/ramsey/collection/zipball/ad7475d1c9e70b190ecffc58f2d989416af339b4",
"reference": "ad7475d1c9e70b190ecffc58f2d989416af339b4",
"shasum": "",
"mirrors": [
{
@ -4682,29 +4684,40 @@
]
},
"require": {
"php": "^7.3 || ^8",
"php": "^7.4 || ^8.0",
"symfony/polyfill-php81": "^1.23"
},
"require-dev": {
"captainhook/captainhook": "^5.3",
"dealerdirect/phpcodesniffer-composer-installer": "^0.7.0",
"ergebnis/composer-normalize": "^2.6",
"fakerphp/faker": "^1.5",
"hamcrest/hamcrest-php": "^2",
"jangregor/phpstan-prophecy": "^0.8",
"mockery/mockery": "^1.3",
"captainhook/plugin-composer": "^5.3",
"ergebnis/composer-normalize": "^2.28.3",
"fakerphp/faker": "^1.21",
"hamcrest/hamcrest-php": "^2.0",
"jangregor/phpstan-prophecy": "^1.0",
"mockery/mockery": "^1.5",
"php-parallel-lint/php-console-highlighter": "^1.0",
"php-parallel-lint/php-parallel-lint": "^1.3",
"phpcsstandards/phpcsutils": "^1.0.0-rc1",
"phpspec/prophecy-phpunit": "^2.0",
"phpstan/extension-installer": "^1",
"phpstan/phpstan": "^0.12.32",
"phpstan/phpstan-mockery": "^0.12.5",
"phpstan/phpstan-phpunit": "^0.12.11",
"phpunit/phpunit": "^8.5 || ^9",
"psy/psysh": "^0.10.4",
"slevomat/coding-standard": "^6.3",
"squizlabs/php_codesniffer": "^3.5",
"vimeo/psalm": "^4.4"
"phpstan/extension-installer": "^1.2",
"phpstan/phpstan": "^1.9",
"phpstan/phpstan-mockery": "^1.1",
"phpstan/phpstan-phpunit": "^1.3",
"phpunit/phpunit": "^9.5",
"psalm/plugin-mockery": "^1.1",
"psalm/plugin-phpunit": "^0.18.4",
"ramsey/coding-standard": "^2.0.3",
"ramsey/conventional-commits": "^1.3",
"vimeo/psalm": "^5.4"
},
"type": "library",
"extra": {
"captainhook": {
"force-install": true
},
"ramsey/conventional-commits": {
"configFile": "conventional-commits.json"
}
},
"autoload": {
"psr-4": {
"Ramsey\\Collection\\": "src/"
@ -4732,7 +4745,7 @@
],
"support": {
"issues": "https://github.com/ramsey/collection/issues",
"source": "https://github.com/ramsey/collection/tree/1.2.2"
"source": "https://github.com/ramsey/collection/tree/1.3.0"
},
"funding": [
{
@ -4744,7 +4757,7 @@
"type": "tidelift"
}
],
"time": "2021-10-10T03:01:02+00:00"
"time": "2022-12-27T19:12:24+00:00"
},
{
"name": "ramsey/uuid",
@ -5705,16 +5718,16 @@
},
{
"name": "symfony/error-handler",
"version": "v6.2.1",
"version": "v6.2.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/error-handler.git",
"reference": "b4e41f62c1124378863ff2705158a60da3e4c6b9"
"reference": "0926124c95d220499e2baf0fb465772af3a4eddb"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/b4e41f62c1124378863ff2705158a60da3e4c6b9",
"reference": "b4e41f62c1124378863ff2705158a60da3e4c6b9",
"url": "https://api.github.com/repos/symfony/error-handler/zipball/0926124c95d220499e2baf0fb465772af3a4eddb",
"reference": "0926124c95d220499e2baf0fb465772af3a4eddb",
"shasum": "",
"mirrors": [
{
@ -5762,7 +5775,7 @@
"description": "Provides tools to manage errors and ease debugging PHP code",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/error-handler/tree/v6.2.1"
"source": "https://github.com/symfony/error-handler/tree/v6.2.3"
},
"funding": [
{
@ -5778,20 +5791,20 @@
"type": "tidelift"
}
],
"time": "2022-12-01T21:07:46+00:00"
"time": "2022-12-19T14:33:49+00:00"
},
{
"name": "symfony/event-dispatcher",
"version": "v6.2.0",
"version": "v6.2.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher.git",
"reference": "9efb1618fabee89515fe031314e8ed5625f85a53"
"reference": "3ffeb31139b49bf6ef0bc09d1db95eac053388d1"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9efb1618fabee89515fe031314e8ed5625f85a53",
"reference": "9efb1618fabee89515fe031314e8ed5625f85a53",
"url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/3ffeb31139b49bf6ef0bc09d1db95eac053388d1",
"reference": "3ffeb31139b49bf6ef0bc09d1db95eac053388d1",
"shasum": "",
"mirrors": [
{
@ -5851,7 +5864,7 @@
"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/v6.2.0"
"source": "https://github.com/symfony/event-dispatcher/tree/v6.2.2"
},
"funding": [
{
@ -5867,7 +5880,7 @@
"type": "tidelift"
}
],
"time": "2022-11-02T09:08:04+00:00"
"time": "2022-12-14T16:11:27+00:00"
},
{
"name": "symfony/event-dispatcher-contracts",
@ -5956,16 +5969,16 @@
},
{
"name": "symfony/finder",
"version": "v6.1.3",
"version": "v6.2.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/finder.git",
"reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709"
"reference": "81eefbddfde282ee33b437ba5e13d7753211ae8e"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709",
"reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709",
"url": "https://api.github.com/repos/symfony/finder/zipball/81eefbddfde282ee33b437ba5e13d7753211ae8e",
"reference": "81eefbddfde282ee33b437ba5e13d7753211ae8e",
"shasum": "",
"mirrors": [
{
@ -6006,7 +6019,7 @@
"description": "Finds files and directories via an intuitive fluent interface",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/finder/tree/v6.1.3"
"source": "https://github.com/symfony/finder/tree/v6.2.3"
},
"funding": [
{
@ -6022,20 +6035,20 @@
"type": "tidelift"
}
],
"time": "2022-07-29T07:42:06+00:00"
"time": "2022-12-22T17:55:15+00:00"
},
{
"name": "symfony/http-client",
"version": "v6.2.0",
"version": "v6.2.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-client.git",
"reference": "153540b6ed72eecdcb42dc847f8d8cf2e2516e8e"
"reference": "7054ad466f836309aef511789b9c697bc986d8ce"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-client/zipball/153540b6ed72eecdcb42dc847f8d8cf2e2516e8e",
"reference": "153540b6ed72eecdcb42dc847f8d8cf2e2516e8e",
"url": "https://api.github.com/repos/symfony/http-client/zipball/7054ad466f836309aef511789b9c697bc986d8ce",
"reference": "7054ad466f836309aef511789b9c697bc986d8ce",
"shasum": "",
"mirrors": [
{
@ -6097,7 +6110,7 @@
"description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-client/tree/v6.2.0"
"source": "https://github.com/symfony/http-client/tree/v6.2.2"
},
"funding": [
{
@ -6113,7 +6126,7 @@
"type": "tidelift"
}
],
"time": "2022-11-14T10:13:36+00:00"
"time": "2022-12-14T16:11:27+00:00"
},
{
"name": "symfony/http-client-contracts",
@ -6204,16 +6217,16 @@
},
{
"name": "symfony/http-foundation",
"version": "v6.2.1",
"version": "v6.2.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-foundation.git",
"reference": "d0bbd5a7e81b38f32504399b9199f265505b7bac"
"reference": "ddf4dd35de1623e7c02013523e6c2137b67b636f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/d0bbd5a7e81b38f32504399b9199f265505b7bac",
"reference": "d0bbd5a7e81b38f32504399b9199f265505b7bac",
"url": "https://api.github.com/repos/symfony/http-foundation/zipball/ddf4dd35de1623e7c02013523e6c2137b67b636f",
"reference": "ddf4dd35de1623e7c02013523e6c2137b67b636f",
"shasum": "",
"mirrors": [
{
@ -6268,7 +6281,7 @@
"description": "Defines an object-oriented layer for the HTTP specification",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-foundation/tree/v6.2.1"
"source": "https://github.com/symfony/http-foundation/tree/v6.2.2"
},
"funding": [
{
@ -6284,20 +6297,20 @@
"type": "tidelift"
}
],
"time": "2022-12-04T18:26:13+00:00"
"time": "2022-12-14T16:11:27+00:00"
},
{
"name": "symfony/http-kernel",
"version": "v6.2.2",
"version": "v6.2.3",
"source": {
"type": "git",
"url": "https://github.com/symfony/http-kernel.git",
"reference": "860a0189969b755cd571709bd32313aa8599867a"
"reference": "56c0c0d051579d25aec059a21dfe469634396a0f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/860a0189969b755cd571709bd32313aa8599867a",
"reference": "860a0189969b755cd571709bd32313aa8599867a",
"url": "https://api.github.com/repos/symfony/http-kernel/zipball/56c0c0d051579d25aec059a21dfe469634396a0f",
"reference": "56c0c0d051579d25aec059a21dfe469634396a0f",
"shasum": "",
"mirrors": [
{
@ -6385,7 +6398,7 @@
"description": "Provides a structured process for converting a Request into a Response",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/http-kernel/tree/v6.2.2"
"source": "https://github.com/symfony/http-kernel/tree/v6.2.3"
},
"funding": [
{
@ -6401,7 +6414,7 @@
"type": "tidelift"
}
],
"time": "2022-12-16T19:38:34+00:00"
"time": "2022-12-28T15:05:50+00:00"
},
{
"name": "symfony/mailer",
@ -6490,16 +6503,16 @@
},
{
"name": "symfony/mime",
"version": "v6.2.0",
"version": "v6.2.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/mime.git",
"reference": "1e8005a7cbd79fb824ad81308ef2a76592a08bc0"
"reference": "8c98bf40406e791043890a163f6f6599b9cfa1ed"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/mime/zipball/1e8005a7cbd79fb824ad81308ef2a76592a08bc0",
"reference": "1e8005a7cbd79fb824ad81308ef2a76592a08bc0",
"url": "https://api.github.com/repos/symfony/mime/zipball/8c98bf40406e791043890a163f6f6599b9cfa1ed",
"reference": "8c98bf40406e791043890a163f6f6599b9cfa1ed",
"shasum": "",
"mirrors": [
{
@ -6559,7 +6572,7 @@
"mime-type"
],
"support": {
"source": "https://github.com/symfony/mime/tree/v6.2.0"
"source": "https://github.com/symfony/mime/tree/v6.2.2"
},
"funding": [
{
@ -6575,7 +6588,7 @@
"type": "tidelift"
}
],
"time": "2022-11-28T12:28:19+00:00"
"time": "2022-12-14T16:38:10+00:00"
},
{
"name": "symfony/polyfill-ctype",
@ -8079,16 +8092,16 @@
},
{
"name": "symfony/var-dumper",
"version": "v6.2.1",
"version": "v6.2.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/var-dumper.git",
"reference": "1e7544c8698627b908657e5276854d52ab70087a"
"reference": "6168f544827e897f708a684f75072a8c33a5e309"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/1e7544c8698627b908657e5276854d52ab70087a",
"reference": "1e7544c8698627b908657e5276854d52ab70087a",
"url": "https://api.github.com/repos/symfony/var-dumper/zipball/6168f544827e897f708a684f75072a8c33a5e309",
"reference": "6168f544827e897f708a684f75072a8c33a5e309",
"shasum": "",
"mirrors": [
{
@ -8153,7 +8166,7 @@
"dump"
],
"support": {
"source": "https://github.com/symfony/var-dumper/tree/v6.2.1"
"source": "https://github.com/symfony/var-dumper/tree/v6.2.2"
},
"funding": [
{
@ -8169,20 +8182,20 @@
"type": "tidelift"
}
],
"time": "2022-12-03T22:32:58+00:00"
"time": "2022-12-14T16:11:27+00:00"
},
{
"name": "symfony/yaml",
"version": "v6.2.0",
"version": "v6.2.2",
"source": {
"type": "git",
"url": "https://github.com/symfony/yaml.git",
"reference": "f2570f21bd4adc3589aa3133323273995109bae0"
"reference": "6ed8243aa5f2cb5a57009f826b5e7fb3c4200cf3"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/yaml/zipball/f2570f21bd4adc3589aa3133323273995109bae0",
"reference": "f2570f21bd4adc3589aa3133323273995109bae0",
"url": "https://api.github.com/repos/symfony/yaml/zipball/6ed8243aa5f2cb5a57009f826b5e7fb3c4200cf3",
"reference": "6ed8243aa5f2cb5a57009f826b5e7fb3c4200cf3",
"shasum": "",
"mirrors": [
{
@ -8233,7 +8246,7 @@
"description": "Loads and dumps YAML files",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/yaml/tree/v6.2.0"
"source": "https://github.com/symfony/yaml/tree/v6.2.2"
},
"funding": [
{
@ -8249,20 +8262,20 @@
"type": "tidelift"
}
],
"time": "2022-11-25T19:00:27+00:00"
"time": "2022-12-14T16:11:27+00:00"
},
{
"name": "tijsverkoyen/css-to-inline-styles",
"version": "2.2.5",
"version": "2.2.6",
"source": {
"type": "git",
"url": "https://github.com/tijsverkoyen/CssToInlineStyles.git",
"reference": "4348a3a06651827a27d989ad1d13efec6bb49b19"
"reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/4348a3a06651827a27d989ad1d13efec6bb49b19",
"reference": "4348a3a06651827a27d989ad1d13efec6bb49b19",
"url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c",
"reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c",
"shasum": "",
"mirrors": [
{
@ -8306,9 +8319,9 @@
"homepage": "https://github.com/tijsverkoyen/CssToInlineStyles",
"support": {
"issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues",
"source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.5"
"source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6"
},
"time": "2022-09-12T13:28:28+00:00"
"time": "2023-01-03T09:29:04+00:00"
},
{
"name": "vlucas/phpdotenv",
@ -8830,16 +8843,16 @@
},
{
"name": "doctrine/instantiator",
"version": "1.4.1",
"version": "1.5.0",
"source": {
"type": "git",
"url": "https://github.com/doctrine/instantiator.git",
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc"
"reference": "0a0fa9780f5d4e507415a065172d26a98d02047b"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/10dcfce151b967d20fde1b34ae6640712c3891bc",
"reference": "10dcfce151b967d20fde1b34ae6640712c3891bc",
"url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b",
"reference": "0a0fa9780f5d4e507415a065172d26a98d02047b",
"shasum": "",
"mirrors": [
{
@ -8852,14 +8865,14 @@
"php": "^7.1 || ^8.0"
},
"require-dev": {
"doctrine/coding-standard": "^9",
"doctrine/coding-standard": "^9 || ^11",
"ext-pdo": "*",
"ext-phar": "*",
"phpbench/phpbench": "^0.16 || ^1",
"phpstan/phpstan": "^1.4",
"phpstan/phpstan-phpunit": "^1",
"phpunit/phpunit": "^7.5 || ^8.5 || ^9.5",
"vimeo/psalm": "^4.22"
"vimeo/psalm": "^4.30 || ^5.4"
},
"type": "library",
"autoload": {
@ -8886,7 +8899,7 @@
],
"support": {
"issues": "https://github.com/doctrine/instantiator/issues",
"source": "https://github.com/doctrine/instantiator/tree/1.4.1"
"source": "https://github.com/doctrine/instantiator/tree/1.5.0"
},
"funding": [
{
@ -8902,7 +8915,7 @@
"type": "tidelift"
}
],
"time": "2022-03-03T08:28:38+00:00"
"time": "2022-12-30T00:15:36+00:00"
},
{
"name": "fakerphp/faker",
@ -9234,16 +9247,16 @@
},
{
"name": "laravel/sail",
"version": "v1.16.6",
"version": "v1.17.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/sail.git",
"reference": "2e8be54590bde421eb04e461a1421302a5b22cca"
"reference": "7d69da7b2bdb8cbe8da6663eb2ae0e00c884bf80"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/sail/zipball/2e8be54590bde421eb04e461a1421302a5b22cca",
"reference": "2e8be54590bde421eb04e461a1421302a5b22cca",
"url": "https://api.github.com/repos/laravel/sail/zipball/7d69da7b2bdb8cbe8da6663eb2ae0e00c884bf80",
"reference": "7d69da7b2bdb8cbe8da6663eb2ae0e00c884bf80",
"shasum": "",
"mirrors": [
{
@ -9296,20 +9309,20 @@
"issues": "https://github.com/laravel/sail/issues",
"source": "https://github.com/laravel/sail"
},
"time": "2022-12-19T15:41:32+00:00"
"time": "2022-12-22T14:46:08+00:00"
},
{
"name": "laravel/telescope",
"version": "v4.10.2",
"version": "v4.11.0",
"source": {
"type": "git",
"url": "https://github.com/laravel/telescope.git",
"reference": "3b1220b71ee08ac7be6be074635df50c2b83ab51"
"reference": "a910e64a9464312ed0a26ccecbf7a1f969f20806"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/laravel/telescope/zipball/3b1220b71ee08ac7be6be074635df50c2b83ab51",
"reference": "3b1220b71ee08ac7be6be074635df50c2b83ab51",
"url": "https://api.github.com/repos/laravel/telescope/zipball/a910e64a9464312ed0a26ccecbf7a1f969f20806",
"reference": "a910e64a9464312ed0a26ccecbf7a1f969f20806",
"shasum": "",
"mirrors": [
{
@ -9321,7 +9334,7 @@
"require": {
"ext-json": "*",
"laravel/framework": "^8.37|^9.0",
"php": "^7.3|^8.0",
"php": "^8.0",
"symfony/var-dumper": "^5.0|^6.0"
},
"require-dev": {
@ -9368,9 +9381,9 @@
],
"support": {
"issues": "https://github.com/laravel/telescope/issues",
"source": "https://github.com/laravel/telescope/tree/v4.10.2"
"source": "https://github.com/laravel/telescope/tree/v4.11.0"
},
"time": "2022-12-19T11:20:10+00:00"
"time": "2023-01-03T09:40:48+00:00"
},
{
"name": "mockery/mockery",
@ -9517,16 +9530,16 @@
},
{
"name": "nunomaduro/collision",
"version": "v6.3.1",
"version": "v6.4.0",
"source": {
"type": "git",
"url": "https://github.com/nunomaduro/collision.git",
"reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b"
"reference": "f05978827b9343cba381ca05b8c7deee346b6015"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/nunomaduro/collision/zipball/0f6349c3ed5dd28467087b08fb59384bb458a22b",
"reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b",
"url": "https://api.github.com/repos/nunomaduro/collision/zipball/f05978827b9343cba381ca05b8c7deee346b6015",
"reference": "f05978827b9343cba381ca05b8c7deee346b6015",
"shasum": "",
"mirrors": [
{
@ -9607,7 +9620,7 @@
"type": "patreon"
}
],
"time": "2022-09-29T12:29:49+00:00"
"time": "2023-01-03T12:54:54+00:00"
},
{
"name": "phar-io/manifest",
@ -9734,16 +9747,16 @@
},
{
"name": "phpstan/phpstan",
"version": "1.9.3",
"version": "1.9.7",
"source": {
"type": "git",
"url": "https://github.com/phpstan/phpstan.git",
"reference": "709999b91448d4f2bb07daffffedc889b33e461c"
"reference": "0501435cd342eac7664bd62155b1ef907fc60b6f"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/709999b91448d4f2bb07daffffedc889b33e461c",
"reference": "709999b91448d4f2bb07daffffedc889b33e461c",
"url": "https://api.github.com/repos/phpstan/phpstan/zipball/0501435cd342eac7664bd62155b1ef907fc60b6f",
"reference": "0501435cd342eac7664bd62155b1ef907fc60b6f",
"shasum": "",
"mirrors": [
{
@ -9779,7 +9792,7 @@
],
"support": {
"issues": "https://github.com/phpstan/phpstan/issues",
"source": "https://github.com/phpstan/phpstan/tree/1.9.3"
"source": "https://github.com/phpstan/phpstan/tree/1.9.7"
},
"funding": [
{
@ -9795,20 +9808,20 @@
"type": "tidelift"
}
],
"time": "2022-12-13T10:28:10+00:00"
"time": "2023-01-04T21:59:57+00:00"
},
{
"name": "phpunit/php-code-coverage",
"version": "9.2.22",
"version": "9.2.23",
"source": {
"type": "git",
"url": "https://github.com/sebastianbergmann/php-code-coverage.git",
"reference": "e4bf60d2220b4baaa0572986b5d69870226b06df"
"reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/e4bf60d2220b4baaa0572986b5d69870226b06df",
"reference": "e4bf60d2220b4baaa0572986b5d69870226b06df",
"url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c",
"reference": "9f1f0f9a2fbb680b26d1cf9b61b6eac43a6e4e9c",
"shasum": "",
"mirrors": [
{
@ -9870,7 +9883,7 @@
],
"support": {
"issues": "https://github.com/sebastianbergmann/php-code-coverage/issues",
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.22"
"source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.23"
},
"funding": [
{
@ -9878,7 +9891,7 @@
"type": "github"
}
],
"time": "2022-12-18T16:40:55+00:00"
"time": "2022-12-28T12:41:10+00:00"
},
{
"name": "phpunit/php-file-iterator",
@ -11696,8 +11709,10 @@
"prefer-stable": true,
"prefer-lowest": false,
"platform": {
"php": "^8.1",
"ext-zip": "^1.19"
"php": "^8.2",
"ext-zip": "^1.19",
"ext-pcntl": "*",
"ext-posix": "*"
},
"platform-dev": [],
"plugin-api-version": "2.3.0"