From 2e4440f40d9b841a66fb2b137cf7f478130a51d2 Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 30 Jan 2023 14:53:02 +0330 Subject: [PATCH 001/131] create migrations --- ...01_30_101602_create_applications_table.php | 30 ++++++++++++ ...2023_01_30_101606_create_devices_table.php | 34 ++++++++++++++ .../2023_01_30_101610_create_logs_table.php | 47 +++++++++++++++++++ 3 files changed, 111 insertions(+) create mode 100644 database/migrations/2023_01_30_101602_create_applications_table.php create mode 100644 database/migrations/2023_01_30_101606_create_devices_table.php create mode 100644 database/migrations/2023_01_30_101610_create_logs_table.php diff --git a/database/migrations/2023_01_30_101602_create_applications_table.php b/database/migrations/2023_01_30_101602_create_applications_table.php new file mode 100644 index 0000000..fc9899a --- /dev/null +++ b/database/migrations/2023_01_30_101602_create_applications_table.php @@ -0,0 +1,30 @@ +id(); + $table->string('title'); + $table->json('extra'); + $table->integer('owner'); + $table->integer('owner_id_column'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('applications'); + } +}; diff --git a/database/migrations/2023_01_30_101606_create_devices_table.php b/database/migrations/2023_01_30_101606_create_devices_table.php new file mode 100644 index 0000000..3753037 --- /dev/null +++ b/database/migrations/2023_01_30_101606_create_devices_table.php @@ -0,0 +1,34 @@ +id(); + $table->string('title')->nullable(); + $table->string('extra')->nullable(); + $table->integer('owner_id'); + $table->string('owner_id_column'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down(): void + { + Schema::dropIfExists('devices'); + } +}; diff --git a/database/migrations/2023_01_30_101610_create_logs_table.php b/database/migrations/2023_01_30_101610_create_logs_table.php new file mode 100644 index 0000000..90e8ea2 --- /dev/null +++ b/database/migrations/2023_01_30_101610_create_logs_table.php @@ -0,0 +1,47 @@ +id(); + $table->integer('application_id'); + + $table->foreign('application_id') + ->references('id') + ->on('applications') + ->onUpdate('cascade') + ->onDelete('cascade'); + + $table->integer('device_id'); + + $table->foreign('device_id') + ->references('id') + ->on('devices') + ->onUpdate('cascade') + ->onDelete('cascade'); + + $table->dateTime('read_at')->nullable(); + $table->enum('level', LogLevel::cases()); + $table->string('message'); + $table->string('date')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('logs'); + } +}; From f7098dc7ec865df9f29c0585ed41cf2c52ebaecb Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 30 Jan 2023 14:53:17 +0330 Subject: [PATCH 002/131] remove gitignore --- database/migrations/.gitkeep | 1 - 1 file changed, 1 deletion(-) delete mode 100644 database/migrations/.gitkeep diff --git a/database/migrations/.gitkeep b/database/migrations/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/database/migrations/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - From 034ed1c5c5770804c3d3dbd5063bafa52c7015dc Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 30 Jan 2023 15:11:29 +0330 Subject: [PATCH 003/131] created models [log, device, application ] --- src/Models/App.php | 106 ++++++++++++++++++++++- src/Models/Device.php | 98 +++++++++++++++++++++- src/Models/Log.php | 191 +++++++++++++++++++++++++++++++++++++++++- 3 files changed, 392 insertions(+), 3 deletions(-) diff --git a/src/Models/App.php b/src/Models/App.php index 8932e17..7c47531 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -3,8 +3,112 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; use dnj\ErrorTracker\Contracts\IApp; +use Illuminate\Database\Eloquent\Model; +/** + * @property int id + * @property string title + * @property array|null extra + * @property int|null owner + * @property string owner_id_column + * @property \DateTime created_at + * @property \DateTime updated_at + */ class App extends Model implements IApp { - // TODO + /** + * @return int + */ + public function getId(): int + { + return $this->id; + } + + /** + * @return string + */ + public function getTitle(): string + { + return $this->title; + } + + /** + * @param string $title + */ + public function setTitle(string $title): void + { + $this->title = $title; + } + + /** + * @return array|null + */ + public function getExtra(): ?array + { + return $this->extra; + } + + /** + * @param array|null $extra + */ + public function setExtra(?array $extra): void + { + $this->extra = $extra; + } + + /** + * @return int|null + */ + public function getOwner(): ?int + { + return $this->owner; + } + + /** + * @param int|null $owner + */ + public function setOwner(?int $owner): void + { + $this->owner = $owner; + } + + /** + * @return string + */ + public function getOwnerIdColumn(): string + { + return $this->owner_id_column; + } + + /** + * @param string $OwnerIdColumn + */ + public function setOwnerIdColumn(string $OwnerIdColumn): void + { + $this->owner_id_column = $OwnerIdColumn; + } + + /** + * @return \DateTime + */ + public function getCreatedAt(): \DateTime + { + return $this->created_at; + } + + /** + * @return \DateTime + */ + public function getUpdatedAt(): \DateTime + { + return $this->updated_at; + } + + /** + * @return int|null + */ + public function getOwnerId(): ?int + { + return $this->getOwnerIdColumn(); + } } diff --git a/src/Models/Device.php b/src/Models/Device.php index 040813f..d39e295 100644 --- a/src/Models/Device.php +++ b/src/Models/Device.php @@ -3,8 +3,104 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; use dnj\ErrorTracker\Contracts\IDevice; +use Illuminate\Database\Eloquent\Model; +/** + * @property int id + * @property string|null title + * @property array|null extra + * @property int owner_id + * @property string owner_id_column + * @property \DateTime created_at + * @property \DateTime updated_at + */ class Device extends Model implements IDevice { - // TODO + /** + * @return int + */ + public function getId(): int + { + return $this->id; + } + + /** + * @return string|null + */ + public function getTitle(): ?string + { + return $this->title; + } + + /** + * @param string|null $title + * @return void + */ + public function setTitle(?string $title): void + { + $this->title = $title; + } + + /** + * @return array|array|null + */ + public function getExtra(): ?array + { + return $this->extra; + } + + /** + * @param string|null $extra + */ + public function setExtra(?string $extra): void + { + $this->extra = $extra; + } + + public function getOwnerId(): int + { + return $this->owner_id; + } + + /** + * @param int $owner_id + * @return void + */ + public function setOwnerId(int $owner_id): void + { + $this->owner_id = $owner_id; + } + + /** + * @return string + */ + public function getOwnerIdColumn(): string + { + return $this->owner_id_column; + } + + /** + * @param string $owner_id_column + * @return void + */ + public function setOwnerIdColumn(string $owner_id_column): void + { + $this->owner_id_column = $owner_id_column; + } + + /** + * @return \DateTime + */ + public function getCreatedAt(): \DateTime + { + return $this->created_at; + } + + /** + * @return \DateTime + */ + public function getUpdatedAt(): \DateTime + { + return $this->updated_at; + } } diff --git a/src/Models/Log.php b/src/Models/Log.php index e82bac4..3653ec0 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -3,8 +3,197 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; use dnj\ErrorTracker\Contracts\ILog; +use dnj\ErrorTracker\Contracts\LogLevel; +use Illuminate\Database\Eloquent\Model; + +/** + * @property int id + * @property int application_id + * @property int device_id + * @property int|null reader_user_id + * @property \DateTime|null read_at + * @property mixed level + * @property string message + * @property string|null date + * @property \DateTime created_at + * @property \DateTime updated_at + */ class Log extends Model implements ILog { - // TODO + /** + * @return int + */ + public function getId(): int + { + return $this->id; + } + + /** + * @param int $id + */ + public function setId(int $id): void + { + $this->id = $id; + } + + /** + * @return int + */ + public function getApplicationId(): int + { + return $this->application_id; + } + + /** + * @param int $application_id + */ + public function setApplicationId(int $application_id): void + { + $this->application_id = $application_id; + } + + /** + * @return int + */ + public function getDeviceId(): int + { + return $this->device_id; + } + + /** + * @param int $device_id + */ + public function setDeviceId(int $device_id): void + { + $this->device_id = $device_id; + } + + /** + * @return int|null + */ + public function getReaderUserId(): ?int + { + return $this->reader_user_id; + } + + /** + * @param int|null $reader_user_id + */ + public function setReaderUserId(?int $reader_user_id): void + { + $this->reader_user_id = $reader_user_id; + } + + /** + * @return \DateTime|null + */ + public function getReadAt(): ?\DateTime + { + return $this->read_at; + } + + /** + * @param \DateTime|null $read_at + */ + public function setReadAt(?\DateTime $read_at): void + { + $this->read_at = $read_at; + } + + /** + * @return mixed + */ + public function getLevel(): LogLevel + { + return $this->level; + } + + /** + * @param mixed $level + */ + public function setLevel(mixed $level): void + { + $this->level = $level; + } + + /** + * @return string + */ + public function getMessage(): string + { + return $this->message; + } + + /** + * @param string $message + */ + public function setMessage(string $message): void + { + $this->message = $message; + } + + /** + * @return string|null + */ + public function getDate(): ?string + { + return $this->date; + } + + /** + * @param string|null $date + */ + public function setDate(?string $date): void + { + $this->date = $date; + } + + /** + * @return \DateTime + */ + public function getCreatedAt(): \DateTime + { + return $this->created_at; + } + + /** + * @param \DateTime $created_at + */ + public function setCreatedAt(\DateTime $created_at): void + { + $this->created_at = $created_at; + } + + /** + * @return \DateTime + */ + public function getUpdatedAt(): \DateTime + { + return $this->updated_at; + } + + /** + * @param \DateTime $updated_at + */ + public function setUpdatedAt(\DateTime $updated_at): void + { + $this->updated_at = $updated_at; + } + + /** + * @return int + */ + public function getAppId(): int + { + return $this->getApplicationId(); + } + + /** + * @return array|mixed[]|null + */ + public function getData(): ?array + { + return $this->getData(); + } } From c5744d8f280e033e54a09af4cd42be73c1b37640 Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 30 Jan 2023 22:22:04 +0330 Subject: [PATCH 004/131] refactor migration --- .../2023_01_30_101602_create_applications_table.php | 4 ++-- .../2023_01_30_101610_create_logs_table.php | 13 ++++++++----- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/database/migrations/2023_01_30_101602_create_applications_table.php b/database/migrations/2023_01_30_101602_create_applications_table.php index fc9899a..9bb040b 100644 --- a/database/migrations/2023_01_30_101602_create_applications_table.php +++ b/database/migrations/2023_01_30_101602_create_applications_table.php @@ -10,7 +10,7 @@ */ public function up(): void { - Schema::create('applications', function (Blueprint $table) { + Schema::create('apps', function (Blueprint $table) { $table->id(); $table->string('title'); $table->json('extra'); @@ -25,6 +25,6 @@ public function up(): void */ public function down(): void { - Schema::dropIfExists('applications'); + Schema::dropIfExists('apps'); } }; diff --git a/database/migrations/2023_01_30_101610_create_logs_table.php b/database/migrations/2023_01_30_101610_create_logs_table.php index 90e8ea2..25c9962 100644 --- a/database/migrations/2023_01_30_101610_create_logs_table.php +++ b/database/migrations/2023_01_30_101610_create_logs_table.php @@ -1,6 +1,5 @@ id(); - $table->integer('application_id'); + $table->integer('app_id'); - $table->foreign('application_id') + $table->foreign('app_id') ->references('id') - ->on('applications') + ->on('apps') ->onUpdate('cascade') ->onDelete('cascade'); @@ -30,7 +29,11 @@ public function up(): void ->onDelete('cascade'); $table->dateTime('read_at')->nullable(); - $table->enum('level', LogLevel::cases()); + $table->enum('level', ['DEBUG', + 'INFO', + 'WARN', + 'ERROR', + 'FATAL', ]); $table->string('message'); $table->string('date')->nullable(); $table->timestamps(); From c6fe0aa282540efd14b5207430de4ddc8ef8afa6 Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 30 Jan 2023 22:22:15 +0330 Subject: [PATCH 005/131] refactor migration --- src/Models/App.php | 52 +++++++++++++--------------------------------- 1 file changed, 15 insertions(+), 37 deletions(-) diff --git a/src/Models/App.php b/src/Models/App.php index 7c47531..eb5762e 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -3,6 +3,9 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; use dnj\ErrorTracker\Contracts\IApp; +use dnj\ErrorTracker\Database\Factories\AppFactory; +use dnj\ErrorTracker\Laravel\Server\Kernel\DatabaseFilter\Traits\Filterable; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; /** @@ -16,99 +19,74 @@ */ class App extends Model implements IApp { - /** - * @return int - */ + use Filterable; + use HasFactory; + public function getId(): int { return $this->id; } - /** - * @return string - */ public function getTitle(): string { return $this->title; } - /** - * @param string $title - */ public function setTitle(string $title): void { $this->title = $title; } - /** - * @return array|null - */ public function getExtra(): ?array { return $this->extra; } - /** - * @param array|null $extra - */ public function setExtra(?array $extra): void { - $this->extra = $extra; + $this->extra = json_encode($extra); } - /** - * @return int|null - */ public function getOwner(): ?int { return $this->owner; } - /** - * @param int|null $owner - */ public function setOwner(?int $owner): void { $this->owner = $owner; } - /** - * @return string - */ public function getOwnerIdColumn(): string { return $this->owner_id_column; } - /** - * @param string $OwnerIdColumn - */ public function setOwnerIdColumn(string $OwnerIdColumn): void { $this->owner_id_column = $OwnerIdColumn; } - /** - * @return \DateTime - */ public function getCreatedAt(): \DateTime { return $this->created_at; } - /** - * @return \DateTime - */ public function getUpdatedAt(): \DateTime { return $this->updated_at; } - /** - * @return int|null - */ public function getOwnerId(): ?int { return $this->getOwnerIdColumn(); } + + /** + * @return AppFactory + */ + protected static function newFactory(): AppFactory + { + return AppFactory::new(); + } } From 6bd4e570ba7cfed2b27a32dea303935c627f1ac2 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:45:57 +0330 Subject: [PATCH 006/131] remove git keep. --- src/Http/Requests/.gitkeep | 1 - src/Http/Resources/.gitkeep | 1 - 2 files changed, 2 deletions(-) delete mode 100644 src/Http/Requests/.gitkeep delete mode 100644 src/Http/Resources/.gitkeep diff --git a/src/Http/Requests/.gitkeep b/src/Http/Requests/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/src/Http/Requests/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - diff --git a/src/Http/Resources/.gitkeep b/src/Http/Resources/.gitkeep deleted file mode 100644 index 8b13789..0000000 --- a/src/Http/Resources/.gitkeep +++ /dev/null @@ -1 +0,0 @@ - From f9c7a0a9922cec24772184ced6ae0c04c4331c11 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:46:12 +0330 Subject: [PATCH 007/131] improve migration --- .../2023_01_30_101602_create_applications_table.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/database/migrations/2023_01_30_101602_create_applications_table.php b/database/migrations/2023_01_30_101602_create_applications_table.php index 9bb040b..2336a94 100644 --- a/database/migrations/2023_01_30_101602_create_applications_table.php +++ b/database/migrations/2023_01_30_101602_create_applications_table.php @@ -13,9 +13,8 @@ public function up(): void Schema::create('apps', function (Blueprint $table) { $table->id(); $table->string('title'); - $table->json('extra'); - $table->integer('owner'); - $table->integer('owner_id_column'); + $table->json('extra')->nullable(); + $table->integer('owner')->nullable(); $table->timestamps(); }); } From 5d8e7dd76980b982d78cd33748b28e88d0b76688 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:46:26 +0330 Subject: [PATCH 008/131] make route for app --- routes/api.php | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/routes/api.php b/routes/api.php index 8c15e32..82818f5 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,8 +1,14 @@ group(function () { - // TODO + Route::group(['prefix' => 'app', 'as' => 'app.'], function () { + Route::get('/search', [AppController::class, 'search'])->name('search'); + Route::post('/store', [AppController::class, 'store'])->name('store'); + Route::put('/update/{id}', [AppController::class, 'update'])->name('update'); + Route::delete('/destroy/{id}', [AppController::class, 'destroy'])->name('destroy'); + }); }); From fa7f444f171cb382028299e97ee557bcc45fcc2e Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:46:48 +0330 Subject: [PATCH 009/131] fillable title at entity App --- src/Models/App.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Models/App.php b/src/Models/App.php index eb5762e..85fc465 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -22,6 +22,8 @@ class App extends Model implements IApp use Filterable; use HasFactory; + protected $fillable = ['title']; + public function getId(): int { return $this->id; From 14e1a38feb7740fb34d7b5fdbc00442be1305661 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:47:27 +0330 Subject: [PATCH 010/131] created factory for app, device, log --- database/factories/AppFactory.php | 22 +++++++++++++++++++++ database/factories/DeviceFactory.php | 29 ++++++++++++++++++++++++++++ database/factories/LogFactory.php | 22 +++++++++++++++++++++ 3 files changed, 73 insertions(+) diff --git a/database/factories/AppFactory.php b/database/factories/AppFactory.php index 8b13789..bd1c19d 100644 --- a/database/factories/AppFactory.php +++ b/database/factories/AppFactory.php @@ -1 +1,23 @@ + fake()->word, + 'extra' => serialize(fake()->words(3)), + 'owner' => rand(1, 10), +// 'owner_id_column' => fake()->name, + 'created_at' => fake()->dateTime, + 'updated_at' => fake()->dateTime, + ]; + } +} diff --git a/database/factories/DeviceFactory.php b/database/factories/DeviceFactory.php index 8b13789..0fbfab5 100644 --- a/database/factories/DeviceFactory.php +++ b/database/factories/DeviceFactory.php @@ -1 +1,30 @@ + fake()->word, + 'extra' => [], + 'owner_id' => null, + 'owner_id_column' => null, + 'created_at' => fake()->dateTime, + 'updated_at' => fake()->dateTime, + ]; + } + + public function withOwnerId(int $ownerId) + { + return $this->state(fn () => [ + 'owner_id' => $ownerId, + ]); + } +} diff --git a/database/factories/LogFactory.php b/database/factories/LogFactory.php index 8b13789..c43278f 100644 --- a/database/factories/LogFactory.php +++ b/database/factories/LogFactory.php @@ -1 +1,23 @@ + fake()->word, + 'extra' => [], + 'owner_id' => fake()->numberBetween(1, 20), + 'owner_id_column' => null, + 'created_at' => fake()->dateTime, + 'updated_at' => fake()->dateTime, + ]; + } +} From ef0543a8967715a0984260394d43ac19a67f998e Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:51:21 +0330 Subject: [PATCH 011/131] relocate managers --- src/AppManager.php | 10 ------ src/DeviceManager.php | 10 ------ src/LogManager.php | 10 ------ src/Managers/AppManager.php | 58 ++++++++++++++++++++++++++++++++++ src/Managers/DeviceManager.php | 30 ++++++++++++++++++ src/Managers/LogManager.php | 38 ++++++++++++++++++++++ 6 files changed, 126 insertions(+), 30 deletions(-) delete mode 100644 src/AppManager.php delete mode 100644 src/DeviceManager.php delete mode 100644 src/LogManager.php create mode 100644 src/Managers/AppManager.php create mode 100644 src/Managers/DeviceManager.php create mode 100644 src/Managers/LogManager.php diff --git a/src/AppManager.php b/src/AppManager.php deleted file mode 100644 index cdf4d1b..0000000 --- a/src/AppManager.php +++ /dev/null @@ -1,10 +0,0 @@ -get(); + } + + /** + * @param string $title + * @param array|null $extra + * @param int|null $owner + * @param bool $userActivityLog + * @return IApp + */ + public function store(string $title, ?array $extra = null, ?int $owner = null, bool $userActivityLog = false): IApp + { + $app = new App( + [ + 'title' => $title, + 'extra' => $extra, + 'owner' => $owner, + 'userActivityLog' => $userActivityLog, + ] + ); + + $app->save(); + + return $app; + } + + + public function update(int|IApp $app, array $changes, bool $userActivityLog = false): IApp + { + $model = App::query()->findOrFail($app); + $model->fill($changes); + $model->save(); + + return $model; + } + + public function destroy(int|IApp $app, bool $userActivityLog = false): void + { + $model = App::query()->findOrFail($app); + $model->delete(); + } +} diff --git a/src/Managers/DeviceManager.php b/src/Managers/DeviceManager.php new file mode 100644 index 0000000..7d7d2ae --- /dev/null +++ b/src/Managers/DeviceManager.php @@ -0,0 +1,30 @@ + Date: Tue, 31 Jan 2023 03:52:51 +0330 Subject: [PATCH 012/131] handle app controller --- src/Http/Controllers/AppController.php | 48 +++++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/Http/Controllers/AppController.php b/src/Http/Controllers/AppController.php index cebe9c2..069810f 100644 --- a/src/Http/Controllers/AppController.php +++ b/src/Http/Controllers/AppController.php @@ -3,11 +3,57 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; use dnj\ErrorTracker\Contracts\IAppManager; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\SearchRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\StoreRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\UpdateRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\App\SearchResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\App\StoreResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\App\UpdateResource; class AppController extends Controller { public function __construct(protected IAppManager $appManager) { } - // TODO + + public function search(SearchRequest $searchRequest): SearchResource + { + $search = $this->appManager->search($searchRequest->only( + [ + 'title', + 'owner', + 'user', + ] + )); + + return new SearchResource($search); + } + + public function store(StoreRequest $storeRequest): StoreResource + { + $store = $this->appManager->store( + $storeRequest->input('title'), + $storeRequest->input('extra'), + $storeRequest->input('owner'), + $storeRequest->input('userActivityLog'), + ); + + return StoreResource::make($store); + } + + public function update(int $id, UpdateRequest $updateRequest) + { + $update = $this->appManager->update($id, $updateRequest->validated(), true); + + return UpdateResource::make($update); + } + + /** + * @param int $id + * @return void + */ + public function destroy(int $id): void + { + $this->appManager->destroy($id); + } } From 9f117249d06a568f2eec24fee1561b5da6fece58 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:53:10 +0330 Subject: [PATCH 013/131] config factory and databases --- composer.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index fa923e4..eed5900 100644 --- a/composer.json +++ b/composer.json @@ -3,7 +3,13 @@ "license": "MIT", "autoload": { "psr-4": { - "dnj\\ErrorTracker\\Laravel\\Server\\": "src/" + "dnj\\ErrorTracker\\Laravel\\Server\\": "src/", + "dnj\\ErrorTracker\\Database\\Factories\\": "database/factories/" + } + }, + "autoload-dev": { + "psr-4": { + "dnj\\ErrorTracker\\Laravel\\Server\\Tests\\": "tests/" } }, "require": { From cb0e681c4198733546a9275c2a9cbff6e7ea3ea1 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:53:29 +0330 Subject: [PATCH 014/131] set db database on sqlite --- phpunit.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/phpunit.xml b/phpunit.xml index f0e1c89..2fa6b34 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -19,7 +19,7 @@ - + From fa726f6c1c65b15133d21c5a0a0428fb2bb75edd Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:53:57 +0330 Subject: [PATCH 015/131] write all test for app controller --- tests/Feature/AppManagerTest.php | 70 +++++++++++++++++++++++++++++++- 1 file changed, 68 insertions(+), 2 deletions(-) diff --git a/tests/Feature/AppManagerTest.php b/tests/Feature/AppManagerTest.php index b3661ad..60aa0f5 100644 --- a/tests/Feature/AppManagerTest.php +++ b/tests/Feature/AppManagerTest.php @@ -1,10 +1,76 @@ create(); + + $response = $this->get(route('app.search', ['title' => 'test', 'owner' => 1])); + + $response->assertStatus(ResponseAlias::HTTP_OK); // 200 + } + + /** + * @return void + */ + public function testUserCanStore(): void + { + $app = App::factory()->create(); + + $data = [ + 'title' => 'Test App', + 'extra' => ['test_key' => 'test_value'], + 'owner' => 1, + 'userActivityLog' => true, + ]; + + $this->postJson(route('app.store'), $data) + ->assertStatus(201) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + /** + * @return void + */ + public function testUpdateApp(): void + { + $app = App::factory()->create(); + + $changes = [ + 'title' => 'Test App edited', + 'extra' => ['test_key edited' => 'test_value edited'], + 'owner' => 3, + 'userActivityLog' => false, + ]; + + $this->putJson(route('app.update', ['id' => $app->id]), $changes) + ->assertStatus(ResponseAlias::HTTP_OK) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + /** + * @return void + */ + public function testDestroy(): void + { + $app = App::factory()->create(); + + $this->deleteJson(route('app.destroy', ['id' => $app->id])) + ->assertStatus(ResponseAlias::HTTP_OK); + } } From ba9bbc9443cd66995353543a33b7d0b2ae301fc8 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:55:03 +0330 Subject: [PATCH 016/131] improve models [log, device] --- src/Models/Device.php | 41 +++++++----------------- src/Models/Log.php | 72 +++++++------------------------------------ 2 files changed, 22 insertions(+), 91 deletions(-) diff --git a/src/Models/Device.php b/src/Models/Device.php index d39e295..5579833 100644 --- a/src/Models/Device.php +++ b/src/Models/Device.php @@ -3,6 +3,9 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; use dnj\ErrorTracker\Contracts\IDevice; +use dnj\ErrorTracker\Database\Factories\DeviceFactory; +use dnj\ErrorTracker\Laravel\Server\Kernel\DatabaseFilter\Traits\Filterable; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; /** @@ -16,26 +19,19 @@ */ class Device extends Model implements IDevice { - /** - * @return int - */ + use Filterable; + use HasFactory; + public function getId(): int { return $this->id; } - /** - * @return string|null - */ public function getTitle(): ?string { return $this->title; } - /** - * @param string|null $title - * @return void - */ public function setTitle(?string $title): void { $this->title = $title; @@ -49,9 +45,6 @@ public function getExtra(): ?array return $this->extra; } - /** - * @param string|null $extra - */ public function setExtra(?string $extra): void { $this->extra = $extra; @@ -62,45 +55,33 @@ public function getOwnerId(): int return $this->owner_id; } - /** - * @param int $owner_id - * @return void - */ public function setOwnerId(int $owner_id): void { $this->owner_id = $owner_id; } - /** - * @return string - */ public function getOwnerIdColumn(): string { return $this->owner_id_column; } - /** - * @param string $owner_id_column - * @return void - */ public function setOwnerIdColumn(string $owner_id_column): void { $this->owner_id_column = $owner_id_column; } - /** - * @return \DateTime - */ public function getCreatedAt(): \DateTime { return $this->created_at; } - /** - * @return \DateTime - */ public function getUpdatedAt(): \DateTime { return $this->updated_at; } + + protected static function newFactory(): DeviceFactory + { + return DeviceFactory::new(); + } } diff --git a/src/Models/Log.php b/src/Models/Log.php index 3653ec0..59e216f 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -4,9 +4,11 @@ use dnj\ErrorTracker\Contracts\ILog; use dnj\ErrorTracker\Contracts\LogLevel; +use dnj\ErrorTracker\Database\Factories\LogFactory; +use dnj\ErrorTracker\Laravel\Server\Kernel\DatabaseFilter\Traits\Filterable; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; - /** * @property int id * @property int application_id @@ -21,81 +23,54 @@ */ class Log extends Model implements ILog { - /** - * @return int - */ + use Filterable; + use HasFactory; + public function getId(): int { return $this->id; } - /** - * @param int $id - */ public function setId(int $id): void { $this->id = $id; } - /** - * @return int - */ public function getApplicationId(): int { return $this->application_id; } - /** - * @param int $application_id - */ public function setApplicationId(int $application_id): void { $this->application_id = $application_id; } - /** - * @return int - */ public function getDeviceId(): int { return $this->device_id; } - /** - * @param int $device_id - */ public function setDeviceId(int $device_id): void { $this->device_id = $device_id; } - /** - * @return int|null - */ public function getReaderUserId(): ?int { return $this->reader_user_id; } - /** - * @param int|null $reader_user_id - */ public function setReaderUserId(?int $reader_user_id): void { $this->reader_user_id = $reader_user_id; } - /** - * @return \DateTime|null - */ public function getReadAt(): ?\DateTime { return $this->read_at; } - /** - * @param \DateTime|null $read_at - */ public function setReadAt(?\DateTime $read_at): void { $this->read_at = $read_at; @@ -109,81 +84,51 @@ public function getLevel(): LogLevel return $this->level; } - /** - * @param mixed $level - */ public function setLevel(mixed $level): void { $this->level = $level; } - /** - * @return string - */ public function getMessage(): string { return $this->message; } - /** - * @param string $message - */ public function setMessage(string $message): void { $this->message = $message; } - /** - * @return string|null - */ public function getDate(): ?string { return $this->date; } - /** - * @param string|null $date - */ public function setDate(?string $date): void { $this->date = $date; } - /** - * @return \DateTime - */ public function getCreatedAt(): \DateTime { return $this->created_at; } - /** - * @param \DateTime $created_at - */ public function setCreatedAt(\DateTime $created_at): void { $this->created_at = $created_at; } - /** - * @return \DateTime - */ public function getUpdatedAt(): \DateTime { return $this->updated_at; } - /** - * @param \DateTime $updated_at - */ public function setUpdatedAt(\DateTime $updated_at): void { $this->updated_at = $updated_at; } - /** - * @return int - */ public function getAppId(): int { return $this->getApplicationId(); @@ -196,4 +141,9 @@ public function getData(): ?array { return $this->getData(); } + + protected static function newFactory(): LogFactory + { + return LogFactory::new(); + } } From 4133f6f92f6de95231218de884e3046bca3a7bfc Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:56:09 +0330 Subject: [PATCH 017/131] make database filter for all searches :D --- .../Abstract/FiltersAbstract.php | 23 ++++++++++++++ .../DatabaseFilter/Contract/App/Owner.php | 13 ++++++++ .../DatabaseFilter/Contract/App/Title.php | 13 ++++++++ .../DatabaseFilter/Contract/App/User.php | 13 ++++++++ .../DatabaseFilter/DatabaseFilterBuilder.php | 30 +++++++++++++++++++ .../DatabaseFilter/Traits/Filterable.php | 26 ++++++++++++++++ 6 files changed, 118 insertions(+) create mode 100644 src/Kernel/DatabaseFilter/Abstract/FiltersAbstract.php create mode 100644 src/Kernel/DatabaseFilter/Contract/App/Owner.php create mode 100644 src/Kernel/DatabaseFilter/Contract/App/Title.php create mode 100644 src/Kernel/DatabaseFilter/Contract/App/User.php create mode 100644 src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php create mode 100644 src/Kernel/DatabaseFilter/Traits/Filterable.php diff --git a/src/Kernel/DatabaseFilter/Abstract/FiltersAbstract.php b/src/Kernel/DatabaseFilter/Abstract/FiltersAbstract.php new file mode 100644 index 0000000..f6121ee --- /dev/null +++ b/src/Kernel/DatabaseFilter/Abstract/FiltersAbstract.php @@ -0,0 +1,23 @@ +attribute = $attribute; + + return $this; + } +} diff --git a/src/Kernel/DatabaseFilter/Contract/App/Owner.php b/src/Kernel/DatabaseFilter/Contract/App/Owner.php new file mode 100644 index 0000000..dccf841 --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/App/Owner.php @@ -0,0 +1,13 @@ +builder->where('owner', '=', $this->attribute); + } +} \ No newline at end of file diff --git a/src/Kernel/DatabaseFilter/Contract/App/Title.php b/src/Kernel/DatabaseFilter/Contract/App/Title.php new file mode 100644 index 0000000..a759405 --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/App/Title.php @@ -0,0 +1,13 @@ +builder->where('title', 'LIKE', '%'.$this->attribute.'%'); + } +} diff --git a/src/Kernel/DatabaseFilter/Contract/App/User.php b/src/Kernel/DatabaseFilter/Contract/App/User.php new file mode 100644 index 0000000..f9b264f --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/App/User.php @@ -0,0 +1,13 @@ +builder->where('user', 'LIKE', $this->attribute); + } +} \ No newline at end of file diff --git a/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php b/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php new file mode 100644 index 0000000..a1a2f76 --- /dev/null +++ b/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php @@ -0,0 +1,30 @@ +attributes as $key => $attribute) { + + $normalizeName = ucfirst(Str::camel($key)); + $className = sprintf('%s\\%s', $this->namespace, $normalizeName); + if (!class_exists($className)) { + throw new \Exception(); + } + $filterInstants = new $className($this->builder); + $filterInstants->setAttribute($attribute); + $filterInstants->handel(); + } + + return $this->builder; + } +} diff --git a/src/Kernel/DatabaseFilter/Traits/Filterable.php b/src/Kernel/DatabaseFilter/Traits/Filterable.php new file mode 100644 index 0000000..818ae5b --- /dev/null +++ b/src/Kernel/DatabaseFilter/Traits/Filterable.php @@ -0,0 +1,26 @@ +findContract(); + + return (new DatabaseFilterBuilder($builder, $attribute, $namespace))->build(); + } + + private function findContract(): string + { + return match (__CLASS__) { + App::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\App', + Device::class => '' + }; + } +} From f280dd0355a6eab4102b0fb9ea04846a48940ba2 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:56:20 +0330 Subject: [PATCH 018/131] fix typo --- src/ServiceProvider.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 2be9c80..b6a9903 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -5,9 +5,13 @@ use dnj\ErrorTracker\Contracts\IAppManager; use dnj\ErrorTracker\Contracts\IDeviceManager; use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Laravel\Server\Managers\AppManager; +use dnj\ErrorTracker\Laravel\Server\Managers\DeviceManager; +use dnj\ErrorTracker\Laravel\Server\Managers\LogManager; +use Illuminate\Support\Facades\Route; use Illuminate\Support\ServiceProvider as BaseServiceProvider; -class ServerProvider extends BaseServiceProvider +class ServiceProvider extends BaseServiceProvider { public function register() { From eb2d5422243b5b293c0a26a33d462af7ffdad9da Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:56:37 +0330 Subject: [PATCH 019/131] create search request --- src/Http/Requests/App/SearchRequest.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/Http/Requests/App/SearchRequest.php diff --git a/src/Http/Requests/App/SearchRequest.php b/src/Http/Requests/App/SearchRequest.php new file mode 100644 index 0000000..728356a --- /dev/null +++ b/src/Http/Requests/App/SearchRequest.php @@ -0,0 +1,17 @@ + ['string', 'nullable'], + 'owner' => ['int', 'nullable'], + 'user' => ['int', 'nullable'], + ]; + } +} From 926a970099bf4cab6f5bfbcf79ddb832814b404f Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:56:46 +0330 Subject: [PATCH 020/131] create update request --- src/Http/Requests/App/UpdateRequest.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/Http/Requests/App/UpdateRequest.php diff --git a/src/Http/Requests/App/UpdateRequest.php b/src/Http/Requests/App/UpdateRequest.php new file mode 100644 index 0000000..3e2c3c4 --- /dev/null +++ b/src/Http/Requests/App/UpdateRequest.php @@ -0,0 +1,21 @@ + ['string'], + 'extra' => ['array'], + 'owner' => ['integer'], + 'userActivityLog' => ['nullable', 'boolean'], + ]; + } +} \ No newline at end of file From c8d360ad45e1ffeca3b7fda508851baf49aeeda4 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:56:58 +0330 Subject: [PATCH 021/131] create store request --- src/Http/Requests/App/StoreRequest.php | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/Http/Requests/App/StoreRequest.php diff --git a/src/Http/Requests/App/StoreRequest.php b/src/Http/Requests/App/StoreRequest.php new file mode 100644 index 0000000..692b2cd --- /dev/null +++ b/src/Http/Requests/App/StoreRequest.php @@ -0,0 +1,21 @@ + ['required'], + 'extra' => ['nullable', 'array'], + 'owner' => ['nullable', 'integer'], + 'userActivityLog' => ['nullable', 'boolean'], + ]; + } +} \ No newline at end of file From 32170fdb92e04c92f2a12429de4c1c2ff8099159 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:57:13 +0330 Subject: [PATCH 022/131] create search resource --- src/Http/Resources/App/SearchResource.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/Http/Resources/App/SearchResource.php diff --git a/src/Http/Resources/App/SearchResource.php b/src/Http/Resources/App/SearchResource.php new file mode 100644 index 0000000..5420f6f --- /dev/null +++ b/src/Http/Resources/App/SearchResource.php @@ -0,0 +1,13 @@ + Date: Tue, 31 Jan 2023 03:57:19 +0330 Subject: [PATCH 023/131] create store resource --- src/Http/Resources/App/StoreResource.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/Http/Resources/App/StoreResource.php diff --git a/src/Http/Resources/App/StoreResource.php b/src/Http/Resources/App/StoreResource.php new file mode 100644 index 0000000..27542cf --- /dev/null +++ b/src/Http/Resources/App/StoreResource.php @@ -0,0 +1,13 @@ + Date: Tue, 31 Jan 2023 03:57:43 +0330 Subject: [PATCH 024/131] create update resource --- src/Http/Resources/App/UpdateResource.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/Http/Resources/App/UpdateResource.php diff --git a/src/Http/Resources/App/UpdateResource.php b/src/Http/Resources/App/UpdateResource.php new file mode 100644 index 0000000..acba64b --- /dev/null +++ b/src/Http/Resources/App/UpdateResource.php @@ -0,0 +1,13 @@ + Date: Tue, 31 Jan 2023 03:58:08 +0330 Subject: [PATCH 025/131] configure migration dir on test case --- tests/TestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/TestCase.php b/tests/TestCase.php index a095d45..0fb2f0a 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -25,6 +25,6 @@ protected function getPackageProviders($app) protected function defineDatabaseMigrations() { - $this->loadMigrationsFrom(__DIR__.'/migrations'); + $this->loadMigrationsFrom(__DIR__.'/../database/migrations'); } } From 1ce8550bd5bd55d08ce8e575f8c3709f4d69bd3d Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:58:57 +0330 Subject: [PATCH 026/131] set prefix value --- config/error-tracker.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/error-tracker.php b/config/error-tracker.php index cd4f5ea..b281bf3 100644 --- a/config/error-tracker.php +++ b/config/error-tracker.php @@ -6,6 +6,6 @@ 'routes' => [ 'enable' => true, - 'prefix' => '', + 'prefix' => 'log', ], ]; From 02442ba322158817a82e3d17f496fd16570fcd01 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 03:59:40 +0330 Subject: [PATCH 027/131] phpcs --- .../2023_01_30_101606_create_devices_table.php | 4 ---- src/Http/Controllers/AppController.php | 4 ---- src/Http/Requests/App/StoreRequest.php | 2 +- src/Http/Requests/App/UpdateRequest.php | 2 +- src/Http/Resources/App/SearchResource.php | 2 +- src/Kernel/DatabaseFilter/Contract/App/Owner.php | 2 +- src/Kernel/DatabaseFilter/Contract/App/User.php | 2 +- src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php | 1 - src/Managers/AppManager.php | 12 ------------ src/Models/App.php | 3 --- tests/Feature/AppManagerTest.php | 12 ------------ 11 files changed, 5 insertions(+), 41 deletions(-) diff --git a/database/migrations/2023_01_30_101606_create_devices_table.php b/database/migrations/2023_01_30_101606_create_devices_table.php index 3753037..84ae7ad 100644 --- a/database/migrations/2023_01_30_101606_create_devices_table.php +++ b/database/migrations/2023_01_30_101606_create_devices_table.php @@ -7,8 +7,6 @@ return new class() extends Migration { /** * Run the migrations. - * - * @return void */ public function up(): void { @@ -24,8 +22,6 @@ public function up(): void /** * Reverse the migrations. - * - * @return void */ public function down(): void { diff --git a/src/Http/Controllers/AppController.php b/src/Http/Controllers/AppController.php index 069810f..e6994af 100644 --- a/src/Http/Controllers/AppController.php +++ b/src/Http/Controllers/AppController.php @@ -48,10 +48,6 @@ public function update(int $id, UpdateRequest $updateRequest) return UpdateResource::make($update); } - /** - * @param int $id - * @return void - */ public function destroy(int $id): void { $this->appManager->destroy($id); diff --git a/src/Http/Requests/App/StoreRequest.php b/src/Http/Requests/App/StoreRequest.php index 692b2cd..78a9068 100644 --- a/src/Http/Requests/App/StoreRequest.php +++ b/src/Http/Requests/App/StoreRequest.php @@ -18,4 +18,4 @@ public function rules(): array 'userActivityLog' => ['nullable', 'boolean'], ]; } -} \ No newline at end of file +} diff --git a/src/Http/Requests/App/UpdateRequest.php b/src/Http/Requests/App/UpdateRequest.php index 3e2c3c4..9d9103b 100644 --- a/src/Http/Requests/App/UpdateRequest.php +++ b/src/Http/Requests/App/UpdateRequest.php @@ -18,4 +18,4 @@ public function rules(): array 'userActivityLog' => ['nullable', 'boolean'], ]; } -} \ No newline at end of file +} diff --git a/src/Http/Resources/App/SearchResource.php b/src/Http/Resources/App/SearchResource.php index 5420f6f..87c7cf8 100644 --- a/src/Http/Resources/App/SearchResource.php +++ b/src/Http/Resources/App/SearchResource.php @@ -10,4 +10,4 @@ public function toArray($request) { return parent::toArray($request); } -} \ No newline at end of file +} diff --git a/src/Kernel/DatabaseFilter/Contract/App/Owner.php b/src/Kernel/DatabaseFilter/Contract/App/Owner.php index dccf841..d64aaf0 100644 --- a/src/Kernel/DatabaseFilter/Contract/App/Owner.php +++ b/src/Kernel/DatabaseFilter/Contract/App/Owner.php @@ -10,4 +10,4 @@ public function handel() { $this->builder->where('owner', '=', $this->attribute); } -} \ No newline at end of file +} diff --git a/src/Kernel/DatabaseFilter/Contract/App/User.php b/src/Kernel/DatabaseFilter/Contract/App/User.php index f9b264f..1cd88bb 100644 --- a/src/Kernel/DatabaseFilter/Contract/App/User.php +++ b/src/Kernel/DatabaseFilter/Contract/App/User.php @@ -10,4 +10,4 @@ public function handel() { $this->builder->where('user', 'LIKE', $this->attribute); } -} \ No newline at end of file +} diff --git a/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php b/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php index a1a2f76..7989cbf 100644 --- a/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php +++ b/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php @@ -14,7 +14,6 @@ public function __construct(protected Builder $builder, protected array $attribu public function build(): Builder { foreach ($this->attributes as $key => $attribute) { - $normalizeName = ucfirst(Str::camel($key)); $className = sprintf('%s\\%s', $this->namespace, $normalizeName); if (!class_exists($className)) { diff --git a/src/Managers/AppManager.php b/src/Managers/AppManager.php index 864182b..688214a 100644 --- a/src/Managers/AppManager.php +++ b/src/Managers/AppManager.php @@ -8,22 +8,11 @@ class AppManager implements IAppManager { - /** - * @param array $filters - * @return iterable - */ public function search(array $filters): iterable { return App::filter($filters)->get(); } - /** - * @param string $title - * @param array|null $extra - * @param int|null $owner - * @param bool $userActivityLog - * @return IApp - */ public function store(string $title, ?array $extra = null, ?int $owner = null, bool $userActivityLog = false): IApp { $app = new App( @@ -40,7 +29,6 @@ public function store(string $title, ?array $extra = null, ?int $owner = null, b return $app; } - public function update(int|IApp $app, array $changes, bool $userActivityLog = false): IApp { $model = App::query()->findOrFail($app); diff --git a/src/Models/App.php b/src/Models/App.php index 85fc465..71093cb 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -84,9 +84,6 @@ public function getOwnerId(): ?int return $this->getOwnerIdColumn(); } - /** - * @return AppFactory - */ protected static function newFactory(): AppFactory { return AppFactory::new(); diff --git a/tests/Feature/AppManagerTest.php b/tests/Feature/AppManagerTest.php index 60aa0f5..e3b849e 100644 --- a/tests/Feature/AppManagerTest.php +++ b/tests/Feature/AppManagerTest.php @@ -9,9 +9,6 @@ class AppManagerTest extends TestCase { - /** - * @return void - */ public function testUserCanSearch(): void { App::factory(2)->create(); @@ -21,9 +18,6 @@ public function testUserCanSearch(): void $response->assertStatus(ResponseAlias::HTTP_OK); // 200 } - /** - * @return void - */ public function testUserCanStore(): void { $app = App::factory()->create(); @@ -42,9 +36,6 @@ public function testUserCanStore(): void }); } - /** - * @return void - */ public function testUpdateApp(): void { $app = App::factory()->create(); @@ -63,9 +54,6 @@ public function testUpdateApp(): void }); } - /** - * @return void - */ public function testDestroy(): void { $app = App::factory()->create(); From 75be204dd69a73c58a303b53e41b6b5a9425061c Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 15:42:32 +0330 Subject: [PATCH 028/131] improve api --- routes/api.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/routes/api.php b/routes/api.php index 82818f5..126ce2e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -1,6 +1,7 @@ name('update'); Route::delete('/destroy/{id}', [AppController::class, 'destroy'])->name('destroy'); }); + + Route::group(['prefix' => 'device', 'as' => 'device.'], function () { + Route::get('/search', [DeviceController::class, 'search'])->name('search'); + Route::post('/store', [DeviceController::class, 'store'])->name('store'); + Route::put('/update/{id}', [DeviceController::class, 'update'])->name('update'); + Route::delete('/destroy/{id}', [DeviceController::class, 'destroy'])->name('destroy'); + }); }); From e41a647c9633b128aaf00c628f1451283565c3ae Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 15:57:02 +0330 Subject: [PATCH 029/131] improve device migration --- .../2023_01_30_101606_create_devices_table.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/database/migrations/2023_01_30_101606_create_devices_table.php b/database/migrations/2023_01_30_101606_create_devices_table.php index 84ae7ad..4c4dd60 100644 --- a/database/migrations/2023_01_30_101606_create_devices_table.php +++ b/database/migrations/2023_01_30_101606_create_devices_table.php @@ -11,11 +11,11 @@ public function up(): void { Schema::create('devices', function (Blueprint $table) { - $table->id(); - $table->string('title')->nullable(); - $table->string('extra')->nullable(); - $table->integer('owner_id'); - $table->string('owner_id_column'); + $table->bigIncrements('id'); + $table->string('title'); + $table->json('extra')->nullable(); + $table->unsignedBigInteger('owner')->nullable(); + $table->boolean('user_activity_log')->default(false); $table->timestamps(); }); } From dbadcb1e3e8522dd46c9550fe9d105be7c55cc50 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 16:23:25 +0330 Subject: [PATCH 030/131] make title is fillable --- src/Models/Device.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Models/Device.php b/src/Models/Device.php index 5579833..734c7be 100644 --- a/src/Models/Device.php +++ b/src/Models/Device.php @@ -22,6 +22,8 @@ class Device extends Model implements IDevice use Filterable; use HasFactory; + protected $fillable = ['title']; + public function getId(): int { return $this->id; From 94390d88b12d7f6eca720f83efebd72af0f16bf3 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 16:23:49 +0330 Subject: [PATCH 031/131] write device controller crud --- src/Http/Controllers/DeviceController.php | 48 ++++++++++++++++++++++- 1 file changed, 47 insertions(+), 1 deletion(-) diff --git a/src/Http/Controllers/DeviceController.php b/src/Http/Controllers/DeviceController.php index 62d73ad..058c89f 100644 --- a/src/Http/Controllers/DeviceController.php +++ b/src/Http/Controllers/DeviceController.php @@ -3,11 +3,57 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; use dnj\ErrorTracker\Contracts\IDeviceManager; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\SearchRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\StoreRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\UpdateRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Device\SearchResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Device\StoreResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Device\UpdateResource; class DeviceController extends Controller { public function __construct(protected IDeviceManager $deviceManager) { } - // TODO + + /** + * @param SearchRequest $searchRequest + * @return SearchResource + */ + public function search(SearchRequest $searchRequest): SearchResource + { + $search = $this->deviceManager->search($searchRequest->only( + [ + 'title', + 'extra', + 'owner', + ] + )); + + return new SearchResource($search); + } + + public function store(StoreRequest $storeRequest): StoreResource + { + $store = $this->deviceManager->store( + $storeRequest->input('title'), + $storeRequest->input('extra'), + $storeRequest->input('owner'), + ); + + return StoreResource::make($store); + } + + public function update(int $id, UpdateRequest $updateRequest): UpdateResource + { + $update = $this->deviceManager->update($id, $updateRequest->validated(), false); + + return UpdateResource::make($update); + } + + public function destroy(int $id) + { + $this->deviceManager->destroy($id); + } + } From 78f9b614176aa978167b4be9bb03c65d5f6b0a67 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 16:24:03 +0330 Subject: [PATCH 032/131] improve factory --- database/factories/DeviceFactory.php | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/database/factories/DeviceFactory.php b/database/factories/DeviceFactory.php index 0fbfab5..7c6986d 100644 --- a/database/factories/DeviceFactory.php +++ b/database/factories/DeviceFactory.php @@ -13,18 +13,11 @@ public function definition(): array { return [ 'title' => fake()->word, - 'extra' => [], - 'owner_id' => null, - 'owner_id_column' => null, + 'extra' => serialize(fake()->words(3)), + 'owner' => rand(1, 5), 'created_at' => fake()->dateTime, 'updated_at' => fake()->dateTime, ]; } - public function withOwnerId(int $ownerId) - { - return $this->state(fn () => [ - 'owner_id' => $ownerId, - ]); - } } From 5917ebe6e855923c32159986fa27dc552bce790b Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 16:24:38 +0330 Subject: [PATCH 033/131] write device crud at device manager --- src/Managers/DeviceManager.php | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/src/Managers/DeviceManager.php b/src/Managers/DeviceManager.php index 7d7d2ae..a408a4b 100644 --- a/src/Managers/DeviceManager.php +++ b/src/Managers/DeviceManager.php @@ -4,27 +4,42 @@ use dnj\ErrorTracker\Contracts\IDevice; use dnj\ErrorTracker\Contracts\IDeviceManager; +use dnj\ErrorTracker\Laravel\Server\Models\Device; class DeviceManager implements IDeviceManager { - // TODO public function search(array $filters): iterable { - // TODO: Implement search() method. + return Device::filter($filters)->get(); } public function store(?string $title = null, ?array $extra = null, ?int $owner = null, bool $userActivityLog = false): IDevice { - // TODO: Implement store() method. + $device = new Device( + [ + 'title' => $title, + 'extra' => $extra, + 'owner' => $owner, + ] + ); + + $device->save(); + + return $device; } public function update(IDevice|int $device, array $changes, bool $userActivityLog = false): IDevice { - // TODO: Implement update() method. + $model = Device::query()->findOrFail($device); + $model->fill($changes); + $model->save(); + + return $model; } public function destroy(IDevice|int $device, bool $userActivityLog = false): void { - // TODO: Implement destroy() method. + $model = Device::query()->findOrFail($device); + $model->delete(); } } From 90000629a00333c31ebe44faca215d0f9c22262e Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 16:25:37 +0330 Subject: [PATCH 034/131] add empty doc swagger json file --- docs/doc.json | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 docs/doc.json diff --git a/docs/doc.json b/docs/doc.json new file mode 100644 index 0000000..b9788f2 --- /dev/null +++ b/docs/doc.json @@ -0,0 +1,15 @@ +{ + "openapi": "3.0.3", + "info": { + "title": "Title", + "description": "Title", + "version": "1.0.0" + }, + "servers": [ + { + "url": "https" + } + ], + "paths": { + } +} From 0989b327db23249eb37c1666ee3d5f325de8ff2c Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 16:43:01 +0330 Subject: [PATCH 035/131] make another contract for database filter :D --- .../DatabaseFilter/Contract/Device/Extra.php | 16 ++++++++++++++++ .../DatabaseFilter/Contract/Device/Owner.php | 16 ++++++++++++++++ .../DatabaseFilter/Contract/Device/Title.php | 14 ++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 src/Kernel/DatabaseFilter/Contract/Device/Extra.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Device/Owner.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Device/Title.php diff --git a/src/Kernel/DatabaseFilter/Contract/Device/Extra.php b/src/Kernel/DatabaseFilter/Contract/Device/Extra.php new file mode 100644 index 0000000..6212cdf --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Device/Extra.php @@ -0,0 +1,16 @@ +builder->where('extra', 'LIKE', '%'.$this->attribute.'%'); + } +} diff --git a/src/Kernel/DatabaseFilter/Contract/Device/Owner.php b/src/Kernel/DatabaseFilter/Contract/Device/Owner.php new file mode 100644 index 0000000..ec11650 --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Device/Owner.php @@ -0,0 +1,16 @@ +builder->where('owner', '=', $this->attribute); + } +} diff --git a/src/Kernel/DatabaseFilter/Contract/Device/Title.php b/src/Kernel/DatabaseFilter/Contract/Device/Title.php new file mode 100644 index 0000000..b3b015a --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Device/Title.php @@ -0,0 +1,14 @@ +builder->where('title', 'LIKE', '%'.$this->attribute.'%'); + } +} + From 2e39a4da569dd189043a6f80b6ce759c99f57fdb Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 16:43:14 +0330 Subject: [PATCH 036/131] fix typo --- tests/Feature/LogManagerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index bc78136..12d932a 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -1,6 +1,6 @@ Date: Tue, 31 Jan 2023 16:43:35 +0330 Subject: [PATCH 037/131] make new request validation for device --- src/Http/Requests/Device/SearchRequest.php | 17 +++++++++++++++++ src/Http/Requests/Device/UpdateRequest.php | 18 ++++++++++++++++++ src/Http/Resources/Device/StoreResource.php | 13 +++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 src/Http/Requests/Device/SearchRequest.php create mode 100644 src/Http/Requests/Device/UpdateRequest.php create mode 100644 src/Http/Resources/Device/StoreResource.php diff --git a/src/Http/Requests/Device/SearchRequest.php b/src/Http/Requests/Device/SearchRequest.php new file mode 100644 index 0000000..48f5c4d --- /dev/null +++ b/src/Http/Requests/Device/SearchRequest.php @@ -0,0 +1,17 @@ + ['string', 'nullable'], + 'extra' => ['int', 'array'], + 'owner' => ['int', 'nullable'], + ]; + } +} diff --git a/src/Http/Requests/Device/UpdateRequest.php b/src/Http/Requests/Device/UpdateRequest.php new file mode 100644 index 0000000..8c10ec8 --- /dev/null +++ b/src/Http/Requests/Device/UpdateRequest.php @@ -0,0 +1,18 @@ + ['string', 'required'], + 'extra' => ['array', 'nullable'], + 'owner' => ['integer', 'nullable'], + 'user_activity_log' => 'nullable|boolean', + ]; + } +} \ No newline at end of file diff --git a/src/Http/Resources/Device/StoreResource.php b/src/Http/Resources/Device/StoreResource.php new file mode 100644 index 0000000..58e63f0 --- /dev/null +++ b/src/Http/Resources/Device/StoreResource.php @@ -0,0 +1,13 @@ + Date: Tue, 31 Jan 2023 16:43:48 +0330 Subject: [PATCH 038/131] make new resource for device --- src/Http/Requests/Device/StoreRequest.php | 18 ++++++++++++++++++ src/Http/Resources/Device/SearchResource.php | 13 +++++++++++++ src/Http/Resources/Device/UpdateResource.php | 13 +++++++++++++ 3 files changed, 44 insertions(+) create mode 100644 src/Http/Requests/Device/StoreRequest.php create mode 100644 src/Http/Resources/Device/SearchResource.php create mode 100644 src/Http/Resources/Device/UpdateResource.php diff --git a/src/Http/Requests/Device/StoreRequest.php b/src/Http/Requests/Device/StoreRequest.php new file mode 100644 index 0000000..788f2a0 --- /dev/null +++ b/src/Http/Requests/Device/StoreRequest.php @@ -0,0 +1,18 @@ + ['string', 'required'], + 'extra' => ['array', 'nullable'], + 'owner' => ['integer', 'nullable'], + 'user_activity_log' => 'nullable|boolean', + ]; + } +} \ No newline at end of file diff --git a/src/Http/Resources/Device/SearchResource.php b/src/Http/Resources/Device/SearchResource.php new file mode 100644 index 0000000..49c17b9 --- /dev/null +++ b/src/Http/Resources/Device/SearchResource.php @@ -0,0 +1,13 @@ + Date: Tue, 31 Jan 2023 18:39:11 +0330 Subject: [PATCH 039/131] call class in Filterable.php --- src/Kernel/DatabaseFilter/Traits/Filterable.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Kernel/DatabaseFilter/Traits/Filterable.php b/src/Kernel/DatabaseFilter/Traits/Filterable.php index 818ae5b..a554a03 100644 --- a/src/Kernel/DatabaseFilter/Traits/Filterable.php +++ b/src/Kernel/DatabaseFilter/Traits/Filterable.php @@ -5,6 +5,7 @@ use dnj\ErrorTracker\Laravel\Server\Kernel\DatabaseFilter\DatabaseFilterBuilder; use dnj\ErrorTracker\Laravel\Server\Models\App; use dnj\ErrorTracker\Laravel\Server\Models\Device; +use dnj\ErrorTracker\Laravel\Server\Models\Log; use Illuminate\Database\Eloquent\Builder; trait Filterable @@ -20,7 +21,8 @@ private function findContract(): string { return match (__CLASS__) { App::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\App', - Device::class => '' + Device::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\Device', + Log::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\App\\Log', }; } } From 0dca2c3267b16344159f9fe0e65d48daf3d9bafd Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 18:40:57 +0330 Subject: [PATCH 040/131] make all test for device manager --- tests/Feature/DeviceManagerTest.php | 73 ++++++++++++++++++++++++++++- 1 file changed, 71 insertions(+), 2 deletions(-) diff --git a/tests/Feature/DeviceManagerTest.php b/tests/Feature/DeviceManagerTest.php index 28eca8f..5411093 100644 --- a/tests/Feature/DeviceManagerTest.php +++ b/tests/Feature/DeviceManagerTest.php @@ -1,10 +1,79 @@ create(); + + $response = $this->get(route('device.search', ['title' => 'asdasd'])); + + $response->assertStatus(ResponseAlias::HTTP_OK); + } + + public function testCanNotStore(): void + { + $data = [ + 'title' => 'Test App', + 'extra' => 1, + 'owner' => 1, + 'userActivityLog' => false, + ]; + + $this->postJson(route('device.store'), $data) + ->assertStatus(422) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + public function testCanStore(): void + { + $data = [ + 'title' => 'Test App', + 'extra' => ['test_key edited' => 'test_value edited'], + 'owner_id' => 1, + 'owner_id_column' => 1, + ]; + + $this->postJson(route('device.store'), $data) + ->assertStatus(201) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + + public function testCanUpdate() + { + $app = Device::factory()->create(); + + $changes = [ + 'title' => 'Test App edited', + 'extra' => ['test_key edited' => 'test_value edited'], + 'owner' => 3, + 'userActivityLog' => false, + ]; + + $this->putJson(route('device.update', ['id' => $app->id]), $changes) + ->assertStatus(ResponseAlias::HTTP_OK) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + public function testCanDestroy() + { + $app = Device::factory()->create(); + + $this->deleteJson(route('device.destroy', ['id' => $app->id])) + ->assertStatus(ResponseAlias::HTTP_OK); + } } From 10473a68aa9303e8010d93cbc1659e1c75508962 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 19:58:23 +0330 Subject: [PATCH 041/131] remove extra --- .../DatabaseFilter/Contract/Device/Extra.php | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 src/Kernel/DatabaseFilter/Contract/Device/Extra.php diff --git a/src/Kernel/DatabaseFilter/Contract/Device/Extra.php b/src/Kernel/DatabaseFilter/Contract/Device/Extra.php deleted file mode 100644 index 6212cdf..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Device/Extra.php +++ /dev/null @@ -1,16 +0,0 @@ -builder->where('extra', 'LIKE', '%'.$this->attribute.'%'); - } -} From 5255c1cc381b79f308493dfa2e34b0f3e3a5168c Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 19:58:36 +0330 Subject: [PATCH 042/131] improve migration --- .../2023_01_30_101610_create_logs_table.php | 34 ++++++------------- 1 file changed, 10 insertions(+), 24 deletions(-) diff --git a/database/migrations/2023_01_30_101610_create_logs_table.php b/database/migrations/2023_01_30_101610_create_logs_table.php index 25c9962..74cf08f 100644 --- a/database/migrations/2023_01_30_101610_create_logs_table.php +++ b/database/migrations/2023_01_30_101610_create_logs_table.php @@ -1,5 +1,6 @@ id(); - $table->integer('app_id'); - - $table->foreign('app_id') - ->references('id') - ->on('apps') - ->onUpdate('cascade') - ->onDelete('cascade'); - - $table->integer('device_id'); - - $table->foreign('device_id') - ->references('id') - ->on('devices') - ->onUpdate('cascade') - ->onDelete('cascade'); - - $table->dateTime('read_at')->nullable(); - $table->enum('level', ['DEBUG', - 'INFO', - 'WARN', - 'ERROR', - 'FATAL', ]); - $table->string('message'); - $table->string('date')->nullable(); + $table->unsignedBigInteger('app_id'); + $table->unsignedBigInteger('device_id'); + $table->enum('level', [LogLevelConstants::$statuses]); + $table->text('message'); + $table->json('data')->nullable(); + $table->boolean('read')->nullable(); $table->timestamps(); + + $table->foreign('app_id')->references('id')->on('apps'); + $table->foreign('device_id')->references('id')->on('devices'); }); } From 734a7aa32042202b15375a9b8c8549d33ea9f2ed Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 19:58:45 +0330 Subject: [PATCH 043/131] add route logs --- routes/api.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/routes/api.php b/routes/api.php index 126ce2e..9123ef1 100644 --- a/routes/api.php +++ b/routes/api.php @@ -2,10 +2,12 @@ use dnj\ErrorTracker\Laravel\Server\Http\Controllers\AppController; use dnj\ErrorTracker\Laravel\Server\Http\Controllers\DeviceController; +use dnj\ErrorTracker\Laravel\Server\Http\Controllers\LogController; use Illuminate\Routing\Middleware\SubstituteBindings; use Illuminate\Support\Facades\Route; Route::middleware(['api', SubstituteBindings::class])->group(function () { + Route::group(['prefix' => 'app', 'as' => 'app.'], function () { Route::get('/search', [AppController::class, 'search'])->name('search'); Route::post('/store', [AppController::class, 'store'])->name('store'); @@ -19,4 +21,10 @@ Route::put('/update/{id}', [DeviceController::class, 'update'])->name('update'); Route::delete('/destroy/{id}', [DeviceController::class, 'destroy'])->name('destroy'); }); + + Route::group(['prefix' => 'log', 'as' => 'log.'], function () { + Route::get('/search', [LogController::class, 'search'])->name('search'); + Route::post('/store', [LogController::class, 'store'])->name('store'); + Route::delete('/destroy/{id}', [LogController::class, 'destroy'])->name('destroy'); + }); }); From 037454eb2ca2d3072cac09b1e366a8042ef8d6ac Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 19:59:13 +0330 Subject: [PATCH 044/131] improve App factory --- database/factories/AppFactory.php | 1 - 1 file changed, 1 deletion(-) diff --git a/database/factories/AppFactory.php b/database/factories/AppFactory.php index bd1c19d..9c8d13d 100644 --- a/database/factories/AppFactory.php +++ b/database/factories/AppFactory.php @@ -15,7 +15,6 @@ public function definition(): array 'title' => fake()->word, 'extra' => serialize(fake()->words(3)), 'owner' => rand(1, 10), -// 'owner_id_column' => fake()->name, 'created_at' => fake()->dateTime, 'updated_at' => fake()->dateTime, ]; From dfd9cec0bc543dfdb2553460533aa74fd5b87629 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:00:13 +0330 Subject: [PATCH 045/131] add database filter contracts --- src/Constants/LogLevelConstants.php | 40 +++++++++++++++++++ .../DatabaseFilter/Contract/Device/User.php | 13 ++++++ .../DatabaseFilter/Contract/Log/Apps.php | 16 ++++++++ .../DatabaseFilter/Contract/Log/Devices.php | 13 ++++++ .../DatabaseFilter/Contract/Log/Levels.php | 13 ++++++ .../DatabaseFilter/Contract/Log/Message.php | 13 ++++++ .../DatabaseFilter/Contract/Log/Unread.php | 13 ++++++ .../DatabaseFilter/Contract/Log/User.php | 13 ++++++ 8 files changed, 134 insertions(+) create mode 100644 src/Constants/LogLevelConstants.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Device/User.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Apps.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Devices.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Levels.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Message.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Unread.php create mode 100644 src/Kernel/DatabaseFilter/Contract/Log/User.php diff --git a/src/Constants/LogLevelConstants.php b/src/Constants/LogLevelConstants.php new file mode 100644 index 0000000..b843304 --- /dev/null +++ b/src/Constants/LogLevelConstants.php @@ -0,0 +1,40 @@ +builder->where('user', '=', $this->attribute); + } +} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Apps.php b/src/Kernel/DatabaseFilter/Contract/Log/Apps.php new file mode 100644 index 0000000..44d1cfe --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Log/Apps.php @@ -0,0 +1,16 @@ +builder->whereIn('app_id', $this->attribute); + } +} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Devices.php b/src/Kernel/DatabaseFilter/Contract/Log/Devices.php new file mode 100644 index 0000000..c0bc5b1 --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Log/Devices.php @@ -0,0 +1,13 @@ +builder->whereIn('device_id', $this->attribute); + } +} \ No newline at end of file diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Levels.php b/src/Kernel/DatabaseFilter/Contract/Log/Levels.php new file mode 100644 index 0000000..9334dfd --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Log/Levels.php @@ -0,0 +1,13 @@ +builder->whereIn('level', $this->attribute); + } +} \ No newline at end of file diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Message.php b/src/Kernel/DatabaseFilter/Contract/Log/Message.php new file mode 100644 index 0000000..a9f63c7 --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Log/Message.php @@ -0,0 +1,13 @@ +builder->where('message', 'LIKE', '%'.$this->attribute.'%'); + } +} \ No newline at end of file diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Unread.php b/src/Kernel/DatabaseFilter/Contract/Log/Unread.php new file mode 100644 index 0000000..43446d7 --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Log/Unread.php @@ -0,0 +1,13 @@ +builder->where('unread', '=', $this->attribute); + } +} \ No newline at end of file diff --git a/src/Kernel/DatabaseFilter/Contract/Log/User.php b/src/Kernel/DatabaseFilter/Contract/Log/User.php new file mode 100644 index 0000000..10b7eab --- /dev/null +++ b/src/Kernel/DatabaseFilter/Contract/Log/User.php @@ -0,0 +1,13 @@ +builder->where('user', '=', $this->attribute); + } +} \ No newline at end of file From f74aa0922da573d2cfd70b910413c661783bf37f Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:00:28 +0330 Subject: [PATCH 046/131] improve DeviceController.php --- src/Http/Controllers/DeviceController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Controllers/DeviceController.php b/src/Http/Controllers/DeviceController.php index 058c89f..60212f6 100644 --- a/src/Http/Controllers/DeviceController.php +++ b/src/Http/Controllers/DeviceController.php @@ -25,7 +25,7 @@ public function search(SearchRequest $searchRequest): SearchResource $search = $this->deviceManager->search($searchRequest->only( [ 'title', - 'extra', + 'user', 'owner', ] )); From 5335255e9b1bdb8a78e5ba47dc89b4909e435a5f Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:00:39 +0330 Subject: [PATCH 047/131] improve Filterable.php --- src/Kernel/DatabaseFilter/Traits/Filterable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Kernel/DatabaseFilter/Traits/Filterable.php b/src/Kernel/DatabaseFilter/Traits/Filterable.php index a554a03..5de418f 100644 --- a/src/Kernel/DatabaseFilter/Traits/Filterable.php +++ b/src/Kernel/DatabaseFilter/Traits/Filterable.php @@ -22,7 +22,7 @@ private function findContract(): string return match (__CLASS__) { App::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\App', Device::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\Device', - Log::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\App\\Log', + Log::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\Log', }; } } From 511d660a809747c69ff8015cee22163ac4862023 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:00:48 +0330 Subject: [PATCH 048/131] improve Log --- src/Models/Log.php | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/src/Models/Log.php b/src/Models/Log.php index 59e216f..3ad5003 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -11,7 +11,7 @@ /** * @property int id - * @property int application_id + * @property int app_id * @property int device_id * @property int|null reader_user_id * @property \DateTime|null read_at @@ -114,21 +114,11 @@ public function getCreatedAt(): \DateTime return $this->created_at; } - public function setCreatedAt(\DateTime $created_at): void - { - $this->created_at = $created_at; - } - public function getUpdatedAt(): \DateTime { return $this->updated_at; } - public function setUpdatedAt(\DateTime $updated_at): void - { - $this->updated_at = $updated_at; - } - public function getAppId(): int { return $this->getApplicationId(); From 5cd83e1954aa36db9a984a881d72bcaca37a203c Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:00:57 +0330 Subject: [PATCH 049/131] improve log factory --- database/factories/LogFactory.php | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/database/factories/LogFactory.php b/database/factories/LogFactory.php index c43278f..49d80fe 100644 --- a/database/factories/LogFactory.php +++ b/database/factories/LogFactory.php @@ -2,6 +2,9 @@ namespace dnj\ErrorTracker\Database\Factories; +use dnj\ErrorTracker\Laravel\Server\Constants\LogLevelConstants; +use dnj\ErrorTracker\Laravel\Server\Models\App; +use dnj\ErrorTracker\Laravel\Server\Models\Device; use dnj\ErrorTracker\Laravel\Server\Models\Log; use Illuminate\Database\Eloquent\Factories\Factory; @@ -11,13 +14,16 @@ class LogFactory extends Factory public function definition(): array { + $app = App::factory(1)->create(); + $device = Device::factory(1)->create(); + return [ - 'title' => fake()->word, - 'extra' => [], - 'owner_id' => fake()->numberBetween(1, 20), - 'owner_id_column' => null, - 'created_at' => fake()->dateTime, - 'updated_at' => fake()->dateTime, + 'app_id' => $app[0]->id, + 'device_id' => $device[0]->id, + 'level' => fake()->randomElement(LogLevelConstants::$statuses), + 'message' => fake()->sentence, + 'data' => json_encode(fake()->sentences(3)), + 'read' => fake()->boolean, ]; } } From bcf27e4b8356eb9a336b3a16a8533a97e21f3f70 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:52:42 +0330 Subject: [PATCH 050/131] improve search request at device --- src/Http/Requests/Device/SearchRequest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Requests/Device/SearchRequest.php b/src/Http/Requests/Device/SearchRequest.php index 48f5c4d..c50059c 100644 --- a/src/Http/Requests/Device/SearchRequest.php +++ b/src/Http/Requests/Device/SearchRequest.php @@ -10,7 +10,7 @@ public function rules(): array { return [ 'title' => ['string', 'nullable'], - 'extra' => ['int', 'array'], + 'user' => ['int', 'nullable'], 'owner' => ['int', 'nullable'], ]; } From 3d6388fad4980fd24ceafa540512d611255700d3 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:52:54 +0330 Subject: [PATCH 051/131] add search request for log --- src/Http/Requests/Log/SearchRequest.php | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/Http/Requests/Log/SearchRequest.php diff --git a/src/Http/Requests/Log/SearchRequest.php b/src/Http/Requests/Log/SearchRequest.php new file mode 100644 index 0000000..900cfcc --- /dev/null +++ b/src/Http/Requests/Log/SearchRequest.php @@ -0,0 +1,27 @@ + ['array', 'nullable'], + 'apps.*' => ['exists:apps,id'], + + 'devices' => ['array', 'nullable'], + 'devices.*' => ['exists:devices,id'], + + 'levels' => ['array', 'nullable'], + 'levels.*' => sprintf('in:%s', implode(',', LogLevelConstants::$statuses)), + + 'message' => ['string', 'nullable'], + 'unread' => ['bool', 'nullable'], + 'user' => ['int', 'nullable'], + ]; + } +} \ No newline at end of file From 74c1320466d0d2a9ede56670ab0dc82ae1b2c9c8 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:53:00 +0330 Subject: [PATCH 052/131] add search resource for log --- src/Http/Resources/Log/SearchResource.php | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/Http/Resources/Log/SearchResource.php diff --git a/src/Http/Resources/Log/SearchResource.php b/src/Http/Resources/Log/SearchResource.php new file mode 100644 index 0000000..470d870 --- /dev/null +++ b/src/Http/Resources/Log/SearchResource.php @@ -0,0 +1,13 @@ + Date: Tue, 31 Jan 2023 20:53:07 +0330 Subject: [PATCH 053/131] fix bug --- src/Kernel/DatabaseFilter/Contract/App/User.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Kernel/DatabaseFilter/Contract/App/User.php b/src/Kernel/DatabaseFilter/Contract/App/User.php index 1cd88bb..68cdd53 100644 --- a/src/Kernel/DatabaseFilter/Contract/App/User.php +++ b/src/Kernel/DatabaseFilter/Contract/App/User.php @@ -8,6 +8,6 @@ class User extends FiltersAbstract { public function handel() { - $this->builder->where('user', 'LIKE', $this->attribute); + $this->builder->where('user', '=', $this->attribute); } } From f6cc65c831a0c125b6355e87f91717233bdc1913 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:54:00 +0330 Subject: [PATCH 054/131] written log search and destroy test --- tests/Feature/LogManagerTest.php | 34 +++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index 12d932a..66acc15 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -2,9 +2,41 @@ namespace dnj\ErrorTracker\Laravel\Server\Tests\Feature; +use dnj\ErrorTracker\Laravel\Server\Constants\LogLevelConstants; +use dnj\ErrorTracker\Laravel\Server\Models\Log; use dnj\ErrorTracker\Laravel\Server\Tests\TestCase; +use Illuminate\Testing\Fluent\AssertableJson; +use Symfony\Component\HttpFoundation\Response as ResponseAlias; class LogManagerTest extends TestCase { - // TODO + public function testLogSearch() + { + Log::factory(2)->create(); + + $response = $this->get(route('log.search', + [ + 'apps' => [1], + 'devices' => [1], + 'levels' => [LogLevelConstants::INFO], + 'message' => 'test', + 'unread' => true, + // 'user' => '', + ] + )); + + $response->assertStatus(ResponseAlias::HTTP_OK) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + public function testCanDestroy() + { + $app = Log::factory()->create(); + + $this->deleteJson(route('device.destroy', ['id' => $app->id])) + ->assertStatus(ResponseAlias::HTTP_OK); + } + } From d8e379b788d449e18e700d12f441b589644af6fe Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:54:38 +0330 Subject: [PATCH 055/131] handle search to log manager --- src/Managers/LogManager.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/Managers/LogManager.php b/src/Managers/LogManager.php index 01c3181..20a2cc2 100644 --- a/src/Managers/LogManager.php +++ b/src/Managers/LogManager.php @@ -7,13 +7,13 @@ use dnj\ErrorTracker\Contracts\ILog; use dnj\ErrorTracker\Contracts\ILogManager; use dnj\ErrorTracker\Contracts\LogLevel; +use dnj\ErrorTracker\Laravel\Server\Models\Log; class LogManager implements ILogManager { - // TODO public function search(array $filters): iterable { - // TODO: Implement search() method. + return Log::filter($filters)->get(); } public function store(int|IApp $app, IDevice|int $device, LogLevel $level, string $message, ?array $data = null, ?array $read = null, bool $userActivityLog = false): ILog @@ -33,6 +33,7 @@ public function markAsUnread(ILog|int $log, bool $userActivityLog = false): ILog public function destroy(ILog|int $log, bool $userActivityLog = false): void { - // TODO: Implement destroy() method. + $model = Log::query()->findOrFail($log); + $model->delete(); } } From 2bd641bc2f5ec2a9f8df98047618a94361700372 Mon Sep 17 00:00:00 2001 From: amirhf Date: Tue, 31 Jan 2023 20:55:11 +0330 Subject: [PATCH 056/131] call search function and destroy from log manager --- src/Http/Controllers/LogController.php | 42 +++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index 1f77925..ac75b7d 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -3,11 +3,51 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\SearchRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\SearchResource; class LogController extends Controller { public function __construct(protected ILogManager $logManager) { } - // TODO + + public function search(SearchRequest $searchRequest) + { + + $search = $this->logManager->search($searchRequest->only( + [ + 'apps', + 'devices', + 'levels', + 'message', + 'unread', + 'user', + ] + )); + + return new SearchResource($search); + } + + public function store() + { + + } + + public function markAsRead() + { + + } + + public function markAsUnRead() + { + + } + + public function destroy(int $id) + { + $this->logManager->destroy($id); + } + + } From 718685015defc4432d245cc3ad62e6086fc4a9b4 Mon Sep 17 00:00:00 2001 From: amirhf Date: Wed, 1 Feb 2023 20:12:43 +0330 Subject: [PATCH 057/131] remove log constant --- src/Constants/LogLevelConstants.php | 40 ----------------------------- 1 file changed, 40 deletions(-) delete mode 100644 src/Constants/LogLevelConstants.php diff --git a/src/Constants/LogLevelConstants.php b/src/Constants/LogLevelConstants.php deleted file mode 100644 index b843304..0000000 --- a/src/Constants/LogLevelConstants.php +++ /dev/null @@ -1,40 +0,0 @@ - Date: Wed, 1 Feb 2023 20:13:34 +0330 Subject: [PATCH 058/131] add helper function for get value Log level --- composer.json | 5 ++++- src/Helpers/helpers.php | 12 ++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 src/Helpers/helpers.php diff --git a/composer.json b/composer.json index eed5900..40cca37 100644 --- a/composer.json +++ b/composer.json @@ -5,7 +5,10 @@ "psr-4": { "dnj\\ErrorTracker\\Laravel\\Server\\": "src/", "dnj\\ErrorTracker\\Database\\Factories\\": "database/factories/" - } + }, + "files": [ + "src/Helpers/helpers.php" + ] }, "autoload-dev": { "psr-4": { diff --git a/src/Helpers/helpers.php b/src/Helpers/helpers.php new file mode 100644 index 0000000..4ecc6b4 --- /dev/null +++ b/src/Helpers/helpers.php @@ -0,0 +1,12 @@ +name; + } + return $result; + } +} From 460f746786dedf42fa56befabbef199dfaf39348 Mon Sep 17 00:00:00 2001 From: amirhf Date: Wed, 1 Feb 2023 20:13:51 +0330 Subject: [PATCH 059/131] fix bug and improve migration --- .../2023_01_30_101610_create_logs_table.php | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/database/migrations/2023_01_30_101610_create_logs_table.php b/database/migrations/2023_01_30_101610_create_logs_table.php index 74cf08f..291ce15 100644 --- a/database/migrations/2023_01_30_101610_create_logs_table.php +++ b/database/migrations/2023_01_30_101610_create_logs_table.php @@ -1,6 +1,6 @@ id(); - $table->unsignedBigInteger('app_id'); - $table->unsignedBigInteger('device_id'); - $table->enum('level', [LogLevelConstants::$statuses]); + $table->enum('level', getEnumValues(LogLevel::cases())); $table->text('message'); $table->json('data')->nullable(); - $table->boolean('read')->nullable(); - $table->timestamps(); + $table->json('read')->nullable(); - $table->foreign('app_id')->references('id')->on('apps'); - $table->foreign('device_id')->references('id')->on('devices'); + $table->foreignId('app_id')->constrained('apps'); + $table->foreignId('device_id')->constrained('devices'); + $table->timestamps(); }); } From b7e90cbf377844e63e8bbcfce748e2d5480a4669 Mon Sep 17 00:00:00 2001 From: amirhf Date: Wed, 1 Feb 2023 20:15:05 +0330 Subject: [PATCH 060/131] improve log model --- src/Models/Log.php | 65 +++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 33 deletions(-) diff --git a/src/Models/Log.php b/src/Models/Log.php index 3ad5003..69f942f 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -2,6 +2,7 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; +use Carbon\Carbon; use dnj\ErrorTracker\Contracts\ILog; use dnj\ErrorTracker\Contracts\LogLevel; use dnj\ErrorTracker\Database\Factories\LogFactory; @@ -13,11 +14,10 @@ * @property int id * @property int app_id * @property int device_id - * @property int|null reader_user_id - * @property \DateTime|null read_at + * @property array|null read * @property mixed level * @property string message - * @property string|null date + * @property string|null data * @property \DateTime created_at * @property \DateTime updated_at */ @@ -31,19 +31,16 @@ public function getId(): int return $this->id; } - public function setId(int $id): void + public function getRead(): array { - $this->id = $id; + return $this->read; } - public function getApplicationId(): int + public function setRead(array|null $read): Log { - return $this->application_id; - } + $this->read = json_encode($read); - public function setApplicationId(int $application_id): void - { - $this->application_id = $application_id; + return $this; } public function getDeviceId(): int @@ -51,29 +48,23 @@ public function getDeviceId(): int return $this->device_id; } - public function setDeviceId(int $device_id): void + public function setDeviceId(int $device_id): Log { $this->device_id = $device_id; - } - public function getReaderUserId(): ?int - { - return $this->reader_user_id; + return $this; } - public function setReaderUserId(?int $reader_user_id): void + public function getReaderUserId(): ?int { - $this->reader_user_id = $reader_user_id; + return optional(json_decode($this->read))->userId; } public function getReadAt(): ?\DateTime { - return $this->read_at; - } + $readAt = optional(json_decode($this->read))->readAt; - public function setReadAt(?\DateTime $read_at): void - { - $this->read_at = $read_at; + return $readAt ? Carbon::make($readAt) : $readAt; } /** @@ -84,9 +75,11 @@ public function getLevel(): LogLevel return $this->level; } - public function setLevel(mixed $level): void + public function setLevel(mixed $level): Log { $this->level = $level; + + return $this; } public function getMessage(): string @@ -94,19 +87,23 @@ public function getMessage(): string return $this->message; } - public function setMessage(string $message): void + public function setMessage(string $message): Log { $this->message = $message; + + return $this; } - public function getDate(): ?string + public function getData(): ?array { - return $this->date; + return json_decode($this->data); } - public function setDate(?string $date): void + public function setData(?string $data): Log { - $this->date = $date; + $this->data = $data; + + return $this; } public function getCreatedAt(): \DateTime @@ -121,15 +118,17 @@ public function getUpdatedAt(): \DateTime public function getAppId(): int { - return $this->getApplicationId(); + return $this->app_id; } /** - * @return array|mixed[]|null + * @param int $app_id */ - public function getData(): ?array + public function setAppId(int $app_id): Log { - return $this->getData(); + $this->app_id = $app_id; + + return $this; } protected static function newFactory(): LogFactory From 9f072b808f7166d08c6c477c35fd3b915173e585 Mon Sep 17 00:00:00 2001 From: amirhf Date: Wed, 1 Feb 2023 20:15:22 +0330 Subject: [PATCH 061/131] improve log factory --- database/factories/LogFactory.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/database/factories/LogFactory.php b/database/factories/LogFactory.php index 49d80fe..8b58d1e 100644 --- a/database/factories/LogFactory.php +++ b/database/factories/LogFactory.php @@ -2,7 +2,7 @@ namespace dnj\ErrorTracker\Database\Factories; -use dnj\ErrorTracker\Laravel\Server\Constants\LogLevelConstants; +use dnj\ErrorTracker\Contracts\LogLevel; use dnj\ErrorTracker\Laravel\Server\Models\App; use dnj\ErrorTracker\Laravel\Server\Models\Device; use dnj\ErrorTracker\Laravel\Server\Models\Log; @@ -20,9 +20,9 @@ public function definition(): array return [ 'app_id' => $app[0]->id, 'device_id' => $device[0]->id, - 'level' => fake()->randomElement(LogLevelConstants::$statuses), + 'level' => fake()->randomElement(LogLevel::cases()), 'message' => fake()->sentence, - 'data' => json_encode(fake()->sentences(3)), + 'data' => json_encode([fake()->words(3)]), 'read' => fake()->boolean, ]; } From 0c28c178b0e654093e01d4bd90397ecb1d8af6ed Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 01:10:12 +0330 Subject: [PATCH 062/131] create store log section --- src/Http/Controllers/LogController.php | 24 +++++++++++++++++++----- src/Http/Requests/Log/StoreRequest.php | 21 +++++++++++++++++++++ src/Http/Resources/Log/StoreResource.php | 13 +++++++++++++ src/Managers/LogManager.php | 13 ++++++++++++- 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 src/Http/Requests/Log/StoreRequest.php create mode 100644 src/Http/Resources/Log/StoreResource.php diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index ac75b7d..b85639b 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -3,8 +3,11 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Contracts\LogLevel; use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\SearchRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\StoreRequest; use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\SearchResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\StoreResource; class LogController extends Controller { @@ -14,7 +17,6 @@ public function __construct(protected ILogManager $logManager) public function search(SearchRequest $searchRequest) { - $search = $this->logManager->search($searchRequest->only( [ 'apps', @@ -29,9 +31,24 @@ public function search(SearchRequest $searchRequest) return new SearchResource($search); } - public function store() + public function store(StoreRequest $storeRequest): StoreResource { + $value = null; + foreach (LogLevel::cases() as $case) { + if ($case->name == $storeRequest->input('level')) { + $value = $case; + } + } + $log = $this->logManager->store( + $storeRequest->input('app'), + $storeRequest->input('device'), + $value, + $storeRequest->input('message'), + $storeRequest->input('data'), + $storeRequest->input('read'), + ); + return StoreResource::make($log); } public function markAsRead() @@ -41,13 +58,10 @@ public function markAsRead() public function markAsUnRead() { - } public function destroy(int $id) { $this->logManager->destroy($id); } - - } diff --git a/src/Http/Requests/Log/StoreRequest.php b/src/Http/Requests/Log/StoreRequest.php new file mode 100644 index 0000000..61a55d1 --- /dev/null +++ b/src/Http/Requests/Log/StoreRequest.php @@ -0,0 +1,21 @@ + ['integer', 'required'], + 'device' => ['integer', 'required'], + 'level' => ['required', 'in:'.implode(',', getEnumValues(LogLevel::cases()))], + 'message' => ['string', 'required'], + 'data' => ['array', 'nullable'], + 'read' => ['array', 'nullable'], + ]; + } +} diff --git a/src/Http/Resources/Log/StoreResource.php b/src/Http/Resources/Log/StoreResource.php new file mode 100644 index 0000000..acccb08 --- /dev/null +++ b/src/Http/Resources/Log/StoreResource.php @@ -0,0 +1,13 @@ +setRead($read); + $model->setAppId($app); + $model->setLevel($level->name); + $model->setMessage($message); + $model->setDeviceId($device); + $model->setData($device); + + $model->save(); + + return $model; } public function markAsRead(ILog|int $log, ?int $userId = null, ?\DateTimeInterface $readAt = null, bool $userActivityLog = false): ILog From cff189cc908a9d86c9996971a83678458d921820 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 01:11:28 +0330 Subject: [PATCH 063/131] write test for store section --- tests/Feature/LogManagerTest.php | 51 ++++++++++++++++++++++++++++---- 1 file changed, 45 insertions(+), 6 deletions(-) diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index 66acc15..18fc157 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -2,7 +2,10 @@ namespace dnj\ErrorTracker\Laravel\Server\Tests\Feature; -use dnj\ErrorTracker\Laravel\Server\Constants\LogLevelConstants; +use Carbon\Carbon; +use dnj\ErrorTracker\Contracts\LogLevel; +use dnj\ErrorTracker\Laravel\Server\Models\App; +use dnj\ErrorTracker\Laravel\Server\Models\Device; use dnj\ErrorTracker\Laravel\Server\Models\Log; use dnj\ErrorTracker\Laravel\Server\Tests\TestCase; use Illuminate\Testing\Fluent\AssertableJson; @@ -18,7 +21,7 @@ public function testLogSearch() [ 'apps' => [1], 'devices' => [1], - 'levels' => [LogLevelConstants::INFO], + 'levels' => [LogLevel::INFO], 'message' => 'test', 'unread' => true, // 'user' => '', @@ -26,9 +29,46 @@ public function testLogSearch() )); $response->assertStatus(ResponseAlias::HTTP_OK) - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + public function testCanStore(): void + { + $app = App::factory()->create(); + $device = Device::factory()->create(); + + $data = [ + 'app' => $app->id, + 'device' => $device->id, + 'level' => LogLevel::INFO->name, + 'message' => 'message test', + 'data' => ['test_key edited' => 'test_value edited'], + 'read' => ['userId' => 1, 'readAt' => Carbon::now()], + ]; + + $this->postJson(route('log.store'), $data) + ->assertStatus(ResponseAlias::HTTP_CREATED) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + public function testMarkAsRead() + { + } + + public function testCanNotMarkAsRead() + { + } + + public function testMarkAsUnRead() + { + } + + public function testCanNotMarkAsUnRead() + { } public function testCanDestroy() @@ -38,5 +78,4 @@ public function testCanDestroy() $this->deleteJson(route('device.destroy', ['id' => $app->id])) ->assertStatus(ResponseAlias::HTTP_OK); } - } From 69db77080a49d110661c720b85102f4e612d31f9 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 01:17:17 +0330 Subject: [PATCH 064/131] improve log factory --- database/factories/LogFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/factories/LogFactory.php b/database/factories/LogFactory.php index 8b58d1e..f4dcb2d 100644 --- a/database/factories/LogFactory.php +++ b/database/factories/LogFactory.php @@ -20,7 +20,7 @@ public function definition(): array return [ 'app_id' => $app[0]->id, 'device_id' => $device[0]->id, - 'level' => fake()->randomElement(LogLevel::cases()), + 'level' => LogLevel::INFO->name, 'message' => fake()->sentence, 'data' => json_encode([fake()->words(3)]), 'read' => fake()->boolean, From 3d273e61a2ba75a3e7bd0e2079beb02490d3f5ec Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 01:17:36 +0330 Subject: [PATCH 065/131] improve destroy test case --- tests/Feature/LogManagerTest.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index 18fc157..d3b8de4 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -15,13 +15,11 @@ class LogManagerTest extends TestCase { public function testLogSearch() { - Log::factory(2)->create(); - $response = $this->get(route('log.search', [ 'apps' => [1], 'devices' => [1], - 'levels' => [LogLevel::INFO], + 'level' => LogLevel::INFO->name, 'message' => 'test', 'unread' => true, // 'user' => '', From 4d85d212fd6d4015b1415d38f396b643c9b90578 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 01:27:59 +0330 Subject: [PATCH 066/131] phpcs --- database/factories/DeviceFactory.php | 1 - routes/api.php | 1 - src/Helpers/helpers.php | 1 + src/Http/Controllers/DeviceController.php | 5 ----- src/Http/Controllers/LogController.php | 1 - src/Http/Requests/Device/StoreRequest.php | 2 +- src/Http/Requests/Device/UpdateRequest.php | 2 +- src/Http/Resources/Log/StoreResource.php | 2 +- src/Kernel/DatabaseFilter/Contract/Device/Owner.php | 3 --- src/Kernel/DatabaseFilter/Contract/Device/Title.php | 1 - src/Kernel/DatabaseFilter/Contract/Log/Apps.php | 3 --- src/Kernel/DatabaseFilter/Contract/Log/Devices.php | 2 +- src/Kernel/DatabaseFilter/Contract/Log/Levels.php | 2 +- src/Kernel/DatabaseFilter/Contract/Log/Message.php | 2 +- src/Kernel/DatabaseFilter/Contract/Log/Unread.php | 2 +- src/Kernel/DatabaseFilter/Contract/Log/User.php | 2 +- src/Models/Log.php | 3 --- tests/Feature/DeviceManagerTest.php | 1 - 18 files changed, 9 insertions(+), 27 deletions(-) diff --git a/database/factories/DeviceFactory.php b/database/factories/DeviceFactory.php index 7c6986d..eb624bc 100644 --- a/database/factories/DeviceFactory.php +++ b/database/factories/DeviceFactory.php @@ -19,5 +19,4 @@ public function definition(): array 'updated_at' => fake()->dateTime, ]; } - } diff --git a/routes/api.php b/routes/api.php index 9123ef1..1da232e 100644 --- a/routes/api.php +++ b/routes/api.php @@ -7,7 +7,6 @@ use Illuminate\Support\Facades\Route; Route::middleware(['api', SubstituteBindings::class])->group(function () { - Route::group(['prefix' => 'app', 'as' => 'app.'], function () { Route::get('/search', [AppController::class, 'search'])->name('search'); Route::post('/store', [AppController::class, 'store'])->name('store'); diff --git a/src/Helpers/helpers.php b/src/Helpers/helpers.php index 4ecc6b4..962a724 100644 --- a/src/Helpers/helpers.php +++ b/src/Helpers/helpers.php @@ -7,6 +7,7 @@ function getEnumValues(array $cases): array foreach ($cases as $case) { $result[] = $case->name; } + return $result; } } diff --git a/src/Http/Controllers/DeviceController.php b/src/Http/Controllers/DeviceController.php index 60212f6..3cd9e86 100644 --- a/src/Http/Controllers/DeviceController.php +++ b/src/Http/Controllers/DeviceController.php @@ -16,10 +16,6 @@ public function __construct(protected IDeviceManager $deviceManager) { } - /** - * @param SearchRequest $searchRequest - * @return SearchResource - */ public function search(SearchRequest $searchRequest): SearchResource { $search = $this->deviceManager->search($searchRequest->only( @@ -55,5 +51,4 @@ public function destroy(int $id) { $this->deviceManager->destroy($id); } - } diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index b85639b..01265f2 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -53,7 +53,6 @@ public function store(StoreRequest $storeRequest): StoreResource public function markAsRead() { - } public function markAsUnRead() diff --git a/src/Http/Requests/Device/StoreRequest.php b/src/Http/Requests/Device/StoreRequest.php index 788f2a0..785d1ce 100644 --- a/src/Http/Requests/Device/StoreRequest.php +++ b/src/Http/Requests/Device/StoreRequest.php @@ -15,4 +15,4 @@ public function rules(): array 'user_activity_log' => 'nullable|boolean', ]; } -} \ No newline at end of file +} diff --git a/src/Http/Requests/Device/UpdateRequest.php b/src/Http/Requests/Device/UpdateRequest.php index 8c10ec8..8975ad6 100644 --- a/src/Http/Requests/Device/UpdateRequest.php +++ b/src/Http/Requests/Device/UpdateRequest.php @@ -15,4 +15,4 @@ public function rules(): array 'user_activity_log' => 'nullable|boolean', ]; } -} \ No newline at end of file +} diff --git a/src/Http/Resources/Log/StoreResource.php b/src/Http/Resources/Log/StoreResource.php index acccb08..655feb6 100644 --- a/src/Http/Resources/Log/StoreResource.php +++ b/src/Http/Resources/Log/StoreResource.php @@ -10,4 +10,4 @@ public function toArray($request) { return parent::toArray($request); } -} \ No newline at end of file +} diff --git a/src/Kernel/DatabaseFilter/Contract/Device/Owner.php b/src/Kernel/DatabaseFilter/Contract/Device/Owner.php index ec11650..a9ee579 100644 --- a/src/Kernel/DatabaseFilter/Contract/Device/Owner.php +++ b/src/Kernel/DatabaseFilter/Contract/Device/Owner.php @@ -6,9 +6,6 @@ class Owner extends FiltersAbstract { - /** - * @return void - */ public function handel(): void { $this->builder->where('owner', '=', $this->attribute); diff --git a/src/Kernel/DatabaseFilter/Contract/Device/Title.php b/src/Kernel/DatabaseFilter/Contract/Device/Title.php index b3b015a..86868e0 100644 --- a/src/Kernel/DatabaseFilter/Contract/Device/Title.php +++ b/src/Kernel/DatabaseFilter/Contract/Device/Title.php @@ -11,4 +11,3 @@ public function handel() $this->builder->where('title', 'LIKE', '%'.$this->attribute.'%'); } } - diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Apps.php b/src/Kernel/DatabaseFilter/Contract/Log/Apps.php index 44d1cfe..407ee30 100644 --- a/src/Kernel/DatabaseFilter/Contract/Log/Apps.php +++ b/src/Kernel/DatabaseFilter/Contract/Log/Apps.php @@ -6,9 +6,6 @@ class Apps extends FiltersAbstract { - /** - * @return void - */ public function handel(): void { $this->builder->whereIn('app_id', $this->attribute); diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Devices.php b/src/Kernel/DatabaseFilter/Contract/Log/Devices.php index c0bc5b1..a8f448a 100644 --- a/src/Kernel/DatabaseFilter/Contract/Log/Devices.php +++ b/src/Kernel/DatabaseFilter/Contract/Log/Devices.php @@ -10,4 +10,4 @@ public function handel() { $this->builder->whereIn('device_id', $this->attribute); } -} \ No newline at end of file +} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Levels.php b/src/Kernel/DatabaseFilter/Contract/Log/Levels.php index 9334dfd..b3a74ad 100644 --- a/src/Kernel/DatabaseFilter/Contract/Log/Levels.php +++ b/src/Kernel/DatabaseFilter/Contract/Log/Levels.php @@ -10,4 +10,4 @@ public function handel() { $this->builder->whereIn('level', $this->attribute); } -} \ No newline at end of file +} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Message.php b/src/Kernel/DatabaseFilter/Contract/Log/Message.php index a9f63c7..3d7f19c 100644 --- a/src/Kernel/DatabaseFilter/Contract/Log/Message.php +++ b/src/Kernel/DatabaseFilter/Contract/Log/Message.php @@ -10,4 +10,4 @@ public function handel() { $this->builder->where('message', 'LIKE', '%'.$this->attribute.'%'); } -} \ No newline at end of file +} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Unread.php b/src/Kernel/DatabaseFilter/Contract/Log/Unread.php index 43446d7..36e8f16 100644 --- a/src/Kernel/DatabaseFilter/Contract/Log/Unread.php +++ b/src/Kernel/DatabaseFilter/Contract/Log/Unread.php @@ -10,4 +10,4 @@ public function handel() { $this->builder->where('unread', '=', $this->attribute); } -} \ No newline at end of file +} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/User.php b/src/Kernel/DatabaseFilter/Contract/Log/User.php index 10b7eab..7406119 100644 --- a/src/Kernel/DatabaseFilter/Contract/Log/User.php +++ b/src/Kernel/DatabaseFilter/Contract/Log/User.php @@ -10,4 +10,4 @@ public function handel() { $this->builder->where('user', '=', $this->attribute); } -} \ No newline at end of file +} diff --git a/src/Models/Log.php b/src/Models/Log.php index 69f942f..5a7b15e 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -121,9 +121,6 @@ public function getAppId(): int return $this->app_id; } - /** - * @param int $app_id - */ public function setAppId(int $app_id): Log { $this->app_id = $app_id; diff --git a/tests/Feature/DeviceManagerTest.php b/tests/Feature/DeviceManagerTest.php index 5411093..9e6ae56 100644 --- a/tests/Feature/DeviceManagerTest.php +++ b/tests/Feature/DeviceManagerTest.php @@ -50,7 +50,6 @@ public function testCanStore(): void }); } - public function testCanUpdate() { $app = Device::factory()->create(); From ba637d96c3ab4fa9bcc688b16c93cb42dd85b718 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 02:06:15 +0330 Subject: [PATCH 067/131] fix bug on log search test --- tests/Feature/LogManagerTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index d3b8de4..05c9fb3 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -15,10 +15,13 @@ class LogManagerTest extends TestCase { public function testLogSearch() { + $app = App::factory()->create(); + $device = Device::factory()->create(); + $response = $this->get(route('log.search', [ - 'apps' => [1], - 'devices' => [1], + 'apps' => [$app->id], + 'devices' => [$device->id], 'level' => LogLevel::INFO->name, 'message' => 'test', 'unread' => true, From 03d6cdd03d30f1016a1dec4f9b7db2ee3ce7cae0 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 02:06:33 +0330 Subject: [PATCH 068/131] fix refactor --- src/Http/Requests/Log/SearchRequest.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Http/Requests/Log/SearchRequest.php b/src/Http/Requests/Log/SearchRequest.php index 900cfcc..3506202 100644 --- a/src/Http/Requests/Log/SearchRequest.php +++ b/src/Http/Requests/Log/SearchRequest.php @@ -2,7 +2,7 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Requests\Log; -use dnj\ErrorTracker\Laravel\Server\Constants\LogLevelConstants; +use dnj\ErrorTracker\Contracts\LogLevel; use Illuminate\Foundation\Http\FormRequest; class SearchRequest extends FormRequest @@ -17,7 +17,7 @@ public function rules(): array 'devices.*' => ['exists:devices,id'], 'levels' => ['array', 'nullable'], - 'levels.*' => sprintf('in:%s', implode(',', LogLevelConstants::$statuses)), + 'levels.*' => sprintf('in:%s', implode(',', getEnumValues(LogLevel::cases()))), 'message' => ['string', 'nullable'], 'unread' => ['bool', 'nullable'], From b7a0c0f4b164212b1e1bd540de8135a9b6511627 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 17:34:39 +0330 Subject: [PATCH 069/131] add return update function --- src/Http/Controllers/AppController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Http/Controllers/AppController.php b/src/Http/Controllers/AppController.php index e6994af..fbf5271 100644 --- a/src/Http/Controllers/AppController.php +++ b/src/Http/Controllers/AppController.php @@ -41,7 +41,7 @@ public function store(StoreRequest $storeRequest): StoreResource return StoreResource::make($store); } - public function update(int $id, UpdateRequest $updateRequest) + public function update(int $id, UpdateRequest $updateRequest): UpdateResource { $update = $this->appManager->update($id, $updateRequest->validated(), true); From 7164d22ee6f19ff2729bec64d9c987ef78b17a8d Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 17:34:55 +0330 Subject: [PATCH 070/131] add mark as seen and unseen to api route --- routes/api.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/routes/api.php b/routes/api.php index 1da232e..23406ab 100644 --- a/routes/api.php +++ b/routes/api.php @@ -24,6 +24,8 @@ Route::group(['prefix' => 'log', 'as' => 'log.'], function () { Route::get('/search', [LogController::class, 'search'])->name('search'); Route::post('/store', [LogController::class, 'store'])->name('store'); + Route::put('/markAsRead', [LogController::class, 'markAsRead'])->name('mark.as.read'); + Route::put('/markAsUnRead', [LogController::class, 'markAsUnRead'])->name('mark.as.un.read'); Route::delete('/destroy/{id}', [LogController::class, 'destroy'])->name('destroy'); }); }); From b32479f4044f02cf48107fbcde6ef107aa21b49a Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 17:35:23 +0330 Subject: [PATCH 071/131] create mark as seen and unseen request --- src/Http/Requests/Log/MarkAsReadRequest.php | 18 ++++++++++++++++++ src/Http/Requests/Log/MarkAsUnreadRequest.php | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 src/Http/Requests/Log/MarkAsReadRequest.php create mode 100644 src/Http/Requests/Log/MarkAsUnreadRequest.php diff --git a/src/Http/Requests/Log/MarkAsReadRequest.php b/src/Http/Requests/Log/MarkAsReadRequest.php new file mode 100644 index 0000000..dcf7765 --- /dev/null +++ b/src/Http/Requests/Log/MarkAsReadRequest.php @@ -0,0 +1,18 @@ + ['required', 'integer'], + 'userId' => ['nullable', 'integer'], + 'readAt' => ['nullable', 'date'], + 'userActivityLog' => ['required', 'boolean'], + ]; + } +} diff --git a/src/Http/Requests/Log/MarkAsUnreadRequest.php b/src/Http/Requests/Log/MarkAsUnreadRequest.php new file mode 100644 index 0000000..e08e659 --- /dev/null +++ b/src/Http/Requests/Log/MarkAsUnreadRequest.php @@ -0,0 +1,18 @@ + ['required', 'integer'], + 'userActivityLog' => ['required', 'boolean'], + ]; + } +} + +// ILog|int $log, bool $userActivityLog = false From 70afaba80ef04f5d20e7d1952d4ce74bd582af58 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 2 Feb 2023 18:14:10 +0330 Subject: [PATCH 072/131] improve code for get enum value code --- src/Http/Controllers/LogController.php | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index 01265f2..06ef4dd 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -33,16 +33,11 @@ public function search(SearchRequest $searchRequest) public function store(StoreRequest $storeRequest): StoreResource { - $value = null; - foreach (LogLevel::cases() as $case) { - if ($case->name == $storeRequest->input('level')) { - $value = $case; - } - } + $levelValue = $this->getEnumValue($storeRequest); $log = $this->logManager->store( $storeRequest->input('app'), $storeRequest->input('device'), - $value, + $levelValue, $storeRequest->input('message'), $storeRequest->input('data'), $storeRequest->input('read'), @@ -63,4 +58,16 @@ public function destroy(int $id) { $this->logManager->destroy($id); } + + public function getEnumValue(StoreRequest $storeRequest): ?LogLevel + { + $value = null; + foreach (LogLevel::cases() as $case) { + if ($case->name == $storeRequest->input('level')) { + $value = $case; + } + } + + return $value; + } } From 8ee4b9e36a65e4548cd098efcae3bf760590390f Mon Sep 17 00:00:00 2001 From: amirhf Date: Fri, 3 Feb 2023 20:40:01 +0330 Subject: [PATCH 073/131] add route model bindig --- routes/api.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/api.php b/routes/api.php index 23406ab..e1095b0 100644 --- a/routes/api.php +++ b/routes/api.php @@ -24,8 +24,8 @@ Route::group(['prefix' => 'log', 'as' => 'log.'], function () { Route::get('/search', [LogController::class, 'search'])->name('search'); Route::post('/store', [LogController::class, 'store'])->name('store'); - Route::put('/markAsRead', [LogController::class, 'markAsRead'])->name('mark.as.read'); - Route::put('/markAsUnRead', [LogController::class, 'markAsUnRead'])->name('mark.as.un.read'); + Route::put('/markAsRead/{log}', [LogController::class, 'markAsRead'])->name('mark_as_read'); + Route::put('/markAsUnRead/{log}', [LogController::class, 'markAsUnRead'])->name('mark_as_unread'); Route::delete('/destroy/{id}', [LogController::class, 'destroy'])->name('destroy'); }); }); From a590d74e5ee0600de563db7281c45df10842058b Mon Sep 17 00:00:00 2001 From: amirhf Date: Fri, 3 Feb 2023 20:40:13 +0330 Subject: [PATCH 074/131] fix bug --- src/Models/Log.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Models/Log.php b/src/Models/Log.php index 5a7b15e..aacb788 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -14,7 +14,7 @@ * @property int id * @property int app_id * @property int device_id - * @property array|null read + * @property string|null read * @property mixed level * @property string message * @property string|null data @@ -31,7 +31,7 @@ public function getId(): int return $this->id; } - public function getRead(): array + public function getRead(): string { return $this->read; } From 9d9d2b258db5a7960eef9586ca5e8be688ec299b Mon Sep 17 00:00:00 2001 From: amirhf Date: Fri, 3 Feb 2023 20:41:16 +0330 Subject: [PATCH 075/131] fix bug on log factory --- database/factories/LogFactory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/factories/LogFactory.php b/database/factories/LogFactory.php index f4dcb2d..28bd194 100644 --- a/database/factories/LogFactory.php +++ b/database/factories/LogFactory.php @@ -23,7 +23,7 @@ public function definition(): array 'level' => LogLevel::INFO->name, 'message' => fake()->sentence, 'data' => json_encode([fake()->words(3)]), - 'read' => fake()->boolean, + 'read' => json_encode(['userId' => fake()->randomNumber(1, 5), 'readAt' => null]), ]; } } From 2319e25242f28d05842b67880a1284c87756b1a2 Mon Sep 17 00:00:00 2001 From: amirhf Date: Fri, 3 Feb 2023 20:41:57 +0330 Subject: [PATCH 076/131] handel mark read and un read --- src/Managers/LogManager.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/Managers/LogManager.php b/src/Managers/LogManager.php index 5d06fc0..5436d33 100644 --- a/src/Managers/LogManager.php +++ b/src/Managers/LogManager.php @@ -34,12 +34,26 @@ public function store(int|IApp $app, IDevice|int $device, LogLevel $level, strin public function markAsRead(ILog|int $log, ?int $userId = null, ?\DateTimeInterface $readAt = null, bool $userActivityLog = false): ILog { - // TODO: Implement markAsRead() method. + $readArray = (array) json_decode($log->getRead()); + + $readArray['readAt'] = (string) $readAt; + $readArray['userId'] = $userId; + $log->setRead($readArray); + $log->save(); + + return $log; } public function markAsUnread(ILog|int $log, bool $userActivityLog = false): ILog { - // TODO: Implement markAsUnread() method. + $readArray = (array) json_decode($log->getRead()); + + $readArray['readAt'] = null; + $readArray['userId'] = null; + $log->setRead($readArray); + $log->save(); + + return $log; } public function destroy(ILog|int $log, bool $userActivityLog = false): void From e1290e0a12135cc6a9c3afb7c7c8831939723bee Mon Sep 17 00:00:00 2001 From: amirhf Date: Fri, 3 Feb 2023 20:42:03 +0330 Subject: [PATCH 077/131] handel mark read and un read test --- tests/Feature/LogManagerTest.php | 32 +++++++++++++++++++++++++------- 1 file changed, 25 insertions(+), 7 deletions(-) diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index 05c9fb3..fdf8033 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -58,25 +58,43 @@ public function testCanStore(): void public function testMarkAsRead() { - } + $log = Log::factory()->create(); - public function testCanNotMarkAsRead() - { + $data = [ + 'userId' => 1, + 'readAt' => Carbon::now(), + 'userActivityLog' => false, + ]; + + $this->putJson(route('log.mark_as_read', ['log' => $log->id]), $data) + ->assertStatus(ResponseAlias::HTTP_OK) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); } public function testMarkAsUnRead() { - } + $log = Log::factory()->create(); - public function testCanNotMarkAsUnRead() - { + $data = [ + 'userId' => 1, + 'readAt' => Carbon::now(), + 'userActivityLog' => false, + ]; + + $this->putJson(route('log.mark_as_read', ['log' => $log->id]), $data) + ->assertStatus(ResponseAlias::HTTP_OK) + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); } public function testCanDestroy() { $app = Log::factory()->create(); - $this->deleteJson(route('device.destroy', ['id' => $app->id])) + $this->deleteJson(route('log.destroy', ['id' => $app->id])) ->assertStatus(ResponseAlias::HTTP_OK); } } From e0847dabc403ca65bd01472ec1d4d4d569b7f6c4 Mon Sep 17 00:00:00 2001 From: amirhf Date: Fri, 3 Feb 2023 20:42:51 +0330 Subject: [PATCH 078/131] improve MarkAsReadRequest.php --- src/Http/Requests/Log/MarkAsReadRequest.php | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Http/Requests/Log/MarkAsReadRequest.php b/src/Http/Requests/Log/MarkAsReadRequest.php index dcf7765..8e56904 100644 --- a/src/Http/Requests/Log/MarkAsReadRequest.php +++ b/src/Http/Requests/Log/MarkAsReadRequest.php @@ -9,10 +9,8 @@ class MarkAsReadRequest extends FormRequest public function rules(): array { return [ - 'Ilog' => ['required', 'integer'], 'userId' => ['nullable', 'integer'], 'readAt' => ['nullable', 'date'], - 'userActivityLog' => ['required', 'boolean'], ]; } } From ca91211bc7693ea38573f3482c8810c07c56c480 Mon Sep 17 00:00:00 2001 From: amirhf Date: Fri, 3 Feb 2023 20:43:18 +0330 Subject: [PATCH 079/131] remove mark as unread --- src/Http/Requests/Log/MarkAsUnreadRequest.php | 18 ------------------ 1 file changed, 18 deletions(-) delete mode 100644 src/Http/Requests/Log/MarkAsUnreadRequest.php diff --git a/src/Http/Requests/Log/MarkAsUnreadRequest.php b/src/Http/Requests/Log/MarkAsUnreadRequest.php deleted file mode 100644 index e08e659..0000000 --- a/src/Http/Requests/Log/MarkAsUnreadRequest.php +++ /dev/null @@ -1,18 +0,0 @@ - ['required', 'integer'], - 'userActivityLog' => ['required', 'boolean'], - ]; - } -} - -// ILog|int $log, bool $userActivityLog = false From 7c1ea3a09a91835c80a1ad50d74d83a55b63ef92 Mon Sep 17 00:00:00 2001 From: amirhf Date: Fri, 3 Feb 2023 20:47:40 +0330 Subject: [PATCH 080/131] handel resource marks read and un red --- src/Http/Controllers/LogController.php | 19 +++++++++++++++++-- src/Http/Resources/Log/MarkAsReadResource.php | 13 +++++++++++++ .../Resources/Log/MarkAsUnReadResource.php | 13 +++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 src/Http/Resources/Log/MarkAsReadResource.php create mode 100644 src/Http/Resources/Log/MarkAsUnReadResource.php diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index 06ef4dd..db92231 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -2,12 +2,18 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; +use Carbon\Carbon; +use dnj\ErrorTracker\Contracts\ILog; use dnj\ErrorTracker\Contracts\ILogManager; use dnj\ErrorTracker\Contracts\LogLevel; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\MarkAsReadRequest; use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\SearchRequest; use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\StoreRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\MarkAsReadResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\MarkAsUnReadResource; use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\SearchResource; use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\StoreResource; +use dnj\ErrorTracker\Laravel\Server\Models\Log; class LogController extends Controller { @@ -46,12 +52,21 @@ public function store(StoreRequest $storeRequest): StoreResource return StoreResource::make($log); } - public function markAsRead() + public function markAsRead(Log $log, MarkAsReadRequest $markAsReadRequest): MarkAsReadResource { + $markAsRead = $this->logManager->markAsRead( + $log, + $markAsReadRequest->get('userId'), + Carbon::make($markAsReadRequest->get('readAt'))); + + return MarkAsReadResource::make($markAsRead); } - public function markAsUnRead() + public function markAsUnRead(Log $log): MarkAsUnReadResource { + $markAsUnread = $this->logManager->markAsUnread($log); + + return MarkAsUnReadResource::make($markAsUnread); } public function destroy(int $id) diff --git a/src/Http/Resources/Log/MarkAsReadResource.php b/src/Http/Resources/Log/MarkAsReadResource.php new file mode 100644 index 0000000..0aa7750 --- /dev/null +++ b/src/Http/Resources/Log/MarkAsReadResource.php @@ -0,0 +1,13 @@ + Date: Sat, 4 Feb 2023 01:12:44 +0330 Subject: [PATCH 081/131] fix bug on route --- tests/Feature/LogManagerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index fdf8033..e286c0b 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -83,7 +83,7 @@ public function testMarkAsUnRead() 'userActivityLog' => false, ]; - $this->putJson(route('log.mark_as_read', ['log' => $log->id]), $data) + $this->putJson(route('log.mark_as_unread', ['log' => $log->id]), $data) ->assertStatus(ResponseAlias::HTTP_OK) ->assertJson(function (AssertableJson $json) { $json->etc(); From d2d0197347dce547816c3d902e3e0996760569e6 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sat, 4 Feb 2023 01:13:08 +0330 Subject: [PATCH 082/131] phpcs --- src/Http/Controllers/LogController.php | 1 - src/Http/Requests/Log/SearchRequest.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index db92231..53886d4 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -3,7 +3,6 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; use Carbon\Carbon; -use dnj\ErrorTracker\Contracts\ILog; use dnj\ErrorTracker\Contracts\ILogManager; use dnj\ErrorTracker\Contracts\LogLevel; use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\MarkAsReadRequest; diff --git a/src/Http/Requests/Log/SearchRequest.php b/src/Http/Requests/Log/SearchRequest.php index 3506202..c876d8b 100644 --- a/src/Http/Requests/Log/SearchRequest.php +++ b/src/Http/Requests/Log/SearchRequest.php @@ -24,4 +24,4 @@ public function rules(): array 'user' => ['int', 'nullable'], ]; } -} \ No newline at end of file +} From 3410819d0c1c38a1d65205bb56ad192b31e50b51 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sat, 4 Feb 2023 01:35:34 +0330 Subject: [PATCH 083/131] remove level contract --- src/Kernel/DatabaseFilter/Contract/Log/Levels.php | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Levels.php diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Levels.php b/src/Kernel/DatabaseFilter/Contract/Log/Levels.php deleted file mode 100644 index b3a74ad..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Log/Levels.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->whereIn('level', $this->attribute); - } -} From 5774cf74760ca76bdb5d4a3fa49ca01ae7b2d568 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sat, 4 Feb 2023 01:35:56 +0330 Subject: [PATCH 084/131] improve searches --- tests/Feature/AppManagerTest.php | 2 +- tests/Feature/DeviceManagerTest.php | 2 +- tests/Feature/LogManagerTest.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Feature/AppManagerTest.php b/tests/Feature/AppManagerTest.php index e3b849e..06ef556 100644 --- a/tests/Feature/AppManagerTest.php +++ b/tests/Feature/AppManagerTest.php @@ -13,7 +13,7 @@ public function testUserCanSearch(): void { App::factory(2)->create(); - $response = $this->get(route('app.search', ['title' => 'test', 'owner' => 1])); + $response = $this->get(route('app.search', ['title' => 'test', 'owner' => 1, 'user' => 1])); $response->assertStatus(ResponseAlias::HTTP_OK); // 200 } diff --git a/tests/Feature/DeviceManagerTest.php b/tests/Feature/DeviceManagerTest.php index 9e6ae56..356194a 100644 --- a/tests/Feature/DeviceManagerTest.php +++ b/tests/Feature/DeviceManagerTest.php @@ -13,7 +13,7 @@ public function testUserCanSearch(): void { Device::factory(2)->create(); - $response = $this->get(route('device.search', ['title' => 'asdasd'])); + $response = $this->get(route('device.search', ['title' => 'test', 'owner' => 1, 'user' => 1])); $response->assertStatus(ResponseAlias::HTTP_OK); } diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index e286c0b..80fb574 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -25,7 +25,7 @@ public function testLogSearch() 'level' => LogLevel::INFO->name, 'message' => 'test', 'unread' => true, - // 'user' => '', + 'user' => 1, ] )); From 30157fc8fed43b1ff7ba3c3aef8b1d63a393e8b9 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 11:53:46 +0330 Subject: [PATCH 085/131] add scripts on composer json --- composer.json | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/composer.json b/composer.json index 40cca37..a3e47a4 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,15 @@ "dnj\\ErrorTracker\\Laravel\\Server\\Tests\\": "tests/" } }, + "scripts": { + "test:phpunit": "vendor/bin/phpunit", + "test:codestyle": "vendor/bin/php-cs-fixer fix -v --dry-run --stop-on-violation --using-cache=no", + "test": [ + "@test:types", + "@test:phpunit", + "@test:codestyle" + ] + }, "require": { "php": "^8.1", "dnj/laravel-user-logger": "@dev", From 12627b11514a03b3714893663f077414f0b2ad33 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 17:37:51 +0330 Subject: [PATCH 086/131] add apis documents --- docs/APIs/laravel-error-tracker-server.json | 505 ++++++++++++++++++++ docs/APIs/openApi.yaml | 275 +++++++++++ docs/doc.json | 15 - 3 files changed, 780 insertions(+), 15 deletions(-) create mode 100644 docs/APIs/laravel-error-tracker-server.json create mode 100644 docs/APIs/openApi.yaml delete mode 100644 docs/doc.json diff --git a/docs/APIs/laravel-error-tracker-server.json b/docs/APIs/laravel-error-tracker-server.json new file mode 100644 index 0000000..a7a31c1 --- /dev/null +++ b/docs/APIs/laravel-error-tracker-server.json @@ -0,0 +1,505 @@ +{ + "info": { + "_postman_id": "ec52ce74-5575-45d1-b39c-34988fcfca5f", + "name": "laravel-error-tracker-server", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "app", + "item": [ + { + "name": "search", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/app/search?title=test&owner=1&user=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "app", + "search" + ], + "query": [ + { + "key": "title", + "value": "test" + }, + { + "key": "owner", + "value": "1" + }, + { + "key": "user", + "value": "1" + } + ] + } + }, + "response": [] + }, + { + "name": "store", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "title", + "value": "test", + "type": "default" + }, + { + "key": "extra", + "value": "", + "type": "default" + }, + { + "key": "owner", + "value": "", + "type": "default" + }, + { + "key": "", + "value": "", + "type": "default", + "disabled": true + } + ] + }, + "url": { + "raw": "{{base_url}}/api/app/store", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "app", + "store" + ] + } + }, + "response": [] + }, + { + "name": "delete", + "request": { + "method": "DELETE", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [] + }, + "url": { + "raw": "{{base_url}}/api/app/destroy/1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "app", + "destroy", + "1" + ] + } + }, + "response": [] + }, + { + "name": "update", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "title", + "value": "test", + "type": "default" + }, + { + "key": "extra", + "value": "", + "type": "default" + }, + { + "key": "owner", + "value": "", + "type": "default" + }, + { + "key": "id", + "value": "1", + "type": "default", + "disabled": true + } + ] + }, + "url": { + "raw": "{{base_url}}/api/app/update/1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "app", + "update", + "1" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "device", + "item": [ + { + "name": "search", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/device/search?title=test&user=1&owner=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "device", + "search" + ], + "query": [ + { + "key": "title", + "value": "test" + }, + { + "key": "user", + "value": "1" + }, + { + "key": "owner", + "value": "1" + } + ] + } + }, + "response": [] + }, + { + "name": "store", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "title", + "value": "test", + "type": "default" + }, + { + "key": "extra", + "value": "", + "type": "default" + }, + { + "key": "owner", + "value": "", + "type": "default" + }, + { + "key": "", + "value": "", + "type": "default", + "disabled": true + } + ] + }, + "url": { + "raw": "{{base_url}}/api/device/store", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "device", + "store" + ] + } + }, + "response": [] + }, + { + "name": "update", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [] + }, + "url": { + "raw": "{{base_url}}/api/device/update/1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "device", + "update", + "1" + ] + } + }, + "response": [] + }, + { + "name": "delete", + "request": { + "method": "DELETE", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [] + }, + "url": { + "raw": "{{base_url}}/api/device/destroy/1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "device", + "destroy", + "1" + ] + } + }, + "response": [] + } + ] + }, + { + "name": "log", + "item": [ + { + "name": "search", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "{{base_url}}/api/log/search?apps=[1]&devices=[1]&levels=INFO&message=this message.&unread=false&user=1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "log", + "search" + ], + "query": [ + { + "key": "apps", + "value": "[1]" + }, + { + "key": "devices", + "value": "[1]" + }, + { + "key": "levels", + "value": "INFO" + }, + { + "key": "message", + "value": "this message." + }, + { + "key": "unread", + "value": "false" + }, + { + "key": "user", + "value": "1" + } + ] + } + }, + "response": [] + }, + { + "name": "store", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "app", + "value": "1", + "type": "default" + }, + { + "key": "device", + "value": "1", + "type": "default" + }, + { + "key": "level", + "value": "INFO", + "type": "default" + }, + { + "key": "message", + "value": "this message", + "type": "default" + }, + { + "key": "data", + "value": "['test', '2022-02-02']", + "type": "default" + }, + { + "key": "read", + "value": "['userId', 1, 'readAt', 2022-02-02]", + "type": "default" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/log/store", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "log", + "store" + ] + } + }, + "response": [] + }, + { + "name": "mark as read", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "userId", + "value": "1", + "type": "default" + }, + { + "key": "readAt", + "value": "['userId', 1, 'readAt', 2022-02-02]", + "type": "default" + } + ] + }, + "url": { + "raw": "{{base_url}}/api/markAsRead/1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "markAsRead", + "1" + ] + } + }, + "response": [] + }, + { + "name": "mark as unread", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [] + }, + "url": { + "raw": "{{base_url}}/api/markAsRead/1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "markAsRead", + "1" + ] + } + }, + "response": [] + }, + { + "name": "delete", + "request": { + "method": "DELETE", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [] + }, + "url": { + "raw": "{{base_url}}/api/log/update/1", + "host": [ + "{{base_url}}" + ], + "path": [ + "api", + "log", + "update", + "1" + ] + } + }, + "response": [] + } + ] + } + ], + "event": [ + { + "listen": "prerequest", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ], + "variable": [ + { + "key": "base_url", + "value": "127.0.0.1", + "type": "default" + } + ] +} \ No newline at end of file diff --git a/docs/APIs/openApi.yaml b/docs/APIs/openApi.yaml new file mode 100644 index 0000000..09a02cb --- /dev/null +++ b/docs/APIs/openApi.yaml @@ -0,0 +1,275 @@ +openapi: 3.0.0 +info: + title: laravel-error-tracker-server + version: 1.0.0 + description: https://github.com/dnj/laravel-error-tracker-server +servers: + - url: http://127.0.0.1 +tags: + - name: app + - name: device + - name: log +paths: + /api/app/search: + get: + tags: + - app + summary: search + parameters: + - name: title + in: query + schema: + type: string + example: test + - name: owner + in: query + schema: + type: integer + example: '1' + - name: user + in: query + schema: + type: integer + example: '1' + responses: + '200': + description: Successful response + content: + application/json: {} + /api/app/store: + post: + tags: + - app + summary: store + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + title: + type: string + example: test + extra: + type: string + owner: + type: string + '': + type: string + responses: + '200': + description: Successful response + content: + application/json: {} + /api/app/destroy/1: + delete: + tags: + - app + summary: delete + responses: + '200': + description: Successful response + content: + application/json: {} + /api/app/update/1: + put: + tags: + - app + summary: update + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + title: + type: string + example: test + extra: + type: string + owner: + type: string + id: + type: integer + example: '1' + responses: + '200': + description: Successful response + content: + application/json: {} + /api/device/search: + get: + tags: + - device + summary: search + parameters: + - name: title + in: query + schema: + type: string + example: test + - name: user + in: query + schema: + type: integer + example: '1' + - name: owner + in: query + schema: + type: integer + example: '1' + responses: + '200': + description: Successful response + content: + application/json: {} + /api/device/store: + post: + tags: + - device + summary: store + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + title: + type: string + example: test + extra: + type: string + owner: + type: string + '': + type: string + responses: + '200': + description: Successful response + content: + application/json: {} + /api/device/update/1: + put: + tags: + - device + summary: update + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + responses: + '200': + description: Successful response + content: + application/json: {} + /api/device/destroy/1: + delete: + tags: + - device + summary: delete + responses: + '200': + description: Successful response + content: + application/json: {} + /api/log/search: + get: + tags: + - log + summary: search + parameters: + - name: apps + in: query + schema: + type: string + example: '[1]' + - name: devices + in: query + schema: + type: string + example: '[1]' + - name: levels + in: query + schema: + type: string + example: INFO + - name: message + in: query + schema: + type: string + example: this message. + - name: unread + in: query + schema: + type: boolean + example: 'false' + - name: user + in: query + schema: + type: integer + example: '1' + responses: + '200': + description: Successful response + content: + application/json: {} + /api/log/store: + post: + tags: + - log + summary: store + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + app: + type: integer + example: '1' + device: + type: integer + example: '1' + level: + type: string + example: INFO + message: + type: string + example: this message + data: + type: string + example: '[''test'', ''2022-02-02'']' + read: + type: string + example: '[''userId'', 1, ''readAt'', 2022-02-02]' + responses: + '200': + description: Successful response + content: + application/json: {} + /api/markAsRead/1: + put: + tags: + - log + summary: mark as unread + requestBody: + content: + application/x-www-form-urlencoded: + schema: + type: object + responses: + '200': + description: Successful response + content: + application/json: {} + /api/log/update/1: + delete: + tags: + - log + summary: delete + responses: + '200': + description: Successful response + content: + application/json: {} diff --git a/docs/doc.json b/docs/doc.json deleted file mode 100644 index b9788f2..0000000 --- a/docs/doc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "openapi": "3.0.3", - "info": { - "title": "Title", - "description": "Title", - "version": "1.0.0" - }, - "servers": [ - { - "url": "https" - } - ], - "paths": { - } -} From 7e8c20546e41595388c7b341296a64c1449f3402 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 17:47:13 +0330 Subject: [PATCH 087/131] add readme --- README.md | 135 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 134 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4640904..3787426 100644 --- a/README.md +++ b/README.md @@ -1 +1,134 @@ -# TODO +# Laravel Error Tracker 📥 + +[![Latest Version on Packagist][ico-version]][link-packagist] +[![Total Downloads][ico-downloads]][link-downloads] +[![Software License][ico-license]][link-license] +[![Testing status][ico-workflow-test]][link-workflow-test] + +## Introduction + +This package will help you manage the logs for your project. + + +* Features include: + * Application Management + * Device Management + * Log Management +* Latest versions of PHP and PHPUnit and PHPCsFixer +* Best practices applied: + * [`README.md`][link-readme] (badges included) + * [`LICENSE`][link-license] + * [`composer.json`][link-composer-json] + * [`phpunit.xml`][link-phpunit] + * [`.gitignore`][link-gitignore] + * [`.php-cs-fixer.php`][link-phpcsfixer] + +## Installation + +Require this package with composer. + +```shell +composer require dnj/laravel-error-tracker-server +``` + +Laravel uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider. + + +#### Copy the package config to your local config with the publish command: + +```shell +php artisan vendor:publish --provider="dnj\ErrorTracker\Laravel\Server\ServiceProvider" +``` +#### Config file + +```php + null, + + 'routes' => [ + 'enable' => true, + 'prefix' => 'log', + ], +]; + +``` +--- + +ℹ️ **Note** +> User activity logs are disabled by default, if you want to save them set `$userActivityLog` to true. + +Example : + +```php +use dnj\Ticket\Contracts\DeviceManager; + +$device = app(DeviceManager::class); + $item = $device->store( + title:'test', + userActivityLog: true + ); // returns a Device model which implements IDevice +``` + + +## Working With Apps: + +Search apps: + +```php +$search = $this->appManager->search($searchRequest->only( + [ + 'title', + 'owner', + 'user', + ] + )); +``` + + +## HOWTO use Restful API + +A document in YAML format has been prepared for better familiarization and use of package web services. which is placed in the [`docs`][link-docs] folder. + +To use this file, you can import it on the [stoplight.io](https://stoplight.io) site and see all available web services. + + +## Contribution + +Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated. + +If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again! + +1. Fork the Project +2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) +3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) +4. Push to the Branch (`git push origin feature/AmazingFeature`) +5. Open a Pull Request + + +## Security +If you discover any security-related issues, please email [security@dnj.co.ir](mailto:security@dnj.co.ir) instead of using the issue tracker. + +## License + +The MIT License (MIT). Please see [License File][link-license] for more information. + + +[ico-version]: https://img.shields.io/packagist/v/dnj/laravel-ticketing.svg?style=flat-square +[ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square +[ico-downloads]: https://img.shields.io/packagist/dt/dnj/laravel-ticketing.svg?style=flat-square +[ico-workflow-test]: https://github.com/dnj/laravel-ticketing/actions/workflows/ci.yml/badge.svg + +[link-workflow-test]: https://github.com/dnj/laravel-ticketing/actions/workflows/ci.yml +[link-packagist]: https://packagist.org/packages/dnj/laravel-ticketing +[link-license]: https://github.com/dnj/laravel-ticketing/blob/master/LICENSE +[link-downloads]: https://packagist.org/packages/dnj/laravel-ticketing +[link-readme]: https://github.com/dnj/laravel-ticketing/blob/master/README.md +[link-docs]: https://github.com/dnj/laravel-ticketing/blob/master/docs/openapi.yaml +[link-composer-json]: https://github.com/dnj/laravel-ticketing/blob/master/composer.json +[link-phpunit]: https://github.com/dnj/laravel-ticketing/blob/master/phpunit.xml +[link-gitignore]: https://github.com/dnj/laravel-ticketing/blob/master/.gitignore +[link-phpcsfixer]: https://github.com/dnj/laravel-ticketing/blob/master/.php-cs-fixer.php +[link-author]: https://github.com/dnj From 88bb9560656271519793f1ba4c965dd82cda0b0b Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 19:09:46 +0330 Subject: [PATCH 088/131] fix github ci error --- composer.lock | 354 ++++++++++++++++++++++---------------------------- 1 file changed, 156 insertions(+), 198 deletions(-) diff --git a/composer.lock b/composer.lock index c15dd6d..f83d922 100644 --- a/composer.lock +++ b/composer.lock @@ -93,26 +93,25 @@ "packages-dev": [ { "name": "brick/math", - "version": "0.10.2", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.4 || ^8.0" + "php": "^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^9.0", - "vimeo/psalm": "4.25.0" + "vimeo/psalm": "5.0.0" }, "type": "library", "autoload": { @@ -137,7 +136,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.10.2" + "source": "https://github.com/brick/math/tree/0.11.0" }, "funding": [ { @@ -145,7 +144,7 @@ "type": "github" } ], - "time": "2022-08-10T22:54:19+00:00" + "time": "2023-01-15T23:15:59+00:00" }, { "name": "composer/pcre", @@ -442,30 +441,30 @@ }, { "name": "doctrine/annotations", - "version": "1.14.2", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b" + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/ad785217c1e9555a7d6c6c8c9f406395a5e2882b", - "reference": "ad785217c1e9555a7d6c6c8c9f406395a5e2882b", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", "shasum": "" }, "require": { - "doctrine/lexer": "^1 || ^2", + "doctrine/lexer": "^2 || ^3", "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", + "php": "^7.2 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/cache": "^5.4 || ^6", "vimeo/psalm": "^4.10" }, "suggest": { @@ -512,52 +511,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.2" + "source": "https://github.com/doctrine/annotations/tree/2.0.1" }, - "time": "2022-12-15T06:48:22+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" - }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2023-02-02T22:02:53+00:00" }, { "name": "doctrine/inflector", @@ -722,28 +678,27 @@ }, { "name": "doctrine/lexer", - "version": "2.1.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" + "vimeo/psalm": "^5.0" }, "type": "library", "autoload": { @@ -780,7 +735,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { @@ -796,7 +751,7 @@ "type": "tidelift" } ], - "time": "2022-12-14T08:49:07+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { "name": "dragonmantank/cron-expression", @@ -996,22 +951,23 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.13.2", + "version": "v3.14.3", "source": { "type": "git", "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "3952f08a81bd3b1b15e11c3de0b6bf037faa8496" + "reference": "b418036b95b4936a33fe906245d3044395935e73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/3952f08a81bd3b1b15e11c3de0b6bf037faa8496", - "reference": "3952f08a81bd3b1b15e11c3de0b6bf037faa8496", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b418036b95b4936a33fe906245d3044395935e73", + "reference": "b418036b95b4936a33fe906245d3044395935e73", "shasum": "" }, "require": { - "composer/semver": "^3.2", + "composer/semver": "^3.3", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", + "doctrine/annotations": "^2", + "doctrine/lexer": "^2 || ^3", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", @@ -1021,26 +977,26 @@ "symfony/filesystem": "^5.4 || ^6.0", "symfony/finder": "^5.4 || ^6.0", "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", "symfony/process": "^5.4 || ^6.0", "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { "justinrainbow/json-schema": "^5.2", "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", + "phpspec/prophecy": "^1.16", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", "phpunitgoodpractices/polyfill": "^1.6", "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.0", + "symfony/phpunit-bridge": "^6.2.3", "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { @@ -1073,7 +1029,7 @@ "description": "A tool to automatically fix PHP code style", "support": { "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.13.2" + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.3" }, "funding": [ { @@ -1081,7 +1037,7 @@ "type": "github" } ], - "time": "2023-01-02T23:53:50+00:00" + "time": "2023-01-30T00:24:29+00:00" }, { "name": "fruitcake/php-cors", @@ -1388,21 +1344,21 @@ }, { "name": "laravel/framework", - "version": "v9.48.0", + "version": "v9.50.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "c78ae7aeb0cbcb1a205050d3592247ba07f5b711" + "reference": "39932773c09658ddea9045958f305e67f9304995" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/c78ae7aeb0cbcb1a205050d3592247ba07f5b711", - "reference": "c78ae7aeb0cbcb1a205050d3592247ba07f5b711", + "url": "https://api.github.com/repos/laravel/framework/zipball/39932773c09658ddea9045958f305e67f9304995", + "reference": "39932773c09658ddea9045958f305e67f9304995", "shasum": "" }, "require": { - "brick/math": "^0.10.2", - "doctrine/inflector": "^2.0", + "brick/math": "^0.9.3|^0.10.2|^0.11", + "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.3.2", "egulias/email-validator": "^3.2.1|^4.0", "ext-mbstring": "*", @@ -1501,7 +1457,6 @@ "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", "brianium/paratest": "Required to run tests in parallel (^6.0).", "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", - "ext-bcmath": "Required to use the multiple_of validation rule.", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", @@ -1573,20 +1528,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-01-17T15:06:19+00:00" + "time": "2023-02-02T20:52:46+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.2.2", + "version": "v1.3.0", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae" + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/47afb7fae28ed29057fdca37e16a84f90cc62fae", - "reference": "47afb7fae28ed29057fdca37e16a84f90cc62fae", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", "shasum": "" }, "require": { @@ -1633,7 +1588,7 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2022-09-08T13:45:54+00:00" + "time": "2023-01-30T18:31:20+00:00" }, { "name": "league/commonmark", @@ -2044,16 +1999,16 @@ }, { "name": "monolog/monolog", - "version": "2.8.0", + "version": "2.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50" + "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/720488632c590286b88b80e62aa3d3d551ad4a50", - "reference": "720488632c590286b88b80e62aa3d3d551ad4a50", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb", + "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb", "shasum": "" }, "require": { @@ -2068,7 +2023,7 @@ "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", - "graylog2/gelf-php": "^1.4.2", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", @@ -2130,7 +2085,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.8.0" + "source": "https://github.com/Seldaek/monolog/tree/2.9.0" }, "funding": [ { @@ -2142,7 +2097,7 @@ "type": "tidelift" } ], - "time": "2022-07-24T11:55:47+00:00" + "time": "2023-02-05T13:07:32+00:00" }, { "name": "myclabs/deep-copy", @@ -2205,16 +2160,16 @@ }, { "name": "nesbot/carbon", - "version": "2.65.0", + "version": "2.66.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "09acf64155c16dc6f580f36569ae89344e9734a3" + "reference": "496712849902241f04902033b0441b269effe001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/09acf64155c16dc6f580f36569ae89344e9734a3", - "reference": "09acf64155c16dc6f580f36569ae89344e9734a3", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", + "reference": "496712849902241f04902033b0441b269effe001", "shasum": "" }, "require": { @@ -2303,7 +2258,7 @@ "type": "tidelift" } ], - "time": "2023-01-06T15:55:01+00:00" + "time": "2023-01-29T18:53:47+00:00" }, { "name": "nette/schema", @@ -2369,29 +2324,30 @@ }, { "name": "nette/utils", - "version": "v3.2.9", + "version": "v4.0.0", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c" + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c", - "reference": "c91bac3470c34b2ecd5400f6e6fdf0b64a836a5c", + "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", "shasum": "" }, "require": { - "php": ">=7.2 <8.3" + "php": ">=8.0 <8.3" }, "conflict": { - "nette/di": "<3.0.6" + "nette/finder": "<3", + "nette/schema": "<1.2.2" }, "require-dev": { "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "~2.0", + "nette/tester": "^2.4", "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.3" + "tracy/tracy": "^2.9" }, "suggest": { "ext-gd": "to use Image", @@ -2405,7 +2361,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -2449,9 +2405,9 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.9" + "source": "https://github.com/nette/utils/tree/v4.0.0" }, - "time": "2023-01-18T03:26:20+00:00" + "time": "2023-02-02T10:41:53+00:00" }, { "name": "nikic/php-parser", @@ -2597,23 +2553,23 @@ }, { "name": "orchestra/testbench", - "version": "v7.19.0", + "version": "v7.21.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "c413751e85972067e7c48cae68514935321c87f0" + "reference": "3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/c413751e85972067e7c48cae68514935321c87f0", - "reference": "c413751e85972067e7c48cae68514935321c87f0", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6", + "reference": "3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6", "shasum": "" }, "require": { "fakerphp/faker": "^1.21", - "laravel/framework": "^9.45", + "laravel/framework": "^9.50.2", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.19", + "orchestra/testbench-core": "^7.21", "php": "^8.0", "phpunit/phpunit": "^9.5.10", "spatie/laravel-ray": "^1.28", @@ -2650,22 +2606,22 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v7.19.0" + "source": "https://github.com/orchestral/testbench/tree/v7.21.0" }, - "time": "2023-01-10T10:16:26+00:00" + "time": "2023-02-03T02:10:41+00:00" }, { "name": "orchestra/testbench-core", - "version": "v7.19.0", + "version": "v7.21.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "2bfbbd451481cf27c9663060b792487925236500" + "reference": "07d48ce0fd781626e809e1a7591b75a89e6a2911" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/2bfbbd451481cf27c9663060b792487925236500", - "reference": "2bfbbd451481cf27c9663060b792487925236500", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/07d48ce0fd781626e809e1a7591b75a89e6a2911", + "reference": "07d48ce0fd781626e809e1a7591b75a89e6a2911", "shasum": "" }, "require": { @@ -2673,12 +2629,11 @@ }, "require-dev": { "fakerphp/faker": "^1.21", - "laravel/framework": "^9.45", - "laravel/laravel": "9.x-dev", - "laravel/pint": "^1.1", + "laravel/framework": "^9.50.2", + "laravel/pint": "^1.4", "mockery/mockery": "^1.5.1", "orchestra/canvas": "^7.0", - "phpstan/phpstan": "^1.8", + "phpstan/phpstan": "^1.9.14", "phpunit/phpunit": "^9.5.10", "spatie/laravel-ray": "^1.28", "symfony/process": "^6.0.9", @@ -2688,7 +2643,7 @@ "suggest": { "brianium/paratest": "Allow using parallel tresting (^6.4).", "fakerphp/faker": "Allow using Faker for testing (^1.21).", - "laravel/framework": "Required for testing (^9.45).", + "laravel/framework": "Required for testing (^9.50.2).", "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.2).", "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^7.0).", @@ -2739,7 +2694,7 @@ "issues": "https://github.com/orchestral/testbench/issues", "source": "https://github.com/orchestral/testbench-core" }, - "time": "2023-01-10T10:14:44+00:00" + "time": "2023-02-03T02:00:17+00:00" }, { "name": "phar-io/manifest", @@ -3247,16 +3202,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.28", + "version": "9.6.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" + "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", - "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", "shasum": "" }, "require": { @@ -3298,7 +3253,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -3329,7 +3284,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" }, "funding": [ { @@ -3345,7 +3300,7 @@ "type": "tidelift" } ], - "time": "2023-01-14T12:32:24+00:00" + "time": "2023-02-04T13:37:15+00:00" }, { "name": "pimple/pimple", @@ -3896,20 +3851,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.3", + "version": "4.x-dev", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "433b2014e3979047db08a17a205f410ba3869cf2" + "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/433b2014e3979047db08a17a205f410ba3869cf2", - "reference": "433b2014e3979047db08a17a205f410ba3869cf2", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/25c4faac19549ebfcd3a6a73732dddeb188eaf5a", + "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -3946,6 +3901,7 @@ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, + "default-branch": true, "type": "library", "extra": { "captainhook": { @@ -3972,7 +3928,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.3" + "source": "https://github.com/ramsey/uuid/tree/4.x" }, "funding": [ { @@ -3984,7 +3940,7 @@ "type": "tidelift" } ], - "time": "2023-01-12T18:13:24+00:00" + "time": "2023-01-28T17:00:47+00:00" }, { "name": "sebastian/cli-parser", @@ -4352,16 +4308,16 @@ }, { "name": "sebastian/environment", - "version": "5.1.4", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/1b5dff7bb151a4db11d49d90e5408e4e938270f7", - "reference": "1b5dff7bb151a4db11d49d90e5408e4e938270f7", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -4403,7 +4359,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.4" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -4411,7 +4367,7 @@ "type": "github" } ], - "time": "2022-04-03T09:37:03+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", @@ -4725,16 +4681,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -4773,10 +4729,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -4784,7 +4740,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -4843,16 +4799,16 @@ }, { "name": "sebastian/type", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", - "reference": "fb3fe09c5f0bae6bc27ef3ce933a1e0ed9464b6e", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { @@ -4887,7 +4843,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -4895,7 +4851,7 @@ "type": "github" } ], - "time": "2022-09-12T14:47:03+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -5812,16 +5768,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.2.5", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "9d081ead9d3432e2e8002178d14c4c9dd4b8ffbf" + "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/9d081ead9d3432e2e8002178d14c4c9dd4b8ffbf", - "reference": "9d081ead9d3432e2e8002178d14c4c9dd4b8ffbf", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8dd1f502bc2b3371d05092aa233b064b03ce7ed", + "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed", "shasum": "" }, "require": { @@ -5870,7 +5826,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.5" + "source": "https://github.com/symfony/http-foundation/tree/v6.2.6" }, "funding": [ { @@ -5886,20 +5842,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-01-30T15:46:28+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.2.5", + "version": "v6.2.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "f68aaa11eee6b21c99bce0f3d98815924888fe62" + "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/f68aaa11eee6b21c99bce0f3d98815924888fe62", - "reference": "f68aaa11eee6b21c99bce0f3d98815924888fe62", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7122db07b0d8dbf0de682267c84217573aee3ea7", + "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7", "shasum": "" }, "require": { @@ -5981,7 +5937,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.5" + "source": "https://github.com/symfony/http-kernel/tree/v6.2.6" }, "funding": [ { @@ -5997,7 +5953,7 @@ "type": "tidelift" } ], - "time": "2023-01-24T15:33:24+00:00" + "time": "2023-02-01T08:32:25+00:00" }, { "name": "symfony/mailer", @@ -8166,28 +8122,30 @@ }, { "name": "zbateson/mail-mime-parser", - "version": "2.2.3", + "version": "2.3.0", "source": { "type": "git", "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "295c7f82a8c44af685680d9df6714beb812e90ff" + "reference": "d59e0c5eeb1442fca94bcb3b9d3c6be66318a500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/295c7f82a8c44af685680d9df6714beb812e90ff", - "reference": "295c7f82a8c44af685680d9df6714beb812e90ff", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/d59e0c5eeb1442fca94bcb3b9d3c6be66318a500", + "reference": "d59e0c5eeb1442fca94bcb3b9d3c6be66318a500", "shasum": "" }, "require": { "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=5.4", + "php": ">=7.1", "pimple/pimple": "^3.0", "zbateson/mb-wrapper": "^1.0.1", "zbateson/stream-decorators": "^1.0.6" }, "require-dev": { + "friendsofphp/php-cs-fixer": "*", "mikey179/vfsstream": "^1.6.0", - "sanmai/phpunit-legacy-adapter": "^6.3 || ^8.2" + "phpstan/phpstan": "*", + "phpunit/phpunit": "<10" }, "suggest": { "ext-iconv": "For best support/performance", @@ -8235,7 +8193,7 @@ "type": "github" } ], - "time": "2022-09-28T16:31:49+00:00" + "time": "2023-01-30T19:04:55+00:00" }, { "name": "zbateson/mb-wrapper", @@ -8382,5 +8340,5 @@ "php": "^8.1" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.3.0" } From df7fcbece2a908bd0bba7de13e9469cca7211b1f Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 19:12:51 +0330 Subject: [PATCH 089/131] change version of testBench --- composer.json | 6 +----- composer.lock | 2 +- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/composer.json b/composer.json index a3e47a4..ca10831 100644 --- a/composer.json +++ b/composer.json @@ -32,14 +32,10 @@ "require-dev": { "phpunit/phpunit": "^9", "friendsofphp/php-cs-fixer": "^3.11", - "orchestra/testbench": "^7.0" + "orchestra/testbench": "^v7.21.0" }, "minimum-stability": "dev", "prefer-stable": true, - "scripts": { - "test:phpunit": "vendor/bin/phpunit", - "test:codestyle": "vendor/bin/php-cs-fixer fix -v --dry-run --stop-on-violation --using-cache=no" - }, "extra": { "laravel": { "providers": [ diff --git a/composer.lock b/composer.lock index f83d922..be4ae12 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4baec4c6f3912b6d74406025cedf237b", + "content-hash": "7deaa7af2df05fbb0ea99c1df1449c7b", "packages": [ { "name": "dnj/error-tracker-contracts", From b799266f067c1b430288834511371eedc1e8956c Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 19:28:39 +0330 Subject: [PATCH 090/131] change lock composer --- composer.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.lock b/composer.lock index be4ae12..a8959f4 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7deaa7af2df05fbb0ea99c1df1449c7b", + "content-hash": "5c9301182be44532f2addce17a647306", "packages": [ { "name": "dnj/error-tracker-contracts", From 18b9be6ae5100251847ecc58104e5226438011f3 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 19:28:46 +0330 Subject: [PATCH 091/131] change version --- composer.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.json b/composer.json index ca10831..62ab839 100644 --- a/composer.json +++ b/composer.json @@ -30,9 +30,9 @@ "dnj/error-tracker-contracts": "@dev" }, "require-dev": { - "phpunit/phpunit": "^9", "friendsofphp/php-cs-fixer": "^3.11", - "orchestra/testbench": "^v7.21.0" + "phpunit/phpunit": "^9.6", + "orchestra/testbench": "^7.21" }, "minimum-stability": "dev", "prefer-stable": true, @@ -43,4 +43,4 @@ ] } } -} \ No newline at end of file +} From 7ca93cd361c25dec351e50f5739ea26ede9d90f8 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 19:55:09 +0330 Subject: [PATCH 092/131] remove composer.lock --- composer.lock | 8344 ------------------------------------------------- 1 file changed, 8344 deletions(-) delete mode 100644 composer.lock diff --git a/composer.lock b/composer.lock deleted file mode 100644 index a8959f4..0000000 --- a/composer.lock +++ /dev/null @@ -1,8344 +0,0 @@ -{ - "_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": "5c9301182be44532f2addce17a647306", - "packages": [ - { - "name": "dnj/error-tracker-contracts", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/dnj/php-error-tracker-contracts.git", - "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnj/php-error-tracker-contracts/zipball/b2be0241e1d622bef4da7f6b741246f8410c884c", - "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.11" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "dnj\\ErrorTracker\\Contracts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "support": { - "issues": "https://github.com/dnj/php-error-tracker-contracts/issues", - "source": "https://github.com/dnj/php-error-tracker-contracts/tree/master" - }, - "time": "2023-01-28T20:45:11+00:00" - }, - { - "name": "dnj/laravel-user-logger", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/dnj/laravel-user-logger.git", - "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnj/laravel-user-logger/zipball/9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", - "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.11", - "orchestra/testbench": "^7.0", - "phpunit/phpunit": "^9" - }, - "default-branch": true, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "dnj\\UserLogger\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "dnj\\UserLogger\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "support": { - "issues": "https://github.com/dnj/laravel-user-logger/issues", - "source": "https://github.com/dnj/laravel-user-logger/tree/master" - }, - "time": "2023-01-03T10:34:23+00:00" - } - ], - "packages-dev": [ - { - "name": "brick/math", - "version": "0.11.0", - "source": { - "type": "git", - "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Brick\\Math\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Arbitrary-precision arithmetic library", - "keywords": [ - "Arbitrary-precision", - "BigInteger", - "BigRational", - "arithmetic", - "bigdecimal", - "bignum", - "brick", - "math" - ], - "support": { - "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" - }, - "funding": [ - { - "url": "https://github.com/BenMorel", - "type": "github" - } - ], - "time": "2023-01-15T23:15:59+00:00" - }, - { - "name": "composer/pcre", - "version": "3.1.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-11-17T09:50:14+00:00" - }, - { - "name": "composer/semver", - "version": "3.3.2", - "source": { - "type": "git", - "url": "https://github.com/composer/semver.git", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", - "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", - "shasum": "" - }, - "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Semver\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nils Adermann", - "email": "naderman@naderman.de", - "homepage": "http://www.naderman.de" - }, - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - }, - { - "name": "Rob Bast", - "email": "rob.bast@gmail.com", - "homepage": "http://robbast.nl" - } - ], - "description": "Semver library that offers utilities, version constraint parsing and validation.", - "keywords": [ - "semantic", - "semver", - "validation", - "versioning" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.3.2" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-04-01T19:23:25+00:00" - }, - { - "name": "composer/xdebug-handler", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", - "shasum": "" - }, - "require": { - "composer/pcre": "^1 || ^2 || ^3", - "php": "^7.2.5 || ^8.0", - "psr/log": "^1 || ^2 || ^3" - }, - "require-dev": { - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Composer\\XdebugHandler\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "John Stevenson", - "email": "john-stevenson@blueyonder.co.uk" - } - ], - "description": "Restarts a process without Xdebug.", - "keywords": [ - "Xdebug", - "performance" - ], - "support": { - "irc": "irc://irc.freenode.org/composer", - "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T21:32:43+00:00" - }, - { - "name": "dflydev/dot-access-data", - "version": "v3.0.2", - "source": { - "type": "git", - "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^0.12.42", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", - "scrutinizer/ocular": "1.6.0", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Dflydev\\DotAccessData\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Dragonfly Development Inc.", - "email": "info@dflydev.com", - "homepage": "http://dflydev.com" - }, - { - "name": "Beau Simensen", - "email": "beau@dflydev.com", - "homepage": "http://beausimensen.com" - }, - { - "name": "Carlos Frutos", - "email": "carlos@kiwing.it", - "homepage": "https://github.com/cfrutos" - }, - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com" - } - ], - "description": "Given a deep data structure, access data by dot notation.", - "homepage": "https://github.com/dflydev/dflydev-dot-access-data", - "keywords": [ - "access", - "data", - "dot", - "notation" - ], - "support": { - "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" - }, - "time": "2022-10-27T11:44:00+00:00" - }, - { - "name": "doctrine/annotations", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2 || ^3", - "ext-tokenizer": "*", - "php": "^7.2 || ^8.0", - "psr/cache": "^1 || ^2 || ^3" - }, - "require-dev": { - "doctrine/cache": "^2.0", - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", - "vimeo/psalm": "^4.10" - }, - "suggest": { - "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "Docblock Annotations Parser", - "homepage": "https://www.doctrine-project.org/projects/annotations.html", - "keywords": [ - "annotations", - "docblock", - "parser" - ], - "support": { - "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" - }, - "time": "2023-02-02T22:02:53+00:00" - }, - { - "name": "doctrine/inflector", - "version": "2.0.6", - "source": { - "type": "git", - "url": "https://github.com/doctrine/inflector.git", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.3", - "phpunit/phpunit": "^8.5 || ^9.5", - "vimeo/psalm": "^4.25" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" - }, - { - "name": "Jonathan Wage", - "email": "jonwage@gmail.com" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", - "homepage": "https://www.doctrine-project.org/projects/inflector.html", - "keywords": [ - "inflection", - "inflector", - "lowercase", - "manipulation", - "php", - "plural", - "singular", - "strings", - "uppercase", - "words" - ], - "support": { - "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.6" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", - "type": "tidelift" - } - ], - "time": "2022-10-20T09:10:12+00:00" - }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" - }, - { - "name": "doctrine/lexer", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", - "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Common\\Lexer\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Guilherme Blanco", - "email": "guilhermeblanco@gmail.com" - }, - { - "name": "Roman Borschel", - "email": "roman@code-factory.org" - }, - { - "name": "Johannes Schmitt", - "email": "schmittjoh@gmail.com" - } - ], - "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", - "homepage": "https://www.doctrine-project.org/projects/lexer.html", - "keywords": [ - "annotations", - "docblock", - "lexer", - "parser", - "php" - ], - "support": { - "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", - "type": "tidelift" - } - ], - "time": "2022-12-15T16:57:16+00:00" - }, - { - "name": "dragonmantank/cron-expression", - "version": "v3.3.2", - "source": { - "type": "git", - "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", - "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", - "shasum": "" - }, - "require": { - "php": "^7.2|^8.0", - "webmozart/assert": "^1.0" - }, - "replace": { - "mtdowling/cron-expression": "^1.0" - }, - "require-dev": { - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.0", - "phpstan/phpstan-webmozart-assert": "^1.0", - "phpunit/phpunit": "^7.0|^8.0|^9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Cron\\": "src/Cron/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Tankersley", - "email": "chris@ctankersley.com", - "homepage": "https://github.com/dragonmantank" - } - ], - "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", - "keywords": [ - "cron", - "schedule" - ], - "support": { - "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" - }, - "funding": [ - { - "url": "https://github.com/dragonmantank", - "type": "github" - } - ], - "time": "2022-09-10T18:51:20+00:00" - }, - { - "name": "egulias/email-validator", - "version": "4.0.1", - "source": { - "type": "git", - "url": "https://github.com/egulias/EmailValidator.git", - "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", - "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", - "shasum": "" - }, - "require": { - "doctrine/lexer": "^2.0 || ^3.0", - "php": ">=8.1", - "symfony/polyfill-intl-idn": "^1.26" - }, - "require-dev": { - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^4.30" - }, - "suggest": { - "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Egulias\\EmailValidator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Eduardo Gulias Davis" - } - ], - "description": "A library for validating emails against several RFCs", - "homepage": "https://github.com/egulias/EmailValidator", - "keywords": [ - "email", - "emailvalidation", - "emailvalidator", - "validation", - "validator" - ], - "support": { - "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" - }, - "funding": [ - { - "url": "https://github.com/egulias", - "type": "github" - } - ], - "time": "2023-01-14T14:17:03+00:00" - }, - { - "name": "fakerphp/faker", - "version": "v1.21.0", - "source": { - "type": "git", - "url": "https://github.com/FakerPHP/Faker.git", - "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", - "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0", - "psr/container": "^1.0 || ^2.0", - "symfony/deprecation-contracts": "^2.2 || ^3.0" - }, - "conflict": { - "fzaninotto/faker": "*" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "doctrine/persistence": "^1.3 || ^2.0", - "ext-intl": "*", - "phpunit/phpunit": "^9.5.26", - "symfony/phpunit-bridge": "^5.4.16" - }, - "suggest": { - "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", - "ext-curl": "Required by Faker\\Provider\\Image to download images.", - "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", - "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", - "ext-mbstring": "Required for multibyte Unicode string functionality." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, - "autoload": { - "psr-4": { - "Faker\\": "src/Faker/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "François Zaninotto" - } - ], - "description": "Faker is a PHP library that generates fake data for you.", - "keywords": [ - "data", - "faker", - "fixtures" - ], - "support": { - "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" - }, - "time": "2022-12-13T13:54:32+00:00" - }, - { - "name": "friendsofphp/php-cs-fixer", - "version": "v3.14.3", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "b418036b95b4936a33fe906245d3044395935e73" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b418036b95b4936a33fe906245d3044395935e73", - "reference": "b418036b95b4936a33fe906245d3044395935e73", - "shasum": "" - }, - "require": { - "composer/semver": "^3.3", - "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^2", - "doctrine/lexer": "^2 || ^3", - "ext-json": "*", - "ext-tokenizer": "*", - "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0", - "symfony/console": "^5.4 || ^6.0", - "symfony/event-dispatcher": "^5.4 || ^6.0", - "symfony/filesystem": "^5.4 || ^6.0", - "symfony/finder": "^5.4 || ^6.0", - "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", - "symfony/process": "^5.4 || ^6.0", - "symfony/stopwatch": "^5.4 || ^6.0" - }, - "require-dev": { - "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", - "php-cs-fixer/accessible-object": "^1.1", - "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", - "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", - "phpspec/prophecy-phpunit": "^2.0", - "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", - "symfony/yaml": "^5.4 || ^6.0" - }, - "suggest": { - "ext-dom": "For handling output formats in XML", - "ext-mbstring": "For handling non-UTF8 characters." - }, - "bin": [ - "php-cs-fixer" - ], - "type": "application", - "autoload": { - "psr-4": { - "PhpCsFixer\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Dariusz Rumiński", - "email": "dariusz.ruminski@gmail.com" - } - ], - "description": "A tool to automatically fix PHP code style", - "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.3" - }, - "funding": [ - { - "url": "https://github.com/keradus", - "type": "github" - } - ], - "time": "2023-01-30T00:24:29+00:00" - }, - { - "name": "fruitcake/php-cors", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/fruitcake/php-cors.git", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", - "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", - "shasum": "" - }, - "require": { - "php": "^7.4|^8.0", - "symfony/http-foundation": "^4.4|^5.4|^6" - }, - "require-dev": { - "phpstan/phpstan": "^1.4", - "phpunit/phpunit": "^9", - "squizlabs/php_codesniffer": "^3.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.1-dev" - } - }, - "autoload": { - "psr-4": { - "Fruitcake\\Cors\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fruitcake", - "homepage": "https://fruitcake.nl" - }, - { - "name": "Barryvdh", - "email": "barryvdh@gmail.com" - } - ], - "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", - "homepage": "https://github.com/fruitcake/php-cors", - "keywords": [ - "cors", - "laravel", - "symfony" - ], - "support": { - "issues": "https://github.com/fruitcake/php-cors/issues", - "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" - }, - "funding": [ - { - "url": "https://fruitcake.nl", - "type": "custom" - }, - { - "url": "https://github.com/barryvdh", - "type": "github" - } - ], - "time": "2022-02-20T15:07:15+00:00" - }, - { - "name": "graham-campbell/result-type", - "version": "v1.1.0", - "source": { - "type": "git", - "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", - "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.28 || ^9.5.21" - }, - "type": "library", - "autoload": { - "psr-4": { - "GrahamCampbell\\ResultType\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "An Implementation Of The Result Type", - "keywords": [ - "Graham Campbell", - "GrahamCampbell", - "Result Type", - "Result-Type", - "result" - ], - "support": { - "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", - "type": "tidelift" - } - ], - "time": "2022-07-30T15:56:11+00:00" - }, - { - "name": "guzzlehttp/psr7", - "version": "2.4.3", - "source": { - "type": "git", - "url": "https://github.com/guzzle/psr7.git", - "reference": "67c26b443f348a51926030c83481b85718457d3d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", - "reference": "67c26b443f348a51926030c83481b85718457d3d", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0", - "psr/http-factory": "^1.0", - "psr/http-message": "^1.0", - "ralouphie/getallheaders": "^3.0" - }, - "provide": { - "psr/http-factory-implementation": "1.0", - "psr/http-message-implementation": "1.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8.1", - "http-interop/http-factory-tests": "^0.9", - "phpunit/phpunit": "^8.5.29 || ^9.5.23" - }, - "suggest": { - "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": false - }, - "branch-alias": { - "dev-master": "2.4-dev" - } - }, - "autoload": { - "psr-4": { - "GuzzleHttp\\Psr7\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "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" - }, - { - "name": "Márk Sági-Kazár", - "email": "mark.sagikazar@gmail.com", - "homepage": "https://sagikazarmark.hu" - } - ], - "description": "PSR-7 message implementation that also provides common utility methods", - "keywords": [ - "http", - "message", - "psr-7", - "request", - "response", - "stream", - "uri", - "url" - ], - "support": { - "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.3" - }, - "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": "2022-10-26T14:07:24+00:00" - }, - { - "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", - "source": { - "type": "git", - "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "shasum": "" - }, - "require": { - "php": "^5.3|^7.0|^8.0" - }, - "replace": { - "cordoval/hamcrest-php": "*", - "davedevelopment/hamcrest-php": "*", - "kodova/hamcrest-php": "*" - }, - "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.1-dev" - } - }, - "autoload": { - "classmap": [ - "hamcrest" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "description": "This is the PHP port of Hamcrest Matchers", - "keywords": [ - "test" - ], - "support": { - "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" - }, - "time": "2020-07-09T08:09:16+00:00" - }, - { - "name": "laravel/framework", - "version": "v9.50.2", - "source": { - "type": "git", - "url": "https://github.com/laravel/framework.git", - "reference": "39932773c09658ddea9045958f305e67f9304995" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/39932773c09658ddea9045958f305e67f9304995", - "reference": "39932773c09658ddea9045958f305e67f9304995", - "shasum": "" - }, - "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", - "doctrine/inflector": "^2.0.5", - "dragonmantank/cron-expression": "^3.3.2", - "egulias/email-validator": "^3.2.1|^4.0", - "ext-mbstring": "*", - "ext-openssl": "*", - "fruitcake/php-cors": "^1.2", - "laravel/serializable-closure": "^1.2.2", - "league/commonmark": "^2.2.1", - "league/flysystem": "^3.8.0", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.62.1", - "nunomaduro/termwind": "^1.13", - "php": "^8.0.2", - "psr/container": "^1.1.1|^2.0.1", - "psr/log": "^1.0|^2.0|^3.0", - "psr/simple-cache": "^1.0|^2.0|^3.0", - "ramsey/uuid": "^4.7", - "symfony/console": "^6.0.9", - "symfony/error-handler": "^6.0", - "symfony/finder": "^6.0", - "symfony/http-foundation": "^6.0", - "symfony/http-kernel": "^6.0", - "symfony/mailer": "^6.0", - "symfony/mime": "^6.0", - "symfony/process": "^6.0", - "symfony/routing": "^6.0", - "symfony/uid": "^6.0", - "symfony/var-dumper": "^6.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.5", - "vlucas/phpdotenv": "^5.4.1", - "voku/portable-ascii": "^2.0" - }, - "conflict": { - "tightenco/collect": "<5.5.33" - }, - "provide": { - "psr/container-implementation": "1.1|2.0", - "psr/simple-cache-implementation": "1.0|2.0|3.0" - }, - "replace": { - "illuminate/auth": "self.version", - "illuminate/broadcasting": "self.version", - "illuminate/bus": "self.version", - "illuminate/cache": "self.version", - "illuminate/collections": "self.version", - "illuminate/conditionable": "self.version", - "illuminate/config": "self.version", - "illuminate/console": "self.version", - "illuminate/container": "self.version", - "illuminate/contracts": "self.version", - "illuminate/cookie": "self.version", - "illuminate/database": "self.version", - "illuminate/encryption": "self.version", - "illuminate/events": "self.version", - "illuminate/filesystem": "self.version", - "illuminate/hashing": "self.version", - "illuminate/http": "self.version", - "illuminate/log": "self.version", - "illuminate/macroable": "self.version", - "illuminate/mail": "self.version", - "illuminate/notifications": "self.version", - "illuminate/pagination": "self.version", - "illuminate/pipeline": "self.version", - "illuminate/queue": "self.version", - "illuminate/redis": "self.version", - "illuminate/routing": "self.version", - "illuminate/session": "self.version", - "illuminate/support": "self.version", - "illuminate/testing": "self.version", - "illuminate/translation": "self.version", - "illuminate/validation": "self.version", - "illuminate/view": "self.version" - }, - "require-dev": { - "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^2.13.3|^3.1.4", - "fakerphp/faker": "^1.21", - "guzzlehttp/guzzle": "^7.5", - "league/flysystem-aws-s3-v3": "^3.0", - "league/flysystem-ftp": "^3.0", - "league/flysystem-path-prefixing": "^3.3", - "league/flysystem-read-only": "^3.3", - "league/flysystem-sftp-v3": "^3.0", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.16", - "pda/pheanstalk": "^4.0", - "phpstan/phpdoc-parser": "^1.15", - "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^9.5.8", - "predis/predis": "^1.1.9|^2.0.2", - "symfony/cache": "^6.0", - "symfony/http-client": "^6.0" - }, - "suggest": { - "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", - "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", - "ext-ftp": "Required to use the Flysystem FTP driver.", - "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", - "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker.", - "ext-posix": "Required to use all features of the queue worker.", - "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", - "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", - "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", - "laravel/tinker": "Required to use the tinker console command (^2.0).", - "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", - "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", - "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", - "league/flysystem-read-only": "Required to use read-only disks (^3.3)", - "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.5.1).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", - "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", - "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", - "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", - "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.x-dev" - } - }, - "autoload": { - "files": [ - "src/Illuminate/Collections/helpers.php", - "src/Illuminate/Events/functions.php", - "src/Illuminate/Foundation/helpers.php", - "src/Illuminate/Support/helpers.php" - ], - "psr-4": { - "Illuminate\\": "src/Illuminate/", - "Illuminate\\Support\\": [ - "src/Illuminate/Macroable/", - "src/Illuminate/Collections/", - "src/Illuminate/Conditionable/" - ] - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - } - ], - "description": "The Laravel Framework.", - "homepage": "https://laravel.com", - "keywords": [ - "framework", - "laravel" - ], - "support": { - "issues": "https://github.com/laravel/framework/issues", - "source": "https://github.com/laravel/framework" - }, - "time": "2023-02-02T20:52:46+00:00" - }, - { - "name": "laravel/serializable-closure", - "version": "v1.3.0", - "source": { - "type": "git", - "url": "https://github.com/laravel/serializable-closure.git", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "nesbot/carbon": "^2.61", - "pestphp/pest": "^1.21.3", - "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Laravel\\SerializableClosure\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Taylor Otwell", - "email": "taylor@laravel.com" - }, - { - "name": "Nuno Maduro", - "email": "nuno@laravel.com" - } - ], - "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", - "keywords": [ - "closure", - "laravel", - "serializable" - ], - "support": { - "issues": "https://github.com/laravel/serializable-closure/issues", - "source": "https://github.com/laravel/serializable-closure" - }, - "time": "2023-01-30T18:31:20+00:00" - }, - { - "name": "league/commonmark", - "version": "2.3.8", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c493585c130544c4e91d2e0e131e6d35cb0cbc47", - "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "league/config": "^1.1.1", - "php": "^7.4 || ^8.0", - "psr/event-dispatcher": "^1.0", - "symfony/deprecation-contracts": "^2.1 || ^3.0", - "symfony/polyfill-php80": "^1.16" - }, - "require-dev": { - "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", - "commonmark/commonmark.js": "0.30.0", - "composer/package-versions-deprecated": "^1.8", - "embed/embed": "^4.4", - "erusev/parsedown": "^1.0", - "ext-json": "*", - "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4 || ^2.0", - "nyholm/psr7": "^1.5", - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21", - "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", - "unleashedtech/php-coding-standard": "^3.1.1", - "vimeo/psalm": "^4.24.0 || ^5.0.0" - }, - "suggest": { - "symfony/yaml": "v2.3+ required if using the Front Matter extension" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.4-dev" - } - }, - "autoload": { - "psr-4": { - "League\\CommonMark\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", - "homepage": "https://commonmark.thephpleague.com", - "keywords": [ - "commonmark", - "flavored", - "gfm", - "github", - "github-flavored", - "markdown", - "md", - "parser" - ], - "support": { - "docs": "https://commonmark.thephpleague.com/", - "forum": "https://github.com/thephpleague/commonmark/discussions", - "issues": "https://github.com/thephpleague/commonmark/issues", - "rss": "https://github.com/thephpleague/commonmark/releases.atom", - "source": "https://github.com/thephpleague/commonmark" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/commonmark", - "type": "tidelift" - } - ], - "time": "2022-12-10T16:02:17+00:00" - }, - { - "name": "league/config", - "version": "v1.2.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/config.git", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", - "shasum": "" - }, - "require": { - "dflydev/dot-access-data": "^3.0.1", - "nette/schema": "^1.2", - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.5", - "scrutinizer/ocular": "^1.8.1", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.2-dev" - } - }, - "autoload": { - "psr-4": { - "League\\Config\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Colin O'Dell", - "email": "colinodell@gmail.com", - "homepage": "https://www.colinodell.com", - "role": "Lead Developer" - } - ], - "description": "Define configuration arrays with strict schemas and access values with dot notation", - "homepage": "https://config.thephpleague.com", - "keywords": [ - "array", - "config", - "configuration", - "dot", - "dot-access", - "nested", - "schema" - ], - "support": { - "docs": "https://config.thephpleague.com/", - "issues": "https://github.com/thephpleague/config/issues", - "rss": "https://github.com/thephpleague/config/releases.atom", - "source": "https://github.com/thephpleague/config" - }, - "funding": [ - { - "url": "https://www.colinodell.com/sponsor", - "type": "custom" - }, - { - "url": "https://www.paypal.me/colinpodell/10.00", - "type": "custom" - }, - { - "url": "https://github.com/colinodell", - "type": "github" - } - ], - "time": "2022-12-11T20:36:23+00:00" - }, - { - "name": "league/flysystem", - "version": "3.12.2", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f6377c709d2275ed6feaf63e44be7a7162b0e77f", - "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f", - "shasum": "" - }, - "require": { - "league/mime-type-detection": "^1.0.0", - "php": "^8.0.2" - }, - "conflict": { - "aws/aws-sdk-php": "3.209.31 || 3.210.0", - "guzzlehttp/guzzle": "<7.0", - "guzzlehttp/ringphp": "<1.1.1", - "phpseclib/phpseclib": "3.0.15", - "symfony/http-client": "<5.2" - }, - "require-dev": { - "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.1", - "aws/aws-sdk-php": "^3.220.0", - "composer/semver": "^3.0", - "ext-fileinfo": "*", - "ext-ftp": "*", - "ext-zip": "*", - "friendsofphp/php-cs-fixer": "^3.5", - "google/cloud-storage": "^1.23", - "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.14", - "phpstan/phpstan": "^0.12.26", - "phpunit/phpunit": "^9.5.11", - "sabre/dav": "^4.3.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\Flysystem\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "File storage abstraction for PHP", - "keywords": [ - "WebDAV", - "aws", - "cloud", - "file", - "files", - "filesystem", - "filesystems", - "ftp", - "s3", - "sftp", - "storage" - ], - "support": { - "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.12.2" - }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2023-01-19T12:02:19+00:00" - }, - { - "name": "league/mime-type-detection", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", - "shasum": "" - }, - "require": { - "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.2", - "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "League\\MimeTypeDetection\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Frank de Jonge", - "email": "info@frankdejonge.nl" - } - ], - "description": "Mime-type detection for Flysystem", - "support": { - "issues": "https://github.com/thephpleague/mime-type-detection/issues", - "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" - }, - "funding": [ - { - "url": "https://github.com/frankdejonge", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/league/flysystem", - "type": "tidelift" - } - ], - "time": "2022-04-17T13:12:02+00:00" - }, - { - "name": "mockery/mockery", - "version": "1.5.1", - "source": { - "type": "git", - "url": "https://github.com/mockery/mockery.git", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", - "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", - "shasum": "" - }, - "require": { - "hamcrest/hamcrest-php": "^2.0.1", - "lib-pcre": ">=7.0", - "php": "^7.3 || ^8.0" - }, - "conflict": { - "phpunit/phpunit": "<8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.5 || ^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Mockery": "library/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Pádraic Brady", - "email": "padraic.brady@gmail.com", - "homepage": "http://blog.astrumfutura.com" - }, - { - "name": "Dave Marshall", - "email": "dave.marshall@atstsolutions.co.uk", - "homepage": "http://davedevelopment.co.uk" - } - ], - "description": "Mockery is a simple yet flexible PHP mock object framework", - "homepage": "https://github.com/mockery/mockery", - "keywords": [ - "BDD", - "TDD", - "library", - "mock", - "mock objects", - "mockery", - "stub", - "test", - "test double", - "testing" - ], - "support": { - "issues": "https://github.com/mockery/mockery/issues", - "source": "https://github.com/mockery/mockery/tree/1.5.1" - }, - "time": "2022-09-07T15:32:08+00:00" - }, - { - "name": "monolog/monolog", - "version": "2.9.0", - "source": { - "type": "git", - "url": "https://github.com/Seldaek/monolog.git", - "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb", - "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb", - "shasum": "" - }, - "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" - }, - "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" - }, - "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", - "doctrine/couchdb": "~1.0@dev", - "elasticsearch/elasticsearch": "^7 || ^8", - "ext-json": "*", - "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", - "guzzlehttp/psr7": "^2.2", - "mongodb/mongodb": "^1.8", - "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", - "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", - "symfony/mailer": "^5.4 || ^6", - "symfony/mime": "^5.4 || ^6" - }, - "suggest": { - "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", - "doctrine/couchdb": "Allow sending log messages to a CouchDB server", - "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", - "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", - "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", - "ext-mbstring": "Allow to work properly with unicode symbols", - "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", - "ext-openssl": "Required to send log messages using SSL", - "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", - "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", - "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", - "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", - "rollbar/rollbar": "Allow sending log messages to Rollbar", - "ruflin/elastica": "Allow sending log messages to an Elastic Search server" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "2.x-dev" - } - }, - "autoload": { - "psr-4": { - "Monolog\\": "src/Monolog" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Sends your logs to files, sockets, inboxes, databases and various web services", - "homepage": "https://github.com/Seldaek/monolog", - "keywords": [ - "log", - "logging", - "psr-3" - ], - "support": { - "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.0" - }, - "funding": [ - { - "url": "https://github.com/Seldaek", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", - "type": "tidelift" - } - ], - "time": "2023-02-05T13:07:32+00:00" - }, - { - "name": "myclabs/deep-copy", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", - "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", - "shasum": "" - }, - "require": { - "php": "^7.1 || ^8.0" - }, - "conflict": { - "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" - }, - "require-dev": { - "doctrine/collections": "^1.6.8", - "doctrine/common": "^2.13.3 || ^3.2.2", - "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" - }, - "type": "library", - "autoload": { - "files": [ - "src/DeepCopy/deep_copy.php" - ], - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "Create deep copies (clones) of your objects", - "keywords": [ - "clone", - "copy", - "duplicate", - "object", - "object graph" - ], - "support": { - "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" - }, - "funding": [ - { - "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", - "type": "tidelift" - } - ], - "time": "2022-03-03T13:19:32+00:00" - }, - { - "name": "nesbot/carbon", - "version": "2.66.0", - "source": { - "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "496712849902241f04902033b0441b269effe001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", - "reference": "496712849902241f04902033b0441b269effe001", - "shasum": "" - }, - "require": { - "ext-json": "*", - "php": "^7.1.8 || ^8.0", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16", - "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" - }, - "require-dev": { - "doctrine/dbal": "^2.0 || ^3.1.4", - "doctrine/orm": "^2.7", - "friendsofphp/php-cs-fixer": "^3.0", - "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", - "phpmd/phpmd": "^2.9", - "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12.99 || ^1.7.14", - "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", - "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", - "squizlabs/php_codesniffer": "^3.4" - }, - "bin": [ - "bin/carbon" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, - "laravel": { - "providers": [ - "Carbon\\Laravel\\ServiceProvider" - ] - }, - "phpstan": { - "includes": [ - "extension.neon" - ] - } - }, - "autoload": { - "psr-4": { - "Carbon\\": "src/Carbon/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Brian Nesbitt", - "email": "brian@nesbot.com", - "homepage": "https://markido.com" - }, - { - "name": "kylekatarnls", - "homepage": "https://github.com/kylekatarnls" - } - ], - "description": "An API extension for DateTime that supports 281 different languages.", - "homepage": "https://carbon.nesbot.com", - "keywords": [ - "date", - "datetime", - "time" - ], - "support": { - "docs": "https://carbon.nesbot.com/docs", - "issues": "https://github.com/briannesbitt/Carbon/issues", - "source": "https://github.com/briannesbitt/Carbon" - }, - "funding": [ - { - "url": "https://github.com/sponsors/kylekatarnls", - "type": "github" - }, - { - "url": "https://opencollective.com/Carbon#sponsor", - "type": "opencollective" - }, - { - "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", - "type": "tidelift" - } - ], - "time": "2023-01-29T18:53:47+00:00" - }, - { - "name": "nette/schema", - "version": "v1.2.3", - "source": { - "type": "git", - "url": "https://github.com/nette/schema.git", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", - "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", - "shasum": "" - }, - "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.3" - }, - "require-dev": { - "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.7" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "📐 Nette Schema: validating data structures against a given Schema.", - "homepage": "https://nette.org", - "keywords": [ - "config", - "nette" - ], - "support": { - "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.3" - }, - "time": "2022-10-13T01:24:26+00:00" - }, - { - "name": "nette/utils", - "version": "v4.0.0", - "source": { - "type": "git", - "url": "https://github.com/nette/utils.git", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", - "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", - "shasum": "" - }, - "require": { - "php": ">=8.0 <8.3" - }, - "conflict": { - "nette/finder": "<3", - "nette/schema": "<1.2.2" - }, - "require-dev": { - "jetbrains/phpstorm-attributes": "dev-master", - "nette/tester": "^2.4", - "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.9" - }, - "suggest": { - "ext-gd": "to use Image", - "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", - "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", - "ext-json": "to use Nette\\Utils\\Json", - "ext-mbstring": "to use Strings::lower() etc...", - "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", - "ext-xml": "to use Strings::length() etc. when mbstring is not available" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause", - "GPL-2.0-only", - "GPL-3.0-only" - ], - "authors": [ - { - "name": "David Grudl", - "homepage": "https://davidgrudl.com" - }, - { - "name": "Nette Community", - "homepage": "https://nette.org/contributors" - } - ], - "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", - "homepage": "https://nette.org", - "keywords": [ - "array", - "core", - "datetime", - "images", - "json", - "nette", - "paginator", - "password", - "slugify", - "string", - "unicode", - "utf-8", - "utility", - "validation" - ], - "support": { - "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.0" - }, - "time": "2023-02-02T10:41:53+00:00" - }, - { - "name": "nikic/php-parser", - "version": "v4.15.3", - "source": { - "type": "git", - "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", - "shasum": "" - }, - "require": { - "ext-tokenizer": "*", - "php": ">=7.0" - }, - "require-dev": { - "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" - }, - "bin": [ - "bin/php-parse" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpParser\\": "lib/PhpParser" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Nikita Popov" - } - ], - "description": "A PHP parser written in PHP", - "keywords": [ - "parser", - "php" - ], - "support": { - "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" - }, - "time": "2023-01-16T22:05:37+00:00" - }, - { - "name": "nunomaduro/termwind", - "version": "v1.15.0", - "source": { - "type": "git", - "url": "https://github.com/nunomaduro/termwind.git", - "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/594ab862396c16ead000de0c3c38f4a5cbe1938d", - "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d", - "shasum": "" - }, - "require": { - "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" - }, - "require-dev": { - "ergebnis/phpstan-rules": "^1.0.", - "illuminate/console": "^8.0|^9.0", - "illuminate/support": "^8.0|^9.0", - "laravel/pint": "^1.0.0", - "pestphp/pest": "^1.21.0", - "pestphp/pest-plugin-mock": "^1.0", - "phpstan/phpstan": "^1.4.6", - "phpstan/phpstan-strict-rules": "^1.1.0", - "symfony/var-dumper": "^5.2.7|^6.0.0", - "thecodingmachine/phpstan-strict-rules": "^1.0.0" - }, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "Termwind\\Laravel\\TermwindServiceProvider" - ] - } - }, - "autoload": { - "files": [ - "src/Functions.php" - ], - "psr-4": { - "Termwind\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nuno Maduro", - "email": "enunomaduro@gmail.com" - } - ], - "description": "Its like Tailwind CSS, but for the console.", - "keywords": [ - "cli", - "console", - "css", - "package", - "php", - "style" - ], - "support": { - "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.0" - }, - "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://github.com/xiCO2k", - "type": "github" - } - ], - "time": "2022-12-20T19:00:15+00:00" - }, - { - "name": "orchestra/testbench", - "version": "v7.21.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench.git", - "reference": "3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6", - "reference": "3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6", - "shasum": "" - }, - "require": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^9.50.2", - "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.21", - "php": "^8.0", - "phpunit/phpunit": "^9.5.10", - "spatie/laravel-ray": "^1.28", - "symfony/process": "^6.0.9", - "symfony/yaml": "^6.0.9", - "vlucas/phpdotenv": "^5.4.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.0-dev" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Laravel Testing Helper for Packages Development", - "homepage": "https://packages.tools/testbench/", - "keywords": [ - "BDD", - "TDD", - "laravel", - "orchestra-platform", - "orchestral", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v7.21.0" - }, - "time": "2023-02-03T02:10:41+00:00" - }, - { - "name": "orchestra/testbench-core", - "version": "v7.21.0", - "source": { - "type": "git", - "url": "https://github.com/orchestral/testbench-core.git", - "reference": "07d48ce0fd781626e809e1a7591b75a89e6a2911" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/07d48ce0fd781626e809e1a7591b75a89e6a2911", - "reference": "07d48ce0fd781626e809e1a7591b75a89e6a2911", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "fakerphp/faker": "^1.21", - "laravel/framework": "^9.50.2", - "laravel/pint": "^1.4", - "mockery/mockery": "^1.5.1", - "orchestra/canvas": "^7.0", - "phpstan/phpstan": "^1.9.14", - "phpunit/phpunit": "^9.5.10", - "spatie/laravel-ray": "^1.28", - "symfony/process": "^6.0.9", - "symfony/yaml": "^6.0.9", - "vlucas/phpdotenv": "^5.4.1" - }, - "suggest": { - "brianium/paratest": "Allow using parallel tresting (^6.4).", - "fakerphp/faker": "Allow using Faker for testing (^1.21).", - "laravel/framework": "Required for testing (^9.50.2).", - "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.2).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^7.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^7.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^9.5.10).", - "symfony/yaml": "Required for CLI Commander (^6.0.9).", - "vlucas/phpdotenv": "Required for CLI Commander (^5.4.1)." - }, - "bin": [ - "testbench" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "7.0-dev" - } - }, - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Orchestra\\Testbench\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Mior Muhammad Zaki", - "email": "crynobone@gmail.com", - "homepage": "https://github.com/crynobone" - } - ], - "description": "Testing Helper for Laravel Development", - "homepage": "https://packages.tools/testbench", - "keywords": [ - "BDD", - "TDD", - "laravel", - "orchestra-platform", - "orchestral", - "testing" - ], - "support": { - "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench-core" - }, - "time": "2023-02-03T02:00:17+00:00" - }, - { - "name": "phar-io/manifest", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-phar": "*", - "ext-xmlwriter": "*", - "phar-io/version": "^3.0.1", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "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/2.0.3" - }, - "time": "2021-07-20T11:28:43+00:00" - }, - { - "name": "phar-io/version", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/phar-io/version.git", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - }, - { - "name": "Sebastian Heuer", - "email": "sebastian@phpeople.de", - "role": "Developer" - }, - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "Developer" - } - ], - "description": "Library for handling version information and constraints", - "support": { - "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.2.1" - }, - "time": "2022-02-21T01:04:05+00:00" - }, - { - "name": "phpoption/phpoption", - "version": "1.9.0", - "source": { - "type": "git", - "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", - "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", - "shasum": "" - }, - "require": { - "php": "^7.2.5 || ^8.0" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.8", - "phpunit/phpunit": "^8.5.28 || ^9.5.21" - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, - "branch-alias": { - "dev-master": "1.9-dev" - } - }, - "autoload": { - "psr-4": { - "PhpOption\\": "src/PhpOption/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "Apache-2.0" - ], - "authors": [ - { - "name": "Johannes M. Schmitt", - "email": "schmittjoh@gmail.com", - "homepage": "https://github.com/schmittjoh" - }, - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - } - ], - "description": "Option Type for PHP", - "keywords": [ - "language", - "option", - "php", - "type" - ], - "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2022-07-30T15:51:26+00:00" - }, - { - "name": "phpunit/php-code-coverage", - "version": "9.2.24", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", - "theseer/tokenizer": "^1.2.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", - "homepage": "https://github.com/sebastianbergmann/php-code-coverage", - "keywords": [ - "coverage", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-01-26T08:26:55+00:00" - }, - { - "name": "phpunit/php-file-iterator", - "version": "3.0.6", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "FilterIterator implementation that filters files based on a list of suffixes.", - "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", - "keywords": [ - "filesystem", - "iterator" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2021-12-02T12:48:52+00:00" - }, - { - "name": "phpunit/php-invoker", - "version": "3.1.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-pcntl": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Invoke callables with a timeout", - "homepage": "https://github.com/sebastianbergmann/php-invoker/", - "keywords": [ - "process" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:58:55+00:00" - }, - { - "name": "phpunit/php-text-template", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Simple template engine.", - "homepage": "https://github.com/sebastianbergmann/php-text-template/", - "keywords": [ - "template" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T05:33:50+00:00" - }, - { - "name": "phpunit/php-timer", - "version": "5.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Utility class for timing", - "homepage": "https://github.com/sebastianbergmann/php-timer/", - "keywords": [ - "timer" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:16:10+00:00" - }, - { - "name": "phpunit/phpunit", - "version": "9.6.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", - "shasum": "" - }, - "require": { - "doctrine/instantiator": "^1.3.1 || ^2", - "ext-dom": "*", - "ext-json": "*", - "ext-libxml": "*", - "ext-mbstring": "*", - "ext-xml": "*", - "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.10.1", - "phar-io/manifest": "^2.0.3", - "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" - }, - "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" - }, - "bin": [ - "phpunit" - ], - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "9.6-dev" - } - }, - "autoload": { - "files": [ - "src/Framework/Assert/Functions.php" - ], - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "The PHP Unit Testing framework.", - "homepage": "https://phpunit.de/", - "keywords": [ - "phpunit", - "testing", - "xunit" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" - }, - "funding": [ - { - "url": "https://phpunit.de/sponsors.html", - "type": "custom" - }, - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", - "type": "tidelift" - } - ], - "time": "2023-02-04T13:37:15+00:00" - }, - { - "name": "pimple/pimple", - "version": "v3.5.0", - "source": { - "type": "git", - "url": "https://github.com/silexphp/Pimple.git", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", - "shasum": "" - }, - "require": { - "php": ">=7.2.5", - "psr/container": "^1.1 || ^2.0" - }, - "require-dev": { - "symfony/phpunit-bridge": "^5.4@dev" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.4.x-dev" - } - }, - "autoload": { - "psr-0": { - "Pimple": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Pimple, a simple Dependency Injection Container", - "homepage": "https://pimple.symfony.com", - "keywords": [ - "container", - "dependency injection" - ], - "support": { - "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" - }, - "time": "2021-10-28T11:13:42+00:00" - }, - { - "name": "psr/cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/cache.git", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Cache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for caching libraries", - "keywords": [ - "cache", - "psr", - "psr-6" - ], - "support": { - "source": "https://github.com/php-fig/cache/tree/3.0.0" - }, - "time": "2021-02-03T23:26:27+00:00" - }, - { - "name": "psr/container", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/php-fig/container.git", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", - "shasum": "" - }, - "require": { - "php": ">=7.4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Container\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common Container Interface (PHP FIG PSR-11)", - "homepage": "https://github.com/php-fig/container", - "keywords": [ - "PSR-11", - "container", - "container-interface", - "container-interop", - "psr" - ], - "support": { - "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/2.0.2" - }, - "time": "2021-11-05T16:47:00+00:00" - }, - { - "name": "psr/event-dispatcher", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/event-dispatcher.git", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", - "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", - "shasum": "" - }, - "require": { - "php": ">=7.2.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\EventDispatcher\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Standard interfaces for event handling.", - "keywords": [ - "events", - "psr", - "psr-14" - ], - "support": { - "issues": "https://github.com/php-fig/event-dispatcher/issues", - "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" - }, - "time": "2019-01-08T18:20:26+00:00" - }, - { - "name": "psr/http-factory", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-factory.git", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", - "shasum": "" - }, - "require": { - "php": ">=7.0.0", - "psr/http-message": "^1.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interfaces for PSR-7 HTTP message factories", - "keywords": [ - "factory", - "http", - "message", - "psr", - "psr-17", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-factory/tree/master" - }, - "time": "2019-04-30T12:38:16+00:00" - }, - { - "name": "psr/http-message", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/php-fig/http-message.git", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", - "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", - "shasum": "" - }, - "require": { - "php": ">=5.3.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Http\\Message\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" - } - ], - "description": "Common interface for HTTP messages", - "homepage": "https://github.com/php-fig/http-message", - "keywords": [ - "http", - "http-message", - "psr", - "psr-7", - "request", - "response" - ], - "support": { - "source": "https://github.com/php-fig/http-message/tree/master" - }, - "time": "2016-08-06T14:39:51+00:00" - }, - { - "name": "psr/log", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\Log\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interface for logging libraries", - "homepage": "https://github.com/php-fig/log", - "keywords": [ - "log", - "psr", - "psr-3" - ], - "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" - }, - "time": "2021-07-14T16:46:02+00:00" - }, - { - "name": "psr/simple-cache", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/php-fig/simple-cache.git", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", - "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", - "shasum": "" - }, - "require": { - "php": ">=8.0.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0.x-dev" - } - }, - "autoload": { - "psr-4": { - "Psr\\SimpleCache\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "PHP-FIG", - "homepage": "https://www.php-fig.org/" - } - ], - "description": "Common interfaces for simple caching", - "keywords": [ - "cache", - "caching", - "psr", - "psr-16", - "simple-cache" - ], - "support": { - "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" - }, - "time": "2021-10-29T13:26:27+00:00" - }, - { - "name": "ralouphie/getallheaders", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/ralouphie/getallheaders.git", - "reference": "120b605dfeb996808c31b6477290a714d356e822" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", - "reference": "120b605dfeb996808c31b6477290a714d356e822", - "shasum": "" - }, - "require": { - "php": ">=5.6" - }, - "require-dev": { - "php-coveralls/php-coveralls": "^2.1", - "phpunit/phpunit": "^5 || ^6.5" - }, - "type": "library", - "autoload": { - "files": [ - "src/getallheaders.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ralph Khattar", - "email": "ralph.khattar@gmail.com" - } - ], - "description": "A polyfill for getallheaders.", - "support": { - "issues": "https://github.com/ralouphie/getallheaders/issues", - "source": "https://github.com/ralouphie/getallheaders/tree/develop" - }, - "time": "2019-03-08T08:55:37+00:00" - }, - { - "name": "ramsey/collection", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "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.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/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ben Ramsey", - "email": "ben@benramsey.com", - "homepage": "https://benramsey.com" - } - ], - "description": "A PHP library for representing and manipulating collections.", - "keywords": [ - "array", - "collection", - "hash", - "map", - "queue", - "set" - ], - "support": { - "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", - "type": "tidelift" - } - ], - "time": "2022-12-31T21:50:55+00:00" - }, - { - "name": "ramsey/uuid", - "version": "4.x-dev", - "source": { - "type": "git", - "url": "https://github.com/ramsey/uuid.git", - "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/25c4faac19549ebfcd3a6a73732dddeb188eaf5a", - "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a", - "shasum": "" - }, - "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", - "ext-json": "*", - "php": "^8.0", - "ramsey/collection": "^1.2 || ^2.0" - }, - "replace": { - "rhumsaa/uuid": "self.version" - }, - "require-dev": { - "captainhook/captainhook": "^5.10", - "captainhook/plugin-composer": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "doctrine/annotations": "^1.8", - "ergebnis/composer-normalize": "^2.15", - "mockery/mockery": "^1.3", - "paragonie/random-lib": "^2", - "php-mock/php-mock": "^2.2", - "php-mock/php-mock-mockery": "^1.3", - "php-parallel-lint/php-parallel-lint": "^1.1", - "phpbench/phpbench": "^1.0", - "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.8", - "phpstan/phpstan-mockery": "^1.1", - "phpstan/phpstan-phpunit": "^1.1", - "phpunit/phpunit": "^8.5 || ^9", - "ramsey/composer-repl": "^1.4", - "slevomat/coding-standard": "^8.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.9" - }, - "suggest": { - "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", - "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", - "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", - "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", - "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." - }, - "default-branch": true, - "type": "library", - "extra": { - "captainhook": { - "force-install": true - } - }, - "autoload": { - "files": [ - "src/functions.php" - ], - "psr-4": { - "Ramsey\\Uuid\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", - "keywords": [ - "guid", - "identifier", - "uuid" - ], - "support": { - "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.x" - }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2023-01-28T17:00:47+00:00" - }, - { - "name": "sebastian/cli-parser", - "version": "1.0.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for parsing CLI options", - "homepage": "https://github.com/sebastianbergmann/cli-parser", - "support": { - "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:08:49+00:00" - }, - { - "name": "sebastian/code-unit", - "version": "1.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the PHP code units", - "homepage": "https://github.com/sebastianbergmann/code-unit", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:08:54+00:00" - }, - { - "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Looks up which function or method a line of code belongs to", - "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", - "support": { - "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T05:30:19+00:00" - }, - { - "name": "sebastian/comparator", - "version": "4.0.8", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@2bepublished.at" - } - ], - "description": "Provides the functionality to compare PHP values for equality", - "homepage": "https://github.com/sebastianbergmann/comparator", - "keywords": [ - "comparator", - "compare", - "equality" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T12:41:17+00:00" - }, - { - "name": "sebastian/complexity", - "version": "2.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for calculating the complexity of PHP code units", - "homepage": "https://github.com/sebastianbergmann/complexity", - "support": { - "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T15:52:27+00:00" - }, - { - "name": "sebastian/diff", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3", - "symfony/process": "^4.2 || ^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "Diff implementation", - "homepage": "https://github.com/sebastianbergmann/diff", - "keywords": [ - "diff", - "udiff", - "unidiff", - "unified diff" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:10:38+00:00" - }, - { - "name": "sebastian/environment", - "version": "5.1.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-posix": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.1-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", - "keywords": [ - "Xdebug", - "environment", - "hhvm" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:03:51+00:00" - }, - { - "name": "sebastian/exporter", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Volker Dusch", - "email": "github@wallbash.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - }, - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Provides the functionality to export PHP variables for visualization", - "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.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-09-14T06:03:37+00:00" - }, - { - "name": "sebastian/global-state", - "version": "5.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Snapshotting of global state", - "homepage": "http://www.github.com/sebastianbergmann/global-state", - "keywords": [ - "global state" - ], - "support": { - "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2022-02-14T08:28:10+00:00" - }, - { - "name": "sebastian/lines-of-code", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "shasum": "" - }, - "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library for counting the lines of code in PHP source code", - "homepage": "https://github.com/sebastianbergmann/lines-of-code", - "support": { - "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-11-28T06:42:11+00:00" - }, - { - "name": "sebastian/object-enumerator", - "version": "4.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", - "shasum": "" - }, - "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Traverses array structures and object graphs to enumerate all referenced objects", - "homepage": "https://github.com/sebastianbergmann/object-enumerator/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:12:34+00:00" - }, - { - "name": "sebastian/object-reflector", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Allows reflection of object attributes, including inherited and non-public ones", - "homepage": "https://github.com/sebastianbergmann/object-reflector/", - "support": { - "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-10-26T13:14:26+00:00" - }, - { - "name": "sebastian/recursion-context", - "version": "4.0.5", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "4.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Jeff Welch", - "email": "whatthejeff@gmail.com" - }, - { - "name": "Adam Harvey", - "email": "aharvey@php.net" - } - ], - "description": "Provides functionality to recursively process PHP variables", - "homepage": "https://github.com/sebastianbergmann/recursion-context", - "support": { - "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:45:17+00:00" - }, - { - "name": "sebastian/type", - "version": "3.2.1", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.2-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Collection of value objects that represent the types of the PHP type system", - "homepage": "https://github.com/sebastianbergmann/type", - "support": { - "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:13:03+00:00" - }, - { - "name": "sebastian/version", - "version": "3.0.2", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de", - "role": "lead" - } - ], - "description": "Library that helps with managing the version number of Git-hosted PHP projects", - "homepage": "https://github.com/sebastianbergmann/version", - "support": { - "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2020-09-28T06:39:44+00:00" - }, - { - "name": "spatie/backtrace", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/backtrace.git", - "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", - "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", - "shasum": "" - }, - "require": { - "php": "^7.3|^8.0" - }, - "require-dev": { - "ext-json": "*", - "phpunit/phpunit": "^9.3", - "symfony/var-dumper": "^5.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Backtrace\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van de Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A better backtrace", - "homepage": "https://github.com/spatie/backtrace", - "keywords": [ - "Backtrace", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/backtrace/issues", - "source": "https://github.com/spatie/backtrace/tree/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2021-11-09T10:57:15+00:00" - }, - { - "name": "spatie/laravel-ray", - "version": "1.32.1", - "source": { - "type": "git", - "url": "https://github.com/spatie/laravel-ray.git", - "reference": "8ecf893a7af385e72b1f63cbd318fb00e2dca340" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/8ecf893a7af385e72b1f63cbd318fb00e2dca340", - "reference": "8ecf893a7af385e72b1f63cbd318fb00e2dca340", - "shasum": "" - }, - "require": { - "ext-json": "*", - "illuminate/contracts": "^7.20|^8.19|^9.0|^10.0", - "illuminate/database": "^7.20|^8.19|^9.0|^10.0", - "illuminate/queue": "^7.20|^8.19|^9.0|^10.0", - "illuminate/support": "^7.20|^8.19|^9.0|^10.0", - "php": "^7.4|^8.0", - "spatie/backtrace": "^1.0", - "spatie/ray": "^1.33", - "symfony/stopwatch": "4.2|^5.1|^6.0", - "zbateson/mail-mime-parser": "^1.3.1|^2.0" - }, - "require-dev": { - "guzzlehttp/guzzle": "^7.3", - "laravel/framework": "^7.20|^8.19|^9.0|^10.0", - "orchestra/testbench-core": "^5.0|^6.0|^7.0|^8.0", - "pestphp/pest": "^1.22", - "phpstan/phpstan": "^0.12.93", - "phpunit/phpunit": "^9.3", - "spatie/pest-plugin-snapshots": "^1.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.29.x-dev" - }, - "laravel": { - "providers": [ - "Spatie\\LaravelRay\\RayServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "Spatie\\LaravelRay\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Easily debug Laravel apps", - "homepage": "https://github.com/spatie/laravel-ray", - "keywords": [ - "laravel-ray", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.32.1" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2023-01-26T13:02:05+00:00" - }, - { - "name": "spatie/macroable", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/macroable.git", - "reference": "ec2c320f932e730607aff8052c44183cf3ecb072" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/macroable/zipball/ec2c320f932e730607aff8052c44183cf3ecb072", - "reference": "ec2c320f932e730607aff8052c44183cf3ecb072", - "shasum": "" - }, - "require": { - "php": "^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^8.0|^9.3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Spatie\\Macroable\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "A trait to dynamically add methods to a class", - "homepage": "https://github.com/spatie/macroable", - "keywords": [ - "macroable", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/macroable/issues", - "source": "https://github.com/spatie/macroable/tree/2.0.0" - }, - "time": "2021-03-26T22:39:02+00:00" - }, - { - "name": "spatie/ray", - "version": "1.36.0", - "source": { - "type": "git", - "url": "https://github.com/spatie/ray.git", - "reference": "4a4def8cda4806218341b8204c98375aa8c34323" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/4a4def8cda4806218341b8204c98375aa8c34323", - "reference": "4a4def8cda4806218341b8204c98375aa8c34323", - "shasum": "" - }, - "require": { - "ext-curl": "*", - "ext-json": "*", - "php": "^7.3|^8.0", - "ramsey/uuid": "^3.0|^4.1", - "spatie/backtrace": "^1.1", - "spatie/macroable": "^1.0|^2.0", - "symfony/stopwatch": "^4.0|^5.1|^6.0", - "symfony/var-dumper": "^4.2|^5.1|^6.0" - }, - "require-dev": { - "illuminate/support": "6.x|^8.18|^9.0", - "nesbot/carbon": "^2.43", - "phpstan/phpstan": "^0.12.92", - "phpunit/phpunit": "^9.5", - "spatie/phpunit-snapshot-assertions": "^4.2", - "spatie/test-time": "^1.2" - }, - "type": "library", - "autoload": { - "files": [ - "src/helpers.php" - ], - "psr-4": { - "Spatie\\Ray\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Freek Van der Herten", - "email": "freek@spatie.be", - "homepage": "https://spatie.be", - "role": "Developer" - } - ], - "description": "Debug with Ray to fix problems faster", - "homepage": "https://github.com/spatie/ray", - "keywords": [ - "ray", - "spatie" - ], - "support": { - "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.36.0" - }, - "funding": [ - { - "url": "https://github.com/sponsors/spatie", - "type": "github" - }, - { - "url": "https://spatie.be/open-source/support-us", - "type": "other" - } - ], - "time": "2022-08-11T14:04:18+00:00" - }, - { - "name": "symfony/console", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/console.git", - "reference": "3e294254f2191762c1d137aed4b94e966965e985" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", - "reference": "3e294254f2191762c1d137aed4b94e966965e985", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.4|^6.0" - }, - "conflict": { - "symfony/dependency-injection": "<5.4", - "symfony/dotenv": "<5.4", - "symfony/event-dispatcher": "<5.4", - "symfony/lock": "<5.4", - "symfony/process": "<5.4" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/lock": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/var-dumper": "^5.4|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Console\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Eases the creation of beautiful and testable command line interfaces", - "homepage": "https://symfony.com", - "keywords": [ - "cli", - "command line", - "console", - "terminal" - ], - "support": { - "source": "https://github.com/symfony/console/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/css-selector", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/css-selector.git", - "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", - "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\CssSelector\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Jean-François Simon", - "email": "jeanfrancois.simon@sensiolabs.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Converts CSS selectors to XPath expressions", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/deprecation-contracts", - "version": "v3.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "files": [ - "function.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "A generic function and convention to trigger deprecation notices", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-25T10:21:52+00:00" - }, - { - "name": "symfony/error-handler", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/error-handler.git", - "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0092696af0be8e6124b042fbe2890ca1788d7b28", - "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^5.4|^6.0" - }, - "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" - }, - "bin": [ - "Resources/bin/patch-type-declarations" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\ErrorHandler\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "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.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/event-dispatcher", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", - "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/event-dispatcher-contracts": "^2|^3" - }, - "conflict": { - "symfony/dependency-injection": "<5.4" - }, - "provide": { - "psr/event-dispatcher-implementation": "1.0", - "symfony/event-dispatcher-implementation": "2.0|3.0" - }, - "require-dev": { - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/error-handler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/stopwatch": "^5.4|^6.0" - }, - "suggest": { - "symfony/dependency-injection": "", - "symfony/http-kernel": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\EventDispatcher\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "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.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/event-dispatcher": "^1" - }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\EventDispatcher\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to dispatching event", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-25T10:21:52+00:00" - }, - { - "name": "symfony/filesystem", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/filesystem.git", - "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e59e8a4006afd7f5654786a83b4fcb8da98f4593", - "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-mbstring": "~1.8" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Filesystem\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides basic utilities for the filesystem", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-20T17:45:48+00:00" - }, - { - "name": "symfony/finder", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/finder.git", - "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/c90dc446976a612e3312a97a6ec0069ab0c2099c", - "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "require-dev": { - "symfony/filesystem": "^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Finder\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Finds files and directories via an intuitive fluent interface", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-20T17:45:48+00:00" - }, - { - "name": "symfony/http-foundation", - "version": "v6.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-foundation.git", - "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8dd1f502bc2b3371d05092aa233b064b03ce7ed", - "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-mbstring": "~1.1" - }, - "conflict": { - "symfony/cache": "<6.2" - }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", - "symfony/mime": "^5.4|^6.0", - "symfony/rate-limiter": "^5.2|^6.0" - }, - "suggest": { - "symfony/mime": "To use the file extension guesser" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpFoundation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Defines an object-oriented layer for the HTTP specification", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.2.6" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-30T15:46:28+00:00" - }, - { - "name": "symfony/http-kernel", - "version": "v6.2.6", - "source": { - "type": "git", - "url": "https://github.com/symfony/http-kernel.git", - "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7122db07b0d8dbf0de682267c84217573aee3ea7", - "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/log": "^1|^2|^3", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^6.1", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.4", - "symfony/config": "<6.1", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.2", - "symfony/doctrine-bridge": "<5.4", - "symfony/form": "<5.4", - "symfony/http-client": "<5.4", - "symfony/mailer": "<5.4", - "symfony/messenger": "<5.4", - "symfony/translation": "<5.4", - "symfony/twig-bridge": "<5.4", - "symfony/validator": "<5.4", - "twig/twig": "<2.13" - }, - "provide": { - "psr/log-implementation": "1.0|2.0|3.0" - }, - "require-dev": { - "psr/cache": "^1.0|^2.0|^3.0", - "symfony/browser-kit": "^5.4|^6.0", - "symfony/config": "^6.1", - "symfony/console": "^5.4|^6.0", - "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.2", - "symfony/dom-crawler": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^5.4|^6.0", - "symfony/routing": "^5.4|^6.0", - "symfony/stopwatch": "^5.4|^6.0", - "symfony/translation": "^5.4|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\HttpKernel\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "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.6" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-02-01T08:32:25+00:00" - }, - { - "name": "symfony/mailer", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/mailer.git", - "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/29729ac0b4e5113f24c39c46746bd6afb79e0aaa", - "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.1.10|^3|^4", - "php": ">=8.1", - "psr/event-dispatcher": "^1", - "psr/log": "^1|^2|^3", - "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^6.2", - "symfony/service-contracts": "^1.1|^2|^3" - }, - "conflict": { - "symfony/http-kernel": "<5.4", - "symfony/messenger": "<6.2", - "symfony/mime": "<6.2", - "symfony/twig-bridge": "<6.2.1" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^6.2", - "symfony/twig-bridge": "^6.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mailer\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Helps sending emails", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/mailer/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-10T18:53:53+00:00" - }, - { - "name": "symfony/mime", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/4b7b349f67d15cd0639955c8179a76c89f6fd610", - "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4", - "symfony/serializer": "<6.2" - }, - "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1|^4", - "league/html-to-markdown": "^5.0", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/property-access": "^5.4|^6.0", - "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^6.2" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Mime\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Allows manipulating MIME messages", - "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], - "support": { - "source": "https://github.com/symfony/mime/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-10T18:53:53+00:00" - }, - { - "name": "symfony/options-resolver", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/options-resolver.git", - "reference": "e8324d44f5af99ec2ccec849934a242f64458f86" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e8324d44f5af99ec2ccec849934a242f64458f86", - "reference": "e8324d44f5af99ec2ccec849934a242f64458f86", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/deprecation-contracts": "^2.1|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\OptionsResolver\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an improved replacement for the array_replace PHP function", - "homepage": "https://symfony.com", - "keywords": [ - "config", - "configuration", - "options" - ], - "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", - "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-ctype": "*" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" - ], - "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-iconv", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "927013f3aac555983a5059aada98e1907d842695" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", - "reference": "927013f3aac555983a5059aada98e1907d842695", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-iconv": "*" - }, - "suggest": { - "ext-iconv": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Iconv extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "iconv", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-grapheme", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", - "reference": "511a08c03c1960e08a883f4cffcacd219b758354", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's grapheme_* functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "grapheme", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-idn", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", - "reference": "639084e360537a19f9ee352433b84ce831f3d2da", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Laurent Bassin", - "email": "laurent@bassin.info" - }, - { - "name": "Trevor Rowbotham", - "email": "trevor.rowbotham@pm.me" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "idn", - "intl", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-intl-normalizer", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-intl": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for intl's Normalizer class and related functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "intl", - "normalizer", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-mbstring", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-mbstring": "*" - }, - "suggest": { - "ext-mbstring": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for the Mbstring extension", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "mbstring", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", - "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php80", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-php81", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", - "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, - "classmap": [ - "Resources/stubs" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "shim" - ], - "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/polyfill-uuid", - "version": "v1.27.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", - "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "provide": { - "ext-uuid": "*" - }, - "suggest": { - "ext-uuid": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.27-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "files": [ - "bootstrap.php" - ], - "psr-4": { - "Symfony\\Polyfill\\Uuid\\": "" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Symfony polyfill for uuid functions", - "homepage": "https://symfony.com", - "keywords": [ - "compatibility", - "polyfill", - "portable", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-03T14:55:06+00:00" - }, - { - "name": "symfony/process", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/process.git", - "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", - "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Process\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Executes commands in sub-processes", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/process/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/routing", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/routing.git", - "reference": "589bd742d5d03c192c8521911680fe88f61712fe" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/589bd742d5d03c192c8521911680fe88f61712fe", - "reference": "589bd742d5d03c192c8521911680fe88f61712fe", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "conflict": { - "doctrine/annotations": "<1.12", - "symfony/config": "<6.2", - "symfony/dependency-injection": "<5.4", - "symfony/yaml": "<5.4" - }, - "require-dev": { - "doctrine/annotations": "^1.12|^2", - "psr/log": "^1|^2|^3", - "symfony/config": "^6.2", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/expression-language": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "symfony/config": "For using the all-in-one router or any loader", - "symfony/expression-language": "For using expression matching", - "symfony/http-foundation": "For using a Symfony Request object", - "symfony/yaml": "For using the YAML loader" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Routing\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Maps an HTTP request to a set of configuration variables", - "homepage": "https://symfony.com", - "keywords": [ - "router", - "routing", - "uri", - "url" - ], - "support": { - "source": "https://github.com/symfony/routing/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/service-contracts", - "version": "v3.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/service-contracts.git", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "psr/container": "^2.0" - }, - "conflict": { - "ext-psr": "<1.1|>=2" - }, - "suggest": { - "symfony/service-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Service\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to writing services", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-25T10:21:52+00:00" - }, - { - "name": "symfony/stopwatch", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/stopwatch.git", - "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/00b6ac156aacffc53487c930e0ab14587a6607f6", - "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/service-contracts": "^1|^2|^3" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Stopwatch\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides a way to profile code", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:36:55+00:00" - }, - { - "name": "symfony/string", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "~1.8", - "symfony/polyfill-intl-grapheme": "~1.0", - "symfony/polyfill-intl-normalizer": "~1.0", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "symfony/translation-contracts": "<2.0" - }, - "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/intl": "^6.2", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\String\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", - "homepage": "https://symfony.com", - "keywords": [ - "grapheme", - "i18n", - "string", - "unicode", - "utf-8", - "utf8" - ], - "support": { - "source": "https://github.com/symfony/string/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/translation", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation.git", - "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/60556925a703cfbc1581cde3b3f35b0bb0ea904c", - "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" - }, - "conflict": { - "symfony/config": "<5.4", - "symfony/console": "<5.4", - "symfony/dependency-injection": "<5.4", - "symfony/http-kernel": "<5.4", - "symfony/twig-bundle": "<5.4", - "symfony/yaml": "<5.4" - }, - "provide": { - "symfony/translation-implementation": "2.3|3.0" - }, - "require-dev": { - "nikic/php-parser": "^4.13", - "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", - "symfony/console": "^5.4|^6.0", - "symfony/dependency-injection": "^5.4|^6.0", - "symfony/finder": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2.0|^3.0", - "symfony/http-kernel": "^5.4|^6.0", - "symfony/intl": "^5.4|^6.0", - "symfony/polyfill-intl-icu": "^1.21", - "symfony/routing": "^5.4|^6.0", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "nikic/php-parser": "To use PhpAstExtractor", - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" - }, - "type": "library", - "autoload": { - "files": [ - "Resources/functions.php" - ], - "psr-4": { - "Symfony\\Component\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides tools to internationalize your application", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/translation/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-05T07:00:27+00:00" - }, - { - "name": "symfony/translation-contracts", - "version": "v3.2.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/translation-contracts.git", - "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", - "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", - "shasum": "" - }, - "require": { - "php": ">=8.1" - }, - "suggest": { - "symfony/translation-implementation": "" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.3-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Contracts\\Translation\\": "" - }, - "exclude-from-classmap": [ - "/Test/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Generic abstractions related to translation", - "homepage": "https://symfony.com", - "keywords": [ - "abstractions", - "contracts", - "decoupling", - "interfaces", - "interoperability", - "standards" - ], - "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2022-11-25T10:21:52+00:00" - }, - { - "name": "symfony/uid", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/uid.git", - "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/8ace895bded57d6496638c9b2d3b788e05b7395b", - "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-uuid": "^1.15" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Uid\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Grégoire Pineau", - "email": "lyrixx@lyrixx.info" - }, - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides an object-oriented API to generate and represent UIDs", - "homepage": "https://symfony.com", - "keywords": [ - "UID", - "ulid", - "uuid" - ], - "support": { - "source": "https://github.com/symfony/uid/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-01T08:38:09+00:00" - }, - { - "name": "symfony/var-dumper", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/var-dumper.git", - "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/44b7b81749fd20c1bdf4946c041050e22bc8da27", - "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-mbstring": "~1.0" - }, - "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<5.4" - }, - "require-dev": { - "ext-iconv": "*", - "symfony/console": "^5.4|^6.0", - "symfony/process": "^5.4|^6.0", - "symfony/uid": "^5.4|^6.0", - "twig/twig": "^2.13|^3.0.4" - }, - "suggest": { - "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", - "ext-intl": "To show region name in time zone dump", - "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" - }, - "bin": [ - "Resources/bin/var-dump-server" - ], - "type": "library", - "autoload": { - "files": [ - "Resources/functions/dump.php" - ], - "psr-4": { - "Symfony\\Component\\VarDumper\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Provides mechanisms for walking through any arbitrary PHP variable", - "homepage": "https://symfony.com", - "keywords": [ - "debug", - "dump" - ], - "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-20T17:45:48+00:00" - }, - { - "name": "symfony/yaml", - "version": "v6.2.5", - "source": { - "type": "git", - "url": "https://github.com/symfony/yaml.git", - "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", - "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", - "shasum": "" - }, - "require": { - "php": ">=8.1", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "symfony/console": "<5.4" - }, - "require-dev": { - "symfony/console": "^5.4|^6.0" - }, - "suggest": { - "symfony/console": "For validating YAML files using the lint command" - }, - "bin": [ - "Resources/bin/yaml-lint" - ], - "type": "library", - "autoload": { - "psr-4": { - "Symfony\\Component\\Yaml\\": "" - }, - "exclude-from-classmap": [ - "/Tests/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - }, - { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" - } - ], - "description": "Loads and dumps YAML files", - "homepage": "https://symfony.com", - "support": { - "source": "https://github.com/symfony/yaml/tree/v6.2.5" - }, - "funding": [ - { - "url": "https://symfony.com/sponsor", - "type": "custom" - }, - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" - } - ], - "time": "2023-01-10T18:53:53+00:00" - }, - { - "name": "theseer/tokenizer", - "version": "1.2.1", - "source": { - "type": "git", - "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-tokenizer": "*", - "ext-xmlwriter": "*", - "php": "^7.2 || ^8.0" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Arne Blankerts", - "email": "arne@blankerts.de", - "role": "Developer" - } - ], - "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/1.2.1" - }, - "funding": [ - { - "url": "https://github.com/theseer", - "type": "github" - } - ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.6", - "source": { - "type": "git", - "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", - "shasum": "" - }, - "require": { - "ext-dom": "*", - "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" - }, - "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.2.x-dev" - } - }, - "autoload": { - "psr-4": { - "TijsVerkoyen\\CssToInlineStyles\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Tijs Verkoyen", - "email": "css_to_inline_styles@verkoyen.eu", - "role": "Developer" - } - ], - "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", - "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", - "support": { - "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" - }, - "time": "2023-01-03T09:29:04+00:00" - }, - { - "name": "vlucas/phpdotenv", - "version": "v5.5.0", - "source": { - "type": "git", - "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", - "shasum": "" - }, - "require": { - "ext-pcre": "*", - "graham-campbell/result-type": "^1.0.2", - "php": "^7.1.3 || ^8.0", - "phpoption/phpoption": "^1.8", - "symfony/polyfill-ctype": "^1.23", - "symfony/polyfill-mbstring": "^1.23.1", - "symfony/polyfill-php80": "^1.23.1" - }, - "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" - }, - "suggest": { - "ext-filter": "Required to use the boolean validator." - }, - "type": "library", - "extra": { - "bamarni-bin": { - "bin-links": true, - "forward-command": true - }, - "branch-alias": { - "dev-master": "5.5-dev" - } - }, - "autoload": { - "psr-4": { - "Dotenv\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Graham Campbell", - "email": "hello@gjcampbell.co.uk", - "homepage": "https://github.com/GrahamCampbell" - }, - { - "name": "Vance Lucas", - "email": "vance@vancelucas.com", - "homepage": "https://github.com/vlucas" - } - ], - "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", - "keywords": [ - "dotenv", - "env", - "environment" - ], - "support": { - "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" - }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", - "type": "tidelift" - } - ], - "time": "2022-10-16T01:01:54+00:00" - }, - { - "name": "voku/portable-ascii", - "version": "2.0.1", - "source": { - "type": "git", - "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", - "shasum": "" - }, - "require": { - "php": ">=7.0.0" - }, - "require-dev": { - "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" - }, - "suggest": { - "ext-intl": "Use Intl for transliterator_transliterate() support" - }, - "type": "library", - "autoload": { - "psr-4": { - "voku\\": "src/voku/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" - } - ], - "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", - "homepage": "https://github.com/voku/portable-ascii", - "keywords": [ - "ascii", - "clean", - "php" - ], - "support": { - "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" - }, - "funding": [ - { - "url": "https://www.paypal.me/moelleken", - "type": "custom" - }, - { - "url": "https://github.com/voku", - "type": "github" - }, - { - "url": "https://opencollective.com/portable-ascii", - "type": "open_collective" - }, - { - "url": "https://www.patreon.com/voku", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", - "type": "tidelift" - } - ], - "time": "2022-03-08T17:03:00+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.11.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", - "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", - "shasum": "" - }, - "require": { - "ext-ctype": "*", - "php": "^7.2 || ^8.0" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.11.0" - }, - "time": "2022-06-03T18:03:27+00:00" - }, - { - "name": "zbateson/mail-mime-parser", - "version": "2.3.0", - "source": { - "type": "git", - "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "d59e0c5eeb1442fca94bcb3b9d3c6be66318a500" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/d59e0c5eeb1442fca94bcb3b9d3c6be66318a500", - "reference": "d59e0c5eeb1442fca94bcb3b9d3c6be66318a500", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1.7.0|^2.0", - "php": ">=7.1", - "pimple/pimple": "^3.0", - "zbateson/mb-wrapper": "^1.0.1", - "zbateson/stream-decorators": "^1.0.6" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "mikey179/vfsstream": "^1.6.0", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<10" - }, - "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\MailMimeParser\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - }, - { - "name": "Contributors", - "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors" - } - ], - "description": "MIME email message parser", - "homepage": "https://mail-mime-parser.org", - "keywords": [ - "MimeMailParser", - "email", - "mail", - "mailparse", - "mime", - "mimeparse", - "parser", - "php-imap" - ], - "support": { - "docs": "https://mail-mime-parser.org/#usage-guide", - "issues": "https://github.com/zbateson/mail-mime-parser/issues", - "source": "https://github.com/zbateson/mail-mime-parser" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2023-01-30T19:04:55+00:00" - }, - { - "name": "zbateson/mb-wrapper", - "version": "1.2.0", - "source": { - "type": "git", - "url": "https://github.com/zbateson/mb-wrapper.git", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/faf35dddfacfc5d4d5f9210143eafd7a7fe74334", - "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334", - "shasum": "" - }, - "require": { - "php": ">=7.1", - "symfony/polyfill-iconv": "^1.9", - "symfony/polyfill-mbstring": "^1.9" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" - }, - "suggest": { - "ext-iconv": "For best support/performance", - "ext-mbstring": "For best support/performance" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\MbWrapper\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - } - ], - "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation", - "keywords": [ - "charset", - "encoding", - "http", - "iconv", - "mail", - "mb", - "mb_convert_encoding", - "mbstring", - "mime", - "multibyte", - "string" - ], - "support": { - "issues": "https://github.com/zbateson/mb-wrapper/issues", - "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.0" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2023-01-11T23:05:44+00:00" - }, - { - "name": "zbateson/stream-decorators", - "version": "1.1.0", - "source": { - "type": "git", - "url": "https://github.com/zbateson/stream-decorators.git", - "reference": "7466ff45d249c86b96267a83cdae68365ae1787e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/7466ff45d249c86b96267a83cdae68365ae1787e", - "reference": "7466ff45d249c86b96267a83cdae68365ae1787e", - "shasum": "" - }, - "require": { - "guzzlehttp/psr7": "^1.9 | ^2.0", - "php": ">=7.1", - "zbateson/mb-wrapper": "^1.0.0" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "*", - "phpstan/phpstan": "*", - "phpunit/phpunit": "<=9.0" - }, - "type": "library", - "autoload": { - "psr-4": { - "ZBateson\\StreamDecorators\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Zaahid Bateson" - } - ], - "description": "PHP psr7 stream decorators for mime message part streams", - "keywords": [ - "base64", - "charset", - "decorators", - "mail", - "mime", - "psr7", - "quoted-printable", - "stream", - "uuencode" - ], - "support": { - "issues": "https://github.com/zbateson/stream-decorators/issues", - "source": "https://github.com/zbateson/stream-decorators/tree/1.1.0" - }, - "funding": [ - { - "url": "https://github.com/zbateson", - "type": "github" - } - ], - "time": "2023-01-11T23:22:44+00:00" - } - ], - "aliases": [], - "minimum-stability": "dev", - "stability-flags": { - "dnj/laravel-user-logger": 20, - "dnj/error-tracker-contracts": 20 - }, - "prefer-stable": true, - "prefer-lowest": false, - "platform": { - "php": "^8.1" - }, - "platform-dev": [], - "plugin-api-version": "2.3.0" -} From 53993e9d2f92494813e99ef38ff8c31669bd0f73 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 19:55:22 +0330 Subject: [PATCH 093/131] fix version --- composer.json | 4 +- composer.lock | 8344 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 8346 insertions(+), 2 deletions(-) create mode 100644 composer.lock diff --git a/composer.json b/composer.json index 62ab839..4183fb6 100644 --- a/composer.json +++ b/composer.json @@ -31,8 +31,8 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.11", - "phpunit/phpunit": "^9.6", - "orchestra/testbench": "^7.21" + "phpunit/phpunit": "9.5.28", + "orchestra/testbench": "7.19.0" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..da3bfab --- /dev/null +++ b/composer.lock @@ -0,0 +1,8344 @@ +{ + "_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": "83730c4ec779644cad9c65638fe554e5", + "packages": [ + { + "name": "dnj/error-tracker-contracts", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dnj/php-error-tracker-contracts.git", + "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnj/php-error-tracker-contracts/zipball/b2be0241e1d622bef4da7f6b741246f8410c884c", + "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "dnj\\ErrorTracker\\Contracts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/dnj/php-error-tracker-contracts/issues", + "source": "https://github.com/dnj/php-error-tracker-contracts/tree/master" + }, + "time": "2023-01-28T20:45:11+00:00" + }, + { + "name": "dnj/laravel-user-logger", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dnj/laravel-user-logger.git", + "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnj/laravel-user-logger/zipball/9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", + "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11", + "orchestra/testbench": "^7.0", + "phpunit/phpunit": "^9" + }, + "default-branch": true, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "dnj\\UserLogger\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "dnj\\UserLogger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/dnj/laravel-user-logger/issues", + "source": "https://github.com/dnj/laravel-user-logger/tree/master" + }, + "time": "2023-01-03T10:34:23+00:00" + } + ], + "packages-dev": [ + { + "name": "brick/math", + "version": "0.11.0", + "source": { + "type": "git", + "url": "https://github.com/brick/math.git", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.2", + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Brick\\Math\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Arbitrary-precision arithmetic library", + "keywords": [ + "Arbitrary-precision", + "BigInteger", + "BigRational", + "arithmetic", + "bigdecimal", + "bignum", + "brick", + "math" + ], + "support": { + "issues": "https://github.com/brick/math/issues", + "source": "https://github.com/brick/math/tree/0.11.0" + }, + "funding": [ + { + "url": "https://github.com/BenMorel", + "type": "github" + } + ], + "time": "2023-01-15T23:15:59+00:00" + }, + { + "name": "composer/pcre", + "version": "3.1.0", + "source": { + "type": "git", + "url": "https://github.com/composer/pcre.git", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/pcre/zipball/4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "reference": "4bff79ddd77851fe3cdd11616ed3f92841ba5bd2", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.3", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Pcre\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + } + ], + "description": "PCRE wrapping library that offers type-safe preg_* replacements.", + "keywords": [ + "PCRE", + "preg", + "regex", + "regular expression" + ], + "support": { + "issues": "https://github.com/composer/pcre/issues", + "source": "https://github.com/composer/pcre/tree/3.1.0" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-11-17T09:50:14+00:00" + }, + { + "name": "composer/semver", + "version": "3.3.2", + "source": { + "type": "git", + "url": "https://github.com/composer/semver.git", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/semver/zipball/3953f23262f2bff1919fc82183ad9acb13ff62c9", + "reference": "3953f23262f2bff1919fc82183ad9acb13ff62c9", + "shasum": "" + }, + "require": { + "php": "^5.3.2 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "symfony/phpunit-bridge": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Composer\\Semver\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nils Adermann", + "email": "naderman@naderman.de", + "homepage": "http://www.naderman.de" + }, + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "http://seld.be" + }, + { + "name": "Rob Bast", + "email": "rob.bast@gmail.com", + "homepage": "http://robbast.nl" + } + ], + "description": "Semver library that offers utilities, version constraint parsing and validation.", + "keywords": [ + "semantic", + "semver", + "validation", + "versioning" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/semver/issues", + "source": "https://github.com/composer/semver/tree/3.3.2" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-04-01T19:23:25+00:00" + }, + { + "name": "composer/xdebug-handler", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/composer/xdebug-handler.git", + "reference": "ced299686f41dce890debac69273b47ffe98a40c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "shasum": "" + }, + "require": { + "composer/pcre": "^1 || ^2 || ^3", + "php": "^7.2.5 || ^8.0", + "psr/log": "^1 || ^2 || ^3" + }, + "require-dev": { + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-strict-rules": "^1.1", + "symfony/phpunit-bridge": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Composer\\XdebugHandler\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "John Stevenson", + "email": "john-stevenson@blueyonder.co.uk" + } + ], + "description": "Restarts a process without Xdebug.", + "keywords": [ + "Xdebug", + "performance" + ], + "support": { + "irc": "irc://irc.freenode.org/composer", + "issues": "https://github.com/composer/xdebug-handler/issues", + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + }, + "funding": [ + { + "url": "https://packagist.com", + "type": "custom" + }, + { + "url": "https://github.com/composer", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/composer/composer", + "type": "tidelift" + } + ], + "time": "2022-02-25T21:32:43+00:00" + }, + { + "name": "dflydev/dot-access-data", + "version": "v3.0.2", + "source": { + "type": "git", + "url": "https://github.com/dflydev/dflydev-dot-access-data.git", + "reference": "f41715465d65213d644d3141a6a93081be5d3549" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^0.12.42", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", + "scrutinizer/ocular": "1.6.0", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Dflydev\\DotAccessData\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Dragonfly Development Inc.", + "email": "info@dflydev.com", + "homepage": "http://dflydev.com" + }, + { + "name": "Beau Simensen", + "email": "beau@dflydev.com", + "homepage": "http://beausimensen.com" + }, + { + "name": "Carlos Frutos", + "email": "carlos@kiwing.it", + "homepage": "https://github.com/cfrutos" + }, + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com" + } + ], + "description": "Given a deep data structure, access data by dot notation.", + "homepage": "https://github.com/dflydev/dflydev-dot-access-data", + "keywords": [ + "access", + "data", + "dot", + "notation" + ], + "support": { + "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + }, + "time": "2022-10-27T11:44:00+00:00" + }, + { + "name": "doctrine/annotations", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/doctrine/annotations.git", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2 || ^3", + "ext-tokenizer": "*", + "php": "^7.2 || ^8.0", + "psr/cache": "^1 || ^2 || ^3" + }, + "require-dev": { + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "symfony/cache": "^5.4 || ^6", + "vimeo/psalm": "^4.10" + }, + "suggest": { + "php": "PHP 8.0 or higher comes with attributes, a native replacement for annotations" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Annotations\\": "lib/Doctrine/Common/Annotations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "Docblock Annotations Parser", + "homepage": "https://www.doctrine-project.org/projects/annotations.html", + "keywords": [ + "annotations", + "docblock", + "parser" + ], + "support": { + "issues": "https://github.com/doctrine/annotations/issues", + "source": "https://github.com/doctrine/annotations/tree/2.0.1" + }, + "time": "2023-02-02T22:02:53+00:00" + }, + { + "name": "doctrine/inflector", + "version": "2.0.6", + "source": { + "type": "git", + "url": "https://github.com/doctrine/inflector.git", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.3", + "phpunit/phpunit": "^8.5 || ^9.5", + "vimeo/psalm": "^4.25" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Inflector\\": "lib/Doctrine/Inflector" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Benjamin Eberlei", + "email": "kontakt@beberlei.de" + }, + { + "name": "Jonathan Wage", + "email": "jonwage@gmail.com" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Inflector is a small library that can perform string manipulations with regard to upper/lowercase and singular/plural forms of words.", + "homepage": "https://www.doctrine-project.org/projects/inflector.html", + "keywords": [ + "inflection", + "inflector", + "lowercase", + "manipulation", + "php", + "plural", + "singular", + "strings", + "uppercase", + "words" + ], + "support": { + "issues": "https://github.com/doctrine/inflector/issues", + "source": "https://github.com/doctrine/inflector/tree/2.0.6" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finflector", + "type": "tidelift" + } + ], + "time": "2022-10-20T09:10:12+00:00" + }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, + { + "name": "doctrine/lexer", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/lexer.git", + "reference": "84a527db05647743d50373e0ec53a152f2cde568" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Common\\Lexer\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Guilherme Blanco", + "email": "guilhermeblanco@gmail.com" + }, + { + "name": "Roman Borschel", + "email": "roman@code-factory.org" + }, + { + "name": "Johannes Schmitt", + "email": "schmittjoh@gmail.com" + } + ], + "description": "PHP Doctrine Lexer parser library that can be used in Top-Down, Recursive Descent Parsers.", + "homepage": "https://www.doctrine-project.org/projects/lexer.html", + "keywords": [ + "annotations", + "docblock", + "lexer", + "parser", + "php" + ], + "support": { + "issues": "https://github.com/doctrine/lexer/issues", + "source": "https://github.com/doctrine/lexer/tree/3.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Flexer", + "type": "tidelift" + } + ], + "time": "2022-12-15T16:57:16+00:00" + }, + { + "name": "dragonmantank/cron-expression", + "version": "v3.3.2", + "source": { + "type": "git", + "url": "https://github.com/dragonmantank/cron-expression.git", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/782ca5968ab8b954773518e9e49a6f892a34b2a8", + "reference": "782ca5968ab8b954773518e9e49a6f892a34b2a8", + "shasum": "" + }, + "require": { + "php": "^7.2|^8.0", + "webmozart/assert": "^1.0" + }, + "replace": { + "mtdowling/cron-expression": "^1.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", + "phpunit/phpunit": "^7.0|^8.0|^9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Cron\\": "src/Cron/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Chris Tankersley", + "email": "chris@ctankersley.com", + "homepage": "https://github.com/dragonmantank" + } + ], + "description": "CRON for PHP: Calculate the next or previous run date and determine if a CRON expression is due", + "keywords": [ + "cron", + "schedule" + ], + "support": { + "issues": "https://github.com/dragonmantank/cron-expression/issues", + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.2" + }, + "funding": [ + { + "url": "https://github.com/dragonmantank", + "type": "github" + } + ], + "time": "2022-09-10T18:51:20+00:00" + }, + { + "name": "egulias/email-validator", + "version": "4.0.1", + "source": { + "type": "git", + "url": "https://github.com/egulias/EmailValidator.git", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "reference": "3a85486b709bc384dae8eb78fb2eec649bdb64ff", + "shasum": "" + }, + "require": { + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" + }, + "require-dev": { + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^4.30" + }, + "suggest": { + "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Egulias\\EmailValidator\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Eduardo Gulias Davis" + } + ], + "description": "A library for validating emails against several RFCs", + "homepage": "https://github.com/egulias/EmailValidator", + "keywords": [ + "email", + "emailvalidation", + "emailvalidator", + "validation", + "validator" + ], + "support": { + "issues": "https://github.com/egulias/EmailValidator/issues", + "source": "https://github.com/egulias/EmailValidator/tree/4.0.1" + }, + "funding": [ + { + "url": "https://github.com/egulias", + "type": "github" + } + ], + "time": "2023-01-14T14:17:03+00:00" + }, + { + "name": "fakerphp/faker", + "version": "v1.21.0", + "source": { + "type": "git", + "url": "https://github.com/FakerPHP/Faker.git", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/92efad6a967f0b79c499705c69b662f738cc9e4d", + "reference": "92efad6a967f0b79c499705c69b662f738cc9e4d", + "shasum": "" + }, + "require": { + "php": "^7.4 || ^8.0", + "psr/container": "^1.0 || ^2.0", + "symfony/deprecation-contracts": "^2.2 || ^3.0" + }, + "conflict": { + "fzaninotto/faker": "*" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "doctrine/persistence": "^1.3 || ^2.0", + "ext-intl": "*", + "phpunit/phpunit": "^9.5.26", + "symfony/phpunit-bridge": "^5.4.16" + }, + "suggest": { + "doctrine/orm": "Required to use Faker\\ORM\\Doctrine", + "ext-curl": "Required by Faker\\Provider\\Image to download images.", + "ext-dom": "Required by Faker\\Provider\\HtmlLorem for generating random HTML.", + "ext-iconv": "Required by Faker\\Provider\\ru_RU\\Text::realText() for generating real Russian text.", + "ext-mbstring": "Required for multibyte Unicode string functionality." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "v1.21-dev" + } + }, + "autoload": { + "psr-4": { + "Faker\\": "src/Faker/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "François Zaninotto" + } + ], + "description": "Faker is a PHP library that generates fake data for you.", + "keywords": [ + "data", + "faker", + "fixtures" + ], + "support": { + "issues": "https://github.com/FakerPHP/Faker/issues", + "source": "https://github.com/FakerPHP/Faker/tree/v1.21.0" + }, + "time": "2022-12-13T13:54:32+00:00" + }, + { + "name": "friendsofphp/php-cs-fixer", + "version": "v3.14.3", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "b418036b95b4936a33fe906245d3044395935e73" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b418036b95b4936a33fe906245d3044395935e73", + "reference": "b418036b95b4936a33fe906245d3044395935e73", + "shasum": "" + }, + "require": { + "composer/semver": "^3.3", + "composer/xdebug-handler": "^3.0.3", + "doctrine/annotations": "^2", + "doctrine/lexer": "^2 || ^3", + "ext-json": "*", + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0", + "sebastian/diff": "^4.0", + "symfony/console": "^5.4 || ^6.0", + "symfony/event-dispatcher": "^5.4 || ^6.0", + "symfony/filesystem": "^5.4 || ^6.0", + "symfony/finder": "^5.4 || ^6.0", + "symfony/options-resolver": "^5.4 || ^6.0", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", + "symfony/process": "^5.4 || ^6.0", + "symfony/stopwatch": "^5.4 || ^6.0" + }, + "require-dev": { + "justinrainbow/json-schema": "^5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", + "php-cs-fixer/accessible-object": "^1.1", + "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", + "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", + "phpspec/prophecy": "^1.16", + "phpspec/prophecy-phpunit": "^2.0", + "phpunit/phpunit": "^9.5", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", + "symfony/yaml": "^5.4 || ^6.0" + }, + "suggest": { + "ext-dom": "For handling output formats in XML", + "ext-mbstring": "For handling non-UTF8 characters." + }, + "bin": [ + "php-cs-fixer" + ], + "type": "application", + "autoload": { + "psr-4": { + "PhpCsFixer\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Dariusz Rumiński", + "email": "dariusz.ruminski@gmail.com" + } + ], + "description": "A tool to automatically fix PHP code style", + "support": { + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.3" + }, + "funding": [ + { + "url": "https://github.com/keradus", + "type": "github" + } + ], + "time": "2023-01-30T00:24:29+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/58571acbaa5f9f462c9c77e911700ac66f446d4e", + "reference": "58571acbaa5f9f462c9c77e911700ac66f446d4e", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.1-dev" + } + }, + "autoload": { + "psr-4": { + "Fruitcake\\Cors\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fruitcake", + "homepage": "https://fruitcake.nl" + }, + { + "name": "Barryvdh", + "email": "barryvdh@gmail.com" + } + ], + "description": "Cross-origin resource sharing library for the Symfony HttpFoundation", + "homepage": "https://github.com/fruitcake/php-cors", + "keywords": [ + "cors", + "laravel", + "symfony" + ], + "support": { + "issues": "https://github.com/fruitcake/php-cors/issues", + "source": "https://github.com/fruitcake/php-cors/tree/v1.2.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2022-02-20T15:07:15+00:00" + }, + { + "name": "graham-campbell/result-type", + "version": "v1.1.0", + "source": { + "type": "git", + "url": "https://github.com/GrahamCampbell/Result-Type.git", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", + "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "autoload": { + "psr-4": { + "GrahamCampbell\\ResultType\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "An Implementation Of The Result Type", + "keywords": [ + "Graham Campbell", + "GrahamCampbell", + "Result Type", + "Result-Type", + "result" + ], + "support": { + "issues": "https://github.com/GrahamCampbell/Result-Type/issues", + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/graham-campbell/result-type", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:56:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.4.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "67c26b443f348a51926030c83481b85718457d3d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.29 || ^9.5.23" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + }, + "branch-alias": { + "dev-master": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "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" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.4.3" + }, + "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": "2022-10-26T14:07:24+00:00" + }, + { + "name": "hamcrest/hamcrest-php", + "version": "v2.0.1", + "source": { + "type": "git", + "url": "https://github.com/hamcrest/hamcrest-php.git", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "shasum": "" + }, + "require": { + "php": "^5.3|^7.0|^8.0" + }, + "replace": { + "cordoval/hamcrest-php": "*", + "davedevelopment/hamcrest-php": "*", + "kodova/hamcrest-php": "*" + }, + "require-dev": { + "phpunit/php-file-iterator": "^1.4 || ^2.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.1-dev" + } + }, + "autoload": { + "classmap": [ + "hamcrest" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "description": "This is the PHP port of Hamcrest Matchers", + "keywords": [ + "test" + ], + "support": { + "issues": "https://github.com/hamcrest/hamcrest-php/issues", + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + }, + "time": "2020-07-09T08:09:16+00:00" + }, + { + "name": "laravel/framework", + "version": "v9.50.2", + "source": { + "type": "git", + "url": "https://github.com/laravel/framework.git", + "reference": "39932773c09658ddea9045958f305e67f9304995" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/framework/zipball/39932773c09658ddea9045958f305e67f9304995", + "reference": "39932773c09658ddea9045958f305e67f9304995", + "shasum": "" + }, + "require": { + "brick/math": "^0.9.3|^0.10.2|^0.11", + "doctrine/inflector": "^2.0.5", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1|^4.0", + "ext-mbstring": "*", + "ext-openssl": "*", + "fruitcake/php-cors": "^1.2", + "laravel/serializable-closure": "^1.2.2", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^2.0", + "nesbot/carbon": "^2.62.1", + "nunomaduro/termwind": "^1.13", + "php": "^8.0.2", + "psr/container": "^1.1.1|^2.0.1", + "psr/log": "^1.0|^2.0|^3.0", + "psr/simple-cache": "^1.0|^2.0|^3.0", + "ramsey/uuid": "^4.7", + "symfony/console": "^6.0.9", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/uid": "^6.0", + "symfony/var-dumper": "^6.0", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", + "vlucas/phpdotenv": "^5.4.1", + "voku/portable-ascii": "^2.0" + }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, + "provide": { + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" + }, + "replace": { + "illuminate/auth": "self.version", + "illuminate/broadcasting": "self.version", + "illuminate/bus": "self.version", + "illuminate/cache": "self.version", + "illuminate/collections": "self.version", + "illuminate/conditionable": "self.version", + "illuminate/config": "self.version", + "illuminate/console": "self.version", + "illuminate/container": "self.version", + "illuminate/contracts": "self.version", + "illuminate/cookie": "self.version", + "illuminate/database": "self.version", + "illuminate/encryption": "self.version", + "illuminate/events": "self.version", + "illuminate/filesystem": "self.version", + "illuminate/hashing": "self.version", + "illuminate/http": "self.version", + "illuminate/log": "self.version", + "illuminate/macroable": "self.version", + "illuminate/mail": "self.version", + "illuminate/notifications": "self.version", + "illuminate/pagination": "self.version", + "illuminate/pipeline": "self.version", + "illuminate/queue": "self.version", + "illuminate/redis": "self.version", + "illuminate/routing": "self.version", + "illuminate/session": "self.version", + "illuminate/support": "self.version", + "illuminate/testing": "self.version", + "illuminate/translation": "self.version", + "illuminate/validation": "self.version", + "illuminate/view": "self.version" + }, + "require-dev": { + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^2.13.3|^3.1.4", + "fakerphp/faker": "^1.21", + "guzzlehttp/guzzle": "^7.5", + "league/flysystem-aws-s3-v3": "^3.0", + "league/flysystem-ftp": "^3.0", + "league/flysystem-path-prefixing": "^3.3", + "league/flysystem-read-only": "^3.3", + "league/flysystem-sftp-v3": "^3.0", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.16", + "pda/pheanstalk": "^4.0", + "phpstan/phpdoc-parser": "^1.15", + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9|^2.0.2", + "symfony/cache": "^6.0", + "symfony/http-client": "^6.0" + }, + "suggest": { + "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", + "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", + "brianium/paratest": "Required to run tests in parallel (^6.0).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-ftp": "Required to use the Flysystem FTP driver.", + "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", + "ext-memcached": "Required to use the memcache cache driver.", + "ext-pcntl": "Required to use all features of the queue worker.", + "ext-posix": "Required to use all features of the queue worker.", + "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", + "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", + "filp/whoops": "Required for friendly error pages in development (^2.14.3).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", + "laravel/tinker": "Required to use the tinker console command (^2.0).", + "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", + "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", + "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", + "league/flysystem-read-only": "Required to use read-only disks (^3.3)", + "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", + "mockery/mockery": "Required to use mocking (^1.5.1).", + "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", + "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", + "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", + "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.x-dev" + } + }, + "autoload": { + "files": [ + "src/Illuminate/Collections/helpers.php", + "src/Illuminate/Events/functions.php", + "src/Illuminate/Foundation/helpers.php", + "src/Illuminate/Support/helpers.php" + ], + "psr-4": { + "Illuminate\\": "src/Illuminate/", + "Illuminate\\Support\\": [ + "src/Illuminate/Macroable/", + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" + ] + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + } + ], + "description": "The Laravel Framework.", + "homepage": "https://laravel.com", + "keywords": [ + "framework", + "laravel" + ], + "support": { + "issues": "https://github.com/laravel/framework/issues", + "source": "https://github.com/laravel/framework" + }, + "time": "2023-02-02T20:52:46+00:00" + }, + { + "name": "laravel/serializable-closure", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/laravel/serializable-closure.git", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "reference": "f23fe9d4e95255dacee1bf3525e0810d1a1b0f37", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.x-dev" + } + }, + "autoload": { + "psr-4": { + "Laravel\\SerializableClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Taylor Otwell", + "email": "taylor@laravel.com" + }, + { + "name": "Nuno Maduro", + "email": "nuno@laravel.com" + } + ], + "description": "Laravel Serializable Closure provides an easy and secure way to serialize closures in PHP.", + "keywords": [ + "closure", + "laravel", + "serializable" + ], + "support": { + "issues": "https://github.com/laravel/serializable-closure/issues", + "source": "https://github.com/laravel/serializable-closure" + }, + "time": "2023-01-30T18:31:20+00:00" + }, + { + "name": "league/commonmark", + "version": "2.3.8", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/commonmark.git", + "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c493585c130544c4e91d2e0e131e6d35cb0cbc47", + "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "league/config": "^1.1.1", + "php": "^7.4 || ^8.0", + "psr/event-dispatcher": "^1.0", + "symfony/deprecation-contracts": "^2.1 || ^3.0", + "symfony/polyfill-php80": "^1.16" + }, + "require-dev": { + "cebe/markdown": "^1.0", + "commonmark/cmark": "0.30.0", + "commonmark/commonmark.js": "0.30.0", + "composer/package-versions-deprecated": "^1.8", + "embed/embed": "^4.4", + "erusev/parsedown": "^1.0", + "ext-json": "*", + "github/gfm": "0.29.0", + "michelf/php-markdown": "^1.4 || ^2.0", + "nyholm/psr7": "^1.5", + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.21", + "scrutinizer/ocular": "^1.8.1", + "symfony/finder": "^5.3 | ^6.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "unleashedtech/php-coding-standard": "^3.1.1", + "vimeo/psalm": "^4.24.0 || ^5.0.0" + }, + "suggest": { + "symfony/yaml": "v2.3+ required if using the Front Matter extension" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.4-dev" + } + }, + "autoload": { + "psr-4": { + "League\\CommonMark\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Highly-extensible PHP Markdown parser which fully supports the CommonMark spec and GitHub-Flavored Markdown (GFM)", + "homepage": "https://commonmark.thephpleague.com", + "keywords": [ + "commonmark", + "flavored", + "gfm", + "github", + "github-flavored", + "markdown", + "md", + "parser" + ], + "support": { + "docs": "https://commonmark.thephpleague.com/", + "forum": "https://github.com/thephpleague/commonmark/discussions", + "issues": "https://github.com/thephpleague/commonmark/issues", + "rss": "https://github.com/thephpleague/commonmark/releases.atom", + "source": "https://github.com/thephpleague/commonmark" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/commonmark", + "type": "tidelift" + } + ], + "time": "2022-12-10T16:02:17+00:00" + }, + { + "name": "league/config", + "version": "v1.2.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/config.git", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "shasum": "" + }, + "require": { + "dflydev/dot-access-data": "^3.0.1", + "nette/schema": "^1.2", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/phpstan": "^1.8.2", + "phpunit/phpunit": "^9.5.5", + "scrutinizer/ocular": "^1.8.1", + "unleashedtech/php-coding-standard": "^3.1", + "vimeo/psalm": "^4.7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.2-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Config\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Colin O'Dell", + "email": "colinodell@gmail.com", + "homepage": "https://www.colinodell.com", + "role": "Lead Developer" + } + ], + "description": "Define configuration arrays with strict schemas and access values with dot notation", + "homepage": "https://config.thephpleague.com", + "keywords": [ + "array", + "config", + "configuration", + "dot", + "dot-access", + "nested", + "schema" + ], + "support": { + "docs": "https://config.thephpleague.com/", + "issues": "https://github.com/thephpleague/config/issues", + "rss": "https://github.com/thephpleague/config/releases.atom", + "source": "https://github.com/thephpleague/config" + }, + "funding": [ + { + "url": "https://www.colinodell.com/sponsor", + "type": "custom" + }, + { + "url": "https://www.paypal.me/colinpodell/10.00", + "type": "custom" + }, + { + "url": "https://github.com/colinodell", + "type": "github" + } + ], + "time": "2022-12-11T20:36:23+00:00" + }, + { + "name": "league/flysystem", + "version": "3.12.2", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem.git", + "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f6377c709d2275ed6feaf63e44be7a7162b0e77f", + "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f", + "shasum": "" + }, + "require": { + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "conflict": { + "aws/aws-sdk-php": "3.209.31 || 3.210.0", + "guzzlehttp/guzzle": "<7.0", + "guzzlehttp/ringphp": "<1.1.1", + "phpseclib/phpseclib": "3.0.15", + "symfony/http-client": "<5.2" + }, + "require-dev": { + "async-aws/s3": "^1.5", + "async-aws/simple-s3": "^1.1", + "aws/aws-sdk-php": "^3.220.0", + "composer/semver": "^3.0", + "ext-fileinfo": "*", + "ext-ftp": "*", + "ext-zip": "*", + "friendsofphp/php-cs-fixer": "^3.5", + "google/cloud-storage": "^1.23", + "microsoft/azure-storage-blob": "^1.1", + "phpseclib/phpseclib": "^3.0.14", + "phpstan/phpstan": "^0.12.26", + "phpunit/phpunit": "^9.5.11", + "sabre/dav": "^4.3.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "File storage abstraction for PHP", + "keywords": [ + "WebDAV", + "aws", + "cloud", + "file", + "files", + "filesystem", + "filesystems", + "ftp", + "s3", + "sftp", + "storage" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem/issues", + "source": "https://github.com/thephpleague/flysystem/tree/3.12.2" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2023-01-19T12:02:19+00:00" + }, + { + "name": "league/mime-type-detection", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/mime-type-detection.git", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "reference": "ff6248ea87a9f116e78edd6002e39e5128a0d4dd", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "php": "^7.2 || ^8.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.2", + "phpstan/phpstan": "^0.12.68", + "phpunit/phpunit": "^8.5.8 || ^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\MimeTypeDetection\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Mime-type detection for Flysystem", + "support": { + "issues": "https://github.com/thephpleague/mime-type-detection/issues", + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.11.0" + }, + "funding": [ + { + "url": "https://github.com/frankdejonge", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/league/flysystem", + "type": "tidelift" + } + ], + "time": "2022-04-17T13:12:02+00:00" + }, + { + "name": "mockery/mockery", + "version": "1.5.1", + "source": { + "type": "git", + "url": "https://github.com/mockery/mockery.git", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/mockery/mockery/zipball/e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "reference": "e92dcc83d5a51851baf5f5591d32cb2b16e3684e", + "shasum": "" + }, + "require": { + "hamcrest/hamcrest-php": "^2.0.1", + "lib-pcre": ">=7.0", + "php": "^7.3 || ^8.0" + }, + "conflict": { + "phpunit/phpunit": "<8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.5 || ^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Mockery": "library/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Pádraic Brady", + "email": "padraic.brady@gmail.com", + "homepage": "http://blog.astrumfutura.com" + }, + { + "name": "Dave Marshall", + "email": "dave.marshall@atstsolutions.co.uk", + "homepage": "http://davedevelopment.co.uk" + } + ], + "description": "Mockery is a simple yet flexible PHP mock object framework", + "homepage": "https://github.com/mockery/mockery", + "keywords": [ + "BDD", + "TDD", + "library", + "mock", + "mock objects", + "mockery", + "stub", + "test", + "test double", + "testing" + ], + "support": { + "issues": "https://github.com/mockery/mockery/issues", + "source": "https://github.com/mockery/mockery/tree/1.5.1" + }, + "time": "2022-09-07T15:32:08+00:00" + }, + { + "name": "monolog/monolog", + "version": "2.9.0", + "source": { + "type": "git", + "url": "https://github.com/Seldaek/monolog.git", + "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb", + "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb", + "shasum": "" + }, + "require": { + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" + }, + "provide": { + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + }, + "require-dev": { + "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "doctrine/couchdb": "~1.0@dev", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2@dev", + "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/psr7": "^2.2", + "mongodb/mongodb": "^1.8", + "php-amqplib/php-amqplib": "~2.4 || ^3", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", + "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" + }, + "suggest": { + "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", + "doctrine/couchdb": "Allow sending log messages to a CouchDB server", + "elasticsearch/elasticsearch": "Allow sending log messages to an Elasticsearch server via official client", + "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", + "ext-curl": "Required to send log messages using the IFTTTHandler, the LogglyHandler, the SendGridHandler, the SlackWebhookHandler or the TelegramBotHandler", + "ext-mbstring": "Allow to work properly with unicode symbols", + "ext-mongodb": "Allow sending log messages to a MongoDB server (via driver)", + "ext-openssl": "Required to send log messages using SSL", + "ext-sockets": "Allow sending log messages to a Syslog server (via UDP driver)", + "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", + "mongodb/mongodb": "Allow sending log messages to a MongoDB server (via library)", + "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", + "rollbar/rollbar": "Allow sending log messages to Rollbar", + "ruflin/elastica": "Allow sending log messages to an Elastic Search server" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "2.x-dev" + } + }, + "autoload": { + "psr-4": { + "Monolog\\": "src/Monolog" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jordi Boggiano", + "email": "j.boggiano@seld.be", + "homepage": "https://seld.be" + } + ], + "description": "Sends your logs to files, sockets, inboxes, databases and various web services", + "homepage": "https://github.com/Seldaek/monolog", + "keywords": [ + "log", + "logging", + "psr-3" + ], + "support": { + "issues": "https://github.com/Seldaek/monolog/issues", + "source": "https://github.com/Seldaek/monolog/tree/2.9.0" + }, + "funding": [ + { + "url": "https://github.com/Seldaek", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/monolog/monolog", + "type": "tidelift" + } + ], + "time": "2023-02-05T13:07:32+00:00" + }, + { + "name": "myclabs/deep-copy", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/myclabs/DeepCopy.git", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/14daed4296fae74d9e3201d2c4925d1acb7aa614", + "reference": "14daed4296fae74d9e3201d2c4925d1acb7aa614", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" + }, + "require-dev": { + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" + }, + "type": "library", + "autoload": { + "files": [ + "src/DeepCopy/deep_copy.php" + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "Create deep copies (clones) of your objects", + "keywords": [ + "clone", + "copy", + "duplicate", + "object", + "object graph" + ], + "support": { + "issues": "https://github.com/myclabs/DeepCopy/issues", + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.0" + }, + "funding": [ + { + "url": "https://tidelift.com/funding/github/packagist/myclabs/deep-copy", + "type": "tidelift" + } + ], + "time": "2022-03-03T13:19:32+00:00" + }, + { + "name": "nesbot/carbon", + "version": "2.66.0", + "source": { + "type": "git", + "url": "https://github.com/briannesbitt/Carbon.git", + "reference": "496712849902241f04902033b0441b269effe001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/496712849902241f04902033b0441b269effe001", + "reference": "496712849902241f04902033b0441b269effe001", + "shasum": "" + }, + "require": { + "ext-json": "*", + "php": "^7.1.8 || ^8.0", + "symfony/polyfill-mbstring": "^1.0", + "symfony/polyfill-php80": "^1.16", + "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "doctrine/dbal": "^2.0 || ^3.1.4", + "doctrine/orm": "^2.7", + "friendsofphp/php-cs-fixer": "^3.0", + "kylekatarnls/multi-tester": "^2.0", + "ondrejmirtes/better-reflection": "*", + "phpmd/phpmd": "^2.9", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^0.12.99 || ^1.7.14", + "phpunit/php-file-iterator": "^2.0.5 || ^3.0.6", + "phpunit/phpunit": "^7.5.20 || ^8.5.26 || ^9.5.20", + "squizlabs/php_codesniffer": "^3.4" + }, + "bin": [ + "bin/carbon" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-3.x": "3.x-dev", + "dev-master": "2.x-dev" + }, + "laravel": { + "providers": [ + "Carbon\\Laravel\\ServiceProvider" + ] + }, + "phpstan": { + "includes": [ + "extension.neon" + ] + } + }, + "autoload": { + "psr-4": { + "Carbon\\": "src/Carbon/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Brian Nesbitt", + "email": "brian@nesbot.com", + "homepage": "https://markido.com" + }, + { + "name": "kylekatarnls", + "homepage": "https://github.com/kylekatarnls" + } + ], + "description": "An API extension for DateTime that supports 281 different languages.", + "homepage": "https://carbon.nesbot.com", + "keywords": [ + "date", + "datetime", + "time" + ], + "support": { + "docs": "https://carbon.nesbot.com/docs", + "issues": "https://github.com/briannesbitt/Carbon/issues", + "source": "https://github.com/briannesbitt/Carbon" + }, + "funding": [ + { + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" + }, + { + "url": "https://opencollective.com/Carbon#sponsor", + "type": "opencollective" + }, + { + "url": "https://tidelift.com/subscription/pkg/packagist-nesbot-carbon?utm_source=packagist-nesbot-carbon&utm_medium=referral&utm_campaign=readme", + "type": "tidelift" + } + ], + "time": "2023-01-29T18:53:47+00:00" + }, + { + "name": "nette/schema", + "version": "v1.2.3", + "source": { + "type": "git", + "url": "https://github.com/nette/schema.git", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "shasum": "" + }, + "require": { + "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", + "php": ">=7.1 <8.3" + }, + "require-dev": { + "nette/tester": "^2.3 || ^2.4", + "phpstan/phpstan-nette": "^1.0", + "tracy/tracy": "^2.7" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "📐 Nette Schema: validating data structures against a given Schema.", + "homepage": "https://nette.org", + "keywords": [ + "config", + "nette" + ], + "support": { + "issues": "https://github.com/nette/schema/issues", + "source": "https://github.com/nette/schema/tree/v1.2.3" + }, + "time": "2022-10-13T01:24:26+00:00" + }, + { + "name": "nette/utils", + "version": "v4.0.0", + "source": { + "type": "git", + "url": "https://github.com/nette/utils.git", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nette/utils/zipball/cacdbf5a91a657ede665c541eda28941d4b09c1e", + "reference": "cacdbf5a91a657ede665c541eda28941d4b09c1e", + "shasum": "" + }, + "require": { + "php": ">=8.0 <8.3" + }, + "conflict": { + "nette/finder": "<3", + "nette/schema": "<1.2.2" + }, + "require-dev": { + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.4", + "phpstan/phpstan": "^1.0", + "tracy/tracy": "^2.9" + }, + "suggest": { + "ext-gd": "to use Image", + "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()", + "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", + "ext-json": "to use Nette\\Utils\\Json", + "ext-mbstring": "to use Strings::lower() etc...", + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", + "ext-xml": "to use Strings::length() etc. when mbstring is not available" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause", + "GPL-2.0-only", + "GPL-3.0-only" + ], + "authors": [ + { + "name": "David Grudl", + "homepage": "https://davidgrudl.com" + }, + { + "name": "Nette Community", + "homepage": "https://nette.org/contributors" + } + ], + "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.", + "homepage": "https://nette.org", + "keywords": [ + "array", + "core", + "datetime", + "images", + "json", + "nette", + "paginator", + "password", + "slugify", + "string", + "unicode", + "utf-8", + "utility", + "validation" + ], + "support": { + "issues": "https://github.com/nette/utils/issues", + "source": "https://github.com/nette/utils/tree/v4.0.0" + }, + "time": "2023-02-02T10:41:53+00:00" + }, + { + "name": "nikic/php-parser", + "version": "v4.15.3", + "source": { + "type": "git", + "url": "https://github.com/nikic/PHP-Parser.git", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "reference": "570e980a201d8ed0236b0a62ddf2c9cbb2034039", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": ">=7.0" + }, + "require-dev": { + "ircmaxell/php-yacc": "^0.0.7", + "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + }, + "bin": [ + "bin/php-parse" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpParser\\": "lib/PhpParser" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Nikita Popov" + } + ], + "description": "A PHP parser written in PHP", + "keywords": [ + "parser", + "php" + ], + "support": { + "issues": "https://github.com/nikic/PHP-Parser/issues", + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.3" + }, + "time": "2023-01-16T22:05:37+00:00" + }, + { + "name": "nunomaduro/termwind", + "version": "v1.15.0", + "source": { + "type": "git", + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/594ab862396c16ead000de0c3c38f4a5cbe1938d", + "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" + }, + "require-dev": { + "ergebnis/phpstan-rules": "^1.0.", + "illuminate/console": "^8.0|^9.0", + "illuminate/support": "^8.0|^9.0", + "laravel/pint": "^1.0.0", + "pestphp/pest": "^1.21.0", + "pestphp/pest-plugin-mock": "^1.0", + "phpstan/phpstan": "^1.4.6", + "phpstan/phpstan-strict-rules": "^1.1.0", + "symfony/var-dumper": "^5.2.7|^6.0.0", + "thecodingmachine/phpstan-strict-rules": "^1.0.0" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] + } + }, + "autoload": { + "files": [ + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" + } + ], + "description": "Its like Tailwind CSS, but for the console.", + "keywords": [ + "cli", + "console", + "css", + "package", + "php", + "style" + ], + "support": { + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.0" + }, + "funding": [ + { + "url": "https://www.paypal.com/paypalme/enunomaduro", + "type": "custom" + }, + { + "url": "https://github.com/nunomaduro", + "type": "github" + }, + { + "url": "https://github.com/xiCO2k", + "type": "github" + } + ], + "time": "2022-12-20T19:00:15+00:00" + }, + { + "name": "orchestra/testbench", + "version": "v7.19.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench.git", + "reference": "c413751e85972067e7c48cae68514935321c87f0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/c413751e85972067e7c48cae68514935321c87f0", + "reference": "c413751e85972067e7c48cae68514935321c87f0", + "shasum": "" + }, + "require": { + "fakerphp/faker": "^1.21", + "laravel/framework": "^9.45", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.19", + "php": "^8.0", + "phpunit/phpunit": "^9.5.10", + "spatie/laravel-ray": "^1.28", + "symfony/process": "^6.0.9", + "symfony/yaml": "^6.0.9", + "vlucas/phpdotenv": "^5.4.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Laravel Testing Helper for Packages Development", + "homepage": "https://packages.tools/testbench/", + "keywords": [ + "BDD", + "TDD", + "laravel", + "orchestra-platform", + "orchestral", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench/tree/v7.19.0" + }, + "time": "2023-01-10T10:16:26+00:00" + }, + { + "name": "orchestra/testbench-core", + "version": "v7.21.0", + "source": { + "type": "git", + "url": "https://github.com/orchestral/testbench-core.git", + "reference": "07d48ce0fd781626e809e1a7591b75a89e6a2911" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/07d48ce0fd781626e809e1a7591b75a89e6a2911", + "reference": "07d48ce0fd781626e809e1a7591b75a89e6a2911", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "fakerphp/faker": "^1.21", + "laravel/framework": "^9.50.2", + "laravel/pint": "^1.4", + "mockery/mockery": "^1.5.1", + "orchestra/canvas": "^7.0", + "phpstan/phpstan": "^1.9.14", + "phpunit/phpunit": "^9.5.10", + "spatie/laravel-ray": "^1.28", + "symfony/process": "^6.0.9", + "symfony/yaml": "^6.0.9", + "vlucas/phpdotenv": "^5.4.1" + }, + "suggest": { + "brianium/paratest": "Allow using parallel tresting (^6.4).", + "fakerphp/faker": "Allow using Faker for testing (^1.21).", + "laravel/framework": "Required for testing (^9.50.2).", + "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", + "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.2).", + "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^7.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^7.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^9.5.10).", + "symfony/yaml": "Required for CLI Commander (^6.0.9).", + "vlucas/phpdotenv": "Required for CLI Commander (^5.4.1)." + }, + "bin": [ + "testbench" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.0-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Orchestra\\Testbench\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Mior Muhammad Zaki", + "email": "crynobone@gmail.com", + "homepage": "https://github.com/crynobone" + } + ], + "description": "Testing Helper for Laravel Development", + "homepage": "https://packages.tools/testbench", + "keywords": [ + "BDD", + "TDD", + "laravel", + "orchestra-platform", + "orchestral", + "testing" + ], + "support": { + "issues": "https://github.com/orchestral/testbench/issues", + "source": "https://github.com/orchestral/testbench-core" + }, + "time": "2023-02-03T02:00:17+00:00" + }, + { + "name": "phar-io/manifest", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/phar-io/manifest.git", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", + "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-phar": "*", + "ext-xmlwriter": "*", + "phar-io/version": "^3.0.1", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "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/2.0.3" + }, + "time": "2021-07-20T11:28:43+00:00" + }, + { + "name": "phar-io/version", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/phar-io/version.git", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "shasum": "" + }, + "require": { + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + }, + { + "name": "Sebastian Heuer", + "email": "sebastian@phpeople.de", + "role": "Developer" + }, + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "Developer" + } + ], + "description": "Library for handling version information and constraints", + "support": { + "issues": "https://github.com/phar-io/version/issues", + "source": "https://github.com/phar-io/version/tree/3.2.1" + }, + "time": "2022-02-21T01:04:05+00:00" + }, + { + "name": "phpoption/phpoption", + "version": "1.9.0", + "source": { + "type": "git", + "url": "https://github.com/schmittjoh/php-option.git", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8", + "phpunit/phpunit": "^8.5.28 || ^9.5.21" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "1.9-dev" + } + }, + "autoload": { + "psr-4": { + "PhpOption\\": "src/PhpOption/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "Apache-2.0" + ], + "authors": [ + { + "name": "Johannes M. Schmitt", + "email": "schmittjoh@gmail.com", + "homepage": "https://github.com/schmittjoh" + }, + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + } + ], + "description": "Option Type for PHP", + "keywords": [ + "language", + "option", + "php", + "type" + ], + "support": { + "issues": "https://github.com/schmittjoh/php-option/issues", + "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2022-07-30T15:51:26+00:00" + }, + { + "name": "phpunit/php-code-coverage", + "version": "9.2.24", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-code-coverage.git", + "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", + "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "ext-xmlwriter": "*", + "nikic/php-parser": "^4.14", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", + "theseer/tokenizer": "^1.2.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcov": "*", + "ext-xdebug": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.", + "homepage": "https://github.com/sebastianbergmann/php-code-coverage", + "keywords": [ + "coverage", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-01-26T08:26:55+00:00" + }, + { + "name": "phpunit/php-file-iterator", + "version": "3.0.6", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-file-iterator.git", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "FilterIterator implementation that filters files based on a list of suffixes.", + "homepage": "https://github.com/sebastianbergmann/php-file-iterator/", + "keywords": [ + "filesystem", + "iterator" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2021-12-02T12:48:52+00:00" + }, + { + "name": "phpunit/php-invoker", + "version": "3.1.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-invoker.git", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "ext-pcntl": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-pcntl": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Invoke callables with a timeout", + "homepage": "https://github.com/sebastianbergmann/php-invoker/", + "keywords": [ + "process" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-invoker/issues", + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:58:55+00:00" + }, + { + "name": "phpunit/php-text-template", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-text-template.git", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Simple template engine.", + "homepage": "https://github.com/sebastianbergmann/php-text-template/", + "keywords": [ + "template" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-text-template/issues", + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T05:33:50+00:00" + }, + { + "name": "phpunit/php-timer", + "version": "5.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/php-timer.git", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Utility class for timing", + "homepage": "https://github.com/sebastianbergmann/php-timer/", + "keywords": [ + "timer" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/php-timer/issues", + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:16:10+00:00" + }, + { + "name": "phpunit/phpunit", + "version": "9.5.28", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/phpunit.git", + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", + "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", + "shasum": "" + }, + "require": { + "doctrine/instantiator": "^1.3.1 || ^2", + "ext-dom": "*", + "ext-json": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", + "ext-xmlwriter": "*", + "myclabs/deep-copy": "^1.10.1", + "phar-io/manifest": "^2.0.3", + "phar-io/version": "^3.0.2", + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" + }, + "suggest": { + "ext-soap": "*", + "ext-xdebug": "*" + }, + "bin": [ + "phpunit" + ], + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "9.5-dev" + } + }, + "autoload": { + "files": [ + "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "The PHP Unit Testing framework.", + "homepage": "https://phpunit.de/", + "keywords": [ + "phpunit", + "testing", + "xunit" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/phpunit/issues", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" + }, + "funding": [ + { + "url": "https://phpunit.de/sponsors.html", + "type": "custom" + }, + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" + } + ], + "time": "2023-01-14T12:32:24+00:00" + }, + { + "name": "pimple/pimple", + "version": "v3.5.0", + "source": { + "type": "git", + "url": "https://github.com/silexphp/Pimple.git", + "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "reference": "a94b3a4db7fb774b3d78dad2315ddc07629e1bed", + "shasum": "" + }, + "require": { + "php": ">=7.2.5", + "psr/container": "^1.1 || ^2.0" + }, + "require-dev": { + "symfony/phpunit-bridge": "^5.4@dev" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.4.x-dev" + } + }, + "autoload": { + "psr-0": { + "Pimple": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + } + ], + "description": "Pimple, a simple Dependency Injection Container", + "homepage": "https://pimple.symfony.com", + "keywords": [ + "container", + "dependency injection" + ], + "support": { + "source": "https://github.com/silexphp/Pimple/tree/v3.5.0" + }, + "time": "2021-10-28T11:13:42+00:00" + }, + { + "name": "psr/cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/cache.git", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/cache/zipball/aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "reference": "aa5030cfa5405eccfdcb1083ce040c2cb8d253bf", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Cache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for caching libraries", + "keywords": [ + "cache", + "psr", + "psr-6" + ], + "support": { + "source": "https://github.com/php-fig/cache/tree/3.0.0" + }, + "time": "2021-02-03T23:26:27+00:00" + }, + { + "name": "psr/container", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/php-fig/container.git", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/container/zipball/c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963", + "shasum": "" + }, + "require": { + "php": ">=7.4.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Container\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common Container Interface (PHP FIG PSR-11)", + "homepage": "https://github.com/php-fig/container", + "keywords": [ + "PSR-11", + "container", + "container-interface", + "container-interop", + "psr" + ], + "support": { + "issues": "https://github.com/php-fig/container/issues", + "source": "https://github.com/php-fig/container/tree/2.0.2" + }, + "time": "2021-11-05T16:47:00+00:00" + }, + { + "name": "psr/event-dispatcher", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/event-dispatcher.git", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/event-dispatcher/zipball/dbefd12671e8a14ec7f180cab83036ed26714bb0", + "reference": "dbefd12671e8a14ec7f180cab83036ed26714bb0", + "shasum": "" + }, + "require": { + "php": ">=7.2.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\EventDispatcher\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Standard interfaces for event handling.", + "keywords": [ + "events", + "psr", + "psr-14" + ], + "support": { + "issues": "https://github.com/php-fig/event-dispatcher/issues", + "source": "https://github.com/php-fig/event-dispatcher/tree/1.0.0" + }, + "time": "2019-01-08T18:20:26+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "psr/log", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/log.git", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Log\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", + "keywords": [ + "log", + "psr", + "psr-3" + ], + "support": { + "source": "https://github.com/php-fig/log/tree/3.0.0" + }, + "time": "2021-07-14T16:46:02+00:00" + }, + { + "name": "psr/simple-cache", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/simple-cache.git", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", + "shasum": "" + }, + "require": { + "php": ">=8.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\SimpleCache\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interfaces for simple caching", + "keywords": [ + "cache", + "caching", + "psr", + "psr-16", + "simple-cache" + ], + "support": { + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" + }, + "time": "2021-10-29T13:26:27+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + }, + { + "name": "ramsey/collection", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/ramsey/collection.git", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "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.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/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ben Ramsey", + "email": "ben@benramsey.com", + "homepage": "https://benramsey.com" + } + ], + "description": "A PHP library for representing and manipulating collections.", + "keywords": [ + "array", + "collection", + "hash", + "map", + "queue", + "set" + ], + "support": { + "issues": "https://github.com/ramsey/collection/issues", + "source": "https://github.com/ramsey/collection/tree/2.0.0" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/collection", + "type": "tidelift" + } + ], + "time": "2022-12-31T21:50:55+00:00" + }, + { + "name": "ramsey/uuid", + "version": "4.x-dev", + "source": { + "type": "git", + "url": "https://github.com/ramsey/uuid.git", + "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/25c4faac19549ebfcd3a6a73732dddeb188eaf5a", + "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a", + "shasum": "" + }, + "require": { + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "ext-json": "*", + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" + }, + "replace": { + "rhumsaa/uuid": "self.version" + }, + "require-dev": { + "captainhook/captainhook": "^5.10", + "captainhook/plugin-composer": "^5.3", + "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", + "doctrine/annotations": "^1.8", + "ergebnis/composer-normalize": "^2.15", + "mockery/mockery": "^1.3", + "paragonie/random-lib": "^2", + "php-mock/php-mock": "^2.2", + "php-mock/php-mock-mockery": "^1.3", + "php-parallel-lint/php-parallel-lint": "^1.1", + "phpbench/phpbench": "^1.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^8.5 || ^9", + "ramsey/composer-repl": "^1.4", + "slevomat/coding-standard": "^8.4", + "squizlabs/php_codesniffer": "^3.5", + "vimeo/psalm": "^4.9" + }, + "suggest": { + "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", + "ext-gmp": "Enables faster math with arbitrary-precision integers using GMP.", + "ext-uuid": "Enables the use of PeclUuidTimeGenerator and PeclUuidRandomGenerator.", + "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", + "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." + }, + "default-branch": true, + "type": "library", + "extra": { + "captainhook": { + "force-install": true + } + }, + "autoload": { + "files": [ + "src/functions.php" + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A PHP library for generating and working with universally unique identifiers (UUIDs).", + "keywords": [ + "guid", + "identifier", + "uuid" + ], + "support": { + "issues": "https://github.com/ramsey/uuid/issues", + "source": "https://github.com/ramsey/uuid/tree/4.x" + }, + "funding": [ + { + "url": "https://github.com/ramsey", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", + "type": "tidelift" + } + ], + "time": "2023-01-28T17:00:47+00:00" + }, + { + "name": "sebastian/cli-parser", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/cli-parser.git", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for parsing CLI options", + "homepage": "https://github.com/sebastianbergmann/cli-parser", + "support": { + "issues": "https://github.com/sebastianbergmann/cli-parser/issues", + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:08:49+00:00" + }, + { + "name": "sebastian/code-unit", + "version": "1.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit.git", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the PHP code units", + "homepage": "https://github.com/sebastianbergmann/code-unit", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit/issues", + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:08:54+00:00" + }, + { + "name": "sebastian/code-unit-reverse-lookup", + "version": "2.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Looks up which function or method a line of code belongs to", + "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", + "support": { + "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T05:30:19+00:00" + }, + { + "name": "sebastian/comparator", + "version": "4.0.8", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/comparator.git", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@2bepublished.at" + } + ], + "description": "Provides the functionality to compare PHP values for equality", + "homepage": "https://github.com/sebastianbergmann/comparator", + "keywords": [ + "comparator", + "compare", + "equality" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/comparator/issues", + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T12:41:17+00:00" + }, + { + "name": "sebastian/complexity", + "version": "2.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/complexity.git", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.7", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for calculating the complexity of PHP code units", + "homepage": "https://github.com/sebastianbergmann/complexity", + "support": { + "issues": "https://github.com/sebastianbergmann/complexity/issues", + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T15:52:27+00:00" + }, + { + "name": "sebastian/diff", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/diff.git", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3", + "symfony/process": "^4.2 || ^5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "Diff implementation", + "homepage": "https://github.com/sebastianbergmann/diff", + "keywords": [ + "diff", + "udiff", + "unidiff", + "unified diff" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/diff/issues", + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:10:38+00:00" + }, + { + "name": "sebastian/environment", + "version": "5.1.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/environment.git", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-posix": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.1-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides functionality to handle HHVM/PHP environments", + "homepage": "http://www.github.com/sebastianbergmann/environment", + "keywords": [ + "Xdebug", + "environment", + "hhvm" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/environment/issues", + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:03:51+00:00" + }, + { + "name": "sebastian/exporter", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/exporter.git", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Volker Dusch", + "email": "github@wallbash.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + }, + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Provides the functionality to export PHP variables for visualization", + "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.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-09-14T06:03:37+00:00" + }, + { + "name": "sebastian/global-state", + "version": "5.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/global-state.git", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "ext-dom": "*", + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "5.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Snapshotting of global state", + "homepage": "http://www.github.com/sebastianbergmann/global-state", + "keywords": [ + "global state" + ], + "support": { + "issues": "https://github.com/sebastianbergmann/global-state/issues", + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2022-02-14T08:28:10+00:00" + }, + { + "name": "sebastian/lines-of-code", + "version": "1.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/lines-of-code.git", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^4.6", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library for counting the lines of code in PHP source code", + "homepage": "https://github.com/sebastianbergmann/lines-of-code", + "support": { + "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-11-28T06:42:11+00:00" + }, + { + "name": "sebastian/object-enumerator", + "version": "4.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-enumerator.git", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "shasum": "" + }, + "require": { + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Traverses array structures and object graphs to enumerate all referenced objects", + "homepage": "https://github.com/sebastianbergmann/object-enumerator/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:12:34+00:00" + }, + { + "name": "sebastian/object-reflector", + "version": "2.0.4", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/object-reflector.git", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Allows reflection of object attributes, including inherited and non-public ones", + "homepage": "https://github.com/sebastianbergmann/object-reflector/", + "support": { + "issues": "https://github.com/sebastianbergmann/object-reflector/issues", + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-10-26T13:14:26+00:00" + }, + { + "name": "sebastian/recursion-context", + "version": "4.0.5", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/recursion-context.git", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "4.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Jeff Welch", + "email": "whatthejeff@gmail.com" + }, + { + "name": "Adam Harvey", + "email": "aharvey@php.net" + } + ], + "description": "Provides functionality to recursively process PHP variables", + "homepage": "https://github.com/sebastianbergmann/recursion-context", + "support": { + "issues": "https://github.com/sebastianbergmann/recursion-context/issues", + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" + }, + { + "name": "sebastian/type", + "version": "3.2.1", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/type.git", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.2-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Collection of value objects that represent the types of the PHP type system", + "homepage": "https://github.com/sebastianbergmann/type", + "support": { + "issues": "https://github.com/sebastianbergmann/type/issues", + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2023-02-03T06:13:03+00:00" + }, + { + "name": "sebastian/version", + "version": "3.0.2", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/version.git", + "reference": "c6c1022351a901512170118436c764e473f6de8c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de", + "role": "lead" + } + ], + "description": "Library that helps with managing the version number of Git-hosted PHP projects", + "homepage": "https://github.com/sebastianbergmann/version", + "support": { + "issues": "https://github.com/sebastianbergmann/version/issues", + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:39:44+00:00" + }, + { + "name": "spatie/backtrace", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/backtrace.git", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "shasum": "" + }, + "require": { + "php": "^7.3|^8.0" + }, + "require-dev": { + "ext-json": "*", + "phpunit/phpunit": "^9.3", + "symfony/var-dumper": "^5.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Backtrace\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van de Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A better backtrace", + "homepage": "https://github.com/spatie/backtrace", + "keywords": [ + "Backtrace", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/backtrace/issues", + "source": "https://github.com/spatie/backtrace/tree/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2021-11-09T10:57:15+00:00" + }, + { + "name": "spatie/laravel-ray", + "version": "1.32.1", + "source": { + "type": "git", + "url": "https://github.com/spatie/laravel-ray.git", + "reference": "8ecf893a7af385e72b1f63cbd318fb00e2dca340" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/8ecf893a7af385e72b1f63cbd318fb00e2dca340", + "reference": "8ecf893a7af385e72b1f63cbd318fb00e2dca340", + "shasum": "" + }, + "require": { + "ext-json": "*", + "illuminate/contracts": "^7.20|^8.19|^9.0|^10.0", + "illuminate/database": "^7.20|^8.19|^9.0|^10.0", + "illuminate/queue": "^7.20|^8.19|^9.0|^10.0", + "illuminate/support": "^7.20|^8.19|^9.0|^10.0", + "php": "^7.4|^8.0", + "spatie/backtrace": "^1.0", + "spatie/ray": "^1.33", + "symfony/stopwatch": "4.2|^5.1|^6.0", + "zbateson/mail-mime-parser": "^1.3.1|^2.0" + }, + "require-dev": { + "guzzlehttp/guzzle": "^7.3", + "laravel/framework": "^7.20|^8.19|^9.0|^10.0", + "orchestra/testbench-core": "^5.0|^6.0|^7.0|^8.0", + "pestphp/pest": "^1.22", + "phpstan/phpstan": "^0.12.93", + "phpunit/phpunit": "^9.3", + "spatie/pest-plugin-snapshots": "^1.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.29.x-dev" + }, + "laravel": { + "providers": [ + "Spatie\\LaravelRay\\RayServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "Spatie\\LaravelRay\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Easily debug Laravel apps", + "homepage": "https://github.com/spatie/laravel-ray", + "keywords": [ + "laravel-ray", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/laravel-ray/issues", + "source": "https://github.com/spatie/laravel-ray/tree/1.32.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2023-01-26T13:02:05+00:00" + }, + { + "name": "spatie/macroable", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/macroable.git", + "reference": "ec2c320f932e730607aff8052c44183cf3ecb072" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/macroable/zipball/ec2c320f932e730607aff8052c44183cf3ecb072", + "reference": "ec2c320f932e730607aff8052c44183cf3ecb072", + "shasum": "" + }, + "require": { + "php": "^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^8.0|^9.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Spatie\\Macroable\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "A trait to dynamically add methods to a class", + "homepage": "https://github.com/spatie/macroable", + "keywords": [ + "macroable", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/macroable/issues", + "source": "https://github.com/spatie/macroable/tree/2.0.0" + }, + "time": "2021-03-26T22:39:02+00:00" + }, + { + "name": "spatie/ray", + "version": "1.36.0", + "source": { + "type": "git", + "url": "https://github.com/spatie/ray.git", + "reference": "4a4def8cda4806218341b8204c98375aa8c34323" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/spatie/ray/zipball/4a4def8cda4806218341b8204c98375aa8c34323", + "reference": "4a4def8cda4806218341b8204c98375aa8c34323", + "shasum": "" + }, + "require": { + "ext-curl": "*", + "ext-json": "*", + "php": "^7.3|^8.0", + "ramsey/uuid": "^3.0|^4.1", + "spatie/backtrace": "^1.1", + "spatie/macroable": "^1.0|^2.0", + "symfony/stopwatch": "^4.0|^5.1|^6.0", + "symfony/var-dumper": "^4.2|^5.1|^6.0" + }, + "require-dev": { + "illuminate/support": "6.x|^8.18|^9.0", + "nesbot/carbon": "^2.43", + "phpstan/phpstan": "^0.12.92", + "phpunit/phpunit": "^9.5", + "spatie/phpunit-snapshot-assertions": "^4.2", + "spatie/test-time": "^1.2" + }, + "type": "library", + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Spatie\\Ray\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Freek Van der Herten", + "email": "freek@spatie.be", + "homepage": "https://spatie.be", + "role": "Developer" + } + ], + "description": "Debug with Ray to fix problems faster", + "homepage": "https://github.com/spatie/ray", + "keywords": [ + "ray", + "spatie" + ], + "support": { + "issues": "https://github.com/spatie/ray/issues", + "source": "https://github.com/spatie/ray/tree/1.36.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/spatie", + "type": "github" + }, + { + "url": "https://spatie.be/open-source/support-us", + "type": "other" + } + ], + "time": "2022-08-11T14:04:18+00:00" + }, + { + "name": "symfony/console", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/console.git", + "reference": "3e294254f2191762c1d137aed4b94e966965e985" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", + "reference": "3e294254f2191762c1d137aed4b94e966965e985", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/string": "^5.4|^6.0" + }, + "conflict": { + "symfony/dependency-injection": "<5.4", + "symfony/dotenv": "<5.4", + "symfony/event-dispatcher": "<5.4", + "symfony/lock": "<5.4", + "symfony/process": "<5.4" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/lock": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/var-dumper": "^5.4|^6.0" + }, + "suggest": { + "psr/log": "For using the console logger", + "symfony/event-dispatcher": "", + "symfony/lock": "", + "symfony/process": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Console\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Eases the creation of beautiful and testable command line interfaces", + "homepage": "https://symfony.com", + "keywords": [ + "cli", + "command line", + "console", + "terminal" + ], + "support": { + "source": "https://github.com/symfony/console/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/css-selector", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/css-selector.git", + "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", + "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\CssSelector\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Jean-François Simon", + "email": "jeanfrancois.simon@sensiolabs.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Converts CSS selectors to XPath expressions", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/css-selector/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/deprecation-contracts", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/deprecation-contracts.git", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "files": [ + "function.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "A generic function and convention to trigger deprecation notices", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-25T10:21:52+00:00" + }, + { + "name": "symfony/error-handler", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/error-handler.git", + "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/0092696af0be8e6124b042fbe2890ca1788d7b28", + "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/var-dumper": "^5.4|^6.0" + }, + "require-dev": { + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/serializer": "^5.4|^6.0" + }, + "bin": [ + "Resources/bin/patch-type-declarations" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\ErrorHandler\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "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.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/event-dispatcher", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher.git", + "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", + "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2|^3" + }, + "conflict": { + "symfony/dependency-injection": "<5.4" + }, + "provide": { + "psr/event-dispatcher-implementation": "1.0", + "symfony/event-dispatcher-implementation": "2.0|3.0" + }, + "require-dev": { + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/error-handler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/service-contracts": "^1.1|^2|^3", + "symfony/stopwatch": "^5.4|^6.0" + }, + "suggest": { + "symfony/dependency-injection": "", + "symfony/http-kernel": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\EventDispatcher\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "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.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/event-dispatcher-contracts", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/event-dispatcher-contracts.git", + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", + "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/event-dispatcher": "^1" + }, + "suggest": { + "symfony/event-dispatcher-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\EventDispatcher\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to dispatching event", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-25T10:21:52+00:00" + }, + { + "name": "symfony/filesystem", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/filesystem.git", + "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/e59e8a4006afd7f5654786a83b4fcb8da98f4593", + "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-mbstring": "~1.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Filesystem\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides basic utilities for the filesystem", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/filesystem/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-20T17:45:48+00:00" + }, + { + "name": "symfony/finder", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/finder.git", + "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/finder/zipball/c90dc446976a612e3312a97a6ec0069ab0c2099c", + "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Finder\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Finds files and directories via an intuitive fluent interface", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/finder/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-20T17:45:48+00:00" + }, + { + "name": "symfony/http-foundation", + "version": "v6.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-foundation.git", + "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8dd1f502bc2b3371d05092aa233b064b03ce7ed", + "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/polyfill-mbstring": "~1.1" + }, + "conflict": { + "symfony/cache": "<6.2" + }, + "require-dev": { + "predis/predis": "~1.0", + "symfony/cache": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4", + "symfony/mime": "^5.4|^6.0", + "symfony/rate-limiter": "^5.2|^6.0" + }, + "suggest": { + "symfony/mime": "To use the file extension guesser" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpFoundation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Defines an object-oriented layer for the HTTP specification", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/http-foundation/tree/v6.2.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-30T15:46:28+00:00" + }, + { + "name": "symfony/http-kernel", + "version": "v6.2.6", + "source": { + "type": "git", + "url": "https://github.com/symfony/http-kernel.git", + "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7122db07b0d8dbf0de682267c84217573aee3ea7", + "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", + "symfony/error-handler": "^6.1", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/browser-kit": "<5.4", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.2", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<5.4", + "twig/twig": "<2.13" + }, + "provide": { + "psr/log-implementation": "1.0|2.0|3.0" + }, + "require-dev": { + "psr/cache": "^1.0|^2.0|^3.0", + "symfony/browser-kit": "^5.4|^6.0", + "symfony/config": "^6.1", + "symfony/console": "^5.4|^6.0", + "symfony/css-selector": "^5.4|^6.0", + "symfony/dependency-injection": "^6.2", + "symfony/dom-crawler": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/process": "^5.4|^6.0", + "symfony/routing": "^5.4|^6.0", + "symfony/stopwatch": "^5.4|^6.0", + "symfony/translation": "^5.4|^6.0", + "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "symfony/browser-kit": "", + "symfony/config": "", + "symfony/console": "", + "symfony/dependency-injection": "" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\HttpKernel\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "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.6" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-02-01T08:32:25+00:00" + }, + { + "name": "symfony/mailer", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/mailer.git", + "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mailer/zipball/29729ac0b4e5113f24c39c46746bd6afb79e0aaa", + "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa", + "shasum": "" + }, + "require": { + "egulias/email-validator": "^2.1.10|^3|^4", + "php": ">=8.1", + "psr/event-dispatcher": "^1", + "psr/log": "^1|^2|^3", + "symfony/event-dispatcher": "^5.4|^6.0", + "symfony/mime": "^6.2", + "symfony/service-contracts": "^1.1|^2|^3" + }, + "conflict": { + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mailer\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Helps sending emails", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/mailer/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-10T18:53:53+00:00" + }, + { + "name": "symfony/mime", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/mime.git", + "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/mime/zipball/4b7b349f67d15cd0639955c8179a76c89f6fd610", + "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" + }, + "conflict": { + "egulias/email-validator": "~3.0.0", + "phpdocumentor/reflection-docblock": "<3.2.2", + "phpdocumentor/type-resolver": "<1.4.0", + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" + }, + "require-dev": { + "egulias/email-validator": "^2.1.10|^3.1|^4", + "league/html-to-markdown": "^5.0", + "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/property-access": "^5.4|^6.0", + "symfony/property-info": "^5.4|^6.0", + "symfony/serializer": "^6.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Mime\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Allows manipulating MIME messages", + "homepage": "https://symfony.com", + "keywords": [ + "mime", + "mime-type" + ], + "support": { + "source": "https://github.com/symfony/mime/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-10T18:53:53+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "e8324d44f5af99ec2ccec849934a242f64458f86" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e8324d44f5af99ec2ccec849934a242f64458f86", + "reference": "e8324d44f5af99ec2ccec849934a242f64458f86", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.1|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an improved replacement for the array_replace PHP function", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/polyfill-ctype", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-ctype": "*" + }, + "suggest": { + "ext-ctype": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for ctype functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "ctype", + "polyfill", + "portable" + ], + "support": { + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-iconv", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-iconv.git", + "reference": "927013f3aac555983a5059aada98e1907d842695" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/927013f3aac555983a5059aada98e1907d842695", + "reference": "927013f3aac555983a5059aada98e1907d842695", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-iconv": "*" + }, + "suggest": { + "ext-iconv": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Iconv\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Iconv extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "iconv", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-iconv/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-grapheme", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-grapheme.git", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's grapheme_* functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "grapheme", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-idn", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-idn.git", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-intl-normalizer": "^1.10", + "symfony/polyfill-php72": "^1.10" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Laurent Bassin", + "email": "laurent@bassin.info" + }, + { + "name": "Trevor Rowbotham", + "email": "trevor.rowbotham@pm.me" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's idn_to_ascii and idn_to_utf8 functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "idn", + "intl", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-intl-normalizer", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-intl-normalizer.git", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "suggest": { + "ext-intl": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for intl's Normalizer class and related functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "intl", + "normalizer", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-mbstring", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-mbstring.git", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-mbstring": "*" + }, + "suggest": { + "ext-mbstring": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for the Mbstring extension", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "mbstring", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php72", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php72.git", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 7.2+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php80", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-php81", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php81.git", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Php81\\": "" + }, + "classmap": [ + "Resources/stubs" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "support": { + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/polyfill-uuid", + "version": "v1.27.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", + "shasum": "" + }, + "require": { + "php": ">=7.1" + }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "1.27-dev" + }, + "thanks": { + "name": "symfony/polyfill", + "url": "https://github.com/symfony/polyfill" + } + }, + "autoload": { + "files": [ + "bootstrap.php" + ], + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill for uuid functions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-03T14:55:06+00:00" + }, + { + "name": "symfony/process", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/process.git", + "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/process/zipball/9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", + "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Process\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Executes commands in sub-processes", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/process/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/routing", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/routing.git", + "reference": "589bd742d5d03c192c8521911680fe88f61712fe" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/routing/zipball/589bd742d5d03c192c8521911680fe88f61712fe", + "reference": "589bd742d5d03c192c8521911680fe88f61712fe", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "conflict": { + "doctrine/annotations": "<1.12", + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" + }, + "require-dev": { + "doctrine/annotations": "^1.12|^2", + "psr/log": "^1|^2|^3", + "symfony/config": "^6.2", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/expression-language": "^5.4|^6.0", + "symfony/http-foundation": "^5.4|^6.0", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "symfony/config": "For using the all-in-one router or any loader", + "symfony/expression-language": "For using expression matching", + "symfony/http-foundation": "For using a Symfony Request object", + "symfony/yaml": "For using the YAML loader" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Routing\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Maps an HTTP request to a set of configuration variables", + "homepage": "https://symfony.com", + "keywords": [ + "router", + "routing", + "uri", + "url" + ], + "support": { + "source": "https://github.com/symfony/routing/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/service-contracts", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/service-contracts.git", + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "psr/container": "^2.0" + }, + "conflict": { + "ext-psr": "<1.1|>=2" + }, + "suggest": { + "symfony/service-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Service\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to writing services", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-25T10:21:52+00:00" + }, + { + "name": "symfony/stopwatch", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/stopwatch.git", + "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/00b6ac156aacffc53487c930e0ab14587a6607f6", + "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/service-contracts": "^1|^2|^3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Stopwatch\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides a way to profile code", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/stopwatch/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:36:55+00:00" + }, + { + "name": "symfony/string", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "~1.8", + "symfony/polyfill-intl-grapheme": "~1.0", + "symfony/polyfill-intl-normalizer": "~1.0", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "symfony/translation-contracts": "<2.0" + }, + "require-dev": { + "symfony/error-handler": "^5.4|^6.0", + "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", + "symfony/translation-contracts": "^2.0|^3.0", + "symfony/var-exporter": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to strings and deals with bytes, UTF-8 code points and grapheme clusters in a unified way", + "homepage": "https://symfony.com", + "keywords": [ + "grapheme", + "i18n", + "string", + "unicode", + "utf-8", + "utf8" + ], + "support": { + "source": "https://github.com/symfony/string/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/translation", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation.git", + "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation/zipball/60556925a703cfbc1581cde3b3f35b0bb0ea904c", + "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0", + "symfony/translation-contracts": "^2.3|^3.0" + }, + "conflict": { + "symfony/config": "<5.4", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<5.4", + "symfony/http-kernel": "<5.4", + "symfony/twig-bundle": "<5.4", + "symfony/yaml": "<5.4" + }, + "provide": { + "symfony/translation-implementation": "2.3|3.0" + }, + "require-dev": { + "nikic/php-parser": "^4.13", + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0", + "symfony/console": "^5.4|^6.0", + "symfony/dependency-injection": "^5.4|^6.0", + "symfony/finder": "^5.4|^6.0", + "symfony/http-client-contracts": "^1.1|^2.0|^3.0", + "symfony/http-kernel": "^5.4|^6.0", + "symfony/intl": "^5.4|^6.0", + "symfony/polyfill-intl-icu": "^1.21", + "symfony/routing": "^5.4|^6.0", + "symfony/service-contracts": "^1.1.2|^2|^3", + "symfony/yaml": "^5.4|^6.0" + }, + "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", + "psr/log-implementation": "To use logging capability in translator", + "symfony/config": "", + "symfony/yaml": "" + }, + "type": "library", + "autoload": { + "files": [ + "Resources/functions.php" + ], + "psr-4": { + "Symfony\\Component\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides tools to internationalize your application", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/translation/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-05T07:00:27+00:00" + }, + { + "name": "symfony/translation-contracts", + "version": "v3.2.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/translation-contracts.git", + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", + "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", + "shasum": "" + }, + "require": { + "php": ">=8.1" + }, + "suggest": { + "symfony/translation-implementation": "" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "3.3-dev" + }, + "thanks": { + "name": "symfony/contracts", + "url": "https://github.com/symfony/contracts" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Contracts\\Translation\\": "" + }, + "exclude-from-classmap": [ + "/Test/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Generic abstractions related to translation", + "homepage": "https://symfony.com", + "keywords": [ + "abstractions", + "contracts", + "decoupling", + "interfaces", + "interoperability", + "standards" + ], + "support": { + "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2022-11-25T10:21:52+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/8ace895bded57d6496638c9b2d3b788e05b7395b", + "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Uid\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" + }, + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides an object-oriented API to generate and represent UIDs", + "homepage": "https://symfony.com", + "keywords": [ + "UID", + "ulid", + "uuid" + ], + "support": { + "source": "https://github.com/symfony/uid/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-01T08:38:09+00:00" + }, + { + "name": "symfony/var-dumper", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/var-dumper.git", + "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/44b7b81749fd20c1bdf4946c041050e22bc8da27", + "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-mbstring": "~1.0" + }, + "conflict": { + "phpunit/phpunit": "<5.4.3", + "symfony/console": "<5.4" + }, + "require-dev": { + "ext-iconv": "*", + "symfony/console": "^5.4|^6.0", + "symfony/process": "^5.4|^6.0", + "symfony/uid": "^5.4|^6.0", + "twig/twig": "^2.13|^3.0.4" + }, + "suggest": { + "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).", + "ext-intl": "To show region name in time zone dump", + "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script" + }, + "bin": [ + "Resources/bin/var-dump-server" + ], + "type": "library", + "autoload": { + "files": [ + "Resources/functions/dump.php" + ], + "psr-4": { + "Symfony\\Component\\VarDumper\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Provides mechanisms for walking through any arbitrary PHP variable", + "homepage": "https://symfony.com", + "keywords": [ + "debug", + "dump" + ], + "support": { + "source": "https://github.com/symfony/var-dumper/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-20T17:45:48+00:00" + }, + { + "name": "symfony/yaml", + "version": "v6.2.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/yaml.git", + "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/yaml/zipball/2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", + "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-ctype": "^1.8" + }, + "conflict": { + "symfony/console": "<5.4" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0" + }, + "suggest": { + "symfony/console": "For validating YAML files using the lint command" + }, + "bin": [ + "Resources/bin/yaml-lint" + ], + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\Yaml\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Loads and dumps YAML files", + "homepage": "https://symfony.com", + "support": { + "source": "https://github.com/symfony/yaml/tree/v6.2.5" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2023-01-10T18:53:53+00:00" + }, + { + "name": "theseer/tokenizer", + "version": "1.2.1", + "source": { + "type": "git", + "url": "https://github.com/theseer/tokenizer.git", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", + "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-tokenizer": "*", + "ext-xmlwriter": "*", + "php": "^7.2 || ^8.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Arne Blankerts", + "email": "arne@blankerts.de", + "role": "Developer" + } + ], + "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/1.2.1" + }, + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2021-07-28T10:34:58+00:00" + }, + { + "name": "tijsverkoyen/css-to-inline-styles", + "version": "2.2.6", + "source": { + "type": "git", + "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "shasum": "" + }, + "require": { + "ext-dom": "*", + "ext-libxml": "*", + "php": "^5.5 || ^7.0 || ^8.0", + "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.2.x-dev" + } + }, + "autoload": { + "psr-4": { + "TijsVerkoyen\\CssToInlineStyles\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Tijs Verkoyen", + "email": "css_to_inline_styles@verkoyen.eu", + "role": "Developer" + } + ], + "description": "CssToInlineStyles is a class that enables you to convert HTML-pages/files into HTML-pages/files with inline styles. This is very useful when you're sending emails.", + "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", + "support": { + "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + }, + "time": "2023-01-03T09:29:04+00:00" + }, + { + "name": "vlucas/phpdotenv", + "version": "v5.5.0", + "source": { + "type": "git", + "url": "https://github.com/vlucas/phpdotenv.git", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "shasum": "" + }, + "require": { + "ext-pcre": "*", + "graham-campbell/result-type": "^1.0.2", + "php": "^7.1.3 || ^8.0", + "phpoption/phpoption": "^1.8", + "symfony/polyfill-ctype": "^1.23", + "symfony/polyfill-mbstring": "^1.23.1", + "symfony/polyfill-php80": "^1.23.1" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-filter": "*", + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" + }, + "suggest": { + "ext-filter": "Required to use the boolean validator." + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, + "branch-alias": { + "dev-master": "5.5-dev" + } + }, + "autoload": { + "psr-4": { + "Dotenv\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Graham Campbell", + "email": "hello@gjcampbell.co.uk", + "homepage": "https://github.com/GrahamCampbell" + }, + { + "name": "Vance Lucas", + "email": "vance@vancelucas.com", + "homepage": "https://github.com/vlucas" + } + ], + "description": "Loads environment variables from `.env` to `getenv()`, `$_ENV` and `$_SERVER` automagically.", + "keywords": [ + "dotenv", + "env", + "environment" + ], + "support": { + "issues": "https://github.com/vlucas/phpdotenv/issues", + "source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/vlucas/phpdotenv", + "type": "tidelift" + } + ], + "time": "2022-10-16T01:01:54+00:00" + }, + { + "name": "voku/portable-ascii", + "version": "2.0.1", + "source": { + "type": "git", + "url": "https://github.com/voku/portable-ascii.git", + "reference": "b56450eed252f6801410d810c8e1727224ae0743" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "shasum": "" + }, + "require": { + "php": ">=7.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~6.0 || ~7.0 || ~9.0" + }, + "suggest": { + "ext-intl": "Use Intl for transliterator_transliterate() support" + }, + "type": "library", + "autoload": { + "psr-4": { + "voku\\": "src/voku/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Lars Moelleken", + "homepage": "http://www.moelleken.org/" + } + ], + "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", + "homepage": "https://github.com/voku/portable-ascii", + "keywords": [ + "ascii", + "clean", + "php" + ], + "support": { + "issues": "https://github.com/voku/portable-ascii/issues", + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + }, + "funding": [ + { + "url": "https://www.paypal.me/moelleken", + "type": "custom" + }, + { + "url": "https://github.com/voku", + "type": "github" + }, + { + "url": "https://opencollective.com/portable-ascii", + "type": "open_collective" + }, + { + "url": "https://www.patreon.com/voku", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/voku/portable-ascii", + "type": "tidelift" + } + ], + "time": "2022-03-08T17:03:00+00:00" + }, + { + "name": "webmozart/assert", + "version": "1.11.0", + "source": { + "type": "git", + "url": "https://github.com/webmozarts/assert.git", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", + "shasum": "" + }, + "require": { + "ext-ctype": "*", + "php": "^7.2 || ^8.0" + }, + "conflict": { + "phpstan/phpstan": "<0.12.20", + "vimeo/psalm": "<4.6.1 || 4.6.2" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.13" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.10-dev" + } + }, + "autoload": { + "psr-4": { + "Webmozart\\Assert\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Bernhard Schussek", + "email": "bschussek@gmail.com" + } + ], + "description": "Assertions to validate method input/output with nice error messages.", + "keywords": [ + "assert", + "check", + "validate" + ], + "support": { + "issues": "https://github.com/webmozarts/assert/issues", + "source": "https://github.com/webmozarts/assert/tree/1.11.0" + }, + "time": "2022-06-03T18:03:27+00:00" + }, + { + "name": "zbateson/mail-mime-parser", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/zbateson/mail-mime-parser.git", + "reference": "d59e0c5eeb1442fca94bcb3b9d3c6be66318a500" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/d59e0c5eeb1442fca94bcb3b9d3c6be66318a500", + "reference": "d59e0c5eeb1442fca94bcb3b9d3c6be66318a500", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.7.0|^2.0", + "php": ">=7.1", + "pimple/pimple": "^3.0", + "zbateson/mb-wrapper": "^1.0.1", + "zbateson/stream-decorators": "^1.0.6" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "*", + "mikey179/vfsstream": "^1.6.0", + "phpstan/phpstan": "*", + "phpunit/phpunit": "<10" + }, + "suggest": { + "ext-iconv": "For best support/performance", + "ext-mbstring": "For best support/performance" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZBateson\\MailMimeParser\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Zaahid Bateson" + }, + { + "name": "Contributors", + "homepage": "https://github.com/zbateson/mail-mime-parser/graphs/contributors" + } + ], + "description": "MIME email message parser", + "homepage": "https://mail-mime-parser.org", + "keywords": [ + "MimeMailParser", + "email", + "mail", + "mailparse", + "mime", + "mimeparse", + "parser", + "php-imap" + ], + "support": { + "docs": "https://mail-mime-parser.org/#usage-guide", + "issues": "https://github.com/zbateson/mail-mime-parser/issues", + "source": "https://github.com/zbateson/mail-mime-parser" + }, + "funding": [ + { + "url": "https://github.com/zbateson", + "type": "github" + } + ], + "time": "2023-01-30T19:04:55+00:00" + }, + { + "name": "zbateson/mb-wrapper", + "version": "1.2.0", + "source": { + "type": "git", + "url": "https://github.com/zbateson/mb-wrapper.git", + "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zbateson/mb-wrapper/zipball/faf35dddfacfc5d4d5f9210143eafd7a7fe74334", + "reference": "faf35dddfacfc5d4d5f9210143eafd7a7fe74334", + "shasum": "" + }, + "require": { + "php": ">=7.1", + "symfony/polyfill-iconv": "^1.9", + "symfony/polyfill-mbstring": "^1.9" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "*", + "phpstan/phpstan": "*", + "phpunit/phpunit": "<=9.0" + }, + "suggest": { + "ext-iconv": "For best support/performance", + "ext-mbstring": "For best support/performance" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZBateson\\MbWrapper\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Zaahid Bateson" + } + ], + "description": "Wrapper for mbstring with fallback to iconv for encoding conversion and string manipulation", + "keywords": [ + "charset", + "encoding", + "http", + "iconv", + "mail", + "mb", + "mb_convert_encoding", + "mbstring", + "mime", + "multibyte", + "string" + ], + "support": { + "issues": "https://github.com/zbateson/mb-wrapper/issues", + "source": "https://github.com/zbateson/mb-wrapper/tree/1.2.0" + }, + "funding": [ + { + "url": "https://github.com/zbateson", + "type": "github" + } + ], + "time": "2023-01-11T23:05:44+00:00" + }, + { + "name": "zbateson/stream-decorators", + "version": "1.1.0", + "source": { + "type": "git", + "url": "https://github.com/zbateson/stream-decorators.git", + "reference": "7466ff45d249c86b96267a83cdae68365ae1787e" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/zbateson/stream-decorators/zipball/7466ff45d249c86b96267a83cdae68365ae1787e", + "reference": "7466ff45d249c86b96267a83cdae68365ae1787e", + "shasum": "" + }, + "require": { + "guzzlehttp/psr7": "^1.9 | ^2.0", + "php": ">=7.1", + "zbateson/mb-wrapper": "^1.0.0" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "*", + "phpstan/phpstan": "*", + "phpunit/phpunit": "<=9.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "ZBateson\\StreamDecorators\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-2-Clause" + ], + "authors": [ + { + "name": "Zaahid Bateson" + } + ], + "description": "PHP psr7 stream decorators for mime message part streams", + "keywords": [ + "base64", + "charset", + "decorators", + "mail", + "mime", + "psr7", + "quoted-printable", + "stream", + "uuencode" + ], + "support": { + "issues": "https://github.com/zbateson/stream-decorators/issues", + "source": "https://github.com/zbateson/stream-decorators/tree/1.1.0" + }, + "funding": [ + { + "url": "https://github.com/zbateson", + "type": "github" + } + ], + "time": "2023-01-11T23:22:44+00:00" + } + ], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": { + "dnj/laravel-user-logger": 20, + "dnj/error-tracker-contracts": 20 + }, + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^8.1" + }, + "platform-dev": [], + "plugin-api-version": "2.3.0" +} From d2541416fb25b4999d490f235562cc1d74e4b4f0 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 5 Feb 2023 23:07:30 +0330 Subject: [PATCH 094/131] fix version --- composer.json | 2 +- composer.lock | 18 +++++++++--------- src/ServiceProvider.php | 3 --- 3 files changed, 10 insertions(+), 13 deletions(-) diff --git a/composer.json b/composer.json index 4183fb6..df8ba13 100644 --- a/composer.json +++ b/composer.json @@ -32,7 +32,7 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.11", "phpunit/phpunit": "9.5.28", - "orchestra/testbench": "7.19.0" + "orchestra/testbench": "7.21.0" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/composer.lock b/composer.lock index da3bfab..83acc18 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "83730c4ec779644cad9c65638fe554e5", + "content-hash": "d06f789a02429b8066b23bb2d2a3262a", "packages": [ { "name": "dnj/error-tracker-contracts", @@ -2553,23 +2553,23 @@ }, { "name": "orchestra/testbench", - "version": "v7.19.0", + "version": "v7.21.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "c413751e85972067e7c48cae68514935321c87f0" + "reference": "3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/c413751e85972067e7c48cae68514935321c87f0", - "reference": "c413751e85972067e7c48cae68514935321c87f0", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6", + "reference": "3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6", "shasum": "" }, "require": { "fakerphp/faker": "^1.21", - "laravel/framework": "^9.45", + "laravel/framework": "^9.50.2", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.19", + "orchestra/testbench-core": "^7.21", "php": "^8.0", "phpunit/phpunit": "^9.5.10", "spatie/laravel-ray": "^1.28", @@ -2606,9 +2606,9 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v7.19.0" + "source": "https://github.com/orchestral/testbench/tree/v7.21.0" }, - "time": "2023-01-10T10:16:26+00:00" + "time": "2023-02-03T02:10:41+00:00" }, { "name": "orchestra/testbench-core", diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index b6a9903..87fb5cf 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -19,7 +19,6 @@ public function register() $this->app->singleton(IAppManager::class, AppManager::class); $this->app->singleton(IDeviceManager::class, DeviceManager::class); $this->app->singleton(ILogManager::class, LogManager::class); - // TODO } public function boot() @@ -31,8 +30,6 @@ public function boot() __DIR__.'/../config/error-tracker.php' => config_path('error-tracker.php'), ], 'config'); } - - // TODO } protected function loadRoutes() From 333edaf5aca18c5c99ddbcda2449ec331b3c4361 Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 6 Feb 2023 16:56:46 +0330 Subject: [PATCH 095/131] update ci --- .github/workflows/ci.yml | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 83e871f..071ddb4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -7,20 +7,23 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: php-actions/composer@v6 - with: - php_version: "8.1" - - uses: php-actions/phpunit@v3 - with: - php_extensions: xdebug - php_version: "8.1" - args: --coverage-clover=coverage/clover-coverage.xml - env: + - uses: actions/checkout@v3 + + - uses: php-actions/composer@v6 + with: + php_version: "8.1" + + - uses: php-actions/phpunit@v3 + with: + php_extensions: bcmath xdebug gd mbstring imagick + php_version: "8.1" + args: --coverage-clover=coverage/clover-coverage.xml + env: XDEBUG_MODE: coverage - - name: Code Coverage Check - uses: themichaelhall/check-code-coverage@v2 - with: + - name: Code Coverage Check + uses: themichaelhall/check-code-coverage@v2 + if: github.event_name == 'pull_request' + with: report: coverage/clover-coverage.xml - required-percentage: 80 + required-percentage: 80 \ No newline at end of file From d8abcec40211acac61bbd3033a315090f7e4abb9 Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 6 Feb 2023 17:04:07 +0330 Subject: [PATCH 096/131] update composer --- composer.json | 12 +-- composer.lock | 197 +++++++++++++++++++++++++------------------------- 2 files changed, 104 insertions(+), 105 deletions(-) diff --git a/composer.json b/composer.json index df8ba13..cd548d6 100644 --- a/composer.json +++ b/composer.json @@ -25,14 +25,14 @@ ] }, "require": { - "php": "^8.1", - "dnj/laravel-user-logger": "@dev", - "dnj/error-tracker-contracts": "@dev" + "php": "^8.1" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.11", - "phpunit/phpunit": "9.5.28", - "orchestra/testbench": "7.21.0" + "phpunit/phpunit": "^9.5", + "friendsofphp/php-cs-fixer": "^3.1", + "orchestra/testbench": "^7.0", + "dnj/laravel-user-logger": "dev-master", + "dnj/error-tracker-contracts": "@dev" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/composer.lock b/composer.lock index 83acc18..5470728 100644 --- a/composer.lock +++ b/composer.lock @@ -4,92 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "d06f789a02429b8066b23bb2d2a3262a", - "packages": [ - { - "name": "dnj/error-tracker-contracts", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/dnj/php-error-tracker-contracts.git", - "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnj/php-error-tracker-contracts/zipball/b2be0241e1d622bef4da7f6b741246f8410c884c", - "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.11" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "dnj\\ErrorTracker\\Contracts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "support": { - "issues": "https://github.com/dnj/php-error-tracker-contracts/issues", - "source": "https://github.com/dnj/php-error-tracker-contracts/tree/master" - }, - "time": "2023-01-28T20:45:11+00:00" - }, - { - "name": "dnj/laravel-user-logger", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/dnj/laravel-user-logger.git", - "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnj/laravel-user-logger/zipball/9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", - "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.11", - "orchestra/testbench": "^7.0", - "phpunit/phpunit": "^9" - }, - "default-branch": true, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "dnj\\UserLogger\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "dnj\\UserLogger\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "support": { - "issues": "https://github.com/dnj/laravel-user-logger/issues", - "source": "https://github.com/dnj/laravel-user-logger/tree/master" - }, - "time": "2023-01-03T10:34:23+00:00" - } - ], + "content-hash": "25b45632791f9f4f1296007bdb0c2d98", + "packages": [], "packages-dev": [ { "name": "brick/math", @@ -439,6 +355,89 @@ }, "time": "2022-10-27T11:44:00+00:00" }, + { + "name": "dnj/error-tracker-contracts", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dnj/php-error-tracker-contracts.git", + "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnj/php-error-tracker-contracts/zipball/b2be0241e1d622bef4da7f6b741246f8410c884c", + "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "dnj\\ErrorTracker\\Contracts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/dnj/php-error-tracker-contracts/issues", + "source": "https://github.com/dnj/php-error-tracker-contracts/tree/master" + }, + "time": "2023-01-28T20:45:11+00:00" + }, + { + "name": "dnj/laravel-user-logger", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dnj/laravel-user-logger.git", + "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnj/laravel-user-logger/zipball/9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", + "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11", + "orchestra/testbench": "^7.0", + "phpunit/phpunit": "^9" + }, + "default-branch": true, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "dnj\\UserLogger\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "dnj\\UserLogger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/dnj/laravel-user-logger/issues", + "source": "https://github.com/dnj/laravel-user-logger/tree/master" + }, + "time": "2023-01-03T10:34:23+00:00" + }, { "name": "doctrine/annotations", "version": "2.0.1", @@ -3202,16 +3201,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.28", + "version": "9.6.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e" + "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/954ca3113a03bf780d22f07bf055d883ee04b65e", - "reference": "954ca3113a03bf780d22f07bf055d883ee04b65e", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", "shasum": "" }, "require": { @@ -3253,7 +3252,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -3284,7 +3283,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.28" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" }, "funding": [ { @@ -3300,7 +3299,7 @@ "type": "tidelift" } ], - "time": "2023-01-14T12:32:24+00:00" + "time": "2023-02-04T13:37:15+00:00" }, { "name": "pimple/pimple", @@ -4970,16 +4969,16 @@ }, { "name": "spatie/laravel-ray", - "version": "1.32.1", + "version": "1.32.2", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ray.git", - "reference": "8ecf893a7af385e72b1f63cbd318fb00e2dca340" + "reference": "0c28a8274ec261a2857b4318b6f934af98024395" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/8ecf893a7af385e72b1f63cbd318fb00e2dca340", - "reference": "8ecf893a7af385e72b1f63cbd318fb00e2dca340", + "url": "https://api.github.com/repos/spatie/laravel-ray/zipball/0c28a8274ec261a2857b4318b6f934af98024395", + "reference": "0c28a8274ec261a2857b4318b6f934af98024395", "shasum": "" }, "require": { @@ -5039,7 +5038,7 @@ ], "support": { "issues": "https://github.com/spatie/laravel-ray/issues", - "source": "https://github.com/spatie/laravel-ray/tree/1.32.1" + "source": "https://github.com/spatie/laravel-ray/tree/1.32.2" }, "funding": [ { @@ -5051,7 +5050,7 @@ "type": "other" } ], - "time": "2023-01-26T13:02:05+00:00" + "time": "2023-02-06T09:46:50+00:00" }, { "name": "spatie/macroable", From f2f17b2d01eaea05169dabfa90214bd28cdf6165 Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 6 Feb 2023 17:10:09 +0330 Subject: [PATCH 097/131] commented config on setup function --- tests/TestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/TestCase.php b/tests/TestCase.php index 0fb2f0a..e711bac 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -13,7 +13,7 @@ class TestCase extends \Orchestra\Testbench\TestCase public function setUp(): void { parent::setUp(); - config()->set('error-tracker.user_model', User::class); + // config()->set('error-tracker.user_model', User::class); } protected function getPackageProviders($app) From 8a211272cadddde730b2797ff51625276ef6e738 Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 6 Feb 2023 17:18:23 +0330 Subject: [PATCH 098/131] revert --- tests/TestCase.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/TestCase.php b/tests/TestCase.php index e711bac..0fb2f0a 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -13,7 +13,7 @@ class TestCase extends \Orchestra\Testbench\TestCase public function setUp(): void { parent::setUp(); - // config()->set('error-tracker.user_model', User::class); + config()->set('error-tracker.user_model', User::class); } protected function getPackageProviders($app) From ccb99295b2f8ddd006f92f49902975e4684da324 Mon Sep 17 00:00:00 2001 From: amirhf Date: Mon, 6 Feb 2023 17:39:06 +0330 Subject: [PATCH 099/131] update package --- composer.json | 6 +- composer.lock | 973 +++++++++++++++++++++++------------------------- phpunit.xml | 47 ++- phpunit.xml.bak | 28 ++ 4 files changed, 525 insertions(+), 529 deletions(-) create mode 100644 phpunit.xml.bak diff --git a/composer.json b/composer.json index cd548d6..a508cef 100644 --- a/composer.json +++ b/composer.json @@ -28,11 +28,11 @@ "php": "^8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5", + "phpunit/phpunit": "10.0.4", "friendsofphp/php-cs-fixer": "^3.1", - "orchestra/testbench": "^7.0", "dnj/laravel-user-logger": "dev-master", - "dnj/error-tracker-contracts": "@dev" + "dnj/error-tracker-contracts": "@dev", + "orchestra/testbench": "8.x-dev" }, "minimum-stability": "dev", "prefer-stable": true, diff --git a/composer.lock b/composer.lock index 5470728..38491a8 100644 --- a/composer.lock +++ b/composer.lock @@ -4,30 +4,31 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "25b45632791f9f4f1296007bdb0c2d98", + "content-hash": "4bde6004ed485147fc8b38b14a7668a1", "packages": [], "packages-dev": [ { "name": "brick/math", - "version": "0.11.0", + "version": "0.10.2", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", + "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", "shasum": "" }, "require": { - "php": "^8.0" + "ext-json": "*", + "php": "^7.4 || ^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "vimeo/psalm": "4.25.0" }, "type": "library", "autoload": { @@ -52,7 +53,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.11.0" + "source": "https://github.com/brick/math/tree/0.10.2" }, "funding": [ { @@ -60,7 +61,7 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2022-08-10T22:54:19+00:00" }, { "name": "composer/pcre", @@ -440,30 +441,30 @@ }, { "name": "doctrine/annotations", - "version": "2.0.1", + "version": "1.14.3", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", - "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", "shasum": "" }, "require": { - "doctrine/lexer": "^2 || ^3", + "doctrine/lexer": "^1 || ^2", "ext-tokenizer": "*", - "php": "^7.2 || ^8.0", + "php": "^7.1 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "^2.0", - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.8.0", + "doctrine/cache": "^1.11 || ^2.0", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "~1.4.10 || ^1.8.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^5.4 || ^6", + "symfony/cache": "^4.4 || ^5.4 || ^6", "vimeo/psalm": "^4.10" }, "suggest": { @@ -510,9 +511,52 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/2.0.1" + "source": "https://github.com/doctrine/annotations/tree/1.14.3" }, - "time": "2023-02-02T22:02:53+00:00" + "time": "2023-02-01T09:20:38+00:00" + }, + { + "name": "doctrine/deprecations", + "version": "v1.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", + "shasum": "" + }, + "require": { + "php": "^7.1|^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpunit/phpunit": "^7.5|^8.5|^9.5", + "psr/log": "^1|^2|^3" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", + "homepage": "https://www.doctrine-project.org/", + "support": { + "issues": "https://github.com/doctrine/deprecations/issues", + "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" + }, + "time": "2022-05-02T15:47:09+00:00" }, { "name": "doctrine/inflector", @@ -605,99 +649,30 @@ ], "time": "2022-10-20T09:10:12+00:00" }, - { - "name": "doctrine/instantiator", - "version": "2.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/instantiator.git", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "doctrine/coding-standard": "^11", - "ext-pdo": "*", - "ext-phar": "*", - "phpbench/phpbench": "^1.2", - "phpstan/phpstan": "^1.9.4", - "phpstan/phpstan-phpunit": "^1.3", - "phpunit/phpunit": "^9.5.27", - "vimeo/psalm": "^5.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Marco Pivetta", - "email": "ocramius@gmail.com", - "homepage": "https://ocramius.github.io/" - } - ], - "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", - "homepage": "https://www.doctrine-project.org/projects/instantiator.html", - "keywords": [ - "constructor", - "instantiate" - ], - "support": { - "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/2.0.0" - }, - "funding": [ - { - "url": "https://www.doctrine-project.org/sponsorship.html", - "type": "custom" - }, - { - "url": "https://www.patreon.com/phpdoctrine", - "type": "patreon" - }, - { - "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", - "type": "tidelift" - } - ], - "time": "2022-12-30T00:23:10+00:00" - }, { "name": "doctrine/lexer", - "version": "3.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", "shasum": "" }, "require": { - "php": "^8.1" + "doctrine/deprecations": "^1.0", + "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", + "doctrine/coding-standard": "^9 || ^10", + "phpstan/phpstan": "^1.3", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "vimeo/psalm": "^4.11 || ^5.0" }, "type": "library", "autoload": { @@ -734,7 +709,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/3.0.0" + "source": "https://github.com/doctrine/lexer/tree/2.1.0" }, "funding": [ { @@ -750,7 +725,7 @@ "type": "tidelift" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2022-12-14T08:49:07+00:00" }, { "name": "dragonmantank/cron-expression", @@ -950,52 +925,51 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.14.3", + "version": "v3.9.5", "source": { "type": "git", - "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", - "reference": "b418036b95b4936a33fe906245d3044395935e73" + "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", + "reference": "4465d70ba776806857a1ac2a6f877e582445ff36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/b418036b95b4936a33fe906245d3044395935e73", - "reference": "b418036b95b4936a33fe906245d3044395935e73", + "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/4465d70ba776806857a1ac2a6f877e582445ff36", + "reference": "4465d70ba776806857a1ac2a6f877e582445ff36", "shasum": "" }, "require": { - "composer/semver": "^3.3", + "composer/semver": "^3.2", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^2", - "doctrine/lexer": "^2 || ^3", + "doctrine/annotations": "^1.13", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "sebastian/diff": "^4.0", + "php-cs-fixer/diff": "^2.0", "symfony/console": "^5.4 || ^6.0", "symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/filesystem": "^5.4 || ^6.0", "symfony/finder": "^5.4 || ^6.0", "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.27", - "symfony/polyfill-php80": "^1.27", - "symfony/polyfill-php81": "^1.27", + "symfony/polyfill-mbstring": "^1.23", + "symfony/polyfill-php80": "^1.25", + "symfony/polyfill-php81": "^1.25", "symfony/process": "^5.4 || ^6.0", "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^2.0", - "mikey179/vfsstream": "^1.6.11", - "php-coveralls/php-coveralls": "^2.5.3", + "keradus/cli-executor": "^1.5", + "mikey179/vfsstream": "^1.6.10", + "php-coveralls/php-coveralls": "^2.5.2", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.16", + "phpspec/prophecy": "^1.15", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.6", - "phpunitgoodpractices/traits": "^1.9.2", - "symfony/phpunit-bridge": "^6.2.3", + "phpunitgoodpractices/polyfill": "^1.5", + "phpunitgoodpractices/traits": "^1.9.1", + "symfony/phpunit-bridge": "^6.0", "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { @@ -1027,8 +1001,8 @@ ], "description": "A tool to automatically fix PHP code style", "support": { - "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", - "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.3" + "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", + "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.9.5" }, "funding": [ { @@ -1036,7 +1010,7 @@ "type": "github" } ], - "time": "2023-01-30T00:24:29+00:00" + "time": "2022-07-22T08:43:51+00:00" }, { "name": "fruitcake/php-cors", @@ -1343,16 +1317,16 @@ }, { "name": "laravel/framework", - "version": "v9.50.2", + "version": "10.x-dev", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "39932773c09658ddea9045958f305e67f9304995" + "reference": "22413d4e16080f3fa1a8708bc969af32641b016a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/39932773c09658ddea9045958f305e67f9304995", - "reference": "39932773c09658ddea9045958f305e67f9304995", + "url": "https://api.github.com/repos/laravel/framework/zipball/22413d4e16080f3fa1a8708bc969af32641b016a", + "reference": "22413d4e16080f3fa1a8708bc969af32641b016a", "shasum": "" }, "require": { @@ -1363,28 +1337,28 @@ "ext-mbstring": "*", "ext-openssl": "*", "fruitcake/php-cors": "^1.2", - "laravel/serializable-closure": "^1.2.2", + "laravel/serializable-closure": "^1.3", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", - "monolog/monolog": "^2.0", + "monolog/monolog": "^3.0", "nesbot/carbon": "^2.62.1", "nunomaduro/termwind": "^1.13", - "php": "^8.0.2", + "php": "^8.1", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^6.0.9", - "symfony/error-handler": "^6.0", - "symfony/finder": "^6.0", - "symfony/http-foundation": "^6.0", - "symfony/http-kernel": "^6.0", - "symfony/mailer": "^6.0", - "symfony/mime": "^6.0", - "symfony/process": "^6.0", - "symfony/routing": "^6.0", - "symfony/uid": "^6.0", - "symfony/var-dumper": "^6.0", + "symfony/console": "^6.2", + "symfony/error-handler": "^6.2", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.2", + "symfony/http-kernel": "^6.2", + "symfony/mailer": "^6.2", + "symfony/mime": "^6.2", + "symfony/process": "^6.2", + "symfony/routing": "^6.2", + "symfony/uid": "^6.2", + "symfony/var-dumper": "^6.2", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" @@ -1433,7 +1407,7 @@ "require-dev": { "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^2.13.3|^3.1.4", + "doctrine/dbal": "^3.5.1", "fakerphp/faker": "^1.21", "guzzlehttp/guzzle": "^7.5", "league/flysystem-aws-s3-v3": "^3.0", @@ -1442,20 +1416,20 @@ "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.16", + "orchestra/testbench-core": "^8.0", "pda/pheanstalk": "^4.0", "phpstan/phpdoc-parser": "^1.15", "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^9.5.8", - "predis/predis": "^1.1.9|^2.0.2", - "symfony/cache": "^6.0", - "symfony/http-client": "^6.0" + "phpunit/phpunit": "^9.6.0 || ^10.0.1", + "predis/predis": "^2.0.2", + "symfony/cache": "^6.2", + "symfony/http-client": "^6.2.4" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", @@ -1475,20 +1449,20 @@ "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", + "predis/predis": "Required to use the predis connector (^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "9.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -1527,7 +1501,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-02T20:52:46+00:00" + "time": "2023-02-05T16:51:29+00:00" }, { "name": "laravel/serializable-closure", @@ -1998,42 +1972,41 @@ }, { "name": "monolog/monolog", - "version": "2.9.0", + "version": "3.3.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb" + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb", - "reference": "e1c0ae1528ce313a450e5e1ad782765c4a8dd3cb", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", + "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", "shasum": "" }, "require": { - "php": ">=7.2", - "psr/log": "^1.0.1 || ^2.0 || ^3.0" + "php": ">=8.1", + "psr/log": "^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" + "psr/log-implementation": "3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^2.4.9 || ^3.0", + "aws/aws-sdk-php": "^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4", + "guzzlehttp/guzzle": "^7.4.5", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpspec/prophecy": "^1.15", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5.14", - "predis/predis": "^1.1 || ^2.0", - "rollbar/rollbar": "^1.3 || ^2 || ^3", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^9.5.26", + "predis/predis": "^1.1 || ^2", "ruflin/elastica": "^7", - "swiftmailer/swiftmailer": "^5.3|^6.0", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -2056,7 +2029,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -2084,7 +2057,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.9.0" + "source": "https://github.com/Seldaek/monolog/tree/3.3.1" }, "funding": [ { @@ -2096,7 +2069,7 @@ "type": "tidelift" } ], - "time": "2023-02-05T13:07:32+00:00" + "time": "2023-02-06T13:46:10+00:00" }, { "name": "myclabs/deep-copy", @@ -2552,34 +2525,35 @@ }, { "name": "orchestra/testbench", - "version": "v7.21.0", + "version": "8.x-dev", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6" + "reference": "6814aa267566e0ecece2cdd74b1bda924bc5079e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6", - "reference": "3ee8d5689cb9d13d8d39785c5e93e4cc18731fc6", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/6814aa267566e0ecece2cdd74b1bda924bc5079e", + "reference": "6814aa267566e0ecece2cdd74b1bda924bc5079e", "shasum": "" }, "require": { "fakerphp/faker": "^1.21", - "laravel/framework": "^9.50.2", + "laravel/framework": "^10.0", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^7.21", - "php": "^8.0", - "phpunit/phpunit": "^9.5.10", - "spatie/laravel-ray": "^1.28", - "symfony/process": "^6.0.9", - "symfony/yaml": "^6.0.9", - "vlucas/phpdotenv": "^5.4.1" + "orchestra/testbench-core": "^8.0", + "php": "^8.1", + "phpunit/phpunit": "^9.6 || ^10.0.1", + "spatie/laravel-ray": "^1.32", + "symfony/process": "^6.2", + "symfony/yaml": "^6.2", + "vlucas/phpdotenv": "^5.5.0" }, + "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "8.0-dev" } }, "notification-url": "https://packagist.org/downloads/", @@ -2605,59 +2579,60 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v7.21.0" + "source": "https://github.com/orchestral/testbench/tree/8.x" }, - "time": "2023-02-03T02:10:41+00:00" + "time": "2023-02-06T09:46:42+00:00" }, { "name": "orchestra/testbench-core", - "version": "v7.21.0", + "version": "8.x-dev", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "07d48ce0fd781626e809e1a7591b75a89e6a2911" + "reference": "bd033dd176ec1989e836ba5a2b6daf6873e6bb40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/07d48ce0fd781626e809e1a7591b75a89e6a2911", - "reference": "07d48ce0fd781626e809e1a7591b75a89e6a2911", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/bd033dd176ec1989e836ba5a2b6daf6873e6bb40", + "reference": "bd033dd176ec1989e836ba5a2b6daf6873e6bb40", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "fakerphp/faker": "^1.21", - "laravel/framework": "^9.50.2", + "laravel/framework": "^10.0", "laravel/pint": "^1.4", "mockery/mockery": "^1.5.1", - "orchestra/canvas": "^7.0", + "orchestra/canvas": "^8.0", "phpstan/phpstan": "^1.9.14", - "phpunit/phpunit": "^9.5.10", - "spatie/laravel-ray": "^1.28", - "symfony/process": "^6.0.9", - "symfony/yaml": "^6.0.9", - "vlucas/phpdotenv": "^5.4.1" + "phpunit/phpunit": "^9.6 || ^10.0.1", + "spatie/laravel-ray": "^1.32", + "symfony/process": "^6.2", + "symfony/yaml": "^6.2", + "vlucas/phpdotenv": "^5.5.0" }, "suggest": { - "brianium/paratest": "Allow using parallel tresting (^6.4).", + "brianium/paratest": "Allow using parallel tresting (^6.4 || ^7.0).", "fakerphp/faker": "Allow using Faker for testing (^1.21).", - "laravel/framework": "Required for testing (^9.50.2).", + "laravel/framework": "Required for testing (^10.0).", "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.2).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^7.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^7.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^9.5.10).", - "symfony/yaml": "Required for CLI Commander (^6.0.9).", - "vlucas/phpdotenv": "Required for CLI Commander (^5.4.1)." + "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.4 || ^7.0).", + "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^8.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^8.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^9.5.27 || ^10.0).", + "symfony/yaml": "Required for CLI Commander (^6.2).", + "vlucas/phpdotenv": "Required for CLI Commander (^5.5.0)." }, + "default-branch": true, "bin": [ "testbench" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "7.0-dev" + "dev-master": "9.0-dev" } }, "autoload": { @@ -2693,7 +2668,7 @@ "issues": "https://github.com/orchestral/testbench/issues", "source": "https://github.com/orchestral/testbench-core" }, - "time": "2023-02-03T02:00:17+00:00" + "time": "2023-02-06T13:38:39+00:00" }, { "name": "phar-io/manifest", @@ -2806,6 +2781,59 @@ }, "time": "2022-02-21T01:04:05+00:00" }, + { + "name": "php-cs-fixer/diff", + "version": "v2.0.2", + "source": { + "type": "git", + "url": "https://github.com/PHP-CS-Fixer/diff.git", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", + "shasum": "" + }, + "require": { + "php": "^5.6 || ^7.0 || ^8.0" + }, + "require-dev": { + "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", + "symfony/process": "^3.3" + }, + "type": "library", + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + }, + { + "name": "Kore Nordmann", + "email": "mail@kore-nordmann.de" + } + ], + "description": "sebastian/diff v3 backport support for PHP 5.6+", + "homepage": "https://github.com/PHP-CS-Fixer", + "keywords": [ + "diff" + ], + "support": { + "issues": "https://github.com/PHP-CS-Fixer/diff/issues", + "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" + }, + "abandoned": true, + "time": "2020-10-14T08:32:19+00:00" + }, { "name": "phpoption/phpoption", "version": "1.9.0", @@ -2883,16 +2911,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "9.2.24", + "version": "10.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed" + "reference": "bf4fbc9c13af7da12b3ea807574fb460f255daba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2cf940ebc6355a9d430462811b5aaa308b174bed", - "reference": "2cf940ebc6355a9d430462811b5aaa308b174bed", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bf4fbc9c13af7da12b3ea807574fb460f255daba", + "reference": "bf4fbc9c13af7da12b3ea807574fb460f255daba", "shasum": "" }, "require": { @@ -2900,18 +2928,18 @@ "ext-libxml": "*", "ext-xmlwriter": "*", "nikic/php-parser": "^4.14", - "php": ">=7.3", - "phpunit/php-file-iterator": "^3.0.3", - "phpunit/php-text-template": "^2.0.2", - "sebastian/code-unit-reverse-lookup": "^2.0.2", - "sebastian/complexity": "^2.0", - "sebastian/environment": "^5.1.2", - "sebastian/lines-of-code": "^1.0.3", - "sebastian/version": "^3.0.1", + "php": ">=8.1", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-text-template": "^3.0", + "sebastian/code-unit-reverse-lookup": "^3.0", + "sebastian/complexity": "^3.0", + "sebastian/environment": "^6.0", + "sebastian/lines-of-code": "^2.0", + "sebastian/version": "^4.0", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcov": "*", @@ -2920,7 +2948,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "10.0-dev" } }, "autoload": { @@ -2948,7 +2976,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.24" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.0.0" }, "funding": [ { @@ -2956,32 +2984,32 @@ "type": "github" } ], - "time": "2023-01-26T08:26:55+00:00" + "time": "2023-02-03T07:14:34+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.6", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" + "reference": "7d66d4e816d34e90acec9db9d8d94b5cfbfe926f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", - "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/7d66d4e816d34e90acec9db9d8d94b5cfbfe926f", + "reference": "7d66d4e816d34e90acec9db9d8d94b5cfbfe926f", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3008,7 +3036,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.0" }, "funding": [ { @@ -3016,28 +3044,28 @@ "type": "github" } ], - "time": "2021-12-02T12:48:52+00:00" + "time": "2023-02-03T06:55:11+00:00" }, { "name": "phpunit/php-invoker", - "version": "3.1.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", - "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-pcntl": "*" @@ -3045,7 +3073,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.1-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -3071,7 +3099,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" }, "funding": [ { @@ -3079,32 +3107,32 @@ "type": "github" } ], - "time": "2020-09-28T05:58:55+00:00" + "time": "2023-02-03T06:56:09+00:00" }, { "name": "phpunit/php-text-template", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", - "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -3130,7 +3158,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" }, "funding": [ { @@ -3138,32 +3166,32 @@ "type": "github" } ], - "time": "2020-10-26T05:33:50+00:00" + "time": "2023-02-03T06:56:46+00:00" }, { "name": "phpunit/php-timer", - "version": "5.0.3", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", - "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -3189,7 +3217,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" }, "funding": [ { @@ -3197,24 +3225,23 @@ "type": "github" } ], - "time": "2020-10-26T13:16:10+00:00" + "time": "2023-02-03T06:57:52+00:00" }, { "name": "phpunit/phpunit", - "version": "9.6.3", + "version": "10.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555" + "reference": "6be2d07cce2c7f812db007825a57da3b08972eaf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e7b1615e3e887d6c719121c6d4a44b0ab9645555", - "reference": "e7b1615e3e887d6c719121c6d4a44b0ab9645555", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6be2d07cce2c7f812db007825a57da3b08972eaf", + "reference": "6be2d07cce2c7f812db007825a57da3b08972eaf", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -3224,27 +3251,26 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.13", - "phpunit/php-file-iterator": "^3.0.5", - "phpunit/php-invoker": "^3.1.1", - "phpunit/php-text-template": "^2.0.3", - "phpunit/php-timer": "^5.0.2", - "sebastian/cli-parser": "^1.0.1", - "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.8", - "sebastian/diff": "^4.0.3", - "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.5", - "sebastian/global-state": "^5.0.1", - "sebastian/object-enumerator": "^4.0.3", - "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^3.2", - "sebastian/version": "^3.0.2" + "php": ">=8.1", + "phpunit/php-code-coverage": "^10.0", + "phpunit/php-file-iterator": "^4.0", + "phpunit/php-invoker": "^4.0", + "phpunit/php-text-template": "^3.0", + "phpunit/php-timer": "^6.0", + "sebastian/cli-parser": "^2.0", + "sebastian/code-unit": "^2.0", + "sebastian/comparator": "^5.0", + "sebastian/diff": "^5.0", + "sebastian/environment": "^6.0", + "sebastian/exporter": "^5.0", + "sebastian/global-state": "^6.0", + "sebastian/object-enumerator": "^5.0", + "sebastian/recursion-context": "^5.0", + "sebastian/type": "^4.0", + "sebastian/version": "^4.0" }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "*" }, "bin": [ "phpunit" @@ -3252,7 +3278,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.6-dev" + "dev-main": "10.0-dev" } }, "autoload": { @@ -3283,7 +3309,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/10.0.4" }, "funding": [ { @@ -3299,7 +3325,7 @@ "type": "tidelift" } ], - "time": "2023-02-04T13:37:15+00:00" + "time": "2023-02-05T16:23:38+00:00" }, { "name": "pimple/pimple", @@ -3850,20 +3876,20 @@ }, { "name": "ramsey/uuid", - "version": "4.x-dev", + "version": "4.7.3", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a" + "reference": "433b2014e3979047db08a17a205f410ba3869cf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/25c4faac19549ebfcd3a6a73732dddeb188eaf5a", - "reference": "25c4faac19549ebfcd3a6a73732dddeb188eaf5a", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/433b2014e3979047db08a17a205f410ba3869cf2", + "reference": "433b2014e3979047db08a17a205f410ba3869cf2", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -3900,7 +3926,6 @@ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, - "default-branch": true, "type": "library", "extra": { "captainhook": { @@ -3927,7 +3952,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.x" + "source": "https://github.com/ramsey/uuid/tree/4.7.3" }, "funding": [ { @@ -3939,32 +3964,32 @@ "type": "tidelift" } ], - "time": "2023-01-28T17:00:47+00:00" + "time": "2023-01-12T18:13:24+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", + "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -3987,7 +4012,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" }, "funding": [ { @@ -3995,32 +4020,32 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2023-02-03T06:58:15+00:00" }, { "name": "sebastian/code-unit", - "version": "1.0.8", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", - "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", + "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -4043,7 +4068,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" + "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" }, "funding": [ { @@ -4051,32 +4076,32 @@ "type": "github" } ], - "time": "2020-10-26T13:08:54+00:00" + "time": "2023-02-03T06:58:43+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "2.0.3", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", - "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -4098,7 +4123,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" }, "funding": [ { @@ -4106,34 +4131,36 @@ "type": "github" } ], - "time": "2020-09-28T05:30:19+00:00" + "time": "2023-02-03T06:59:15+00:00" }, { "name": "sebastian/comparator", - "version": "4.0.8", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a" + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", - "reference": "fa0f136dd2334583309d32b62544682ee972b51a", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/72f01e6586e0caf6af81297897bd112eb7e9627c", + "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/diff": "^4.0", - "sebastian/exporter": "^4.0" + "ext-dom": "*", + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/diff": "^5.0", + "sebastian/exporter": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4172,7 +4199,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" + "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.0" }, "funding": [ { @@ -4180,33 +4207,33 @@ "type": "github" } ], - "time": "2022-09-14T12:41:17+00:00" + "time": "2023-02-03T07:07:16+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", - "php": ">=7.3" + "nikic/php-parser": "^4.10", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -4229,7 +4256,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" }, "funding": [ { @@ -4237,33 +4264,33 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-02-03T06:59:47+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "70dd1b20bc198da394ad542e988381b44e64e39f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/70dd1b20bc198da394ad542e988381b44e64e39f", + "reference": "70dd1b20bc198da394ad542e988381b44e64e39f", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3", + "phpunit/phpunit": "^10.0", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4295,7 +4322,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/5.0.0" }, "funding": [ { @@ -4303,27 +4330,27 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-02-03T07:00:31+00:00" }, { "name": "sebastian/environment", - "version": "5.1.5", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" + "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", - "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b6f3694c6386c7959915a0037652e0c40f6f69cc", + "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "suggest": { "ext-posix": "*" @@ -4331,7 +4358,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.1-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -4350,7 +4377,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "http://www.github.com/sebastianbergmann/environment", + "homepage": "https://github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -4358,7 +4385,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" + "source": "https://github.com/sebastianbergmann/environment/tree/6.0.0" }, "funding": [ { @@ -4366,34 +4393,34 @@ "type": "github" } ], - "time": "2023-02-03T06:03:51+00:00" + "time": "2023-02-03T07:03:04+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/recursion-context": "^4.0" + "ext-mbstring": "*", + "php": ">=8.1", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "ext-mbstring": "*", - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4435,7 +4462,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0" }, "funding": [ { @@ -4443,38 +4470,35 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2023-02-03T07:06:49+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.5", + "version": "6.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" + "reference": "aab257c712de87b90194febd52e4d184551c2d44" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", - "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44", + "reference": "aab257c712de87b90194febd52e4d184551c2d44", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^9.3" - }, - "suggest": { - "ext-uopz": "*" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "5.0-dev" + "dev-main": "6.0-dev" } }, "autoload": { @@ -4499,7 +4523,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" + "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0" }, "funding": [ { @@ -4507,33 +4531,33 @@ "type": "github" } ], - "time": "2022-02-14T08:28:10+00:00" + "time": "2023-02-03T07:07:38+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", + "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", - "php": ">=7.3" + "nikic/php-parser": "^4.10", + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-main": "2.0-dev" } }, "autoload": { @@ -4556,7 +4580,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" }, "funding": [ { @@ -4564,34 +4588,34 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-02-03T07:08:02+00:00" }, { "name": "sebastian/object-enumerator", - "version": "4.0.4", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", - "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", + "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", "shasum": "" }, "require": { - "php": ">=7.3", - "sebastian/object-reflector": "^2.0", - "sebastian/recursion-context": "^4.0" + "php": ">=8.1", + "sebastian/object-reflector": "^3.0", + "sebastian/recursion-context": "^5.0" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4613,7 +4637,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" }, "funding": [ { @@ -4621,32 +4645,32 @@ "type": "github" } ], - "time": "2020-10-26T13:12:34+00:00" + "time": "2023-02-03T07:08:32+00:00" }, { "name": "sebastian/object-reflector", - "version": "2.0.4", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", - "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", + "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -4668,7 +4692,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" }, "funding": [ { @@ -4676,32 +4700,32 @@ "type": "github" } ], - "time": "2020-10-26T13:14:26+00:00" + "time": "2023-02-03T07:06:18+00:00" }, { "name": "sebastian/recursion-context", - "version": "4.0.5", + "version": "5.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" + "reference": "05909fb5bc7df4c52992396d0116aed689f93712" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", - "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", + "reference": "05909fb5bc7df4c52992396d0116aed689f93712", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.0-dev" + "dev-main": "5.0-dev" } }, "autoload": { @@ -4731,62 +4755,7 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" - }, - "funding": [ - { - "url": "https://github.com/sebastianbergmann", - "type": "github" - } - ], - "time": "2023-02-03T06:07:39+00:00" - }, - { - "name": "sebastian/resource-operations", - "version": "3.0.3", - "source": { - "type": "git", - "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "shasum": "" - }, - "require": { - "php": ">=7.3" - }, - "require-dev": { - "phpunit/phpunit": "^9.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "3.0-dev" - } - }, - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - } - ], - "description": "Provides a list of PHP built-in functions that operate on resources", - "homepage": "https://www.github.com/sebastianbergmann/resource-operations", - "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" }, "funding": [ { @@ -4794,32 +4763,32 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2023-02-03T07:05:40+00:00" }, { "name": "sebastian/type", - "version": "3.2.1", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", - "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", + "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "require-dev": { - "phpunit/phpunit": "^9.5" + "phpunit/phpunit": "^10.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -4842,7 +4811,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" + "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" }, "funding": [ { @@ -4850,29 +4819,29 @@ "type": "github" } ], - "time": "2023-02-03T06:13:03+00:00" + "time": "2023-02-03T07:10:45+00:00" }, { "name": "sebastian/version", - "version": "3.0.2", + "version": "4.0.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "c6c1022351a901512170118436c764e473f6de8c" + "reference": "5facf5a20311ac44f79221274cdeb6c569ca11dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", - "reference": "c6c1022351a901512170118436c764e473f6de8c", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/5facf5a20311ac44f79221274cdeb6c569ca11dd", + "reference": "5facf5a20311ac44f79221274cdeb6c569ca11dd", "shasum": "" }, "require": { - "php": ">=7.3" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "4.0-dev" } }, "autoload": { @@ -4895,7 +4864,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" + "source": "https://github.com/sebastianbergmann/version/tree/4.0.0" }, "funding": [ { @@ -4903,7 +4872,7 @@ "type": "github" } ], - "time": "2020-09-28T06:39:44+00:00" + "time": "2023-02-03T07:11:37+00:00" }, { "name": "spatie/backtrace", diff --git a/phpunit.xml b/phpunit.xml index 2fa6b34..ae58b22 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -2,27 +2,26 @@ - - - ./tests/Feature - - - - - ./src - - - - - - - - - - - - - - \ No newline at end of file + colors="true"> + + + ./tests/Feature + + + + + ./src + + + + + + + + + + + + + + diff --git a/phpunit.xml.bak b/phpunit.xml.bak new file mode 100644 index 0000000..2fa6b34 --- /dev/null +++ b/phpunit.xml.bak @@ -0,0 +1,28 @@ + + + + + ./tests/Feature + + + + + ./src + + + + + + + + + + + + + + \ No newline at end of file From fe5fb6b4a296950942dcc38d2ca6521d67dd6322 Mon Sep 17 00:00:00 2001 From: amirhf Date: Wed, 8 Feb 2023 15:08:38 +0330 Subject: [PATCH 100/131] remove resources and make a single resource for the state --- src/Http/Controllers/AppController.php | 16 +++++++--------- src/Http/Controllers/DeviceController.php | 16 +++++++--------- src/Http/Controllers/LogController.php | 19 ++++++++----------- src/Http/Resources/App/AppResource.php | 9 +++++++++ src/Http/Resources/App/SearchResource.php | 13 ------------- src/Http/Resources/App/StoreResource.php | 13 ------------- src/Http/Resources/App/UpdateResource.php | 13 ------------- src/Http/Resources/Device/DeviceResource.php | 9 +++++++++ src/Http/Resources/Device/SearchResource.php | 13 ------------- src/Http/Resources/Device/StoreResource.php | 13 ------------- src/Http/Resources/Device/UpdateResource.php | 13 ------------- src/Http/Resources/Log/LogResource.php | 9 +++++++++ src/Http/Resources/Log/MarkAsReadResource.php | 13 ------------- .../Resources/Log/MarkAsUnReadResource.php | 13 ------------- src/Http/Resources/Log/SearchResource.php | 13 ------------- src/Http/Resources/Log/StoreResource.php | 13 ------------- 16 files changed, 49 insertions(+), 159 deletions(-) create mode 100644 src/Http/Resources/App/AppResource.php delete mode 100644 src/Http/Resources/App/SearchResource.php delete mode 100644 src/Http/Resources/App/StoreResource.php delete mode 100644 src/Http/Resources/App/UpdateResource.php create mode 100644 src/Http/Resources/Device/DeviceResource.php delete mode 100644 src/Http/Resources/Device/SearchResource.php delete mode 100644 src/Http/Resources/Device/StoreResource.php delete mode 100644 src/Http/Resources/Device/UpdateResource.php create mode 100644 src/Http/Resources/Log/LogResource.php delete mode 100644 src/Http/Resources/Log/MarkAsReadResource.php delete mode 100644 src/Http/Resources/Log/MarkAsUnReadResource.php delete mode 100644 src/Http/Resources/Log/SearchResource.php delete mode 100644 src/Http/Resources/Log/StoreResource.php diff --git a/src/Http/Controllers/AppController.php b/src/Http/Controllers/AppController.php index fbf5271..071e978 100644 --- a/src/Http/Controllers/AppController.php +++ b/src/Http/Controllers/AppController.php @@ -6,9 +6,7 @@ use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\SearchRequest; use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\StoreRequest; use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\UpdateRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\App\SearchResource; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\App\StoreResource; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\App\UpdateResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\App\AppResource; class AppController extends Controller { @@ -16,7 +14,7 @@ public function __construct(protected IAppManager $appManager) { } - public function search(SearchRequest $searchRequest): SearchResource + public function search(SearchRequest $searchRequest): AppResource { $search = $this->appManager->search($searchRequest->only( [ @@ -26,10 +24,10 @@ public function search(SearchRequest $searchRequest): SearchResource ] )); - return new SearchResource($search); + return new AppResource($search); } - public function store(StoreRequest $storeRequest): StoreResource + public function store(StoreRequest $storeRequest): AppResource { $store = $this->appManager->store( $storeRequest->input('title'), @@ -38,14 +36,14 @@ public function store(StoreRequest $storeRequest): StoreResource $storeRequest->input('userActivityLog'), ); - return StoreResource::make($store); + return AppResource::make($store); } - public function update(int $id, UpdateRequest $updateRequest): UpdateResource + public function update(int $id, UpdateRequest $updateRequest): AppResource { $update = $this->appManager->update($id, $updateRequest->validated(), true); - return UpdateResource::make($update); + return AppResource::make($update); } public function destroy(int $id): void diff --git a/src/Http/Controllers/DeviceController.php b/src/Http/Controllers/DeviceController.php index 3cd9e86..632855f 100644 --- a/src/Http/Controllers/DeviceController.php +++ b/src/Http/Controllers/DeviceController.php @@ -6,9 +6,7 @@ use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\SearchRequest; use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\StoreRequest; use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\UpdateRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Device\SearchResource; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Device\StoreResource; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Device\UpdateResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Device\DeviceResource; class DeviceController extends Controller { @@ -16,7 +14,7 @@ public function __construct(protected IDeviceManager $deviceManager) { } - public function search(SearchRequest $searchRequest): SearchResource + public function search(SearchRequest $searchRequest): DeviceResource { $search = $this->deviceManager->search($searchRequest->only( [ @@ -26,10 +24,10 @@ public function search(SearchRequest $searchRequest): SearchResource ] )); - return new SearchResource($search); + return new DeviceResource($search); } - public function store(StoreRequest $storeRequest): StoreResource + public function store(StoreRequest $storeRequest): DeviceResource { $store = $this->deviceManager->store( $storeRequest->input('title'), @@ -37,14 +35,14 @@ public function store(StoreRequest $storeRequest): StoreResource $storeRequest->input('owner'), ); - return StoreResource::make($store); + return DeviceResource::make($store); } - public function update(int $id, UpdateRequest $updateRequest): UpdateResource + public function update(int $id, UpdateRequest $updateRequest): DeviceResource { $update = $this->deviceManager->update($id, $updateRequest->validated(), false); - return UpdateResource::make($update); + return DeviceResource::make($update); } public function destroy(int $id) diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index 53886d4..2a2554a 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -8,10 +8,7 @@ use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\MarkAsReadRequest; use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\SearchRequest; use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\StoreRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\MarkAsReadResource; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\MarkAsUnReadResource; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\SearchResource; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\StoreResource; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\LogResource; use dnj\ErrorTracker\Laravel\Server\Models\Log; class LogController extends Controller @@ -33,10 +30,10 @@ public function search(SearchRequest $searchRequest) ] )); - return new SearchResource($search); + return new LogResource($search); } - public function store(StoreRequest $storeRequest): StoreResource + public function store(StoreRequest $storeRequest): LogResource { $levelValue = $this->getEnumValue($storeRequest); $log = $this->logManager->store( @@ -48,24 +45,24 @@ public function store(StoreRequest $storeRequest): StoreResource $storeRequest->input('read'), ); - return StoreResource::make($log); + return LogResource::make($log); } - public function markAsRead(Log $log, MarkAsReadRequest $markAsReadRequest): MarkAsReadResource + public function markAsRead(Log $log, MarkAsReadRequest $markAsReadRequest): LogResource { $markAsRead = $this->logManager->markAsRead( $log, $markAsReadRequest->get('userId'), Carbon::make($markAsReadRequest->get('readAt'))); - return MarkAsReadResource::make($markAsRead); + return LogResource::make($markAsRead); } - public function markAsUnRead(Log $log): MarkAsUnReadResource + public function markAsUnRead(Log $log): LogResource { $markAsUnread = $this->logManager->markAsUnread($log); - return MarkAsUnReadResource::make($markAsUnread); + return LogResource::make($markAsUnread); } public function destroy(int $id) diff --git a/src/Http/Resources/App/AppResource.php b/src/Http/Resources/App/AppResource.php new file mode 100644 index 0000000..2a27709 --- /dev/null +++ b/src/Http/Resources/App/AppResource.php @@ -0,0 +1,9 @@ + Date: Wed, 8 Feb 2023 15:18:27 +0330 Subject: [PATCH 101/131] remove userActivityLog from request validation --- src/Http/Requests/App/StoreRequest.php | 1 - src/Http/Requests/App/UpdateRequest.php | 1 - src/Http/Requests/Device/StoreRequest.php | 1 - src/Http/Requests/Device/UpdateRequest.php | 1 - 4 files changed, 4 deletions(-) diff --git a/src/Http/Requests/App/StoreRequest.php b/src/Http/Requests/App/StoreRequest.php index 78a9068..578a51c 100644 --- a/src/Http/Requests/App/StoreRequest.php +++ b/src/Http/Requests/App/StoreRequest.php @@ -15,7 +15,6 @@ public function rules(): array 'title' => ['required'], 'extra' => ['nullable', 'array'], 'owner' => ['nullable', 'integer'], - 'userActivityLog' => ['nullable', 'boolean'], ]; } } diff --git a/src/Http/Requests/App/UpdateRequest.php b/src/Http/Requests/App/UpdateRequest.php index 9d9103b..a769970 100644 --- a/src/Http/Requests/App/UpdateRequest.php +++ b/src/Http/Requests/App/UpdateRequest.php @@ -15,7 +15,6 @@ public function rules(): array 'title' => ['string'], 'extra' => ['array'], 'owner' => ['integer'], - 'userActivityLog' => ['nullable', 'boolean'], ]; } } diff --git a/src/Http/Requests/Device/StoreRequest.php b/src/Http/Requests/Device/StoreRequest.php index 785d1ce..f365d0b 100644 --- a/src/Http/Requests/Device/StoreRequest.php +++ b/src/Http/Requests/Device/StoreRequest.php @@ -12,7 +12,6 @@ public function rules(): array 'title' => ['string', 'required'], 'extra' => ['array', 'nullable'], 'owner' => ['integer', 'nullable'], - 'user_activity_log' => 'nullable|boolean', ]; } } diff --git a/src/Http/Requests/Device/UpdateRequest.php b/src/Http/Requests/Device/UpdateRequest.php index 8975ad6..7a54edd 100644 --- a/src/Http/Requests/Device/UpdateRequest.php +++ b/src/Http/Requests/Device/UpdateRequest.php @@ -12,7 +12,6 @@ public function rules(): array 'title' => ['string', 'required'], 'extra' => ['array', 'nullable'], 'owner' => ['integer', 'nullable'], - 'user_activity_log' => 'nullable|boolean', ]; } } From 5a14ace4f2f181409034a2d0e29d4c41c3d7f806 Mon Sep 17 00:00:00 2001 From: amirhf Date: Wed, 8 Feb 2023 15:26:42 +0330 Subject: [PATCH 102/131] I used the user activity report in the controllers --- src/Http/Controllers/AppController.php | 6 +++--- src/Http/Controllers/DeviceController.php | 5 +++-- src/Http/Controllers/LogController.php | 8 +++++--- src/Managers/AppManager.php | 2 +- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/Http/Controllers/AppController.php b/src/Http/Controllers/AppController.php index 071e978..f4ffa84 100644 --- a/src/Http/Controllers/AppController.php +++ b/src/Http/Controllers/AppController.php @@ -33,7 +33,7 @@ public function store(StoreRequest $storeRequest): AppResource $storeRequest->input('title'), $storeRequest->input('extra'), $storeRequest->input('owner'), - $storeRequest->input('userActivityLog'), + userActivityLog: true ); return AppResource::make($store); @@ -41,13 +41,13 @@ public function store(StoreRequest $storeRequest): AppResource public function update(int $id, UpdateRequest $updateRequest): AppResource { - $update = $this->appManager->update($id, $updateRequest->validated(), true); + $update = $this->appManager->update($id, $updateRequest->validated(), userActivityLog: true); return AppResource::make($update); } public function destroy(int $id): void { - $this->appManager->destroy($id); + $this->appManager->destroy($id, userActivityLog: true); } } diff --git a/src/Http/Controllers/DeviceController.php b/src/Http/Controllers/DeviceController.php index 632855f..ae0d501 100644 --- a/src/Http/Controllers/DeviceController.php +++ b/src/Http/Controllers/DeviceController.php @@ -33,6 +33,7 @@ public function store(StoreRequest $storeRequest): DeviceResource $storeRequest->input('title'), $storeRequest->input('extra'), $storeRequest->input('owner'), + userActivityLog: true, ); return DeviceResource::make($store); @@ -40,13 +41,13 @@ public function store(StoreRequest $storeRequest): DeviceResource public function update(int $id, UpdateRequest $updateRequest): DeviceResource { - $update = $this->deviceManager->update($id, $updateRequest->validated(), false); + $update = $this->deviceManager->update($id, $updateRequest->validated(), userActivityLog: true); return DeviceResource::make($update); } public function destroy(int $id) { - $this->deviceManager->destroy($id); + $this->deviceManager->destroy($id, userActivityLog: true); } } diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index 2a2554a..82a50ec 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -43,6 +43,7 @@ public function store(StoreRequest $storeRequest): LogResource $storeRequest->input('message'), $storeRequest->input('data'), $storeRequest->input('read'), + userActivityLog: true ); return LogResource::make($log); @@ -53,21 +54,22 @@ public function markAsRead(Log $log, MarkAsReadRequest $markAsReadRequest): LogR $markAsRead = $this->logManager->markAsRead( $log, $markAsReadRequest->get('userId'), - Carbon::make($markAsReadRequest->get('readAt'))); + Carbon::make($markAsReadRequest->get('readAt')), + userActivityLog: true); return LogResource::make($markAsRead); } public function markAsUnRead(Log $log): LogResource { - $markAsUnread = $this->logManager->markAsUnread($log); + $markAsUnread = $this->logManager->markAsUnread($log, userActivityLog: true); return LogResource::make($markAsUnread); } public function destroy(int $id) { - $this->logManager->destroy($id); + $this->logManager->destroy($id, userActivityLog: true); } public function getEnumValue(StoreRequest $storeRequest): ?LogLevel diff --git a/src/Managers/AppManager.php b/src/Managers/AppManager.php index 688214a..9c3e6a9 100644 --- a/src/Managers/AppManager.php +++ b/src/Managers/AppManager.php @@ -20,7 +20,7 @@ public function store(string $title, ?array $extra = null, ?int $owner = null, b 'title' => $title, 'extra' => $extra, 'owner' => $owner, - 'userActivityLog' => $userActivityLog, + 'userActivityLog' => true, ] ); From 01c9785131e185ddbd1a8730d61ae881dd1ebf12 Mon Sep 17 00:00:00 2001 From: amirhf Date: Wed, 8 Feb 2023 16:19:34 +0330 Subject: [PATCH 103/131] remove phpunit backup --- phpunit.xml.bak | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 phpunit.xml.bak diff --git a/phpunit.xml.bak b/phpunit.xml.bak deleted file mode 100644 index 2fa6b34..0000000 --- a/phpunit.xml.bak +++ /dev/null @@ -1,28 +0,0 @@ - - - - - ./tests/Feature - - - - - ./src - - - - - - - - - - - - - - \ No newline at end of file From 0d598b244d308714472c77cb0a8709889116db96 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 00:58:10 +0330 Subject: [PATCH 104/131] use api resource --- routes/api.php | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/routes/api.php b/routes/api.php index e1095b0..da3ae44 100644 --- a/routes/api.php +++ b/routes/api.php @@ -7,25 +7,14 @@ use Illuminate\Support\Facades\Route; Route::middleware(['api', SubstituteBindings::class])->group(function () { - Route::group(['prefix' => 'app', 'as' => 'app.'], function () { - Route::get('/search', [AppController::class, 'search'])->name('search'); - Route::post('/store', [AppController::class, 'store'])->name('store'); - Route::put('/update/{id}', [AppController::class, 'update'])->name('update'); - Route::delete('/destroy/{id}', [AppController::class, 'destroy'])->name('destroy'); - }); - - Route::group(['prefix' => 'device', 'as' => 'device.'], function () { - Route::get('/search', [DeviceController::class, 'search'])->name('search'); - Route::post('/store', [DeviceController::class, 'store'])->name('store'); - Route::put('/update/{id}', [DeviceController::class, 'update'])->name('update'); - Route::delete('/destroy/{id}', [DeviceController::class, 'destroy'])->name('destroy'); - }); + Route::apiResources([ + 'apps' => AppController::class, + 'devices' => DeviceController::class, + 'logs' => LogController::class, + ]); - Route::group(['prefix' => 'log', 'as' => 'log.'], function () { - Route::get('/search', [LogController::class, 'search'])->name('search'); - Route::post('/store', [LogController::class, 'store'])->name('store'); + Route::group(['prefix' => 'logs', 'as' => 'logs.'], function () { Route::put('/markAsRead/{log}', [LogController::class, 'markAsRead'])->name('mark_as_read'); Route::put('/markAsUnRead/{log}', [LogController::class, 'markAsUnRead'])->name('mark_as_unread'); - Route::delete('/destroy/{id}', [LogController::class, 'destroy'])->name('destroy'); }); -}); +}); \ No newline at end of file From ba070488bf2b4597996814a552e4ce9b842e4f0d Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 00:58:42 +0330 Subject: [PATCH 105/131] remove: database filterable --- .../Abstract/FiltersAbstract.php | 23 --------------- .../DatabaseFilter/Contract/App/Owner.php | 13 --------- .../DatabaseFilter/Contract/App/Title.php | 13 --------- .../DatabaseFilter/Contract/App/User.php | 13 --------- .../DatabaseFilter/Contract/Device/Owner.php | 13 --------- .../DatabaseFilter/Contract/Device/Title.php | 13 --------- .../DatabaseFilter/Contract/Device/User.php | 13 --------- .../DatabaseFilter/Contract/Log/Apps.php | 13 --------- .../DatabaseFilter/Contract/Log/Devices.php | 13 --------- .../DatabaseFilter/Contract/Log/Message.php | 13 --------- .../DatabaseFilter/Contract/Log/Unread.php | 13 --------- .../DatabaseFilter/Contract/Log/User.php | 13 --------- .../DatabaseFilter/DatabaseFilterBuilder.php | 29 ------------------- .../DatabaseFilter/Traits/Filterable.php | 28 ------------------ 14 files changed, 223 deletions(-) delete mode 100644 src/Kernel/DatabaseFilter/Abstract/FiltersAbstract.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/App/Owner.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/App/Title.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/App/User.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/Device/Owner.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/Device/Title.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/Device/User.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Apps.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Devices.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Message.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/Log/Unread.php delete mode 100644 src/Kernel/DatabaseFilter/Contract/Log/User.php delete mode 100644 src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php delete mode 100644 src/Kernel/DatabaseFilter/Traits/Filterable.php diff --git a/src/Kernel/DatabaseFilter/Abstract/FiltersAbstract.php b/src/Kernel/DatabaseFilter/Abstract/FiltersAbstract.php deleted file mode 100644 index f6121ee..0000000 --- a/src/Kernel/DatabaseFilter/Abstract/FiltersAbstract.php +++ /dev/null @@ -1,23 +0,0 @@ -attribute = $attribute; - - return $this; - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/App/Owner.php b/src/Kernel/DatabaseFilter/Contract/App/Owner.php deleted file mode 100644 index d64aaf0..0000000 --- a/src/Kernel/DatabaseFilter/Contract/App/Owner.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('owner', '=', $this->attribute); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/App/Title.php b/src/Kernel/DatabaseFilter/Contract/App/Title.php deleted file mode 100644 index a759405..0000000 --- a/src/Kernel/DatabaseFilter/Contract/App/Title.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('title', 'LIKE', '%'.$this->attribute.'%'); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/App/User.php b/src/Kernel/DatabaseFilter/Contract/App/User.php deleted file mode 100644 index 68cdd53..0000000 --- a/src/Kernel/DatabaseFilter/Contract/App/User.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('user', '=', $this->attribute); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/Device/Owner.php b/src/Kernel/DatabaseFilter/Contract/Device/Owner.php deleted file mode 100644 index a9ee579..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Device/Owner.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('owner', '=', $this->attribute); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/Device/Title.php b/src/Kernel/DatabaseFilter/Contract/Device/Title.php deleted file mode 100644 index 86868e0..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Device/Title.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('title', 'LIKE', '%'.$this->attribute.'%'); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/Device/User.php b/src/Kernel/DatabaseFilter/Contract/Device/User.php deleted file mode 100644 index 684c6ca..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Device/User.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('user', '=', $this->attribute); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Apps.php b/src/Kernel/DatabaseFilter/Contract/Log/Apps.php deleted file mode 100644 index 407ee30..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Log/Apps.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->whereIn('app_id', $this->attribute); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Devices.php b/src/Kernel/DatabaseFilter/Contract/Log/Devices.php deleted file mode 100644 index a8f448a..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Log/Devices.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->whereIn('device_id', $this->attribute); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Message.php b/src/Kernel/DatabaseFilter/Contract/Log/Message.php deleted file mode 100644 index 3d7f19c..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Log/Message.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('message', 'LIKE', '%'.$this->attribute.'%'); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/Unread.php b/src/Kernel/DatabaseFilter/Contract/Log/Unread.php deleted file mode 100644 index 36e8f16..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Log/Unread.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('unread', '=', $this->attribute); - } -} diff --git a/src/Kernel/DatabaseFilter/Contract/Log/User.php b/src/Kernel/DatabaseFilter/Contract/Log/User.php deleted file mode 100644 index 7406119..0000000 --- a/src/Kernel/DatabaseFilter/Contract/Log/User.php +++ /dev/null @@ -1,13 +0,0 @@ -builder->where('user', '=', $this->attribute); - } -} diff --git a/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php b/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php deleted file mode 100644 index 7989cbf..0000000 --- a/src/Kernel/DatabaseFilter/DatabaseFilterBuilder.php +++ /dev/null @@ -1,29 +0,0 @@ -attributes as $key => $attribute) { - $normalizeName = ucfirst(Str::camel($key)); - $className = sprintf('%s\\%s', $this->namespace, $normalizeName); - if (!class_exists($className)) { - throw new \Exception(); - } - $filterInstants = new $className($this->builder); - $filterInstants->setAttribute($attribute); - $filterInstants->handel(); - } - - return $this->builder; - } -} diff --git a/src/Kernel/DatabaseFilter/Traits/Filterable.php b/src/Kernel/DatabaseFilter/Traits/Filterable.php deleted file mode 100644 index 5de418f..0000000 --- a/src/Kernel/DatabaseFilter/Traits/Filterable.php +++ /dev/null @@ -1,28 +0,0 @@ -findContract(); - - return (new DatabaseFilterBuilder($builder, $attribute, $namespace))->build(); - } - - private function findContract(): string - { - return match (__CLASS__) { - App::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\App', - Device::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\Device', - Log::class => 'dnj\\ErrorTracker\\Laravel\\Server\\Kernel\\DatabaseFilter\\Contract\\Log', - }; - } -} From 1bb866713e914ce157b11220273777c317bcf565 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 01:00:39 +0330 Subject: [PATCH 106/131] improve: use enum log level --- database/factories/LogFactory.php | 2 +- database/migrations/2023_01_30_101610_create_logs_table.php | 3 ++- src/Managers/LogManager.php | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/database/factories/LogFactory.php b/database/factories/LogFactory.php index 28bd194..bd16b36 100644 --- a/database/factories/LogFactory.php +++ b/database/factories/LogFactory.php @@ -20,7 +20,7 @@ public function definition(): array return [ 'app_id' => $app[0]->id, 'device_id' => $device[0]->id, - 'level' => LogLevel::INFO->name, + 'level' => LogLevel::INFO, 'message' => fake()->sentence, 'data' => json_encode([fake()->words(3)]), 'read' => json_encode(['userId' => fake()->randomNumber(1, 5), 'readAt' => null]), diff --git a/database/migrations/2023_01_30_101610_create_logs_table.php b/database/migrations/2023_01_30_101610_create_logs_table.php index 291ce15..14ac8cf 100644 --- a/database/migrations/2023_01_30_101610_create_logs_table.php +++ b/database/migrations/2023_01_30_101610_create_logs_table.php @@ -1,6 +1,7 @@ id(); - $table->enum('level', getEnumValues(LogLevel::cases())); + $table->enum('level', Helper::getAllValues(LogLevel::cases())); $table->text('message'); $table->json('data')->nullable(); $table->json('read')->nullable(); diff --git a/src/Managers/LogManager.php b/src/Managers/LogManager.php index 5436d33..71ecd53 100644 --- a/src/Managers/LogManager.php +++ b/src/Managers/LogManager.php @@ -22,10 +22,10 @@ public function store(int|IApp $app, IDevice|int $device, LogLevel $level, strin $model->setRead($read); $model->setAppId($app); - $model->setLevel($level->name); + $model->setLevel($level); $model->setMessage($message); $model->setDeviceId($device); - $model->setData($device); + $model->setData($data); $model->save(); From 20f8cf08a4d598e97137d94d43edcd3432bed928 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 01:03:06 +0330 Subject: [PATCH 107/131] temporary: add helper (non use autoload) for get values --- src/Helpers/Helper.php | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/Helpers/Helper.php diff --git a/src/Helpers/Helper.php b/src/Helpers/Helper.php new file mode 100644 index 0000000..9902f7d --- /dev/null +++ b/src/Helpers/Helper.php @@ -0,0 +1,11 @@ + Date: Thu, 9 Feb 2023 01:05:30 +0330 Subject: [PATCH 108/131] remove: use filterable on entities. --- src/Models/App.php | 3 +-- src/Models/Device.php | 3 +-- src/Models/Log.php | 32 +++++++++++++------------------- 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/src/Models/App.php b/src/Models/App.php index 71093cb..bd295bf 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -4,7 +4,7 @@ use dnj\ErrorTracker\Contracts\IApp; use dnj\ErrorTracker\Database\Factories\AppFactory; -use dnj\ErrorTracker\Laravel\Server\Kernel\DatabaseFilter\Traits\Filterable; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -19,7 +19,6 @@ */ class App extends Model implements IApp { - use Filterable; use HasFactory; protected $fillable = ['title']; diff --git a/src/Models/Device.php b/src/Models/Device.php index 734c7be..29f0ac8 100644 --- a/src/Models/Device.php +++ b/src/Models/Device.php @@ -4,7 +4,7 @@ use dnj\ErrorTracker\Contracts\IDevice; use dnj\ErrorTracker\Database\Factories\DeviceFactory; -use dnj\ErrorTracker\Laravel\Server\Kernel\DatabaseFilter\Traits\Filterable; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -19,7 +19,6 @@ */ class Device extends Model implements IDevice { - use Filterable; use HasFactory; protected $fillable = ['title']; diff --git a/src/Models/Log.php b/src/Models/Log.php index aacb788..c19fe9a 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -6,24 +6,23 @@ use dnj\ErrorTracker\Contracts\ILog; use dnj\ErrorTracker\Contracts\LogLevel; use dnj\ErrorTracker\Database\Factories\LogFactory; -use dnj\ErrorTracker\Laravel\Server\Kernel\DatabaseFilter\Traits\Filterable; +use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; /** - * @property int id - * @property int app_id - * @property int device_id - * @property string|null read - * @property mixed level - * @property string message - * @property string|null data - * @property \DateTime created_at - * @property \DateTime updated_at + * @property int id + * @property int app_id + * @property int device_id + * @property string|null read + * @property LogLevel level + * @property string message + * @property string|null data + * @property \DateTime created_at + * @property \DateTime updated_at */ class Log extends Model implements ILog { - use Filterable; use HasFactory; public function getId(): int @@ -67,19 +66,14 @@ public function getReadAt(): ?\DateTime return $readAt ? Carbon::make($readAt) : $readAt; } - /** - * @return mixed - */ public function getLevel(): LogLevel { return $this->level; } - public function setLevel(mixed $level): Log + public function setLevel(LogLevel $level): void { $this->level = $level; - - return $this; } public function getMessage(): string @@ -99,9 +93,9 @@ public function getData(): ?array return json_decode($this->data); } - public function setData(?string $data): Log + public function setData(?array $data): Log { - $this->data = $data; + $this->data = json_encode($data); return $this; } From 029f55c9e5706c61eb83a63aafed6452b34e93e7 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 01:06:08 +0330 Subject: [PATCH 109/131] fix: add scope filter on models --- src/Models/App.php | 13 +++++++++++++ src/Models/Device.php | 13 +++++++++++++ src/Models/Log.php | 29 +++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+) diff --git a/src/Models/App.php b/src/Models/App.php index bd295bf..c39cd75 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -87,4 +87,17 @@ protected static function newFactory(): AppFactory { return AppFactory::new(); } + + public function scopeFilter(Builder $builder, array $attribute) + { + if (isset($attribute['owner'])) { + $builder->where('title', '=', $attribute['owner']); + } + if (isset($attribute['title'])) { + $builder->where('title', 'LIKE', '%'.$attribute['title'].'%'); + } + if (isset($attribute['user'])) { + $builder->where('title', '=', $attribute['user']); + } + } } diff --git a/src/Models/Device.php b/src/Models/Device.php index 29f0ac8..d3b50d2 100644 --- a/src/Models/Device.php +++ b/src/Models/Device.php @@ -85,4 +85,17 @@ protected static function newFactory(): DeviceFactory { return DeviceFactory::new(); } + + public function scopeFilter(Builder $builder, array $attribute) + { + if (isset($attribute['owner'])) { + $builder->where('title', '=', $attribute['owner']); + } + if (isset($attribute['title'])) { + $builder->where('title', 'LIKE', '%'.$attribute['title'].'%'); + } + if (isset($attribute['user'])) { + $builder->where('title', '=', $attribute['user']); + } + } } diff --git a/src/Models/Log.php b/src/Models/Log.php index c19fe9a..33b3cee 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -25,6 +25,10 @@ class Log extends Model implements ILog { use HasFactory; + protected $casts = [ + 'level' => LogLevel::class, + ]; + public function getId(): int { return $this->id; @@ -126,4 +130,29 @@ protected static function newFactory(): LogFactory { return LogFactory::new(); } + + public function scopeFilter(Builder $builder, array $attribute): Builder + { + if (isset($attribute['apps'])) { + $builder->whereIn('app_id', $attribute['apps']); + } + if (isset($attribute['devices'])) { + $builder->whereIn('device_id', $attribute['apps']); + } + if (isset($attribute['message'])) { + $builder->where('message', 'LIKE', $attribute['message']); + } + if (isset($attribute['user'])) { + $builder->where('read->userId', '=', $attribute['user']); + } + if (isset($attribute['unread'])) { + if ($attribute['unread']) { + $builder->whereNull('read->readAt'); + } else { + $builder->whereNotNull('read->readAt'); + } + } + + return $builder; + } } From f68f3354f6a057543eae0e556a1df3241d663300 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 01:06:41 +0330 Subject: [PATCH 110/131] fix: associative array --- src/Http/Requests/Log/StoreRequest.php | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/Http/Requests/Log/StoreRequest.php b/src/Http/Requests/Log/StoreRequest.php index 61a55d1..3d45911 100644 --- a/src/Http/Requests/Log/StoreRequest.php +++ b/src/Http/Requests/Log/StoreRequest.php @@ -15,6 +15,8 @@ public function rules(): array 'level' => ['required', 'in:'.implode(',', getEnumValues(LogLevel::cases()))], 'message' => ['string', 'required'], 'data' => ['array', 'nullable'], + 'data.readAt' => ['nullable', 'date'], + 'data.userId' => ['nullable', 'int'], 'read' => ['array', 'nullable'], ]; } From a52692c216fea630aeaafb1340f1ca4bbe211c22 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 01:07:37 +0330 Subject: [PATCH 111/131] improve: function name and fiy typos. --- src/Http/Controllers/AppController.php | 6 +++--- src/Http/Controllers/DeviceController.php | 10 +++++----- src/Http/Controllers/LogController.php | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/Http/Controllers/AppController.php b/src/Http/Controllers/AppController.php index f4ffa84..71c0558 100644 --- a/src/Http/Controllers/AppController.php +++ b/src/Http/Controllers/AppController.php @@ -14,7 +14,7 @@ public function __construct(protected IAppManager $appManager) { } - public function search(SearchRequest $searchRequest): AppResource + public function index(SearchRequest $searchRequest): AppResource { $search = $this->appManager->search($searchRequest->only( [ @@ -39,9 +39,9 @@ public function store(StoreRequest $storeRequest): AppResource return AppResource::make($store); } - public function update(int $id, UpdateRequest $updateRequest): AppResource + public function update(int $app, UpdateRequest $updateRequest): AppResource { - $update = $this->appManager->update($id, $updateRequest->validated(), userActivityLog: true); + $update = $this->appManager->update($app, $updateRequest->validated(), userActivityLog: true); return AppResource::make($update); } diff --git a/src/Http/Controllers/DeviceController.php b/src/Http/Controllers/DeviceController.php index ae0d501..c7db0e8 100644 --- a/src/Http/Controllers/DeviceController.php +++ b/src/Http/Controllers/DeviceController.php @@ -14,7 +14,7 @@ public function __construct(protected IDeviceManager $deviceManager) { } - public function search(SearchRequest $searchRequest): DeviceResource + public function index(SearchRequest $searchRequest): DeviceResource { $search = $this->deviceManager->search($searchRequest->only( [ @@ -39,15 +39,15 @@ public function store(StoreRequest $storeRequest): DeviceResource return DeviceResource::make($store); } - public function update(int $id, UpdateRequest $updateRequest): DeviceResource + public function update(int $device, UpdateRequest $updateRequest): DeviceResource { - $update = $this->deviceManager->update($id, $updateRequest->validated(), userActivityLog: true); + $update = $this->deviceManager->update($device, $updateRequest->validated(), userActivityLog: true); return DeviceResource::make($update); } - public function destroy(int $id) + public function destroy(int $device) { - $this->deviceManager->destroy($id, userActivityLog: true); + $this->deviceManager->destroy($device, userActivityLog: true); } } diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index 82a50ec..523a793 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -17,7 +17,7 @@ public function __construct(protected ILogManager $logManager) { } - public function search(SearchRequest $searchRequest) + public function index(SearchRequest $searchRequest) { $search = $this->logManager->search($searchRequest->only( [ @@ -67,9 +67,9 @@ public function markAsUnRead(Log $log): LogResource return LogResource::make($markAsUnread); } - public function destroy(int $id) + public function destroy(int $log) { - $this->logManager->destroy($id, userActivityLog: true); + $this->logManager->destroy($log, userActivityLog: true); } public function getEnumValue(StoreRequest $storeRequest): ?LogLevel From ad5e3060bbd709e79914cf662ae49feb1364a7f0 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 01:08:04 +0330 Subject: [PATCH 112/131] fix: route name --- tests/Feature/DeviceManagerTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/Feature/DeviceManagerTest.php b/tests/Feature/DeviceManagerTest.php index 356194a..afd4a76 100644 --- a/tests/Feature/DeviceManagerTest.php +++ b/tests/Feature/DeviceManagerTest.php @@ -13,7 +13,7 @@ public function testUserCanSearch(): void { Device::factory(2)->create(); - $response = $this->get(route('device.search', ['title' => 'test', 'owner' => 1, 'user' => 1])); + $response = $this->get(route('devices.index', ['title' => 'test', 'owner' => 1, 'user' => 1])); $response->assertStatus(ResponseAlias::HTTP_OK); } @@ -27,7 +27,7 @@ public function testCanNotStore(): void 'userActivityLog' => false, ]; - $this->postJson(route('device.store'), $data) + $this->postJson(route('devices.store'), $data) ->assertStatus(422) ->assertJson(function (AssertableJson $json) { $json->etc(); @@ -43,7 +43,7 @@ public function testCanStore(): void 'owner_id_column' => 1, ]; - $this->postJson(route('device.store'), $data) + $this->postJson(route('devices.store'), $data) ->assertStatus(201) ->assertJson(function (AssertableJson $json) { $json->etc(); @@ -61,7 +61,7 @@ public function testCanUpdate() 'userActivityLog' => false, ]; - $this->putJson(route('device.update', ['id' => $app->id]), $changes) + $this->putJson(route('devices.update', ['device' => $app->id]), $changes) ->assertStatus(ResponseAlias::HTTP_OK) ->assertJson(function (AssertableJson $json) { $json->etc(); @@ -72,7 +72,7 @@ public function testCanDestroy() { $app = Device::factory()->create(); - $this->deleteJson(route('device.destroy', ['id' => $app->id])) + $this->deleteJson(route('devices.destroy', ['device' => $app->id])) ->assertStatus(ResponseAlias::HTTP_OK); } } From 8775a15f1cbbaed92b5905ca660fe3d6288837f3 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 01:08:09 +0330 Subject: [PATCH 113/131] fix: route name --- tests/Feature/AppManagerTest.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/Feature/AppManagerTest.php b/tests/Feature/AppManagerTest.php index 06ef556..d8d0ea8 100644 --- a/tests/Feature/AppManagerTest.php +++ b/tests/Feature/AppManagerTest.php @@ -13,7 +13,7 @@ public function testUserCanSearch(): void { App::factory(2)->create(); - $response = $this->get(route('app.search', ['title' => 'test', 'owner' => 1, 'user' => 1])); + $response = $this->get(route('apps.index', ['title' => 'test', 'owner' => 1, 'user' => 1])); $response->assertStatus(ResponseAlias::HTTP_OK); // 200 } @@ -29,7 +29,7 @@ public function testUserCanStore(): void 'userActivityLog' => true, ]; - $this->postJson(route('app.store'), $data) + $this->postJson(route('apps.store'), $data) ->assertStatus(201) ->assertJson(function (AssertableJson $json) { $json->etc(); @@ -47,7 +47,7 @@ public function testUpdateApp(): void 'userActivityLog' => false, ]; - $this->putJson(route('app.update', ['id' => $app->id]), $changes) + $this->putJson(route('apps.update', ['app' => $app->id]), $changes) ->assertStatus(ResponseAlias::HTTP_OK) ->assertJson(function (AssertableJson $json) { $json->etc(); @@ -58,7 +58,7 @@ public function testDestroy(): void { $app = App::factory()->create(); - $this->deleteJson(route('app.destroy', ['id' => $app->id])) + $this->deleteJson(route('apps.destroy', ['app' => $app->id])) ->assertStatus(ResponseAlias::HTTP_OK); } } From fefe40fcb899a389ef3f4a8b92ad1c4f13be5c84 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 12:32:30 +0330 Subject: [PATCH 114/131] fix: phpcs --- routes/api.php | 2 +- src/Helpers/Helper.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/routes/api.php b/routes/api.php index da3ae44..eb0a78c 100644 --- a/routes/api.php +++ b/routes/api.php @@ -17,4 +17,4 @@ Route::put('/markAsRead/{log}', [LogController::class, 'markAsRead'])->name('mark_as_read'); Route::put('/markAsUnRead/{log}', [LogController::class, 'markAsUnRead'])->name('mark_as_unread'); }); -}); \ No newline at end of file +}); diff --git a/src/Helpers/Helper.php b/src/Helpers/Helper.php index 9902f7d..558c7e8 100644 --- a/src/Helpers/Helper.php +++ b/src/Helpers/Helper.php @@ -8,4 +8,4 @@ public static function getAllValues(mixed $enum): array { return array_column($enum, 'name'); } -} \ No newline at end of file +} From 39ee76770b080ff8852c47724e65ab70757d58c1 Mon Sep 17 00:00:00 2001 From: amirhf Date: Thu, 9 Feb 2023 12:32:58 +0330 Subject: [PATCH 115/131] improve: app test --- src/Managers/AppManager.php | 16 ++++----- tests/Feature/AppManagerTest.php | 58 +++++++++++++++++++++++++++----- 2 files changed, 57 insertions(+), 17 deletions(-) diff --git a/src/Managers/AppManager.php b/src/Managers/AppManager.php index 9c3e6a9..0aab6c5 100644 --- a/src/Managers/AppManager.php +++ b/src/Managers/AppManager.php @@ -15,15 +15,11 @@ public function search(array $filters): iterable public function store(string $title, ?array $extra = null, ?int $owner = null, bool $userActivityLog = false): IApp { - $app = new App( - [ - 'title' => $title, - 'extra' => $extra, - 'owner' => $owner, - 'userActivityLog' => true, - ] - ); + $app = new App(); + $app->setTitle($title); + $app->setOwner($owner); + $app->setExtra($extra); $app->save(); return $app; @@ -32,7 +28,9 @@ public function store(string $title, ?array $extra = null, ?int $owner = null, b public function update(int|IApp $app, array $changes, bool $userActivityLog = false): IApp { $model = App::query()->findOrFail($app); - $model->fill($changes); + $model->setTitle($changes['title']); + $model->setOwner($changes['owner']); + $model->setExtra($changes['extra']); $model->save(); return $model; diff --git a/tests/Feature/AppManagerTest.php b/tests/Feature/AppManagerTest.php index d8d0ea8..0247e34 100644 --- a/tests/Feature/AppManagerTest.php +++ b/tests/Feature/AppManagerTest.php @@ -20,31 +20,48 @@ public function testUserCanSearch(): void public function testUserCanStore(): void { - $app = App::factory()->create(); - $data = [ 'title' => 'Test App', 'extra' => ['test_key' => 'test_value'], 'owner' => 1, - 'userActivityLog' => true, ]; $this->postJson(route('apps.store'), $data) - ->assertStatus(201) + ->assertStatus(ResponseAlias::HTTP_CREATED) // 201 ->assertJson(function (AssertableJson $json) { $json->etc(); }); + + $data['extra'] = json_encode($data['extra']); + $this->assertDatabaseHas('apps', $data); + $this->assertDatabaseCount('apps', 1); } - public function testUpdateApp(): void + public function testUserCanNotStore(): void + { + $data = [ + 'title' => '', + 'extra' => [''], + 'owner' => '', + ]; + + $this->postJson(route('apps.store'), $data) + ->assertStatus(ResponseAlias::HTTP_UNPROCESSABLE_ENTITY) // 422 + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + + $this->assertDatabaseCount('apps', 0); + } + + public function testCanUpdateApp(): void { $app = App::factory()->create(); $changes = [ 'title' => 'Test App edited', - 'extra' => ['test_key edited' => 'test_value edited'], + 'extra' => ['test_key' => 'test_value'], 'owner' => 3, - 'userActivityLog' => false, ]; $this->putJson(route('apps.update', ['app' => $app->id]), $changes) @@ -52,6 +69,23 @@ public function testUpdateApp(): void ->assertJson(function (AssertableJson $json) { $json->etc(); }); + + $changes['extra'] = json_encode($changes['extra']); + $this->assertDatabaseHas('apps', $changes); + $this->assertDatabaseCount('apps', 1); + } + + public function testCanNotUpdateApp(): void + { + $changes = []; + + $this->putJson(route('apps.update', ['app' => 100]), $changes) + ->assertStatus(ResponseAlias::HTTP_NOT_FOUND) // 404 + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + + $this->assertDatabaseCount('apps', 0); } public function testDestroy(): void @@ -59,6 +93,14 @@ public function testDestroy(): void $app = App::factory()->create(); $this->deleteJson(route('apps.destroy', ['app' => $app->id])) - ->assertStatus(ResponseAlias::HTTP_OK); + ->assertStatus(ResponseAlias::HTTP_OK); // 200 + } + + public function testCanNotDestroy(): void + { + $app = App::factory()->create(); + + $this->deleteJson(route('apps.destroy', ['app' => 100])) + ->assertStatus(ResponseAlias::HTTP_NOT_FOUND); // 404 } } From ca1227fd7a805a1bd31dbeffe380e8b653370acc Mon Sep 17 00:00:00 2001 From: amirhf Date: Sat, 11 Feb 2023 21:10:09 +0330 Subject: [PATCH 116/131] improve: all test. --- database/factories/AppFactory.php | 3 +- database/factories/DeviceFactory.php | 3 +- ...01_30_101602_create_applications_table.php | 3 +- ...2023_01_30_101606_create_devices_table.php | 3 +- src/Managers/AppManager.php | 6 +- src/Managers/DeviceManager.php | 17 ++--- src/Models/App.php | 17 ++--- src/Models/Device.php | 31 ++++---- tests/Feature/AppManagerTest.php | 13 +++- tests/Feature/DeviceManagerTest.php | 68 +++++++++++++----- tests/Feature/LogManagerTest.php | 71 ++++++++++++++++--- 11 files changed, 171 insertions(+), 64 deletions(-) diff --git a/database/factories/AppFactory.php b/database/factories/AppFactory.php index 9c8d13d..4effdda 100644 --- a/database/factories/AppFactory.php +++ b/database/factories/AppFactory.php @@ -14,7 +14,8 @@ public function definition(): array return [ 'title' => fake()->word, 'extra' => serialize(fake()->words(3)), - 'owner' => rand(1, 10), + 'owner_id' => rand(1, 10), + 'owner_id_column' => 'owner_id', 'created_at' => fake()->dateTime, 'updated_at' => fake()->dateTime, ]; diff --git a/database/factories/DeviceFactory.php b/database/factories/DeviceFactory.php index eb624bc..bb098f6 100644 --- a/database/factories/DeviceFactory.php +++ b/database/factories/DeviceFactory.php @@ -14,7 +14,8 @@ public function definition(): array return [ 'title' => fake()->word, 'extra' => serialize(fake()->words(3)), - 'owner' => rand(1, 5), + 'owner_id' => rand(1, 5), + 'owner_id_column' => 'owner_id', 'created_at' => fake()->dateTime, 'updated_at' => fake()->dateTime, ]; diff --git a/database/migrations/2023_01_30_101602_create_applications_table.php b/database/migrations/2023_01_30_101602_create_applications_table.php index 2336a94..4c79311 100644 --- a/database/migrations/2023_01_30_101602_create_applications_table.php +++ b/database/migrations/2023_01_30_101602_create_applications_table.php @@ -14,7 +14,8 @@ public function up(): void $table->id(); $table->string('title'); $table->json('extra')->nullable(); - $table->integer('owner')->nullable(); + $table->integer('owner_id')->nullable(); + $table->integer('owner_id_column')->nullable(); $table->timestamps(); }); } diff --git a/database/migrations/2023_01_30_101606_create_devices_table.php b/database/migrations/2023_01_30_101606_create_devices_table.php index 4c4dd60..5f747e9 100644 --- a/database/migrations/2023_01_30_101606_create_devices_table.php +++ b/database/migrations/2023_01_30_101606_create_devices_table.php @@ -14,7 +14,8 @@ public function up(): void $table->bigIncrements('id'); $table->string('title'); $table->json('extra')->nullable(); - $table->unsignedBigInteger('owner')->nullable(); + $table->unsignedBigInteger('owner_id')->nullable(); + $table->unsignedBigInteger('owner_id_column'); $table->boolean('user_activity_log')->default(false); $table->timestamps(); }); diff --git a/src/Managers/AppManager.php b/src/Managers/AppManager.php index 0aab6c5..dbd0c5a 100644 --- a/src/Managers/AppManager.php +++ b/src/Managers/AppManager.php @@ -18,7 +18,8 @@ public function store(string $title, ?array $extra = null, ?int $owner = null, b $app = new App(); $app->setTitle($title); - $app->setOwner($owner); + $app->setOwnerId($owner); + $app->setOwnerIdColumn('owner_id'); $app->setExtra($extra); $app->save(); @@ -27,9 +28,10 @@ public function store(string $title, ?array $extra = null, ?int $owner = null, b public function update(int|IApp $app, array $changes, bool $userActivityLog = false): IApp { + /** @var App $model */ $model = App::query()->findOrFail($app); $model->setTitle($changes['title']); - $model->setOwner($changes['owner']); + $model->setOwnerId($changes['owner']); $model->setExtra($changes['extra']); $model->save(); diff --git a/src/Managers/DeviceManager.php b/src/Managers/DeviceManager.php index a408a4b..943a7e1 100644 --- a/src/Managers/DeviceManager.php +++ b/src/Managers/DeviceManager.php @@ -15,14 +15,12 @@ public function search(array $filters): iterable public function store(?string $title = null, ?array $extra = null, ?int $owner = null, bool $userActivityLog = false): IDevice { - $device = new Device( - [ - 'title' => $title, - 'extra' => $extra, - 'owner' => $owner, - ] - ); + $device = new Device(); + $device->setTitle($title); + $device->setOwnerId($owner); + $device->setExtra($extra); + $device->setOwnerIdColumn('owner_id'); $device->save(); return $device; @@ -30,8 +28,11 @@ public function store(?string $title = null, ?array $extra = null, ?int $owner = public function update(IDevice|int $device, array $changes, bool $userActivityLog = false): IDevice { + /** @var Device $model */ $model = Device::query()->findOrFail($device); - $model->fill($changes); + $model->setTitle($changes['title']); + $model->setOwnerId($changes['owner']); + $model->setExtra($changes['extra']); $model->save(); return $model; diff --git a/src/Models/App.php b/src/Models/App.php index c39cd75..5bfbe6a 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -12,7 +12,7 @@ * @property int id * @property string title * @property array|null extra - * @property int|null owner + * @property int|null owner_id * @property string owner_id_column * @property \DateTime created_at * @property \DateTime updated_at @@ -48,14 +48,16 @@ public function setExtra(?array $extra): void $this->extra = json_encode($extra); } - public function getOwner(): ?int + public function getOwnerId(): ?int { - return $this->owner; + return $this->owner_id; } - public function setOwner(?int $owner): void + public function setOwnerId(?int $owner): App { - $this->owner = $owner; + $this->owner_id = $owner; + + return $this; } public function getOwnerIdColumn(): string @@ -78,11 +80,6 @@ public function getUpdatedAt(): \DateTime return $this->updated_at; } - public function getOwnerId(): ?int - { - return $this->getOwnerIdColumn(); - } - protected static function newFactory(): AppFactory { return AppFactory::new(); diff --git a/src/Models/Device.php b/src/Models/Device.php index d3b50d2..a2561b6 100644 --- a/src/Models/Device.php +++ b/src/Models/Device.php @@ -12,7 +12,7 @@ * @property int id * @property string|null title * @property array|null extra - * @property int owner_id + * @property int|null owner_id * @property string owner_id_column * @property \DateTime created_at * @property \DateTime updated_at @@ -46,19 +46,23 @@ public function getExtra(): ?array return $this->extra; } - public function setExtra(?string $extra): void + public function setExtra(?array $extra): Device { - $this->extra = $extra; + $this->extra = json_encode($extra); + + return $this; } - public function getOwnerId(): int + public function getOwnerId(): ?int { return $this->owner_id; } - public function setOwnerId(int $owner_id): void + public function setOwnerId(?int $owner_id): Device { $this->owner_id = $owner_id; + + return $this; } public function getOwnerIdColumn(): string @@ -66,9 +70,11 @@ public function getOwnerIdColumn(): string return $this->owner_id_column; } - public function setOwnerIdColumn(string $owner_id_column): void + public function setOwnerIdColumn(string $owner_id_column): Device { $this->owner_id_column = $owner_id_column; + + return $this; } public function getCreatedAt(): \DateTime @@ -76,10 +82,6 @@ public function getCreatedAt(): \DateTime return $this->created_at; } - public function getUpdatedAt(): \DateTime - { - return $this->updated_at; - } protected static function newFactory(): DeviceFactory { @@ -89,13 +91,18 @@ protected static function newFactory(): DeviceFactory public function scopeFilter(Builder $builder, array $attribute) { if (isset($attribute['owner'])) { - $builder->where('title', '=', $attribute['owner']); + $builder->where('owner_id', '=', $attribute['owner']); } if (isset($attribute['title'])) { $builder->where('title', 'LIKE', '%'.$attribute['title'].'%'); } if (isset($attribute['user'])) { - $builder->where('title', '=', $attribute['user']); + $builder->where('user', '=', $attribute['user']); } } + + public function getUpdatedAt(): \DateTimeInterface + { + return $this->updated_at; + } } diff --git a/tests/Feature/AppManagerTest.php b/tests/Feature/AppManagerTest.php index 0247e34..46bdb1e 100644 --- a/tests/Feature/AppManagerTest.php +++ b/tests/Feature/AppManagerTest.php @@ -32,7 +32,7 @@ public function testUserCanStore(): void $json->etc(); }); - $data['extra'] = json_encode($data['extra']); + $data = $this->prepareForAssert($data); $this->assertDatabaseHas('apps', $data); $this->assertDatabaseCount('apps', 1); } @@ -70,7 +70,7 @@ public function testCanUpdateApp(): void $json->etc(); }); - $changes['extra'] = json_encode($changes['extra']); + $changes = $this->prepareForAssert($changes); $this->assertDatabaseHas('apps', $changes); $this->assertDatabaseCount('apps', 1); } @@ -103,4 +103,13 @@ public function testCanNotDestroy(): void $this->deleteJson(route('apps.destroy', ['app' => 100])) ->assertStatus(ResponseAlias::HTTP_NOT_FOUND); // 404 } + + public function prepareForAssert(array $changes): array + { + $changes['extra'] = json_encode($changes['extra']); + $changes['owner_id'] = $changes['owner']; + unset($changes['owner']); + + return $changes; + } } diff --git a/tests/Feature/DeviceManagerTest.php b/tests/Feature/DeviceManagerTest.php index afd4a76..6f39cb7 100644 --- a/tests/Feature/DeviceManagerTest.php +++ b/tests/Feature/DeviceManagerTest.php @@ -18,54 +18,75 @@ public function testUserCanSearch(): void $response->assertStatus(ResponseAlias::HTTP_OK); } - public function testCanNotStore(): void + public function testCanStore(): void { $data = [ 'title' => 'Test App', - 'extra' => 1, + 'extra' => ['test_key edited' => 'test_value edited'], 'owner' => 1, - 'userActivityLog' => false, ]; $this->postJson(route('devices.store'), $data) - ->assertStatus(422) + ->assertStatus(ResponseAlias::HTTP_CREATED) // 201 ->assertJson(function (AssertableJson $json) { $json->etc(); }); + + $data = $this->prepareForAssert($data); + $this->assertDatabaseHas('devices', $data); + $this->assertDatabaseCount('devices', 1); } - public function testCanStore(): void + public function testCanNotStoreDevice(): void { $data = [ 'title' => 'Test App', - 'extra' => ['test_key edited' => 'test_value edited'], - 'owner_id' => 1, - 'owner_id_column' => 1, + 'extra' => 1, + 'owner' => 1, ]; $this->postJson(route('devices.store'), $data) - ->assertStatus(201) + ->assertStatus(ResponseAlias::HTTP_UNPROCESSABLE_ENTITY) // 422 ->assertJson(function (AssertableJson $json) { $json->etc(); }); + + $this->assertDatabaseCount('devices', 0); } - public function testCanUpdate() + public function testCanUpdateDevice() { - $app = Device::factory()->create(); + $device = Device::factory()->create(); $changes = [ - 'title' => 'Test App edited', - 'extra' => ['test_key edited' => 'test_value edited'], - 'owner' => 3, - 'userActivityLog' => false, + 'title' => 'Test Device edited', + 'extra' => ['test_key' => 'test_value'], + 'owner' => 1, ]; - $this->putJson(route('devices.update', ['device' => $app->id]), $changes) + $this->putJson(route('devices.update', ['device' => $device->id]), $changes) ->assertStatus(ResponseAlias::HTTP_OK) ->assertJson(function (AssertableJson $json) { $json->etc(); }); + + $changes = $this->prepareForAssert($changes); + $this->assertDatabaseHas('devices', $changes); + $this->assertDatabaseCount('devices', 1); + } + + + public function testCanNotUpdateDevice() + { + $changes = ['title' => 'test']; + + $this->putJson(route('devices.update', ['device' => 100]), $changes) + ->assertStatus(ResponseAlias::HTTP_NOT_FOUND) // 404 + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + + $this->assertDatabaseCount('apps', 0); } public function testCanDestroy() @@ -75,4 +96,19 @@ public function testCanDestroy() $this->deleteJson(route('devices.destroy', ['device' => $app->id])) ->assertStatus(ResponseAlias::HTTP_OK); } + + public function testCanNotDestroy() + { + $this->deleteJson(route('devices.destroy', ['device' => 100])) + ->assertStatus(ResponseAlias::HTTP_NOT_FOUND); // 404 + } + + public function prepareForAssert(array $changes): array + { + $changes['extra'] = json_encode($changes['extra']); + $changes['owner_id'] = $changes['owner']; + unset($changes['owner']); + + return $changes; + } } diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index 80fb574..3750e56 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -18,7 +18,7 @@ public function testLogSearch() $app = App::factory()->create(); $device = Device::factory()->create(); - $response = $this->get(route('log.search', + $response = $this->get(route('logs.index', [ 'apps' => [$app->id], 'devices' => [$device->id], @@ -49,11 +49,17 @@ public function testCanStore(): void 'read' => ['userId' => 1, 'readAt' => Carbon::now()], ]; - $this->postJson(route('log.store'), $data) + $this->postJson(route('logs.store'), $data) ->assertStatus(ResponseAlias::HTTP_CREATED) ->assertJson(function (AssertableJson $json) { $json->etc(); }); + + unset($data['app']); + + $data = $this->makeDataForAssert($data); + + $this->assertDatabaseHas('logs', $data); } public function testMarkAsRead() @@ -63,38 +69,83 @@ public function testMarkAsRead() $data = [ 'userId' => 1, 'readAt' => Carbon::now(), - 'userActivityLog' => false, ]; - $this->putJson(route('log.mark_as_read', ['log' => $log->id]), $data) + $this->putJson(route('logs.mark_as_read', ['log' => $log->id]), $data) ->assertStatus(ResponseAlias::HTTP_OK) ->assertJson(function (AssertableJson $json) { $json->etc(); }); + + $this->assertDatabaseHas('logs', [ + 'read->userId' => $data['userId'], + 'read->readAt' => (string) $data['readAt'], + ]); } - public function testMarkAsUnRead() + public function testCanNotMarkAsRead() { - $log = Log::factory()->create(); - $data = [ 'userId' => 1, 'readAt' => Carbon::now(), - 'userActivityLog' => false, ]; - $this->putJson(route('log.mark_as_unread', ['log' => $log->id]), $data) + $this->putJson(route('logs.mark_as_read', ['log' => 100]), $data) + ->assertStatus(ResponseAlias::HTTP_NOT_FOUND) // 404 + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + } + + public function testMarkAsUnRead() + { + $log = Log::factory()->create(); + + $this->putJson(route('logs.mark_as_unread', ['log' => $log->id])) ->assertStatus(ResponseAlias::HTTP_OK) ->assertJson(function (AssertableJson $json) { $json->etc(); }); + + $this->assertDatabaseHas('logs', [ + 'read->userId' => null, + 'read->readAt' => null, + ]); + } + + public function testCanNotMarkAsUnRead() + { + $this->putJson(route('logs.mark_as_unread', ['log' => 100])) + ->assertStatus(ResponseAlias::HTTP_NOT_FOUND) // 404 + ->assertJson(function (AssertableJson $json) { + $json->etc(); + }); + + $this->assertDatabaseCount('logs', 0); } public function testCanDestroy() { $app = Log::factory()->create(); - $this->deleteJson(route('log.destroy', ['id' => $app->id])) + $this->deleteJson(route('logs.destroy', ['log' => $app->id])) ->assertStatus(ResponseAlias::HTTP_OK); } + + public function testCanNotDestroy() + { + $this->deleteJson(route('logs.destroy', ['log' => 100])) + ->assertStatus(ResponseAlias::HTTP_NOT_FOUND); + } + + + private function makeDataForAssert(array $data): array + { + $data['data'] = json_encode($data['data']); + $data['read'] = json_encode($data['read']); + $data['device_id'] = $data['device']; + unset($data['device']); + + return $data; + } } From 5ac2a448f7f98e906d5cedbfe30fb2707c38bcd4 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 12 Feb 2023 04:37:58 +0330 Subject: [PATCH 117/131] improve: store request [log] --- src/Http/Requests/Log/StoreRequest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Http/Requests/Log/StoreRequest.php b/src/Http/Requests/Log/StoreRequest.php index 3d45911..3400355 100644 --- a/src/Http/Requests/Log/StoreRequest.php +++ b/src/Http/Requests/Log/StoreRequest.php @@ -15,6 +15,7 @@ public function rules(): array 'level' => ['required', 'in:'.implode(',', getEnumValues(LogLevel::cases()))], 'message' => ['string', 'required'], 'data' => ['array', 'nullable'], + 'data.*' => ['array', 'nullable'], 'data.readAt' => ['nullable', 'date'], 'data.userId' => ['nullable', 'int'], 'read' => ['array', 'nullable'], From 48a96c8fcf0c12ce458d2f377713d2d3d0c4a752 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 12 Feb 2023 04:38:13 +0330 Subject: [PATCH 118/131] improve: README.md --- README.md | 267 ++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 220 insertions(+), 47 deletions(-) diff --git a/README.md b/README.md index 3787426..23f4232 100644 --- a/README.md +++ b/README.md @@ -7,8 +7,7 @@ ## Introduction -This package will help you manage the logs for your project. - +This package is specifically built for **laravel** error tracking. * Features include: * Application Management @@ -33,12 +32,12 @@ composer require dnj/laravel-error-tracker-server Laravel uses Package Auto-Discovery, so doesn't require you to manually add the ServiceProvider. - #### Copy the package config to your local config with the publish command: ```shell -php artisan vendor:publish --provider="dnj\ErrorTracker\Laravel\Server\ServiceProvider" +php artisan vendor:publish --provider="dnj\ErrorTracker\Laravel\Server" ``` + #### Config file ```php @@ -50,56 +49,246 @@ return [ 'routes' => [ 'enable' => true, - 'prefix' => 'log', + 'prefix' => 'log', // example: log, device, etc ... , ], ]; ``` + --- ℹ️ **Note** -> User activity logs are disabled by default, if you want to save them set `$userActivityLog` to true. +> User activity logs are **enabled** by default, if you want to save them set `$userActivityLog` to false. Example : ```php -use dnj\Ticket\Contracts\DeviceManager; +$appManager = app(\dnj\ErrorTracker\Contracts\IApp::class); +$app = $appManager->store( + title:'Sell Department', + ownerId: 1, + OwnerIdColumn: 'owner_id', + extra: json_encode(['data' => 'etc']), + userActivityLog: false // disabled +); +``` -$device = app(DeviceManager::class); - $item = $device->store( - title:'test', - userActivityLog: true - ); // returns a Device model which implements IDevice +## Working With Application: + +* Search Applications: + +```php +$appManager = app(\dnj\ErrorTracker\Contracts\IApp::class); + +$app = $appManager->search( + filters: + ['title' => 'sales'], + ['owner' => 1], + ['user' => '1'] +); ``` +* Create new Application: -## Working With Apps: +```php +$appManager = app(\dnj\ErrorTracker\Contracts\IAppManager::class); -Search apps: +$app = $appManager->store( + title:'new application', + ownerId: 1, + OwnerIdColumn: 'owner_id', + extra: json_encode(['data' => 'etc'])); +``` + +* Update Application: ```php -$search = $this->appManager->search($searchRequest->only( - [ - 'title', - 'owner', - 'user', - ] - )); +$appManager = app(\dnj\ErrorTracker\Contracts\IAppManager::class); + +$app = $appManager->update( + id:1, + changes: [ + 'title' => 'new title', + 'ownerId' => 1, + 'extra' => ['any'], + ] +); ``` +* Delete application: -## HOWTO use Restful API +```php +$appManager = app(\dnj\ErrorTracker\Contracts\IAppManager::class); -A document in YAML format has been prepared for better familiarization and use of package web services. which is placed in the [`docs`][link-docs] folder. +$appManager->destroy( + id:1, + userActivityLog: false, +); -To use this file, you can import it on the [stoplight.io](https://stoplight.io) site and see all available web services. +``` + +*** + +## Working With Device: + +* Search Device: + +```php +$deviceManager = app(\dnj\ErrorTracker\Contracts\IDeviceManager::class); + +$app = $deviceManager->search( + filters: + ['title' => 'device'], + ['owner' => 1], + ['user' => '1'] +); +``` + +* Create new device: + +```php +$deviceManager = app(\dnj\ErrorTracker\Contracts\IDeviceManager::class); + +$app = $deviceManager->store( + title:'new device', + ownerId: 1, + OwnerIdColumn: 'owner_id', + extra: json_encode(['data' => 'etc'])); +``` + +* Update Device: + +```php +$deviceManager = app(\dnj\ErrorTracker\Contracts\IDeviceManager::class); + +$device = $deviceManager->update( + id:1, + changes: [ + 'title' => 'new device name', + 'ownerId' => 1, + 'extra' => ['any'], + ] +); +``` +* Delete application: + +```php +$deviceManager = app(\dnj\ErrorTracker\Contracts\IDeviceManager::class); + +$deviceManager->destroy( + id:1, + userActivityLog: false, +); +``` + +*** + +## Working With Log: + +* Search Device: + +```php +use \dnj\ErrorTracker\Contracts\LogLevel; +$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); + +$log = $logManager->search( + filters: + ['apps' => 1], // app id + ['devices' => 1], // devices id + ['level' => LogLevel::INFO] // importance + ['message' => 'text'] // message + ['unread' => true] // bool = true OR false + ['user' => 1] // user id +); +``` + +* Create new log: + +```php +use \dnj\ErrorTracker\Contracts\LogLevel; + +$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); + +$log = $logManager->store( + app: 1, // app id + device: 1, // device id + level: LogLevel::INFO, // importance + message: 'message', // message + data: ['data' => 'any'], // data + read: ['userId' => 1, 'readAt' => Carbon::now()] // read or not read + extra: json_encode(['data' => 'etc']) // extra + ); +``` + +* Mark as read log: + +```php +$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); + +$log = $logManager->markAsRead( + id:1, + readAt: Carbon::now(); +); + + +``` +* Mark as unread log: + +```php +$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); + +$log = $logManager->markAsUnread( + id:1, + userId: null, + readAt: null, +); +``` + +* Delete log: + +```php +$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); + +$logManager->destroy( + id:1, + userActivityLog: false, +); +``` + +*** + +## Testing + +You can run unit tests with PHP Unit: + +```php +./vendor/bin/phpunit +``` + +## How To use restful API + +A document in YAML format has been prepared for better familiarization and use of package web services. which is placed +in the `docs/APIs` folder. + +**Postman:** + +* laravel-error-tracker-server.json + +**Open API:** + +* openApi.yaml + +To use this file, you can import it on the [stoplight.io](https://stoplight.io) site and see all available web services. +Or open with PhpStorm. ## Contribution -Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated. +Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any +contributions you make are greatly appreciated. -If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again! +If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also +simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again! 1. Fork the Project 2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) @@ -107,28 +296,12 @@ If you have a suggestion that would make this better, please fork the repo and c 4. Push to the Branch (`git push origin feature/AmazingFeature`) 5. Open a Pull Request - ## Security -If you discover any security-related issues, please email [security@dnj.co.ir](mailto:security@dnj.co.ir) instead of using the issue tracker. + +If you discover any security-related issues, please email [security@dnj.co.ir](mailto:security@dnj.co.ir) instead of +using the issue tracker. ## License -The MIT License (MIT). Please see [License File][link-license] for more information. - - -[ico-version]: https://img.shields.io/packagist/v/dnj/laravel-ticketing.svg?style=flat-square -[ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square -[ico-downloads]: https://img.shields.io/packagist/dt/dnj/laravel-ticketing.svg?style=flat-square -[ico-workflow-test]: https://github.com/dnj/laravel-ticketing/actions/workflows/ci.yml/badge.svg - -[link-workflow-test]: https://github.com/dnj/laravel-ticketing/actions/workflows/ci.yml -[link-packagist]: https://packagist.org/packages/dnj/laravel-ticketing -[link-license]: https://github.com/dnj/laravel-ticketing/blob/master/LICENSE -[link-downloads]: https://packagist.org/packages/dnj/laravel-ticketing -[link-readme]: https://github.com/dnj/laravel-ticketing/blob/master/README.md -[link-docs]: https://github.com/dnj/laravel-ticketing/blob/master/docs/openapi.yaml -[link-composer-json]: https://github.com/dnj/laravel-ticketing/blob/master/composer.json -[link-phpunit]: https://github.com/dnj/laravel-ticketing/blob/master/phpunit.xml -[link-gitignore]: https://github.com/dnj/laravel-ticketing/blob/master/.gitignore -[link-phpcsfixer]: https://github.com/dnj/laravel-ticketing/blob/master/.php-cs-fixer.php -[link-author]: https://github.com/dnj +The MIT License (MIT). Please +see [License File](https://github.com/dnj/laravel-error-tracker-server/blob/master/LICENSE) for more information. From de6b610a1ae374d11acd7145e36b12e584897d92 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 12 Feb 2023 04:40:40 +0330 Subject: [PATCH 119/131] fix: example data --- tests/Feature/LogManagerTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index 3750e56..b5d7aae 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -45,7 +45,7 @@ public function testCanStore(): void 'device' => $device->id, 'level' => LogLevel::INFO->name, 'message' => 'message test', - 'data' => ['test_key edited' => 'test_value edited'], + 'data' => ['test_key' => ['test' => 1]], 'read' => ['userId' => 1, 'readAt' => Carbon::now()], ]; From 73e0c869742328e6ee5f417c31cefbb397d9acdf Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 12 Feb 2023 04:50:10 +0330 Subject: [PATCH 120/131] fix: readme badge --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 23f4232..f569140 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,12 @@ # Laravel Error Tracker 📥 -[![Latest Version on Packagist][ico-version]][link-packagist] +[![Latest Version on Packagist [link-packagist](https://img.shields.io/packagist/dependency-v/dnj/dnj/laravel-error-tracker-server) [![Total Downloads][ico-downloads]][link-downloads] [![Software License][ico-license]][link-license] [![Testing status][ico-workflow-test]][link-workflow-test] +https://img.shields.io/appveyor/build/dnj/https://github.com/dnj/laravel-error-tracker-server?style=flat-square + ## Introduction This package is specifically built for **laravel** error tracking. From 5e97316af65f78de0804eb815a3a5633c42ed588 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 12 Feb 2023 05:01:02 +0330 Subject: [PATCH 121/131] fix: readme badge; --- README.md | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index f569140..c47a90b 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,9 @@ # Laravel Error Tracker 📥 -[![Latest Version on Packagist [link-packagist](https://img.shields.io/packagist/dependency-v/dnj/dnj/laravel-error-tracker-server) -[![Total Downloads][ico-downloads]][link-downloads] -[![Software License][ico-license]][link-license] -[![Testing status][ico-workflow-test]][link-workflow-test] - -https://img.shields.io/appveyor/build/dnj/https://github.com/dnj/laravel-error-tracker-server?style=flat-square +![Packagist Dependency Version](https://img.shields.io/packagist/dependency-v/dnj/dnj/laravel-error-tracker-server) +![GitHub all releases](https://img.shields.io/github/downloads/dnj/laravel-error-tracker-server/total) +![GitHub](https://img.shields.io/github/license/dnj/laravel-error-tracker-server) +![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/dnj/laravel-error-tracker-server/ci.yml) ## Introduction From bb7b2de153761ac8b59e8cc9f0a7ca144244ae69 Mon Sep 17 00:00:00 2001 From: amirhf Date: Sun, 12 Feb 2023 05:06:18 +0330 Subject: [PATCH 122/131] fix: readme links --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index c47a90b..919166b 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,12 @@ This package is specifically built for **laravel** error tracking. * Log Management * Latest versions of PHP and PHPUnit and PHPCsFixer * Best practices applied: - * [`README.md`][link-readme] (badges included) - * [`LICENSE`][link-license] - * [`composer.json`][link-composer-json] - * [`phpunit.xml`][link-phpunit] - * [`.gitignore`][link-gitignore] - * [`.php-cs-fixer.php`][link-phpcsfixer] + * [`README.md`](https://github.com/dnj/laravel-error-tracker-server/blob/master/README.md) (badges included) + * [`LICENSE`](https://github.com/dnj/laravel-error-tracker-server/blob/master/LICENSE) + * [`composer.json`](https://github.com/dnj/laravel-error-tracker-server/blob/master/composer.json) + * [`phpunit.xml`](https://github.com/dnj/laravel-error-tracker-server/blob/master/phpunit.xml) + * [`.gitignore`](https://github.com/dnj/laravel-error-tracker-server/blob/master/.gitignore) + * [`.php-cs-fixer.php`](https://github.com/dnj/laravel-error-tracker-server/blob/master/.php-cs-fixer.php) ## Installation From c8db759280f41119b541745c985a195abd959702 Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Tue, 28 Feb 2023 17:20:15 +0330 Subject: [PATCH 123/131] Refactoring --- README.md | 207 +-- composer.json | 34 +- composer.lock | 1396 ++++++++++------- config/error-tracker.php | 4 +- database/factories/AppFactory.php | 36 +- database/factories/DeviceFactory.php | 36 +- database/factories/LogFactory.php | 67 +- .../2023_02_27_000001_create_apps_table.php | 24 + ...2023_02_27_000002_create_devices_table.php | 24 + .../2023_02_27_000003_create_logs_table.php | 42 + docs/APIs/laravel-error-tracker-server.json | 505 ------ docs/APIs/openApi.yaml | 275 ---- phpunit.xml | 47 +- src/AppManager.php | 109 ++ src/DeviceManager.php | 108 ++ src/Http/Controllers/AppController.php | 48 +- src/Http/Controllers/DeviceController.php | 48 +- src/Http/Controllers/LogController.php | 73 +- src/Http/Requests/AppSearchRequest.php | 19 + src/Http/Requests/AppStoreRequest.php | 20 + src/Http/Requests/AppUpdateRequest.php | 20 + src/Http/Requests/DeviceSearchRequest.php | 16 + src/Http/Requests/DeviceStoreRequest.php | 20 + src/Http/Requests/DeviceUpdateRequest.php | 20 + src/Http/Requests/LogSearchRequest.php | 30 + src/Http/Requests/LogStoreRequest.php | 21 + src/Http/Resources/AppResource.php | 9 + src/Http/Resources/DeviceResource.php | 9 + src/Http/Resources/LogResource.php | 9 + src/LogManager.php | 144 ++ src/Models/App.php | 103 +- src/Models/Device.php | 119 +- src/Models/Log.php | 182 +-- src/ServiceProvider.php | 3 - tests/Feature/AppManagerTest.php | 140 +- tests/Feature/DeviceManagerTest.php | 146 +- tests/Feature/LogManagerTest.php | 180 +-- tests/TestCase.php | 30 +- 38 files changed, 2154 insertions(+), 2169 deletions(-) create mode 100644 database/migrations/2023_02_27_000001_create_apps_table.php create mode 100644 database/migrations/2023_02_27_000002_create_devices_table.php create mode 100644 database/migrations/2023_02_27_000003_create_logs_table.php delete mode 100644 docs/APIs/laravel-error-tracker-server.json delete mode 100644 docs/APIs/openApi.yaml create mode 100644 src/AppManager.php create mode 100644 src/DeviceManager.php create mode 100644 src/Http/Requests/AppSearchRequest.php create mode 100644 src/Http/Requests/AppStoreRequest.php create mode 100644 src/Http/Requests/AppUpdateRequest.php create mode 100644 src/Http/Requests/DeviceSearchRequest.php create mode 100644 src/Http/Requests/DeviceStoreRequest.php create mode 100644 src/Http/Requests/DeviceUpdateRequest.php create mode 100644 src/Http/Requests/LogSearchRequest.php create mode 100644 src/Http/Requests/LogStoreRequest.php create mode 100644 src/Http/Resources/AppResource.php create mode 100644 src/Http/Resources/DeviceResource.php create mode 100644 src/Http/Resources/LogResource.php create mode 100644 src/LogManager.php diff --git a/README.md b/README.md index 919166b..1d4528b 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Laravel uses Package Auto-Discovery, so doesn't require you to manually add the #### Copy the package config to your local config with the publish command: ```shell -php artisan vendor:publish --provider="dnj\ErrorTracker\Laravel\Server" +php artisan vendor:publish --provider="dnj\ErrorTracker\Laravel\Server\ServiceProvider" ``` #### Config file @@ -45,7 +45,7 @@ php artisan vendor:publish --provider="dnj\ErrorTracker\Laravel\Server" return [ // Define your user model class for connect entities to users. - 'user_model' => null, + 'user_model' => \dnj\AAA\Models\User::class, 'routes' => [ 'enable' => true, @@ -58,18 +58,20 @@ return [ --- ℹ️ **Note** -> User activity logs are **enabled** by default, if you want to save them set `$userActivityLog` to false. +> User activity logs are **disabled** by default, if you want to save them set `$userActivityLog` to true. Example : ```php -$appManager = app(\dnj\ErrorTracker\Contracts\IApp::class); +use dnj\ErrorTracker\Contracts\IAppManager; + +$appManager = app(IAppManager::class); + $app = $appManager->store( - title:'Sell Department', - ownerId: 1, - OwnerIdColumn: 'owner_id', - extra: json_encode(['data' => 'etc']), - userActivityLog: false // disabled + title: 'Android mobile app', + owner: 1, + meta: ['key' => 'value']), + userActivityLog: false, ); ``` @@ -78,50 +80,59 @@ $app = $appManager->store( * Search Applications: ```php -$appManager = app(\dnj\ErrorTracker\Contracts\IApp::class); +use dnj\ErrorTracker\Contracts\IAppManager; -$app = $appManager->search( - filters: - ['title' => 'sales'], - ['owner' => 1], - ['user' => '1'] +$appManager = app(IAppManager::class); + +$apps = $appManager->search( + filters: [ + 'title' => 'mobile app' + 'owner' => 2 + ], ); ``` * Create new Application: ```php -$appManager = app(\dnj\ErrorTracker\Contracts\IAppManager::class); +use dnj\ErrorTracker\Contracts\IAppManager; + +$appManager = app(IAppManager::class); $app = $appManager->store( - title:'new application', - ownerId: 1, - OwnerIdColumn: 'owner_id', - extra: json_encode(['data' => 'etc'])); + title: 'Android mobile app', + owner: 1, + meta: ['key' => 'value']), + userActivityLog: false, +); ``` * Update Application: ```php -$appManager = app(\dnj\ErrorTracker\Contracts\IAppManager::class); +use dnj\ErrorTracker\Contracts\IAppManager; + +$appManager = app(IAppManager::class); $app = $appManager->update( - id:1, + app: 1, changes: [ - 'title' => 'new title', - 'ownerId' => 1, - 'extra' => ['any'], - ] -); + 'title' => 'new title', + 'owner' => 2, + ], + userActivityLog: true, +); ``` * Delete application: ```php -$appManager = app(\dnj\ErrorTracker\Contracts\IAppManager::class); +use dnj\ErrorTracker\Contracts\IAppManager; + +$appManager = app(IAppManager::class); $appManager->destroy( - id:1, + log: 1, userActivityLog: false, ); @@ -134,50 +145,61 @@ $appManager->destroy( * Search Device: ```php -$deviceManager = app(\dnj\ErrorTracker\Contracts\IDeviceManager::class); +use dnj\ErrorTracker\Contracts\IDeviceManager; -$app = $deviceManager->search( - filters: - ['title' => 'device'], - ['owner' => 1], - ['user' => '1'] +$deviceManager = app(IDeviceManager::class); + +$devices = $deviceManager->search( + filters: [ + 'title' => 'Nokia Mobile' + 'owner' => 2 + ], ); ``` * Create new device: ```php -$deviceManager = app(\dnj\ErrorTracker\Contracts\IDeviceManager::class); +use dnj\ErrorTracker\Contracts\IDeviceManager; + +$deviceManager = app(IDeviceManager::class); -$app = $deviceManager->store( - title:'new device', - ownerId: 1, - OwnerIdColumn: 'owner_id', - extra: json_encode(['data' => 'etc'])); +$device = $deviceManager->store( + title: 'Nokia mobile', + owner: 1, + meta: ['key' => 'value']), + userActivityLog: false, +); ``` * Update Device: ```php -$deviceManager = app(\dnj\ErrorTracker\Contracts\IDeviceManager::class); +use dnj\ErrorTracker\Contracts\IDeviceManager; + +$deviceManager = app(IDeviceManager::class); $device = $deviceManager->update( - id:1, + device: 3, changes: [ - 'title' => 'new device name', - 'ownerId' => 1, - 'extra' => ['any'], - ] -); + 'title' => 'My Nokia Mobile', + 'owner' => 2, + 'meta' => ['serialNo' => 55245252] + ], + userActivityLog: true, +); + ``` * Delete application: ```php -$deviceManager = app(\dnj\ErrorTracker\Contracts\IDeviceManager::class); +use dnj\ErrorTracker\Contracts\IDeviceManager; + +$deviceManager = app(IDeviceManager::class); $deviceManager->destroy( - id:1, + log: 3, userActivityLog: false, ); ``` @@ -189,70 +211,74 @@ $deviceManager->destroy( * Search Device: ```php -use \dnj\ErrorTracker\Contracts\LogLevel; -$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); - -$log = $logManager->search( - filters: - ['apps' => 1], // app id - ['devices' => 1], // devices id - ['level' => LogLevel::INFO] // importance - ['message' => 'text'] // message - ['unread' => true] // bool = true OR false - ['user' => 1] // user id +use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Contracts\LogLevel; + +$logManager = app(ILogManager::class); + +$logs = $logManager->search( + filters: [ + 'apps' => [1,2], + 'devices' => [1], + 'levels' => [LogLevel::DEBUG], + 'message' => 'important flag', + 'unread' => true, + ] ); ``` * Create new log: ```php -use \dnj\ErrorTracker\Contracts\LogLevel; +use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Contracts\LogLevel; -$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); +$logManager = app(ILogManager::class); $log = $logManager->store( - app: 1, // app id - device: 1, // device id - level: LogLevel::INFO, // importance - message: 'message', // message - data: ['data' => 'any'], // data - read: ['userId' => 1, 'readAt' => Carbon::now()] // read or not read - extra: json_encode(['data' => 'etc']) // extra - ); + app: 1, + device: 1, + level: LogLevel::INFO, + message: 'App has been started', +); ``` * Mark as read log: ```php -$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); +use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Contracts\LogLevel; + +$logManager = app(ILogManager::class); $log = $logManager->markAsRead( - id:1, - readAt: Carbon::now(); + log: 44, + user: 3 ); - - ``` * Mark as unread log: ```php -$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); +use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Contracts\LogLevel; + +$logManager = app(ILogManager::class); $log = $logManager->markAsUnread( - id:1, - userId: null, - readAt: null, + log: 44, ); ``` * Delete log: ```php -$logManager = app(\dnj\ErrorTracker\Contracts\ILogManager::class); +use dnj\ErrorTracker\Contracts\ILogManager; + +$logManager = app(ILogManager::class); $logManager->destroy( - id:1, - userActivityLog: false, + log: 44, + userActivityLog: true, ); ``` @@ -266,21 +292,6 @@ You can run unit tests with PHP Unit: ./vendor/bin/phpunit ``` -## How To use restful API - -A document in YAML format has been prepared for better familiarization and use of package web services. which is placed -in the `docs/APIs` folder. - -**Postman:** - -* laravel-error-tracker-server.json - -**Open API:** - -* openApi.yaml - -To use this file, you can import it on the [stoplight.io](https://stoplight.io) site and see all available web services. -Or open with PhpStorm. ## Contribution diff --git a/composer.json b/composer.json index a508cef..e584648 100644 --- a/composer.json +++ b/composer.json @@ -4,38 +4,30 @@ "autoload": { "psr-4": { "dnj\\ErrorTracker\\Laravel\\Server\\": "src/", - "dnj\\ErrorTracker\\Database\\Factories\\": "database/factories/" - }, - "files": [ - "src/Helpers/helpers.php" - ] + "dnj\\ErrorTracker\\Laravel\\Database\\Factories\\": "database/factories/" + } }, "autoload-dev": { "psr-4": { "dnj\\ErrorTracker\\Laravel\\Server\\Tests\\": "tests/" } }, - "scripts": { - "test:phpunit": "vendor/bin/phpunit", - "test:codestyle": "vendor/bin/php-cs-fixer fix -v --dry-run --stop-on-violation --using-cache=no", - "test": [ - "@test:types", - "@test:phpunit", - "@test:codestyle" - ] - }, "require": { - "php": "^8.1" + "php": "^8.1", + "dnj/laravel-user-logger": "@dev", + "dnj/error-tracker-contracts": "@dev" }, "require-dev": { - "phpunit/phpunit": "10.0.4", - "friendsofphp/php-cs-fixer": "^3.1", - "dnj/laravel-user-logger": "dev-master", - "dnj/error-tracker-contracts": "@dev", - "orchestra/testbench": "8.x-dev" + "phpunit/phpunit": "^9", + "friendsofphp/php-cs-fixer": "^3.11", + "orchestra/testbench": "^7.0" }, "minimum-stability": "dev", "prefer-stable": true, + "scripts": { + "test:phpunit": "vendor/bin/phpunit", + "test:codestyle": "vendor/bin/php-cs-fixer fix -v --dry-run --stop-on-violation --using-cache=no" + }, "extra": { "laravel": { "providers": [ @@ -43,4 +35,4 @@ ] } } -} +} \ No newline at end of file diff --git a/composer.lock b/composer.lock index 38491a8..cee383e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,31 +4,164 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4bde6004ed485147fc8b38b14a7668a1", - "packages": [], + "content-hash": "4baec4c6f3912b6d74406025cedf237b", + "packages": [ + { + "name": "dnj/error-tracker-contracts", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dnj/php-error-tracker-contracts.git", + "reference": "1cb059b659bce4094ebdaf3a370e5e53499c353c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnj/php-error-tracker-contracts/zipball/1cb059b659bce4094ebdaf3a370e5e53499c353c", + "reference": "1cb059b659bce4094ebdaf3a370e5e53499c353c", + "shasum": "" + }, + "require": { + "dnj/laravel-aaa": "@dev", + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11" + }, + "default-branch": true, + "type": "library", + "autoload": { + "psr-4": { + "dnj\\ErrorTracker\\Contracts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/dnj/php-error-tracker-contracts/issues", + "source": "https://github.com/dnj/php-error-tracker-contracts/tree/master" + }, + "time": "2023-02-28T13:17:42+00:00" + }, + { + "name": "dnj/laravel-aaa", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dnj/laravel-aaa.git", + "reference": "7ffef7f5a20d68b97d22cfd18e2365fadef396d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnj/laravel-aaa/zipball/7ffef7f5a20d68b97d22cfd18e2365fadef396d0", + "reference": "7ffef7f5a20d68b97d22cfd18e2365fadef396d0", + "shasum": "" + }, + "require": { + "dnj/laravel-user-logger": "@dev", + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11", + "orchestra/testbench": "^7.0", + "phpstan/phpstan": "^1.4.1", + "phpunit/phpunit": "^9.5" + }, + "default-branch": true, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "dnj\\AAA\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "dnj\\AAA\\": "src/", + "dnj\\AAA\\Database\\Factories\\": "database/factories/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/dnj/laravel-aaa/issues", + "source": "https://github.com/dnj/laravel-aaa/tree/master" + }, + "time": "2023-02-28T09:29:13+00:00" + }, + { + "name": "dnj/laravel-user-logger", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/dnj/laravel-user-logger.git", + "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/dnj/laravel-user-logger/zipball/9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", + "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "friendsofphp/php-cs-fixer": "^3.11", + "orchestra/testbench": "^7.0", + "phpunit/phpunit": "^9" + }, + "default-branch": true, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "dnj\\UserLogger\\ServiceProvider" + ] + } + }, + "autoload": { + "psr-4": { + "dnj\\UserLogger\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/dnj/laravel-user-logger/issues", + "source": "https://github.com/dnj/laravel-user-logger/tree/master" + }, + "time": "2023-01-03T10:34:23+00:00" + } + ], "packages-dev": [ { "name": "brick/math", - "version": "0.10.2", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f" + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/459f2781e1a08d52ee56b0b1444086e038561e3f", - "reference": "459f2781e1a08d52ee56b0b1444086e038561e3f", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.4 || ^8.0" + "php": "^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", "phpunit/phpunit": "^9.0", - "vimeo/psalm": "4.25.0" + "vimeo/psalm": "5.0.0" }, "type": "library", "autoload": { @@ -53,7 +186,7 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.10.2" + "source": "https://github.com/brick/math/tree/0.11.0" }, "funding": [ { @@ -61,7 +194,7 @@ "type": "github" } ], - "time": "2022-08-10T22:54:19+00:00" + "time": "2023-01-15T23:15:59+00:00" }, { "name": "composer/pcre", @@ -356,115 +489,32 @@ }, "time": "2022-10-27T11:44:00+00:00" }, - { - "name": "dnj/error-tracker-contracts", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/dnj/php-error-tracker-contracts.git", - "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnj/php-error-tracker-contracts/zipball/b2be0241e1d622bef4da7f6b741246f8410c884c", - "reference": "b2be0241e1d622bef4da7f6b741246f8410c884c", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.11" - }, - "default-branch": true, - "type": "library", - "autoload": { - "psr-4": { - "dnj\\ErrorTracker\\Contracts\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "support": { - "issues": "https://github.com/dnj/php-error-tracker-contracts/issues", - "source": "https://github.com/dnj/php-error-tracker-contracts/tree/master" - }, - "time": "2023-01-28T20:45:11+00:00" - }, - { - "name": "dnj/laravel-user-logger", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://github.com/dnj/laravel-user-logger.git", - "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/dnj/laravel-user-logger/zipball/9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", - "reference": "9d3b9018bd57289ea9377c3a1b6779a1b6b5adf5", - "shasum": "" - }, - "require": { - "php": "^8.1" - }, - "require-dev": { - "friendsofphp/php-cs-fixer": "^3.11", - "orchestra/testbench": "^7.0", - "phpunit/phpunit": "^9" - }, - "default-branch": true, - "type": "library", - "extra": { - "laravel": { - "providers": [ - "dnj\\UserLogger\\ServiceProvider" - ] - } - }, - "autoload": { - "psr-4": { - "dnj\\UserLogger\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "support": { - "issues": "https://github.com/dnj/laravel-user-logger/issues", - "source": "https://github.com/dnj/laravel-user-logger/tree/master" - }, - "time": "2023-01-03T10:34:23+00:00" - }, { "name": "doctrine/annotations", - "version": "1.14.3", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/annotations.git", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af" + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/annotations/zipball/fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", - "reference": "fb0d71a7393298a7b232cbf4c8b1f73f3ec3d5af", + "url": "https://api.github.com/repos/doctrine/annotations/zipball/e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", + "reference": "e157ef3f3124bbf6fe7ce0ffd109e8a8ef284e7f", "shasum": "" }, "require": { - "doctrine/lexer": "^1 || ^2", + "doctrine/lexer": "^2 || ^3", "ext-tokenizer": "*", - "php": "^7.1 || ^8.0", + "php": "^7.2 || ^8.0", "psr/cache": "^1 || ^2 || ^3" }, "require-dev": { - "doctrine/cache": "^1.11 || ^2.0", - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "~1.4.10 || ^1.8.0", + "doctrine/cache": "^2.0", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.8.0", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "symfony/cache": "^4.4 || ^5.4 || ^6", + "symfony/cache": "^5.4 || ^6", "vimeo/psalm": "^4.10" }, "suggest": { @@ -511,52 +561,9 @@ ], "support": { "issues": "https://github.com/doctrine/annotations/issues", - "source": "https://github.com/doctrine/annotations/tree/1.14.3" + "source": "https://github.com/doctrine/annotations/tree/2.0.1" }, - "time": "2023-02-01T09:20:38+00:00" - }, - { - "name": "doctrine/deprecations", - "version": "v1.0.0", - "source": { - "type": "git", - "url": "https://github.com/doctrine/deprecations.git", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "reference": "0e2a4f1f8cdfc7a92ec3b01c9334898c806b30de", - "shasum": "" - }, - "require": { - "php": "^7.1|^8.0" - }, - "require-dev": { - "doctrine/coding-standard": "^9", - "phpunit/phpunit": "^7.5|^8.5|^9.5", - "psr/log": "^1|^2|^3" - }, - "suggest": { - "psr/log": "Allows logging deprecations via PSR-3 logger implementation" - }, - "type": "library", - "autoload": { - "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "description": "A small layer on top of trigger_error(E_USER_DEPRECATED) or PSR-3 logging with options to disable all deprecations or selectively for packages.", - "homepage": "https://www.doctrine-project.org/", - "support": { - "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/v1.0.0" - }, - "time": "2022-05-02T15:47:09+00:00" + "time": "2023-02-02T22:02:53+00:00" }, { "name": "doctrine/inflector", @@ -649,30 +656,99 @@ ], "time": "2022-10-20T09:10:12+00:00" }, + { + "name": "doctrine/instantiator", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/doctrine/instantiator.git", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "require-dev": { + "doctrine/coding-standard": "^11", + "ext-pdo": "*", + "ext-phar": "*", + "phpbench/phpbench": "^1.2", + "phpstan/phpstan": "^1.9.4", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5.27", + "vimeo/psalm": "^5.4" + }, + "type": "library", + "autoload": { + "psr-4": { + "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Marco Pivetta", + "email": "ocramius@gmail.com", + "homepage": "https://ocramius.github.io/" + } + ], + "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors", + "homepage": "https://www.doctrine-project.org/projects/instantiator.html", + "keywords": [ + "constructor", + "instantiate" + ], + "support": { + "issues": "https://github.com/doctrine/instantiator/issues", + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" + }, + "funding": [ + { + "url": "https://www.doctrine-project.org/sponsorship.html", + "type": "custom" + }, + { + "url": "https://www.patreon.com/phpdoctrine", + "type": "patreon" + }, + { + "url": "https://tidelift.com/funding/github/packagist/doctrine%2Finstantiator", + "type": "tidelift" + } + ], + "time": "2022-12-30T00:23:10+00:00" + }, { "name": "doctrine/lexer", - "version": "2.1.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", - "reference": "39ab8fcf5a51ce4b85ca97c7a7d033eb12831124", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "doctrine/deprecations": "^1.0", - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^9 || ^10", - "phpstan/phpstan": "^1.3", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^4.11 || ^5.0" + "vimeo/psalm": "^5.0" }, "type": "library", "autoload": { @@ -709,7 +785,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/2.1.0" + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { @@ -725,7 +801,7 @@ "type": "tidelift" } ], - "time": "2022-12-14T08:49:07+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { "name": "dragonmantank/cron-expression", @@ -925,51 +1001,52 @@ }, { "name": "friendsofphp/php-cs-fixer", - "version": "v3.9.5", + "version": "v3.14.4", "source": { "type": "git", - "url": "https://github.com/FriendsOfPHP/PHP-CS-Fixer.git", - "reference": "4465d70ba776806857a1ac2a6f877e582445ff36" + "url": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer.git", + "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FriendsOfPHP/PHP-CS-Fixer/zipball/4465d70ba776806857a1ac2a6f877e582445ff36", - "reference": "4465d70ba776806857a1ac2a6f877e582445ff36", + "url": "https://api.github.com/repos/PHP-CS-Fixer/PHP-CS-Fixer/zipball/1b3d9dba63d93b8a202c31e824748218781eae6b", + "reference": "1b3d9dba63d93b8a202c31e824748218781eae6b", "shasum": "" }, "require": { - "composer/semver": "^3.2", + "composer/semver": "^3.3", "composer/xdebug-handler": "^3.0.3", - "doctrine/annotations": "^1.13", + "doctrine/annotations": "^2", + "doctrine/lexer": "^2 || ^3", "ext-json": "*", "ext-tokenizer": "*", "php": "^7.4 || ^8.0", - "php-cs-fixer/diff": "^2.0", + "sebastian/diff": "^4.0 || ^5.0", "symfony/console": "^5.4 || ^6.0", "symfony/event-dispatcher": "^5.4 || ^6.0", "symfony/filesystem": "^5.4 || ^6.0", "symfony/finder": "^5.4 || ^6.0", "symfony/options-resolver": "^5.4 || ^6.0", - "symfony/polyfill-mbstring": "^1.23", - "symfony/polyfill-php80": "^1.25", - "symfony/polyfill-php81": "^1.25", + "symfony/polyfill-mbstring": "^1.27", + "symfony/polyfill-php80": "^1.27", + "symfony/polyfill-php81": "^1.27", "symfony/process": "^5.4 || ^6.0", "symfony/stopwatch": "^5.4 || ^6.0" }, "require-dev": { "justinrainbow/json-schema": "^5.2", - "keradus/cli-executor": "^1.5", - "mikey179/vfsstream": "^1.6.10", - "php-coveralls/php-coveralls": "^2.5.2", + "keradus/cli-executor": "^2.0", + "mikey179/vfsstream": "^1.6.11", + "php-coveralls/php-coveralls": "^2.5.3", "php-cs-fixer/accessible-object": "^1.1", "php-cs-fixer/phpunit-constraint-isidenticalstring": "^1.2", "php-cs-fixer/phpunit-constraint-xmlmatchesxsd": "^1.2.1", - "phpspec/prophecy": "^1.15", + "phpspec/prophecy": "^1.16", "phpspec/prophecy-phpunit": "^2.0", "phpunit/phpunit": "^9.5", - "phpunitgoodpractices/polyfill": "^1.5", - "phpunitgoodpractices/traits": "^1.9.1", - "symfony/phpunit-bridge": "^6.0", + "phpunitgoodpractices/polyfill": "^1.6", + "phpunitgoodpractices/traits": "^1.9.2", + "symfony/phpunit-bridge": "^6.2.3", "symfony/yaml": "^5.4 || ^6.0" }, "suggest": { @@ -1001,8 +1078,8 @@ ], "description": "A tool to automatically fix PHP code style", "support": { - "issues": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues", - "source": "https://github.com/FriendsOfPHP/PHP-CS-Fixer/tree/v3.9.5" + "issues": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/issues", + "source": "https://github.com/PHP-CS-Fixer/PHP-CS-Fixer/tree/v3.14.4" }, "funding": [ { @@ -1010,7 +1087,7 @@ "type": "github" } ], - "time": "2022-07-22T08:43:51+00:00" + "time": "2023-02-09T21:49:13+00:00" }, { "name": "fruitcake/php-cors", @@ -1085,24 +1162,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.0", + "version": "v1.1.1", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8" + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/a878d45c1914464426dc94da61c9e1d36ae262a8", - "reference": "a878d45c1914464426dc94da61c9e1d36ae262a8", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", + "reference": "672eff8cf1d6fe1ef09ca0f89c4b287d6a3eb831", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9" + "phpoption/phpoption": "^1.9.1" }, "require-dev": { - "phpunit/phpunit": "^8.5.28 || ^9.5.21" + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" }, "type": "library", "autoload": { @@ -1131,7 +1208,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.0" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.1" }, "funding": [ { @@ -1143,7 +1220,7 @@ "type": "tidelift" } ], - "time": "2022-07-30T15:56:11+00:00" + "time": "2023-02-25T20:23:15+00:00" }, { "name": "guzzlehttp/psr7", @@ -1264,6 +1341,90 @@ ], "time": "2022-10-26T14:07:24+00:00" }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/b945d74a55a25a949158444f09ec0d3c120d69e2", + "reference": "b945d74a55a25a949158444f09ec0d3c120d69e2", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.17" + }, + "require-dev": { + "phpunit/phpunit": "^8.5.19 || ^9.5.8", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\UriTemplate\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "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" + } + ], + "description": "A polyfill class for uri_template of PHP", + "keywords": [ + "guzzlehttp", + "uri-template" + ], + "support": { + "issues": "https://github.com/guzzle/uri-template/issues", + "source": "https://github.com/guzzle/uri-template/tree/v1.0.1" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/uri-template", + "type": "tidelift" + } + ], + "time": "2021-10-07T12:57:01+00:00" + }, { "name": "hamcrest/hamcrest-php", "version": "v2.0.1", @@ -1317,16 +1478,16 @@ }, { "name": "laravel/framework", - "version": "10.x-dev", + "version": "v9.52.4", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "22413d4e16080f3fa1a8708bc969af32641b016a" + "reference": "9239128cfb4d22afefb64060dfecf53e82987267" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/22413d4e16080f3fa1a8708bc969af32641b016a", - "reference": "22413d4e16080f3fa1a8708bc969af32641b016a", + "url": "https://api.github.com/repos/laravel/framework/zipball/9239128cfb4d22afefb64060dfecf53e82987267", + "reference": "9239128cfb4d22afefb64060dfecf53e82987267", "shasum": "" }, "require": { @@ -1334,31 +1495,37 @@ "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.3.2", "egulias/email-validator": "^3.2.1|^4.0", + "ext-ctype": "*", + "ext-filter": "*", + "ext-hash": "*", "ext-mbstring": "*", "ext-openssl": "*", + "ext-session": "*", + "ext-tokenizer": "*", "fruitcake/php-cors": "^1.2", - "laravel/serializable-closure": "^1.3", + "guzzlehttp/uri-template": "^1.0", + "laravel/serializable-closure": "^1.2.2", "league/commonmark": "^2.2.1", "league/flysystem": "^3.8.0", - "monolog/monolog": "^3.0", + "monolog/monolog": "^2.0", "nesbot/carbon": "^2.62.1", "nunomaduro/termwind": "^1.13", - "php": "^8.1", + "php": "^8.0.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.7", - "symfony/console": "^6.2", - "symfony/error-handler": "^6.2", - "symfony/finder": "^6.2", - "symfony/http-foundation": "^6.2", - "symfony/http-kernel": "^6.2", - "symfony/mailer": "^6.2", - "symfony/mime": "^6.2", - "symfony/process": "^6.2", - "symfony/routing": "^6.2", - "symfony/uid": "^6.2", - "symfony/var-dumper": "^6.2", + "symfony/console": "^6.0.9", + "symfony/error-handler": "^6.0", + "symfony/finder": "^6.0", + "symfony/http-foundation": "^6.0", + "symfony/http-kernel": "^6.0", + "symfony/mailer": "^6.0", + "symfony/mime": "^6.0", + "symfony/process": "^6.0", + "symfony/routing": "^6.0", + "symfony/uid": "^6.0", + "symfony/var-dumper": "^6.0", "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" @@ -1407,7 +1574,8 @@ "require-dev": { "ably/ably-php": "^1.0", "aws/aws-sdk-php": "^3.235.5", - "doctrine/dbal": "^3.5.1", + "doctrine/dbal": "^2.13.3|^3.1.4", + "ext-gmp": "*", "fakerphp/faker": "^1.21", "guzzlehttp/guzzle": "^7.5", "league/flysystem-aws-s3-v3": "^3.0", @@ -1416,24 +1584,27 @@ "league/flysystem-read-only": "^3.3", "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.0", + "orchestra/testbench-core": "^7.16", "pda/pheanstalk": "^4.0", "phpstan/phpdoc-parser": "^1.15", "phpstan/phpstan": "^1.4.7", - "phpunit/phpunit": "^9.6.0 || ^10.0.1", - "predis/predis": "^2.0.2", - "symfony/cache": "^6.2", - "symfony/http-client": "^6.2.4" + "phpunit/phpunit": "^9.5.8", + "predis/predis": "^1.1.9|^2.0.2", + "symfony/cache": "^6.0", + "symfony/http-client": "^6.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.235.5).", "brianium/paratest": "Required to run tests in parallel (^6.0).", - "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^2.13.3|^3.1.4).", + "ext-apcu": "Required to use the APC cache driver.", + "ext-fileinfo": "Required to use the Filesystem class.", "ext-ftp": "Required to use the Flysystem FTP driver.", "ext-gd": "Required to use Illuminate\\Http\\Testing\\FileFactory::image().", "ext-memcached": "Required to use the memcache cache driver.", - "ext-pcntl": "Required to use all features of the queue worker.", + "ext-pcntl": "Required to use all features of the queue worker and console signal trapping.", + "ext-pdo": "Required to use all database features.", "ext-posix": "Required to use all features of the queue worker.", "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", @@ -1449,20 +1620,20 @@ "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", - "predis/predis": "Required to use the predis connector (^2.0.2).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^6.2).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^6.2).", - "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.2).", - "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.2).", - "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.2).", + "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", + "symfony/filesystem": "Required to enable support for relative symbolic links (^6.0).", + "symfony/http-client": "Required to enable support for the Symfony API mail transports (^6.0).", + "symfony/mailgun-mailer": "Required to enable support for the Mailgun mail transport (^6.0).", + "symfony/postmark-mailer": "Required to enable support for the Postmark mail transport (^6.0).", "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "10.x-dev" + "dev-master": "9.x-dev" } }, "autoload": { @@ -1501,7 +1672,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-02-05T16:51:29+00:00" + "time": "2023-02-22T14:38:06+00:00" }, { "name": "laravel/serializable-closure", @@ -1565,16 +1736,16 @@ }, { "name": "league/commonmark", - "version": "2.3.8", + "version": "2.3.9", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47" + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c493585c130544c4e91d2e0e131e6d35cb0cbc47", - "reference": "c493585c130544c4e91d2e0e131e6d35cb0cbc47", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/c1e114f74e518daca2729ea8c4bf1167038fa4b5", + "reference": "c1e114f74e518daca2729ea8c4bf1167038fa4b5", "shasum": "" }, "require": { @@ -1667,7 +1838,7 @@ "type": "tidelift" } ], - "time": "2022-12-10T16:02:17+00:00" + "time": "2023-02-15T14:07:24+00:00" }, { "name": "league/config", @@ -1753,16 +1924,16 @@ }, { "name": "league/flysystem", - "version": "3.12.2", + "version": "3.12.3", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f" + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f6377c709d2275ed6feaf63e44be7a7162b0e77f", - "reference": "f6377c709d2275ed6feaf63e44be7a7162b0e77f", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/81e87e74dd5213795c7846d65089712d2dda90ce", + "reference": "81e87e74dd5213795c7846d65089712d2dda90ce", "shasum": "" }, "require": { @@ -1824,7 +1995,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.12.2" + "source": "https://github.com/thephpleague/flysystem/tree/3.12.3" }, "funding": [ { @@ -1840,7 +2011,7 @@ "type": "tidelift" } ], - "time": "2023-01-19T12:02:19+00:00" + "time": "2023-02-18T15:32:41+00:00" }, { "name": "league/mime-type-detection", @@ -1972,41 +2143,42 @@ }, { "name": "monolog/monolog", - "version": "3.3.1", + "version": "2.9.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "9b5daeaffce5b926cac47923798bba91059e60e2" + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/9b5daeaffce5b926cac47923798bba91059e60e2", - "reference": "9b5daeaffce5b926cac47923798bba91059e60e2", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/f259e2b15fb95494c83f52d3caad003bbf5ffaa1", + "reference": "f259e2b15fb95494c83f52d3caad003bbf5ffaa1", "shasum": "" }, "require": { - "php": ">=8.1", - "psr/log": "^2.0 || ^3.0" + "php": ">=7.2", + "psr/log": "^1.0.1 || ^2.0 || ^3.0" }, "provide": { - "psr/log-implementation": "3.0.0" + "psr/log-implementation": "1.0.0 || 2.0.0 || 3.0.0" }, "require-dev": { - "aws/aws-sdk-php": "^3.0", + "aws/aws-sdk-php": "^2.4.9 || ^3.0", "doctrine/couchdb": "~1.0@dev", "elasticsearch/elasticsearch": "^7 || ^8", "ext-json": "*", "graylog2/gelf-php": "^1.4.2 || ^2@dev", - "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/guzzle": "^7.4", "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "phpstan/phpstan": "^1.9", - "phpstan/phpstan-deprecation-rules": "^1.0", - "phpstan/phpstan-strict-rules": "^1.4", - "phpunit/phpunit": "^9.5.26", - "predis/predis": "^1.1 || ^2", + "phpspec/prophecy": "^1.15", + "phpstan/phpstan": "^0.12.91", + "phpunit/phpunit": "^8.5.14", + "predis/predis": "^1.1 || ^2.0", + "rollbar/rollbar": "^1.3 || ^2 || ^3", "ruflin/elastica": "^7", + "swiftmailer/swiftmailer": "^5.3|^6.0", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -2029,7 +2201,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "3.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -2057,7 +2229,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.3.1" + "source": "https://github.com/Seldaek/monolog/tree/2.9.1" }, "funding": [ { @@ -2069,7 +2241,7 @@ "type": "tidelift" } ], - "time": "2023-02-06T13:46:10+00:00" + "time": "2023-02-06T13:44:46+00:00" }, { "name": "myclabs/deep-copy", @@ -2439,16 +2611,16 @@ }, { "name": "nunomaduro/termwind", - "version": "v1.15.0", + "version": "v1.15.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d" + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/594ab862396c16ead000de0c3c38f4a5cbe1938d", - "reference": "594ab862396c16ead000de0c3c38f4a5cbe1938d", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", "shasum": "" }, "require": { @@ -2505,7 +2677,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.0" + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" }, "funding": [ { @@ -2521,39 +2693,38 @@ "type": "github" } ], - "time": "2022-12-20T19:00:15+00:00" + "time": "2023-02-08T01:06:31+00:00" }, { "name": "orchestra/testbench", - "version": "8.x-dev", + "version": "v7.22.1", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "6814aa267566e0ecece2cdd74b1bda924bc5079e" + "reference": "987f5383f597a54f8d9868f98411899398348c02" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/6814aa267566e0ecece2cdd74b1bda924bc5079e", - "reference": "6814aa267566e0ecece2cdd74b1bda924bc5079e", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/987f5383f597a54f8d9868f98411899398348c02", + "reference": "987f5383f597a54f8d9868f98411899398348c02", "shasum": "" }, "require": { "fakerphp/faker": "^1.21", - "laravel/framework": "^10.0", + "laravel/framework": "^9.52.4", "mockery/mockery": "^1.5.1", - "orchestra/testbench-core": "^8.0", - "php": "^8.1", - "phpunit/phpunit": "^9.6 || ^10.0.1", - "spatie/laravel-ray": "^1.32", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", - "vlucas/phpdotenv": "^5.5.0" + "orchestra/testbench-core": "^7.22.1", + "php": "^8.0", + "phpunit/phpunit": "^9.5.10", + "spatie/laravel-ray": "^1.28", + "symfony/process": "^6.0.9", + "symfony/yaml": "^6.0.9", + "vlucas/phpdotenv": "^5.4.1" }, - "default-branch": true, "type": "library", "extra": { "branch-alias": { - "dev-master": "8.0-dev" + "dev-master": "7.0-dev" } }, "notification-url": "https://packagist.org/downloads/", @@ -2579,60 +2750,59 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/8.x" + "source": "https://github.com/orchestral/testbench/tree/v7.22.1" }, - "time": "2023-02-06T09:46:42+00:00" + "time": "2023-02-24T01:07:22+00:00" }, { "name": "orchestra/testbench-core", - "version": "8.x-dev", + "version": "v7.22.1", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "bd033dd176ec1989e836ba5a2b6daf6873e6bb40" + "reference": "75b42f9130e7903ffa0ef8dbb466962ca6635261" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/bd033dd176ec1989e836ba5a2b6daf6873e6bb40", - "reference": "bd033dd176ec1989e836ba5a2b6daf6873e6bb40", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/75b42f9130e7903ffa0ef8dbb466962ca6635261", + "reference": "75b42f9130e7903ffa0ef8dbb466962ca6635261", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^8.0" }, "require-dev": { "fakerphp/faker": "^1.21", - "laravel/framework": "^10.0", + "laravel/framework": "^9.52.4", "laravel/pint": "^1.4", "mockery/mockery": "^1.5.1", - "orchestra/canvas": "^8.0", + "orchestra/canvas": "^7.0", "phpstan/phpstan": "^1.9.14", - "phpunit/phpunit": "^9.6 || ^10.0.1", - "spatie/laravel-ray": "^1.32", - "symfony/process": "^6.2", - "symfony/yaml": "^6.2", - "vlucas/phpdotenv": "^5.5.0" + "phpunit/phpunit": "^9.5.10", + "spatie/laravel-ray": "^1.28", + "symfony/process": "^6.0.9", + "symfony/yaml": "^6.0.9", + "vlucas/phpdotenv": "^5.4.1" }, "suggest": { - "brianium/paratest": "Allow using parallel tresting (^6.4 || ^7.0).", + "brianium/paratest": "Allow using parallel tresting (^6.4).", "fakerphp/faker": "Allow using Faker for testing (^1.21).", - "laravel/framework": "Required for testing (^10.0).", + "laravel/framework": "Required for testing (^9.52.4).", "mockery/mockery": "Allow using Mockery for testing (^1.5.1).", - "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.4 || ^7.0).", - "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^8.0).", - "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^8.0).", - "phpunit/phpunit": "Allow using PHPUnit for testing (^9.5.27 || ^10.0).", - "symfony/yaml": "Required for CLI Commander (^6.2).", - "vlucas/phpdotenv": "Required for CLI Commander (^5.5.0)." + "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^6.2).", + "orchestra/testbench-browser-kit": "Allow using legacy Laravel BrowserKit for testing (^7.0).", + "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^7.0).", + "phpunit/phpunit": "Allow using PHPUnit for testing (^9.5.10).", + "symfony/yaml": "Required for CLI Commander (^6.0.9).", + "vlucas/phpdotenv": "Required for CLI Commander (^5.4.1)." }, - "default-branch": true, "bin": [ "testbench" ], "type": "library", "extra": { "branch-alias": { - "dev-master": "9.0-dev" + "dev-master": "7.0-dev" } }, "autoload": { @@ -2668,7 +2838,7 @@ "issues": "https://github.com/orchestral/testbench/issues", "source": "https://github.com/orchestral/testbench-core" }, - "time": "2023-02-06T13:38:39+00:00" + "time": "2023-02-23T12:15:23+00:00" }, { "name": "phar-io/manifest", @@ -2781,79 +2951,26 @@ }, "time": "2022-02-21T01:04:05+00:00" }, - { - "name": "php-cs-fixer/diff", - "version": "v2.0.2", - "source": { - "type": "git", - "url": "https://github.com/PHP-CS-Fixer/diff.git", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/PHP-CS-Fixer/diff/zipball/29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "reference": "29dc0d507e838c4580d018bd8b5cb412474f7ec3", - "shasum": "" - }, - "require": { - "php": "^5.6 || ^7.0 || ^8.0" - }, - "require-dev": { - "phpunit/phpunit": "^5.7.23 || ^6.4.3 || ^7.0", - "symfony/process": "^3.3" - }, - "type": "library", - "autoload": { - "classmap": [ - "src/" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "authors": [ - { - "name": "Sebastian Bergmann", - "email": "sebastian@phpunit.de" - }, - { - "name": "Kore Nordmann", - "email": "mail@kore-nordmann.de" - } - ], - "description": "sebastian/diff v3 backport support for PHP 5.6+", - "homepage": "https://github.com/PHP-CS-Fixer", - "keywords": [ - "diff" - ], - "support": { - "issues": "https://github.com/PHP-CS-Fixer/diff/issues", - "source": "https://github.com/PHP-CS-Fixer/diff/tree/v2.0.2" - }, - "abandoned": true, - "time": "2020-10-14T08:32:19+00:00" - }, { "name": "phpoption/phpoption", - "version": "1.9.0", + "version": "1.9.1", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab" + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", - "reference": "dc5ff11e274a90cc1c743f66c9ad700ce50db9ab", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/dd3a383e599f49777d8b628dadbb90cae435b87e", + "reference": "dd3a383e599f49777d8b628dadbb90cae435b87e", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.8", - "phpunit/phpunit": "^8.5.28 || ^9.5.21" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.32 || ^9.6.3 || ^10.0.12" }, "type": "library", "extra": { @@ -2895,7 +3012,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.0" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.1" }, "funding": [ { @@ -2907,39 +3024,39 @@ "type": "tidelift" } ], - "time": "2022-07-30T15:51:26+00:00" + "time": "2023-02-25T19:38:58+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "10.0.0", + "version": "9.2.25", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "bf4fbc9c13af7da12b3ea807574fb460f255daba" + "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/bf4fbc9c13af7da12b3ea807574fb460f255daba", - "reference": "bf4fbc9c13af7da12b3ea807574fb460f255daba", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/0e2b40518197a8c0d4b08bc34dfff1c99c508954", + "reference": "0e2b40518197a8c0d4b08bc34dfff1c99c508954", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.14", - "php": ">=8.1", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-text-template": "^3.0", - "sebastian/code-unit-reverse-lookup": "^3.0", - "sebastian/complexity": "^3.0", - "sebastian/environment": "^6.0", - "sebastian/lines-of-code": "^2.0", - "sebastian/version": "^4.0", + "nikic/php-parser": "^4.15", + "php": ">=7.3", + "phpunit/php-file-iterator": "^3.0.3", + "phpunit/php-text-template": "^2.0.2", + "sebastian/code-unit-reverse-lookup": "^2.0.2", + "sebastian/complexity": "^2.0", + "sebastian/environment": "^5.1.2", + "sebastian/lines-of-code": "^1.0.3", + "sebastian/version": "^3.0.1", "theseer/tokenizer": "^1.2.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcov": "*", @@ -2948,7 +3065,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.0-dev" + "dev-master": "9.2-dev" } }, "autoload": { @@ -2976,7 +3093,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/10.0.0" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.25" }, "funding": [ { @@ -2984,32 +3101,32 @@ "type": "github" } ], - "time": "2023-02-03T07:14:34+00:00" + "time": "2023-02-25T05:32:00+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "4.0.0", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "7d66d4e816d34e90acec9db9d8d94b5cfbfe926f" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/7d66d4e816d34e90acec9db9d8d94b5cfbfe926f", - "reference": "7d66d4e816d34e90acec9db9d8d94b5cfbfe926f", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -3036,7 +3153,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -3044,28 +3161,28 @@ "type": "github" } ], - "time": "2023-02-03T06:55:11+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", - "version": "4.0.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-invoker.git", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7" + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", - "reference": "f5e568ba02fa5ba0ddd0f618391d5a9ea50b06d7", + "url": "https://api.github.com/repos/sebastianbergmann/php-invoker/zipball/5a10147d0aaf65b58940a0b72f71c9ac0423cc67", + "reference": "5a10147d0aaf65b58940a0b72f71c9ac0423cc67", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { "ext-pcntl": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-pcntl": "*" @@ -3073,7 +3190,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "3.1-dev" } }, "autoload": { @@ -3099,7 +3216,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-invoker/issues", - "source": "https://github.com/sebastianbergmann/php-invoker/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/php-invoker/tree/3.1.1" }, "funding": [ { @@ -3107,32 +3224,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:09+00:00" + "time": "2020-09-28T05:58:55+00:00" }, { "name": "phpunit/php-text-template", - "version": "3.0.0", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-text-template.git", - "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d" + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/9f3d3709577a527025f55bcf0f7ab8052c8bb37d", - "reference": "9f3d3709577a527025f55bcf0f7ab8052c8bb37d", + "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", + "reference": "5da5f67fc95621df9ff4c4e5a84d6a8a2acf7c28", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -3158,7 +3275,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-text-template/issues", - "source": "https://github.com/sebastianbergmann/php-text-template/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/php-text-template/tree/2.0.4" }, "funding": [ { @@ -3166,32 +3283,32 @@ "type": "github" } ], - "time": "2023-02-03T06:56:46+00:00" + "time": "2020-10-26T05:33:50+00:00" }, { "name": "phpunit/php-timer", - "version": "6.0.0", + "version": "5.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-timer.git", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d" + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/e2a2d67966e740530f4a3343fe2e030ffdc1161d", - "reference": "e2a2d67966e740530f4a3343fe2e030ffdc1161d", + "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", + "reference": "5a63ce20ed1b5bf577850e2c4e87f4aa902afbd2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -3217,7 +3334,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-timer/issues", - "source": "https://github.com/sebastianbergmann/php-timer/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/php-timer/tree/5.0.3" }, "funding": [ { @@ -3225,23 +3342,24 @@ "type": "github" } ], - "time": "2023-02-03T06:57:52+00:00" + "time": "2020-10-26T13:16:10+00:00" }, { "name": "phpunit/phpunit", - "version": "10.0.4", + "version": "9.6.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "6be2d07cce2c7f812db007825a57da3b08972eaf" + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/6be2d07cce2c7f812db007825a57da3b08972eaf", - "reference": "6be2d07cce2c7f812db007825a57da3b08972eaf", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/9125ee085b6d95e78277dc07aa1f46f9e0607b8d", + "reference": "9125ee085b6d95e78277dc07aa1f46f9e0607b8d", "shasum": "" }, "require": { + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -3251,26 +3369,27 @@ "myclabs/deep-copy": "^1.10.1", "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", - "php": ">=8.1", - "phpunit/php-code-coverage": "^10.0", - "phpunit/php-file-iterator": "^4.0", - "phpunit/php-invoker": "^4.0", - "phpunit/php-text-template": "^3.0", - "phpunit/php-timer": "^6.0", - "sebastian/cli-parser": "^2.0", - "sebastian/code-unit": "^2.0", - "sebastian/comparator": "^5.0", - "sebastian/diff": "^5.0", - "sebastian/environment": "^6.0", - "sebastian/exporter": "^5.0", - "sebastian/global-state": "^6.0", - "sebastian/object-enumerator": "^5.0", - "sebastian/recursion-context": "^5.0", - "sebastian/type": "^4.0", - "sebastian/version": "^4.0" + "php": ">=7.3", + "phpunit/php-code-coverage": "^9.2.13", + "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-invoker": "^3.1.1", + "phpunit/php-text-template": "^2.0.3", + "phpunit/php-timer": "^5.0.2", + "sebastian/cli-parser": "^1.0.1", + "sebastian/code-unit": "^1.0.6", + "sebastian/comparator": "^4.0.8", + "sebastian/diff": "^4.0.3", + "sebastian/environment": "^5.1.3", + "sebastian/exporter": "^4.0.5", + "sebastian/global-state": "^5.0.1", + "sebastian/object-enumerator": "^4.0.3", + "sebastian/resource-operations": "^3.0.3", + "sebastian/type": "^3.2", + "sebastian/version": "^3.0.2" }, "suggest": { - "ext-soap": "*" + "ext-soap": "*", + "ext-xdebug": "*" }, "bin": [ "phpunit" @@ -3278,7 +3397,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "10.0-dev" + "dev-master": "9.6-dev" } }, "autoload": { @@ -3309,7 +3428,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/10.0.4" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.4" }, "funding": [ { @@ -3325,7 +3444,7 @@ "type": "tidelift" } ], - "time": "2023-02-05T16:23:38+00:00" + "time": "2023-02-27T13:06:37+00:00" }, { "name": "pimple/pimple", @@ -3876,20 +3995,20 @@ }, { "name": "ramsey/uuid", - "version": "4.7.3", + "version": "4.x-dev", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "433b2014e3979047db08a17a205f410ba3869cf2" + "reference": "bf2bee216a4379eaf62162307d62bb7850405fec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/433b2014e3979047db08a17a205f410ba3869cf2", - "reference": "433b2014e3979047db08a17a205f410ba3869cf2", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/bf2bee216a4379eaf62162307d62bb7850405fec", + "reference": "bf2bee216a4379eaf62162307d62bb7850405fec", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -3926,6 +4045,7 @@ "paragonie/random-lib": "Provides RandomLib for use with the RandomLibAdapter", "ramsey/uuid-doctrine": "Allows the use of Ramsey\\Uuid\\Uuid as Doctrine field type." }, + "default-branch": true, "type": "library", "extra": { "captainhook": { @@ -3952,7 +4072,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.3" + "source": "https://github.com/ramsey/uuid/tree/4.x" }, "funding": [ { @@ -3964,32 +4084,32 @@ "type": "tidelift" } ], - "time": "2023-01-12T18:13:24+00:00" + "time": "2023-02-07T16:14:23+00:00" }, { "name": "sebastian/cli-parser", - "version": "2.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae" + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/efdc130dbbbb8ef0b545a994fd811725c5282cae", - "reference": "efdc130dbbbb8ef0b545a994fd811725c5282cae", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -4012,7 +4132,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/2.0.0" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" }, "funding": [ { @@ -4020,32 +4140,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:15+00:00" + "time": "2020-09-28T06:08:49+00:00" }, { "name": "sebastian/code-unit", - "version": "2.0.0", + "version": "1.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503" + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/a81fee9eef0b7a76af11d121767abc44c104e503", - "reference": "a81fee9eef0b7a76af11d121767abc44c104e503", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/1fc9f64c0927627ef78ba436c9b17d967e68e120", + "reference": "1fc9f64c0927627ef78ba436c9b17d967e68e120", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -4068,7 +4188,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit", "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", - "source": "https://github.com/sebastianbergmann/code-unit/tree/2.0.0" + "source": "https://github.com/sebastianbergmann/code-unit/tree/1.0.8" }, "funding": [ { @@ -4076,32 +4196,32 @@ "type": "github" } ], - "time": "2023-02-03T06:58:43+00:00" + "time": "2020-10-26T13:08:54+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", - "version": "3.0.0", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit-reverse-lookup.git", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d" + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", - "reference": "5e3a687f7d8ae33fb362c5c0743794bbb2420a1d", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit-reverse-lookup/zipball/ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", + "reference": "ac91f01ccec49fb77bdc6fd1e548bc70f7faa3e5", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4123,7 +4243,7 @@ "homepage": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/", "support": { "issues": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/issues", - "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/code-unit-reverse-lookup/tree/2.0.3" }, "funding": [ { @@ -4131,36 +4251,34 @@ "type": "github" } ], - "time": "2023-02-03T06:59:15+00:00" + "time": "2020-09-28T05:30:19+00:00" }, { "name": "sebastian/comparator", - "version": "5.0.0", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/72f01e6586e0caf6af81297897bd112eb7e9627c", - "reference": "72f01e6586e0caf6af81297897bd112eb7e9627c", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { - "ext-dom": "*", - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/diff": "^5.0", - "sebastian/exporter": "^5.0" + "php": ">=7.3", + "sebastian/diff": "^4.0", + "sebastian/exporter": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4199,7 +4317,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -4207,33 +4325,33 @@ "type": "github" } ], - "time": "2023-02-03T07:07:16+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", - "version": "3.0.0", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6" + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/e67d240970c9dc7ea7b2123a6d520e334dd61dc6", - "reference": "e67d240970c9dc7ea7b2123a6d520e334dd61dc6", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", + "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", - "php": ">=8.1" + "nikic/php-parser": "^4.7", + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4256,7 +4374,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" }, "funding": [ { @@ -4264,33 +4382,33 @@ "type": "github" } ], - "time": "2023-02-03T06:59:47+00:00" + "time": "2020-10-26T15:52:27+00:00" }, { "name": "sebastian/diff", - "version": "5.0.0", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "70dd1b20bc198da394ad542e988381b44e64e39f" + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/70dd1b20bc198da394ad542e988381b44e64e39f", - "reference": "70dd1b20bc198da394ad542e988381b44e64e39f", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0", + "phpunit/phpunit": "^9.3", "symfony/process": "^4.2 || ^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4322,7 +4440,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" }, "funding": [ { @@ -4330,27 +4448,27 @@ "type": "github" } ], - "time": "2023-02-03T07:00:31+00:00" + "time": "2020-10-26T13:10:38+00:00" }, { "name": "sebastian/environment", - "version": "6.0.0", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/b6f3694c6386c7959915a0037652e0c40f6f69cc", - "reference": "b6f3694c6386c7959915a0037652e0c40f6f69cc", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "suggest": { "ext-posix": "*" @@ -4358,7 +4476,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-master": "5.1-dev" } }, "autoload": { @@ -4377,7 +4495,7 @@ } ], "description": "Provides functionality to handle HHVM/PHP environments", - "homepage": "https://github.com/sebastianbergmann/environment", + "homepage": "http://www.github.com/sebastianbergmann/environment", "keywords": [ "Xdebug", "environment", @@ -4385,7 +4503,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -4393,34 +4511,34 @@ "type": "github" } ], - "time": "2023-02-03T07:03:04+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "5.0.0", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", - "reference": "f3ec4bf931c0b31e5b413f5b4fc970a7d03338c0", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { - "ext-mbstring": "*", - "php": ">=8.1", - "sebastian/recursion-context": "^5.0" + "php": ">=7.3", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "ext-mbstring": "*", + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4462,7 +4580,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -4470,35 +4588,38 @@ "type": "github" } ], - "time": "2023-02-03T07:06:49+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", - "version": "6.0.0", + "version": "5.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "aab257c712de87b90194febd52e4d184551c2d44" + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/aab257c712de87b90194febd52e4d184551c2d44", - "reference": "aab257c712de87b90194febd52e4d184551c2d44", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/0ca8db5a5fc9c8646244e629625ac486fa286bf2", + "reference": "0ca8db5a5fc9c8646244e629625ac486fa286bf2", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { "ext-dom": "*", - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" + }, + "suggest": { + "ext-uopz": "*" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "6.0-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -4523,7 +4644,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/6.0.0" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.5" }, "funding": [ { @@ -4531,33 +4652,33 @@ "type": "github" } ], - "time": "2023-02-03T07:07:38+00:00" + "time": "2022-02-14T08:28:10+00:00" }, { "name": "sebastian/lines-of-code", - "version": "2.0.0", + "version": "1.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130" + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/17c4d940ecafb3d15d2cf916f4108f664e28b130", - "reference": "17c4d940ecafb3d15d2cf916f4108f664e28b130", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", "shasum": "" }, "require": { - "nikic/php-parser": "^4.10", - "php": ">=8.1" + "nikic/php-parser": "^4.6", + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.0-dev" + "dev-master": "1.0-dev" } }, "autoload": { @@ -4580,7 +4701,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/2.0.0" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" }, "funding": [ { @@ -4588,34 +4709,34 @@ "type": "github" } ], - "time": "2023-02-03T07:08:02+00:00" + "time": "2020-11-28T06:42:11+00:00" }, { "name": "sebastian/object-enumerator", - "version": "5.0.0", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-enumerator.git", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906" + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/202d0e344a580d7f7d04b3fafce6933e59dae906", - "reference": "202d0e344a580d7f7d04b3fafce6933e59dae906", + "url": "https://api.github.com/repos/sebastianbergmann/object-enumerator/zipball/5c9eeac41b290a3712d88851518825ad78f45c71", + "reference": "5c9eeac41b290a3712d88851518825ad78f45c71", "shasum": "" }, "require": { - "php": ">=8.1", - "sebastian/object-reflector": "^3.0", - "sebastian/recursion-context": "^5.0" + "php": ">=7.3", + "sebastian/object-reflector": "^2.0", + "sebastian/recursion-context": "^4.0" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4637,7 +4758,7 @@ "homepage": "https://github.com/sebastianbergmann/object-enumerator/", "support": { "issues": "https://github.com/sebastianbergmann/object-enumerator/issues", - "source": "https://github.com/sebastianbergmann/object-enumerator/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/object-enumerator/tree/4.0.4" }, "funding": [ { @@ -4645,32 +4766,32 @@ "type": "github" } ], - "time": "2023-02-03T07:08:32+00:00" + "time": "2020-10-26T13:12:34+00:00" }, { "name": "sebastian/object-reflector", - "version": "3.0.0", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/object-reflector.git", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957" + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/24ed13d98130f0e7122df55d06c5c4942a577957", - "reference": "24ed13d98130f0e7122df55d06c5c4942a577957", + "url": "https://api.github.com/repos/sebastianbergmann/object-reflector/zipball/b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", + "reference": "b4f479ebdbf63ac605d183ece17d8d7fe49c15c7", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-master": "2.0-dev" } }, "autoload": { @@ -4692,7 +4813,7 @@ "homepage": "https://github.com/sebastianbergmann/object-reflector/", "support": { "issues": "https://github.com/sebastianbergmann/object-reflector/issues", - "source": "https://github.com/sebastianbergmann/object-reflector/tree/3.0.0" + "source": "https://github.com/sebastianbergmann/object-reflector/tree/2.0.4" }, "funding": [ { @@ -4700,32 +4821,32 @@ "type": "github" } ], - "time": "2023-02-03T07:06:18+00:00" + "time": "2020-10-26T13:14:26+00:00" }, { "name": "sebastian/recursion-context", - "version": "5.0.0", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/05909fb5bc7df4c52992396d0116aed689f93712", - "reference": "05909fb5bc7df4c52992396d0116aed689f93712", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "5.0-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -4755,7 +4876,7 @@ "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/5.0.0" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -4763,32 +4884,87 @@ "type": "github" } ], - "time": "2023-02-03T07:05:40+00:00" + "time": "2023-02-03T06:07:39+00:00" + }, + { + "name": "sebastian/resource-operations", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/sebastianbergmann/resource-operations.git", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "shasum": "" + }, + "require": { + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.0-dev" + } + }, + "autoload": { + "classmap": [ + "src/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Sebastian Bergmann", + "email": "sebastian@phpunit.de" + } + ], + "description": "Provides a list of PHP built-in functions that operate on resources", + "homepage": "https://www.github.com/sebastianbergmann/resource-operations", + "support": { + "issues": "https://github.com/sebastianbergmann/resource-operations/issues", + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + }, + "funding": [ + { + "url": "https://github.com/sebastianbergmann", + "type": "github" + } + ], + "time": "2020-09-28T06:45:17+00:00" }, { "name": "sebastian/type", - "version": "4.0.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/462699a16464c3944eefc02ebdd77882bd3925bf", - "reference": "462699a16464c3944eefc02ebdd77882bd3925bf", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^10.0" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -4811,7 +4987,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -4819,29 +4995,29 @@ "type": "github" } ], - "time": "2023-02-03T07:10:45+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", - "version": "4.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/version.git", - "reference": "5facf5a20311ac44f79221274cdeb6c569ca11dd" + "reference": "c6c1022351a901512170118436c764e473f6de8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/5facf5a20311ac44f79221274cdeb6c569ca11dd", - "reference": "5facf5a20311ac44f79221274cdeb6c569ca11dd", + "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/c6c1022351a901512170118436c764e473f6de8c", + "reference": "c6c1022351a901512170118436c764e473f6de8c", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=7.3" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "4.0-dev" + "dev-master": "3.0-dev" } }, "autoload": { @@ -4864,7 +5040,7 @@ "homepage": "https://github.com/sebastianbergmann/version", "support": { "issues": "https://github.com/sebastianbergmann/version/issues", - "source": "https://github.com/sebastianbergmann/version/tree/4.0.0" + "source": "https://github.com/sebastianbergmann/version/tree/3.0.2" }, "funding": [ { @@ -4872,20 +5048,20 @@ "type": "github" } ], - "time": "2023-02-03T07:11:37+00:00" + "time": "2020-09-28T06:39:44+00:00" }, { "name": "spatie/backtrace", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b" + "reference": "7b34fee6c1ad45f8ee0498d17cd8ea9a076402c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", - "reference": "4ee7d41aa5268107906ea8a4d9ceccde136dbd5b", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/7b34fee6c1ad45f8ee0498d17cd8ea9a076402c1", + "reference": "7b34fee6c1ad45f8ee0498d17cd8ea9a076402c1", "shasum": "" }, "require": { @@ -4921,8 +5097,7 @@ "spatie" ], "support": { - "issues": "https://github.com/spatie/backtrace/issues", - "source": "https://github.com/spatie/backtrace/tree/1.2.1" + "source": "https://github.com/spatie/backtrace/tree/1.2.2" }, "funding": [ { @@ -4934,7 +5109,7 @@ "type": "other" } ], - "time": "2021-11-09T10:57:15+00:00" + "time": "2023-02-21T08:29:12+00:00" }, { "name": "spatie/laravel-ray", @@ -5073,16 +5248,16 @@ }, { "name": "spatie/ray", - "version": "1.36.0", + "version": "1.36.2", "source": { "type": "git", "url": "https://github.com/spatie/ray.git", - "reference": "4a4def8cda4806218341b8204c98375aa8c34323" + "reference": "71dfde21900447ab37698fc07ff28b7f1e1822b8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/ray/zipball/4a4def8cda4806218341b8204c98375aa8c34323", - "reference": "4a4def8cda4806218341b8204c98375aa8c34323", + "url": "https://api.github.com/repos/spatie/ray/zipball/71dfde21900447ab37698fc07ff28b7f1e1822b8", + "reference": "71dfde21900447ab37698fc07ff28b7f1e1822b8", "shasum": "" }, "require": { @@ -5097,7 +5272,8 @@ }, "require-dev": { "illuminate/support": "6.x|^8.18|^9.0", - "nesbot/carbon": "^2.43", + "nesbot/carbon": "^2.63", + "pestphp/pest": "^1.22", "phpstan/phpstan": "^0.12.92", "phpunit/phpunit": "^9.5", "spatie/phpunit-snapshot-assertions": "^4.2", @@ -5132,7 +5308,7 @@ ], "support": { "issues": "https://github.com/spatie/ray/issues", - "source": "https://github.com/spatie/ray/tree/1.36.0" + "source": "https://github.com/spatie/ray/tree/1.36.2" }, "funding": [ { @@ -5144,7 +5320,7 @@ "type": "other" } ], - "time": "2022-08-11T14:04:18+00:00" + "time": "2023-02-10T09:24:13+00:00" }, { "name": "symfony/console", @@ -8090,16 +8266,16 @@ }, { "name": "zbateson/mail-mime-parser", - "version": "2.3.0", + "version": "2.4.0", "source": { "type": "git", "url": "https://github.com/zbateson/mail-mime-parser.git", - "reference": "d59e0c5eeb1442fca94bcb3b9d3c6be66318a500" + "reference": "20b3e48eb799537683780bc8782fbbe9bc25934a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/d59e0c5eeb1442fca94bcb3b9d3c6be66318a500", - "reference": "d59e0c5eeb1442fca94bcb3b9d3c6be66318a500", + "url": "https://api.github.com/repos/zbateson/mail-mime-parser/zipball/20b3e48eb799537683780bc8782fbbe9bc25934a", + "reference": "20b3e48eb799537683780bc8782fbbe9bc25934a", "shasum": "" }, "require": { @@ -8161,7 +8337,7 @@ "type": "github" } ], - "time": "2023-01-30T19:04:55+00:00" + "time": "2023-02-14T22:58:03+00:00" }, { "name": "zbateson/mb-wrapper", @@ -8308,5 +8484,5 @@ "php": "^8.1" }, "platform-dev": [], - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/config/error-tracker.php b/config/error-tracker.php index b281bf3..a0865cf 100644 --- a/config/error-tracker.php +++ b/config/error-tracker.php @@ -2,10 +2,10 @@ return [ // Define your user model class for connect entities to users. - 'user_model' => null, + 'user_model' => dnj\AAA\Models\User::class, 'routes' => [ 'enable' => true, - 'prefix' => 'log', + 'prefix' => '', ], ]; diff --git a/database/factories/AppFactory.php b/database/factories/AppFactory.php index 4effdda..37121d7 100644 --- a/database/factories/AppFactory.php +++ b/database/factories/AppFactory.php @@ -1,7 +1,8 @@ fake()->word, - 'extra' => serialize(fake()->words(3)), - 'owner_id' => rand(1, 10), - 'owner_id_column' => 'owner_id', - 'created_at' => fake()->dateTime, - 'updated_at' => fake()->dateTime, + 'meta' => [fake()->words(3)], + 'owner_id' => User::factory(), + 'created_at' => fake()->dateTime(), + 'updated_at' => fake()->dateTime(), ]; } + + public function withTitle(string $title): static + { + return $this->state(fn () => [ + 'title' => $title, + ]); + } + + /** + * @param array $meta + */ + public function withMeta(array $meta): static + { + return $this->state(fn () => [ + 'meta' => $meta, + ]); + } + + public function withOwner(int $owner): static + { + return $this->state(fn () => [ + 'owner_id' => $owner, + ]); + } } diff --git a/database/factories/DeviceFactory.php b/database/factories/DeviceFactory.php index bb098f6..654a33d 100644 --- a/database/factories/DeviceFactory.php +++ b/database/factories/DeviceFactory.php @@ -1,7 +1,8 @@ fake()->word, - 'extra' => serialize(fake()->words(3)), - 'owner_id' => rand(1, 5), - 'owner_id_column' => 'owner_id', - 'created_at' => fake()->dateTime, - 'updated_at' => fake()->dateTime, + 'meta' => [fake()->words(3)], + 'owner_id' => User::factory(), + 'created_at' => fake()->dateTime(), + 'updated_at' => fake()->dateTime(), ]; } + + public function withTitle(string $title): static + { + return $this->state(fn () => [ + 'title' => $title, + ]); + } + + /** + * @param array $meta + */ + public function withMeta(array $meta): static + { + return $this->state(fn () => [ + 'meta' => $meta, + ]); + } + + public function withOwner(int $owner): static + { + return $this->state(fn () => [ + 'owner_id' => $owner, + ]); + } } diff --git a/database/factories/LogFactory.php b/database/factories/LogFactory.php index bd16b36..81c4af3 100644 --- a/database/factories/LogFactory.php +++ b/database/factories/LogFactory.php @@ -1,12 +1,14 @@ create(); - $device = Device::factory(1)->create(); - return [ - 'app_id' => $app[0]->id, - 'device_id' => $device[0]->id, - 'level' => LogLevel::INFO, - 'message' => fake()->sentence, - 'data' => json_encode([fake()->words(3)]), - 'read' => json_encode(['userId' => fake()->randomNumber(1, 5), 'readAt' => null]), + 'app_id' => App::factory(), + 'device_id' => Device::factory(), + 'reader_id' => null, + 'read_at' => null, + 'level' => fake()->randomElement(LogLevel::cases()), + 'message' => fake()->text(), + 'data' => null, + 'created_at' => fake()->dateTime(), ]; } + + /** + * @param array $data + */ + public function withData(array $data): static + { + return $this->state(fn () => [ + 'data' => $data, + ]); + } + + public function withApp(int|App $app): static + { + return $this->state(fn () => [ + 'app_id' => $app, + ]); + } + + public function withDevice(int|Device $device): static + { + return $this->state(fn () => [ + 'device_id' => $device, + ]); + } + + public function read(int|Model|Factory|null $reader = null, ?int $time = null): static + { + return $this->state(fn () => [ + 'reader_id' => $reader ?? User::factory(), + 'read_at' => fake()->dateTime(), + ]); + } + + public function withLevel(LogLevel $level): static + { + return $this->state(fn () => [ + 'level' => $level, + ]); + } + + public function withMessage(string $message): static + { + return $this->state(fn () => [ + 'message' => $message, + ]); + } } diff --git a/database/migrations/2023_02_27_000001_create_apps_table.php b/database/migrations/2023_02_27_000001_create_apps_table.php new file mode 100644 index 0000000..2df6074 --- /dev/null +++ b/database/migrations/2023_02_27_000001_create_apps_table.php @@ -0,0 +1,24 @@ +id(); + $table->string('title'); + $table->json('meta')->nullable(); + $table->foreignIdFor(User::class, 'owner_id')->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('error_tracker_apps'); + } +}; diff --git a/database/migrations/2023_02_27_000002_create_devices_table.php b/database/migrations/2023_02_27_000002_create_devices_table.php new file mode 100644 index 0000000..6743d13 --- /dev/null +++ b/database/migrations/2023_02_27_000002_create_devices_table.php @@ -0,0 +1,24 @@ +id(); + $table->string('title'); + $table->json('meta')->nullable(); + $table->foreignIdFor(User::class, 'owner_id')->nullable(); + $table->timestamps(); + }); + } + + public function down(): void + { + Schema::dropIfExists('error_tracker_devices'); + } +}; diff --git a/database/migrations/2023_02_27_000003_create_logs_table.php b/database/migrations/2023_02_27_000003_create_logs_table.php new file mode 100644 index 0000000..56e9a11 --- /dev/null +++ b/database/migrations/2023_02_27_000003_create_logs_table.php @@ -0,0 +1,42 @@ +id(); + + $table->foreignIdFor(App::class, 'app_id') + ->references('id') + ->cascadeOnDelete(); + + $table->foreignIdFor(Device::class, 'device_id') + ->references('id') + ->cascadeOnDelete(); + + $table->foreignIdFor(User::class, 'reader_id') + ->nullable() + ->references('id') + ->cascadeOnDelete(); + + $table->timestamp('read_at')->nullable(); + $table->timestamp('created_at'); + $table->enum('level', array_column(LogLevel::cases(), 'name')); + $table->string('message'); + $table->json('data')->nullable(); + }); + } + + public function down(): void + { + Schema::dropIfExists('error_tracker_logs'); + } +}; diff --git a/docs/APIs/laravel-error-tracker-server.json b/docs/APIs/laravel-error-tracker-server.json deleted file mode 100644 index a7a31c1..0000000 --- a/docs/APIs/laravel-error-tracker-server.json +++ /dev/null @@ -1,505 +0,0 @@ -{ - "info": { - "_postman_id": "ec52ce74-5575-45d1-b39c-34988fcfca5f", - "name": "laravel-error-tracker-server", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" - }, - "item": [ - { - "name": "app", - "item": [ - { - "name": "search", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{base_url}}/api/app/search?title=test&owner=1&user=1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "app", - "search" - ], - "query": [ - { - "key": "title", - "value": "test" - }, - { - "key": "owner", - "value": "1" - }, - { - "key": "user", - "value": "1" - } - ] - } - }, - "response": [] - }, - { - "name": "store", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "title", - "value": "test", - "type": "default" - }, - { - "key": "extra", - "value": "", - "type": "default" - }, - { - "key": "owner", - "value": "", - "type": "default" - }, - { - "key": "", - "value": "", - "type": "default", - "disabled": true - } - ] - }, - "url": { - "raw": "{{base_url}}/api/app/store", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "app", - "store" - ] - } - }, - "response": [] - }, - { - "name": "delete", - "request": { - "method": "DELETE", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [] - }, - "url": { - "raw": "{{base_url}}/api/app/destroy/1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "app", - "destroy", - "1" - ] - } - }, - "response": [] - }, - { - "name": "update", - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "title", - "value": "test", - "type": "default" - }, - { - "key": "extra", - "value": "", - "type": "default" - }, - { - "key": "owner", - "value": "", - "type": "default" - }, - { - "key": "id", - "value": "1", - "type": "default", - "disabled": true - } - ] - }, - "url": { - "raw": "{{base_url}}/api/app/update/1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "app", - "update", - "1" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "device", - "item": [ - { - "name": "search", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{base_url}}/api/device/search?title=test&user=1&owner=1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "device", - "search" - ], - "query": [ - { - "key": "title", - "value": "test" - }, - { - "key": "user", - "value": "1" - }, - { - "key": "owner", - "value": "1" - } - ] - } - }, - "response": [] - }, - { - "name": "store", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "title", - "value": "test", - "type": "default" - }, - { - "key": "extra", - "value": "", - "type": "default" - }, - { - "key": "owner", - "value": "", - "type": "default" - }, - { - "key": "", - "value": "", - "type": "default", - "disabled": true - } - ] - }, - "url": { - "raw": "{{base_url}}/api/device/store", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "device", - "store" - ] - } - }, - "response": [] - }, - { - "name": "update", - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [] - }, - "url": { - "raw": "{{base_url}}/api/device/update/1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "device", - "update", - "1" - ] - } - }, - "response": [] - }, - { - "name": "delete", - "request": { - "method": "DELETE", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [] - }, - "url": { - "raw": "{{base_url}}/api/device/destroy/1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "device", - "destroy", - "1" - ] - } - }, - "response": [] - } - ] - }, - { - "name": "log", - "item": [ - { - "name": "search", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "{{base_url}}/api/log/search?apps=[1]&devices=[1]&levels=INFO&message=this message.&unread=false&user=1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "log", - "search" - ], - "query": [ - { - "key": "apps", - "value": "[1]" - }, - { - "key": "devices", - "value": "[1]" - }, - { - "key": "levels", - "value": "INFO" - }, - { - "key": "message", - "value": "this message." - }, - { - "key": "unread", - "value": "false" - }, - { - "key": "user", - "value": "1" - } - ] - } - }, - "response": [] - }, - { - "name": "store", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "app", - "value": "1", - "type": "default" - }, - { - "key": "device", - "value": "1", - "type": "default" - }, - { - "key": "level", - "value": "INFO", - "type": "default" - }, - { - "key": "message", - "value": "this message", - "type": "default" - }, - { - "key": "data", - "value": "['test', '2022-02-02']", - "type": "default" - }, - { - "key": "read", - "value": "['userId', 1, 'readAt', 2022-02-02]", - "type": "default" - } - ] - }, - "url": { - "raw": "{{base_url}}/api/log/store", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "log", - "store" - ] - } - }, - "response": [] - }, - { - "name": "mark as read", - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "userId", - "value": "1", - "type": "default" - }, - { - "key": "readAt", - "value": "['userId', 1, 'readAt', 2022-02-02]", - "type": "default" - } - ] - }, - "url": { - "raw": "{{base_url}}/api/markAsRead/1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "markAsRead", - "1" - ] - } - }, - "response": [] - }, - { - "name": "mark as unread", - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [] - }, - "url": { - "raw": "{{base_url}}/api/markAsRead/1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "markAsRead", - "1" - ] - } - }, - "response": [] - }, - { - "name": "delete", - "request": { - "method": "DELETE", - "header": [], - "body": { - "mode": "urlencoded", - "urlencoded": [] - }, - "url": { - "raw": "{{base_url}}/api/log/update/1", - "host": [ - "{{base_url}}" - ], - "path": [ - "api", - "log", - "update", - "1" - ] - } - }, - "response": [] - } - ] - } - ], - "event": [ - { - "listen": "prerequest", - "script": { - "type": "text/javascript", - "exec": [ - "" - ] - } - }, - { - "listen": "test", - "script": { - "type": "text/javascript", - "exec": [ - "" - ] - } - } - ], - "variable": [ - { - "key": "base_url", - "value": "127.0.0.1", - "type": "default" - } - ] -} \ No newline at end of file diff --git a/docs/APIs/openApi.yaml b/docs/APIs/openApi.yaml deleted file mode 100644 index 09a02cb..0000000 --- a/docs/APIs/openApi.yaml +++ /dev/null @@ -1,275 +0,0 @@ -openapi: 3.0.0 -info: - title: laravel-error-tracker-server - version: 1.0.0 - description: https://github.com/dnj/laravel-error-tracker-server -servers: - - url: http://127.0.0.1 -tags: - - name: app - - name: device - - name: log -paths: - /api/app/search: - get: - tags: - - app - summary: search - parameters: - - name: title - in: query - schema: - type: string - example: test - - name: owner - in: query - schema: - type: integer - example: '1' - - name: user - in: query - schema: - type: integer - example: '1' - responses: - '200': - description: Successful response - content: - application/json: {} - /api/app/store: - post: - tags: - - app - summary: store - requestBody: - content: - application/x-www-form-urlencoded: - schema: - type: object - properties: - title: - type: string - example: test - extra: - type: string - owner: - type: string - '': - type: string - responses: - '200': - description: Successful response - content: - application/json: {} - /api/app/destroy/1: - delete: - tags: - - app - summary: delete - responses: - '200': - description: Successful response - content: - application/json: {} - /api/app/update/1: - put: - tags: - - app - summary: update - requestBody: - content: - application/x-www-form-urlencoded: - schema: - type: object - properties: - title: - type: string - example: test - extra: - type: string - owner: - type: string - id: - type: integer - example: '1' - responses: - '200': - description: Successful response - content: - application/json: {} - /api/device/search: - get: - tags: - - device - summary: search - parameters: - - name: title - in: query - schema: - type: string - example: test - - name: user - in: query - schema: - type: integer - example: '1' - - name: owner - in: query - schema: - type: integer - example: '1' - responses: - '200': - description: Successful response - content: - application/json: {} - /api/device/store: - post: - tags: - - device - summary: store - requestBody: - content: - application/x-www-form-urlencoded: - schema: - type: object - properties: - title: - type: string - example: test - extra: - type: string - owner: - type: string - '': - type: string - responses: - '200': - description: Successful response - content: - application/json: {} - /api/device/update/1: - put: - tags: - - device - summary: update - requestBody: - content: - application/x-www-form-urlencoded: - schema: - type: object - responses: - '200': - description: Successful response - content: - application/json: {} - /api/device/destroy/1: - delete: - tags: - - device - summary: delete - responses: - '200': - description: Successful response - content: - application/json: {} - /api/log/search: - get: - tags: - - log - summary: search - parameters: - - name: apps - in: query - schema: - type: string - example: '[1]' - - name: devices - in: query - schema: - type: string - example: '[1]' - - name: levels - in: query - schema: - type: string - example: INFO - - name: message - in: query - schema: - type: string - example: this message. - - name: unread - in: query - schema: - type: boolean - example: 'false' - - name: user - in: query - schema: - type: integer - example: '1' - responses: - '200': - description: Successful response - content: - application/json: {} - /api/log/store: - post: - tags: - - log - summary: store - requestBody: - content: - application/x-www-form-urlencoded: - schema: - type: object - properties: - app: - type: integer - example: '1' - device: - type: integer - example: '1' - level: - type: string - example: INFO - message: - type: string - example: this message - data: - type: string - example: '[''test'', ''2022-02-02'']' - read: - type: string - example: '[''userId'', 1, ''readAt'', 2022-02-02]' - responses: - '200': - description: Successful response - content: - application/json: {} - /api/markAsRead/1: - put: - tags: - - log - summary: mark as unread - requestBody: - content: - application/x-www-form-urlencoded: - schema: - type: object - responses: - '200': - description: Successful response - content: - application/json: {} - /api/log/update/1: - delete: - tags: - - log - summary: delete - responses: - '200': - description: Successful response - content: - application/json: {} diff --git a/phpunit.xml b/phpunit.xml index ae58b22..f0e1c89 100644 --- a/phpunit.xml +++ b/phpunit.xml @@ -2,26 +2,27 @@ - - - ./tests/Feature - - - - - ./src - - - - - - - - - - - - - - + colors="true" +> + + + ./tests/Feature + + + + + ./src + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/AppManager.php b/src/AppManager.php new file mode 100644 index 0000000..09fa43f --- /dev/null +++ b/src/AppManager.php @@ -0,0 +1,109 @@ + + */ + public function search(array $filters): Collection + { + return App::query()->filter($filters)->get(); + } + + public function store(string $title, int|Authenticatable $owner, ?array $meta = null, bool $userActivityLog = false): App + { + return DB::transaction(function () use ($title, $owner, $meta, $userActivityLog) { + if ($owner instanceof Authenticatable) { + $owner = $owner->getAuthIdentifier(); + } + $app = App::query()->create([ + 'title' => $title, + 'owner_id' => $owner, + 'meta' => $meta, + ]); + + if ($userActivityLog) { + $this->userLogger->on($app) + ->withRequest(request()) + ->withProperties($app->toArray()) + ->log('created'); + } + + return $app; + }); + } + + public function update(int|IApp $app, array $changes, bool $userActivityLog = false): App + { + return DB::transaction(function () use ($app, $changes, $userActivityLog) { + if ($app instanceof IApp) { + $app = $app->getId(); + } + + /** + * @var App + */ + $app = App::query() + ->lockForUpdate() + ->findOrFail($app); + if (isset($changes['owner'])) { + if ($changes['owner'] instanceof Authenticatable) { + $changes['owner'] = $changes['owner']->getAuthIdentifier(); + } + $changes['owner_id'] = $changes['owner']; + unset($changes['owner']); + } + $app->fill($changes); + $changes = $app->changesForLog(); + $app->save(); + + if ($userActivityLog) { + $this->userLogger->on($app) + ->withRequest(request()) + ->withProperties($changes) + ->log('updated'); + } + + return $app; + }); + } + + public function destroy(int|IApp $app, bool $userActivityLog = false): void + { + DB::transaction(function () use ($app, $userActivityLog) { + if ($app instanceof IApp) { + $app = $app->getId(); + } + + /** + * @var App + */ + $app = App::query() + ->lockForUpdate() + ->findOrFail($app); + $app->delete(); + + if ($userActivityLog) { + $this->userLogger->on($app) + ->withRequest(request()) + ->withProperties($app->toArray()) + ->log('destroyed'); + } + }); + } +} diff --git a/src/DeviceManager.php b/src/DeviceManager.php new file mode 100644 index 0000000..589975d --- /dev/null +++ b/src/DeviceManager.php @@ -0,0 +1,108 @@ + + */ + public function search(array $filters): Collection + { + return Device::query()->filter($filters)->get(); + } + + public function store(?string $title = null, int|Authenticatable|null $owner = null, ?array $meta = null, bool $userActivityLog = false): Device + { + return DB::transaction(function () use ($title, $owner, $meta, $userActivityLog) { + if ($owner instanceof Authenticatable) { + $owner = $owner->getAuthIdentifier(); + } + $device = Device::query()->create([ + 'title' => $title, + 'owner_id' => $owner, + 'meta' => $meta, + ]); + + if ($userActivityLog) { + $this->userLogger->on($device) + ->withRequest(request()) + ->withProperties($device->toArray()) + ->log('created'); + } + + return $device; + }); + } + + public function update(int|IDevice $device, array $changes, bool $userActivityLog = false): Device + { + return DB::transaction(function () use ($device, $changes, $userActivityLog) { + if ($device instanceof IDevice) { + $device = $device->getId(); + } + + /** + * @var Device + */ + $device = Device::query() + ->lockForUpdate() + ->findOrFail($device); + if (array_key_exists('owner', $changes)) { + if ($changes['owner'] instanceof Authenticatable) { + $changes['owner'] = $changes['owner']->getAuthIdentifier(); + } + $changes['owner_id'] = $changes['owner']; + unset($changes['owner']); + } + $device->fill($changes); + $changes = $device->changesForLog(); + $device->save(); + + if ($userActivityLog) { + $this->userLogger->on($device) + ->withRequest(request()) + ->withProperties($changes) + ->log('updated'); + } + + return $device; + }); + } + + public function destroy(int|IDevice $device, bool $userActivityLog = false): void + { + DB::transaction(function () use ($device, $userActivityLog) { + if ($device instanceof IDevice) { + $device = $device->getId(); + } + + /** + * @var Device + */ + $device = Device::query() + ->lockForUpdate() + ->findOrFail($device); + $device->delete(); + + if ($userActivityLog) { + $this->userLogger->on($device) + ->withRequest(request()) + ->withProperties($device->toArray()) + ->log('destroyed'); + } + }); + } +} diff --git a/src/Http/Controllers/AppController.php b/src/Http/Controllers/AppController.php index 71c0558..526bd18 100644 --- a/src/Http/Controllers/AppController.php +++ b/src/Http/Controllers/AppController.php @@ -3,10 +3,11 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; use dnj\ErrorTracker\Contracts\IAppManager; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\SearchRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\StoreRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\App\UpdateRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\App\AppResource; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\AppSearchRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\AppStoreRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\AppUpdateRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\AppResource; +use dnj\ErrorTracker\Laravel\Server\Models\App; class AppController extends Controller { @@ -14,40 +15,31 @@ public function __construct(protected IAppManager $appManager) { } - public function index(SearchRequest $searchRequest): AppResource + public function index(AppSearchRequest $request): AppResource { - $search = $this->appManager->search($searchRequest->only( - [ - 'title', - 'owner', - 'user', - ] - )); - - return new AppResource($search); + $apps = App::query()->filter($request->validated())->cursorPaginate(); + + return AppResource::make($apps); } - public function store(StoreRequest $storeRequest): AppResource + public function store(AppStoreRequest $request): AppResource { - $store = $this->appManager->store( - $storeRequest->input('title'), - $storeRequest->input('extra'), - $storeRequest->input('owner'), - userActivityLog: true - ); - - return AppResource::make($store); + $data = $request->validated(); + $app = $this->appManager->store($data['title'],$data['owner'], $data['meta'] ?? null, true); + + return AppResource::make($app); } - public function update(int $app, UpdateRequest $updateRequest): AppResource + public function update(int $app, AppUpdateRequest $request): AppResource { - $update = $this->appManager->update($app, $updateRequest->validated(), userActivityLog: true); + $changes = $request->validated(); + $app = $this->appManager->update($app, $changes, true); - return AppResource::make($update); + return AppResource::make($app); } - public function destroy(int $id): void + public function destroy(int $app): void { - $this->appManager->destroy($id, userActivityLog: true); + $this->appManager->destroy($app, true); } } diff --git a/src/Http/Controllers/DeviceController.php b/src/Http/Controllers/DeviceController.php index c7db0e8..43eb9e8 100644 --- a/src/Http/Controllers/DeviceController.php +++ b/src/Http/Controllers/DeviceController.php @@ -3,10 +3,11 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; use dnj\ErrorTracker\Contracts\IDeviceManager; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\SearchRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\StoreRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\Device\UpdateRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Device\DeviceResource; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\DeviceSearchRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\DeviceStoreRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\DeviceUpdateRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\DeviceResource; +use dnj\ErrorTracker\Laravel\Server\Models\Device; class DeviceController extends Controller { @@ -14,40 +15,31 @@ public function __construct(protected IDeviceManager $deviceManager) { } - public function index(SearchRequest $searchRequest): DeviceResource + public function index(DeviceSearchRequest $request): DeviceResource { - $search = $this->deviceManager->search($searchRequest->only( - [ - 'title', - 'user', - 'owner', - ] - )); - - return new DeviceResource($search); + $devices = Device::query()->filter($request->validated())->cursorPaginate(); + + return DeviceResource::make($devices); } - public function store(StoreRequest $storeRequest): DeviceResource + public function store(DeviceStoreRequest $request): DeviceResource { - $store = $this->deviceManager->store( - $storeRequest->input('title'), - $storeRequest->input('extra'), - $storeRequest->input('owner'), - userActivityLog: true, - ); - - return DeviceResource::make($store); + $data = $request->validated(); + $device = $this->deviceManager->store($data['title'] ?? null, $data['owner'] ?? null, $data['meta'] ?? null, true); + + return DeviceResource::make($device); } - public function update(int $device, UpdateRequest $updateRequest): DeviceResource + public function update(int $device, DeviceUpdateRequest $request): DeviceResource { - $update = $this->deviceManager->update($device, $updateRequest->validated(), userActivityLog: true); + $changes = $request->validated(); + $device = $this->deviceManager->update($device, $changes, true); - return DeviceResource::make($update); + return DeviceResource::make($device); } - public function destroy(int $device) + public function destroy(int $device): void { - $this->deviceManager->destroy($device, userActivityLog: true); + $this->deviceManager->destroy($device, true); } } diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index 523a793..0d47566 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -5,11 +5,11 @@ use Carbon\Carbon; use dnj\ErrorTracker\Contracts\ILogManager; use dnj\ErrorTracker\Contracts\LogLevel; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\MarkAsReadRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\SearchRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Requests\Log\StoreRequest; -use dnj\ErrorTracker\Laravel\Server\Http\Resources\Log\LogResource; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\LogSearchRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Requests\LogStoreRequest; +use dnj\ErrorTracker\Laravel\Server\Http\Resources\LogResource; use dnj\ErrorTracker\Laravel\Server\Models\Log; +use Illuminate\Support\Facades\Auth; class LogController extends Controller { @@ -17,70 +17,45 @@ public function __construct(protected ILogManager $logManager) { } - public function index(SearchRequest $searchRequest) + public function index(LogSearchRequest $request) { - $search = $this->logManager->search($searchRequest->only( - [ - 'apps', - 'devices', - 'levels', - 'message', - 'unread', - 'user', - ] - )); + $logs = Log::query()->filter($request->validated())->cursorPaginate(); - return new LogResource($search); + return LogResource::make($logs); } - public function store(StoreRequest $storeRequest): LogResource + public function store(LogStoreRequest $request): LogResource { - $levelValue = $this->getEnumValue($storeRequest); + $data = $request->validated(); + $data['level'] = constant(LogLevel::class . "::" . $data['level']); $log = $this->logManager->store( - $storeRequest->input('app'), - $storeRequest->input('device'), - $levelValue, - $storeRequest->input('message'), - $storeRequest->input('data'), - $storeRequest->input('read'), - userActivityLog: true + $data['app'], + $data['device'], + $data['level'], + $data['message'], + $data['data'], + null, ); return LogResource::make($log); } - public function markAsRead(Log $log, MarkAsReadRequest $markAsReadRequest): LogResource + public function markAsRead(int $log): LogResource { - $markAsRead = $this->logManager->markAsRead( - $log, - $markAsReadRequest->get('userId'), - Carbon::make($markAsReadRequest->get('readAt')), - userActivityLog: true); + $log = $this->logManager->markAsRead($log, Auth::getUser(), null, true); - return LogResource::make($markAsRead); + return LogResource::make($log); } - public function markAsUnRead(Log $log): LogResource + public function markAsUnread(int $log): LogResource { - $markAsUnread = $this->logManager->markAsUnread($log, userActivityLog: true); - - return LogResource::make($markAsUnread); - } + $log = $this->logManager->markAsUnread($log, true); - public function destroy(int $log) - { - $this->logManager->destroy($log, userActivityLog: true); + return LogResource::make($log); } - public function getEnumValue(StoreRequest $storeRequest): ?LogLevel + public function destroy(int $log): void { - $value = null; - foreach (LogLevel::cases() as $case) { - if ($case->name == $storeRequest->input('level')) { - $value = $case; - } - } - - return $value; + $this->logManager->destroy($log, true); } } diff --git a/src/Http/Requests/AppSearchRequest.php b/src/Http/Requests/AppSearchRequest.php new file mode 100644 index 0000000..be04c70 --- /dev/null +++ b/src/Http/Requests/AppSearchRequest.php @@ -0,0 +1,19 @@ + + */ + public function rules(): array + { + return [ + 'title' => ['string', 'required', 'sometimes'], + 'owner' => ['int','required', 'sometimes'], + ]; + } +} diff --git a/src/Http/Requests/AppStoreRequest.php b/src/Http/Requests/AppStoreRequest.php new file mode 100644 index 0000000..6f3215e --- /dev/null +++ b/src/Http/Requests/AppStoreRequest.php @@ -0,0 +1,20 @@ + + */ + public function rules(): array + { + return [ + 'title' => ['string', 'required'], + 'meta' => ['array', 'nullable'], + 'owner' => ['int', 'required'], + ]; + } +} diff --git a/src/Http/Requests/AppUpdateRequest.php b/src/Http/Requests/AppUpdateRequest.php new file mode 100644 index 0000000..35e544f --- /dev/null +++ b/src/Http/Requests/AppUpdateRequest.php @@ -0,0 +1,20 @@ + + */ + public function rules(): array + { + return [ + 'title' => ['string', 'required', 'sometimes'], + 'meta' => ['array', 'nullable', 'sometimes'], + 'owner' => ['int', 'required', 'sometimes'], + ]; + } +} diff --git a/src/Http/Requests/DeviceSearchRequest.php b/src/Http/Requests/DeviceSearchRequest.php new file mode 100644 index 0000000..9c99f21 --- /dev/null +++ b/src/Http/Requests/DeviceSearchRequest.php @@ -0,0 +1,16 @@ + ['string', 'required', 'sometimes'], + 'owner' => ['int','required', 'sometimes'], + ]; + } +} diff --git a/src/Http/Requests/DeviceStoreRequest.php b/src/Http/Requests/DeviceStoreRequest.php new file mode 100644 index 0000000..f09f179 --- /dev/null +++ b/src/Http/Requests/DeviceStoreRequest.php @@ -0,0 +1,20 @@ + + */ + public function rules(): array + { + return [ + 'title' => ['string', 'nullable'], + 'meta' => ['array', 'nullable'], + 'owner' => ['int', 'nullable'], + ]; + } +} diff --git a/src/Http/Requests/DeviceUpdateRequest.php b/src/Http/Requests/DeviceUpdateRequest.php new file mode 100644 index 0000000..71f0d64 --- /dev/null +++ b/src/Http/Requests/DeviceUpdateRequest.php @@ -0,0 +1,20 @@ + + */ + public function rules(): array + { + return [ + 'title' => ['string', 'nullable', 'sometimes'], + 'meta' => ['array', 'nullable', 'sometimes'], + 'owner' => ['int', 'nullable', 'sometimes'], + ]; + } +} diff --git a/src/Http/Requests/LogSearchRequest.php b/src/Http/Requests/LogSearchRequest.php new file mode 100644 index 0000000..23c8536 --- /dev/null +++ b/src/Http/Requests/LogSearchRequest.php @@ -0,0 +1,30 @@ + ['array', 'required', 'sometimes'], + 'apps.*' => [new Exists(App::class, 'id')], + + 'devices' => ['array', 'nullable'], + 'devices.*' => [new Exists(Device::class, 'id')], + + 'levels' => ['array', 'nullable'], + 'levels.*' => [Rule::in(array_column(LogLevel::cases(), 'key'))], + + 'message' => ['string'], + 'unread' => ['bool'], + ]; + } +} diff --git a/src/Http/Requests/LogStoreRequest.php b/src/Http/Requests/LogStoreRequest.php new file mode 100644 index 0000000..35f8e8b --- /dev/null +++ b/src/Http/Requests/LogStoreRequest.php @@ -0,0 +1,21 @@ + ['integer', 'required'], + 'device' => ['integer', 'required'], + 'level' => ['required', Rule::in(array_column(LogLevel::cases(), 'key'))], + 'message' => ['string', 'required'], + 'data' => ['array', 'nullable'], + ]; + } +} diff --git a/src/Http/Resources/AppResource.php b/src/Http/Resources/AppResource.php new file mode 100644 index 0000000..b167dec --- /dev/null +++ b/src/Http/Resources/AppResource.php @@ -0,0 +1,9 @@ + + */ + public function search(array $filters): Collection + { + return Log::query()->filter($filters)->get(); + } + + public function store(int|IApp $app, IDevice|int $device, LogLevel $level, string $message, ?array $data = null, ?array $read = null): Log + { + return DB::transaction(function() use ($app, $device, $level, $message, $data, $read) { + if ($app instanceof IApp) { + $app = $app->getId(); + } + if ($device instanceof IDevice) { + $device = $device->getId(); + } + + if ($read) { + if (!isset($read['readAt'])) { + $read['readAt'] = now(); + } + if ($read['user'] instanceof Authenticatable) { + $read['user'] = $read['user']->getAuthIdentifier(); + } + } + $log = Log::query()->create(array( + 'app_id' => $app, + 'device_id' => $device, + 'level' => $level, + 'message' => $message, + 'data' => $data, + 'reader_id' => $read ? $read['user'] : null, + 'read_at' => $read ? $read['readAt'] : null, + )); + + + return $log; + }); + } + + public function markAsRead(ILog|int $log, int|Authenticatable $user, ?\DateTimeInterface $readAt = null, bool $userActivityLog = false): Log { + + return DB::transaction(function () use ($log, $user, $readAt) { + if ($log instanceof ILog) { + $log = $log->getId(); + } + if ($user instanceof Authenticatable) { + $user = $user->getAuthIdentifier(); + } + if (!$readAt) { + $readAt = now(); + } + + /** + * @var Log + */ + $log = Log::query() + ->lockForUpdate() + ->findOrFail($log); + $log->update(array( + 'reader_id' => $user, + 'read_at' => $readAt, + )); + + return $log; + }); + } + + public function markAsUnread(ILog|int $log, bool $userActivityLog = false): ILog + { + return DB::transaction(function () use ($log, $userActivityLog) { + if ($log instanceof ILog) { + $log = $log->getId(); + } + + /** + * @var Log + */ + $log = Log::query() + ->lockForUpdate() + ->findOrFail($log) + ->fill(array( + 'reader_id' => null, + 'read_at' => null, + )); + $changes = $log->changesForLog(); + $log->save(); + + if ($userActivityLog) { + $this->userLogger->on($log) + ->withRequest(request()) + ->withProperties($changes) + ->log("mark-as-unread"); + } + + return $log; + }); + } + + public function destroy(ILog|int $log, bool $userActivityLog = false): void + { + DB::transaction(function () use ($log, $userActivityLog) { + if ($log instanceof ILog) { + $log = $log->getId(); + } + + /** + * @var Log + */ + $log = Log::query() + ->lockForUpdate() + ->findOrFail($log); + $log->delete(); + + if ($userActivityLog) { + $this->userLogger->on($log) + ->withRequest(request()) + ->log("destroyed"); + } + }); + } +} diff --git a/src/Models/App.php b/src/Models/App.php index 5bfbe6a..e11b87d 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -2,99 +2,100 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; +use Carbon\Carbon; +use dnj\AAA\Models\User; use dnj\ErrorTracker\Contracts\IApp; -use dnj\ErrorTracker\Database\Factories\AppFactory; +use dnj\ErrorTracker\Laravel\Database\Factories\AppFactory; +use dnj\UserLogger\Concerns\Loggable; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * @property int id - * @property string title - * @property array|null extra - * @property int|null owner_id - * @property string owner_id_column - * @property \DateTime created_at - * @property \DateTime updated_at + * @property int $id + * @property string $title + * @property int $owner_id + * @property User $owner + * @property array|null $meta + * @property Carbon $created_at + * @property Carbon $updated_at */ class App extends Model implements IApp { use HasFactory; + use Loggable; - protected $fillable = ['title']; - - public function getId(): int - { - return $this->id; - } - - public function getTitle(): string + public static function newFactory(): AppFactory { - return $this->title; + return AppFactory::new(); } - public function setTitle(string $title): void - { - $this->title = $title; - } + protected $table = 'error_tracker_apps'; + protected $fillable = [ + 'title', + 'owner_id', + 'meta', + ]; - public function getExtra(): ?array - { - return $this->extra; - } + protected $casts = [ + 'meta' => 'array', + ]; - public function setExtra(?array $extra): void + public function owner(): BelongsTo { - $this->extra = json_encode($extra); + return $this->belongsTo(User::class); } - public function getOwnerId(): ?int + public function scopeFilter(Builder $builder, array $filters) { - return $this->owner_id; + if (isset($filters['owner'])) { + if ($filters['owner'] instanceof Authenticatable) { + $filters['owner'] = $filters['owner']->getAuthIdentifier(); + } + $builder->where('owner_id', $filters['owner']); + } + if (isset($filters['title'])) { + $builder->where('title', 'LIKE', '%' . $filters['title'] . '%'); + } + if (isset($filters['user'])) { + // TODO + } } - public function setOwnerId(?int $owner): App + public function getId(): int { - $this->owner_id = $owner; - - return $this; + return $this->id; } - public function getOwnerIdColumn(): string + public function getTitle(): string { - return $this->owner_id_column; + return $this->title; } - public function setOwnerIdColumn(string $OwnerIdColumn): void + public function getMeta(): ?array { - $this->owner_id_column = $OwnerIdColumn; + return $this->meta; } - public function getCreatedAt(): \DateTime + public function getCreatedAt(): Carbon { return $this->created_at; } - public function getUpdatedAt(): \DateTime + public function getUpdatedAt(): Carbon { return $this->updated_at; } - protected static function newFactory(): AppFactory + public function getOwnerUserId(): int { - return AppFactory::new(); + return $this->owner_id; } - public function scopeFilter(Builder $builder, array $attribute) + public function getOwnerUserColumn(): string { - if (isset($attribute['owner'])) { - $builder->where('title', '=', $attribute['owner']); - } - if (isset($attribute['title'])) { - $builder->where('title', 'LIKE', '%'.$attribute['title'].'%'); - } - if (isset($attribute['user'])) { - $builder->where('title', '=', $attribute['user']); - } + return 'owner_id'; } } diff --git a/src/Models/Device.php b/src/Models/Device.php index a2561b6..9f343da 100644 --- a/src/Models/Device.php +++ b/src/Models/Device.php @@ -2,107 +2,106 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; +use Carbon\Carbon; +use dnj\AAA\Models\User; use dnj\ErrorTracker\Contracts\IDevice; -use dnj\ErrorTracker\Database\Factories\DeviceFactory; +use dnj\ErrorTracker\Laravel\Database\Factories\DeviceFactory; +use dnj\UserLogger\Concerns\Loggable; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * @property int id - * @property string|null title - * @property array|null extra - * @property int|null owner_id - * @property string owner_id_column - * @property \DateTime created_at - * @property \DateTime updated_at + * @property int $id + * @property string $title + * @property int $owner_id + * @property User $user + * @property array|null $meta + * @property Carbon $created_at + * @property Carbon $updated_at */ class Device extends Model implements IDevice { use HasFactory; + use Loggable; - protected $fillable = ['title']; - - public function getId(): int + public static function newFactory(): DeviceFactory { - return $this->id; + return DeviceFactory::new(); } - public function getTitle(): ?string - { - return $this->title; - } + protected $table = 'error_tracker_devices'; + protected $fillable = [ + 'title', + 'owner_id', + 'meta', + 'created_at', + 'updated_at', + ]; - public function setTitle(?string $title): void - { - $this->title = $title; - } + protected $casts = [ + 'meta' => 'array', + ]; - /** - * @return array|array|null - */ - public function getExtra(): ?array + public function owner(): BelongsTo { - return $this->extra; + return $this->belongsTo(User::class); } - public function setExtra(?array $extra): Device + public function scopeFilter(Builder $builder, array $filters) { - $this->extra = json_encode($extra); - - return $this; - } - - public function getOwnerId(): ?int - { - return $this->owner_id; + if (array_key_exists("owner", $filters)) { + if ($filters === null) { + $builder->whereNull("owner_id"); + } else { + if ($filters['owner'] instanceof Authenticatable) { + $filters['owner'] = $filters['owner']->getAuthIdentifier(); + } + $builder->where('owner_id', $filters['owner']); + } + } + if (isset($filters['title'])) { + $builder->where('title', 'LIKE', '%' . $filters['title'] . '%'); + } + if (isset($filters['user'])) { + // TODO + } } - public function setOwnerId(?int $owner_id): Device + public function getId(): int { - $this->owner_id = $owner_id; - - return $this; + return $this->id; } - public function getOwnerIdColumn(): string + public function getTitle(): string { - return $this->owner_id_column; + return $this->title; } - public function setOwnerIdColumn(string $owner_id_column): Device + public function getMeta(): ?array { - $this->owner_id_column = $owner_id_column; - - return $this; + return $this->meta; } - public function getCreatedAt(): \DateTime + public function getCreatedAt(): Carbon { return $this->created_at; } - - protected static function newFactory(): DeviceFactory + public function getUpdatedAt(): Carbon { - return DeviceFactory::new(); + return $this->updated_at; } - public function scopeFilter(Builder $builder, array $attribute) + public function getOwnerUserId(): int { - if (isset($attribute['owner'])) { - $builder->where('owner_id', '=', $attribute['owner']); - } - if (isset($attribute['title'])) { - $builder->where('title', 'LIKE', '%'.$attribute['title'].'%'); - } - if (isset($attribute['user'])) { - $builder->where('user', '=', $attribute['user']); - } + return $this->owner_id; } - public function getUpdatedAt(): \DateTimeInterface + public function getOwnerUserColumn(): string { - return $this->updated_at; + return 'owner_id'; } } diff --git a/src/Models/Log.php b/src/Models/Log.php index 33b3cee..b011834 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -3,71 +3,124 @@ namespace dnj\ErrorTracker\Laravel\Server\Models; use Carbon\Carbon; +use dnj\AAA\Models\User; +use dnj\ErrorTracker\Contracts\IApp; +use dnj\ErrorTracker\Contracts\IDevice; use dnj\ErrorTracker\Contracts\ILog; use dnj\ErrorTracker\Contracts\LogLevel; -use dnj\ErrorTracker\Database\Factories\LogFactory; +use dnj\ErrorTracker\Laravel\Database\Factories\LogFactory; +use dnj\UserLogger\Concerns\Loggable; +use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; /** - * @property int id - * @property int app_id - * @property int device_id - * @property string|null read - * @property LogLevel level - * @property string message - * @property string|null data - * @property \DateTime created_at - * @property \DateTime updated_at + * @property int $id + * @property Carbon $created_at + * @property int $app_id + * @property int $device_id + * @property int|null $reader_id + * @property User|null $reader + * @property Carbon|null $read_at + * @property LogLevel $level + * @property string $message + * @property array|null $data */ class Log extends Model implements ILog { use HasFactory; + use Loggable; + + public const UPDATED_AT = null; + + public static function newFactory(): LogFactory + { + return LogFactory::new(); + } + + protected $table = 'error_tracker_logs'; + protected $fillable = [ + 'created_at', + 'app_id', + 'device_id', + 'reader_id', + 'read_at', + 'level', + 'message', + 'data', + ]; protected $casts = [ + 'read_at' => 'datetime', 'level' => LogLevel::class, + 'data' => 'array', ]; - public function getId(): int + public function reader(): BelongsTo { - return $this->id; + return $this->belongsTo(User::class); } - public function getRead(): string + public function scopeFilter(Builder $builder, array $filters) { - return $this->read; + if (isset($filters['apps'])) { + $filters['apps'] = array_map(fn ($v) => $v instanceof IApp ? $v->getId() : $v, $filters['apps']); + $builder->whereIn("app_id", $filters['apps']); + } + if (isset($filters['devices'])) { + $filters['devices'] = array_map(fn ($v) => $v instanceof IDevice ? $v->getId() : $v, $filters['devices']); + $builder->whereIn("device_id", $filters['devices']); + } + if (isset($filters['levels'])) { + $filters['levels'] = array_map(fn ($v) => $v->name, $filters['levels']); + $builder->whereIn("level", $filters['levels']); + } + if (isset($filters['message'])) { + $builder->where("message", "LIKE", "%" . $filters['message'] . "%"); + } + if (isset($filters['unread'])) { + if ($filters['unread']) { + $builder->whereNull("read_at"); + } else { + $builder->whereNotNull("read_at"); + } + } + + if (isset($filters['user'])) { + // TODO + } } - public function setRead(array|null $read): Log + public function getId(): int { - $this->read = json_encode($read); - - return $this; + return $this->id; } - public function getDeviceId(): int + public function getCreatedAt(): Carbon { - return $this->device_id; + return $this->created_at; } - public function setDeviceId(int $device_id): Log + public function getAppId(): int { - $this->device_id = $device_id; + return $this->app_id; + } - return $this; + public function getDeviceId(): int + { + return $this->device_id; } public function getReaderUserId(): ?int { - return optional(json_decode($this->read))->userId; + return $this->reader_id; } - public function getReadAt(): ?\DateTime + public function getReadAt(): ?Carbon { - $readAt = optional(json_decode($this->read))->readAt; - - return $readAt ? Carbon::make($readAt) : $readAt; + return $this->read_at; } public function getLevel(): LogLevel @@ -75,84 +128,13 @@ public function getLevel(): LogLevel return $this->level; } - public function setLevel(LogLevel $level): void - { - $this->level = $level; - } - public function getMessage(): string { return $this->message; } - public function setMessage(string $message): Log - { - $this->message = $message; - - return $this; - } - public function getData(): ?array { - return json_decode($this->data); - } - - public function setData(?array $data): Log - { - $this->data = json_encode($data); - - return $this; - } - - public function getCreatedAt(): \DateTime - { - return $this->created_at; - } - - public function getUpdatedAt(): \DateTime - { - return $this->updated_at; - } - - public function getAppId(): int - { - return $this->app_id; - } - - public function setAppId(int $app_id): Log - { - $this->app_id = $app_id; - - return $this; - } - - protected static function newFactory(): LogFactory - { - return LogFactory::new(); - } - - public function scopeFilter(Builder $builder, array $attribute): Builder - { - if (isset($attribute['apps'])) { - $builder->whereIn('app_id', $attribute['apps']); - } - if (isset($attribute['devices'])) { - $builder->whereIn('device_id', $attribute['apps']); - } - if (isset($attribute['message'])) { - $builder->where('message', 'LIKE', $attribute['message']); - } - if (isset($attribute['user'])) { - $builder->where('read->userId', '=', $attribute['user']); - } - if (isset($attribute['unread'])) { - if ($attribute['unread']) { - $builder->whereNull('read->readAt'); - } else { - $builder->whereNotNull('read->readAt'); - } - } - - return $builder; + return $this->data; } } diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index 87fb5cf..f8d8a0f 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -5,9 +5,6 @@ use dnj\ErrorTracker\Contracts\IAppManager; use dnj\ErrorTracker\Contracts\IDeviceManager; use dnj\ErrorTracker\Contracts\ILogManager; -use dnj\ErrorTracker\Laravel\Server\Managers\AppManager; -use dnj\ErrorTracker\Laravel\Server\Managers\DeviceManager; -use dnj\ErrorTracker\Laravel\Server\Managers\LogManager; use Illuminate\Support\Facades\Route; use Illuminate\Support\ServiceProvider as BaseServiceProvider; diff --git a/tests/Feature/AppManagerTest.php b/tests/Feature/AppManagerTest.php index 46bdb1e..bcc4ab0 100644 --- a/tests/Feature/AppManagerTest.php +++ b/tests/Feature/AppManagerTest.php @@ -2,114 +2,84 @@ namespace dnj\ErrorTracker\Laravel\Server\Tests\Feature; +use dnj\AAA\Models\User; use dnj\ErrorTracker\Laravel\Server\Models\App; use dnj\ErrorTracker\Laravel\Server\Tests\TestCase; -use Illuminate\Testing\Fluent\AssertableJson; -use Symfony\Component\HttpFoundation\Response as ResponseAlias; class AppManagerTest extends TestCase { - public function testUserCanSearch(): void + public function testSearch(): void { - App::factory(2)->create(); - - $response = $this->get(route('apps.index', ['title' => 'test', 'owner' => 1, 'user' => 1])); - - $response->assertStatus(ResponseAlias::HTTP_OK); // 200 + /** + * @var App $app1 + * @var App $app2 + * @var App $app3 + */ + $app1 = App::factory() + ->withTitle("test App 1") + ->create(); + + $app2 = App::factory() + ->withTitle("test App 2") + ->create(); + + $app3 = App::factory() + ->withTitle("App 3") + ->create(); + + $apps = $this->getAppManager()->search(['title' => 'test']); + $appIds = array_column(iterator_to_array($apps), 'id'); + $this->assertContains($app1->id, $appIds); + $this->assertContains($app2->id, $appIds); + $this->assertNotContains($app3->id, $appIds); + + $apps = $this->getAppManager()->search(['title' => 'test', 'owner' => $app1->owner_id]); + $appIds = array_column(iterator_to_array($apps), 'id'); + $this->assertContains($app1->id, $appIds); + $this->assertNotContains($app2->id, $appIds); + $this->assertNotContains($app3->id, $appIds); + + $apps = $this->getAppManager()->search(['title' => 'test', 'owner' => $app1->owner]); + $appIds = array_column(iterator_to_array($apps), 'id'); + $this->assertContains($app1->id, $appIds); + $this->assertNotContains($app2->id, $appIds); + $this->assertNotContains($app3->id, $appIds); } - public function testUserCanStore(): void + public function testStore(): void { $data = [ 'title' => 'Test App', - 'extra' => ['test_key' => 'test_value'], - 'owner' => 1, + 'meta' => ['key1' => 'v2'], + 'owner' => User::factory()->create(), ]; - $this->postJson(route('apps.store'), $data) - ->assertStatus(ResponseAlias::HTTP_CREATED) // 201 - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $data = $this->prepareForAssert($data); - $this->assertDatabaseHas('apps', $data); - $this->assertDatabaseCount('apps', 1); + $app = $this->getAppManager()->store($data['title'], $data['owner'], $data['meta'], true); + $this->assertModelExists($app); + $this->assertSame($data['title'], $app->getTitle()); + $this->assertSame($data['meta'], $app->getMeta()); + $this->assertSame($data['owner']->id, $app->getOwnerUserId()); } - public function testUserCanNotStore(): void + public function testUpdate(): void { - $data = [ - 'title' => '', - 'extra' => [''], - 'owner' => '', - ]; - - $this->postJson(route('apps.store'), $data) - ->assertStatus(ResponseAlias::HTTP_UNPROCESSABLE_ENTITY) // 422 - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $this->assertDatabaseCount('apps', 0); - } - - public function testCanUpdateApp(): void - { - $app = App::factory()->create(); - $changes = [ - 'title' => 'Test App edited', - 'extra' => ['test_key' => 'test_value'], - 'owner' => 3, + 'title' => 'Test App', + 'meta' => ['key1' => 'v2'], + 'owner' => User::factory()->create(), ]; - - $this->putJson(route('apps.update', ['app' => $app->id]), $changes) - ->assertStatus(ResponseAlias::HTTP_OK) - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $changes = $this->prepareForAssert($changes); - $this->assertDatabaseHas('apps', $changes); - $this->assertDatabaseCount('apps', 1); - } - - public function testCanNotUpdateApp(): void - { - $changes = []; - - $this->putJson(route('apps.update', ['app' => 100]), $changes) - ->assertStatus(ResponseAlias::HTTP_NOT_FOUND) // 404 - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $this->assertDatabaseCount('apps', 0); - } - - public function testDestroy(): void - { $app = App::factory()->create(); - - $this->deleteJson(route('apps.destroy', ['app' => $app->id])) - ->assertStatus(ResponseAlias::HTTP_OK); // 200 + $app = $this->getAppManager()->update($app, $changes, true); + $this->assertSame($changes['title'], $app->getTitle()); + $this->assertSame($changes['meta'], $app->getMeta()); + $this->assertSame($changes['owner']->id, $app->getOwnerUserId()); } - public function testCanNotDestroy(): void + public function testDestroy(): void { $app = App::factory()->create(); - - $this->deleteJson(route('apps.destroy', ['app' => 100])) - ->assertStatus(ResponseAlias::HTTP_NOT_FOUND); // 404 + $this->getAppManager()->destroy($app, true); + $this->assertModelMissing($app); } - public function prepareForAssert(array $changes): array - { - $changes['extra'] = json_encode($changes['extra']); - $changes['owner_id'] = $changes['owner']; - unset($changes['owner']); - - return $changes; - } } diff --git a/tests/Feature/DeviceManagerTest.php b/tests/Feature/DeviceManagerTest.php index 6f39cb7..fe2fff5 100644 --- a/tests/Feature/DeviceManagerTest.php +++ b/tests/Feature/DeviceManagerTest.php @@ -2,113 +2,83 @@ namespace dnj\ErrorTracker\Laravel\Server\Tests\Feature; +use dnj\AAA\Models\User; use dnj\ErrorTracker\Laravel\Server\Models\Device; use dnj\ErrorTracker\Laravel\Server\Tests\TestCase; -use Illuminate\Testing\Fluent\AssertableJson; -use Symfony\Component\HttpFoundation\Response as ResponseAlias; class DeviceManagerTest extends TestCase { - public function testUserCanSearch(): void + public function testSearch(): void { - Device::factory(2)->create(); - - $response = $this->get(route('devices.index', ['title' => 'test', 'owner' => 1, 'user' => 1])); - - $response->assertStatus(ResponseAlias::HTTP_OK); + /** + * @var Device $device1 + * @var Device $device2 + * @var Device $device3 + */ + $device1 = Device::factory() + ->withTitle("test Device 1") + ->create(); + + $device2 = Device::factory() + ->withTitle("test Device 2") + ->create(); + + $device3 = Device::factory() + ->withTitle("Device 3") + ->create(); + + $devices = $this->getDeviceManager()->search(['title' => 'test']); + $deviceIds = array_column(iterator_to_array($devices), 'id'); + $this->assertContains($device1->id, $deviceIds); + $this->assertContains($device2->id, $deviceIds); + $this->assertNotContains($device3->id, $deviceIds); + + $devices = $this->getDeviceManager()->search(['title' => 'test', 'owner' => $device1->owner_id]); + $deviceIds = array_column(iterator_to_array($devices), 'id'); + $this->assertContains($device1->id, $deviceIds); + $this->assertNotContains($device2->id, $deviceIds); + $this->assertNotContains($device3->id, $deviceIds); + + $devices = $this->getDeviceManager()->search(['title' => 'test', 'owner' => $device1->owner]); + $deviceIds = array_column(iterator_to_array($devices), 'id'); + $this->assertContains($device1->id, $deviceIds); + $this->assertNotContains($device2->id, $deviceIds); + $this->assertNotContains($device3->id, $deviceIds); } - public function testCanStore(): void + public function testStore(): void { $data = [ - 'title' => 'Test App', - 'extra' => ['test_key edited' => 'test_value edited'], - 'owner' => 1, + 'title' => 'Test Device', + 'meta' => ['key1' => 'v2'], + 'owner' => User::factory()->create(), ]; - $this->postJson(route('devices.store'), $data) - ->assertStatus(ResponseAlias::HTTP_CREATED) // 201 - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $data = $this->prepareForAssert($data); - $this->assertDatabaseHas('devices', $data); - $this->assertDatabaseCount('devices', 1); + $device = $this->getDeviceManager()->store($data['title'], $data['owner'], $data['meta'], true); + $this->assertModelExists($device); + $this->assertSame($data['title'], $device->getTitle()); + $this->assertSame($data['meta'], $device->getMeta()); + $this->assertSame($data['owner']->id, $device->getOwnerUserId()); } - public function testCanNotStoreDevice(): void + public function testUpdate(): void { - $data = [ - 'title' => 'Test App', - 'extra' => 1, - 'owner' => 1, - ]; - - $this->postJson(route('devices.store'), $data) - ->assertStatus(ResponseAlias::HTTP_UNPROCESSABLE_ENTITY) // 422 - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $this->assertDatabaseCount('devices', 0); - } - - public function testCanUpdateDevice() - { - $device = Device::factory()->create(); - $changes = [ - 'title' => 'Test Device edited', - 'extra' => ['test_key' => 'test_value'], - 'owner' => 1, + 'title' => 'Test Device', + 'meta' => ['key1' => 'v2'], + 'owner' => User::factory()->create(), ]; - - $this->putJson(route('devices.update', ['device' => $device->id]), $changes) - ->assertStatus(ResponseAlias::HTTP_OK) - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $changes = $this->prepareForAssert($changes); - $this->assertDatabaseHas('devices', $changes); - $this->assertDatabaseCount('devices', 1); - } - - - public function testCanNotUpdateDevice() - { - $changes = ['title' => 'test']; - - $this->putJson(route('devices.update', ['device' => 100]), $changes) - ->assertStatus(ResponseAlias::HTTP_NOT_FOUND) // 404 - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $this->assertDatabaseCount('apps', 0); - } - - public function testCanDestroy() - { - $app = Device::factory()->create(); - - $this->deleteJson(route('devices.destroy', ['device' => $app->id])) - ->assertStatus(ResponseAlias::HTTP_OK); - } - - public function testCanNotDestroy() - { - $this->deleteJson(route('devices.destroy', ['device' => 100])) - ->assertStatus(ResponseAlias::HTTP_NOT_FOUND); // 404 + $device = Device::factory()->create(); + $device = $this->getDeviceManager()->update($device, $changes, true); + $this->assertSame($changes['title'], $device->getTitle()); + $this->assertSame($changes['meta'], $device->getMeta()); + $this->assertSame($changes['owner']->id, $device->getOwnerUserId()); } - public function prepareForAssert(array $changes): array + public function testDestroy(): void { - $changes['extra'] = json_encode($changes['extra']); - $changes['owner_id'] = $changes['owner']; - unset($changes['owner']); - - return $changes; + $device = Device::factory()->create(); + $this->getDeviceManager()->destroy($device, true); + $this->assertModelMissing($device); } } diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index b5d7aae..7e040aa 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -1,151 +1,109 @@ create(); $device = Device::factory()->create(); + $log1 = Log::factory()->withLevel(LogLevel::ERROR)->withApp($app)->create(); + $log2 = Log::factory()->withLevel(LogLevel::INFO)->withDevice($device)->read()->create(); + $log3 = Log::factory()->withLevel(LogLevel::DEBUG)->withMessage("non critical error")->create(); - $response = $this->get(route('logs.index', - [ - 'apps' => [$app->id], - 'devices' => [$device->id], - 'level' => LogLevel::INFO->name, - 'message' => 'test', - 'unread' => true, - 'user' => 1, - ] + $logs = $this->getLogManager()->search(array( + 'apps' => [$app->id], )); + $this->assertTrue($logs->contains($log1)); + $this->assertFalse($logs->contains($log2)); + $this->assertFalse($logs->contains($log3)); - $response->assertStatus(ResponseAlias::HTTP_OK) - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); + $logs = $this->getLogManager()->search(array( + 'devices' => [$device->id], + )); + $this->assertFalse($logs->contains($log1)); + $this->assertTrue($logs->contains($log2)); + $this->assertFalse($logs->contains($log3)); + + $logs = $this->getLogManager()->search(array( + 'levels' => [LogLevel::DEBUG, LogLevel::ERROR], + )); + $this->assertTrue($logs->contains($log1)); + $this->assertFalse($logs->contains($log2)); + $this->assertTrue($logs->contains($log3)); + + $logs = $this->getLogManager()->search(array( + 'message' => 'critical' + )); + $this->assertFalse($logs->contains($log1)); + $this->assertFalse($logs->contains($log2)); + $this->assertTrue($logs->contains($log3)); + + $logs = $this->getLogManager()->search(array( + 'unread' => false + )); + $this->assertFalse($logs->contains($log1)); + $this->assertTrue($logs->contains($log2)); + $this->assertFalse($logs->contains($log3)); + + $logs = $this->getLogManager()->search(array( + 'unread' => true + )); + $this->assertTrue($logs->contains($log1)); + $this->assertFalse($logs->contains($log2)); + $this->assertTrue($logs->contains($log3)); } - public function testCanStore(): void + public function testStore(): void { $app = App::factory()->create(); $device = Device::factory()->create(); $data = [ - 'app' => $app->id, - 'device' => $device->id, - 'level' => LogLevel::INFO->name, + 'app' => $app, + 'device' => $device, + 'level' => LogLevel::INFO, 'message' => 'message test', 'data' => ['test_key' => ['test' => 1]], - 'read' => ['userId' => 1, 'readAt' => Carbon::now()], + 'read' => ['user' => User::factory()->create()], ]; - - $this->postJson(route('logs.store'), $data) - ->assertStatus(ResponseAlias::HTTP_CREATED) - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - unset($data['app']); - - $data = $this->makeDataForAssert($data); - - $this->assertDatabaseHas('logs', $data); + $log = $this->getLogManager()->store($data['app'], $data['device'], $data['level'], $data['message'], $data['data'], $data['read']); + $this->assertSame($app->id, $log->getAppId()); + $this->assertSame($device->id, $log->getDeviceId()); + $this->assertSame($data['level'], $log->getLevel()); + $this->assertSame($data['message'], $log->getMessage()); + $this->assertSame($data['data'], $log->getData()); + $this->assertSame($data['read']['user']->id, $log->getReaderUserId()); } - public function testMarkAsRead() + public function testMarkAsRead(): void { $log = Log::factory()->create(); - - $data = [ - 'userId' => 1, - 'readAt' => Carbon::now(), - ]; - - $this->putJson(route('logs.mark_as_read', ['log' => $log->id]), $data) - ->assertStatus(ResponseAlias::HTTP_OK) - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $this->assertDatabaseHas('logs', [ - 'read->userId' => $data['userId'], - 'read->readAt' => (string) $data['readAt'], - ]); + $reader = User::factory()->create(); + $log = $this->getLogManager()->markAsRead($log, $reader); + $this->assertSame($reader->id, $log->getReaderUserId()); } - public function testCanNotMarkAsRead() + public function testMarkAsUnread(): void { - $data = [ - 'userId' => 1, - 'readAt' => Carbon::now(), - ]; - - $this->putJson(route('logs.mark_as_read', ['log' => 100]), $data) - ->assertStatus(ResponseAlias::HTTP_NOT_FOUND) // 404 - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); + $log = Log::factory()->read()->create(); + $log = $this->getLogManager()->markAsUnread($log, true); + $this->assertNull($log->getReaderUserId()); } - public function testMarkAsUnRead() - { - $log = Log::factory()->create(); - - $this->putJson(route('logs.mark_as_unread', ['log' => $log->id])) - ->assertStatus(ResponseAlias::HTTP_OK) - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $this->assertDatabaseHas('logs', [ - 'read->userId' => null, - 'read->readAt' => null, - ]); - } - public function testCanNotMarkAsUnRead() + public function testDestroy(): void { - $this->putJson(route('logs.mark_as_unread', ['log' => 100])) - ->assertStatus(ResponseAlias::HTTP_NOT_FOUND) // 404 - ->assertJson(function (AssertableJson $json) { - $json->etc(); - }); - - $this->assertDatabaseCount('logs', 0); - } - - public function testCanDestroy() - { - $app = Log::factory()->create(); - - $this->deleteJson(route('logs.destroy', ['log' => $app->id])) - ->assertStatus(ResponseAlias::HTTP_OK); - } - - public function testCanNotDestroy() - { - $this->deleteJson(route('logs.destroy', ['log' => 100])) - ->assertStatus(ResponseAlias::HTTP_NOT_FOUND); - } - - - private function makeDataForAssert(array $data): array - { - $data['data'] = json_encode($data['data']); - $data['read'] = json_encode($data['read']); - $data['device_id'] = $data['device']; - unset($data['device']); - - return $data; + $log = Log::factory()->create(); + $this->getLogManager()->destroy($log, true); + $this->assertModelMissing($log); } } diff --git a/tests/TestCase.php b/tests/TestCase.php index 0fb2f0a..efe9db9 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -3,28 +3,38 @@ namespace dnj\ErrorTracker\Laravel\Server\Tests; use dnj\ErrorTracker\Laravel\Server\ServiceProvider; -use dnj\ErrorTracker\Laravel\Server\Tests\Models\User; +use dnj\AAA\ServiceProvider as AAAServiceProvider; +use dnj\ErrorTracker\Contracts\IAppManager; +use dnj\ErrorTracker\Contracts\IDeviceManager; +use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Laravel\Server\AppManager; +use dnj\ErrorTracker\Laravel\Server\DeviceManager; +use dnj\ErrorTracker\Laravel\Server\LogManager; +use dnj\UserLogger\ServiceProvider as UserLoggerServiceProvider; use Illuminate\Foundation\Testing\RefreshDatabase; class TestCase extends \Orchestra\Testbench\TestCase { use RefreshDatabase; - public function setUp(): void - { - parent::setUp(); - config()->set('error-tracker.user_model', User::class); - } - protected function getPackageProviders($app) { return [ + UserLoggerServiceProvider::class, + AAAServiceProvider::class, ServiceProvider::class, ]; } - protected function defineDatabaseMigrations() - { - $this->loadMigrationsFrom(__DIR__.'/../database/migrations'); + public function getAppManager(): AppManager { + return $this->app->make(IAppManager::class); + } + + public function getDeviceManager(): DeviceManager { + return $this->app->make(IDeviceManager::class); + } + + public function getLogManager(): LogManager { + return $this->app->make(ILogManager::class); } } From b51d5b23b53d22202863882f00720158c22269aa Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Tue, 28 Feb 2023 17:23:11 +0330 Subject: [PATCH 124/131] Remove extra files --- src/Helpers/Helper.php | 11 ------ src/Helpers/helpers.php | 13 ------- src/Managers/AppManager.php | 46 ------------------------ src/Managers/DeviceManager.php | 46 ------------------------ src/Managers/LogManager.php | 64 ---------------------------------- 5 files changed, 180 deletions(-) delete mode 100644 src/Helpers/Helper.php delete mode 100644 src/Helpers/helpers.php delete mode 100644 src/Managers/AppManager.php delete mode 100644 src/Managers/DeviceManager.php delete mode 100644 src/Managers/LogManager.php diff --git a/src/Helpers/Helper.php b/src/Helpers/Helper.php deleted file mode 100644 index 558c7e8..0000000 --- a/src/Helpers/Helper.php +++ /dev/null @@ -1,11 +0,0 @@ -name; - } - - return $result; - } -} diff --git a/src/Managers/AppManager.php b/src/Managers/AppManager.php deleted file mode 100644 index dbd0c5a..0000000 --- a/src/Managers/AppManager.php +++ /dev/null @@ -1,46 +0,0 @@ -get(); - } - - public function store(string $title, ?array $extra = null, ?int $owner = null, bool $userActivityLog = false): IApp - { - $app = new App(); - - $app->setTitle($title); - $app->setOwnerId($owner); - $app->setOwnerIdColumn('owner_id'); - $app->setExtra($extra); - $app->save(); - - return $app; - } - - public function update(int|IApp $app, array $changes, bool $userActivityLog = false): IApp - { - /** @var App $model */ - $model = App::query()->findOrFail($app); - $model->setTitle($changes['title']); - $model->setOwnerId($changes['owner']); - $model->setExtra($changes['extra']); - $model->save(); - - return $model; - } - - public function destroy(int|IApp $app, bool $userActivityLog = false): void - { - $model = App::query()->findOrFail($app); - $model->delete(); - } -} diff --git a/src/Managers/DeviceManager.php b/src/Managers/DeviceManager.php deleted file mode 100644 index 943a7e1..0000000 --- a/src/Managers/DeviceManager.php +++ /dev/null @@ -1,46 +0,0 @@ -get(); - } - - public function store(?string $title = null, ?array $extra = null, ?int $owner = null, bool $userActivityLog = false): IDevice - { - $device = new Device(); - - $device->setTitle($title); - $device->setOwnerId($owner); - $device->setExtra($extra); - $device->setOwnerIdColumn('owner_id'); - $device->save(); - - return $device; - } - - public function update(IDevice|int $device, array $changes, bool $userActivityLog = false): IDevice - { - /** @var Device $model */ - $model = Device::query()->findOrFail($device); - $model->setTitle($changes['title']); - $model->setOwnerId($changes['owner']); - $model->setExtra($changes['extra']); - $model->save(); - - return $model; - } - - public function destroy(IDevice|int $device, bool $userActivityLog = false): void - { - $model = Device::query()->findOrFail($device); - $model->delete(); - } -} diff --git a/src/Managers/LogManager.php b/src/Managers/LogManager.php deleted file mode 100644 index 71ecd53..0000000 --- a/src/Managers/LogManager.php +++ /dev/null @@ -1,64 +0,0 @@ -get(); - } - - public function store(int|IApp $app, IDevice|int $device, LogLevel $level, string $message, ?array $data = null, ?array $read = null, bool $userActivityLog = false): ILog - { - $model = new Log(); - - $model->setRead($read); - $model->setAppId($app); - $model->setLevel($level); - $model->setMessage($message); - $model->setDeviceId($device); - $model->setData($data); - - $model->save(); - - return $model; - } - - public function markAsRead(ILog|int $log, ?int $userId = null, ?\DateTimeInterface $readAt = null, bool $userActivityLog = false): ILog - { - $readArray = (array) json_decode($log->getRead()); - - $readArray['readAt'] = (string) $readAt; - $readArray['userId'] = $userId; - $log->setRead($readArray); - $log->save(); - - return $log; - } - - public function markAsUnread(ILog|int $log, bool $userActivityLog = false): ILog - { - $readArray = (array) json_decode($log->getRead()); - - $readArray['readAt'] = null; - $readArray['userId'] = null; - $log->setRead($readArray); - $log->save(); - - return $log; - } - - public function destroy(ILog|int $log, bool $userActivityLog = false): void - { - $model = Log::query()->findOrFail($log); - $model->delete(); - } -} From 2422ca9acbf44b6745a095809eac526b2fd1a6cd Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Tue, 28 Feb 2023 17:26:41 +0330 Subject: [PATCH 125/131] Improve main example --- README.md | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d4528b..c33148c 100644 --- a/README.md +++ b/README.md @@ -64,6 +64,9 @@ Example : ```php use dnj\ErrorTracker\Contracts\IAppManager; +use dnj\ErrorTracker\Contracts\IDeviceManager; +use dnj\ErrorTracker\Contracts\ILogManager; +use dnj\ErrorTracker\Contracts\LogLevel; $appManager = app(IAppManager::class); @@ -72,7 +75,27 @@ $app = $appManager->store( owner: 1, meta: ['key' => 'value']), userActivityLog: false, -); +); + +$deviceManager = app(IDeviceManager::class); + +$device = $deviceManager->store( + title: 'Nokia mobile', + owner: 1, + meta: ['serialNo' => 44514526985]), + userActivityLog: false, +); + + +$logManager = app(ILogManager::class); + +$log = $logManager->store( + app: $app, + device: $device, + level: LogLevel::INFO, + message: 'App just installed', + data: ['version' => "1.0.0"] +); ``` ## Working With Application: From ab5d323599846897f7ed6a7abf68aa48ecfe8717 Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Tue, 28 Feb 2023 17:48:32 +0330 Subject: [PATCH 126/131] use phpunit 9 for running tests in ci --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 071ddb4..e65a569 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -15,6 +15,7 @@ jobs: - uses: php-actions/phpunit@v3 with: + version: 9 php_extensions: bcmath xdebug gd mbstring imagick php_version: "8.1" args: --coverage-clover=coverage/clover-coverage.xml From 6c45a248c92790abeeb8e35f52ad802358e5a9d8 Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Tue, 28 Feb 2023 17:49:47 +0330 Subject: [PATCH 127/131] Remove extra migrations --- ...01_30_101602_create_applications_table.php | 30 ---------------- ...2023_01_30_101606_create_devices_table.php | 31 ---------------- .../2023_01_30_101610_create_logs_table.php | 35 ------------------- 3 files changed, 96 deletions(-) delete mode 100644 database/migrations/2023_01_30_101602_create_applications_table.php delete mode 100644 database/migrations/2023_01_30_101606_create_devices_table.php delete mode 100644 database/migrations/2023_01_30_101610_create_logs_table.php diff --git a/database/migrations/2023_01_30_101602_create_applications_table.php b/database/migrations/2023_01_30_101602_create_applications_table.php deleted file mode 100644 index 4c79311..0000000 --- a/database/migrations/2023_01_30_101602_create_applications_table.php +++ /dev/null @@ -1,30 +0,0 @@ -id(); - $table->string('title'); - $table->json('extra')->nullable(); - $table->integer('owner_id')->nullable(); - $table->integer('owner_id_column')->nullable(); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('apps'); - } -}; diff --git a/database/migrations/2023_01_30_101606_create_devices_table.php b/database/migrations/2023_01_30_101606_create_devices_table.php deleted file mode 100644 index 5f747e9..0000000 --- a/database/migrations/2023_01_30_101606_create_devices_table.php +++ /dev/null @@ -1,31 +0,0 @@ -bigIncrements('id'); - $table->string('title'); - $table->json('extra')->nullable(); - $table->unsignedBigInteger('owner_id')->nullable(); - $table->unsignedBigInteger('owner_id_column'); - $table->boolean('user_activity_log')->default(false); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('devices'); - } -}; diff --git a/database/migrations/2023_01_30_101610_create_logs_table.php b/database/migrations/2023_01_30_101610_create_logs_table.php deleted file mode 100644 index 14ac8cf..0000000 --- a/database/migrations/2023_01_30_101610_create_logs_table.php +++ /dev/null @@ -1,35 +0,0 @@ -id(); - $table->enum('level', Helper::getAllValues(LogLevel::cases())); - $table->text('message'); - $table->json('data')->nullable(); - $table->json('read')->nullable(); - - $table->foreignId('app_id')->constrained('apps'); - $table->foreignId('device_id')->constrained('devices'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('logs'); - } -}; From 70376b7155d2340a45c4d0da872c1ee0cb170b00 Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Wed, 1 Mar 2023 13:47:37 +0330 Subject: [PATCH 128/131] use stable versions --- composer.json | 4 +- composer.lock | 303 +++++++++++++++++++++++++------------------------- 2 files changed, 152 insertions(+), 155 deletions(-) diff --git a/composer.json b/composer.json index e584648..787539a 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "require": { "php": "^8.1", "dnj/laravel-user-logger": "@dev", - "dnj/error-tracker-contracts": "@dev" + "dnj/error-tracker-contracts": "^1.0.0" }, "require-dev": { "phpunit/phpunit": "^9", @@ -35,4 +35,4 @@ ] } } -} \ No newline at end of file +} diff --git a/composer.lock b/composer.lock index cee383e..38aee97 100644 --- a/composer.lock +++ b/composer.lock @@ -4,11 +4,11 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "4baec4c6f3912b6d74406025cedf237b", + "content-hash": "03c941630dd69be787a3a805720f0201", "packages": [ { "name": "dnj/error-tracker-contracts", - "version": "dev-master", + "version": "v1.0.0", "source": { "type": "git", "url": "https://github.com/dnj/php-error-tracker-contracts.git", @@ -27,7 +27,6 @@ "require-dev": { "friendsofphp/php-cs-fixer": "^3.11" }, - "default-branch": true, "type": "library", "autoload": { "psr-4": { @@ -40,7 +39,7 @@ ], "support": { "issues": "https://github.com/dnj/php-error-tracker-contracts/issues", - "source": "https://github.com/dnj/php-error-tracker-contracts/tree/master" + "source": "https://github.com/dnj/php-error-tracker-contracts/tree/v1.0.0" }, "time": "2023-02-28T13:17:42+00:00" }, @@ -50,12 +49,12 @@ "source": { "type": "git", "url": "https://github.com/dnj/laravel-aaa.git", - "reference": "7ffef7f5a20d68b97d22cfd18e2365fadef396d0" + "reference": "65e5a9a3387ec50706a25d657e5e1024477859b2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dnj/laravel-aaa/zipball/7ffef7f5a20d68b97d22cfd18e2365fadef396d0", - "reference": "7ffef7f5a20d68b97d22cfd18e2365fadef396d0", + "url": "https://api.github.com/repos/dnj/laravel-aaa/zipball/65e5a9a3387ec50706a25d657e5e1024477859b2", + "reference": "65e5a9a3387ec50706a25d657e5e1024477859b2", "shasum": "" }, "require": { @@ -91,11 +90,11 @@ "issues": "https://github.com/dnj/laravel-aaa/issues", "source": "https://github.com/dnj/laravel-aaa/tree/master" }, - "time": "2023-02-28T09:29:13+00:00" + "time": "2023-02-28T14:21:46+00:00" }, { "name": "dnj/laravel-user-logger", - "version": "dev-master", + "version": "v1.0.0", "source": { "type": "git", "url": "https://github.com/dnj/laravel-user-logger.git", @@ -115,7 +114,6 @@ "orchestra/testbench": "^7.0", "phpunit/phpunit": "^9" }, - "default-branch": true, "type": "library", "extra": { "laravel": { @@ -135,7 +133,7 @@ ], "support": { "issues": "https://github.com/dnj/laravel-user-logger/issues", - "source": "https://github.com/dnj/laravel-user-logger/tree/master" + "source": "https://github.com/dnj/laravel-user-logger/tree/v1.0.0" }, "time": "2023-01-03T10:34:23+00:00" } @@ -5324,16 +5322,16 @@ }, { "name": "symfony/console", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "3e294254f2191762c1d137aed4b94e966965e985" + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/3e294254f2191762c1d137aed4b94e966965e985", - "reference": "3e294254f2191762c1d137aed4b94e966965e985", + "url": "https://api.github.com/repos/symfony/console/zipball/cbad09eb8925b6ad4fb721c7a179344dc4a19d45", + "reference": "cbad09eb8925b6ad4fb721c7a179344dc4a19d45", "shasum": "" }, "require": { @@ -5400,7 +5398,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.2.5" + "source": "https://github.com/symfony/console/tree/v6.2.7" }, "funding": [ { @@ -5416,20 +5414,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-25T17:00:03+00:00" }, { "name": "symfony/css-selector", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1" + "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", - "reference": "bf1b9d4ad8b1cf0dbde8b08e0135a2f6259b9ba1", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/aedf3cb0f5b929ec255d96bbb4909e9932c769e0", + "reference": "aedf3cb0f5b929ec255d96bbb4909e9932c769e0", "shasum": "" }, "require": { @@ -5465,7 +5463,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.2.5" + "source": "https://github.com/symfony/css-selector/tree/v6.2.7" }, "funding": [ { @@ -5481,20 +5479,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3" + "reference": "0121954c80fd17c18cf050fe73360e63bb43d4fb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/1ee04c65529dea5d8744774d474e7cbd2f1206d3", - "reference": "1ee04c65529dea5d8744774d474e7cbd2f1206d3", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0121954c80fd17c18cf050fe73360e63bb43d4fb", + "reference": "0121954c80fd17c18cf050fe73360e63bb43d4fb", "shasum": "" }, "require": { @@ -5532,7 +5530,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.2.1" }, "funding": [ { @@ -5548,20 +5546,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-02-02T07:48:03+00:00" }, { "name": "symfony/error-handler", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28" + "reference": "61e90f94eb014054000bc902257d2763fac09166" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/0092696af0be8e6124b042fbe2890ca1788d7b28", - "reference": "0092696af0be8e6124b042fbe2890ca1788d7b28", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/61e90f94eb014054000bc902257d2763fac09166", + "reference": "61e90f94eb014054000bc902257d2763fac09166", "shasum": "" }, "require": { @@ -5603,7 +5601,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.5" + "source": "https://github.com/symfony/error-handler/tree/v6.2.7" }, "funding": [ { @@ -5619,20 +5617,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68" + "reference": "404b307de426c1c488e5afad64403e5f145e82a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", - "reference": "f02d108b5e9fd4a6245aa73a9d2df2ec060c3e68", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/404b307de426c1c488e5afad64403e5f145e82a5", + "reference": "404b307de426c1c488e5afad64403e5f145e82a5", "shasum": "" }, "require": { @@ -5686,7 +5684,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.5" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.7" }, "funding": [ { @@ -5702,20 +5700,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae" + "reference": "2265d0faa6d870182dd8c65e40d3dfbc34e79b26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/0782b0b52a737a05b4383d0df35a474303cabdae", - "reference": "0782b0b52a737a05b4383d0df35a474303cabdae", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/2265d0faa6d870182dd8c65e40d3dfbc34e79b26", + "reference": "2265d0faa6d870182dd8c65e40d3dfbc34e79b26", "shasum": "" }, "require": { @@ -5765,7 +5763,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.2.1" }, "funding": [ { @@ -5781,20 +5779,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-02-02T07:48:03+00:00" }, { "name": "symfony/filesystem", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593" + "reference": "82b6c62b959f642d000456f08c6d219d749215b3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/e59e8a4006afd7f5654786a83b4fcb8da98f4593", - "reference": "e59e8a4006afd7f5654786a83b4fcb8da98f4593", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/82b6c62b959f642d000456f08c6d219d749215b3", + "reference": "82b6c62b959f642d000456f08c6d219d749215b3", "shasum": "" }, "require": { @@ -5828,7 +5826,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.2.5" + "source": "https://github.com/symfony/filesystem/tree/v6.2.7" }, "funding": [ { @@ -5844,20 +5842,20 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:45:48+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/finder", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c" + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/c90dc446976a612e3312a97a6ec0069ab0c2099c", - "reference": "c90dc446976a612e3312a97a6ec0069ab0c2099c", + "url": "https://api.github.com/repos/symfony/finder/zipball/20808dc6631aecafbe67c186af5dcb370be3a0eb", + "reference": "20808dc6631aecafbe67c186af5dcb370be3a0eb", "shasum": "" }, "require": { @@ -5892,7 +5890,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.2.5" + "source": "https://github.com/symfony/finder/tree/v6.2.7" }, "funding": [ { @@ -5908,20 +5906,20 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:45:48+00:00" + "time": "2023-02-16T09:57:23+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.2.6", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed" + "reference": "5fc3038d4a594223f9ea42e4e985548f3fcc9a3b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/e8dd1f502bc2b3371d05092aa233b064b03ce7ed", - "reference": "e8dd1f502bc2b3371d05092aa233b064b03ce7ed", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5fc3038d4a594223f9ea42e4e985548f3fcc9a3b", + "reference": "5fc3038d4a594223f9ea42e4e985548f3fcc9a3b", "shasum": "" }, "require": { @@ -5970,7 +5968,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.6" + "source": "https://github.com/symfony/http-foundation/tree/v6.2.7" }, "funding": [ { @@ -5986,20 +5984,20 @@ "type": "tidelift" } ], - "time": "2023-01-30T15:46:28+00:00" + "time": "2023-02-21T10:54:55+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.2.6", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7" + "reference": "ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/7122db07b0d8dbf0de682267c84217573aee3ea7", - "reference": "7122db07b0d8dbf0de682267c84217573aee3ea7", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd", + "reference": "ca0680ad1e2d678536cc20e0ae33f9e4e5d2becd", "shasum": "" }, "require": { @@ -6008,7 +6006,7 @@ "symfony/deprecation-contracts": "^2.1|^3", "symfony/error-handler": "^6.1", "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/http-foundation": "^5.4|^6.0", + "symfony/http-foundation": "^5.4.21|^6.2.7", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -6081,7 +6079,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.6" + "source": "https://github.com/symfony/http-kernel/tree/v6.2.7" }, "funding": [ { @@ -6097,20 +6095,20 @@ "type": "tidelift" } ], - "time": "2023-02-01T08:32:25+00:00" + "time": "2023-02-28T13:26:41+00:00" }, { "name": "symfony/mailer", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa" + "reference": "e4f84c633b72ec70efc50b8016871c3bc43e691e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/29729ac0b4e5113f24c39c46746bd6afb79e0aaa", - "reference": "29729ac0b4e5113f24c39c46746bd6afb79e0aaa", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4f84c633b72ec70efc50b8016871c3bc43e691e", + "reference": "e4f84c633b72ec70efc50b8016871c3bc43e691e", "shasum": "" }, "require": { @@ -6130,7 +6128,7 @@ }, "require-dev": { "symfony/console": "^5.4|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", + "symfony/http-client": "^5.4|^6.0", "symfony/messenger": "^6.2", "symfony/twig-bridge": "^6.2" }, @@ -6160,7 +6158,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.2.5" + "source": "https://github.com/symfony/mailer/tree/v6.2.7" }, "funding": [ { @@ -6176,20 +6174,20 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:53:53+00:00" + "time": "2023-02-21T10:35:38+00:00" }, { "name": "symfony/mime", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610" + "reference": "62e341f80699badb0ad70b31149c8df89a2d778e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/4b7b349f67d15cd0639955c8179a76c89f6fd610", - "reference": "4b7b349f67d15cd0639955c8179a76c89f6fd610", + "url": "https://api.github.com/repos/symfony/mime/zipball/62e341f80699badb0ad70b31149c8df89a2d778e", + "reference": "62e341f80699badb0ad70b31149c8df89a2d778e", "shasum": "" }, "require": { @@ -6243,7 +6241,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.2.5" + "source": "https://github.com/symfony/mime/tree/v6.2.7" }, "funding": [ { @@ -6259,20 +6257,20 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:53:53+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "e8324d44f5af99ec2ccec849934a242f64458f86" + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/e8324d44f5af99ec2ccec849934a242f64458f86", - "reference": "e8324d44f5af99ec2ccec849934a242f64458f86", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/aa0e85b53bbb2b4951960efd61d295907eacd629", + "reference": "aa0e85b53bbb2b4951960efd61d295907eacd629", "shasum": "" }, "require": { @@ -6310,7 +6308,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.2.5" + "source": "https://github.com/symfony/options-resolver/tree/v6.2.7" }, "funding": [ { @@ -6326,7 +6324,7 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/polyfill-ctype", @@ -7150,16 +7148,16 @@ }, { "name": "symfony/process", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7" + "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", - "reference": "9ead139f63dfa38c4e4a9049cc64a8b2748c83b7", + "url": "https://api.github.com/repos/symfony/process/zipball/680e8a2ea6b3f87aecc07a6a65a203ae573d1902", + "reference": "680e8a2ea6b3f87aecc07a6a65a203ae573d1902", "shasum": "" }, "require": { @@ -7191,7 +7189,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.2.5" + "source": "https://github.com/symfony/process/tree/v6.2.7" }, "funding": [ { @@ -7207,20 +7205,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "symfony/routing", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "589bd742d5d03c192c8521911680fe88f61712fe" + "reference": "fa643fa4c56de161f8bc8c0492a76a60140b50e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/589bd742d5d03c192c8521911680fe88f61712fe", - "reference": "589bd742d5d03c192c8521911680fe88f61712fe", + "url": "https://api.github.com/repos/symfony/routing/zipball/fa643fa4c56de161f8bc8c0492a76a60140b50e4", + "reference": "fa643fa4c56de161f8bc8c0492a76a60140b50e4", "shasum": "" }, "require": { @@ -7279,7 +7277,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.2.5" + "source": "https://github.com/symfony/routing/tree/v6.2.7" }, "funding": [ { @@ -7295,20 +7293,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-14T08:53:37+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75" + "reference": "aee5f59db63978f7785290b94d2f12286b1b590a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aac98028c69df04ee77eb69b96b86ee51fbf4b75", - "reference": "aac98028c69df04ee77eb69b96b86ee51fbf4b75", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/aee5f59db63978f7785290b94d2f12286b1b590a", + "reference": "aee5f59db63978f7785290b94d2f12286b1b590a", "shasum": "" }, "require": { @@ -7364,7 +7362,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.2.1" }, "funding": [ { @@ -7380,20 +7378,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-02-16T12:50:33+00:00" }, { "name": "symfony/stopwatch", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/stopwatch.git", - "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6" + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/stopwatch/zipball/00b6ac156aacffc53487c930e0ab14587a6607f6", - "reference": "00b6ac156aacffc53487c930e0ab14587a6607f6", + "url": "https://api.github.com/repos/symfony/stopwatch/zipball/f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", + "reference": "f3adc98c1061875dd2edcd45e5b04e63d0e29f8f", "shasum": "" }, "require": { @@ -7426,7 +7424,7 @@ "description": "Provides a way to profile code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/stopwatch/tree/v6.2.5" + "source": "https://github.com/symfony/stopwatch/tree/v6.2.7" }, "funding": [ { @@ -7442,20 +7440,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:36:55+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/string", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0" + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", - "reference": "b2dac0fa27b1ac0f9c0c0b23b43977f12308d0b0", + "url": "https://api.github.com/repos/symfony/string/zipball/67b8c1eec78296b85dc1c7d9743830160218993d", + "reference": "67b8c1eec78296b85dc1c7d9743830160218993d", "shasum": "" }, "require": { @@ -7512,7 +7510,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.2.5" + "source": "https://github.com/symfony/string/tree/v6.2.7" }, "funding": [ { @@ -7528,20 +7526,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "symfony/translation", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c" + "reference": "90db1c6138c90527917671cd9ffa9e8b359e3a73" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/60556925a703cfbc1581cde3b3f35b0bb0ea904c", - "reference": "60556925a703cfbc1581cde3b3f35b0bb0ea904c", + "url": "https://api.github.com/repos/symfony/translation/zipball/90db1c6138c90527917671cd9ffa9e8b359e3a73", + "reference": "90db1c6138c90527917671cd9ffa9e8b359e3a73", "shasum": "" }, "require": { @@ -7610,7 +7608,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.2.5" + "source": "https://github.com/symfony/translation/tree/v6.2.7" }, "funding": [ { @@ -7626,20 +7624,20 @@ "type": "tidelift" } ], - "time": "2023-01-05T07:00:27+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.2.0", + "version": "v3.2.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "68cce71402305a015f8c1589bfada1280dc64fe7" + "reference": "1f40e77fbb12a16d841688f42fecefd8ceb43ed6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/68cce71402305a015f8c1589bfada1280dc64fe7", - "reference": "68cce71402305a015f8c1589bfada1280dc64fe7", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1f40e77fbb12a16d841688f42fecefd8ceb43ed6", + "reference": "1f40e77fbb12a16d841688f42fecefd8ceb43ed6", "shasum": "" }, "require": { @@ -7691,7 +7689,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.2.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.2.1" }, "funding": [ { @@ -7707,20 +7705,20 @@ "type": "tidelift" } ], - "time": "2022-11-25T10:21:52+00:00" + "time": "2023-02-16T12:50:33+00:00" }, { "name": "symfony/uid", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b" + "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/8ace895bded57d6496638c9b2d3b788e05b7395b", - "reference": "8ace895bded57d6496638c9b2d3b788e05b7395b", + "url": "https://api.github.com/repos/symfony/uid/zipball/d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", + "reference": "d30c72a63897cfa043e1de4d4dd2ffa9ecefcdc0", "shasum": "" }, "require": { @@ -7765,7 +7763,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.2.5" + "source": "https://github.com/symfony/uid/tree/v6.2.7" }, "funding": [ { @@ -7781,20 +7779,20 @@ "type": "tidelift" } ], - "time": "2023-01-01T08:38:09+00:00" + "time": "2023-02-14T08:44:56+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27" + "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/44b7b81749fd20c1bdf4946c041050e22bc8da27", - "reference": "44b7b81749fd20c1bdf4946c041050e22bc8da27", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", + "reference": "cf8d4ca1ddc1e3cc242375deb8fc23e54f5e2a1e", "shasum": "" }, "require": { @@ -7853,7 +7851,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.2.5" + "source": "https://github.com/symfony/var-dumper/tree/v6.2.7" }, "funding": [ { @@ -7869,20 +7867,20 @@ "type": "tidelift" } ], - "time": "2023-01-20T17:45:48+00:00" + "time": "2023-02-24T10:42:00+00:00" }, { "name": "symfony/yaml", - "version": "v6.2.5", + "version": "v6.2.7", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19" + "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", - "reference": "2bbfbdacc8a15574f8440c4838ce0d7bb6c86b19", + "url": "https://api.github.com/repos/symfony/yaml/zipball/e8e6a1d59e050525f27a1f530aa9703423cb7f57", + "reference": "e8e6a1d59e050525f27a1f530aa9703423cb7f57", "shasum": "" }, "require": { @@ -7927,7 +7925,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.2.5" + "source": "https://github.com/symfony/yaml/tree/v6.2.7" }, "funding": [ { @@ -7943,7 +7941,7 @@ "type": "tidelift" } ], - "time": "2023-01-10T18:53:53+00:00" + "time": "2023-02-16T09:57:23+00:00" }, { "name": "theseer/tokenizer", @@ -8475,8 +8473,7 @@ "aliases": [], "minimum-stability": "dev", "stability-flags": { - "dnj/laravel-user-logger": 20, - "dnj/error-tracker-contracts": 20 + "dnj/laravel-user-logger": 20 }, "prefer-stable": true, "prefer-lowest": false, From d31133bb25ca17596f5cea52f82f835166c81009 Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Thu, 13 Apr 2023 04:56:04 +0330 Subject: [PATCH 129/131] Fix foreign keys --- .../2023_02_27_000001_create_apps_table.php | 4 +++- .../2023_02_27_000002_create_devices_table.php | 4 +++- .../2023_02_27_000003_create_logs_table.php | 16 +++++++--------- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/database/migrations/2023_02_27_000001_create_apps_table.php b/database/migrations/2023_02_27_000001_create_apps_table.php index 2df6074..745f553 100644 --- a/database/migrations/2023_02_27_000001_create_apps_table.php +++ b/database/migrations/2023_02_27_000001_create_apps_table.php @@ -12,7 +12,9 @@ public function up(): void $table->id(); $table->string('title'); $table->json('meta')->nullable(); - $table->foreignIdFor(User::class, 'owner_id')->nullable(); + $table->foreignId('owner_id') + ->nullable() + ->constrained((new User())->getTable(), 'id'); $table->timestamps(); }); } diff --git a/database/migrations/2023_02_27_000002_create_devices_table.php b/database/migrations/2023_02_27_000002_create_devices_table.php index 6743d13..98bdf0a 100644 --- a/database/migrations/2023_02_27_000002_create_devices_table.php +++ b/database/migrations/2023_02_27_000002_create_devices_table.php @@ -12,7 +12,9 @@ public function up(): void $table->id(); $table->string('title'); $table->json('meta')->nullable(); - $table->foreignIdFor(User::class, 'owner_id')->nullable(); + $table->foreignId('owner_id') + ->nullable() + ->constrained((new User())->getTable(), 'id'); $table->timestamps(); }); } diff --git a/database/migrations/2023_02_27_000003_create_logs_table.php b/database/migrations/2023_02_27_000003_create_logs_table.php index 56e9a11..30f6c76 100644 --- a/database/migrations/2023_02_27_000003_create_logs_table.php +++ b/database/migrations/2023_02_27_000003_create_logs_table.php @@ -2,8 +2,6 @@ use dnj\AAA\Models\User; use dnj\ErrorTracker\Contracts\LogLevel; -use dnj\ErrorTracker\Laravel\Server\Models\App; -use dnj\ErrorTracker\Laravel\Server\Models\Device; use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; @@ -14,21 +12,21 @@ public function up(): void Schema::create('error_tracker_logs', function (Blueprint $table) { $table->id(); - $table->foreignIdFor(App::class, 'app_id') - ->references('id') + $table->foreignId('app_id') + ->constrained('error_tracker_apps', 'id') ->cascadeOnDelete(); - $table->foreignIdFor(Device::class, 'device_id') - ->references('id') + $table->foreignId('device_id') + ->constrained('error_tracker_devices', 'id') ->cascadeOnDelete(); - $table->foreignIdFor(User::class, 'reader_id') + $table->foreignId('reader_id') ->nullable() - ->references('id') + ->constrained((new User())->getTable(), 'id') ->cascadeOnDelete(); $table->timestamp('read_at')->nullable(); - $table->timestamp('created_at'); + $table->timestamp('created_at')->useCurrent(); $table->enum('level', array_column(LogLevel::cases(), 'name')); $table->string('message'); $table->json('data')->nullable(); From eb8823419d93d461437bcf25b698456e08119004 Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Thu, 13 Apr 2023 04:56:56 +0330 Subject: [PATCH 130/131] Run php-cs-fixer --- src/AppManager.php | 1 - src/Http/Controllers/AppController.php | 2 +- src/Http/Controllers/LogController.php | 3 +- src/Http/Requests/AppSearchRequest.php | 20 ++++++------- src/Http/Requests/AppStoreRequest.php | 22 +++++++------- src/Http/Requests/AppUpdateRequest.php | 22 +++++++------- src/Http/Requests/DeviceSearchRequest.php | 14 ++++----- src/Http/Requests/DeviceStoreRequest.php | 22 +++++++------- src/Http/Requests/DeviceUpdateRequest.php | 22 +++++++------- src/Http/Requests/LogSearchRequest.php | 26 ++++++++--------- src/Http/Requests/LogStoreRequest.php | 20 ++++++------- src/LogManager.php | 27 +++++++++-------- src/Models/App.php | 2 +- src/Models/Device.php | 8 +++--- src/Models/Log.php | 15 +++++----- tests/Feature/AppManagerTest.php | 11 ++++--- tests/Feature/DeviceManagerTest.php | 6 ++-- tests/Feature/LogManagerTest.php | 35 +++++++++++------------ tests/TestCase.php | 11 ++++--- 19 files changed, 143 insertions(+), 146 deletions(-) diff --git a/src/AppManager.php b/src/AppManager.php index 09fa43f..c21662d 100644 --- a/src/AppManager.php +++ b/src/AppManager.php @@ -2,7 +2,6 @@ namespace dnj\ErrorTracker\Laravel\Server; -use dnj\AAA\Contracts\IUser; use dnj\ErrorTracker\Contracts\IApp; use dnj\ErrorTracker\Contracts\IAppManager; use dnj\ErrorTracker\Laravel\Server\Models\App; diff --git a/src/Http/Controllers/AppController.php b/src/Http/Controllers/AppController.php index 526bd18..38196d8 100644 --- a/src/Http/Controllers/AppController.php +++ b/src/Http/Controllers/AppController.php @@ -25,7 +25,7 @@ public function index(AppSearchRequest $request): AppResource public function store(AppStoreRequest $request): AppResource { $data = $request->validated(); - $app = $this->appManager->store($data['title'],$data['owner'], $data['meta'] ?? null, true); + $app = $this->appManager->store($data['title'], $data['owner'], $data['meta'] ?? null, true); return AppResource::make($app); } diff --git a/src/Http/Controllers/LogController.php b/src/Http/Controllers/LogController.php index 0d47566..2598799 100644 --- a/src/Http/Controllers/LogController.php +++ b/src/Http/Controllers/LogController.php @@ -2,7 +2,6 @@ namespace dnj\ErrorTracker\Laravel\Server\Http\Controllers; -use Carbon\Carbon; use dnj\ErrorTracker\Contracts\ILogManager; use dnj\ErrorTracker\Contracts\LogLevel; use dnj\ErrorTracker\Laravel\Server\Http\Requests\LogSearchRequest; @@ -27,7 +26,7 @@ public function index(LogSearchRequest $request) public function store(LogStoreRequest $request): LogResource { $data = $request->validated(); - $data['level'] = constant(LogLevel::class . "::" . $data['level']); + $data['level'] = constant(LogLevel::class.'::'.$data['level']); $log = $this->logManager->store( $data['app'], $data['device'], diff --git a/src/Http/Requests/AppSearchRequest.php b/src/Http/Requests/AppSearchRequest.php index be04c70..128580a 100644 --- a/src/Http/Requests/AppSearchRequest.php +++ b/src/Http/Requests/AppSearchRequest.php @@ -6,14 +6,14 @@ class AppSearchRequest extends FormRequest { - /** - * @return array - */ - public function rules(): array - { - return [ - 'title' => ['string', 'required', 'sometimes'], - 'owner' => ['int','required', 'sometimes'], - ]; - } + /** + * @return array + */ + public function rules(): array + { + return [ + 'title' => ['string', 'required', 'sometimes'], + 'owner' => ['int', 'required', 'sometimes'], + ]; + } } diff --git a/src/Http/Requests/AppStoreRequest.php b/src/Http/Requests/AppStoreRequest.php index 6f3215e..6b94529 100644 --- a/src/Http/Requests/AppStoreRequest.php +++ b/src/Http/Requests/AppStoreRequest.php @@ -6,15 +6,15 @@ class AppStoreRequest extends FormRequest { - /** - * @return array - */ - public function rules(): array - { - return [ - 'title' => ['string', 'required'], - 'meta' => ['array', 'nullable'], - 'owner' => ['int', 'required'], - ]; - } + /** + * @return array + */ + public function rules(): array + { + return [ + 'title' => ['string', 'required'], + 'meta' => ['array', 'nullable'], + 'owner' => ['int', 'required'], + ]; + } } diff --git a/src/Http/Requests/AppUpdateRequest.php b/src/Http/Requests/AppUpdateRequest.php index 35e544f..b45b44d 100644 --- a/src/Http/Requests/AppUpdateRequest.php +++ b/src/Http/Requests/AppUpdateRequest.php @@ -6,15 +6,15 @@ class AppUpdateRequest extends FormRequest { - /** - * @return array - */ - public function rules(): array - { - return [ - 'title' => ['string', 'required', 'sometimes'], - 'meta' => ['array', 'nullable', 'sometimes'], - 'owner' => ['int', 'required', 'sometimes'], - ]; - } + /** + * @return array + */ + public function rules(): array + { + return [ + 'title' => ['string', 'required', 'sometimes'], + 'meta' => ['array', 'nullable', 'sometimes'], + 'owner' => ['int', 'required', 'sometimes'], + ]; + } } diff --git a/src/Http/Requests/DeviceSearchRequest.php b/src/Http/Requests/DeviceSearchRequest.php index 9c99f21..6260d09 100644 --- a/src/Http/Requests/DeviceSearchRequest.php +++ b/src/Http/Requests/DeviceSearchRequest.php @@ -6,11 +6,11 @@ class DeviceSearchRequest extends FormRequest { - public function rules(): array - { - return [ - 'title' => ['string', 'required', 'sometimes'], - 'owner' => ['int','required', 'sometimes'], - ]; - } + public function rules(): array + { + return [ + 'title' => ['string', 'required', 'sometimes'], + 'owner' => ['int', 'required', 'sometimes'], + ]; + } } diff --git a/src/Http/Requests/DeviceStoreRequest.php b/src/Http/Requests/DeviceStoreRequest.php index f09f179..8508984 100644 --- a/src/Http/Requests/DeviceStoreRequest.php +++ b/src/Http/Requests/DeviceStoreRequest.php @@ -6,15 +6,15 @@ class DeviceStoreRequest extends FormRequest { - /** - * @return array - */ - public function rules(): array - { - return [ - 'title' => ['string', 'nullable'], - 'meta' => ['array', 'nullable'], - 'owner' => ['int', 'nullable'], - ]; - } + /** + * @return array + */ + public function rules(): array + { + return [ + 'title' => ['string', 'nullable'], + 'meta' => ['array', 'nullable'], + 'owner' => ['int', 'nullable'], + ]; + } } diff --git a/src/Http/Requests/DeviceUpdateRequest.php b/src/Http/Requests/DeviceUpdateRequest.php index 71f0d64..4388968 100644 --- a/src/Http/Requests/DeviceUpdateRequest.php +++ b/src/Http/Requests/DeviceUpdateRequest.php @@ -6,15 +6,15 @@ class DeviceUpdateRequest extends FormRequest { - /** - * @return array - */ - public function rules(): array - { - return [ - 'title' => ['string', 'nullable', 'sometimes'], - 'meta' => ['array', 'nullable', 'sometimes'], - 'owner' => ['int', 'nullable', 'sometimes'], - ]; - } + /** + * @return array + */ + public function rules(): array + { + return [ + 'title' => ['string', 'nullable', 'sometimes'], + 'meta' => ['array', 'nullable', 'sometimes'], + 'owner' => ['int', 'nullable', 'sometimes'], + ]; + } } diff --git a/src/Http/Requests/LogSearchRequest.php b/src/Http/Requests/LogSearchRequest.php index 23c8536..b2e20dd 100644 --- a/src/Http/Requests/LogSearchRequest.php +++ b/src/Http/Requests/LogSearchRequest.php @@ -11,20 +11,20 @@ class LogSearchRequest extends FormRequest { - public function rules(): array - { - return [ - 'apps' => ['array', 'required', 'sometimes'], - 'apps.*' => [new Exists(App::class, 'id')], + public function rules(): array + { + return [ + 'apps' => ['array', 'required', 'sometimes'], + 'apps.*' => [new Exists(App::class, 'id')], - 'devices' => ['array', 'nullable'], - 'devices.*' => [new Exists(Device::class, 'id')], + 'devices' => ['array', 'nullable'], + 'devices.*' => [new Exists(Device::class, 'id')], - 'levels' => ['array', 'nullable'], - 'levels.*' => [Rule::in(array_column(LogLevel::cases(), 'key'))], + 'levels' => ['array', 'nullable'], + 'levels.*' => [Rule::in(array_column(LogLevel::cases(), 'key'))], - 'message' => ['string'], - 'unread' => ['bool'], - ]; - } + 'message' => ['string'], + 'unread' => ['bool'], + ]; + } } diff --git a/src/Http/Requests/LogStoreRequest.php b/src/Http/Requests/LogStoreRequest.php index 35f8e8b..ce7cd45 100644 --- a/src/Http/Requests/LogStoreRequest.php +++ b/src/Http/Requests/LogStoreRequest.php @@ -8,14 +8,14 @@ class LogStoreRequest extends FormRequest { - public function rules(): array - { - return [ - 'app' => ['integer', 'required'], - 'device' => ['integer', 'required'], - 'level' => ['required', Rule::in(array_column(LogLevel::cases(), 'key'))], - 'message' => ['string', 'required'], - 'data' => ['array', 'nullable'], - ]; - } + public function rules(): array + { + return [ + 'app' => ['integer', 'required'], + 'device' => ['integer', 'required'], + 'level' => ['required', Rule::in(array_column(LogLevel::cases(), 'key'))], + 'message' => ['string', 'required'], + 'data' => ['array', 'nullable'], + ]; + } } diff --git a/src/LogManager.php b/src/LogManager.php index 0e9d788..06f64c6 100644 --- a/src/LogManager.php +++ b/src/LogManager.php @@ -18,7 +18,7 @@ class LogManager implements ILogManager public function __construct(protected ILogger $userLogger) { } - + /** * @return Collection */ @@ -29,7 +29,7 @@ public function search(array $filters): Collection public function store(int|IApp $app, IDevice|int $device, LogLevel $level, string $message, ?array $data = null, ?array $read = null): Log { - return DB::transaction(function() use ($app, $device, $level, $message, $data, $read) { + return DB::transaction(function () use ($app, $device, $level, $message, $data, $read) { if ($app instanceof IApp) { $app = $app->getId(); } @@ -45,7 +45,7 @@ public function store(int|IApp $app, IDevice|int $device, LogLevel $level, strin $read['user'] = $read['user']->getAuthIdentifier(); } } - $log = Log::query()->create(array( + $log = Log::query()->create([ 'app_id' => $app, 'device_id' => $device, 'level' => $level, @@ -53,15 +53,14 @@ public function store(int|IApp $app, IDevice|int $device, LogLevel $level, strin 'data' => $data, 'reader_id' => $read ? $read['user'] : null, 'read_at' => $read ? $read['readAt'] : null, - )); - + ]); return $log; }); } - public function markAsRead(ILog|int $log, int|Authenticatable $user, ?\DateTimeInterface $readAt = null, bool $userActivityLog = false): Log { - + public function markAsRead(ILog|int $log, int|Authenticatable $user, ?\DateTimeInterface $readAt = null, bool $userActivityLog = false): Log + { return DB::transaction(function () use ($log, $user, $readAt) { if ($log instanceof ILog) { $log = $log->getId(); @@ -72,17 +71,17 @@ public function markAsRead(ILog|int $log, int|Authenticatable $user, ?\DateTimeI if (!$readAt) { $readAt = now(); } - + /** * @var Log */ $log = Log::query() ->lockForUpdate() ->findOrFail($log); - $log->update(array( + $log->update([ 'reader_id' => $user, 'read_at' => $readAt, - )); + ]); return $log; }); @@ -101,10 +100,10 @@ public function markAsUnread(ILog|int $log, bool $userActivityLog = false): ILog $log = Log::query() ->lockForUpdate() ->findOrFail($log) - ->fill(array( + ->fill([ 'reader_id' => null, 'read_at' => null, - )); + ]); $changes = $log->changesForLog(); $log->save(); @@ -112,7 +111,7 @@ public function markAsUnread(ILog|int $log, bool $userActivityLog = false): ILog $this->userLogger->on($log) ->withRequest(request()) ->withProperties($changes) - ->log("mark-as-unread"); + ->log('mark-as-unread'); } return $log; @@ -137,7 +136,7 @@ public function destroy(ILog|int $log, bool $userActivityLog = false): void if ($userActivityLog) { $this->userLogger->on($log) ->withRequest(request()) - ->log("destroyed"); + ->log('destroyed'); } }); } diff --git a/src/Models/App.php b/src/Models/App.php index e11b87d..586e26e 100644 --- a/src/Models/App.php +++ b/src/Models/App.php @@ -57,7 +57,7 @@ public function scopeFilter(Builder $builder, array $filters) $builder->where('owner_id', $filters['owner']); } if (isset($filters['title'])) { - $builder->where('title', 'LIKE', '%' . $filters['title'] . '%'); + $builder->where('title', 'LIKE', '%'.$filters['title'].'%'); } if (isset($filters['user'])) { // TODO diff --git a/src/Models/Device.php b/src/Models/Device.php index 9f343da..3f5a006 100644 --- a/src/Models/Device.php +++ b/src/Models/Device.php @@ -52,9 +52,9 @@ public function owner(): BelongsTo public function scopeFilter(Builder $builder, array $filters) { - if (array_key_exists("owner", $filters)) { - if ($filters === null) { - $builder->whereNull("owner_id"); + if (array_key_exists('owner', $filters)) { + if (null === $filters) { + $builder->whereNull('owner_id'); } else { if ($filters['owner'] instanceof Authenticatable) { $filters['owner'] = $filters['owner']->getAuthIdentifier(); @@ -63,7 +63,7 @@ public function scopeFilter(Builder $builder, array $filters) } } if (isset($filters['title'])) { - $builder->where('title', 'LIKE', '%' . $filters['title'] . '%'); + $builder->where('title', 'LIKE', '%'.$filters['title'].'%'); } if (isset($filters['user'])) { // TODO diff --git a/src/Models/Log.php b/src/Models/Log.php index b011834..64f73c0 100644 --- a/src/Models/Log.php +++ b/src/Models/Log.php @@ -10,7 +10,6 @@ use dnj\ErrorTracker\Contracts\LogLevel; use dnj\ErrorTracker\Laravel\Database\Factories\LogFactory; use dnj\UserLogger\Concerns\Loggable; -use Illuminate\Contracts\Auth\Authenticatable; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; @@ -67,27 +66,27 @@ public function scopeFilter(Builder $builder, array $filters) { if (isset($filters['apps'])) { $filters['apps'] = array_map(fn ($v) => $v instanceof IApp ? $v->getId() : $v, $filters['apps']); - $builder->whereIn("app_id", $filters['apps']); + $builder->whereIn('app_id', $filters['apps']); } if (isset($filters['devices'])) { $filters['devices'] = array_map(fn ($v) => $v instanceof IDevice ? $v->getId() : $v, $filters['devices']); - $builder->whereIn("device_id", $filters['devices']); + $builder->whereIn('device_id', $filters['devices']); } if (isset($filters['levels'])) { $filters['levels'] = array_map(fn ($v) => $v->name, $filters['levels']); - $builder->whereIn("level", $filters['levels']); + $builder->whereIn('level', $filters['levels']); } if (isset($filters['message'])) { - $builder->where("message", "LIKE", "%" . $filters['message'] . "%"); + $builder->where('message', 'LIKE', '%'.$filters['message'].'%'); } if (isset($filters['unread'])) { if ($filters['unread']) { - $builder->whereNull("read_at"); + $builder->whereNull('read_at'); } else { - $builder->whereNotNull("read_at"); + $builder->whereNotNull('read_at'); } } - + if (isset($filters['user'])) { // TODO } diff --git a/tests/Feature/AppManagerTest.php b/tests/Feature/AppManagerTest.php index bcc4ab0..860a90a 100644 --- a/tests/Feature/AppManagerTest.php +++ b/tests/Feature/AppManagerTest.php @@ -16,15 +16,15 @@ public function testSearch(): void * @var App $app3 */ $app1 = App::factory() - ->withTitle("test App 1") + ->withTitle('test App 1') ->create(); $app2 = App::factory() - ->withTitle("test App 2") + ->withTitle('test App 2') ->create(); - + $app3 = App::factory() - ->withTitle("App 3") + ->withTitle('App 3') ->create(); $apps = $this->getAppManager()->search(['title' => 'test']); @@ -38,7 +38,7 @@ public function testSearch(): void $this->assertContains($app1->id, $appIds); $this->assertNotContains($app2->id, $appIds); $this->assertNotContains($app3->id, $appIds); - + $apps = $this->getAppManager()->search(['title' => 'test', 'owner' => $app1->owner]); $appIds = array_column(iterator_to_array($apps), 'id'); $this->assertContains($app1->id, $appIds); @@ -81,5 +81,4 @@ public function testDestroy(): void $this->getAppManager()->destroy($app, true); $this->assertModelMissing($app); } - } diff --git a/tests/Feature/DeviceManagerTest.php b/tests/Feature/DeviceManagerTest.php index fe2fff5..a5ef659 100644 --- a/tests/Feature/DeviceManagerTest.php +++ b/tests/Feature/DeviceManagerTest.php @@ -16,15 +16,15 @@ public function testSearch(): void * @var Device $device3 */ $device1 = Device::factory() - ->withTitle("test Device 1") + ->withTitle('test Device 1') ->create(); $device2 = Device::factory() - ->withTitle("test Device 2") + ->withTitle('test Device 2') ->create(); $device3 = Device::factory() - ->withTitle("Device 3") + ->withTitle('Device 3') ->create(); $devices = $this->getDeviceManager()->search(['title' => 'test']); diff --git a/tests/Feature/LogManagerTest.php b/tests/Feature/LogManagerTest.php index 7e040aa..31fadb8 100644 --- a/tests/Feature/LogManagerTest.php +++ b/tests/Feature/LogManagerTest.php @@ -17,46 +17,46 @@ public function testSearch() $device = Device::factory()->create(); $log1 = Log::factory()->withLevel(LogLevel::ERROR)->withApp($app)->create(); $log2 = Log::factory()->withLevel(LogLevel::INFO)->withDevice($device)->read()->create(); - $log3 = Log::factory()->withLevel(LogLevel::DEBUG)->withMessage("non critical error")->create(); + $log3 = Log::factory()->withLevel(LogLevel::DEBUG)->withMessage('non critical error')->create(); - $logs = $this->getLogManager()->search(array( + $logs = $this->getLogManager()->search([ 'apps' => [$app->id], - )); + ]); $this->assertTrue($logs->contains($log1)); $this->assertFalse($logs->contains($log2)); $this->assertFalse($logs->contains($log3)); - $logs = $this->getLogManager()->search(array( + $logs = $this->getLogManager()->search([ 'devices' => [$device->id], - )); + ]); $this->assertFalse($logs->contains($log1)); $this->assertTrue($logs->contains($log2)); $this->assertFalse($logs->contains($log3)); - $logs = $this->getLogManager()->search(array( + $logs = $this->getLogManager()->search([ 'levels' => [LogLevel::DEBUG, LogLevel::ERROR], - )); + ]); $this->assertTrue($logs->contains($log1)); $this->assertFalse($logs->contains($log2)); $this->assertTrue($logs->contains($log3)); - $logs = $this->getLogManager()->search(array( - 'message' => 'critical' - )); + $logs = $this->getLogManager()->search([ + 'message' => 'critical', + ]); $this->assertFalse($logs->contains($log1)); $this->assertFalse($logs->contains($log2)); $this->assertTrue($logs->contains($log3)); - $logs = $this->getLogManager()->search(array( - 'unread' => false - )); + $logs = $this->getLogManager()->search([ + 'unread' => false, + ]); $this->assertFalse($logs->contains($log1)); $this->assertTrue($logs->contains($log2)); $this->assertFalse($logs->contains($log3)); - - $logs = $this->getLogManager()->search(array( - 'unread' => true - )); + + $logs = $this->getLogManager()->search([ + 'unread' => true, + ]); $this->assertTrue($logs->contains($log1)); $this->assertFalse($logs->contains($log2)); $this->assertTrue($logs->contains($log3)); @@ -99,7 +99,6 @@ public function testMarkAsUnread(): void $this->assertNull($log->getReaderUserId()); } - public function testDestroy(): void { $log = Log::factory()->create(); diff --git a/tests/TestCase.php b/tests/TestCase.php index efe9db9..d2e212c 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -2,7 +2,6 @@ namespace dnj\ErrorTracker\Laravel\Server\Tests; -use dnj\ErrorTracker\Laravel\Server\ServiceProvider; use dnj\AAA\ServiceProvider as AAAServiceProvider; use dnj\ErrorTracker\Contracts\IAppManager; use dnj\ErrorTracker\Contracts\IDeviceManager; @@ -10,6 +9,7 @@ use dnj\ErrorTracker\Laravel\Server\AppManager; use dnj\ErrorTracker\Laravel\Server\DeviceManager; use dnj\ErrorTracker\Laravel\Server\LogManager; +use dnj\ErrorTracker\Laravel\Server\ServiceProvider; use dnj\UserLogger\ServiceProvider as UserLoggerServiceProvider; use Illuminate\Foundation\Testing\RefreshDatabase; @@ -26,15 +26,18 @@ protected function getPackageProviders($app) ]; } - public function getAppManager(): AppManager { + public function getAppManager(): AppManager + { return $this->app->make(IAppManager::class); } - public function getDeviceManager(): DeviceManager { + public function getDeviceManager(): DeviceManager + { return $this->app->make(IDeviceManager::class); } - public function getLogManager(): LogManager { + public function getLogManager(): LogManager + { return $this->app->make(ILogManager::class); } } From 72f7405f79840f924520e01a5db114914d6f1315 Mon Sep 17 00:00:00 2001 From: "Amir H. Yeganemehr" Date: Thu, 13 Apr 2023 05:06:14 +0330 Subject: [PATCH 131/131] Fix badges in README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c33148c..360e780 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # Laravel Error Tracker 📥 -![Packagist Dependency Version](https://img.shields.io/packagist/dependency-v/dnj/dnj/laravel-error-tracker-server) -![GitHub all releases](https://img.shields.io/github/downloads/dnj/laravel-error-tracker-server/total) -![GitHub](https://img.shields.io/github/license/dnj/laravel-error-tracker-server) +![Packagist Dependency Version](https://img.shields.io/packagist/v/dnj/laravel-error-tracker-server?style=flat-square) +![GitHub all releases](https://img.shields.io/packagist/dt/dnj/laravel-error-tracker-server?style=flat-square) +![GitHub](https://img.shields.io/github/license/dnj/laravel-error-tracker-server?style=flat-square) ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/dnj/laravel-error-tracker-server/ci.yml) ## Introduction