From 721ab51c571c6f4b4a9ab7765beacca8aaf15f23 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 09:24:47 +0000 Subject: [PATCH 01/58] Begin rework of Laravel-side sync. --- laravel/src/SyncApi.php | 80 ++++------ laravel/src/SyncApiCollection.php | 147 ++++++++++++++++++ laravel/src/SyncApiCollectionInterface.php | 20 +++ .../src/SyncApiCollectionMediaCollection.php | 139 +++++++++++++++++ ...cApiCollectionMediaCollectionInterface.php | 11 ++ laravel/src/SyncApiInterface.php | 67 ++++++++ laravel/src/SyncCapability.php | 24 +++ laravel/src/SyncableModel.php | 20 +++ 8 files changed, 459 insertions(+), 49 deletions(-) create mode 100644 laravel/src/SyncApiCollection.php create mode 100644 laravel/src/SyncApiCollectionInterface.php create mode 100644 laravel/src/SyncApiCollectionMediaCollection.php create mode 100644 laravel/src/SyncApiCollectionMediaCollectionInterface.php create mode 100644 laravel/src/SyncApiInterface.php create mode 100644 laravel/src/SyncCapability.php create mode 100644 laravel/src/SyncableModel.php diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 82cecb38..53b296c4 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -9,49 +9,27 @@ * Represents a sync API as a whole. Use this to configure your API once, then * invoke its methods to generate routes, etc. */ -class SyncApi +class SyncApi implements SyncApiInterface { - private array $singletons = []; private array $collections = []; - /** - * Adds a new singleton to this sync API. - * @param string $name The name of the singleton, e.g. "Units of - * Measure". - * @param string $jsonResourceClass A Laravel JsonResource class which - * generates the value to be provided to the - * mobile application. This must be stable; - * that is, its result must be identical - * unless the data really has changed, - * including ordering of associative arrays. - */ - public function addSingleton( - string $name, - string $jsonResourceClass, - ): self { - $this->singletons[] = compact('name', 'jsonResourceClass'); - - return $this; - } - - /** - * Adds a new collection of Models to this sync API. - * @param string $modelClass The Laravel Model class of which the - * collection is composed. - * @param string $controllerClass The Laravel Controller class which includes - * both "show" (to retrieve a single Model) and - * "update" to (create or update a single - * Model), where the Resource returned by - * "show" and the FormRequest accepted by - * "update" are compatible. - */ - public function addCollection( + public function withCollection( string $modelClass, + string $scopeName, + string $resourceClass, string $controllerClass, - ): self { - $this->collections[] = compact('modelClass', 'controllerClass'); + ): SyncApiCollection { + $syncApiCollection = new SyncApiCollection( + $this, + $modelClass, + $scopeName, + $resourceClass, + $controllerClass + ); + + $this->collections[] = $syncApiCollection; - return $this; + return $syncApiCollection; } /** @@ -64,21 +42,25 @@ public function addCollection( public function generateRoutes(): void { Route::get('preflight', function () { - }); + $collections = []; - foreach ($this->singletons as $singleton) { - $name = $singleton['name']; - $jsonResourceClass = $singleton['jsonResourceClass']; + foreach ($this->collections as $collection) { + $json = $collection->generatePreflightCollection(); - Route::get(Str::kebab($name), fn () => new $jsonResourceClass()); - } + if ($json !== null) { + $collections[$collection->generateCamelCasedName()] = $json; + } + } + + return compact('collections'); + }); - foreach ($this->collections as $collection) { - $modelClass = $collection['modelClass']; - $controllerClass = $collection['controllerClass']; + // foreach ($this->collections as $collection) { + // $modelClass = $collection['modelClass']; + // $controllerClass = $collection['controllerClass']; - Route::get(Str::kebab(Str::pluralStudly(class_basename($modelClass))) . '/{' . Str::camel(class_basename($modelClass)) . ':uuid}', [$controllerClass, 'show']); - Route::put(Str::kebab(Str::pluralStudly(class_basename($modelClass))) . '/{' . Str::camel(class_basename($modelClass)) . ':uuid}', [$controllerClass, 'update']); - } + // Route::get(Str::kebab(Str::pluralStudly(class_basename($modelClass))) . '/{' . Str::camel(class_basename($modelClass)) . ':uuid}', [$controllerClass, 'show']); + // Route::put(Str::kebab(Str::pluralStudly(class_basename($modelClass))) . '/{' . Str::camel(class_basename($modelClass)) . ':uuid}', [$controllerClass, 'update']); + // } } } diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php new file mode 100644 index 00000000..b11fcef0 --- /dev/null +++ b/laravel/src/SyncApiCollection.php @@ -0,0 +1,147 @@ +syncApi = $syncApi; + $this->modelClass = $modelClass; + $this->scopeName = $scopeName; + $this->resourceClass = $resourceClass; + $this->controllerClass = $controllerClass; + } + + /** + * Adds a new media collection to this collection. + * @param string $name The name of the media collection. + * @param int $syncCapabilities The actions available to API + * consumers. + * @return SyncApiCollectionMediaCollection The created media collection. + */ + public function withMediaCollection( + string $name, + int $syncCapabilities, + ): SyncApiCollectionMediaCollection { + return new SyncApiCollectionMediaCollection( + $this, + $name, + $syncCapabilities, + ); + } + + public function withCollection( + string $modelClass, + string $scopeName, + string $resourceClass, + string $controllerClass, + ): SyncApiCollection { + return $this->syncApi->withCollection( + $modelClass, + $scopeName, + $resourceClass, + $controllerClass + ); + } + + public function generateCamelCasedName(): string + { + return Str::camel(Str::pluralStudly(class_basename($this->modelClass))); + } + + public function generateKebabCasedName(): string + { + return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); + } + + public function generateScopeFunctionName(): string + { + return 'scope' . ucfirst($this->scopeName); + } + + public function generatePreflightCollection(): ?array + { + if ($this->resourceClass === null) { + return null; + } else { + $scopeFunctionName = $this->generateScopeFunctionName(); + + return $this + ->modelClass::$scopeFunctionName() + ->get() + ->mapWithKeys(fn (SyncableModel $item) => [ + $item->uuid, + $item->getVersionForSync(), + ]) + ->all(); + } + } + + public function generateRoutes(): void + { + if ($this->resourceClass !== null) { + Route::get( + $this->generateKebabCasedName() . '/{uuid}', + function (string $uuid) { + $scopeFunctionName = $this->generateScopeFunctionName(); + + $model = $this + ->modelClass::$scopeFunctionName() + ->where('uuid', $uuid) + ->first(); + + if ($model) { + return new $this->resourceClass($model); + } else { + throw new ModelNotFoundException(); + } + } + ); + } + + if ($this->controllerClass !== null) { + if (method_exists($this->controllerClass, 'upsert')) { + Route::put( + $this->generateKebabCasedName() . '/{uuid}', + [$this->controllerClass, 'upsert'] + ); + } + + if (method_exists($this->controllerClass, 'destroy')) { + Route::delete( + $this->generateKebabCasedName() . '/{uuid}', + [$this->controllerClass, 'destroy'] + ); + } + } + + foreach ($this->syncApiCollectionMediaCollections as $syncApiCollectionMediaCollection) { + $syncApiCollectionMediaCollection->generateRoutes(); + } + } +} diff --git a/laravel/src/SyncApiCollectionInterface.php b/laravel/src/SyncApiCollectionInterface.php new file mode 100644 index 00000000..95a10b97 --- /dev/null +++ b/laravel/src/SyncApiCollectionInterface.php @@ -0,0 +1,20 @@ +syncApiCollection = $syncApiCollection; + $this->name = $name; + $this->syncCapabilities = $syncCapabilities; + } + + public function withMediaCollection( + string $name, + int $syncCapabilities, + ): SyncApiCollectionMediaCollection { + return $this->syncApiCollection->withMediaCollection( + $name, + $syncCapabilities, + ); + } + + public function withCollection( + string $modelClass, + string $scopeName, + string $resourceClass, + string $controllerClass, + ): SyncApiCollection { + return $this->syncApiCollection->withCollection( + $modelClass, + $scopeName, + $resourceClass, + $controllerClass + ); + } + + public function generateRoutes(): void + { + if ($this->syncCapabilities & SyncCapability::READ) { + Route::get( + $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', + function (string $modelUuid, string $mediaUuid) { + $scopeFunctionName = $this->generateScopeFunctionName(); + + $model = $this + ->modelClass::$scopeFunctionName() + ->where('uuid', $modelUuid) + ->first(); + + if ($model) { + $media = $model + ->getMedia($this->name) + ->where('name', $mediaUuid) + ->first(); + + if ($media === null) { + throw new ModelNotFoundException(); + } else { + return redirect()->to($media->getTemporaryUrl(now()->addHour())); + } + } else { + throw new ModelNotFoundException(); + } + } + ); + } + + if ($this->syncCapabilities & SyncCapability::UPSERT) { + Route::put( + $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', + function (string $modelUuid, string $mediaUuid) { + $scopeFunctionName = $this->generateScopeFunctionName(); + + $model = $this + ->modelClass::$scopeFunctionName() + ->where('uuid', $modelUuid) + ->first(); + + if ($model) { + $media = $model + ->getMedia($this->name) + ->where('name', $mediaUuid) + ->first(); + + if ($media === null) { + $model + ->addMediaFromString(request()->getContent()) + ->usingName($mediaUuid) + ->toMediaCollection($this->name); + } + } else { + throw new ModelNotFoundException(); + } + } + ); + } + + if ($this->syncCapabilities & SyncCapability::DELETE) { + Route::get( + $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', + function (string $modelUuid, string $mediaUuid) { + $scopeFunctionName = $this->generateScopeFunctionName(); + + $model = $this + ->modelClass::$scopeFunctionName() + ->where('uuid', $modelUuid) + ->first(); + + if ($model) { + $media = $model + ->getMedia($this->name) + ->where('name', $mediaUuid) + ->first(); + + if ($media !== null) { + $media->delete() + } + } else { + throw new ModelNotFoundException(); + } + } + ); + } + } +} diff --git a/laravel/src/SyncApiCollectionMediaCollectionInterface.php b/laravel/src/SyncApiCollectionMediaCollectionInterface.php new file mode 100644 index 00000000..a1aa5184 --- /dev/null +++ b/laravel/src/SyncApiCollectionMediaCollectionInterface.php @@ -0,0 +1,11 @@ + + * "function scopeExampleTest()". + * @param ?string $resourceClass The Laravel JsonResource class used to + * generate JSON to return to the client on + * pull. When null, it is NOT possible to + * pull and this collection will NOT be listed + * in preflight responses. + * @param ?string $controllerClass The Laravel Controller class used to + * manipulate instances of the Model. This + * will be scanned for methods, and generate + * appropriate routes: + * - "upsert": Given the UUID of a record to + * insert or update. It is up to + * your controller to ensure that + * the user is authorized to + * insert or update this + * particular Model (it is + * suggested that you use the same + * scope as specified in + * $scopeName), and up to your + * FormRequest (which should match + * $resourceClass when non-null) + * to ensure that the structure is + * valid. You do not need to + * return anything from this + * method. + * - "destroy": Given an existing record to + * delete. It is up to your + * controller to ensure that the + * user is authorized to delete + * this particular Model (it is + * suggested that you use the + * same scope as specified in + * $scopeName), and up to your + * FormRequest (which should + * match $resourceClass when + * non-null) to ensure that the + * structure is valid. You do + * not need to return anything + * from this method. + * When null, none of these routes will be + * generated. + * @return SyncApiCollection The created SyncApiCollection. + */ + function withCollection( + string $modelClass, + string $scopeName, + string $resourceClass, + string $controllerClass, + ): SyncApiCollection; +} diff --git a/laravel/src/SyncCapability.php b/laravel/src/SyncCapability.php new file mode 100644 index 00000000..b095d172 --- /dev/null +++ b/laravel/src/SyncCapability.php @@ -0,0 +1,24 @@ + Date: Thu, 6 Jan 2022 12:00:34 +0000 Subject: [PATCH 02/58] Add helper. --- laravel/src/SyncableModelHelper.php | 74 +++++++++++++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 laravel/src/SyncableModelHelper.php diff --git a/laravel/src/SyncableModelHelper.php b/laravel/src/SyncableModelHelper.php new file mode 100644 index 00000000..86a4a7d8 --- /dev/null +++ b/laravel/src/SyncableModelHelper.php @@ -0,0 +1,74 @@ + + * "function scopeExampleTest()"). + * @param string $uuid The UUID of the model to retrieve. + * @return SyncableModel The retrieved model. + * @throws ModelNotFoundException When no such model exists. + */ + static function update( + string $modelClass, + string $scopeName, + string $uuid, + ): SyncableModel { + $model = self::upsert($modelClass, $scopeName, $uuid); + + if ($model === null) { + throw new ModelNotFoundException(); + } else { + return $model; + } + } + + /** + * Retrieves a model by its UUID if it exists. + * @param string $modelClass The Laravel Model class which is to be + * retrieved. + * @param string $scopeName The name of the scope which will be used to + * filter the Models (e.g. "exampleTest" -> + * "function scopeExampleTest()"). + * @param string $uuid The UUID of the model to retrieve. + * @return ?SyncableModel When the model exists, the model, otherwise, + * null. + * @throws UnauthorizedException When the model exists, but access is blocked + * by the scope. + */ + static function upsert( + string $modelClass, + string $scopeName, + string $uuid, + ): void { + $scopeFunctionName = 'scope' . ucfirst($scopeName); + + $model = $modelClass::withTrashed() + ->$scopeFunctionName() + ->where('uuid', $uuid) + ->first(); + + if ($model === null) { + if ($modelClass::withTrashed()->where('uuid', $uuid)->exists()) { + throw new UnauthorizedException(); + } else { + return null; + } + } else { + return $model; + } + } +} From 4488547b40b8d07bf56066f37b198d12f2f156ca Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 12:42:08 +0000 Subject: [PATCH 03/58] WIP. --- laravel/src/SyncApi.php | 31 ++++-- laravel/src/SyncApiCollection.php | 14 ++- laravel/src/SyncApiCollectionInterface.php | 2 +- .../src/SyncApiCollectionMediaCollection.php | 4 +- laravel/src/SyncApiEnum.php | 96 +++++++++++++++++++ laravel/src/SyncApiEnumInterface.php | 11 +++ laravel/src/SyncApiInterface.php | 11 +++ 7 files changed, 156 insertions(+), 13 deletions(-) create mode 100644 laravel/src/SyncApiEnum.php create mode 100644 laravel/src/SyncApiEnumInterface.php diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 53b296c4..3e92c008 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -3,7 +3,6 @@ namespace JamesWildDev\ReactNativeAppHelpers; use Illuminate\Support\Facades\Route; -use Illuminate\Support\Str; /** * Represents a sync API as a whole. Use this to configure your API once, then @@ -11,8 +10,24 @@ */ class SyncApi implements SyncApiInterface { + private array $enums = []; private array $collections = []; + public function withEnum( + string $enumClass, + string $resourceClass, + ): SyncApiEnum { + $syncApiEnum = new SyncApiEnum( + $this, + $enumClass, + $resourceClass, + ); + + $this->enums[] = $syncApiEnum; + + return $syncApiEnum; + } + public function withCollection( string $modelClass, string $scopeName, @@ -24,7 +39,7 @@ public function withCollection( $modelClass, $scopeName, $resourceClass, - $controllerClass + $controllerClass, ); $this->collections[] = $syncApiCollection; @@ -55,12 +70,12 @@ public function generateRoutes(): void return compact('collections'); }); - // foreach ($this->collections as $collection) { - // $modelClass = $collection['modelClass']; - // $controllerClass = $collection['controllerClass']; + foreach ($this->enums as $enum) { + $enum->generateEnumRoutes(); + } - // Route::get(Str::kebab(Str::pluralStudly(class_basename($modelClass))) . '/{' . Str::camel(class_basename($modelClass)) . ':uuid}', [$controllerClass, 'show']); - // Route::put(Str::kebab(Str::pluralStudly(class_basename($modelClass))) . '/{' . Str::camel(class_basename($modelClass)) . ':uuid}', [$controllerClass, 'update']); - // } + foreach ($this->collections as $collection) { + $collection->generateCollectionRoutes(); + } } } diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index b11fcef0..8219b5b4 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -55,6 +55,16 @@ public function withMediaCollection( ); } + public function withEnum( + string $enumClass, + string $resourceClass, + ): SyncApiEnum { + return $this->syncApi->withEnum( + $enumClass, + $resourceClass, + ); + } + public function withCollection( string $modelClass, string $scopeName, @@ -102,7 +112,7 @@ public function generatePreflightCollection(): ?array } } - public function generateRoutes(): void + public function generateCollectionRoutes(): void { if ($this->resourceClass !== null) { Route::get( @@ -141,7 +151,7 @@ function (string $uuid) { } foreach ($this->syncApiCollectionMediaCollections as $syncApiCollectionMediaCollection) { - $syncApiCollectionMediaCollection->generateRoutes(); + $syncApiCollectionMediaCollection->generateCollectionMediaCollectionRoutes(); } } } diff --git a/laravel/src/SyncApiCollectionInterface.php b/laravel/src/SyncApiCollectionInterface.php index 95a10b97..ba2d4b7e 100644 --- a/laravel/src/SyncApiCollectionInterface.php +++ b/laravel/src/SyncApiCollectionInterface.php @@ -16,5 +16,5 @@ interface SyncApiCollectionInterface extends SyncApiInterface function withMediaCollection( string $name, int $syncCapabilities, - ): self; + ): SyncApiCollectionMediaCollection; } diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 76efe8c6..663de3cd 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -48,7 +48,7 @@ public function withCollection( ); } - public function generateRoutes(): void + public function generateCollectionMediaCollectionRoutes(): void { if ($this->syncCapabilities & SyncCapability::READ) { Route::get( @@ -127,7 +127,7 @@ function (string $modelUuid, string $mediaUuid) { ->first(); if ($media !== null) { - $media->delete() + $media->delete(); } } else { throw new ModelNotFoundException(); diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php new file mode 100644 index 00000000..c2008b84 --- /dev/null +++ b/laravel/src/SyncApiEnum.php @@ -0,0 +1,96 @@ +syncApi = $syncApi; + $this->enumClass = $enumClass; + $this->resourceClass = $resourceClass; + } + + function withEnum( + string $enumClass, + string $resourceClass, + ): SyncApiEnum { + return $this + ->syncApi + ->withEnum( + $enumClass, + $resourceClass, + ); + } + + function withCollection( + string $modelClass, + string $scopeName, + string $resourceClass, + string $controllerClass, + ): SyncApiCollection { + return $this + ->syncApi + ->withCollection( + $modelClass, + $scopeName, + $resourceClass, + $controllerClass, + ); + } + + public function generateCamelCasedName(): string + { + return Str::camel(Str::pluralStudly(class_basename($this->modelClass))); + } + + public function generateKebabCasedName(): string + { + return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); + } + + public function generateData(): array + { + return array_map( + fn ($instance) => new $this->resourceClass($instance), + $this->enumClass::getInstances() + ); + } + + public function hashData(array $data): string + { + ksort($data); + + return hash('sha1', json_encode($data)); + } + + public function generateEnumRoutes(): void + { + Route::get( + $this->generateKebabCasedName(), + function () { + $data = $this->generateData(); + + return [ + 'version' => $this->hashData($data), + 'data' => $data, + ]; + }, + ); + } +} diff --git a/laravel/src/SyncApiEnumInterface.php b/laravel/src/SyncApiEnumInterface.php new file mode 100644 index 00000000..ef2926c5 --- /dev/null +++ b/laravel/src/SyncApiEnumInterface.php @@ -0,0 +1,11 @@ + Date: Thu, 6 Jan 2022 12:46:46 +0000 Subject: [PATCH 04/58] Add generateRoutes to interface. --- laravel/src/SyncApi.php | 7 ------- laravel/src/SyncApiCollection.php | 5 +++++ laravel/src/SyncApiCollectionMediaCollection.php | 5 +++++ laravel/src/SyncApiEnum.php | 5 +++++ laravel/src/SyncApiInterface.php | 9 +++++++++ 5 files changed, 24 insertions(+), 7 deletions(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 3e92c008..d2c732be 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -47,13 +47,6 @@ public function withCollection( return $syncApiCollection; } - /** - * Invoke this method in a routes file to generate routes for all singletons - * and collections as well as a "preflight" route which can be used to query - * for changes to sync. - * - * This must be called in a context in which the request would be authorized! - */ public function generateRoutes(): void { Route::get('preflight', function () { diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 8219b5b4..26f2c72a 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -154,4 +154,9 @@ function (string $uuid) { $syncApiCollectionMediaCollection->generateCollectionMediaCollectionRoutes(); } } + + public function generateRoutes(): void + { + $this->syncApi->generateRoutes(); + } } diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 663de3cd..5c6bf56c 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -136,4 +136,9 @@ function (string $modelUuid, string $mediaUuid) { ); } } + + public function generateRoutes(): void + { + $this->syncApi->generateRoutes(); + } } diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index c2008b84..164a2643 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -93,4 +93,9 @@ function () { }, ); } + + public function generateRoutes(): void + { + $this->syncApi->generateRoutes(); + } } diff --git a/laravel/src/SyncApiInterface.php b/laravel/src/SyncApiInterface.php index ced3ef4f..dcd78a44 100644 --- a/laravel/src/SyncApiInterface.php +++ b/laravel/src/SyncApiInterface.php @@ -75,4 +75,13 @@ function withCollection( string $resourceClass, string $controllerClass, ): SyncApiCollection; + + /** + * Invoke this method in a routes file to generate routes for all enums and + * collections as well as a "preflight" route which can be used to query + * for changes to sync. + * + * This must be called in a context in which the request would be authorized! + */ + function generateRoutes(): void; } From ed879a55cc04f7507771e4a6b6f20f6b58ad839a Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 12:48:00 +0000 Subject: [PATCH 05/58] Add missing imports. --- laravel/src/SyncApiCollection.php | 1 + laravel/src/SyncApiCollectionMediaCollection.php | 2 ++ laravel/src/SyncApiEnum.php | 1 + 3 files changed, 4 insertions(+) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 26f2c72a..200b872a 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -3,6 +3,7 @@ namespace JamesWildDev\ReactNativeAppHelpers; use Illuminate\Database\Eloquent\ModelNotFoundException; +use Illuminate\Support\Facades\Route; use Illuminate\Support\Str; /** diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 5c6bf56c..3e826f89 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -2,6 +2,8 @@ namespace JamesWildDev\ReactNativeAppHelpers; +use Illuminate\Support\Facades\Route; + /** * Represents a media collection within a collection of a sync API. Create * instances using SyncApiCollection::withMediaCollection(). diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index 164a2643..b167f2df 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -2,6 +2,7 @@ namespace JamesWildDev\ReactNativeAppHelpers; +use Illuminate\Support\Facades\Route; use Illuminate\Support\Str; /** From 4112e586005e478c1df0aa6eadc1a33d0c164925 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 12:48:54 +0000 Subject: [PATCH 06/58] Fix misnamed variable. --- laravel/src/SyncApiEnum.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index b167f2df..91bfde67 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -57,12 +57,12 @@ function withCollection( public function generateCamelCasedName(): string { - return Str::camel(Str::pluralStudly(class_basename($this->modelClass))); + return Str::camel(Str::pluralStudly(class_basename($this->enumClass))); } public function generateKebabCasedName(): string { - return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); + return Str::kebab(Str::pluralStudly(class_basename($this->enumClass))); } public function generateData(): array From 190eb2b79579ea282648178042e8c527dd4864f9 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 13:53:33 +0000 Subject: [PATCH 07/58] Attempt to fix scope error. --- laravel/src/SyncApiCollection.php | 15 +++++---------- laravel/src/SyncApiCollectionMediaCollection.php | 12 ++++++------ 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 200b872a..760c3082 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -16,7 +16,7 @@ class SyncApiCollection implements SyncApiCollectionInterface private string $modelClass; - private string $scopeName; + public string $scopeName; private ?string $resourceClass; @@ -90,20 +90,15 @@ public function generateKebabCasedName(): string return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); } - public function generateScopeFunctionName(): string - { - return 'scope' . ucfirst($this->scopeName); - } - public function generatePreflightCollection(): ?array { if ($this->resourceClass === null) { return null; } else { - $scopeFunctionName = $this->generateScopeFunctionName(); + $scopeName = $this->scopeName; return $this - ->modelClass::$scopeFunctionName() + ->modelClass::$scopeName() ->get() ->mapWithKeys(fn (SyncableModel $item) => [ $item->uuid, @@ -119,10 +114,10 @@ public function generateCollectionRoutes(): void Route::get( $this->generateKebabCasedName() . '/{uuid}', function (string $uuid) { - $scopeFunctionName = $this->generateScopeFunctionName(); + $scopeName = $this->scopeName; $model = $this - ->modelClass::$scopeFunctionName() + ->modelClass::$scopeName() ->where('uuid', $uuid) ->first(); diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 3e826f89..ab97ae08 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -56,10 +56,10 @@ public function generateCollectionMediaCollectionRoutes(): void Route::get( $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { - $scopeFunctionName = $this->generateScopeFunctionName(); + $scopeName = $this->syncApiCollection->scopeName; $model = $this - ->modelClass::$scopeFunctionName() + ->modelClass::$scopeName() ->where('uuid', $modelUuid) ->first(); @@ -85,10 +85,10 @@ function (string $modelUuid, string $mediaUuid) { Route::put( $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { - $scopeFunctionName = $this->generateScopeFunctionName(); + $scopeName = $this->syncApiCollection->scopeName; $model = $this - ->modelClass::$scopeFunctionName() + ->modelClass::$scopeName() ->where('uuid', $modelUuid) ->first(); @@ -115,10 +115,10 @@ function (string $modelUuid, string $mediaUuid) { Route::get( $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { - $scopeFunctionName = $this->generateScopeFunctionName(); + $scopeName = $this->syncApiCollection->scopeName; $model = $this - ->modelClass::$scopeFunctionName() + ->modelClass::$scopeName() ->where('uuid', $modelUuid) ->first(); From 0b130c1aeac96cbbaaf11eb3ca9d6a9a560ab80f Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 13:57:38 +0000 Subject: [PATCH 08/58] Fix one instance of the preflight response not matching. --- laravel/src/SyncApiCollection.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 760c3082..94f1f540 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -101,8 +101,9 @@ public function generatePreflightCollection(): ?array ->modelClass::$scopeName() ->get() ->mapWithKeys(fn (SyncableModel $item) => [ - $item->uuid, - $item->getVersionForSync(), + $item->uuid => [ + 'version' => $item->getVersionForSync(), + ], ]) ->all(); } From a42940b841e3b1c86601f175cd3c35f48f6a9cf4 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 14:03:44 +0000 Subject: [PATCH 09/58] Continue sync. --- laravel/src/SyncApi.php | 4 ++-- laravel/src/SyncApiCollection.php | 4 ++-- laravel/src/SyncApiCollectionMediaCollection.php | 14 ++++++++++++-- .../SyncApiCollectionMediaCollectionInterface.php | 2 +- laravel/src/SyncApiEnum.php | 4 ++-- laravel/src/SyncApiInterface.php | 4 ++-- 6 files changed, 21 insertions(+), 11 deletions(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index d2c732be..c9c9181b 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -31,8 +31,8 @@ public function withEnum( public function withCollection( string $modelClass, string $scopeName, - string $resourceClass, - string $controllerClass, + ?string $resourceClass, + ?string $controllerClass, ): SyncApiCollection { $syncApiCollection = new SyncApiCollection( $this, diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 94f1f540..9c82ef71 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -69,8 +69,8 @@ public function withEnum( public function withCollection( string $modelClass, string $scopeName, - string $resourceClass, - string $controllerClass, + ?string $resourceClass, + ?string $controllerClass, ): SyncApiCollection { return $this->syncApi->withCollection( $modelClass, diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index ab97ae08..4962d01b 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -36,11 +36,21 @@ public function withMediaCollection( ); } + function withEnum( + string $enumClass, + string $resourceClass, + ): SyncApiEnum { + return $this->syncApiCollection->withEnum( + $enumClass, + $resourceClass + ); + } + public function withCollection( string $modelClass, string $scopeName, - string $resourceClass, - string $controllerClass, + ?string $resourceClass, + ?string $controllerClass, ): SyncApiCollection { return $this->syncApiCollection->withCollection( $modelClass, diff --git a/laravel/src/SyncApiCollectionMediaCollectionInterface.php b/laravel/src/SyncApiCollectionMediaCollectionInterface.php index a1aa5184..49bce622 100644 --- a/laravel/src/SyncApiCollectionMediaCollectionInterface.php +++ b/laravel/src/SyncApiCollectionMediaCollectionInterface.php @@ -6,6 +6,6 @@ * Represents a media collection within a collection of a sync API. Create * instances using SyncApiCollection::withMediaCollection(). */ -class SyncApiCollectionMediaCollectionInterface extends SyncApiCollectionMediaCollectionInterface +class SyncApiCollectionMediaCollectionInterface extends SyncApiCollectionInterface { } diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index 91bfde67..5d0026a4 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -42,8 +42,8 @@ function withEnum( function withCollection( string $modelClass, string $scopeName, - string $resourceClass, - string $controllerClass, + ?string $resourceClass, + ?string $controllerClass, ): SyncApiCollection { return $this ->syncApi diff --git a/laravel/src/SyncApiInterface.php b/laravel/src/SyncApiInterface.php index dcd78a44..3f9d9014 100644 --- a/laravel/src/SyncApiInterface.php +++ b/laravel/src/SyncApiInterface.php @@ -72,8 +72,8 @@ function withEnum( function withCollection( string $modelClass, string $scopeName, - string $resourceClass, - string $controllerClass, + ?string $resourceClass, + ?string $controllerClass, ): SyncApiCollection; /** From 29031ae04d05d87a28ab5d6bdbdb8139b6a58fab Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 14:05:23 +0000 Subject: [PATCH 10/58] Fix misaligned type. --- laravel/src/SyncApiCollection.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 9c82ef71..5e61e68c 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -28,8 +28,8 @@ public function __construct( SyncApi $syncApi, string $modelClass, string $scopeName, - string $resourceClass, - string $controllerClass, + ?string $resourceClass, + ?string $controllerClass, ) { $this->syncApi = $syncApi; $this->modelClass = $modelClass; From ccca3790b09ba839a8568fe80fd586b140a063dc Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 14:07:11 +0000 Subject: [PATCH 11/58] Add enums to preflight. --- laravel/src/SyncApi.php | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index c9c9181b..73515fc6 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -50,6 +50,17 @@ public function withCollection( public function generateRoutes(): void { Route::get('preflight', function () { + $enums = []; + + foreach ($this->enums as $enum) { + $key = $enum->generateCamelCasedName(); + + $data = $enum->generateData(); + $version = $enum->hashData(); + + $enums[$key] = compact('version'); + } + $collections = []; foreach ($this->collections as $collection) { @@ -60,7 +71,7 @@ public function generateRoutes(): void } } - return compact('collections'); + return compact('enums', 'collections'); }); foreach ($this->enums as $enum) { From 877c462fe9d7f4987979d3a341f438a0782eb405 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 14:08:18 +0000 Subject: [PATCH 12/58] Fix missing argument. --- laravel/src/SyncApi.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 73515fc6..7a528959 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -56,7 +56,7 @@ public function generateRoutes(): void $key = $enum->generateCamelCasedName(); $data = $enum->generateData(); - $version = $enum->hashData(); + $version = $enum->hashData($data); $enums[$key] = compact('version'); } From 33bc2c4d1d55d54d2ae8d4d9b195633c3d35e624 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 14:17:50 +0000 Subject: [PATCH 13/58] Structure collection fetches. --- laravel/src/SyncApiCollection.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 5e61e68c..01cad49a 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -123,7 +123,10 @@ function (string $uuid) { ->first(); if ($model) { - return new $this->resourceClass($model); + return [ + 'version' => $model->getVersionForSync(), + 'data' => new $this->resourceClass($model), + ]; } else { throw new ModelNotFoundException(); } From 90db3b0ee8303bac30481365f3d726a313572830 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 15:00:20 +0000 Subject: [PATCH 14/58] Fix return type. --- laravel/src/SyncableModelHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncableModelHelper.php b/laravel/src/SyncableModelHelper.php index 86a4a7d8..5d70181a 100644 --- a/laravel/src/SyncableModelHelper.php +++ b/laravel/src/SyncableModelHelper.php @@ -53,7 +53,7 @@ static function upsert( string $modelClass, string $scopeName, string $uuid, - ): void { + ): ?SyncableModel { $scopeFunctionName = 'scope' . ucfirst($scopeName); $model = $modelClass::withTrashed() From b3e496b96a67a43aa50e577951f6006094b8cc74 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 15:04:50 +0000 Subject: [PATCH 15/58] Fix broken helper. --- laravel/src/SyncableModelHelper.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/laravel/src/SyncableModelHelper.php b/laravel/src/SyncableModelHelper.php index 5d70181a..9dc6a5b0 100644 --- a/laravel/src/SyncableModelHelper.php +++ b/laravel/src/SyncableModelHelper.php @@ -54,10 +54,8 @@ static function upsert( string $scopeName, string $uuid, ): ?SyncableModel { - $scopeFunctionName = 'scope' . ucfirst($scopeName); - $model = $modelClass::withTrashed() - ->$scopeFunctionName() + ->$scopeName ->where('uuid', $uuid) ->first(); From b76baad97bd2a3f5b0e2b061237cf214d70f8e10 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 6 Jan 2022 15:09:20 +0000 Subject: [PATCH 16/58] Fix not calling scope. --- laravel/src/SyncableModelHelper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncableModelHelper.php b/laravel/src/SyncableModelHelper.php index 9dc6a5b0..fd564bb4 100644 --- a/laravel/src/SyncableModelHelper.php +++ b/laravel/src/SyncableModelHelper.php @@ -55,7 +55,7 @@ static function upsert( string $uuid, ): ?SyncableModel { $model = $modelClass::withTrashed() - ->$scopeName + ->$scopeName() ->where('uuid', $uuid) ->first(); From b15dd929fb667b4b00643a8f80bc933238491d22 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 11 Jan 2022 15:51:20 +0000 Subject: [PATCH 17/58] Fix incorrect typing. --- laravel/src/SyncApiCollectionMediaCollectionInterface.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollectionMediaCollectionInterface.php b/laravel/src/SyncApiCollectionMediaCollectionInterface.php index 49bce622..4686b247 100644 --- a/laravel/src/SyncApiCollectionMediaCollectionInterface.php +++ b/laravel/src/SyncApiCollectionMediaCollectionInterface.php @@ -6,6 +6,6 @@ * Represents a media collection within a collection of a sync API. Create * instances using SyncApiCollection::withMediaCollection(). */ -class SyncApiCollectionMediaCollectionInterface extends SyncApiCollectionInterface +interface SyncApiCollectionMediaCollectionInterface extends SyncApiCollectionInterface { } From a807c73e3fc092c2c501fa23b4514c34f371a8d0 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 11 Jan 2022 15:58:30 +0000 Subject: [PATCH 18/58] Fix media collections not being recorded. --- laravel/src/SyncApiCollection.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 01cad49a..4405e205 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -49,11 +49,15 @@ public function withMediaCollection( string $name, int $syncCapabilities, ): SyncApiCollectionMediaCollection { - return new SyncApiCollectionMediaCollection( + $syncApiCollectionMediaCollection = new SyncApiCollectionMediaCollection( $this, $name, $syncCapabilities, ); + + $this->syncApiCollectionMediaCollections[] = $syncApiCollectionMediaCollection; + + return $syncApiCollectionMediaCollection; } public function withEnum( From cc3ccae729e581c4cce20c4c3a112bb670cc690e Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 11 Jan 2022 16:01:30 +0000 Subject: [PATCH 19/58] Fix generated URLs. --- .../src/SyncApiCollectionMediaCollection.php | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 4962d01b..5f3f1a65 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -3,6 +3,7 @@ namespace JamesWildDev\ReactNativeAppHelpers; use Illuminate\Support\Facades\Route; +use Illuminate\Support\Str; /** * Represents a media collection within a collection of a sync API. Create @@ -60,11 +61,21 @@ public function withCollection( ); } + public function generateKebabCasedModelClassName(): string + { + return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); + } + + public function generateKebabCasedMediaCollectionName(): string + { + return Str::kebab(Str::pluralStudly($this->name)); + } + public function generateCollectionMediaCollectionRoutes(): void { if ($this->syncCapabilities & SyncCapability::READ) { Route::get( - $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', + $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; @@ -93,7 +104,7 @@ function (string $modelUuid, string $mediaUuid) { if ($this->syncCapabilities & SyncCapability::UPSERT) { Route::put( - $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', + $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; @@ -123,7 +134,7 @@ function (string $modelUuid, string $mediaUuid) { if ($this->syncCapabilities & SyncCapability::DELETE) { Route::get( - $this->generateKebabCasedName() . '/{modelUuid}/{mediaUuid}', + $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; From 5888c488dbd7fa61b462c32a5299fa1c6b753251 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 11 Jan 2022 16:02:19 +0000 Subject: [PATCH 20/58] Fix runtime error. --- laravel/src/SyncApiCollectionMediaCollection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 5f3f1a65..9253a1cc 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -63,7 +63,7 @@ public function withCollection( public function generateKebabCasedModelClassName(): string { - return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); + return Str::kebab(Str::pluralStudly(class_basename($this->syncApiCollection->modelClass))); } public function generateKebabCasedMediaCollectionName(): string From 45ed870929740aa2e5d2b1a92f4c60c52f44bd34 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 11 Jan 2022 16:02:55 +0000 Subject: [PATCH 21/58] Fix access. --- laravel/src/SyncApiCollection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 4405e205..559c69f4 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -14,7 +14,7 @@ class SyncApiCollection implements SyncApiCollectionInterface { private SyncApi $syncApi; - private string $modelClass; + public string $modelClass; public string $scopeName; From 80bd05320dd3d92ea94f9c9304da1def9007287b Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 11 Jan 2022 16:07:20 +0000 Subject: [PATCH 22/58] Fix misreference. --- laravel/src/SyncApiCollectionMediaCollection.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 9253a1cc..6604b421 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -80,6 +80,7 @@ function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; $model = $this + ->syncApiCollection ->modelClass::$scopeName() ->where('uuid', $modelUuid) ->first(); @@ -109,6 +110,7 @@ function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; $model = $this + ->syncApiCollection ->modelClass::$scopeName() ->where('uuid', $modelUuid) ->first(); @@ -139,6 +141,7 @@ function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; $model = $this + ->syncApiCollection ->modelClass::$scopeName() ->where('uuid', $modelUuid) ->first(); From 90d146d1a0bc9e9c78044a9d60339d138376bf18 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 11 Jan 2022 16:20:49 +0000 Subject: [PATCH 23/58] Note nonfunctional. --- laravel/src/SyncApiCollectionMediaCollection.php | 1 + 1 file changed, 1 insertion(+) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 6604b421..51a8ed13 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -92,6 +92,7 @@ function (string $modelUuid, string $mediaUuid) { ->first(); if ($media === null) { + // TODO why isn't this propagating throw new ModelNotFoundException(); } else { return redirect()->to($media->getTemporaryUrl(now()->addHour())); From d31383bd6e7ce1d1effb287099cfde4c0844dcb2 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 11 Jan 2022 16:30:36 +0000 Subject: [PATCH 24/58] Fix delete using GET. --- laravel/src/SyncApiCollectionMediaCollection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 51a8ed13..ca6d88de 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -136,7 +136,7 @@ function (string $modelUuid, string $mediaUuid) { } if ($this->syncCapabilities & SyncCapability::DELETE) { - Route::get( + Route::delete( $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; From ca25f9b5f525d879457d0be6d6ac06f6d65bee9f Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Wed, 12 Jan 2022 13:31:19 +0000 Subject: [PATCH 25/58] Add workaround for https://github.com/expo/expo/issues/14881. --- .../src/SyncApiCollectionMediaCollection.php | 49 ++++++++++--------- 1 file changed, 26 insertions(+), 23 deletions(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index ca6d88de..ee0b344d 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -105,34 +105,37 @@ function (string $modelUuid, string $mediaUuid) { } if ($this->syncCapabilities & SyncCapability::UPSERT) { - Route::put( - $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', - function (string $modelUuid, string $mediaUuid) { - $scopeName = $this->syncApiCollection->scopeName; + $route = $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}'; - $model = $this - ->syncApiCollection - ->modelClass::$scopeName() - ->where('uuid', $modelUuid) - ->first(); + $implementation = function (string $modelUuid, string $mediaUuid) { + $scopeName = $this->syncApiCollection->scopeName; - if ($model) { - $media = $model - ->getMedia($this->name) - ->where('name', $mediaUuid) - ->first(); + $model = $this + ->syncApiCollection + ->modelClass::$scopeName() + ->where('uuid', $modelUuid) + ->first(); - if ($media === null) { - $model - ->addMediaFromString(request()->getContent()) - ->usingName($mediaUuid) - ->toMediaCollection($this->name); - } - } else { - throw new ModelNotFoundException(); + if ($model) { + $media = $model + ->getMedia($this->name) + ->where('name', $mediaUuid) + ->first(); + + if ($media === null) { + $model + ->addMediaFromString(request()->getContent()) + ->usingName($mediaUuid) + ->toMediaCollection($this->name); } + } else { + throw new ModelNotFoundException(); } - ); + }; + + // Include both POST and PUT as a workaround for https://github.com/expo/expo/issues/14881. + Route::put($route, $implementation); + Route::post($route, $implementation); } if ($this->syncCapabilities & SyncCapability::DELETE) { From 4c48f0fcd147f7070dd95c2d35d103c8746d87da Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Mon, 17 Jan 2022 12:36:37 +0000 Subject: [PATCH 26/58] Add missing import. --- laravel/src/SyncApiCollectionMediaCollection.php | 1 + 1 file changed, 1 insertion(+) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index ee0b344d..2b9726c3 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -2,6 +2,7 @@ namespace JamesWildDev\ReactNativeAppHelpers; +use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Support\Facades\Route; use Illuminate\Support\Str; From c2bbdf50c13ca45b8244b1cfe321d9cfe545efda Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 20 Jan 2022 09:57:42 +0000 Subject: [PATCH 27/58] Enums -> singletons. --- laravel/src/SyncApi.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 7a528959..e64c7846 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -50,7 +50,7 @@ public function withCollection( public function generateRoutes(): void { Route::get('preflight', function () { - $enums = []; + $singletons = []; foreach ($this->enums as $enum) { $key = $enum->generateCamelCasedName(); @@ -58,7 +58,7 @@ public function generateRoutes(): void $data = $enum->generateData(); $version = $enum->hashData($data); - $enums[$key] = compact('version'); + $singletons[$key] = compact('version'); } $collections = []; @@ -71,7 +71,7 @@ public function generateRoutes(): void } } - return compact('enums', 'collections'); + return compact('singletons', 'collections'); }); foreach ($this->enums as $enum) { From 46614f7cdb780d162aa36a66dcab72a72477d889 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 20 Jan 2022 10:06:08 +0000 Subject: [PATCH 28/58] Attempt to clean up output. --- laravel/src/SyncApiEnum.php | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index 5d0026a4..3878ef94 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -67,9 +67,12 @@ public function generateKebabCasedName(): string public function generateData(): array { - return array_map( - fn ($instance) => new $this->resourceClass($instance), - $this->enumClass::getInstances() + return array_combine( + $this->enumClass::getValues(), + array_map( + fn ($instance) => new $this->resourceClass($instance), + $this->enumClass::getInstances() + ) ); } From 24f552e73c730130681d547f4432f2f4a7728b30 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 20 Jan 2022 12:43:18 +0000 Subject: [PATCH 29/58] Add "about me" endpoints. --- laravel/src/SyncApi.php | 25 ++++ laravel/src/SyncApiCollection.php | 12 ++ .../src/SyncApiCollectionMediaCollection.php | 12 ++ laravel/src/SyncApiEnum.php | 12 ++ laravel/src/SyncApiInterface.php | 12 ++ laravel/src/SyncApiMe.php | 111 ++++++++++++++++++ laravel/src/SyncApiMeInterface.php | 11 ++ 7 files changed, 195 insertions(+) create mode 100644 laravel/src/SyncApiMe.php create mode 100644 laravel/src/SyncApiMeInterface.php diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index e64c7846..3ca3ae91 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -10,9 +10,25 @@ */ class SyncApi implements SyncApiInterface { + private array $mes = []; private array $enums = []; private array $collections = []; + public function withMe( + string $modelClass, + string $resourceClass, + ): SyncApiMe { + $syncApiMe = new SyncApiMe( + $this, + $modelClass, + $resourceClass, + ); + + $this->mes[] = $syncApiMe; + + return $syncApiMe; + } + public function withEnum( string $enumClass, string $resourceClass, @@ -52,6 +68,15 @@ public function generateRoutes(): void Route::get('preflight', function () { $singletons = []; + foreach ($this->mes as $me) { + $key = $me->generateCamelCasedName(); + + $data = $me->generateData(); + $version = $me->hashData($data); + + $singletons[$key] = compact('version'); + } + foreach ($this->enums as $enum) { $key = $enum->generateCamelCasedName(); diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 559c69f4..4ae9e34a 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -60,6 +60,18 @@ public function withMediaCollection( return $syncApiCollectionMediaCollection; } + function withMe( + string $modelClass, + string $resourceClass, + ): SyncApiMe { + return $this + ->syncApi + ->withMe( + $modelClass, + $resourceClass, + ); + } + public function withEnum( string $enumClass, string $resourceClass, diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 2b9726c3..52d5d3a9 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -38,6 +38,18 @@ public function withMediaCollection( ); } + function withMe( + string $modelClass, + string $resourceClass, + ): SyncApiMe { + return $this + ->syncApiCollection + ->withMe( + $modelClass, + $resourceClass, + ); + } + function withEnum( string $enumClass, string $resourceClass, diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index 3878ef94..ec831673 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -27,6 +27,18 @@ public function __construct( $this->resourceClass = $resourceClass; } + function withMe( + string $modelClass, + string $resourceClass, + ): SyncApiMe { + return $this + ->syncApi + ->withMe( + $modelClass, + $resourceClass, + ); + } + function withEnum( string $enumClass, string $resourceClass, diff --git a/laravel/src/SyncApiInterface.php b/laravel/src/SyncApiInterface.php index 3f9d9014..21002882 100644 --- a/laravel/src/SyncApiInterface.php +++ b/laravel/src/SyncApiInterface.php @@ -8,6 +8,18 @@ */ interface SyncApiInterface { + /** + * Adds a new "about me" endpoint to this sync API. + * @param string $modelClass The model class which represents the user + * which can be queried. + * @param string $resourceClass The Laravel JsonResource class used to + * generate JSON to return to the client on pull. + */ + function withMe( + string $modelClass, + string $resourceClass, + ): SyncApiMe; + /** * Adds a new enum to this sync API. * @param string $enumClass The enum class to include in the sync API. diff --git a/laravel/src/SyncApiMe.php b/laravel/src/SyncApiMe.php new file mode 100644 index 00000000..e28d7870 --- /dev/null +++ b/laravel/src/SyncApiMe.php @@ -0,0 +1,111 @@ +syncApi = $syncApi; + $this->modelClass = $modelClass; + $this->resourceClass = $resourceClass; + } + + function withMe( + string $modelClass, + string $resourceClass, + ): SyncApiMe { + return $this + ->syncApi + ->withMe( + $modelClass, + $resourceClass, + ); + } + + function withEnum( + string $enumClass, + string $resourceClass, + ): SyncApiEnum { + return $this + ->syncApi + ->withEnum( + $enumClass, + $resourceClass, + ); + } + + function withCollection( + string $modelClass, + string $scopeName, + ?string $resourceClass, + ?string $controllerClass, + ): SyncApiCollection { + return $this + ->syncApi + ->withCollection( + $modelClass, + $scopeName, + $resourceClass, + $controllerClass, + ); + } + + public function generateCamelCasedName(): string + { + return Str::camel(Str::pluralStudly(class_basename($this->modelClass))); + } + + public function generateKebabCasedName(): string + { + return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); + } + + public function generateData(): array + { + return new $this->resourceClass(auth()->user()); + } + + public function hashData(array $data): string + { + ksort($data); + + return hash('sha1', json_encode($data)); + } + + public function generateMeRoutes(): void + { + Route::get( + $this->generateKebabCasedName(), + function () { + $data = $this->generateData(); + + return [ + 'version' => $this->hashData($data), + 'data' => $data, + ]; + }, + ); + } + + public function generateRoutes(): void + { + $this->syncApi->generateRoutes(); + } +} diff --git a/laravel/src/SyncApiMeInterface.php b/laravel/src/SyncApiMeInterface.php new file mode 100644 index 00000000..12358124 --- /dev/null +++ b/laravel/src/SyncApiMeInterface.php @@ -0,0 +1,11 @@ + Date: Thu, 20 Jan 2022 12:47:07 +0000 Subject: [PATCH 30/58] Fix runtime error. --- laravel/src/SyncApiMe.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApiMe.php b/laravel/src/SyncApiMe.php index e28d7870..454dbfeb 100644 --- a/laravel/src/SyncApiMe.php +++ b/laravel/src/SyncApiMe.php @@ -79,7 +79,7 @@ public function generateKebabCasedName(): string public function generateData(): array { - return new $this->resourceClass(auth()->user()); + return (new $this->resourceClass(auth()->user()))->toArray(request()); } public function hashData(array $data): string From 1d1d0832513fa8f73fa3fca8d61ab5bea68b0d6e Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 20 Jan 2022 12:48:15 +0000 Subject: [PATCH 31/58] Do not pluralize the "me" endpoint. --- laravel/src/SyncApiMe.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/laravel/src/SyncApiMe.php b/laravel/src/SyncApiMe.php index 454dbfeb..834673ce 100644 --- a/laravel/src/SyncApiMe.php +++ b/laravel/src/SyncApiMe.php @@ -69,12 +69,12 @@ function withCollection( public function generateCamelCasedName(): string { - return Str::camel(Str::pluralStudly(class_basename($this->modelClass))); + return Str::camel(class_basename($this->modelClass)); } public function generateKebabCasedName(): string { - return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); + return Str::kebab(class_basename($this->modelClass)); } public function generateData(): array From 9e38c1b0482d2d563b342f104e9cafb086367bed Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 20 Jan 2022 12:50:39 +0000 Subject: [PATCH 32/58] Fix missing routes for me. --- laravel/src/SyncApi.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 3ca3ae91..128291ee 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -99,6 +99,10 @@ public function generateRoutes(): void return compact('singletons', 'collections'); }); + foreach ($this->mes as $me) { + $me->generateMeRoutes(); + } + foreach ($this->enums as $enum) { $enum->generateEnumRoutes(); } From db3d16ea713718774f0f136400cef47edf26a281 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 25 Jan 2022 10:41:40 +0000 Subject: [PATCH 33/58] Trashable check. --- laravel/src/SyncableModelHelper.php | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/laravel/src/SyncableModelHelper.php b/laravel/src/SyncableModelHelper.php index fd564bb4..cfacb749 100644 --- a/laravel/src/SyncableModelHelper.php +++ b/laravel/src/SyncableModelHelper.php @@ -54,13 +54,29 @@ static function upsert( string $scopeName, string $uuid, ): ?SyncableModel { - $model = $modelClass::withTrashed() + $hasSoftDeletes = in_array(SoftDeletes::class, class_uses_recursive($modelClass)); + + $model = $modelClass::query(); + + if ($hasSoftDeletes) { + $model = $model->withTrashed(); + } + + $model = $model ->$scopeName() ->where('uuid', $uuid) ->first(); if ($model === null) { - if ($modelClass::withTrashed()->where('uuid', $uuid)->exists()) { + $query = $modelClass::query(); + + if ($hasSoftDeletes) { + $query = $query->withTrashed(); + } + + + + if ($query->where('uuid', $uuid)->exists()) { throw new UnauthorizedException(); } else { return null; From 7e7da819c301708a357f0f09573b028439536abc Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 25 Jan 2022 15:47:07 +0000 Subject: [PATCH 34/58] Fix runtime error. --- laravel/src/SyncApiCollectionMediaCollection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 52d5d3a9..f543c252 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -182,6 +182,6 @@ function (string $modelUuid, string $mediaUuid) { public function generateRoutes(): void { - $this->syncApi->generateRoutes(); + $this->syncApiCollection->generateRoutes(); } } From 7764813bea7498bacf827c4c90073c9cefd3125c Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 25 Jan 2022 15:51:15 +0000 Subject: [PATCH 35/58] Workaround for entity:media names. --- laravel/src/SyncApiCollectionMediaCollection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index f543c252..b54581b8 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -81,7 +81,7 @@ public function generateKebabCasedModelClassName(): string public function generateKebabCasedMediaCollectionName(): string { - return Str::kebab(Str::pluralStudly($this->name)); + return Str::kebab(Str::pluralStudly(preg_replace('/.*:/', '', $this->name))); } public function generateCollectionMediaCollectionRoutes(): void From f9464b1343c295b201b7d4a93fc7b08287df2db9 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Wed, 26 Jan 2022 09:26:03 +0000 Subject: [PATCH 36/58] Add constant endpoints. --- laravel/src/SyncApi.php | 26 ++++ laravel/src/SyncApiCollection.php | 10 ++ .../src/SyncApiCollectionMediaCollection.php | 10 ++ laravel/src/SyncApiConstant.php | 112 ++++++++++++++++++ laravel/src/SyncApiConstantInterface.php | 11 ++ laravel/src/SyncApiEnum.php | 10 ++ laravel/src/SyncApiInterface.php | 8 ++ laravel/src/SyncApiMe.php | 10 ++ 8 files changed, 197 insertions(+) create mode 100644 laravel/src/SyncApiConstant.php create mode 100644 laravel/src/SyncApiConstantInterface.php diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 128291ee..ac3fdd08 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -12,6 +12,7 @@ class SyncApi implements SyncApiInterface { private array $mes = []; private array $enums = []; + private array $constants = []; private array $collections = []; public function withMe( @@ -44,6 +45,18 @@ public function withEnum( return $syncApiEnum; } + public function withConstant(array $value): SyncApiConstant + { + $syncApiConstant = new SyncApiConstant( + $this, + $value, + ); + + $this->constants[] = $syncApiConstant; + + return $syncApiConstant; + } + public function withCollection( string $modelClass, string $scopeName, @@ -86,6 +99,15 @@ public function generateRoutes(): void $singletons[$key] = compact('version'); } + foreach ($this->constants as $constant) { + $key = $constant->generateCamelCasedName(); + + $data = $constant->value; + $version = $enum->hashData($data); + + $singletons[$key] = compact('version'); + } + $collections = []; foreach ($this->collections as $collection) { @@ -107,6 +129,10 @@ public function generateRoutes(): void $enum->generateEnumRoutes(); } + foreach ($this->constants as $constant) { + $constant->generateConstantRoutes(); + } + foreach ($this->collections as $collection) { $collection->generateCollectionRoutes(); } diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 4ae9e34a..1889d186 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -82,6 +82,16 @@ public function withEnum( ); } + function withConstant( + array $value, + ): SyncApiConstant { + return $this + ->syncApi + ->withConstant( + $value, + ); + } + public function withCollection( string $modelClass, string $scopeName, diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index b54581b8..45678339 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -60,6 +60,16 @@ function withEnum( ); } + function withConstant( + array $value, + ): SyncApiConstant { + return $this + ->syncApiCollection + ->withConstant( + $value, + ); + } + public function withCollection( string $modelClass, string $scopeName, diff --git a/laravel/src/SyncApiConstant.php b/laravel/src/SyncApiConstant.php new file mode 100644 index 00000000..c704c855 --- /dev/null +++ b/laravel/src/SyncApiConstant.php @@ -0,0 +1,112 @@ +syncApi = $syncApi; + $this->value = $value; + } + + function withMe( + string $modelClass, + string $resourceClass, + ): SyncApiMe { + return $this + ->syncApi + ->withMe( + $modelClass, + $resourceClass, + ); + } + + function withEnum( + string $enumClass, + string $resourceClass, + ): SyncApiEnum { + return $this + ->syncApi + ->withEnum( + $enumClass, + $resourceClass, + ); + } + + function withConstant( + array $value, + ): SyncApiConstant { + return $this + ->syncApi + ->withConstant( + $value, + ); + } + + function withCollection( + string $modelClass, + string $scopeName, + ?string $resourceClass, + ?string $controllerClass, + ): SyncApiCollection { + return $this + ->syncApi + ->withCollection( + $modelClass, + $scopeName, + $resourceClass, + $controllerClass, + ); + } + + public function generateCamelCasedName(): string + { + return Str::camel(Str::pluralStudly(class_basename($this->enumClass))); + } + + public function generateKebabCasedName(): string + { + return Str::kebab(Str::pluralStudly(class_basename($this->enumClass))); + } + + public function hashData(array $data): string + { + ksort($data); + + return hash('sha1', json_encode($data)); + } + + public function generateConstantRoutes(): void + { + Route::get( + $this->generateKebabCasedName(), + function () { + $data = $this->value; + + return [ + 'version' => $this->hashData($data), + 'data' => $data, + ]; + }, + ); + } + + public function generateRoutes(): void + { + $this->syncApi->generateRoutes(); + } +} diff --git a/laravel/src/SyncApiConstantInterface.php b/laravel/src/SyncApiConstantInterface.php new file mode 100644 index 00000000..2206750c --- /dev/null +++ b/laravel/src/SyncApiConstantInterface.php @@ -0,0 +1,11 @@ +syncApi + ->withConstant( + $value, + ); + } + function withCollection( string $modelClass, string $scopeName, diff --git a/laravel/src/SyncApiInterface.php b/laravel/src/SyncApiInterface.php index 21002882..ba10c9a4 100644 --- a/laravel/src/SyncApiInterface.php +++ b/laravel/src/SyncApiInterface.php @@ -31,6 +31,14 @@ function withEnum( string $resourceClass, ): SyncApiEnum; + /** + * Adds a new constant to this sync API. + * @param array $value The JSON-serializable value to add. + */ + function withConstant( + array $value, + ): SyncApiConstant; + /** * Adds a new collection of Models to this sync API. * @param string $modelClass The Laravel Model class of which this is a diff --git a/laravel/src/SyncApiMe.php b/laravel/src/SyncApiMe.php index 834673ce..b1500172 100644 --- a/laravel/src/SyncApiMe.php +++ b/laravel/src/SyncApiMe.php @@ -51,6 +51,16 @@ function withEnum( ); } + function withConstant( + array $value, + ): SyncApiConstant { + return $this + ->syncApi + ->withConstant( + $value, + ); + } + function withCollection( string $modelClass, string $scopeName, From ec867db5834eea288e604d17709ee7c25210a528 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Wed, 26 Jan 2022 09:35:20 +0000 Subject: [PATCH 37/58] Add names to constants. --- laravel/src/SyncApi.php | 7 +++++-- laravel/src/SyncApiCollection.php | 2 ++ laravel/src/SyncApiCollectionMediaCollection.php | 2 ++ laravel/src/SyncApiConstant.php | 9 +++++++-- laravel/src/SyncApiEnum.php | 2 ++ laravel/src/SyncApiInterface.php | 2 ++ laravel/src/SyncApiMe.php | 2 ++ 7 files changed, 22 insertions(+), 4 deletions(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index ac3fdd08..76dc624e 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -45,10 +45,13 @@ public function withEnum( return $syncApiEnum; } - public function withConstant(array $value): SyncApiConstant - { + public function withConstant( + string $name, + array $value, + ): SyncApiConstant { $syncApiConstant = new SyncApiConstant( $this, + $name, $value, ); diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 1889d186..270d424b 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -83,11 +83,13 @@ public function withEnum( } function withConstant( + string $name, array $value, ): SyncApiConstant { return $this ->syncApi ->withConstant( + $name, $value, ); } diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 45678339..6d065c12 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -61,11 +61,13 @@ function withEnum( } function withConstant( + string $name, array $value, ): SyncApiConstant { return $this ->syncApiCollection ->withConstant( + $name, $value, ); } diff --git a/laravel/src/SyncApiConstant.php b/laravel/src/SyncApiConstant.php index c704c855..5b26c0b8 100644 --- a/laravel/src/SyncApiConstant.php +++ b/laravel/src/SyncApiConstant.php @@ -13,13 +13,16 @@ class SyncApiConstant implements SyncApiConstantInterface { private SyncApi $syncApi; + private string $name; public array $value; public function __construct( SyncApi $syncApi, + string $name, array $value, ) { $this->syncApi = $syncApi; + $this->name = $name; $this->value = $value; } @@ -48,11 +51,13 @@ function withEnum( } function withConstant( + string $name, array $value, ): SyncApiConstant { return $this ->syncApi ->withConstant( + $name, $value, ); } @@ -75,12 +80,12 @@ function withCollection( public function generateCamelCasedName(): string { - return Str::camel(Str::pluralStudly(class_basename($this->enumClass))); + return Str::camel(Str::pluralStudly($this->name)); } public function generateKebabCasedName(): string { - return Str::kebab(Str::pluralStudly(class_basename($this->enumClass))); + return Str::kebab(Str::pluralStudly($this->name)); } public function hashData(array $data): string diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index 7ec1cdf3..9fd0160e 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -52,11 +52,13 @@ function withEnum( } function withConstant( + string $name, array $value, ): SyncApiConstant { return $this ->syncApi ->withConstant( + $name, $value, ); } diff --git a/laravel/src/SyncApiInterface.php b/laravel/src/SyncApiInterface.php index ba10c9a4..2be65c7b 100644 --- a/laravel/src/SyncApiInterface.php +++ b/laravel/src/SyncApiInterface.php @@ -33,9 +33,11 @@ function withEnum( /** * Adds a new constant to this sync API. + * @param string $name The name of the value to add. * @param array $value The JSON-serializable value to add. */ function withConstant( + string $name, array $value, ): SyncApiConstant; diff --git a/laravel/src/SyncApiMe.php b/laravel/src/SyncApiMe.php index b1500172..56e8e0de 100644 --- a/laravel/src/SyncApiMe.php +++ b/laravel/src/SyncApiMe.php @@ -52,11 +52,13 @@ function withEnum( } function withConstant( + string $name, array $value, ): SyncApiConstant { return $this ->syncApi ->withConstant( + $name, $value, ); } From 9a74ef6a6d93b573d99195fb6fb1df5cee34ca93 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Wed, 26 Jan 2022 09:36:53 +0000 Subject: [PATCH 38/58] Fix names being plural. --- laravel/src/SyncApiConstant.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/laravel/src/SyncApiConstant.php b/laravel/src/SyncApiConstant.php index 5b26c0b8..6a583b89 100644 --- a/laravel/src/SyncApiConstant.php +++ b/laravel/src/SyncApiConstant.php @@ -80,12 +80,12 @@ function withCollection( public function generateCamelCasedName(): string { - return Str::camel(Str::pluralStudly($this->name)); + return Str::camel($this->name); } public function generateKebabCasedName(): string { - return Str::kebab(Str::pluralStudly($this->name)); + return Str::kebab($this->name); } public function hashData(array $data): string From 51da4507e8b7369ab3f92a22d83bea0052dfa5b3 Mon Sep 17 00:00:00 2001 From: Stephen Sullivan Date: Fri, 18 Mar 2022 14:20:10 +0000 Subject: [PATCH 39/58] Updated to use uuid instead of name for media uuids: - Individual models can be given individual fields for uuid in config - Default model uuid field can be set in config - Media uuid field can be set in config - Added check for non-s3 storage --- composer.json | 4 ++ .../src/SyncApiCollectionMediaCollection.php | 49 ++++++++++++++++--- 2 files changed, 46 insertions(+), 7 deletions(-) diff --git a/composer.json b/composer.json index c9583751..028d63c9 100644 --- a/composer.json +++ b/composer.json @@ -7,6 +7,10 @@ { "name": "jameswilddev", "email": "jameswilddev@outlook.com" + }, + { + "name": "Stephen J Sullivan", + "email": "stephen@sulli.work" } ], "require": { diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 6d065c12..cd001011 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -18,6 +18,36 @@ class SyncApiCollectionMediaCollection implements SyncApiCollectionMediaCollecti private int $syncCapabilities; + private function getMediaUuidField(): string + { + if (config('react-native-sync')) { + if (config('react-native-sync.uuid-fields')) { + if (config('react-native-sync.uuid-fields.media')) { + return config('react-native-sync.uuid-fields.media'); + } + if (config('react-native-sync.uuid-fields.default')) { + return config('react-native-sync.uuid-fields.default'); + } + } + } + return "uuid"; + } + + private function getModelUuidField(string $modelName): string + { + if (config('react-native-sync')) { + if (config('react-native-sync.uuid-fields')) { + if (config('react-native-sync.uuid-fields.models.' . $modelName)) { + return config('react-native-sync.uuid-fields.models.' . $modelName); + } + if (config('react-native-sync.uuid-fields.default')) { + return config('react-native-sync.uuid-fields.default'); + } + } + } + return "uuid"; + } + public function __construct( SyncApiCollection $syncApiCollection, string $name, @@ -107,20 +137,25 @@ function (string $modelUuid, string $mediaUuid) { $model = $this ->syncApiCollection ->modelClass::$scopeName() - ->where('uuid', $modelUuid) + ->where($this->getModelUuidField($this->syncApiCollection->modelClass), $modelUuid) ->first(); if ($model) { $media = $model ->getMedia($this->name) - ->where('name', $mediaUuid) + ->where($this->getMediaUuidField(), $mediaUuid) ->first(); if ($media === null) { // TODO why isn't this propagating throw new ModelNotFoundException(); } else { - return redirect()->to($media->getTemporaryUrl(now()->addHour())); + if (config("filesystems.disks.{$media->disk}.driver" == "s3")) { + return redirect()->to($media->getTemporaryUrl(now()->addHour())); + } else { + + return redirect()->to($media->getFullUrl()); + } } } else { throw new ModelNotFoundException(); @@ -138,13 +173,13 @@ function (string $modelUuid, string $mediaUuid) { $model = $this ->syncApiCollection ->modelClass::$scopeName() - ->where('uuid', $modelUuid) + ->where($this->getModelUuidField($this->syncApiCollection->modelClass), $modelUuid) ->first(); if ($model) { $media = $model ->getMedia($this->name) - ->where('name', $mediaUuid) + ->where($this->getMediaUuidField(), $mediaUuid) ->first(); if ($media === null) { @@ -172,13 +207,13 @@ function (string $modelUuid, string $mediaUuid) { $model = $this ->syncApiCollection ->modelClass::$scopeName() - ->where('uuid', $modelUuid) + ->where($this->getModelUuidField($this->syncApiCollection->modelClass), $modelUuid) ->first(); if ($model) { $media = $model ->getMedia($this->name) - ->where('name', $mediaUuid) + ->where($this->getMediaUuidField(), $mediaUuid) ->first(); if ($media !== null) { From 9a0ae5e3a9ae4d17de3723ed23155a4a0307429a Mon Sep 17 00:00:00 2001 From: Stephen Sullivan Date: Fri, 18 Mar 2022 15:26:27 +0000 Subject: [PATCH 40/58] Added font weight to buttons --- react-native/components/createButtonComponent/index.tsx | 1 + react-native/types/ButtonStyle/index.tsx | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/react-native/components/createButtonComponent/index.tsx b/react-native/components/createButtonComponent/index.tsx index 1dfe17fc..bcfc8907 100644 --- a/react-native/components/createButtonComponent/index.tsx +++ b/react-native/components/createButtonComponent/index.tsx @@ -66,6 +66,7 @@ export const createButtonComponent = ( const textBase: TextStyle = { fontFamily: buttonStyle.fontFamily, fontSize: buttonStyle.fontSize, + fontWeight: buttonStyle.fontWeight, lineHeight: buttonStyle.fontSize * 1.4, }; diff --git a/react-native/types/ButtonStyle/index.tsx b/react-native/types/ButtonStyle/index.tsx index 346d0e7c..38d658ac 100644 --- a/react-native/types/ButtonStyle/index.tsx +++ b/react-native/types/ButtonStyle/index.tsx @@ -14,6 +14,11 @@ export type ButtonStyle = { */ readonly fontSize: number; + /** + * The weight of the text on the button. + */ + readonly fontWeight?: "normal" | "bold" | "100" | "200" | "300" | "400" | "500" | "600" | "700" | "800" | "900" | undefined; + /** * The amount of horizontal padding inside the button. */ From 6830b6a3ed117495cd42c404cbf1029380d6a546 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Wed, 30 Mar 2022 10:55:02 +0100 Subject: [PATCH 41/58] Apply Ste's fix. --- laravel/src/SyncApiCollectionMediaCollection.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index cd001011..3341c98d 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -150,7 +150,7 @@ function (string $modelUuid, string $mediaUuid) { // TODO why isn't this propagating throw new ModelNotFoundException(); } else { - if (config("filesystems.disks.{$media->disk}.driver" == "s3")) { + if ($media->getDiskDriverName() == "s3") { return redirect()->to($media->getTemporaryUrl(now()->addHour())); } else { From 85003e8d20ed117f85f4b8eb6b232f4b56074ac6 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Wed, 24 Aug 2022 12:20:30 +0100 Subject: [PATCH 42/58] Attempt to generate a file name with an extension. --- .../src/SyncApiCollectionMediaCollection.php | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 3341c98d..74079f30 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -2,6 +2,7 @@ namespace JamesWildDev\ReactNativeAppHelpers; +use finfo; use Illuminate\Database\Eloquent\ModelNotFoundException; use Illuminate\Support\Facades\Route; use Illuminate\Support\Str; @@ -183,9 +184,25 @@ function (string $modelUuid, string $mediaUuid) { ->first(); if ($media === null) { + $data = request()->getContent(); + + $finfo = new finfo(FILEINFO_MIME_TYPE); + $mimeType = $finfo->buffer($data); + + if ($mimeType) { + if (preg_match('/^[^\/]+\/([a-z]{3,4})$/', $mimeType, $matches)) { + $extension = '.' . $matches[1]; + } else { + $extension = ''; + } + } else { + $extension = ''; + } + $model - ->addMediaFromString(request()->getContent()) - ->usingName($mediaUuid) + ->addMediaFromString($data) + ->usingName($mediaUuid . $extension) + ->withProperties(['uuid' => $mediaUuid]) ->toMediaCollection($this->name); } } else { From d4facaf0e3afc2f3180a24f6149d269c24a5ce9e Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Mon, 5 Sep 2022 12:39:52 +0100 Subject: [PATCH 43/58] Allow override of route fragments. --- laravel/src/SyncApi.php | 2 ++ laravel/src/SyncApiCollection.php | 26 ++++++++++++------- laravel/src/SyncApiCollectionInterface.php | 6 +++-- .../src/SyncApiCollectionMediaCollection.php | 21 ++++++++------- laravel/src/SyncApiConstant.php | 2 ++ laravel/src/SyncApiEnum.php | 2 ++ laravel/src/SyncApiInterface.php | 5 ++++ laravel/src/SyncApiMe.php | 2 ++ 8 files changed, 46 insertions(+), 20 deletions(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 76dc624e..7d4c787a 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -65,6 +65,7 @@ public function withCollection( string $scopeName, ?string $resourceClass, ?string $controllerClass, + ?string $routeFragment, ): SyncApiCollection { $syncApiCollection = new SyncApiCollection( $this, @@ -72,6 +73,7 @@ public function withCollection( $scopeName, $resourceClass, $controllerClass, + $routeFragment, ); $this->collections[] = $syncApiCollection; diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 270d424b..a68b2d08 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -22,6 +22,8 @@ class SyncApiCollection implements SyncApiCollectionInterface private ?string $controllerClass; + private string $routeFragment; + private array $syncApiCollectionMediaCollections = []; public function __construct( @@ -30,12 +32,14 @@ public function __construct( string $scopeName, ?string $resourceClass, ?string $controllerClass, + ?string $routeFragment, ) { $this->syncApi = $syncApi; $this->modelClass = $modelClass; $this->scopeName = $scopeName; $this->resourceClass = $resourceClass; $this->controllerClass = $controllerClass; + $this->routeFragment = $routeFragment ?? Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); } /** @@ -43,16 +47,23 @@ public function __construct( * @param string $name The name of the media collection. * @param int $syncCapabilities The actions available to API * consumers. + * @param ?string $routeFragment When specified and non-null, the + * route fragment to use within the + * URL, otherwise auto-generated + * (e.g. SomeClassName + * = some-class-names). * @return SyncApiCollectionMediaCollection The created media collection. */ public function withMediaCollection( string $name, int $syncCapabilities, + ?string $routeFragment, ): SyncApiCollectionMediaCollection { $syncApiCollectionMediaCollection = new SyncApiCollectionMediaCollection( $this, $name, $syncCapabilities, + $routeFragment, ); $this->syncApiCollectionMediaCollections[] = $syncApiCollectionMediaCollection; @@ -99,12 +110,14 @@ public function withCollection( string $scopeName, ?string $resourceClass, ?string $controllerClass, + ?string $routeFragment, ): SyncApiCollection { return $this->syncApi->withCollection( $modelClass, $scopeName, $resourceClass, - $controllerClass + $controllerClass, + $routeFragment, ); } @@ -113,11 +126,6 @@ public function generateCamelCasedName(): string return Str::camel(Str::pluralStudly(class_basename($this->modelClass))); } - public function generateKebabCasedName(): string - { - return Str::kebab(Str::pluralStudly(class_basename($this->modelClass))); - } - public function generatePreflightCollection(): ?array { if ($this->resourceClass === null) { @@ -141,7 +149,7 @@ public function generateCollectionRoutes(): void { if ($this->resourceClass !== null) { Route::get( - $this->generateKebabCasedName() . '/{uuid}', + $this->routeFragment . '/{uuid}', function (string $uuid) { $scopeName = $this->scopeName; @@ -165,14 +173,14 @@ function (string $uuid) { if ($this->controllerClass !== null) { if (method_exists($this->controllerClass, 'upsert')) { Route::put( - $this->generateKebabCasedName() . '/{uuid}', + $this->routeFragment . '/{uuid}', [$this->controllerClass, 'upsert'] ); } if (method_exists($this->controllerClass, 'destroy')) { Route::delete( - $this->generateKebabCasedName() . '/{uuid}', + $this->routeFragment . '/{uuid}', [$this->controllerClass, 'destroy'] ); } diff --git a/laravel/src/SyncApiCollectionInterface.php b/laravel/src/SyncApiCollectionInterface.php index ba2d4b7e..cf55c6c9 100644 --- a/laravel/src/SyncApiCollectionInterface.php +++ b/laravel/src/SyncApiCollectionInterface.php @@ -10,11 +10,13 @@ interface SyncApiCollectionInterface extends SyncApiInterface { /** * Adds a new media collection to this collection. - * @param string $name The name of the media collection. - * @param int $syncCapabilities The actions available to API consumers. + * @param string $name The name of the media collection. + * @param int $syncCapabilities The actions available to API consumers. + * @param ?string $routeFragment When specified and non-null, the route fragment to use within the URL, otherwise auto-generated (e.g. SomeClassName = some-class-names). */ function withMediaCollection( string $name, int $syncCapabilities, + ?string $routeFragment ): SyncApiCollectionMediaCollection; } diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 74079f30..8cf26a04 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -19,6 +19,8 @@ class SyncApiCollectionMediaCollection implements SyncApiCollectionMediaCollecti private int $syncCapabilities; + private string $routeFragment; + private function getMediaUuidField(): string { if (config('react-native-sync')) { @@ -53,19 +55,23 @@ public function __construct( SyncApiCollection $syncApiCollection, string $name, int $syncCapabilities, + ?string $routeFragment, ) { $this->syncApiCollection = $syncApiCollection; $this->name = $name; $this->syncCapabilities = $syncCapabilities; + $this->routeFragment = $routeFragment ?? Str::kebab(Str::pluralStudly(class_basename($this->syncApiCollection->modelClass))); } public function withMediaCollection( string $name, int $syncCapabilities, + ?string $routeFragment, ): SyncApiCollectionMediaCollection { return $this->syncApiCollection->withMediaCollection( $name, $syncCapabilities, + $routeFragment, ); } @@ -108,20 +114,17 @@ public function withCollection( string $scopeName, ?string $resourceClass, ?string $controllerClass, + ?string $routeFragment, ): SyncApiCollection { return $this->syncApiCollection->withCollection( $modelClass, $scopeName, $resourceClass, - $controllerClass + $controllerClass, + $routeFragment, ); } - public function generateKebabCasedModelClassName(): string - { - return Str::kebab(Str::pluralStudly(class_basename($this->syncApiCollection->modelClass))); - } - public function generateKebabCasedMediaCollectionName(): string { return Str::kebab(Str::pluralStudly(preg_replace('/.*:/', '', $this->name))); @@ -131,7 +134,7 @@ public function generateCollectionMediaCollectionRoutes(): void { if ($this->syncCapabilities & SyncCapability::READ) { Route::get( - $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', + $this->routeFragment . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; @@ -166,7 +169,7 @@ function (string $modelUuid, string $mediaUuid) { } if ($this->syncCapabilities & SyncCapability::UPSERT) { - $route = $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}'; + $route = $this->routeFragment . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}'; $implementation = function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; @@ -217,7 +220,7 @@ function (string $modelUuid, string $mediaUuid) { if ($this->syncCapabilities & SyncCapability::DELETE) { Route::delete( - $this->generateKebabCasedModelClassName() . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', + $this->routeFragment . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; diff --git a/laravel/src/SyncApiConstant.php b/laravel/src/SyncApiConstant.php index 6a583b89..03255a11 100644 --- a/laravel/src/SyncApiConstant.php +++ b/laravel/src/SyncApiConstant.php @@ -67,6 +67,7 @@ function withCollection( string $scopeName, ?string $resourceClass, ?string $controllerClass, + ?string $routeFragment, ): SyncApiCollection { return $this ->syncApi @@ -75,6 +76,7 @@ function withCollection( $scopeName, $resourceClass, $controllerClass, + $routeFragment, ); } diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index 9fd0160e..3cf41148 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -68,6 +68,7 @@ function withCollection( string $scopeName, ?string $resourceClass, ?string $controllerClass, + ?string $routeFragment, ): SyncApiCollection { return $this ->syncApi @@ -76,6 +77,7 @@ function withCollection( $scopeName, $resourceClass, $controllerClass, + $routeFragment, ); } diff --git a/laravel/src/SyncApiInterface.php b/laravel/src/SyncApiInterface.php index 2be65c7b..6a3b240c 100644 --- a/laravel/src/SyncApiInterface.php +++ b/laravel/src/SyncApiInterface.php @@ -89,6 +89,10 @@ function withConstant( * from this method. * When null, none of these routes will be * generated. + * @param ?string $routeFragment When specified and non-null, the route + * fragment to use within the URL, otherwise + * auto-generated + * (e.g. SomeClassName = some-class-names). * @return SyncApiCollection The created SyncApiCollection. */ function withCollection( @@ -96,6 +100,7 @@ function withCollection( string $scopeName, ?string $resourceClass, ?string $controllerClass, + ?string $routeFragment, ): SyncApiCollection; /** diff --git a/laravel/src/SyncApiMe.php b/laravel/src/SyncApiMe.php index 56e8e0de..aa7ea3b4 100644 --- a/laravel/src/SyncApiMe.php +++ b/laravel/src/SyncApiMe.php @@ -68,6 +68,7 @@ function withCollection( string $scopeName, ?string $resourceClass, ?string $controllerClass, + ?string $routeFragment, ): SyncApiCollection { return $this ->syncApi @@ -76,6 +77,7 @@ function withCollection( $scopeName, $resourceClass, $controllerClass, + $routeFragment, ); } From 4430a730f09748f1c68d84db37f1dd474086e2d0 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Mon, 5 Sep 2022 12:46:00 +0100 Subject: [PATCH 44/58] Remove unnecessary parameter. --- laravel/src/SyncApiCollection.php | 8 +------- laravel/src/SyncApiCollectionInterface.php | 2 -- laravel/src/SyncApiCollectionMediaCollection.php | 2 -- 3 files changed, 1 insertion(+), 11 deletions(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index a68b2d08..df513315 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -47,23 +47,17 @@ public function __construct( * @param string $name The name of the media collection. * @param int $syncCapabilities The actions available to API * consumers. - * @param ?string $routeFragment When specified and non-null, the - * route fragment to use within the - * URL, otherwise auto-generated - * (e.g. SomeClassName - * = some-class-names). * @return SyncApiCollectionMediaCollection The created media collection. */ public function withMediaCollection( string $name, int $syncCapabilities, - ?string $routeFragment, ): SyncApiCollectionMediaCollection { $syncApiCollectionMediaCollection = new SyncApiCollectionMediaCollection( $this, $name, $syncCapabilities, - $routeFragment, + $this->routeFragment, ); $this->syncApiCollectionMediaCollections[] = $syncApiCollectionMediaCollection; diff --git a/laravel/src/SyncApiCollectionInterface.php b/laravel/src/SyncApiCollectionInterface.php index cf55c6c9..ad6d472d 100644 --- a/laravel/src/SyncApiCollectionInterface.php +++ b/laravel/src/SyncApiCollectionInterface.php @@ -12,11 +12,9 @@ interface SyncApiCollectionInterface extends SyncApiInterface * Adds a new media collection to this collection. * @param string $name The name of the media collection. * @param int $syncCapabilities The actions available to API consumers. - * @param ?string $routeFragment When specified and non-null, the route fragment to use within the URL, otherwise auto-generated (e.g. SomeClassName = some-class-names). */ function withMediaCollection( string $name, int $syncCapabilities, - ?string $routeFragment ): SyncApiCollectionMediaCollection; } diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 8cf26a04..211daccf 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -66,12 +66,10 @@ public function __construct( public function withMediaCollection( string $name, int $syncCapabilities, - ?string $routeFragment, ): SyncApiCollectionMediaCollection { return $this->syncApiCollection->withMediaCollection( $name, $syncCapabilities, - $routeFragment, ); } From 5e93e3fb76fe38a888165ffdb68347fd77cc1971 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Mon, 5 Sep 2022 12:49:46 +0100 Subject: [PATCH 45/58] Add defaults. --- laravel/src/SyncApi.php | 6 +++--- laravel/src/SyncApiCollection.php | 6 +++--- laravel/src/SyncApiCollectionMediaCollection.php | 6 +++--- laravel/src/SyncApiConstant.php | 6 +++--- laravel/src/SyncApiEnum.php | 6 +++--- laravel/src/SyncApiInterface.php | 6 +++--- laravel/src/SyncApiMe.php | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 7d4c787a..61da49fd 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -63,9 +63,9 @@ public function withConstant( public function withCollection( string $modelClass, string $scopeName, - ?string $resourceClass, - ?string $controllerClass, - ?string $routeFragment, + ?string $resourceClass = null, + ?string $controllerClass = null, + ?string $routeFragment = null, ): SyncApiCollection { $syncApiCollection = new SyncApiCollection( $this, diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index df513315..840dad60 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -102,9 +102,9 @@ function withConstant( public function withCollection( string $modelClass, string $scopeName, - ?string $resourceClass, - ?string $controllerClass, - ?string $routeFragment, + ?string $resourceClass = null, + ?string $controllerClass = null, + ?string $routeFragment = null, ): SyncApiCollection { return $this->syncApi->withCollection( $modelClass, diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 211daccf..0b606611 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -110,9 +110,9 @@ function withConstant( public function withCollection( string $modelClass, string $scopeName, - ?string $resourceClass, - ?string $controllerClass, - ?string $routeFragment, + ?string $resourceClass = null, + ?string $controllerClass = null, + ?string $routeFragment = null, ): SyncApiCollection { return $this->syncApiCollection->withCollection( $modelClass, diff --git a/laravel/src/SyncApiConstant.php b/laravel/src/SyncApiConstant.php index 03255a11..12f25b18 100644 --- a/laravel/src/SyncApiConstant.php +++ b/laravel/src/SyncApiConstant.php @@ -65,9 +65,9 @@ function withConstant( function withCollection( string $modelClass, string $scopeName, - ?string $resourceClass, - ?string $controllerClass, - ?string $routeFragment, + ?string $resourceClass = null, + ?string $controllerClass = null, + ?string $routeFragment = null, ): SyncApiCollection { return $this ->syncApi diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index 3cf41148..377c6051 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -66,9 +66,9 @@ function withConstant( function withCollection( string $modelClass, string $scopeName, - ?string $resourceClass, - ?string $controllerClass, - ?string $routeFragment, + ?string $resourceClass = null, + ?string $controllerClass = null, + ?string $routeFragment = null, ): SyncApiCollection { return $this ->syncApi diff --git a/laravel/src/SyncApiInterface.php b/laravel/src/SyncApiInterface.php index 6a3b240c..633e2346 100644 --- a/laravel/src/SyncApiInterface.php +++ b/laravel/src/SyncApiInterface.php @@ -98,9 +98,9 @@ function withConstant( function withCollection( string $modelClass, string $scopeName, - ?string $resourceClass, - ?string $controllerClass, - ?string $routeFragment, + ?string $resourceClass = null, + ?string $controllerClass = null, + ?string $routeFragment = null, ): SyncApiCollection; /** diff --git a/laravel/src/SyncApiMe.php b/laravel/src/SyncApiMe.php index aa7ea3b4..789180b3 100644 --- a/laravel/src/SyncApiMe.php +++ b/laravel/src/SyncApiMe.php @@ -66,9 +66,9 @@ function withConstant( function withCollection( string $modelClass, string $scopeName, - ?string $resourceClass, - ?string $controllerClass, - ?string $routeFragment, + ?string $resourceClass = null, + ?string $controllerClass = null, + ?string $routeFragment = null, ): SyncApiCollection { return $this ->syncApi From 5ea0264f4e5bf1d3f8fa0430913bae826e2498e0 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Fri, 9 Sep 2022 07:27:53 +0100 Subject: [PATCH 46/58] Mark where we want transactions. --- laravel/src/SyncApiCollectionMediaCollection.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 0b606611..5b91f86d 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -171,7 +171,7 @@ function (string $modelUuid, string $mediaUuid) { $implementation = function (string $modelUuid, string $mediaUuid) { $scopeName = $this->syncApiCollection->scopeName; - + // TODO transaction $model = $this ->syncApiCollection ->modelClass::$scopeName() @@ -217,6 +217,7 @@ function (string $modelUuid, string $mediaUuid) { } if ($this->syncCapabilities & SyncCapability::DELETE) { + // TODO transaction Route::delete( $this->routeFragment . '/{modelUuid}/' . $this->generateKebabCasedMediaCollectionName() . '/{mediaUuid}', function (string $modelUuid, string $mediaUuid) { From 90585bb543b9c1535da0d66ba530e3e96dc9868b Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 16 Mar 2023 11:17:26 +0000 Subject: [PATCH 47/58] Fix 500 being returned rather than 403 when access has been revoked. --- laravel/src/SyncableModelHelper.php | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/laravel/src/SyncableModelHelper.php b/laravel/src/SyncableModelHelper.php index cfacb749..1abecaef 100644 --- a/laravel/src/SyncableModelHelper.php +++ b/laravel/src/SyncableModelHelper.php @@ -2,8 +2,8 @@ namespace JamesWildDev\ReactNativeAppHelpers; +use Illuminate\Auth\Access\AuthorizationException; use Illuminate\Database\Eloquent\ModelNotFoundException; -use Illuminate\Validation\UnauthorizedException; /** * Helpers for working with syncable models. @@ -37,17 +37,17 @@ static function update( } /** - * Retrieves a model by its UUID if it exists. - * @param string $modelClass The Laravel Model class which is to be - * retrieved. - * @param string $scopeName The name of the scope which will be used to - * filter the Models (e.g. "exampleTest" -> - * "function scopeExampleTest()"). - * @param string $uuid The UUID of the model to retrieve. - * @return ?SyncableModel When the model exists, the model, otherwise, - * null. - * @throws UnauthorizedException When the model exists, but access is blocked - * by the scope. + * Upserts a model by its UUID if it exists. + * @param string $modelClass The Laravel Model class which is to be + * upserted. + * @param string $scopeName The name of the scope which will be used to + * filter the Models (e.g. "exampleTest" -> + * "function scopeExampleTest()"). + * @param string $uuid The UUID of the model to upsert. + * @return ?SyncableModel When the model exists, the model, otherwise, + * null. + * @throws AuthorizationException When the model exists, but access is blocked + * by the scope. */ static function upsert( string $modelClass, @@ -74,10 +74,8 @@ static function upsert( $query = $query->withTrashed(); } - - if ($query->where('uuid', $uuid)->exists()) { - throw new UnauthorizedException(); + throw new AuthorizationException(); } else { return null; } From 1ad9825c4937592be10a1d2733435f9992780a62 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 16 Mar 2023 11:17:32 +0000 Subject: [PATCH 48/58] Configure rulers. --- .vscode/settings.json | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 51dd0251..892372d8 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -28,5 +28,8 @@ "test_results": true, ".phpunit.cache": true }, - "typescript.tsdk": "./node_modules/typescript.lib" + "typescript.tsdk": "./node_modules/typescript.lib", + "editor.rulers": [ + 80 + ] } From 0165c386f539267ec0438b180c68bc6b608af2d9 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Wed, 6 Dec 2023 09:49:35 +0000 Subject: [PATCH 49/58] Add more Laravel versions. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 75ab84db..8a7a241c 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ ], "require": { "php": "^8.0", - "laravel/framework": "^8" + "laravel/framework": "^8|^9|^10" }, "autoload": { "psr-4": { From b0559b2aab13e3373ac6209e610c99768fde5030 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Wed, 6 Dec 2023 09:51:54 +0000 Subject: [PATCH 50/58] Update dependencies. --- composer.json | 2 +- composer.lock | 2906 +++++++++++++++++++++++++++++-------------------- 2 files changed, 1702 insertions(+), 1206 deletions(-) diff --git a/composer.json b/composer.json index 8a7a241c..0cbb9bd9 100644 --- a/composer.json +++ b/composer.json @@ -28,7 +28,7 @@ } }, "require-dev": { - "phpunit/phpunit": "9.5.13", + "phpunit/phpunit": "^9.5", "vimeo/psalm": "4.19.0", "mockery/mockery": "1.5.0" } diff --git a/composer.lock b/composer.lock index 16140e39..019a1e4e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,30 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "0caf6b7046ea88e745a83e895915e88e", + "content-hash": "92068d7430bf80640fd1b22c3f9f9482", "packages": [ { "name": "brick/math", - "version": "0.9.3", + "version": "0.11.0", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae" + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/ca57d18f028f84f777b2168cd1911b0dee2343ae", - "reference": "ca57d18f028f84f777b2168cd1911b0dee2343ae", + "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", + "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", "shasum": "" }, "require": { - "ext-json": "*", - "php": "^7.1 || ^8.0" + "php": "^8.0" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^7.5.15 || ^8.5 || ^9.0", - "vimeo/psalm": "4.9.2" + "phpunit/phpunit": "^9.0", + "vimeo/psalm": "5.0.0" }, "type": "library", "autoload": { @@ -52,32 +51,97 @@ ], "support": { "issues": "https://github.com/brick/math/issues", - "source": "https://github.com/brick/math/tree/0.9.3" + "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": "carbonphp/carbon-doctrine-types", + "version": "3.0.0", + "source": { + "type": "git", + "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", + "reference": "49856fbc09fe91b5433381faec60e3620ad364ad" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/49856fbc09fe91b5433381faec60e3620ad364ad", + "reference": "49856fbc09fe91b5433381faec60e3620ad364ad", + "shasum": "" + }, + "require": { + "php": "^8.1" + }, + "conflict": { + "doctrine/dbal": "<4.0.0 || >=5.0.0" + }, + "require-dev": { + "doctrine/dbal": "^4.0.0", + "nesbot/carbon": "^2.71.0 || ^3.0.0", + "phpunit/phpunit": "^10.3" + }, + "type": "library", + "autoload": { + "psr-4": { + "Carbon\\Doctrine\\": "src/Carbon/Doctrine/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "KyleKatarn", + "email": "kylekatarnls@gmail.com" + } + ], + "description": "Types to use Carbon in Doctrine", + "keywords": [ + "carbon", + "date", + "datetime", + "doctrine", + "time" + ], + "support": { + "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.0.0" + }, + "funding": [ + { + "url": "https://github.com/kylekatarnls", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/brick/math", + "url": "https://opencollective.com/Carbon", + "type": "open_collective" + }, + { + "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", "type": "tidelift" } ], - "time": "2021-08-15T20:50:18+00:00" + "time": "2023-10-01T14:36:55+00:00" }, { "name": "dflydev/dot-access-data", - "version": "v3.0.1", + "version": "v3.0.2", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c" + "reference": "f41715465d65213d644d3141a6a93081be5d3549" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/0992cc19268b259a39e86f296da5f0677841f42c", - "reference": "0992cc19268b259a39e86f296da5f0677841f42c", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", + "reference": "f41715465d65213d644d3141a6a93081be5d3549", "shasum": "" }, "require": { @@ -88,7 +152,7 @@ "phpunit/phpunit": "^7.5 || ^8.5 || ^9.3", "scrutinizer/ocular": "1.6.0", "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^3.14" + "vimeo/psalm": "^4.0.0" }, "type": "library", "extra": { @@ -137,34 +201,34 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.1" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" }, - "time": "2021-08-13T13:06:58+00:00" + "time": "2022-10-27T11:44:00+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.4", + "version": "2.0.8", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89" + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", - "reference": "8b7ff3e4b7de6b2c84da85637b59fd2880ecaa89", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpstan/phpstan-strict-rules": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0", - "vimeo/psalm": "^4.10" + "doctrine/coding-standard": "^11.0", + "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 || ^5.4" }, "type": "library", "autoload": { @@ -214,7 +278,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.4" + "source": "https://github.com/doctrine/inflector/tree/2.0.8" }, "funding": [ { @@ -230,39 +294,36 @@ "type": "tidelift" } ], - "time": "2021-10-22T20:16:43+00:00" + "time": "2023-06-16T13:40:37+00:00" }, { "name": "doctrine/lexer", - "version": "1.2.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042" + "reference": "84a527db05647743d50373e0ec53a152f2cde568" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/e864bbf5904cb8f5bb334f99209b48018522f042", - "reference": "e864bbf5904cb8f5bb334f99209b48018522f042", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", + "reference": "84a527db05647743d50373e0ec53a152f2cde568", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^6.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^8.2" + "doctrine/coding-standard": "^10", + "phpstan/phpstan": "^1.9", + "phpunit/phpunit": "^9.5", + "psalm/plugin-phpunit": "^0.18.3", + "vimeo/psalm": "^5.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.2.x-dev" - } - }, "autoload": { "psr-4": { - "Doctrine\\Common\\Lexer\\": "lib/Doctrine/Common/Lexer" + "Doctrine\\Common\\Lexer\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -294,7 +355,7 @@ ], "support": { "issues": "https://github.com/doctrine/lexer/issues", - "source": "https://github.com/doctrine/lexer/tree/1.2.1" + "source": "https://github.com/doctrine/lexer/tree/3.0.0" }, "funding": [ { @@ -310,33 +371,33 @@ "type": "tidelift" } ], - "time": "2020-05-25T17:44:05+00:00" + "time": "2022-12-15T16:57:16+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.1.0", + "version": "v3.3.3", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c" + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", - "reference": "7a8c6e56ab3ffcc538d05e8155bb42269abf1a0c", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", "shasum": "" }, "require": { "php": "^7.2|^8.0", - "webmozart/assert": "^1.7.0" + "webmozart/assert": "^1.0" }, "replace": { "mtdowling/cron-expression": "^1.0" }, "require-dev": { "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-webmozart-assert": "^0.12.7", + "phpstan/phpstan": "^1.0", + "phpstan/phpstan-webmozart-assert": "^1.0", "phpunit/phpunit": "^7.0|^8.0|^9.0" }, "type": "library", @@ -363,7 +424,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.1.0" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" }, "funding": [ { @@ -371,31 +432,30 @@ "type": "github" } ], - "time": "2020-11-24T19:55:57+00:00" + "time": "2023-08-10T19:36:49+00:00" }, { "name": "egulias/email-validator", - "version": "2.1.25", + "version": "4.0.2", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4" + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/0dbf5d78455d4d6a41d186da50adc1122ec066f4", - "reference": "0dbf5d78455d4d6a41d186da50adc1122ec066f4", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", + "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", "shasum": "" }, "require": { - "doctrine/lexer": "^1.0.1", - "php": ">=5.5", - "symfony/polyfill-intl-idn": "^1.10" + "doctrine/lexer": "^2.0 || ^3.0", + "php": ">=8.1", + "symfony/polyfill-intl-idn": "^1.26" }, "require-dev": { - "dominicsayers/isemail": "^3.0.7", - "phpunit/phpunit": "^4.8.36|^7.5.15", - "satooshi/php-coveralls": "^1.0.1" + "phpunit/phpunit": "^10.2", + "vimeo/psalm": "^5.12" }, "suggest": { "ext-intl": "PHP Internationalization Libraries are required to use the SpoofChecking validation" @@ -403,7 +463,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.1.x-dev" + "dev-master": "4.0.x-dev" } }, "autoload": { @@ -431,7 +491,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/2.1.25" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" }, "funding": [ { @@ -439,28 +499,99 @@ "type": "github" } ], - "time": "2020-12-29T14:50:06+00:00" + "time": "2023-10-06T06:47:41+00:00" + }, + { + "name": "fruitcake/php-cors", + "version": "v1.3.0", + "source": { + "type": "git", + "url": "https://github.com/fruitcake/php-cors.git", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/fruitcake/php-cors/zipball/3d158f36e7875e2f040f37bc0573956240a5a38b", + "reference": "3d158f36e7875e2f040f37bc0573956240a5a38b", + "shasum": "" + }, + "require": { + "php": "^7.4|^8.0", + "symfony/http-foundation": "^4.4|^5.4|^6|^7" + }, + "require-dev": { + "phpstan/phpstan": "^1.4", + "phpunit/phpunit": "^9", + "squizlabs/php_codesniffer": "^3.5" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.2-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.3.0" + }, + "funding": [ + { + "url": "https://fruitcake.nl", + "type": "custom" + }, + { + "url": "https://github.com/barryvdh", + "type": "github" + } + ], + "time": "2023-10-12T05:21:21+00:00" }, { "name": "graham-campbell/result-type", - "version": "v1.0.4", + "version": "v1.1.2", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "0690bde05318336c7221785f2a932467f98b64ca" + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/0690bde05318336c7221785f2a932467f98b64ca", - "reference": "0690bde05318336c7221785f2a932467f98b64ca", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", + "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0", - "phpoption/phpoption": "^1.8" + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2" }, "require-dev": { - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "autoload": { @@ -489,7 +620,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.0.4" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" }, "funding": [ { @@ -501,60 +632,156 @@ "type": "tidelift" } ], - "time": "2021-11-21T21:41:47+00:00" + "time": "2023-11-12T22:16:48+00:00" + }, + { + "name": "guzzlehttp/uri-template", + "version": "v1.0.3", + "source": { + "type": "git", + "url": "https://github.com/guzzle/uri-template.git", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", + "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "symfony/polyfill-php80": "^1.24" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.36 || ^9.6.15", + "uri-template/tests": "1.0.0" + }, + "type": "library", + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": false + } + }, + "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.3" + }, + "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": "2023-12-03T19:50:20+00:00" }, { "name": "laravel/framework", - "version": "v8.77.1", + "version": "v10.35.0", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "994dbac5c6da856c77c81a411cff5b7d31519ca8" + "reference": "91ec2d92d2f6007e9084fe06438b99c91845da69" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/994dbac5c6da856c77c81a411cff5b7d31519ca8", - "reference": "994dbac5c6da856c77c81a411cff5b7d31519ca8", + "url": "https://api.github.com/repos/laravel/framework/zipball/91ec2d92d2f6007e9084fe06438b99c91845da69", + "reference": "91ec2d92d2f6007e9084fe06438b99c91845da69", "shasum": "" }, "require": { - "doctrine/inflector": "^1.4|^2.0", - "dragonmantank/cron-expression": "^3.0.2", - "egulias/email-validator": "^2.1.10", - "ext-json": "*", + "brick/math": "^0.9.3|^0.10.2|^0.11", + "composer-runtime-api": "^2.2", + "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": "*", - "laravel/serializable-closure": "^1.0", - "league/commonmark": "^1.3|^2.0.2", - "league/flysystem": "^1.1", - "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.53.1", - "opis/closure": "^3.6", - "php": "^7.3|^8.0", - "psr/container": "^1.0", - "psr/log": "^1.0|^2.0", - "psr/simple-cache": "^1.0", - "ramsey/uuid": "^4.2.2", - "swiftmailer/swiftmailer": "^6.3", - "symfony/console": "^5.4", - "symfony/error-handler": "^5.4", - "symfony/finder": "^5.4", - "symfony/http-foundation": "^5.4", - "symfony/http-kernel": "^5.4", - "symfony/mime": "^5.4", - "symfony/process": "^5.4", - "symfony/routing": "^5.4", - "symfony/var-dumper": "^5.4", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", - "vlucas/phpdotenv": "^5.2", - "voku/portable-ascii": "^1.4.8" + "ext-session": "*", + "ext-tokenizer": "*", + "fruitcake/php-cors": "^1.2", + "guzzlehttp/uri-template": "^1.0", + "laravel/prompts": "^0.1.9", + "laravel/serializable-closure": "^1.3", + "league/commonmark": "^2.2.1", + "league/flysystem": "^3.8.0", + "monolog/monolog": "^3.0", + "nesbot/carbon": "^2.67", + "nunomaduro/termwind": "^1.13", + "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.2", + "symfony/error-handler": "^6.2", + "symfony/finder": "^6.2", + "symfony/http-foundation": "^6.4", + "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" }, "conflict": { "tightenco/collect": "<5.5.33" }, "provide": { - "psr/container-implementation": "1.0", - "psr/simple-cache-implementation": "1.0" + "psr/container-implementation": "1.1|2.0", + "psr/simple-cache-implementation": "1.0|2.0|3.0" }, "replace": { "illuminate/auth": "self.version", @@ -562,6 +789,7 @@ "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", @@ -579,6 +807,7 @@ "illuminate/notifications": "self.version", "illuminate/pagination": "self.version", "illuminate/pipeline": "self.version", + "illuminate/process": "self.version", "illuminate/queue": "self.version", "illuminate/redis": "self.version", "illuminate/routing": "self.version", @@ -590,52 +819,69 @@ "illuminate/view": "self.version" }, "require-dev": { - "aws/aws-sdk-php": "^3.198.1", - "doctrine/dbal": "^2.13.3|^3.1.4", - "filp/whoops": "^2.14.3", - "guzzlehttp/guzzle": "^6.5.5|^7.0.1", - "league/flysystem-cached-adapter": "^1.0", - "mockery/mockery": "^1.4.4", - "orchestra/testbench-core": "^6.27", + "ably/ably-php": "^1.0", + "aws/aws-sdk-php": "^3.235.5", + "doctrine/dbal": "^3.5.1", + "ext-gmp": "*", + "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", + "nyholm/psr7": "^1.2", + "orchestra/testbench-core": "^8.15.1", "pda/pheanstalk": "^4.0", - "phpunit/phpunit": "^8.5.19|^9.5.8", - "predis/predis": "^1.1.9", - "symfony/cache": "^5.4" + "phpstan/phpstan": "^1.4.7", + "phpunit/phpunit": "^10.0.7", + "predis/predis": "^2.0.2", + "symfony/cache": "^6.2", + "symfony/http-client": "^6.2.4", + "symfony/psr-http-message-bridge": "^2.0" }, "suggest": { - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage and SES mail driver (^3.198.1).", + "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-bcmath": "Required to use the multiple_of validation rule.", + "doctrine/dbal": "Required to rename columns and drop SQLite columns (^3.5.1).", + "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).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client, Mailgun mail driver and the ping methods on schedules (^6.5.5|^7.0.1).", + "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 (^1.0).", - "league/flysystem-cached-adapter": "Required to use the Flysystem cache (^1.0).", - "league/flysystem-sftp": "Required to use the Flysystem SFTP driver (^1.0).", - "mockery/mockery": "Required to use mocking (^1.4.4).", + "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 (^8.5.19|^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9).", + "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8|^10.0.7).", + "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 (^4.0|^5.0|^6.0|^7.0).", - "symfony/cache": "Required to PSR-6 cache bridge (^5.4).", - "symfony/filesystem": "Required to enable support for relative symbolic links (^5.4).", - "symfony/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0).", - "wildbit/swiftmailer-postmark": "Required to use Postmark mail driver (^3.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/psr-http-message-bridge": "Required to use PSR-7 bridging features (^2.0)." }, "type": "library", "extra": { "branch-alias": { - "dev-master": "8.x-dev" + "dev-master": "10.x-dev" } }, "autoload": { @@ -649,7 +895,8 @@ "Illuminate\\": "src/Illuminate/", "Illuminate\\Support\\": [ "src/Illuminate/Macroable/", - "src/Illuminate/Collections/" + "src/Illuminate/Collections/", + "src/Illuminate/Conditionable/" ] } }, @@ -673,29 +920,87 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2021-12-21T20:22:29+00:00" + "time": "2023-12-05T14:50:33+00:00" + }, + { + "name": "laravel/prompts", + "version": "v0.1.13", + "source": { + "type": "git", + "url": "https://github.com/laravel/prompts.git", + "reference": "e1379d8ead15edd6cc4369c22274345982edc95a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/laravel/prompts/zipball/e1379d8ead15edd6cc4369c22274345982edc95a", + "reference": "e1379d8ead15edd6cc4369c22274345982edc95a", + "shasum": "" + }, + "require": { + "ext-mbstring": "*", + "illuminate/collections": "^10.0|^11.0", + "php": "^8.1", + "symfony/console": "^6.2|^7.0" + }, + "conflict": { + "illuminate/console": ">=10.17.0 <10.25.0", + "laravel/framework": ">=10.17.0 <10.25.0" + }, + "require-dev": { + "mockery/mockery": "^1.5", + "pestphp/pest": "^2.3", + "phpstan/phpstan": "^1.10", + "phpstan/phpstan-mockery": "^1.1" + }, + "suggest": { + "ext-pcntl": "Required for the spinner to be animated." + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-main": "0.1.x-dev" + } + }, + "autoload": { + "files": [ + "src/helpers.php" + ], + "psr-4": { + "Laravel\\Prompts\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "support": { + "issues": "https://github.com/laravel/prompts/issues", + "source": "https://github.com/laravel/prompts/tree/v0.1.13" + }, + "time": "2023-10-27T13:53:59+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.0.5", + "version": "v1.3.3", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "25de3be1bca1b17d52ff0dc02b646c667ac7266c" + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/25de3be1bca1b17d52ff0dc02b646c667ac7266c", - "reference": "25de3be1bca1b17d52ff0dc02b646c667ac7266c", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", + "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "pestphp/pest": "^1.18", - "phpstan/phpstan": "^0.12.98", - "symfony/var-dumper": "^5.3" + "nesbot/carbon": "^2.61", + "pestphp/pest": "^1.21.3", + "phpstan/phpstan": "^1.8.2", + "symfony/var-dumper": "^5.4.11" }, "type": "library", "extra": { @@ -732,20 +1037,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2021-11-30T15:53:04+00:00" + "time": "2023-11-08T14:08:06+00:00" }, { "name": "league/commonmark", - "version": "2.1.0", + "version": "2.4.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "819276bc54e83c160617d3ac0a436c239e479928" + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/819276bc54e83c160617d3ac0a436c239e479928", - "reference": "819276bc54e83c160617d3ac0a436c239e479928", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", "shasum": "" }, "require": { @@ -753,24 +1058,27 @@ "league/config": "^1.1.1", "php": "^7.4 || ^8.0", "psr/event-dispatcher": "^1.0", - "symfony/polyfill-php80": "^1.15" + "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", - "phpstan/phpstan": "^0.12.88 || ^1.0.0", - "phpunit/phpunit": "^9.5.5", + "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", + "symfony/finder": "^5.3 | ^6.0", "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", - "unleashedtech/php-coding-standard": "^3.1", - "vimeo/psalm": "^4.7.3" + "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" @@ -778,7 +1086,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.2-dev" + "dev-main": "2.5-dev" } }, "autoload": { @@ -835,20 +1143,20 @@ "type": "tidelift" } ], - "time": "2021-12-05T18:25:20+00:00" + "time": "2023-08-30T16:55:00+00:00" }, { "name": "league/config", - "version": "v1.1.1", + "version": "v1.2.0", "source": { "type": "git", "url": "https://github.com/thephpleague/config.git", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e" + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/config/zipball/a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", - "reference": "a9d39eeeb6cc49d10a6e6c36f22c4c1f4a767f3e", + "url": "https://api.github.com/repos/thephpleague/config/zipball/754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", + "reference": "754b3604fb2984c71f4af4a9cbe7b57f346ec1f3", "shasum": "" }, "require": { @@ -857,7 +1165,7 @@ "php": "^7.4 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.90", + "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.5", "scrutinizer/ocular": "^1.8.1", "unleashedtech/php-coding-standard": "^3.1", @@ -917,58 +1225,56 @@ "type": "github" } ], - "time": "2021-08-14T12:15:32+00:00" + "time": "2022-12-11T20:36:23+00:00" }, { "name": "league/flysystem", - "version": "1.1.9", + "version": "3.23.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99" + "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/094defdb4a7001845300334e7c1ee2335925ef99", - "reference": "094defdb4a7001845300334e7c1ee2335925ef99", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc", + "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc", "shasum": "" }, "require": { - "ext-fileinfo": "*", - "league/mime-type-detection": "^1.3", - "php": "^7.2.5 || ^8.0" + "league/flysystem-local": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" }, "conflict": { - "league/flysystem-sftp": "<1.0.6" + "async-aws/core": "<1.19.0", + "async-aws/s3": "<1.14.0", + "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": { - "phpspec/prophecy": "^1.11.1", - "phpunit/phpunit": "^8.5.8" - }, - "suggest": { - "ext-ftp": "Allows you to use FTP server storage", - "ext-openssl": "Allows you to use FTPS server storage", - "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", - "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", - "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", - "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", - "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", - "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", - "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", - "league/flysystem-webdav": "Allows you to use WebDAV storage", - "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", - "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", - "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" + "async-aws/s3": "^1.5 || ^2.0", + "async-aws/simple-s3": "^1.1 || ^2.0", + "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.34", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^9.5.11|^10.0", + "sabre/dav": "^4.3.1" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.1-dev" - } - }, "autoload": { "psr-4": { - "League\\Flysystem\\": "src/" + "League\\Flysystem\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -978,63 +1284,121 @@ "authors": [ { "name": "Frank de Jonge", - "email": "info@frenky.net" + "email": "info@frankdejonge.nl" } ], - "description": "Filesystem abstraction: Many filesystems, one API.", + "description": "File storage abstraction for PHP", "keywords": [ - "Cloud Files", "WebDAV", - "abstraction", "aws", "cloud", - "copy.com", - "dropbox", - "file systems", + "file", "files", "filesystem", "filesystems", "ftp", - "rackspace", - "remote", "s3", "sftp", "storage" ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/1.1.9" + "source": "https://github.com/thephpleague/flysystem/tree/3.23.0" }, "funding": [ { - "url": "https://offset.earth/frankdejonge", - "type": "other" + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" } ], - "time": "2021-12-09T09:40:50+00:00" + "time": "2023-12-04T10:16:17+00:00" + }, + { + "name": "league/flysystem-local", + "version": "3.23.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/flysystem-local.git", + "reference": "5cf046ba5f059460e86a997c504dd781a39a109b" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/5cf046ba5f059460e86a997c504dd781a39a109b", + "reference": "5cf046ba5f059460e86a997c504dd781a39a109b", + "shasum": "" + }, + "require": { + "ext-fileinfo": "*", + "league/flysystem": "^3.0.0", + "league/mime-type-detection": "^1.0.0", + "php": "^8.0.2" + }, + "type": "library", + "autoload": { + "psr-4": { + "League\\Flysystem\\Local\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Frank de Jonge", + "email": "info@frankdejonge.nl" + } + ], + "description": "Local filesystem adapter for Flysystem.", + "keywords": [ + "Flysystem", + "file", + "files", + "filesystem", + "local" + ], + "support": { + "issues": "https://github.com/thephpleague/flysystem-local/issues", + "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.0" + }, + "funding": [ + { + "url": "https://ecologi.com/frankdejonge", + "type": "custom" + }, + { + "url": "https://github.com/frankdejonge", + "type": "github" + } + ], + "time": "2023-12-04T10:14:46+00:00" }, { "name": "league/mime-type-detection", - "version": "1.9.0", + "version": "1.14.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69" + "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/aa70e813a6ad3d1558fc927863d47309b4c23e69", - "reference": "aa70e813a6ad3d1558fc927863d47309b4c23e69", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e", + "reference": "b6a5854368533df0295c5761a0253656a2e52d9e", "shasum": "" }, "require": { "ext-fileinfo": "*", - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.2", "phpstan/phpstan": "^0.12.68", - "phpunit/phpunit": "^8.5.8 || ^9.3" + "phpunit/phpunit": "^8.5.8 || ^9.3 || ^10.0" }, "type": "library", "autoload": { @@ -1055,7 +1419,7 @@ "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.9.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.14.0" }, "funding": [ { @@ -1067,44 +1431,47 @@ "type": "tidelift" } ], - "time": "2021-11-21T11:48:40+00:00" + "time": "2023-10-17T14:13:20+00:00" }, { "name": "monolog/monolog", - "version": "2.3.5", + "version": "3.5.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9" + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd4380d6fc37626e2f799f29d91195040137eba9", - "reference": "fd4380d6fc37626e2f799f29d91195040137eba9", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", "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", - "graylog2/gelf-php": "^1.4.2", + "elasticsearch/elasticsearch": "^7 || ^8", + "ext-json": "*", + "graylog2/gelf-php": "^1.4.2 || ^2.0", + "guzzlehttp/guzzle": "^7.4.5", + "guzzlehttp/psr7": "^2.2", "mongodb/mongodb": "^1.8", "php-amqplib/php-amqplib": "~2.4 || ^3", - "php-console/php-console": "^3.1.3", - "phpspec/prophecy": "^1.6.1", - "phpstan/phpstan": "^0.12.91", - "phpunit/phpunit": "^8.5", - "predis/predis": "^1.1", - "rollbar/rollbar": "^1.3", - "ruflin/elastica": ">=0.90@dev", - "swiftmailer/swiftmailer": "^5.3|^6.0" + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-deprecation-rules": "^1.0", + "phpstan/phpstan-strict-rules": "^1.4", + "phpunit/phpunit": "^10.1", + "predis/predis": "^1.1 || ^2", + "ruflin/elastica": "^7", + "symfony/mailer": "^5.4 || ^6", + "symfony/mime": "^5.4 || ^6" }, "suggest": { "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", @@ -1119,14 +1486,13 @@ "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", - "php-console/php-console": "Allow sending log messages to Google Chrome", "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" + "dev-main": "3.x-dev" } }, "autoload": { @@ -1154,7 +1520,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/2.3.5" + "source": "https://github.com/Seldaek/monolog/tree/3.5.0" }, "funding": [ { @@ -1166,38 +1532,45 @@ "type": "tidelift" } ], - "time": "2021-10-01T21:08:31+00:00" + "time": "2023-10-27T15:32:31+00:00" }, { "name": "nesbot/carbon", - "version": "2.55.2", + "version": "2.72.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2" + "reference": "a6885fcbad2ec4360b0e200ee0da7d9b7c90786b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/8c2a18ce3e67c34efc1b29f64fe61304368259a2", - "reference": "8c2a18ce3e67c34efc1b29f64fe61304368259a2", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a6885fcbad2ec4360b0e200ee0da7d9b7c90786b", + "reference": "a6885fcbad2ec4360b0e200ee0da7d9b7c90786b", "shasum": "" }, "require": { + "carbonphp/carbon-doctrine-types": "*", "ext-json": "*", "php": "^7.1.8 || ^8.0", + "psr/clock": "^1.0", "symfony/polyfill-mbstring": "^1.0", "symfony/polyfill-php80": "^1.16", "symfony/translation": "^3.4 || ^4.0 || ^5.0 || ^6.0" }, + "provide": { + "psr/clock-implementation": "1.0" + }, "require-dev": { - "doctrine/dbal": "^2.0 || ^3.0", - "doctrine/orm": "^2.7", + "doctrine/dbal": "^2.0 || ^3.1.4 || ^4.0", + "doctrine/orm": "^2.7 || ^3.0", "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.54", - "phpunit/phpunit": "^7.5.20 || ^8.5.14", + "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": [ @@ -1254,37 +1627,41 @@ }, "funding": [ { - "url": "https://opencollective.com/Carbon", - "type": "open_collective" + "url": "https://github.com/sponsors/kylekatarnls", + "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/nesbot/carbon", + "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": "2021-12-03T14:59:52+00:00" + "time": "2023-11-28T10:13:25+00:00" }, { "name": "nette/schema", - "version": "v1.2.2", + "version": "v1.2.5", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", + "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", "shasum": "" }, "require": { "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.2" + "php": "7.1 - 8.3" }, "require-dev": { "nette/tester": "^2.3 || ^2.4", - "phpstan/phpstan-nette": "^0.12", + "phpstan/phpstan-nette": "^1.0", "tracy/tracy": "^2.7" }, "type": "library", @@ -1322,34 +1699,36 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.2" + "source": "https://github.com/nette/schema/tree/v1.2.5" }, - "time": "2021-10-15T11:40:02+00:00" + "time": "2023-10-05T20:37:59+00:00" }, { "name": "nette/utils", - "version": "v3.2.6", + "version": "v4.0.3", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "2f261e55bd6a12057442045bf2c249806abc1d02" + "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/2f261e55bd6a12057442045bf2c249806abc1d02", - "reference": "2f261e55bd6a12057442045bf2c249806abc1d02", + "url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015", + "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015", "shasum": "" }, "require": { - "php": ">=7.2 <8.2" + "php": ">=8.0 <8.4" }, "conflict": { - "nette/di": "<3.0.6" + "nette/finder": "<3", + "nette/schema": "<1.2.2" }, "require-dev": { - "nette/tester": "~2.0", + "jetbrains/phpstorm-attributes": "dev-master", + "nette/tester": "^2.5", "phpstan/phpstan": "^1.0", - "tracy/tracy": "^2.3" + "tracy/tracy": "^2.9" }, "suggest": { "ext-gd": "to use Image", @@ -1357,13 +1736,12 @@ "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" + "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2-dev" + "dev-master": "4.0-dev" } }, "autoload": { @@ -1407,44 +1785,56 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v3.2.6" + "source": "https://github.com/nette/utils/tree/v4.0.3" }, - "time": "2021-11-24T15:47:23+00:00" + "time": "2023-10-29T21:02:13+00:00" }, { - "name": "opis/closure", - "version": "3.6.2", + "name": "nunomaduro/termwind", + "version": "v1.15.1", "source": { "type": "git", - "url": "https://github.com/opis/closure.git", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6" + "url": "https://github.com/nunomaduro/termwind.git", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/opis/closure/zipball/06e2ebd25f2869e54a306dda991f7db58066f7f6", - "reference": "06e2ebd25f2869e54a306dda991f7db58066f7f6", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", "shasum": "" }, "require": { - "php": "^5.4 || ^7.0 || ^8.0" + "ext-mbstring": "*", + "php": "^8.0", + "symfony/console": "^5.3.0|^6.0.0" }, "require-dev": { - "jeremeamia/superclosure": "^2.0", - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" + "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": { - "branch-alias": { - "dev-master": "3.6.x-dev" + "laravel": { + "providers": [ + "Termwind\\Laravel\\TermwindServiceProvider" + ] } }, "autoload": { - "psr-4": { - "Opis\\Closure\\": "src/" - }, "files": [ - "functions.php" - ] + "src/Functions.php" + ], + "psr-4": { + "Termwind\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1452,55 +1842,68 @@ ], "authors": [ { - "name": "Marius Sarca", - "email": "marius.sarca@gmail.com" - }, - { - "name": "Sorin Sarca", - "email": "sarca_sorin@hotmail.com" + "name": "Nuno Maduro", + "email": "enunomaduro@gmail.com" } ], - "description": "A library that can be used to serialize closures (anonymous functions) and arbitrary objects.", - "homepage": "https://opis.io/closure", + "description": "Its like Tailwind CSS, but for the console.", "keywords": [ - "anonymous functions", - "closure", - "function", - "serializable", - "serialization", - "serialize" + "cli", + "console", + "css", + "package", + "php", + "style" ], "support": { - "issues": "https://github.com/opis/closure/issues", - "source": "https://github.com/opis/closure/tree/3.6.2" + "issues": "https://github.com/nunomaduro/termwind/issues", + "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" }, - "time": "2021-04-09T13:42:10+00:00" + "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": "2023-02-08T01:06:31+00:00" }, { "name": "phpoption/phpoption", - "version": "1.8.1", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15" + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", - "reference": "eab7a0df01fe2344d172bff4cd6dbd3f8b84ad15", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", + "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", "shasum": "" }, "require": { - "php": "^7.0 || ^8.0" + "php": "^7.2.5 || ^8.0" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", - "phpunit/phpunit": "^6.5.14 || ^7.5.20 || ^8.5.19 || ^9.5.8" + "bamarni/composer-bin-plugin": "^1.8.2", + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, "branch-alias": { - "dev-master": "1.8-dev" + "dev-master": "1.9-dev" } }, "autoload": { @@ -1524,47 +1927,100 @@ "homepage": "https://github.com/GrahamCampbell" } ], - "description": "Option Type for PHP", + "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.2" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", + "type": "tidelift" + } + ], + "time": "2023-11-12T21:59:55+00:00" + }, + { + "name": "psr/clock", + "version": "1.0.0", + "source": { + "type": "git", + "url": "https://github.com/php-fig/clock.git", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/clock/zipball/e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "reference": "e41a24703d4560fd0acb709162f73b8adfc3aa0d", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Psr\\Clock\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "https://www.php-fig.org/" + } + ], + "description": "Common interface for reading the clock.", + "homepage": "https://github.com/php-fig/clock", "keywords": [ - "language", - "option", - "php", - "type" + "clock", + "now", + "psr", + "psr-20", + "time" ], "support": { - "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.8.1" + "issues": "https://github.com/php-fig/clock/issues", + "source": "https://github.com/php-fig/clock/tree/1.0.0" }, - "funding": [ - { - "url": "https://github.com/GrahamCampbell", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/phpoption/phpoption", - "type": "tidelift" - } - ], - "time": "2021-12-04T23:24:31+00:00" + "time": "2022-11-25T14:36:26+00:00" }, { "name": "psr/container", - "version": "1.1.2", + "version": "2.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/container.git", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea" + "reference": "c71ecc56dfe541dbd90c5360474fbc405f8d5963" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea", - "reference": "513e0666f7216c7459170d56df27dfcefe1689ea", + "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/" @@ -1591,9 +2047,9 @@ ], "support": { "issues": "https://github.com/php-fig/container/issues", - "source": "https://github.com/php-fig/container/tree/1.1.2" + "source": "https://github.com/php-fig/container/tree/2.0.2" }, - "time": "2021-11-05T16:50:12+00:00" + "time": "2021-11-05T16:47:00+00:00" }, { "name": "psr/event-dispatcher", @@ -1647,16 +2103,16 @@ }, { "name": "psr/log", - "version": "2.0.0", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376" + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/ef29f6d262798707a9edd554e2b82517ef3a9376", - "reference": "ef29f6d262798707a9edd554e2b82517ef3a9376", + "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", + "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", "shasum": "" }, "require": { @@ -1665,7 +2121,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.0.x-dev" + "dev-master": "3.x-dev" } }, "autoload": { @@ -1691,31 +2147,31 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/2.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.0" }, - "time": "2021-07-14T16:41:46+00:00" + "time": "2021-07-14T16:46:02+00:00" }, { "name": "psr/simple-cache", - "version": "1.0.1", + "version": "3.0.0", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", - "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/764e0b3939f5ca87cb904f570ef9be2d78a07865", + "reference": "764e0b3939f5ca87cb904f570ef9be2d78a07865", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=8.0.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "3.0.x-dev" } }, "autoload": { @@ -1730,7 +2186,7 @@ "authors": [ { "name": "PHP-FIG", - "homepage": "http://www.php-fig.org/" + "homepage": "https://www.php-fig.org/" } ], "description": "Common interfaces for simple caching", @@ -1742,48 +2198,58 @@ "simple-cache" ], "support": { - "source": "https://github.com/php-fig/simple-cache/tree/master" + "source": "https://github.com/php-fig/simple-cache/tree/3.0.0" }, - "time": "2017-10-23T01:57:42+00:00" + "time": "2021-10-29T13:26:27+00:00" }, { "name": "ramsey/collection", - "version": "1.2.2", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a" + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/cccc74ee5e328031b15640b51056ee8d3bb66c0a", - "reference": "cccc74ee5e328031b15640b51056ee8d3bb66c0a", + "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", "shasum": "" }, "require": { - "php": "^7.3 || ^8", - "symfony/polyfill-php81": "^1.23" + "php": "^8.1" }, "require-dev": { - "captainhook/captainhook": "^5.3", - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "ergebnis/composer-normalize": "^2.6", - "fakerphp/faker": "^1.5", - "hamcrest/hamcrest-php": "^2", - "jangregor/phpstan-prophecy": "^0.8", - "mockery/mockery": "^1.3", + "captainhook/plugin-composer": "^5.3", + "ergebnis/composer-normalize": "^2.28.3", + "fakerphp/faker": "^1.21", + "hamcrest/hamcrest-php": "^2.0", + "jangregor/phpstan-prophecy": "^1.0", + "mockery/mockery": "^1.5", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3", + "phpcsstandards/phpcsutils": "^1.0.0-rc1", "phpspec/prophecy-phpunit": "^2.0", - "phpstan/extension-installer": "^1", - "phpstan/phpstan": "^0.12.32", - "phpstan/phpstan-mockery": "^0.12.5", - "phpstan/phpstan-phpunit": "^0.12.11", - "phpunit/phpunit": "^8.5 || ^9", - "psy/psysh": "^0.10.4", - "slevomat/coding-standard": "^6.3", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^4.4" + "phpstan/extension-installer": "^1.2", + "phpstan/phpstan": "^1.9", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.3", + "phpunit/phpunit": "^9.5", + "psalm/plugin-mockery": "^1.1", + "psalm/plugin-phpunit": "^0.18.4", + "ramsey/coding-standard": "^2.0.3", + "ramsey/conventional-commits": "^1.3", + "vimeo/psalm": "^5.4" }, "type": "library", + "extra": { + "captainhook": { + "force-install": true + }, + "ramsey/conventional-commits": { + "configFile": "conventional-commits.json" + } + }, "autoload": { "psr-4": { "Ramsey\\Collection\\": "src/" @@ -1811,7 +2277,7 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/1.2.2" + "source": "https://github.com/ramsey/collection/tree/2.0.0" }, "funding": [ { @@ -1823,29 +2289,27 @@ "type": "tidelift" } ], - "time": "2021-10-10T03:01:02+00:00" + "time": "2022-12-31T21:50:55+00:00" }, { "name": "ramsey/uuid", - "version": "4.2.3", + "version": "4.7.5", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df" + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", - "reference": "fc9bb7fb5388691fd7373cd44dcb4d63bbcf24df", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", "shasum": "" }, "require": { - "brick/math": "^0.8 || ^0.9", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", "ext-json": "*", - "php": "^7.2 || ^8.0", - "ramsey/collection": "^1.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php80": "^1.14" + "php": "^8.0", + "ramsey/collection": "^1.2 || ^2.0" }, "replace": { "rhumsaa/uuid": "self.version" @@ -1857,24 +2321,23 @@ "doctrine/annotations": "^1.8", "ergebnis/composer-normalize": "^2.15", "mockery/mockery": "^1.3", - "moontoast/math": "^1.1", "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.0", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-mockery": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-phpunit": "^1.1", "phpunit/phpunit": "^8.5 || ^9", - "slevomat/coding-standard": "^7.0", + "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-ctype": "Enables faster processing of character classification using ctype functions.", "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", @@ -1882,20 +2345,17 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "4.x-dev" - }, "captainhook": { "force-install": true } }, "autoload": { - "psr-4": { - "Ramsey\\Uuid\\": "src/" - }, "files": [ "src/functions.php" - ] + ], + "psr-4": { + "Ramsey\\Uuid\\": "src/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -1909,7 +2369,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.2.3" + "source": "https://github.com/ramsey/uuid/tree/4.7.5" }, "funding": [ { @@ -1921,132 +2381,51 @@ "type": "tidelift" } ], - "time": "2021-09-25T23:10:38+00:00" - }, - { - "name": "swiftmailer/swiftmailer", - "version": "v6.3.0", - "source": { - "type": "git", - "url": "https://github.com/swiftmailer/swiftmailer.git", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/8a5d5072dca8f48460fce2f4131fcc495eec654c", - "reference": "8a5d5072dca8f48460fce2f4131fcc495eec654c", - "shasum": "" - }, - "require": { - "egulias/email-validator": "^2.0|^3.1", - "php": ">=7.0.0", - "symfony/polyfill-iconv": "^1.0", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0" - }, - "require-dev": { - "mockery/mockery": "^1.0", - "symfony/phpunit-bridge": "^4.4|^5.4" - }, - "suggest": { - "ext-intl": "Needed to support internationalized email addresses" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "6.2-dev" - } - }, - "autoload": { - "files": [ - "lib/swift_required.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Chris Corbyn" - }, - { - "name": "Fabien Potencier", - "email": "fabien@symfony.com" - } - ], - "description": "Swiftmailer, free feature-rich PHP mailer", - "homepage": "https://swiftmailer.symfony.com", - "keywords": [ - "email", - "mail", - "mailer" - ], - "support": { - "issues": "https://github.com/swiftmailer/swiftmailer/issues", - "source": "https://github.com/swiftmailer/swiftmailer/tree/v6.3.0" - }, - "funding": [ - { - "url": "https://github.com/fabpot", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/swiftmailer/swiftmailer", - "type": "tidelift" - } - ], - "abandoned": "symfony/mailer", - "time": "2021-10-18T15:26:12+00:00" + "time": "2023-11-08T05:53:05+00:00" }, { "name": "symfony/console", - "version": "v5.4.2", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e" + "reference": "a550a7c99daeedef3f9d23fb82e3531525ff11fd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a2c6b7ced2eb7799a35375fb9022519282b5405e", - "reference": "a2c6b7ced2eb7799a35375fb9022519282b5405e", + "url": "https://api.github.com/repos/symfony/console/zipball/a550a7c99daeedef3f9d23fb82e3531525ff11fd", + "reference": "a550a7c99daeedef3f9d23fb82e3531525ff11fd", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16", - "symfony/service-contracts": "^1.1|^2|^3", - "symfony/string": "^5.1|^6.0" + "symfony/service-contracts": "^2.5|^3", + "symfony/string": "^5.4|^6.0|^7.0" }, "conflict": { - "psr/log": ">=3", - "symfony/dependency-injection": "<4.4", - "symfony/dotenv": "<5.1", - "symfony/event-dispatcher": "<4.4", - "symfony/lock": "<4.4", - "symfony/process": "<4.4" + "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" + "psr/log-implementation": "1.0|2.0|3.0" }, "require-dev": { - "psr/log": "^1|^2", - "symfony/config": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^4.4|^5.0|^6.0", - "symfony/lock": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/var-dumper": "^4.4|^5.0|^6.0" - }, - "suggest": { - "psr/log": "For using the console logger", - "symfony/event-dispatcher": "", - "symfony/lock": "", - "symfony/process": "" + "psr/log": "^1|^2|^3", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/lock": "^5.4|^6.0|^7.0", + "symfony/messenger": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2075,12 +2454,12 @@ "homepage": "https://symfony.com", "keywords": [ "cli", - "command line", + "command-line", "console", "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v5.4.2" + "source": "https://github.com/symfony/console/tree/v6.4.1" }, "funding": [ { @@ -2096,24 +2475,24 @@ "type": "tidelift" } ], - "time": "2021-12-20T16:11:12+00:00" + "time": "2023-11-30T10:54:28+00:00" }, { "name": "symfony/css-selector", - "version": "v6.0.1", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "ede53cafe1784b9131a48774b54f281d5d003f65" + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/ede53cafe1784b9131a48774b54f281d5d003f65", - "reference": "ede53cafe1784b9131a48774b54f281d5d003f65", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", + "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -2145,7 +2524,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.0.1" + "source": "https://github.com/symfony/css-selector/tree/v6.4.0" }, "funding": [ { @@ -2161,29 +2540,29 @@ "type": "tidelift" } ], - "time": "2021-12-08T15:13:44+00:00" + "time": "2023-10-31T08:40:20+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.0.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced" + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", - "reference": "c726b64c1ccfe2896cb7df2e1331c357ad1c8ced", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", + "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", "shasum": "" }, "require": { - "php": ">=8.0.2" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -2212,7 +2591,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.0.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0" }, "funding": [ { @@ -2228,31 +2607,35 @@ "type": "tidelift" } ], - "time": "2021-11-01T23:48:49+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/error-handler", - "version": "v5.4.1", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9" + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/1e3cb3565af49cd5f93e5787500134500a29f0d9", - "reference": "1e3cb3565af49cd5f93e5787500134500a29f0d9", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", + "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", "shasum": "" }, "require": { - "php": ">=7.2.5", + "php": ">=8.1", "psr/log": "^1|^2|^3", - "symfony/var-dumper": "^4.4|^5.0|^6.0" + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "conflict": { + "symfony/deprecation-contracts": "<2.5", + "symfony/http-kernel": "<6.4" }, "require-dev": { - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/http-kernel": "^4.4|^5.0|^6.0", - "symfony/serializer": "^4.4|^5.0|^6.0" + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/serializer": "^5.4|^6.0|^7.0" }, "bin": [ "Resources/bin/patch-type-declarations" @@ -2283,7 +2666,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/v5.4.1" + "source": "https://github.com/symfony/error-handler/tree/v6.4.0" }, "funding": [ { @@ -2299,28 +2682,29 @@ "type": "tidelift" } ], - "time": "2021-12-01T15:04:08+00:00" + "time": "2023-10-18T09:43:34+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.0.1", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "4f06d19a5f78087061f9de6df3269c139c3d289d" + "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/4f06d19a5f78087061f9de6df3269c139c3d289d", - "reference": "4f06d19a5f78087061f9de6df3269c139c3d289d", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d76d2632cfc2206eecb5ad2b26cd5934082941b6", + "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6", "shasum": "" }, "require": { - "php": ">=8.0.2", - "symfony/event-dispatcher-contracts": "^2|^3" + "php": ">=8.1", + "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4" + "symfony/dependency-injection": "<5.4", + "symfony/service-contracts": "<2.5" }, "provide": { "psr/event-dispatcher-implementation": "1.0", @@ -2328,17 +2712,13 @@ }, "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": "" + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/stopwatch": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2366,7 +2746,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.0.1" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.4.0" }, "funding": [ { @@ -2382,33 +2762,30 @@ "type": "tidelift" } ], - "time": "2021-12-08T15:13:44+00:00" + "time": "2023-07-27T06:52:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.0.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385" + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/aa5422287b75594b90ee9cd807caf8f0df491385", - "reference": "aa5422287b75594b90ee9cd807caf8f0df491385", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", + "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", "psr/event-dispatcher": "^1" }, - "suggest": { - "symfony/event-dispatcher-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -2445,7 +2822,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" }, "funding": [ { @@ -2461,26 +2838,27 @@ "type": "tidelift" } ], - "time": "2021-07-15T12:33:35+00:00" + "time": "2023-05-23T14:45:45+00:00" }, { "name": "symfony/finder", - "version": "v5.4.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590" + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/d2f29dac98e96a98be467627bd49c2efb1bc2590", - "reference": "d2f29dac98e96a98be467627bd49c2efb1bc2590", + "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", + "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" + }, + "require-dev": { + "symfony/filesystem": "^6.0|^7.0" }, "type": "library", "autoload": { @@ -2508,7 +2886,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v5.4.0" + "source": "https://github.com/symfony/finder/tree/v6.4.0" }, "funding": [ { @@ -2524,36 +2902,40 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-10-31T17:30:12+00:00" }, { "name": "symfony/http-foundation", - "version": "v5.4.1", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c" + "reference": "44a6d39a9cc11e154547d882d5aac1e014440771" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/5dad3780023a707f4c24beac7d57aead85c1ce3c", - "reference": "5dad3780023a707f4c24beac7d57aead85c1ce3c", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/44a6d39a9cc11e154547d882d5aac1e014440771", + "reference": "44a6d39a9cc11e154547d882d5aac1e014440771", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.1", - "symfony/polyfill-php80": "^1.16" + "symfony/polyfill-php83": "^1.27" }, - "require-dev": { - "predis/predis": "~1.0", - "symfony/cache": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/mime": "^4.4|^5.0|^6.0" + "conflict": { + "symfony/cache": "<6.3" }, - "suggest": { - "symfony/mime": "To use the file extension guesser" + "require-dev": { + "doctrine/dbal": "^2.13.1|^3|^4", + "predis/predis": "^1.1|^2.0", + "symfony/cache": "^6.3|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", + "symfony/mime": "^5.4|^6.0|^7.0", + "symfony/rate-limiter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -2581,7 +2963,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v5.4.1" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.0" }, "funding": [ { @@ -2597,76 +2979,77 @@ "type": "tidelift" } ], - "time": "2021-12-09T12:46:57+00:00" + "time": "2023-11-20T16:41:16+00:00" }, { "name": "symfony/http-kernel", - "version": "v5.4.1", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "2bdace75c9d6a6eec7e318801b7dc87a72375052" + "reference": "2953274c16a229b3933ef73a6898e18388e12e1b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2bdace75c9d6a6eec7e318801b7dc87a72375052", - "reference": "2bdace75c9d6a6eec7e318801b7dc87a72375052", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2953274c16a229b3933ef73a6898e18388e12e1b", + "reference": "2953274c16a229b3933ef73a6898e18388e12e1b", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/log": "^1|^2", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/error-handler": "^4.4|^5.0|^6.0", - "symfony/event-dispatcher": "^5.0|^6.0", - "symfony/http-foundation": "^5.3.7|^6.0", - "symfony/polyfill-ctype": "^1.8", - "symfony/polyfill-php73": "^1.9", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/error-handler": "^6.4|^7.0", + "symfony/event-dispatcher": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^6.4|^7.0", + "symfony/polyfill-ctype": "^1.8" }, "conflict": { "symfony/browser-kit": "<5.4", - "symfony/cache": "<5.0", - "symfony/config": "<5.0", - "symfony/console": "<4.4", - "symfony/dependency-injection": "<5.3", - "symfony/doctrine-bridge": "<5.0", - "symfony/form": "<5.0", - "symfony/http-client": "<5.0", - "symfony/mailer": "<5.0", - "symfony/messenger": "<5.0", - "symfony/translation": "<5.0", - "symfony/twig-bridge": "<5.0", - "symfony/validator": "<5.0", + "symfony/cache": "<5.4", + "symfony/config": "<6.1", + "symfony/console": "<5.4", + "symfony/dependency-injection": "<6.4", + "symfony/doctrine-bridge": "<5.4", + "symfony/form": "<5.4", + "symfony/http-client": "<5.4", + "symfony/http-client-contracts": "<2.5", + "symfony/mailer": "<5.4", + "symfony/messenger": "<5.4", + "symfony/translation": "<5.4", + "symfony/translation-contracts": "<2.5", + "symfony/twig-bridge": "<5.4", + "symfony/validator": "<6.4", + "symfony/var-dumper": "<6.3", "twig/twig": "<2.13" }, "provide": { - "psr/log-implementation": "1.0|2.0" + "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": "^5.0|^6.0", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/css-selector": "^4.4|^5.0|^6.0", - "symfony/dependency-injection": "^5.3|^6.0", - "symfony/dom-crawler": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/finder": "^4.4|^5.0|^6.0", - "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/routing": "^4.4|^5.0|^6.0", - "symfony/stopwatch": "^4.4|^5.0|^6.0", - "symfony/translation": "^4.4|^5.0|^6.0", - "symfony/translation-contracts": "^1.1|^2|^3", + "symfony/browser-kit": "^5.4|^6.0|^7.0", + "symfony/clock": "^6.2|^7.0", + "symfony/config": "^6.1|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/css-selector": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/dom-crawler": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/property-access": "^5.4.5|^6.0.5|^7.0", + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3|^7.0", + "symfony/stopwatch": "^5.4|^6.0|^7.0", + "symfony/translation": "^5.4|^6.0|^7.0", + "symfony/translation-contracts": "^2.5|^3", + "symfony/uid": "^5.4|^6.0|^7.0", + "symfony/validator": "^6.4|^7.0", + "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, - "suggest": { - "symfony/browser-kit": "", - "symfony/config": "", - "symfony/console": "", - "symfony/dependency-injection": "" - }, "type": "library", "autoload": { "psr-4": { @@ -2693,7 +3076,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/v5.4.1" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.1" }, "funding": [ { @@ -2709,47 +3092,48 @@ "type": "tidelift" } ], - "time": "2021-12-09T13:36:09+00:00" + "time": "2023-12-01T17:02:02+00:00" }, { - "name": "symfony/mime", - "version": "v5.4.0", + "name": "symfony/mailer", + "version": "v6.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/mime.git", - "reference": "d4365000217b67c01acff407573906ff91bcfb34" + "url": "https://github.com/symfony/mailer.git", + "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/d4365000217b67c01acff407573906ff91bcfb34", - "reference": "d4365000217b67c01acff407573906ff91bcfb34", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", + "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-intl-idn": "^1.10", - "symfony/polyfill-mbstring": "^1.0", - "symfony/polyfill-php80": "^1.16" + "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|^7.0", + "symfony/mime": "^6.2|^7.0", + "symfony/service-contracts": "^2.5|^3" }, "conflict": { - "egulias/email-validator": "~3.0.0", - "phpdocumentor/reflection-docblock": "<3.2.2", - "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<4.4" + "symfony/http-client-contracts": "<2.5", + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2", + "symfony/twig-bridge": "<6.2.1" }, "require-dev": { - "egulias/email-validator": "^2.1.10|^3.1", - "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/property-access": "^4.4|^5.1|^6.0", - "symfony/property-info": "^4.4|^5.1|^6.0", - "symfony/serializer": "^5.2|^6.0" + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/messenger": "^6.2|^7.0", + "symfony/twig-bridge": "^6.2|^7.0" }, "type": "library", "autoload": { "psr-4": { - "Symfony\\Component\\Mime\\": "" + "Symfony\\Component\\Mailer\\": "" }, "exclude-from-classmap": [ "/Tests/" @@ -2769,14 +3153,10 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Allows manipulating MIME messages", + "description": "Helps sending emails", "homepage": "https://symfony.com", - "keywords": [ - "mime", - "mime-type" - ], "support": { - "source": "https://github.com/symfony/mime/tree/v5.4.0" + "source": "https://github.com/symfony/mailer/tree/v6.4.0" }, "funding": [ { @@ -2792,47 +3172,51 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-11-12T18:02:22+00:00" }, { - "name": "symfony/polyfill-ctype", - "version": "v1.24.0", + "name": "symfony/mime", + "version": "v6.4.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "30885182c981ab175d4d034db0f6f469898070ab" + "url": "https://github.com/symfony/mime.git", + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/30885182c981ab175d4d034db0f6f469898070ab", - "reference": "30885182c981ab175d4d034db0f6f469898070ab", + "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-intl-idn": "^1.10", + "symfony/polyfill-mbstring": "^1.0" }, - "provide": { - "ext-ctype": "*" + "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.3.2" }, - "suggest": { - "ext-ctype": "For best performance" + "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|^7.0", + "symfony/property-access": "^5.4|^6.0|^7.0", + "symfony/property-info": "^5.4|^6.0|^7.0", + "symfony/serializer": "^6.3.2|^7.0" }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, "autoload": { "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "Symfony\\Component\\Mime\\": "" }, - "files": [ - "bootstrap.php" + "exclude-from-classmap": [ + "/Tests/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -2841,24 +3225,22 @@ ], "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Fabien Potencier", + "email": "fabien@symfony.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for ctype functions", + "description": "Allows manipulating MIME messages", "homepage": "https://symfony.com", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "mime", + "mime-type" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.24.0" + "source": "https://github.com/symfony/mime/tree/v6.4.0" }, "funding": [ { @@ -2874,32 +3256,35 @@ "type": "tidelift" } ], - "time": "2021-10-20T20:35:02+00:00" + "time": "2023-10-17T11:49:05+00:00" }, { - "name": "symfony/polyfill-iconv", - "version": "v1.23.0", + "name": "symfony/polyfill-ctype", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-iconv.git", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933" + "url": "https://github.com/symfony/polyfill-ctype.git", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-iconv/zipball/63b5bb7db83e5673936d6e3b8b3e022ff6474933", - "reference": "63b5bb7db83e5673936d6e3b8b3e022ff6474933", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-ctype": "*" + }, "suggest": { - "ext-iconv": "For best performance" + "ext-ctype": "For best performance" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2907,12 +3292,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Iconv\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Ctype\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -2920,25 +3305,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Gert de Pagter", + "email": "BackEndTea@gmail.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill for the Iconv extension", + "description": "Symfony polyfill for ctype functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", - "iconv", + "ctype", "polyfill", - "portable", - "shim" + "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-iconv/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" }, "funding": [ { @@ -2954,20 +3338,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.24.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783" + "reference": "875e90aeea2777b6f135677f618529449334a612" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/81b86b50cf841a64252b439e738e97f4a34e2783", - "reference": "81b86b50cf841a64252b439e738e97f4a34e2783", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", + "reference": "875e90aeea2777b6f135677f618529449334a612", "shasum": "" }, "require": { @@ -2979,7 +3363,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -2987,12 +3371,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Grapheme\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Grapheme\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3019,7 +3403,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" }, "funding": [ { @@ -3035,20 +3419,20 @@ "type": "tidelift" } ], - "time": "2021-11-23T21:10:46+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.23.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65" + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/65bd267525e82759e7d8c4e8ceea44f398838e65", - "reference": "65bd267525e82759e7d8c4e8ceea44f398838e65", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", + "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", "shasum": "" }, "require": { @@ -3062,7 +3446,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3070,12 +3454,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Idn\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Idn\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3106,7 +3490,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" }, "funding": [ { @@ -3122,20 +3506,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:27:20+00:00" + "time": "2023-01-26T09:30:37+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.24.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8" + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8590a5f561694770bdcd3f9b5c69dde6945028e8", - "reference": "8590a5f561694770bdcd3f9b5c69dde6945028e8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", "shasum": "" }, "require": { @@ -3147,7 +3531,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3155,12 +3539,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Intl\\Normalizer\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Intl\\Normalizer\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3190,7 +3574,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" }, "funding": [ { @@ -3206,20 +3590,20 @@ "type": "tidelift" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.24.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825" + "reference": "42292d99c55abe617799667f454222c54c60e229" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/0abb51d2f102e00a4eefcf46ba7fec406d245825", - "reference": "0abb51d2f102e00a4eefcf46ba7fec406d245825", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", + "reference": "42292d99c55abe617799667f454222c54c60e229", "shasum": "" }, "require": { @@ -3234,7 +3618,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3242,12 +3626,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Mbstring\\": "" - }, "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Mbstring\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3273,7 +3657,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.0" }, "funding": [ { @@ -3289,20 +3673,20 @@ "type": "tidelift" } ], - "time": "2021-11-30T18:21:41+00:00" + "time": "2023-07-28T09:04:16+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.23.0", + "version": "v1.28.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976" + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/9a142215a36a3888e30d0a9eeea9766764e96976", - "reference": "9a142215a36a3888e30d0a9eeea9766764e96976", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", + "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", "shasum": "" }, "require": { @@ -3311,20 +3695,20 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", "url": "https://github.com/symfony/polyfill" } }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php72\\": "" - }, + "autoload": { "files": [ "bootstrap.php" - ] + ], + "psr-4": { + "Symfony\\Polyfill\\Php72\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3349,7 +3733,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.28.0" }, "funding": [ { @@ -3365,20 +3749,20 @@ "type": "tidelift" } ], - "time": "2021-05-27T09:17:38+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/polyfill-php73", - "version": "v1.24.0", + "name": "symfony/polyfill-php80", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php73.git", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5" + "url": "https://github.com/symfony/polyfill-php80.git", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/cc5db0e22b3cb4111010e48785a97f670b350ca5", - "reference": "cc5db0e22b3cb4111010e48785a97f670b350ca5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", "shasum": "" }, "require": { @@ -3387,7 +3771,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3395,12 +3779,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php73\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php80\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3410,6 +3794,10 @@ "MIT" ], "authors": [ + { + "name": "Ion Bazan", + "email": "ion.bazan@gmail.com" + }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3419,7 +3807,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3428,7 +3816,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php73/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" }, "funding": [ { @@ -3444,29 +3832,30 @@ "type": "tidelift" } ], - "time": "2021-06-05T21:20:04+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { - "name": "symfony/polyfill-php80", - "version": "v1.24.0", + "name": "symfony/polyfill-php83", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9" + "url": "https://github.com/symfony/polyfill-php83.git", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/57b712b08eddb97c762a8caa32c84e037892d2e9", - "reference": "57b712b08eddb97c762a8caa32c84e037892d2e9", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.1", + "symfony/polyfill-php80": "^1.14" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3474,12 +3863,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php80\\": "" - }, "files": [ "bootstrap.php" ], + "psr-4": { + "Symfony\\Polyfill\\Php83\\": "" + }, "classmap": [ "Resources/stubs" ] @@ -3489,10 +3878,6 @@ "MIT" ], "authors": [ - { - "name": "Ion Bazan", - "email": "ion.bazan@gmail.com" - }, { "name": "Nicolas Grekas", "email": "p@tchwork.com" @@ -3502,7 +3887,7 @@ "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions", + "description": "Symfony polyfill backporting some PHP 8.3+ features to lower PHP versions", "homepage": "https://symfony.com", "keywords": [ "compatibility", @@ -3511,7 +3896,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.24.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" }, "funding": [ { @@ -3527,29 +3912,35 @@ "type": "tidelift" } ], - "time": "2021-09-13T13:58:33+00:00" + "time": "2023-08-16T06:22:46+00:00" }, { - "name": "symfony/polyfill-php81", - "version": "v1.23.0", + "name": "symfony/polyfill-uuid", + "version": "v1.28.0", "source": { "type": "git", - "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "e66119f3de95efc359483f810c4c3e6436279436" + "url": "https://github.com/symfony/polyfill-uuid.git", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/e66119f3de95efc359483f810c4c3e6436279436", - "reference": "e66119f3de95efc359483f810c4c3e6436279436", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", "shasum": "" }, "require": { "php": ">=7.1" }, + "provide": { + "ext-uuid": "*" + }, + "suggest": { + "ext-uuid": "For best performance" + }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.23-dev" + "dev-main": "1.28-dev" }, "thanks": { "name": "symfony/polyfill", @@ -3557,15 +3948,12 @@ } }, "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Php81\\": "" - }, "files": [ "bootstrap.php" ], - "classmap": [ - "Resources/stubs" - ] + "psr-4": { + "Symfony\\Polyfill\\Uuid\\": "" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3573,24 +3961,24 @@ ], "authors": [ { - "name": "Nicolas Grekas", - "email": "p@tchwork.com" + "name": "Grégoire Pineau", + "email": "lyrixx@lyrixx.info" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], - "description": "Symfony polyfill backporting some PHP 8.1+ features to lower PHP versions", + "description": "Symfony polyfill for uuid functions", "homepage": "https://symfony.com", "keywords": [ "compatibility", "polyfill", "portable", - "shim" + "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.23.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" }, "funding": [ { @@ -3606,25 +3994,24 @@ "type": "tidelift" } ], - "time": "2021-05-21T13:25:03+00:00" + "time": "2023-01-26T09:26:14+00:00" }, { "name": "symfony/process", - "version": "v5.4.0", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "5be20b3830f726e019162b26223110c8f47cf274" + "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/5be20b3830f726e019162b26223110c8f47cf274", - "reference": "5be20b3830f726e019162b26223110c8f47cf274", + "url": "https://api.github.com/repos/symfony/process/zipball/191703b1566d97a5425dc969e4350d32b8ef17aa", + "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1" }, "type": "library", "autoload": { @@ -3652,7 +4039,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v5.4.0" + "source": "https://github.com/symfony/process/tree/v6.4.0" }, "funding": [ { @@ -3668,47 +4055,40 @@ "type": "tidelift" } ], - "time": "2021-11-28T15:25:38+00:00" + "time": "2023-11-17T21:06:49+00:00" }, { "name": "symfony/routing", - "version": "v5.4.0", + "version": "v6.4.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1" + "reference": "0c95c164fdba18b12523b75e64199ca3503e6d40" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/9eeae93c32ca86746e5d38f3679e9569981038b1", - "reference": "9eeae93c32ca86746e5d38f3679e9569981038b1", + "url": "https://api.github.com/repos/symfony/routing/zipball/0c95c164fdba18b12523b75e64199ca3503e6d40", + "reference": "0c95c164fdba18b12523b75e64199ca3503e6d40", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/deprecation-contracts": "^2.1|^3", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.3", - "symfony/dependency-injection": "<4.4", - "symfony/yaml": "<4.4" + "symfony/config": "<6.2", + "symfony/dependency-injection": "<5.4", + "symfony/yaml": "<5.4" }, "require-dev": { - "doctrine/annotations": "^1.12", + "doctrine/annotations": "^1.12|^2", "psr/log": "^1|^2|^3", - "symfony/config": "^5.3|^6.0", - "symfony/dependency-injection": "^4.4|^5.0|^6.0", - "symfony/expression-language": "^4.4|^5.0|^6.0", - "symfony/http-foundation": "^4.4|^5.0|^6.0", - "symfony/yaml": "^4.4|^5.0|^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" + "symfony/config": "^6.2|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/expression-language": "^5.4|^6.0|^7.0", + "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -3742,7 +4122,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v5.4.0" + "source": "https://github.com/symfony/routing/tree/v6.4.1" }, "funding": [ { @@ -3758,36 +4138,33 @@ "type": "tidelift" } ], - "time": "2021-11-23T10:19:22+00:00" + "time": "2023-12-01T14:54:37+00:00" }, { "name": "symfony/service-contracts", - "version": "v2.4.1", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "d664541b99d6fb0247ec5ff32e87238582236204" + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/d664541b99d6fb0247ec5ff32e87238582236204", - "reference": "d664541b99d6fb0247ec5ff32e87238582236204", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", "shasum": "" }, "require": { - "php": ">=7.2.5", - "psr/container": "^1.1" + "php": ">=8.1", + "psr/container": "^2.0" }, "conflict": { "ext-psr": "<1.1|>=2" }, - "suggest": { - "symfony/service-implementation": "" - }, "type": "library", "extra": { "branch-alias": { - "dev-main": "2.4-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -3797,7 +4174,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Service\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -3824,7 +4204,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v2.4.1" + "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" }, "funding": [ { @@ -3840,46 +4220,47 @@ "type": "tidelift" } ], - "time": "2021-11-04T16:37:19+00:00" + "time": "2023-07-30T20:28:31+00:00" }, { "name": "symfony/string", - "version": "v6.0.2", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "bae261d0c3ac38a1f802b4dfed42094296100631" + "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/bae261d0c3ac38a1f802b4dfed42094296100631", - "reference": "bae261d0c3ac38a1f802b4dfed42094296100631", + "url": "https://api.github.com/repos/symfony/string/zipball/b45fcf399ea9c3af543a92edf7172ba21174d809", + "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809", "shasum": "" }, "require": { - "php": ">=8.0.2", + "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" + "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0", - "symfony/http-client": "^5.4|^6.0", - "symfony/translation-contracts": "^2.0|^3.0", - "symfony/var-exporter": "^5.4|^6.0" + "symfony/error-handler": "^5.4|^6.0|^7.0", + "symfony/http-client": "^5.4|^6.0|^7.0", + "symfony/intl": "^6.2|^7.0", + "symfony/translation-contracts": "^2.5|^3.0", + "symfony/var-exporter": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { - "psr-4": { - "Symfony\\Component\\String\\": "" - }, "files": [ "Resources/functions.php" ], + "psr-4": { + "Symfony\\Component\\String\\": "" + }, "exclude-from-classmap": [ "/Tests/" ] @@ -3909,7 +4290,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.0.2" + "source": "https://github.com/symfony/string/tree/v6.4.0" }, "funding": [ { @@ -3925,32 +4306,35 @@ "type": "tidelift" } ], - "time": "2021-12-16T22:13:01+00:00" + "time": "2023-11-28T20:41:49+00:00" }, { "name": "symfony/translation", - "version": "v6.0.1", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b7956e00c6e03546f2ba489fc50f7c47933e76b8" + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b7956e00c6e03546f2ba489fc50f7c47933e76b8", - "reference": "b7956e00c6e03546f2ba489fc50f7c47933e76b8", + "url": "https://api.github.com/repos/symfony/translation/zipball/b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", + "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", "shasum": "" }, "require": { - "php": ">=8.0.2", + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-mbstring": "~1.0", - "symfony/translation-contracts": "^2.3|^3.0" + "symfony/translation-contracts": "^2.5|^3.0" }, "conflict": { "symfony/config": "<5.4", "symfony/console": "<5.4", "symfony/dependency-injection": "<5.4", + "symfony/http-client-contracts": "<2.5", "symfony/http-kernel": "<5.4", + "symfony/service-contracts": "<2.5", "symfony/twig-bundle": "<5.4", "symfony/yaml": "<5.4" }, @@ -3958,22 +4342,19 @@ "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/config": "^5.4|^6.0|^7.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-client-contracts": "^2.5|^3.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/intl": "^5.4|^6.0|^7.0", "symfony/polyfill-intl-icu": "^1.21", - "symfony/service-contracts": "^1.1.2|^2|^3", - "symfony/yaml": "^5.4|^6.0" - }, - "suggest": { - "psr/log-implementation": "To use logging capability in translator", - "symfony/config": "", - "symfony/yaml": "" + "symfony/routing": "^5.4|^6.0|^7.0", + "symfony/service-contracts": "^2.5|^3", + "symfony/yaml": "^5.4|^6.0|^7.0" }, "type": "library", "autoload": { @@ -4004,7 +4385,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.0.1" + "source": "https://github.com/symfony/translation/tree/v6.4.0" }, "funding": [ { @@ -4020,32 +4401,29 @@ "type": "tidelift" } ], - "time": "2021-12-08T15:13:44+00:00" + "time": "2023-11-29T08:14:36+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.0.0", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77" + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", - "reference": "1b6ea5a7442af5a12dba3dbd6d71034b5b234e77", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", "shasum": "" }, "require": { - "php": ">=8.0.2" - }, - "suggest": { - "symfony/translation-implementation": "" + "php": ">=8.1" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "3.0-dev" + "dev-main": "3.4-dev" }, "thanks": { "name": "symfony/contracts", @@ -4055,7 +4433,10 @@ "autoload": { "psr-4": { "Symfony\\Contracts\\Translation\\": "" - } + }, + "exclude-from-classmap": [ + "/Test/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4082,7 +4463,81 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.0.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.4.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": "2023-07-25T15:08:44+00:00" + }, + { + "name": "symfony/uid", + "version": "v6.4.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/uid.git", + "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92", + "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/polyfill-uuid": "^1.15" + }, + "require-dev": { + "symfony/console": "^5.4|^6.0|^7.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.4.0" }, "funding": [ { @@ -4098,43 +4553,39 @@ "type": "tidelift" } ], - "time": "2021-09-07T12:43:40+00:00" + "time": "2023-10-31T08:18:17+00:00" }, { "name": "symfony/var-dumper", - "version": "v5.4.1", + "version": "v6.4.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc" + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/2366ac8d8abe0c077844613c1a4f0c0a9f522dcc", - "reference": "2366ac8d8abe0c077844613c1a4f0c0a9f522dcc", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c40f7d17e91d8b407582ed51a2bbf83c52c367f6", + "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6", "shasum": "" }, "require": { - "php": ">=7.2.5", - "symfony/polyfill-mbstring": "~1.0", - "symfony/polyfill-php80": "^1.16" + "php": ">=8.1", + "symfony/deprecation-contracts": "^2.5|^3", + "symfony/polyfill-mbstring": "~1.0" }, "conflict": { - "phpunit/phpunit": "<5.4.3", - "symfony/console": "<4.4" + "symfony/console": "<5.4" }, "require-dev": { "ext-iconv": "*", - "symfony/console": "^4.4|^5.0|^6.0", - "symfony/process": "^4.4|^5.0|^6.0", - "symfony/uid": "^5.1|^6.0", + "symfony/console": "^5.4|^6.0|^7.0", + "symfony/error-handler": "^6.3|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/process": "^5.4|^6.0|^7.0", + "symfony/uid": "^5.4|^6.0|^7.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" ], @@ -4171,7 +4622,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v5.4.1" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.0" }, "funding": [ { @@ -4187,20 +4638,20 @@ "type": "tidelift" } ], - "time": "2021-12-01T15:04:08+00:00" + "time": "2023-11-09T08:28:32+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.4", + "version": "2.2.6", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c" + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/da444caae6aca7a19c0c140f68c6182e337d5b1c", - "reference": "da444caae6aca7a19c0c140f68c6182e337d5b1c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", "shasum": "" }, "require": { @@ -4238,45 +4689,49 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.4" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" }, - "time": "2021-12-08T09:12:39+00:00" + "time": "2023-01-03T09:29:04+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.4.1", + "version": "v5.6.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", "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" + "graham-campbell/result-type": "^1.1.2", + "php": "^7.2.5 || ^8.0", + "phpoption/phpoption": "^1.9.2", + "symfony/polyfill-ctype": "^1.24", + "symfony/polyfill-mbstring": "^1.24", + "symfony/polyfill-php80": "^1.24" }, "require-dev": { - "bamarni/composer-bin-plugin": "^1.4.1", + "bamarni/composer-bin-plugin": "^1.8.2", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" }, "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.4-dev" + "dev-master": "5.6-dev" } }, "autoload": { @@ -4308,7 +4763,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.4.1" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" }, "funding": [ { @@ -4320,20 +4775,20 @@ "type": "tidelift" } ], - "time": "2021-12-12T23:22:04+00:00" + "time": "2023-11-12T22:43:29+00:00" }, { "name": "voku/portable-ascii", - "version": "1.5.6", + "version": "2.0.1", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "80953678b19901e5165c56752d087fc11526017c" + "reference": "b56450eed252f6801410d810c8e1727224ae0743" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/80953678b19901e5165c56752d087fc11526017c", - "reference": "80953678b19901e5165c56752d087fc11526017c", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", + "reference": "b56450eed252f6801410d810c8e1727224ae0743", "shasum": "" }, "require": { @@ -4370,7 +4825,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/1.5.6" + "source": "https://github.com/voku/portable-ascii/tree/2.0.1" }, "funding": [ { @@ -4394,25 +4849,25 @@ "type": "tidelift" } ], - "time": "2020-11-12T00:07:28+00:00" + "time": "2022-03-08T17:03:00+00:00" }, { "name": "webmozart/assert", - "version": "1.10.0", + "version": "1.11.0", "source": { "type": "git", "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", + "url": "https://api.github.com/repos/webmozarts/assert/zipball/11cb2199493b2f8a3b53e7f19068fc6aac760991", + "reference": "11cb2199493b2f8a3b53e7f19068fc6aac760991", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" + "ext-ctype": "*", + "php": "^7.2 || ^8.0" }, "conflict": { "phpstan/phpstan": "<0.12.20", @@ -4450,24 +4905,24 @@ ], "support": { "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" + "source": "https://github.com/webmozarts/assert/tree/1.11.0" }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2022-06-03T18:03:27+00:00" } ], "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.1", + "version": "v2.6.2", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae" + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae", - "reference": "c5fc66a78ee38d7ac9195a37bacaf940eb3f65ae", + "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", "shasum": "" }, "require": { @@ -4489,13 +4944,13 @@ } }, "autoload": { - "psr-4": { - "Amp\\": "lib" - }, "files": [ "lib/functions.php", "lib/Internal/functions.php" - ] + ], + "psr-4": { + "Amp\\": "lib" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4520,7 +4975,7 @@ } ], "description": "A non-blocking concurrency framework for PHP applications.", - "homepage": "http://amphp.org/amp", + "homepage": "https://amphp.org/amp", "keywords": [ "async", "asynchronous", @@ -4535,7 +4990,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.1" + "source": "https://github.com/amphp/amp/tree/v2.6.2" }, "funding": [ { @@ -4543,7 +4998,7 @@ "type": "github" } ], - "time": "2021-09-23T18:43:08+00:00" + "time": "2022-02-20T17:52:18+00:00" }, { "name": "amphp/byte-stream", @@ -4578,12 +5033,12 @@ } }, "autoload": { - "psr-4": { - "Amp\\ByteStream\\": "lib" - }, "files": [ "lib/functions.php" - ] + ], + "psr-4": { + "Amp\\ByteStream\\": "lib" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -4697,30 +5152,30 @@ }, { "name": "composer/pcre", - "version": "1.0.1", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560" + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/67a32d7d6f9f560b726ab25a061b38ff3a80c560", - "reference": "67a32d7d6f9f560b726ab25a061b38ff3a80c560", + "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", "shasum": "" }, "require": { - "php": "^5.3.2 || ^7.0 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "phpstan/phpstan": "^1.3", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^4.2 || ^5" + "symfony/phpunit-bridge": "^5" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev" + "dev-main": "3.x-dev" } }, "autoload": { @@ -4748,7 +5203,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/1.0.1" + "source": "https://github.com/composer/pcre/tree/3.1.1" }, "funding": [ { @@ -4764,27 +5219,27 @@ "type": "tidelift" } ], - "time": "2022-01-21T20:24:37+00:00" + "time": "2023-10-11T07:11:09+00:00" }, { "name": "composer/semver", - "version": "3.2.7", + "version": "3.4.0", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "deac27056b57e46faf136fae7b449eeaa71661ee" + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/deac27056b57e46faf136fae7b449eeaa71661ee", - "reference": "deac27056b57e46faf136fae7b449eeaa71661ee", + "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", + "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^0.12.54", + "phpstan/phpstan": "^1.4", "symfony/phpunit-bridge": "^4.2 || ^5" }, "type": "library", @@ -4827,9 +5282,9 @@ "versioning" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.2.7" + "source": "https://github.com/composer/semver/tree/3.4.0" }, "funding": [ { @@ -4845,24 +5300,24 @@ "type": "tidelift" } ], - "time": "2022-01-04T09:57:54+00:00" + "time": "2023-08-31T09:50:34+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.1", + "version": "3.0.3", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8" + "reference": "ced299686f41dce890debac69273b47ffe98a40c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/12f1b79476638a5615ed00ea6adbb269cec96fd8", - "reference": "12f1b79476638a5615ed00ea6adbb269cec96fd8", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", + "reference": "ced299686f41dce890debac69273b47ffe98a40c", "shasum": "" }, "require": { - "composer/pcre": "^1", + "composer/pcre": "^1 || ^2 || ^3", "php": "^7.2.5 || ^8.0", "psr/log": "^1 || ^2 || ^3" }, @@ -4895,7 +5350,7 @@ "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.1" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" }, "funding": [ { @@ -4911,7 +5366,7 @@ "type": "tidelift" } ], - "time": "2022-01-04T18:29:42+00:00" + "time": "2022-02-25T21:32:43+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -4950,31 +5405,79 @@ }, "time": "2019-12-04T15:06:13+00:00" }, + { + "name": "doctrine/deprecations", + "version": "1.1.2", + "source": { + "type": "git", + "url": "https://github.com/doctrine/deprecations.git", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "shasum": "" + }, + "require": { + "php": "^7.1 || ^8.0" + }, + "require-dev": { + "doctrine/coding-standard": "^9", + "phpstan/phpstan": "1.4.10 || 1.10.15", + "phpstan/phpstan-phpunit": "^1.0", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "psalm/plugin-phpunit": "0.18.4", + "psr/log": "^1 || ^2 || ^3", + "vimeo/psalm": "4.30.0 || 5.12.0" + }, + "suggest": { + "psr/log": "Allows logging deprecations via PSR-3 logger implementation" + }, + "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/1.1.2" + }, + "time": "2023-09-27T20:04:15+00:00" + }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "2.0.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", + "reference": "c6222283fa3f4ac679f8b9ced9a4e23f163e80d0", "shasum": "" }, "require": { - "php": "^7.1 || ^8.0" + "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "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": { @@ -5001,7 +5504,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/2.0.0" }, "funding": [ { @@ -5017,7 +5520,7 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-12-30T00:23:10+00:00" }, { "name": "felixfbecker/advanced-json-rpc", @@ -5066,16 +5569,16 @@ }, { "name": "felixfbecker/language-server-protocol", - "version": "1.5.1", + "version": "v1.5.2", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730" + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/9d846d1f5cf101deee7a61c8ba7caa0a975cd730", - "reference": "9d846d1f5cf101deee7a61c8ba7caa0a975cd730", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", + "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", "shasum": "" }, "require": { @@ -5116,9 +5619,9 @@ ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/1.5.1" + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" }, - "time": "2021-02-22T14:02:09+00:00" + "time": "2022-03-02T22:36:06+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -5245,34 +5748,38 @@ }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "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.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "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": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -5288,7 +5795,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -5296,20 +5803,20 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.0.0", + "version": "v4.2.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d" + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", - "reference": "8bbc021a8edb2e4a7ea2f8ad4fa9ec9dce2fcb8d", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", + "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", "shasum": "" }, "require": { @@ -5345,22 +5852,22 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.0.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" }, - "time": "2020-12-01T19:48:11+00:00" + "time": "2023-04-09T17:37:40+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.2", + "version": "v4.17.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077" + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/210577fe3cf7badcc5814d99455df46564f3c077", - "reference": "210577fe3cf7badcc5814d99455df46564f3c077", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", "shasum": "" }, "require": { @@ -5401,9 +5908,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.2" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" }, - "time": "2021-11-30T19:35:32+00:00" + "time": "2023-08-13T19:53:39+00:00" }, { "name": "openlss/lib-array2xml", @@ -5520,16 +6027,16 @@ }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -5565,9 +6072,9 @@ "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.1.0" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpdocumentor/reflection-common", @@ -5681,25 +6188,33 @@ }, { "name": "phpdocumentor/type-resolver", - "version": "1.6.0", + "version": "1.7.3", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706" + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/93ebd0014cab80c4ea9f5e297ea48672f1b87706", - "reference": "93ebd0014cab80c4ea9f5e297ea48672f1b87706", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "doctrine/deprecations": "^1.0", + "php": "^7.4 || ^8.0", + "phpdocumentor/reflection-common": "^2.0", + "phpstan/phpdoc-parser": "^1.13" }, "require-dev": { "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "phpbench/phpbench": "^1.2", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-phpunit": "^1.1", + "phpunit/phpunit": "^9.5", + "rector/rector": "^0.13.9", + "vimeo/psalm": "^4.25" }, "type": "library", "extra": { @@ -5725,96 +6240,76 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.6.0" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" }, - "time": "2022-01-04T19:58:01+00:00" + "time": "2023-08-12T11:01:26+00:00" }, { - "name": "phpspec/prophecy", - "version": "v1.15.0", + "name": "phpstan/phpdoc-parser", + "version": "1.24.4", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13" + "url": "https://github.com/phpstan/phpdoc-parser.git", + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/bbcd7380b0ebf3961ee21409db7b38bc31d69a13", - "reference": "bbcd7380b0ebf3961ee21409db7b38bc31d69a13", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "php": "^7.2 || ^8.0" }, "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "doctrine/annotations": "^2.0", + "nikic/php-parser": "^4.15", + "php-parallel-lint/php-parallel-lint": "^1.2", + "phpstan/extension-installer": "^1.0", + "phpstan/phpstan": "^1.5", + "phpstan/phpstan-phpunit": "^1.1", + "phpstan/phpstan-strict-rules": "^1.0", + "phpunit/phpunit": "^9.5", + "symfony/process": "^5.2" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "psr-4": { - "Prophecy\\": "src/Prophecy" + "PHPStan\\PhpDocParser\\": [ + "src/" + ] } }, "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "authors": [ - { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" - }, - { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" - } - ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", - "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" - ], + "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/v1.15.0" + "issues": "https://github.com/phpstan/phpdoc-parser/issues", + "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" }, - "time": "2021-12-08T12:19:24+00:00" + "time": "2023-11-26T18:29:22+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.10", + "version": "9.2.29", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687" + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/d5850aaf931743067f4bfc1ae4cbd06468400687", - "reference": "d5850aaf931743067f4bfc1ae4cbd06468400687", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.15", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -5829,8 +6324,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -5863,7 +6358,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.10" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" }, "funding": [ { @@ -5871,7 +6367,7 @@ "type": "github" } ], - "time": "2021-12-05T09:12:13+00:00" + "time": "2023-09-19T04:57:46+00:00" }, { "name": "phpunit/php-file-iterator", @@ -6116,20 +6612,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.13", + "version": "9.6.15", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "597cb647654ede35e43b137926dfdfef0fb11743" + "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/597cb647654ede35e43b137926dfdfef0fb11743", - "reference": "597cb647654ede35e43b137926dfdfef0fb11743", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1", + "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -6140,31 +6636,26 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-code-coverage": "^9.2.28", "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.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.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": "^2.3.4", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -6172,15 +6663,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -6203,7 +6694,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.13" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15" }, "funding": [ { @@ -6213,9 +6705,13 @@ { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2022-01-24T07:33:35+00:00" + "time": "2023-12-01T16:55:19+00:00" }, { "name": "sebastian/cli-parser", @@ -6386,16 +6882,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -6448,7 +6944,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -6456,7 +6952,7 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", @@ -6517,16 +7013,16 @@ }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", "shasum": "" }, "require": { @@ -6571,7 +7067,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/4.0.5" }, "funding": [ { @@ -6579,20 +7075,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2023-05-07T05:35:17+00:00" }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -6634,7 +7130,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -6642,20 +7138,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", "shasum": "" }, "require": { @@ -6711,7 +7207,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.5" }, "funding": [ { @@ -6719,20 +7215,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2022-09-14T06:03:37+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "bde739e7565280bda77be70044ac1047bc007e34" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", + "reference": "bde739e7565280bda77be70044ac1047bc007e34", "shasum": "" }, "require": { @@ -6775,7 +7271,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" }, "funding": [ { @@ -6783,7 +7279,7 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2023-08-02T09:26:13+00:00" }, { "name": "sebastian/lines-of-code", @@ -6956,16 +7452,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": { @@ -7004,10 +7500,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": [ { @@ -7015,7 +7511,7 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", @@ -7074,28 +7570,28 @@ }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -7118,7 +7614,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -7126,7 +7622,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -7183,16 +7679,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.2", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", "shasum": "" }, "require": { @@ -7221,7 +7717,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.2" }, "funding": [ { @@ -7229,7 +7725,7 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" + "time": "2023-11-20T00:12:19+00:00" }, { "name": "vimeo/psalm", @@ -7308,13 +7804,13 @@ } }, "autoload": { - "psr-4": { - "Psalm\\": "src/Psalm/" - }, "files": [ "src/functions.php", "src/spl_object_id.php" - ] + ], + "psr-4": { + "Psalm\\": "src/Psalm/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -7398,5 +7894,5 @@ "php": "^8.0" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.6.0" } From 70d544b9d9d62f71937e21a26b0bc2c350fd6aa2 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Fri, 7 Jun 2024 10:42:49 +0100 Subject: [PATCH 51/58] Support Laravel 11. --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 0cbb9bd9..ddb47903 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ ], "require": { "php": "^8.0", - "laravel/framework": "^8|^9|^10" + "laravel/framework": "^8|^9|^10|^11" }, "autoload": { "psr-4": { From 5465de191c12f5e8f0a79de6e593f3513da5ebe8 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Fri, 28 Jun 2024 11:22:37 +0100 Subject: [PATCH 52/58] Fix runtime error on using constants. --- laravel/src/SyncApi.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 61da49fd..0b5ac48f 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -108,7 +108,8 @@ public function generateRoutes(): void $key = $constant->generateCamelCasedName(); $data = $constant->value; - $version = $enum->hashData($data); + ksort($data); + $version = hash('sha1', json_encode($data)); $singletons[$key] = compact('version'); } From cfb4926f84dba167b5fc9a060564e442b11cc2e3 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 11 Jul 2024 09:04:17 +0100 Subject: [PATCH 53/58] Switch to factories for constants. --- laravel/src/SyncApi.php | 4 ++-- laravel/src/SyncApiCollection.php | 4 ++-- laravel/src/SyncApiCollectionMediaCollection.php | 4 ++-- laravel/src/SyncApiConstant.php | 12 ++++++------ laravel/src/SyncApiEnum.php | 4 ++-- laravel/src/SyncApiInterface.php | 4 ++-- laravel/src/SyncApiMe.php | 4 ++-- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index 0b5ac48f..bb2fa73a 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -47,12 +47,12 @@ public function withEnum( public function withConstant( string $name, - array $value, + callable $valueFactory, ): SyncApiConstant { $syncApiConstant = new SyncApiConstant( $this, $name, - $value, + $valueFactory, ); $this->constants[] = $syncApiConstant; diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index 840dad60..da807f14 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -89,13 +89,13 @@ public function withEnum( function withConstant( string $name, - array $value, + callable $valueFactory, ): SyncApiConstant { return $this ->syncApi ->withConstant( $name, - $value, + $valueFactory, ); } diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 5b91f86d..da53ae79 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -97,13 +97,13 @@ function withEnum( function withConstant( string $name, - array $value, + callable $valueFactory, ): SyncApiConstant { return $this ->syncApiCollection ->withConstant( $name, - $value, + $valueFactory, ); } diff --git a/laravel/src/SyncApiConstant.php b/laravel/src/SyncApiConstant.php index 12f25b18..72d24e19 100644 --- a/laravel/src/SyncApiConstant.php +++ b/laravel/src/SyncApiConstant.php @@ -14,16 +14,16 @@ class SyncApiConstant implements SyncApiConstantInterface private SyncApi $syncApi; private string $name; - public array $value; + public $valueFactory; public function __construct( SyncApi $syncApi, string $name, - array $value, + callable $valueFactory, ) { $this->syncApi = $syncApi; $this->name = $name; - $this->value = $value; + $this->valueFactory = $valueFactory; } function withMe( @@ -52,13 +52,13 @@ function withEnum( function withConstant( string $name, - array $value, + callable $valueFactory, ): SyncApiConstant { return $this ->syncApi ->withConstant( $name, - $value, + $valueFactory, ); } @@ -102,7 +102,7 @@ public function generateConstantRoutes(): void Route::get( $this->generateKebabCasedName(), function () { - $data = $this->value; + $data = ($this->valueFactory)(); return [ 'version' => $this->hashData($data), diff --git a/laravel/src/SyncApiEnum.php b/laravel/src/SyncApiEnum.php index 377c6051..f4133505 100644 --- a/laravel/src/SyncApiEnum.php +++ b/laravel/src/SyncApiEnum.php @@ -53,13 +53,13 @@ function withEnum( function withConstant( string $name, - array $value, + callable $valueFactory, ): SyncApiConstant { return $this ->syncApi ->withConstant( $name, - $value, + $valueFactory, ); } diff --git a/laravel/src/SyncApiInterface.php b/laravel/src/SyncApiInterface.php index 633e2346..de22498e 100644 --- a/laravel/src/SyncApiInterface.php +++ b/laravel/src/SyncApiInterface.php @@ -34,11 +34,11 @@ function withEnum( /** * Adds a new constant to this sync API. * @param string $name The name of the value to add. - * @param array $value The JSON-serializable value to add. + * @param array $valueFactory A factory for the JSON-serializable value to add. */ function withConstant( string $name, - array $value, + callable $valueFactory, ): SyncApiConstant; /** diff --git a/laravel/src/SyncApiMe.php b/laravel/src/SyncApiMe.php index 789180b3..a840d0dc 100644 --- a/laravel/src/SyncApiMe.php +++ b/laravel/src/SyncApiMe.php @@ -53,13 +53,13 @@ function withEnum( function withConstant( string $name, - array $value, + callable $valueFactory, ): SyncApiConstant { return $this ->syncApi ->withConstant( $name, - $value, + $valueFactory, ); } From b1da40f066faf089e1738629de0c0afef3836e71 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 11 Jul 2024 09:07:29 +0100 Subject: [PATCH 54/58] Add caching. --- laravel/src/SyncApiConstant.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/laravel/src/SyncApiConstant.php b/laravel/src/SyncApiConstant.php index 72d24e19..03b431e9 100644 --- a/laravel/src/SyncApiConstant.php +++ b/laravel/src/SyncApiConstant.php @@ -4,6 +4,7 @@ use Illuminate\Support\Facades\Route; use Illuminate\Support\Str; +use Illuminate\Support\Facades\Cache; /** * Represents a constant within a sync API. Create instances using @@ -99,10 +100,16 @@ public function hashData(array $data): string public function generateConstantRoutes(): void { + $kebabCasedName = $this->generateKebabCasedName(); + Route::get( - $this->generateKebabCasedName(), - function () { - $data = ($this->valueFactory)(); + $kebabCasedName, + function () use ($kebabCasedName) { + $data = Cache::remember( + 'sync_api_constant_' . $kebabCasedName, + 3600, + $this->valueFactory + ); return [ 'version' => $this->hashData($data), From 8d5f6a79ab75ac736a1d29ba9aabc767d61e53ea Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Thu, 11 Jul 2024 09:28:08 +0100 Subject: [PATCH 55/58] Fix preflight. --- laravel/src/SyncApi.php | 7 ++----- laravel/src/SyncApiConstant.php | 29 +++++++++++++++++------------ 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/laravel/src/SyncApi.php b/laravel/src/SyncApi.php index bb2fa73a..66b62241 100644 --- a/laravel/src/SyncApi.php +++ b/laravel/src/SyncApi.php @@ -3,6 +3,7 @@ namespace JamesWildDev\ReactNativeAppHelpers; use Illuminate\Support\Facades\Route; +use Illuminate\Support\Arr; /** * Represents a sync API as a whole. Use this to configure your API once, then @@ -107,11 +108,7 @@ public function generateRoutes(): void foreach ($this->constants as $constant) { $key = $constant->generateCamelCasedName(); - $data = $constant->value; - ksort($data); - $version = hash('sha1', json_encode($data)); - - $singletons[$key] = compact('version'); + $singletons[$key] = Arr::only($constant->getCachedValue(), 'version'); } $collections = []; diff --git a/laravel/src/SyncApiConstant.php b/laravel/src/SyncApiConstant.php index 03b431e9..53d6abe2 100644 --- a/laravel/src/SyncApiConstant.php +++ b/laravel/src/SyncApiConstant.php @@ -98,23 +98,28 @@ public function hashData(array $data): string return hash('sha1', json_encode($data)); } - public function generateConstantRoutes(): void + public function getCachedValue() { - $kebabCasedName = $this->generateKebabCasedName(); - - Route::get( - $kebabCasedName, - function () use ($kebabCasedName) { - $data = Cache::remember( - 'sync_api_constant_' . $kebabCasedName, - 3600, - $this->valueFactory - ); + return Cache::remember( + 'sync-api-constant-' . $this->generateKebabCasedName(), + 3600, + function () { + $data = ($this->valueFactory)(); return [ - 'version' => $this->hashData($data), 'data' => $data, + 'version' => hash('sha1', json_encode($data)), ]; + } + ); + } + + public function generateConstantRoutes(): void + { + Route::get( + $this->generateKebabCasedName(), + function () { + return $this->getCachedValue(); }, ); } From 944224eab007dc55721093b551beb700b6d25e05 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 23 Jul 2024 14:00:45 +0100 Subject: [PATCH 56/58] Add callback to pass on updates. --- laravel/src/SyncApiCollection.php | 4 ++++ laravel/src/SyncApiCollectionInterface.php | 3 +++ laravel/src/SyncApiCollectionMediaCollection.php | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index da807f14..f1d53ff9 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -47,17 +47,21 @@ public function __construct( * @param string $name The name of the media collection. * @param int $syncCapabilities The actions available to API * consumers. + * @param callable $onUpsertOrDelete Invoked when media is upserted or + * deleted. * @return SyncApiCollectionMediaCollection The created media collection. */ public function withMediaCollection( string $name, int $syncCapabilities, + ?callable $onUpsertOrDelete, ): SyncApiCollectionMediaCollection { $syncApiCollectionMediaCollection = new SyncApiCollectionMediaCollection( $this, $name, $syncCapabilities, $this->routeFragment, + $onUpsertOrDelete, ); $this->syncApiCollectionMediaCollections[] = $syncApiCollectionMediaCollection; diff --git a/laravel/src/SyncApiCollectionInterface.php b/laravel/src/SyncApiCollectionInterface.php index ad6d472d..3ee86d92 100644 --- a/laravel/src/SyncApiCollectionInterface.php +++ b/laravel/src/SyncApiCollectionInterface.php @@ -12,9 +12,12 @@ interface SyncApiCollectionInterface extends SyncApiInterface * Adds a new media collection to this collection. * @param string $name The name of the media collection. * @param int $syncCapabilities The actions available to API consumers. + * @param callable $onUpsertOrDelete Invoked when media is upserted or + * deleted. */ function withMediaCollection( string $name, int $syncCapabilities, + ?callable $onUpsertOrDelete, ): SyncApiCollectionMediaCollection; } diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index da53ae79..36ca683e 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -21,6 +21,8 @@ class SyncApiCollectionMediaCollection implements SyncApiCollectionMediaCollecti private string $routeFragment; + private array $onUpsertOrDelete; + private function getMediaUuidField(): string { if (config('react-native-sync')) { @@ -56,20 +58,24 @@ public function __construct( string $name, int $syncCapabilities, ?string $routeFragment, + ?callable $onUpsertOrDelete, ) { $this->syncApiCollection = $syncApiCollection; $this->name = $name; $this->syncCapabilities = $syncCapabilities; $this->routeFragment = $routeFragment ?? Str::kebab(Str::pluralStudly(class_basename($this->syncApiCollection->modelClass))); + $this->onUpsertOrDelete = $onUpsertOrDelete === null ? [] : [$onUpsertOrDelete]; } public function withMediaCollection( string $name, int $syncCapabilities, + ?callable $onUpsertOrDelete, ): SyncApiCollectionMediaCollection { return $this->syncApiCollection->withMediaCollection( $name, $syncCapabilities, + $onUpsertOrDelete, ); } @@ -200,11 +206,15 @@ function (string $modelUuid, string $mediaUuid) { $extension = ''; } - $model + $media = $model ->addMediaFromString($data) ->usingName($mediaUuid . $extension) ->withProperties(['uuid' => $mediaUuid]) ->toMediaCollection($this->name); + + foreach ($this->onUpsertOrDelete as $callback) { + $callback($media); + } } } else { throw new ModelNotFoundException(); @@ -237,6 +247,10 @@ function (string $modelUuid, string $mediaUuid) { if ($media !== null) { $media->delete(); + + foreach ($this->onUpsertOrDelete as $callback) { + $callback($media); + } } } else { throw new ModelNotFoundException(); From 53ef60481c26621113656fe08a79db43981e4803 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 23 Jul 2024 14:08:57 +0100 Subject: [PATCH 57/58] Add default. --- laravel/src/SyncApiCollection.php | 2 +- laravel/src/SyncApiCollectionInterface.php | 2 +- laravel/src/SyncApiCollectionMediaCollection.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/laravel/src/SyncApiCollection.php b/laravel/src/SyncApiCollection.php index f1d53ff9..500219ba 100644 --- a/laravel/src/SyncApiCollection.php +++ b/laravel/src/SyncApiCollection.php @@ -54,7 +54,7 @@ public function __construct( public function withMediaCollection( string $name, int $syncCapabilities, - ?callable $onUpsertOrDelete, + ?callable $onUpsertOrDelete = null, ): SyncApiCollectionMediaCollection { $syncApiCollectionMediaCollection = new SyncApiCollectionMediaCollection( $this, diff --git a/laravel/src/SyncApiCollectionInterface.php b/laravel/src/SyncApiCollectionInterface.php index 3ee86d92..100cfb5b 100644 --- a/laravel/src/SyncApiCollectionInterface.php +++ b/laravel/src/SyncApiCollectionInterface.php @@ -18,6 +18,6 @@ interface SyncApiCollectionInterface extends SyncApiInterface function withMediaCollection( string $name, int $syncCapabilities, - ?callable $onUpsertOrDelete, + ?callable $onUpsertOrDelete = null, ): SyncApiCollectionMediaCollection; } diff --git a/laravel/src/SyncApiCollectionMediaCollection.php b/laravel/src/SyncApiCollectionMediaCollection.php index 36ca683e..fe7d1643 100644 --- a/laravel/src/SyncApiCollectionMediaCollection.php +++ b/laravel/src/SyncApiCollectionMediaCollection.php @@ -70,7 +70,7 @@ public function __construct( public function withMediaCollection( string $name, int $syncCapabilities, - ?callable $onUpsertOrDelete, + ?callable $onUpsertOrDelete = null, ): SyncApiCollectionMediaCollection { return $this->syncApiCollection->withMediaCollection( $name, From f27ac5d2ad1c098566497b7a1922abf0ed22d175 Mon Sep 17 00:00:00 2001 From: jameswilddev Date: Tue, 10 Jun 2025 13:00:13 +0100 Subject: [PATCH 58/58] Update dependencies. --- composer.json | 2 +- composer.lock | 1644 +++++++++++++++++++++++-------------------------- 2 files changed, 775 insertions(+), 871 deletions(-) diff --git a/composer.json b/composer.json index ddb47903..fcbca4d2 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ ], "require": { "php": "^8.0", - "laravel/framework": "^8|^9|^10|^11" + "laravel/framework": "^8|^9|^10|^11|^12" }, "autoload": { "psr-4": { diff --git a/composer.lock b/composer.lock index 019a1e4e..878703c0 100644 --- a/composer.lock +++ b/composer.lock @@ -4,29 +4,29 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "92068d7430bf80640fd1b22c3f9f9482", + "content-hash": "049de0852e7503b4763cd444779c30ea", "packages": [ { "name": "brick/math", - "version": "0.11.0", + "version": "0.12.3", "source": { "type": "git", "url": "https://github.com/brick/math.git", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478" + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/brick/math/zipball/0ad82ce168c82ba30d1c01ec86116ab52f589478", - "reference": "0ad82ce168c82ba30d1c01ec86116ab52f589478", + "url": "https://api.github.com/repos/brick/math/zipball/866551da34e9a618e64a819ee1e01c20d8a588ba", + "reference": "866551da34e9a618e64a819ee1e01c20d8a588ba", "shasum": "" }, "require": { - "php": "^8.0" + "php": "^8.1" }, "require-dev": { "php-coveralls/php-coveralls": "^2.2", - "phpunit/phpunit": "^9.0", - "vimeo/psalm": "5.0.0" + "phpunit/phpunit": "^10.1", + "vimeo/psalm": "6.8.8" }, "type": "library", "autoload": { @@ -46,12 +46,17 @@ "arithmetic", "bigdecimal", "bignum", + "bignumber", "brick", - "math" + "decimal", + "integer", + "math", + "mathematics", + "rational" ], "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.12.3" }, "funding": [ { @@ -59,30 +64,30 @@ "type": "github" } ], - "time": "2023-01-15T23:15:59+00:00" + "time": "2025-02-28T13:11:00+00:00" }, { "name": "carbonphp/carbon-doctrine-types", - "version": "3.0.0", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/CarbonPHP/carbon-doctrine-types.git", - "reference": "49856fbc09fe91b5433381faec60e3620ad364ad" + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/49856fbc09fe91b5433381faec60e3620ad364ad", - "reference": "49856fbc09fe91b5433381faec60e3620ad364ad", + "url": "https://api.github.com/repos/CarbonPHP/carbon-doctrine-types/zipball/99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", + "reference": "99f76ffa36cce3b70a4a6abce41dba15ca2e84cb", "shasum": "" }, "require": { - "php": "^8.1" + "php": "^7.4 || ^8.0" }, "conflict": { - "doctrine/dbal": "<4.0.0 || >=5.0.0" + "doctrine/dbal": "<3.7.0 || >=4.0.0" }, "require-dev": { - "doctrine/dbal": "^4.0.0", + "doctrine/dbal": "^3.7.0", "nesbot/carbon": "^2.71.0 || ^3.0.0", "phpunit/phpunit": "^10.3" }, @@ -112,7 +117,7 @@ ], "support": { "issues": "https://github.com/CarbonPHP/carbon-doctrine-types/issues", - "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/3.0.0" + "source": "https://github.com/CarbonPHP/carbon-doctrine-types/tree/2.1.0" }, "funding": [ { @@ -128,20 +133,20 @@ "type": "tidelift" } ], - "time": "2023-10-01T14:36:55+00:00" + "time": "2023-12-11T17:09:12+00:00" }, { "name": "dflydev/dot-access-data", - "version": "v3.0.2", + "version": "v3.0.3", "source": { "type": "git", "url": "https://github.com/dflydev/dflydev-dot-access-data.git", - "reference": "f41715465d65213d644d3141a6a93081be5d3549" + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/f41715465d65213d644d3141a6a93081be5d3549", - "reference": "f41715465d65213d644d3141a6a93081be5d3549", + "url": "https://api.github.com/repos/dflydev/dflydev-dot-access-data/zipball/a23a2bf4f31d3518f3ecb38660c95715dfead60f", + "reference": "a23a2bf4f31d3518f3ecb38660c95715dfead60f", "shasum": "" }, "require": { @@ -201,22 +206,22 @@ ], "support": { "issues": "https://github.com/dflydev/dflydev-dot-access-data/issues", - "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.2" + "source": "https://github.com/dflydev/dflydev-dot-access-data/tree/v3.0.3" }, - "time": "2022-10-27T11:44:00+00:00" + "time": "2024-07-08T12:26:09+00:00" }, { "name": "doctrine/inflector", - "version": "2.0.8", + "version": "2.0.10", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff" + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/f9301a5b2fb1216b2b08f02ba04dc45423db6bff", - "reference": "f9301a5b2fb1216b2b08f02ba04dc45423db6bff", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/5817d0659c5b50c9b950feb9af7b9668e2c436bc", + "reference": "5817d0659c5b50c9b950feb9af7b9668e2c436bc", "shasum": "" }, "require": { @@ -278,7 +283,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.8" + "source": "https://github.com/doctrine/inflector/tree/2.0.10" }, "funding": [ { @@ -294,31 +299,31 @@ "type": "tidelift" } ], - "time": "2023-06-16T13:40:37+00:00" + "time": "2024-02-18T20:23:39+00:00" }, { "name": "doctrine/lexer", - "version": "3.0.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/doctrine/lexer.git", - "reference": "84a527db05647743d50373e0ec53a152f2cde568" + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/lexer/zipball/84a527db05647743d50373e0ec53a152f2cde568", - "reference": "84a527db05647743d50373e0ec53a152f2cde568", + "url": "https://api.github.com/repos/doctrine/lexer/zipball/31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", + "reference": "31ad66abc0fc9e1a1f2d9bc6a42668d2fbbcd6dd", "shasum": "" }, "require": { "php": "^8.1" }, "require-dev": { - "doctrine/coding-standard": "^10", - "phpstan/phpstan": "^1.9", - "phpunit/phpunit": "^9.5", + "doctrine/coding-standard": "^12", + "phpstan/phpstan": "^1.10", + "phpunit/phpunit": "^10.5", "psalm/plugin-phpunit": "^0.18.3", - "vimeo/psalm": "^5.0" + "vimeo/psalm": "^5.21" }, "type": "library", "autoload": { @@ -355,7 +360,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/3.0.1" }, "funding": [ { @@ -371,20 +376,20 @@ "type": "tidelift" } ], - "time": "2022-12-15T16:57:16+00:00" + "time": "2024-02-05T11:56:58+00:00" }, { "name": "dragonmantank/cron-expression", - "version": "v3.3.3", + "version": "v3.4.0", "source": { "type": "git", "url": "https://github.com/dragonmantank/cron-expression.git", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a" + "reference": "8c784d071debd117328803d86b2097615b457500" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", - "reference": "adfb1f505deb6384dc8b39804c5065dd3c8c8c0a", + "url": "https://api.github.com/repos/dragonmantank/cron-expression/zipball/8c784d071debd117328803d86b2097615b457500", + "reference": "8c784d071debd117328803d86b2097615b457500", "shasum": "" }, "require": { @@ -397,10 +402,14 @@ "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", + "extra": { + "branch-alias": { + "dev-master": "3.x-dev" + } + }, "autoload": { "psr-4": { "Cron\\": "src/Cron/" @@ -424,7 +433,7 @@ ], "support": { "issues": "https://github.com/dragonmantank/cron-expression/issues", - "source": "https://github.com/dragonmantank/cron-expression/tree/v3.3.3" + "source": "https://github.com/dragonmantank/cron-expression/tree/v3.4.0" }, "funding": [ { @@ -432,20 +441,20 @@ "type": "github" } ], - "time": "2023-08-10T19:36:49+00:00" + "time": "2024-10-09T13:47:03+00:00" }, { "name": "egulias/email-validator", - "version": "4.0.2", + "version": "4.0.4", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", + "reference": "d42c8731f0624ad6bdc8d3e5e9a4524f68801cfa", "shasum": "" }, "require": { @@ -491,7 +500,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.4" }, "funding": [ { @@ -499,7 +508,7 @@ "type": "github" } ], - "time": "2023-10-06T06:47:41+00:00" + "time": "2025-03-06T22:45:56+00:00" }, { "name": "fruitcake/php-cors", @@ -574,24 +583,24 @@ }, { "name": "graham-campbell/result-type", - "version": "v1.1.2", + "version": "v1.1.3", "source": { "type": "git", "url": "https://github.com/GrahamCampbell/Result-Type.git", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862" + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/fbd48bce38f73f8a4ec8583362e732e4095e5862", - "reference": "fbd48bce38f73f8a4ec8583362e732e4095e5862", + "url": "https://api.github.com/repos/GrahamCampbell/Result-Type/zipball/3ba905c11371512af9d9bdd27d99b782216b6945", + "reference": "3ba905c11371512af9d9bdd27d99b782216b6945", "shasum": "" }, "require": { "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2" + "phpoption/phpoption": "^1.9.3" }, "require-dev": { - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "autoload": { @@ -620,7 +629,7 @@ ], "support": { "issues": "https://github.com/GrahamCampbell/Result-Type/issues", - "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.2" + "source": "https://github.com/GrahamCampbell/Result-Type/tree/v1.1.3" }, "funding": [ { @@ -632,20 +641,20 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:16:48+00:00" + "time": "2024-07-20T21:45:45+00:00" }, { "name": "guzzlehttp/uri-template", - "version": "v1.0.3", + "version": "v1.0.4", "source": { "type": "git", "url": "https://github.com/guzzle/uri-template.git", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c" + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/uri-template/zipball/ecea8feef63bd4fef1f037ecb288386999ecc11c", - "reference": "ecea8feef63bd4fef1f037ecb288386999ecc11c", + "url": "https://api.github.com/repos/guzzle/uri-template/zipball/30e286560c137526eccd4ce21b2de477ab0676d2", + "reference": "30e286560c137526eccd4ce21b2de477ab0676d2", "shasum": "" }, "require": { @@ -702,7 +711,7 @@ ], "support": { "issues": "https://github.com/guzzle/uri-template/issues", - "source": "https://github.com/guzzle/uri-template/tree/v1.0.3" + "source": "https://github.com/guzzle/uri-template/tree/v1.0.4" }, "funding": [ { @@ -718,24 +727,24 @@ "type": "tidelift" } ], - "time": "2023-12-03T19:50:20+00:00" + "time": "2025-02-03T10:55:03+00:00" }, { "name": "laravel/framework", - "version": "v10.35.0", + "version": "v10.48.29", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "91ec2d92d2f6007e9084fe06438b99c91845da69" + "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/91ec2d92d2f6007e9084fe06438b99c91845da69", - "reference": "91ec2d92d2f6007e9084fe06438b99c91845da69", + "url": "https://api.github.com/repos/laravel/framework/zipball/8f7f9247cb8aad1a769d6b9815a6623d89b46b47", + "reference": "8f7f9247cb8aad1a769d6b9815a6623d89b46b47", "shasum": "" }, "require": { - "brick/math": "^0.9.3|^0.10.2|^0.11", + "brick/math": "^0.9.3|^0.10.2|^0.11|^0.12", "composer-runtime-api": "^2.2", "doctrine/inflector": "^2.0.5", "dragonmantank/cron-expression": "^3.3.2", @@ -777,6 +786,10 @@ "voku/portable-ascii": "^2.0" }, "conflict": { + "carbonphp/carbon-doctrine-types": ">=3.0", + "doctrine/dbal": ">=4.0", + "mockery/mockery": "1.6.8", + "phpunit/phpunit": ">=11.0.0", "tightenco/collect": "<5.5.33" }, "provide": { @@ -832,9 +845,9 @@ "league/flysystem-sftp-v3": "^3.0", "mockery/mockery": "^1.5.1", "nyholm/psr7": "^1.2", - "orchestra/testbench-core": "^8.15.1", + "orchestra/testbench-core": "^8.23.4", "pda/pheanstalk": "^4.0", - "phpstan/phpstan": "^1.4.7", + "phpstan/phpstan": "~1.11.11", "phpunit/phpunit": "^10.0.7", "predis/predis": "^2.0.2", "symfony/cache": "^6.2", @@ -888,6 +901,7 @@ "files": [ "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", + "src/Illuminate/Filesystem/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" ], @@ -920,20 +934,20 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2023-12-05T14:50:33+00:00" + "time": "2025-03-12T14:42:01+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.13", + "version": "v0.1.25", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "e1379d8ead15edd6cc4369c22274345982edc95a" + "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/e1379d8ead15edd6cc4369c22274345982edc95a", - "reference": "e1379d8ead15edd6cc4369c22274345982edc95a", + "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", + "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", "shasum": "" }, "require": { @@ -949,7 +963,7 @@ "require-dev": { "mockery/mockery": "^1.5", "pestphp/pest": "^2.3", - "phpstan/phpstan": "^1.10", + "phpstan/phpstan": "^1.11", "phpstan/phpstan-mockery": "^1.1" }, "suggest": { @@ -973,34 +987,36 @@ "license": [ "MIT" ], + "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.13" + "source": "https://github.com/laravel/prompts/tree/v0.1.25" }, - "time": "2023-10-27T13:53:59+00:00" + "time": "2024-08-12T22:06:33+00:00" }, { "name": "laravel/serializable-closure", - "version": "v1.3.3", + "version": "v1.3.7", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "3dbf8a8e914634c48d389c1234552666b3d43754" + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/3dbf8a8e914634c48d389c1234552666b3d43754", - "reference": "3dbf8a8e914634c48d389c1234552666b3d43754", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/4f48ade902b94323ca3be7646db16209ec76be3d", + "reference": "4f48ade902b94323ca3be7646db16209ec76be3d", "shasum": "" }, "require": { "php": "^7.3|^8.0" }, "require-dev": { - "nesbot/carbon": "^2.61", + "illuminate/support": "^8.0|^9.0|^10.0|^11.0", + "nesbot/carbon": "^2.61|^3.0", "pestphp/pest": "^1.21.3", "phpstan/phpstan": "^1.8.2", - "symfony/var-dumper": "^5.4.11" + "symfony/var-dumper": "^5.4.11|^6.2.0|^7.0.0" }, "type": "library", "extra": { @@ -1037,20 +1053,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2023-11-08T14:08:06+00:00" + "time": "2024-11-14T18:34:49+00:00" }, { "name": "league/commonmark", - "version": "2.4.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5" + "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/3669d6d5f7a47a93c08ddff335e6d945481a1dd5", - "reference": "3669d6d5f7a47a93c08ddff335e6d945481a1dd5", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/6fbb36d44824ed4091adbcf4c7d4a3923cdb3405", + "reference": "6fbb36d44824ed4091adbcf4c7d4a3923cdb3405", "shasum": "" }, "require": { @@ -1063,8 +1079,8 @@ }, "require-dev": { "cebe/markdown": "^1.0", - "commonmark/cmark": "0.30.0", - "commonmark/commonmark.js": "0.30.0", + "commonmark/cmark": "0.31.1", + "commonmark/commonmark.js": "0.31.1", "composer/package-versions-deprecated": "^1.8", "embed/embed": "^4.4", "erusev/parsedown": "^1.0", @@ -1073,10 +1089,11 @@ "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", "phpstan/phpstan": "^1.8.2", - "phpunit/phpunit": "^9.5.21", + "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -1086,7 +1103,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.5-dev" + "dev-main": "2.8-dev" } }, "autoload": { @@ -1143,7 +1160,7 @@ "type": "tidelift" } ], - "time": "2023-08-30T16:55:00+00:00" + "time": "2025-05-05T12:20:28+00:00" }, { "name": "league/config", @@ -1229,16 +1246,16 @@ }, { "name": "league/flysystem", - "version": "3.23.0", + "version": "3.29.1", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc" + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc", - "reference": "d4ad81e2b67396e33dc9d7e54ec74ccf73151dcc", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/edc1bb7c86fab0776c3287dbd19b5fa278347319", + "reference": "edc1bb7c86fab0776c3287dbd19b5fa278347319", "shasum": "" }, "require": { @@ -1258,18 +1275,21 @@ "require-dev": { "async-aws/s3": "^1.5 || ^2.0", "async-aws/simple-s3": "^1.1 || ^2.0", - "aws/aws-sdk-php": "^3.220.0", + "aws/aws-sdk-php": "^3.295.10", "composer/semver": "^3.0", "ext-fileinfo": "*", "ext-ftp": "*", + "ext-mongodb": "^1.3", "ext-zip": "*", "friendsofphp/php-cs-fixer": "^3.5", "google/cloud-storage": "^1.23", + "guzzlehttp/psr7": "^2.6", "microsoft/azure-storage-blob": "^1.1", - "phpseclib/phpseclib": "^3.0.34", + "mongodb/mongodb": "^1.2", + "phpseclib/phpseclib": "^3.0.36", "phpstan/phpstan": "^1.10", "phpunit/phpunit": "^9.5.11|^10.0", - "sabre/dav": "^4.3.1" + "sabre/dav": "^4.6.0" }, "type": "library", "autoload": { @@ -1303,32 +1323,22 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.23.0" + "source": "https://github.com/thephpleague/flysystem/tree/3.29.1" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-12-04T10:16:17+00:00" + "time": "2024-10-08T08:58:34+00:00" }, { "name": "league/flysystem-local", - "version": "3.23.0", + "version": "3.29.0", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem-local.git", - "reference": "5cf046ba5f059460e86a997c504dd781a39a109b" + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/5cf046ba5f059460e86a997c504dd781a39a109b", - "reference": "5cf046ba5f059460e86a997c504dd781a39a109b", + "url": "https://api.github.com/repos/thephpleague/flysystem-local/zipball/e0e8d52ce4b2ed154148453d321e97c8e931bd27", + "reference": "e0e8d52ce4b2ed154148453d321e97c8e931bd27", "shasum": "" }, "require": { @@ -1362,33 +1372,22 @@ "local" ], "support": { - "issues": "https://github.com/thephpleague/flysystem-local/issues", - "source": "https://github.com/thephpleague/flysystem-local/tree/3.23.0" + "source": "https://github.com/thephpleague/flysystem-local/tree/3.29.0" }, - "funding": [ - { - "url": "https://ecologi.com/frankdejonge", - "type": "custom" - }, - { - "url": "https://github.com/frankdejonge", - "type": "github" - } - ], - "time": "2023-12-04T10:14:46+00:00" + "time": "2024-08-09T21:24:39+00:00" }, { "name": "league/mime-type-detection", - "version": "1.14.0", + "version": "1.16.0", "source": { "type": "git", "url": "https://github.com/thephpleague/mime-type-detection.git", - "reference": "b6a5854368533df0295c5761a0253656a2e52d9e" + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/b6a5854368533df0295c5761a0253656a2e52d9e", - "reference": "b6a5854368533df0295c5761a0253656a2e52d9e", + "url": "https://api.github.com/repos/thephpleague/mime-type-detection/zipball/2d6702ff215bf922936ccc1ad31007edc76451b9", + "reference": "2d6702ff215bf922936ccc1ad31007edc76451b9", "shasum": "" }, "require": { @@ -1419,7 +1418,7 @@ "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.14.0" + "source": "https://github.com/thephpleague/mime-type-detection/tree/1.16.0" }, "funding": [ { @@ -1431,20 +1430,20 @@ "type": "tidelift" } ], - "time": "2023-10-17T14:13:20+00:00" + "time": "2024-09-21T08:32:55+00:00" }, { "name": "monolog/monolog", - "version": "3.5.0", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448" + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/c915e2634718dbc8a4a15c61b0e62e7a44e14448", - "reference": "c915e2634718dbc8a4a15c61b0e62e7a44e14448", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/10d85740180ecba7896c87e06a166e0c95a0e3b6", + "reference": "10d85740180ecba7896c87e06a166e0c95a0e3b6", "shasum": "" }, "require": { @@ -1464,12 +1463,14 @@ "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": "^10.1", + "php-console/php-console": "^3.1.8", + "phpstan/phpstan": "^2", + "phpstan/phpstan-deprecation-rules": "^2", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "^10.5.17 || ^11.0.7", "predis/predis": "^1.1 || ^2", - "ruflin/elastica": "^7", + "rollbar/rollbar": "^4.0", + "ruflin/elastica": "^7 || ^8", "symfony/mailer": "^5.4 || ^6", "symfony/mime": "^5.4 || ^6" }, @@ -1520,7 +1521,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.5.0" + "source": "https://github.com/Seldaek/monolog/tree/3.9.0" }, "funding": [ { @@ -1532,20 +1533,20 @@ "type": "tidelift" } ], - "time": "2023-10-27T15:32:31+00:00" + "time": "2025-03-24T10:02:05+00:00" }, { "name": "nesbot/carbon", - "version": "2.72.0", + "version": "2.73.0", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "a6885fcbad2ec4360b0e200ee0da7d9b7c90786b" + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/a6885fcbad2ec4360b0e200ee0da7d9b7c90786b", - "reference": "a6885fcbad2ec4360b0e200ee0da7d9b7c90786b", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/9228ce90e1035ff2f0db84b40ec2e023ed802075", + "reference": "9228ce90e1035ff2f0db84b40ec2e023ed802075", "shasum": "" }, "require": { @@ -1565,7 +1566,7 @@ "doctrine/orm": "^2.7 || ^3.0", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", + "ondrejmirtes/better-reflection": "<6", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.99 || ^1.7.14", @@ -1578,10 +1579,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-3.x": "3.x-dev", - "dev-master": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -1591,6 +1588,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -1639,35 +1640,35 @@ "type": "tidelift" } ], - "time": "2023-11-28T10:13:25+00:00" + "time": "2025-01-08T20:10:23+00:00" }, { "name": "nette/schema", - "version": "v1.2.5", + "version": "v1.3.2", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a" + "reference": "da801d52f0354f70a638673c4a0f04e16529431d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/0462f0166e823aad657c9224d0f849ecac1ba10a", - "reference": "0462f0166e823aad657c9224d0f849ecac1ba10a", + "url": "https://api.github.com/repos/nette/schema/zipball/da801d52f0354f70a638673c4a0f04e16529431d", + "reference": "da801d52f0354f70a638673c4a0f04e16529431d", "shasum": "" }, "require": { - "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": "7.1 - 8.3" + "nette/utils": "^4.0", + "php": "8.1 - 8.4" }, "require-dev": { - "nette/tester": "^2.3 || ^2.4", + "nette/tester": "^2.5.2", "phpstan/phpstan-nette": "^1.0", - "tracy/tracy": "^2.7" + "tracy/tracy": "^2.8" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.2-dev" + "dev-master": "1.3-dev" } }, "autoload": { @@ -1699,26 +1700,26 @@ ], "support": { "issues": "https://github.com/nette/schema/issues", - "source": "https://github.com/nette/schema/tree/v1.2.5" + "source": "https://github.com/nette/schema/tree/v1.3.2" }, - "time": "2023-10-05T20:37:59+00:00" + "time": "2024-10-06T23:10:23+00:00" }, { "name": "nette/utils", - "version": "v4.0.3", + "version": "v4.0.7", "source": { "type": "git", "url": "https://github.com/nette/utils.git", - "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015" + "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/utils/zipball/a9d127dd6a203ce6d255b2e2db49759f7506e015", - "reference": "a9d127dd6a203ce6d255b2e2db49759f7506e015", + "url": "https://api.github.com/repos/nette/utils/zipball/e67c4061eb40b9c113b218214e42cb5a0dda28f2", + "reference": "e67c4061eb40b9c113b218214e42cb5a0dda28f2", "shasum": "" }, "require": { - "php": ">=8.0 <8.4" + "php": "8.0 - 8.4" }, "conflict": { "nette/finder": "<3", @@ -1785,39 +1786,38 @@ ], "support": { "issues": "https://github.com/nette/utils/issues", - "source": "https://github.com/nette/utils/tree/v4.0.3" + "source": "https://github.com/nette/utils/tree/v4.0.7" }, - "time": "2023-10-29T21:02:13+00:00" + "time": "2025-06-03T04:55:08+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.15.1", + "version": "v1.17.0", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc" + "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/8ab0b32c8caa4a2e09700ea32925441385e4a5dc", - "reference": "8ab0b32c8caa4a2e09700ea32925441385e4a5dc", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/5369ef84d8142c1d87e4ec278711d4ece3cbf301", + "reference": "5369ef84d8142c1d87e4ec278711d4ece3cbf301", "shasum": "" }, "require": { "ext-mbstring": "*", - "php": "^8.0", - "symfony/console": "^5.3.0|^6.0.0" + "php": "^8.1", + "symfony/console": "^6.4.15" }, "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", + "illuminate/console": "^10.48.24", + "illuminate/support": "^10.48.24", + "laravel/pint": "^1.18.2", + "pestphp/pest": "^2.36.0", + "pestphp/pest-plugin-mock": "2.0.0", + "phpstan/phpstan": "^1.12.11", + "phpstan/phpstan-strict-rules": "^1.6.1", + "symfony/var-dumper": "^6.4.15", "thecodingmachine/phpstan-strict-rules": "^1.0.0" }, "type": "library", @@ -1857,7 +1857,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.15.1" + "source": "https://github.com/nunomaduro/termwind/tree/v1.17.0" }, "funding": [ { @@ -1873,20 +1873,20 @@ "type": "github" } ], - "time": "2023-02-08T01:06:31+00:00" + "time": "2024-11-21T10:36:35+00:00" }, { "name": "phpoption/phpoption", - "version": "1.9.2", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/schmittjoh/php-option.git", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820" + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/80735db690fe4fc5c76dfa7f9b770634285fa820", - "reference": "80735db690fe4fc5c76dfa7f9b770634285fa820", + "url": "https://api.github.com/repos/schmittjoh/php-option/zipball/e3fac8b24f56113f7cb96af14958c0dd16330f54", + "reference": "e3fac8b24f56113f7cb96af14958c0dd16330f54", "shasum": "" }, "require": { @@ -1894,13 +1894,13 @@ }, "require-dev": { "bamarni/composer-bin-plugin": "^1.8.2", - "phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2" + "phpunit/phpunit": "^8.5.39 || ^9.6.20 || ^10.5.28" }, "type": "library", "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "1.9-dev" @@ -1936,7 +1936,7 @@ ], "support": { "issues": "https://github.com/schmittjoh/php-option/issues", - "source": "https://github.com/schmittjoh/php-option/tree/1.9.2" + "source": "https://github.com/schmittjoh/php-option/tree/1.9.3" }, "funding": [ { @@ -1948,7 +1948,7 @@ "type": "tidelift" } ], - "time": "2023-11-12T21:59:55+00:00" + "time": "2024-07-20T21:41:07+00:00" }, { "name": "psr/clock", @@ -2103,16 +2103,16 @@ }, { "name": "psr/log", - "version": "3.0.0", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001" + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001", - "reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001", + "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", + "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3", "shasum": "" }, "require": { @@ -2147,9 +2147,9 @@ "psr-3" ], "support": { - "source": "https://github.com/php-fig/log/tree/3.0.0" + "source": "https://github.com/php-fig/log/tree/3.0.2" }, - "time": "2021-07-14T16:46:02+00:00" + "time": "2024-09-11T13:17:53+00:00" }, { "name": "psr/simple-cache", @@ -2204,16 +2204,16 @@ }, { "name": "ramsey/collection", - "version": "2.0.0", + "version": "2.1.1", "source": { "type": "git", "url": "https://github.com/ramsey/collection.git", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5" + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/collection/zipball/a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", - "reference": "a4b48764bfbb8f3a6a4d1aeb1a35bb5e9ecac4a5", + "url": "https://api.github.com/repos/ramsey/collection/zipball/344572933ad0181accbf4ba763e85a0306a8c5e2", + "reference": "344572933ad0181accbf4ba763e85a0306a8c5e2", "shasum": "" }, "require": { @@ -2221,25 +2221,22 @@ }, "require-dev": { "captainhook/plugin-composer": "^5.3", - "ergebnis/composer-normalize": "^2.28.3", - "fakerphp/faker": "^1.21", + "ergebnis/composer-normalize": "^2.45", + "fakerphp/faker": "^1.24", "hamcrest/hamcrest-php": "^2.0", - "jangregor/phpstan-prophecy": "^1.0", - "mockery/mockery": "^1.5", + "jangregor/phpstan-prophecy": "^2.1", + "mockery/mockery": "^1.6", "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" + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpspec/prophecy-phpunit": "^2.3", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^10.5", + "ramsey/coding-standard": "^2.3", + "ramsey/conventional-commits": "^1.6", + "roave/security-advisories": "dev-latest" }, "type": "library", "extra": { @@ -2277,36 +2274,26 @@ ], "support": { "issues": "https://github.com/ramsey/collection/issues", - "source": "https://github.com/ramsey/collection/tree/2.0.0" + "source": "https://github.com/ramsey/collection/tree/2.1.1" }, - "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" + "time": "2025-03-22T05:38:12+00:00" }, { "name": "ramsey/uuid", - "version": "4.7.5", + "version": "4.8.1", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e" + "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", - "reference": "5f0df49ae5ad6efb7afa69e6bfab4e5b1e080d8e", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28", + "reference": "fdf4dd4e2ff1813111bd0ad58d7a1ddbb5b56c28", "shasum": "" }, "require": { - "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11", + "brick/math": "^0.8.8 || ^0.9 || ^0.10 || ^0.11 || ^0.12 || ^0.13", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.2 || ^2.0" @@ -2315,26 +2302,23 @@ "rhumsaa/uuid": "self.version" }, "require-dev": { - "captainhook/captainhook": "^5.10", + "captainhook/captainhook": "^5.25", "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", + "dealerdirect/phpcodesniffer-composer-installer": "^1.0", + "ergebnis/composer-normalize": "^2.47", + "mockery/mockery": "^1.6", "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" + "php-mock/php-mock": "^2.6", + "php-mock/php-mock-mockery": "^1.5", + "php-parallel-lint/php-parallel-lint": "^1.4.0", + "phpbench/phpbench": "^1.2.14", + "phpstan/extension-installer": "^1.4", + "phpstan/phpstan": "^2.1", + "phpstan/phpstan-mockery": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^9.6", + "slevomat/coding-standard": "^8.18", + "squizlabs/php_codesniffer": "^3.13" }, "suggest": { "ext-bcmath": "Enables faster math with arbitrary-precision integers using BCMath.", @@ -2369,32 +2353,22 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.7.5" + "source": "https://github.com/ramsey/uuid/tree/4.8.1" }, - "funding": [ - { - "url": "https://github.com/ramsey", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/ramsey/uuid", - "type": "tidelift" - } - ], - "time": "2023-11-08T05:53:05+00:00" + "time": "2025-06-01T06:28:46+00:00" }, { "name": "symfony/console", - "version": "v6.4.1", + "version": "v6.4.22", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "a550a7c99daeedef3f9d23fb82e3531525ff11fd" + "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/a550a7c99daeedef3f9d23fb82e3531525ff11fd", - "reference": "a550a7c99daeedef3f9d23fb82e3531525ff11fd", + "url": "https://api.github.com/repos/symfony/console/zipball/7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3", + "reference": "7d29659bc3c9d8e9a34e2c3414ef9e9e003e6cf3", "shasum": "" }, "require": { @@ -2459,7 +2433,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.1" + "source": "https://github.com/symfony/console/tree/v6.4.22" }, "funding": [ { @@ -2475,24 +2449,24 @@ "type": "tidelift" } ], - "time": "2023-11-30T10:54:28+00:00" + "time": "2025-05-07T07:05:04+00:00" }, { "name": "symfony/css-selector", - "version": "v6.4.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/d036c6c0d0b09e24a14a35f8292146a658f986e4", - "reference": "d036c6c0d0b09e24a14a35f8292146a658f986e4", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { - "php": ">=8.1" + "php": ">=8.2" }, "type": "library", "autoload": { @@ -2524,7 +2498,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.4.0" + "source": "https://github.com/symfony/css-selector/tree/v7.3.0" }, "funding": [ { @@ -2540,20 +2514,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:40:20+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf" + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf", - "reference": "7c3aff79d10325257a001fcf92d991f24fc967cf", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/63afe740e99a13ba87ec199bb07bbdee937a5b62", + "reference": "63afe740e99a13ba87ec199bb07bbdee937a5b62", "shasum": "" }, "require": { @@ -2561,12 +2535,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -2591,7 +2565,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.4.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.6.0" }, "funding": [ { @@ -2607,20 +2581,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.0", + "version": "v6.4.22", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788" + "reference": "ce765a2d28b3cce61de1fb916e207767a73171d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/c873490a1c97b3a0a4838afc36ff36c112d02788", - "reference": "c873490a1c97b3a0a4838afc36ff36c112d02788", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/ce765a2d28b3cce61de1fb916e207767a73171d1", + "reference": "ce765a2d28b3cce61de1fb916e207767a73171d1", "shasum": "" }, "require": { @@ -2666,7 +2640,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.4.0" + "source": "https://github.com/symfony/error-handler/tree/v6.4.22" }, "funding": [ { @@ -2682,28 +2656,28 @@ "type": "tidelift" } ], - "time": "2023-10-18T09:43:34+00:00" + "time": "2025-05-28T12:00:15+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.4.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6" + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/d76d2632cfc2206eecb5ad2b26cd5934082941b6", - "reference": "d76d2632cfc2206eecb5ad2b26cd5934082941b6", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/497f73ac996a598c92409b44ac43b6690c4f666d", + "reference": "497f73ac996a598c92409b44ac43b6690c4f666d", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/event-dispatcher-contracts": "^2.5|^3" }, "conflict": { - "symfony/dependency-injection": "<5.4", + "symfony/dependency-injection": "<6.4", "symfony/service-contracts": "<2.5" }, "provide": { @@ -2712,13 +2686,13 @@ }, "require-dev": { "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0|^7.0", - "symfony/dependency-injection": "^5.4|^6.0|^7.0", - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/expression-language": "^5.4|^6.0|^7.0", - "symfony/http-foundation": "^5.4|^6.0|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/error-handler": "^6.4|^7.0", + "symfony/expression-language": "^6.4|^7.0", + "symfony/http-foundation": "^6.4|^7.0", "symfony/service-contracts": "^2.5|^3", - "symfony/stopwatch": "^5.4|^6.0|^7.0" + "symfony/stopwatch": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -2746,7 +2720,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.4.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.3.0" }, "funding": [ { @@ -2762,20 +2736,20 @@ "type": "tidelift" } ], - "time": "2023-07-27T06:52:43+00:00" + "time": "2025-04-22T09:11:45+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df" + "reference": "59eb412e93815df44f05f342958efa9f46b1e586" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/a76aed96a42d2b521153fb382d418e30d18b59df", - "reference": "a76aed96a42d2b521153fb382d418e30d18b59df", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/59eb412e93815df44f05f342958efa9f46b1e586", + "reference": "59eb412e93815df44f05f342958efa9f46b1e586", "shasum": "" }, "require": { @@ -2784,12 +2758,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -2822,7 +2796,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.6.0" }, "funding": [ { @@ -2838,20 +2812,20 @@ "type": "tidelift" } ], - "time": "2023-05-23T14:45:45+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/finder", - "version": "v6.4.0", + "version": "v6.4.17", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce" + "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/11d736e97f116ac375a81f96e662911a34cd50ce", - "reference": "11d736e97f116ac375a81f96e662911a34cd50ce", + "url": "https://api.github.com/repos/symfony/finder/zipball/1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", + "reference": "1d0e8266248c5d9ab6a87e3789e6dc482af3c9c7", "shasum": "" }, "require": { @@ -2886,7 +2860,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.0" + "source": "https://github.com/symfony/finder/tree/v6.4.17" }, "funding": [ { @@ -2902,20 +2876,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T17:30:12+00:00" + "time": "2024-12-29T13:51:37+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.4.0", + "version": "v6.4.22", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "44a6d39a9cc11e154547d882d5aac1e014440771" + "reference": "6b7c97fe1ddac8df3cc9ba6410c8abc683e148ae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/44a6d39a9cc11e154547d882d5aac1e014440771", - "reference": "44a6d39a9cc11e154547d882d5aac1e014440771", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6b7c97fe1ddac8df3cc9ba6410c8abc683e148ae", + "reference": "6b7c97fe1ddac8df3cc9ba6410c8abc683e148ae", "shasum": "" }, "require": { @@ -2925,12 +2899,12 @@ "symfony/polyfill-php83": "^1.27" }, "conflict": { - "symfony/cache": "<6.3" + "symfony/cache": "<6.4.12|>=7.0,<7.1.5" }, "require-dev": { "doctrine/dbal": "^2.13.1|^3|^4", "predis/predis": "^1.1|^2.0", - "symfony/cache": "^6.3|^7.0", + "symfony/cache": "^6.4.12|^7.1.5", "symfony/dependency-injection": "^5.4|^6.0|^7.0", "symfony/expression-language": "^5.4|^6.0|^7.0", "symfony/http-kernel": "^5.4.12|^6.0.12|^6.1.4|^7.0", @@ -2963,7 +2937,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.4.0" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.22" }, "funding": [ { @@ -2979,20 +2953,20 @@ "type": "tidelift" } ], - "time": "2023-11-20T16:41:16+00:00" + "time": "2025-05-11T15:36:20+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.1", + "version": "v6.4.22", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "2953274c16a229b3933ef73a6898e18388e12e1b" + "reference": "15c105b839a7cfa1bc0989c091bfb6477f23b673" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2953274c16a229b3933ef73a6898e18388e12e1b", - "reference": "2953274c16a229b3933ef73a6898e18388e12e1b", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/15c105b839a7cfa1bc0989c091bfb6477f23b673", + "reference": "15c105b839a7cfa1bc0989c091bfb6477f23b673", "shasum": "" }, "require": { @@ -3041,12 +3015,13 @@ "symfony/process": "^5.4|^6.0|^7.0", "symfony/property-access": "^5.4.5|^6.0.5|^7.0", "symfony/routing": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3|^7.0", + "symfony/serializer": "^6.4.4|^7.0.4", "symfony/stopwatch": "^5.4|^6.0|^7.0", "symfony/translation": "^5.4|^6.0|^7.0", "symfony/translation-contracts": "^2.5|^3", "symfony/uid": "^5.4|^6.0|^7.0", "symfony/validator": "^6.4|^7.0", + "symfony/var-dumper": "^5.4|^6.4|^7.0", "symfony/var-exporter": "^6.2|^7.0", "twig/twig": "^2.13|^3.0.4" }, @@ -3076,7 +3051,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.4.1" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.22" }, "funding": [ { @@ -3092,20 +3067,20 @@ "type": "tidelift" } ], - "time": "2023-12-01T17:02:02+00:00" + "time": "2025-05-29T07:23:40+00:00" }, { "name": "symfony/mailer", - "version": "v6.4.0", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba" + "reference": "ada2809ccd4ec27aba9fc344e3efdaec624c6438" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", - "reference": "ca8dcf8892cdc5b4358ecf2528429bb5e706f7ba", + "url": "https://api.github.com/repos/symfony/mailer/zipball/ada2809ccd4ec27aba9fc344e3efdaec624c6438", + "reference": "ada2809ccd4ec27aba9fc344e3efdaec624c6438", "shasum": "" }, "require": { @@ -3156,7 +3131,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.0" + "source": "https://github.com/symfony/mailer/tree/v6.4.21" }, "funding": [ { @@ -3172,20 +3147,20 @@ "type": "tidelift" } ], - "time": "2023-11-12T18:02:22+00:00" + "time": "2025-04-26T23:47:35+00:00" }, { "name": "symfony/mime", - "version": "v6.4.0", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205" + "reference": "fec8aa5231f3904754955fad33c2db50594d22d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", - "reference": "ca4f58b2ef4baa8f6cecbeca2573f88cd577d205", + "url": "https://api.github.com/repos/symfony/mime/zipball/fec8aa5231f3904754955fad33c2db50594d22d1", + "reference": "fec8aa5231f3904754955fad33c2db50594d22d1", "shasum": "" }, "require": { @@ -3199,16 +3174,17 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "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|^7.0", + "symfony/process": "^5.4|^6.4|^7.0", "symfony/property-access": "^5.4|^6.0|^7.0", "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3.2|^7.0" + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -3240,7 +3216,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.0" + "source": "https://github.com/symfony/mime/tree/v6.4.21" }, "funding": [ { @@ -3256,24 +3232,24 @@ "type": "tidelift" } ], - "time": "2023-10-17T11:49:05+00:00" + "time": "2025-04-27T13:27:38+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.28.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb" + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", - "reference": "ea208ce43cbb04af6867b4fdddb1bdbf84cc28cb", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/a3cc8b044a6ea513310cbd48ef7333b384945638", + "reference": "a3cc8b044a6ea513310cbd48ef7333b384945638", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-ctype": "*" @@ -3283,12 +3259,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3322,7 +3295,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.32.0" }, "funding": [ { @@ -3338,36 +3311,33 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.28.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "875e90aeea2777b6f135677f618529449334a612" + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/875e90aeea2777b6f135677f618529449334a612", - "reference": "875e90aeea2777b6f135677f618529449334a612", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", + "reference": "b9123926e3b7bc2f98c02ad54f6a4b02b91a8abe", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3403,7 +3373,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.32.0" }, "funding": [ { @@ -3419,38 +3389,34 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.28.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d" + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/ecaafce9f77234a6a449d29e49267ba10499116d", - "reference": "ecaafce9f77234a6a449d29e49267ba10499116d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/9614ac4d8061dc257ecc64cba1b140873dce8ad3", + "reference": "9614ac4d8061dc257ecc64cba1b140873dce8ad3", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-intl-normalizer": "^1.10", - "symfony/polyfill-php72": "^1.10" + "php": ">=7.2", + "symfony/polyfill-intl-normalizer": "^1.10" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3490,7 +3456,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.32.0" }, "funding": [ { @@ -3506,36 +3472,33 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:30:37+00:00" + "time": "2024-09-10T14:38:51+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.28.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92" + "reference": "3833d7255cc303546435cb650316bff708a1c75c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", - "reference": "8c4ad05dd0120b6a53c1ca374dca2ad0a1c4ed92", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/3833d7255cc303546435cb650316bff708a1c75c", + "reference": "3833d7255cc303546435cb650316bff708a1c75c", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "suggest": { "ext-intl": "For best performance" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3574,7 +3537,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.32.0" }, "funding": [ { @@ -3590,24 +3553,25 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.28.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "42292d99c55abe617799667f454222c54c60e229" + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/42292d99c55abe617799667f454222c54c60e229", - "reference": "42292d99c55abe617799667f454222c54c60e229", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/6d857f4d76bd4b343eac26d6b539585d2bc56493", + "reference": "6d857f4d76bd4b343eac26d6b539585d2bc56493", "shasum": "" }, "require": { - "php": ">=7.1" + "ext-iconv": "*", + "php": ">=7.2" }, "provide": { "ext-mbstring": "*" @@ -3617,12 +3581,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3657,83 +3618,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.28.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": "2023-07-28T09:04:16+00:00" - }, - { - "name": "symfony/polyfill-php72", - "version": "v1.28.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/70f4aebd92afca2f865444d30a4d2151c13c3179", - "reference": "70f4aebd92afca2f865444d30a4d2151c13c3179", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.28-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.28.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.32.0" }, "funding": [ { @@ -3749,33 +3634,30 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-12-23T08:48:59+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.28.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5" + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/6caa57379c4aec19c0a12a38b59b26487dcfe4b5", - "reference": "6caa57379c4aec19c0a12a38b59b26487dcfe4b5", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/0cc9dd0f17f61d8131e7df6b84bd344899fe2608", + "reference": "0cc9dd0f17f61d8131e7df6b84bd344899fe2608", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3816,7 +3698,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.32.0" }, "funding": [ { @@ -3832,34 +3714,30 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2025-01-02T08:10:11+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.28.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11" + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", - "reference": "b0f46ebbeeeda3e9d2faebdfbf4b4eae9b59fa11", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/2fb86d65e2d424369ad2905e83b236a8805ba491", + "reference": "2fb86d65e2d424369ad2905e83b236a8805ba491", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3896,7 +3774,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.32.0" }, "funding": [ { @@ -3912,24 +3790,24 @@ "type": "tidelift" } ], - "time": "2023-08-16T06:22:46+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.28.0", + "version": "v1.32.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e" + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/9c44518a5aff8da565c8a55dbe85d2769e6f630e", - "reference": "9c44518a5aff8da565c8a55dbe85d2769e6f630e", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/21533be36c24be3f4b1669c4725c7d1d2bab4ae2", + "reference": "21533be36c24be3f4b1669c4725c7d1d2bab4ae2", "shasum": "" }, "require": { - "php": ">=7.1" + "php": ">=7.2" }, "provide": { "ext-uuid": "*" @@ -3939,12 +3817,9 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.28-dev" - }, "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -3978,7 +3853,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.28.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.32.0" }, "funding": [ { @@ -3994,20 +3869,20 @@ "type": "tidelift" } ], - "time": "2023-01-26T09:26:14+00:00" + "time": "2024-09-09T11:45:10+00:00" }, { "name": "symfony/process", - "version": "v6.4.0", + "version": "v6.4.20", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa" + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/191703b1566d97a5425dc969e4350d32b8ef17aa", - "reference": "191703b1566d97a5425dc969e4350d32b8ef17aa", + "url": "https://api.github.com/repos/symfony/process/zipball/e2a61c16af36c9a07e5c9906498b73e091949a20", + "reference": "e2a61c16af36c9a07e5c9906498b73e091949a20", "shasum": "" }, "require": { @@ -4039,7 +3914,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.4.0" + "source": "https://github.com/symfony/process/tree/v6.4.20" }, "funding": [ { @@ -4055,20 +3930,20 @@ "type": "tidelift" } ], - "time": "2023-11-17T21:06:49+00:00" + "time": "2025-03-10T17:11:00+00:00" }, { "name": "symfony/routing", - "version": "v6.4.1", + "version": "v6.4.22", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "0c95c164fdba18b12523b75e64199ca3503e6d40" + "reference": "1f5234e8457164a3a0038a4c0a4ba27876a9c670" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/0c95c164fdba18b12523b75e64199ca3503e6d40", - "reference": "0c95c164fdba18b12523b75e64199ca3503e6d40", + "url": "https://api.github.com/repos/symfony/routing/zipball/1f5234e8457164a3a0038a4c0a4ba27876a9c670", + "reference": "1f5234e8457164a3a0038a4c0a4ba27876a9c670", "shasum": "" }, "require": { @@ -4122,7 +3997,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.1" + "source": "https://github.com/symfony/routing/tree/v6.4.22" }, "funding": [ { @@ -4138,37 +4013,38 @@ "type": "tidelift" } ], - "time": "2023-12-01T14:54:37+00:00" + "time": "2025-04-27T16:08:38+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838" + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838", - "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f021b05a130d35510bd6b25fe9053c2a8a15d5d4", + "reference": "f021b05a130d35510bd6b25fe9053c2a8a15d5d4", "shasum": "" }, "require": { "php": ">=8.1", - "psr/container": "^2.0" + "psr/container": "^1.1|^2.0", + "symfony/deprecation-contracts": "^2.5|^3" }, "conflict": { "ext-psr": "<1.1|>=2" }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -4204,7 +4080,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.6.0" }, "funding": [ { @@ -4220,24 +4096,24 @@ "type": "tidelift" } ], - "time": "2023-07-30T20:28:31+00:00" + "time": "2025-04-25T09:37:31+00:00" }, { "name": "symfony/string", - "version": "v6.4.0", + "version": "v7.3.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809" + "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/b45fcf399ea9c3af543a92edf7172ba21174d809", - "reference": "b45fcf399ea9c3af543a92edf7172ba21174d809", + "url": "https://api.github.com/repos/symfony/string/zipball/f3570b8c61ca887a9e2938e85cb6458515d2b125", + "reference": "f3570b8c61ca887a9e2938e85cb6458515d2b125", "shasum": "" }, "require": { - "php": ">=8.1", + "php": ">=8.2", "symfony/polyfill-ctype": "~1.8", "symfony/polyfill-intl-grapheme": "~1.0", "symfony/polyfill-intl-normalizer": "~1.0", @@ -4247,11 +4123,12 @@ "symfony/translation-contracts": "<2.5" }, "require-dev": { - "symfony/error-handler": "^5.4|^6.0|^7.0", - "symfony/http-client": "^5.4|^6.0|^7.0", - "symfony/intl": "^6.2|^7.0", + "symfony/emoji": "^7.1", + "symfony/error-handler": "^6.4|^7.0", + "symfony/http-client": "^6.4|^7.0", + "symfony/intl": "^6.4|^7.0", "symfony/translation-contracts": "^2.5|^3.0", - "symfony/var-exporter": "^5.4|^6.0|^7.0" + "symfony/var-exporter": "^6.4|^7.0" }, "type": "library", "autoload": { @@ -4290,7 +4167,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.0" + "source": "https://github.com/symfony/string/tree/v7.3.0" }, "funding": [ { @@ -4306,20 +4183,20 @@ "type": "tidelift" } ], - "time": "2023-11-28T20:41:49+00:00" + "time": "2025-04-20T20:19:01+00:00" }, { "name": "symfony/translation", - "version": "v6.4.0", + "version": "v6.4.22", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37" + "reference": "7e3b3b7146c6fab36ddff304a8041174bf6e17ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", - "reference": "b1035dbc2a344b21f8fa8ac451c7ecec4ea45f37", + "url": "https://api.github.com/repos/symfony/translation/zipball/7e3b3b7146c6fab36ddff304a8041174bf6e17ad", + "reference": "7e3b3b7146c6fab36ddff304a8041174bf6e17ad", "shasum": "" }, "require": { @@ -4342,7 +4219,7 @@ "symfony/translation-implementation": "2.3|3.0" }, "require-dev": { - "nikic/php-parser": "^4.13", + "nikic/php-parser": "^4.18|^5.0", "psr/log": "^1|^2|^3", "symfony/config": "^5.4|^6.0|^7.0", "symfony/console": "^5.4|^6.0|^7.0", @@ -4385,7 +4262,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.0" + "source": "https://github.com/symfony/translation/tree/v6.4.22" }, "funding": [ { @@ -4401,20 +4278,20 @@ "type": "tidelift" } ], - "time": "2023-11-29T08:14:36+00:00" + "time": "2025-05-29T07:06:44+00:00" }, { "name": "symfony/translation-contracts", - "version": "v3.4.0", + "version": "v3.6.0", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5" + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/dee0c6e5b4c07ce851b462530088e64b255ac9c5", - "reference": "dee0c6e5b4c07ce851b462530088e64b255ac9c5", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/df210c7a2573f1913b2d17cc95f90f53a73d8f7d", + "reference": "df210c7a2573f1913b2d17cc95f90f53a73d8f7d", "shasum": "" }, "require": { @@ -4422,12 +4299,12 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "3.4-dev" - }, "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, + "branch-alias": { + "dev-main": "3.6-dev" } }, "autoload": { @@ -4463,7 +4340,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.4.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.6.0" }, "funding": [ { @@ -4479,20 +4356,20 @@ "type": "tidelift" } ], - "time": "2023-07-25T15:08:44+00:00" + "time": "2024-09-27T08:32:26+00:00" }, { "name": "symfony/uid", - "version": "v6.4.0", + "version": "v6.4.13", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92" + "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/8092dd1b1a41372110d06374f99ee62f7f0b9a92", - "reference": "8092dd1b1a41372110d06374f99ee62f7f0b9a92", + "url": "https://api.github.com/repos/symfony/uid/zipball/18eb207f0436a993fffbdd811b5b8fa35fa5e007", + "reference": "18eb207f0436a993fffbdd811b5b8fa35fa5e007", "shasum": "" }, "require": { @@ -4537,7 +4414,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.4.0" + "source": "https://github.com/symfony/uid/tree/v6.4.13" }, "funding": [ { @@ -4553,20 +4430,20 @@ "type": "tidelift" } ], - "time": "2023-10-31T08:18:17+00:00" + "time": "2024-09-25T14:18:03+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.0", + "version": "v6.4.21", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6" + "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c40f7d17e91d8b407582ed51a2bbf83c52c367f6", - "reference": "c40f7d17e91d8b407582ed51a2bbf83c52c367f6", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", + "reference": "22560f80c0c5cd58cc0bcaf73455ffd81eb380d5", "shasum": "" }, "require": { @@ -4622,7 +4499,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.0" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.21" }, "funding": [ { @@ -4638,35 +4515,37 @@ "type": "tidelift" } ], - "time": "2023-11-09T08:28:32+00:00" + "time": "2025-04-09T07:34:50+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "2.2.6", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c" + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/c42125b83a4fa63b187fdf29f9c93cb7733da30c", - "reference": "c42125b83a4fa63b187fdf29f9c93cb7733da30c", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", "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" + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -4689,29 +4568,29 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/2.2.6" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" }, - "time": "2023-01-03T09:29:04+00:00" + "time": "2024-12-21T16:25:41+00:00" }, { "name": "vlucas/phpdotenv", - "version": "v5.6.0", + "version": "v5.6.2", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4" + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", - "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/24ac4c74f91ee2c193fa1aaa5c249cb0822809af", + "reference": "24ac4c74f91ee2c193fa1aaa5c249cb0822809af", "shasum": "" }, "require": { "ext-pcre": "*", - "graham-campbell/result-type": "^1.1.2", + "graham-campbell/result-type": "^1.1.3", "php": "^7.2.5 || ^8.0", - "phpoption/phpoption": "^1.9.2", + "phpoption/phpoption": "^1.9.3", "symfony/polyfill-ctype": "^1.24", "symfony/polyfill-mbstring": "^1.24", "symfony/polyfill-php80": "^1.24" @@ -4728,7 +4607,7 @@ "extra": { "bamarni-bin": { "bin-links": true, - "forward-command": true + "forward-command": false }, "branch-alias": { "dev-master": "5.6-dev" @@ -4763,7 +4642,7 @@ ], "support": { "issues": "https://github.com/vlucas/phpdotenv/issues", - "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0" + "source": "https://github.com/vlucas/phpdotenv/tree/v5.6.2" }, "funding": [ { @@ -4775,20 +4654,20 @@ "type": "tidelift" } ], - "time": "2023-11-12T22:43:29+00:00" + "time": "2025-04-30T23:37:27+00:00" }, { "name": "voku/portable-ascii", - "version": "2.0.1", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/voku/portable-ascii.git", - "reference": "b56450eed252f6801410d810c8e1727224ae0743" + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b56450eed252f6801410d810c8e1727224ae0743", - "reference": "b56450eed252f6801410d810c8e1727224ae0743", + "url": "https://api.github.com/repos/voku/portable-ascii/zipball/b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", + "reference": "b1d923f88091c6bf09699efcd7c8a1b1bfd7351d", "shasum": "" }, "require": { @@ -4813,7 +4692,7 @@ "authors": [ { "name": "Lars Moelleken", - "homepage": "http://www.moelleken.org/" + "homepage": "https://www.moelleken.org/" } ], "description": "Portable ASCII library - performance optimized (ascii) string functions for php.", @@ -4825,7 +4704,7 @@ ], "support": { "issues": "https://github.com/voku/portable-ascii/issues", - "source": "https://github.com/voku/portable-ascii/tree/2.0.1" + "source": "https://github.com/voku/portable-ascii/tree/2.0.3" }, "funding": [ { @@ -4849,7 +4728,7 @@ "type": "tidelift" } ], - "time": "2022-03-08T17:03:00+00:00" + "time": "2024-11-21T01:49:47+00:00" }, { "name": "webmozart/assert", @@ -4913,16 +4792,16 @@ "packages-dev": [ { "name": "amphp/amp", - "version": "v2.6.2", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/amphp/amp.git", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb" + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/amp/zipball/9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", - "reference": "9d5100cebffa729aaffecd3ad25dc5aeea4f13bb", + "url": "https://api.github.com/repos/amphp/amp/zipball/ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", + "reference": "ded3d9be08f526089eb7ee8d9f16a9768f9dec2d", "shasum": "" }, "require": { @@ -4934,8 +4813,8 @@ "ext-json": "*", "jetbrains/phpstorm-stubs": "^2019.3", "phpunit/phpunit": "^7 | ^8 | ^9", - "psalm/phar": "^3.11@dev", - "react/promise": "^2" + "react/promise": "^2", + "vimeo/psalm": "^3.12" }, "type": "library", "extra": { @@ -4990,7 +4869,7 @@ "support": { "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/amp/issues", - "source": "https://github.com/amphp/amp/tree/v2.6.2" + "source": "https://github.com/amphp/amp/tree/v2.6.4" }, "funding": [ { @@ -4998,20 +4877,20 @@ "type": "github" } ], - "time": "2022-02-20T17:52:18+00:00" + "time": "2024-03-21T18:52:26+00:00" }, { "name": "amphp/byte-stream", - "version": "v1.8.1", + "version": "v1.8.2", "source": { "type": "git", "url": "https://github.com/amphp/byte-stream.git", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd" + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/amphp/byte-stream/zipball/acbd8002b3536485c997c4e019206b3f10ca15bd", - "reference": "acbd8002b3536485c997c4e019206b3f10ca15bd", + "url": "https://api.github.com/repos/amphp/byte-stream/zipball/4f0e968ba3798a423730f567b1b50d3441c16ddc", + "reference": "4f0e968ba3798a423730f567b1b50d3441c16ddc", "shasum": "" }, "require": { @@ -5027,11 +4906,6 @@ "psalm/phar": "^3.11.4" }, "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.x-dev" - } - }, "autoload": { "files": [ "lib/functions.php" @@ -5055,7 +4929,7 @@ } ], "description": "A stream abstraction to make working with non-blocking I/O simple.", - "homepage": "http://amphp.org/byte-stream", + "homepage": "https://amphp.org/byte-stream", "keywords": [ "amp", "amphp", @@ -5065,9 +4939,8 @@ "stream" ], "support": { - "irc": "irc://irc.freenode.org/amphp", "issues": "https://github.com/amphp/byte-stream/issues", - "source": "https://github.com/amphp/byte-stream/tree/v1.8.1" + "source": "https://github.com/amphp/byte-stream/tree/v1.8.2" }, "funding": [ { @@ -5075,7 +4948,7 @@ "type": "github" } ], - "time": "2021-03-30T17:13:30+00:00" + "time": "2024-04-13T18:00:56+00:00" }, { "name": "composer/package-versions-deprecated", @@ -5152,28 +5025,36 @@ }, { "name": "composer/pcre", - "version": "3.1.1", + "version": "3.3.2", "source": { "type": "git", "url": "https://github.com/composer/pcre.git", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9" + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/00104306927c7a0919b4ced2aaa6782c1e61a3c9", - "reference": "00104306927c7a0919b4ced2aaa6782c1e61a3c9", + "url": "https://api.github.com/repos/composer/pcre/zipball/b2bed4734f0cc156ee1fe9c0da2550420d99a21e", + "reference": "b2bed4734f0cc156ee1fe9c0da2550420d99a21e", "shasum": "" }, "require": { "php": "^7.4 || ^8.0" }, + "conflict": { + "phpstan/phpstan": "<1.11.10" + }, "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" + "phpstan/phpstan": "^1.12 || ^2", + "phpstan/phpstan-strict-rules": "^1 || ^2", + "phpunit/phpunit": "^8 || ^9" }, "type": "library", "extra": { + "phpstan": { + "includes": [ + "extension.neon" + ] + }, "branch-alias": { "dev-main": "3.x-dev" } @@ -5203,7 +5084,7 @@ ], "support": { "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.1.1" + "source": "https://github.com/composer/pcre/tree/3.3.2" }, "funding": [ { @@ -5219,28 +5100,28 @@ "type": "tidelift" } ], - "time": "2023-10-11T07:11:09+00:00" + "time": "2024-11-12T16:29:46+00:00" }, { "name": "composer/semver", - "version": "3.4.0", + "version": "3.4.3", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32" + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/35e8d0af4486141bc745f23a29cc2091eb624a32", - "reference": "35e8d0af4486141bc745f23a29cc2091eb624a32", + "url": "https://api.github.com/repos/composer/semver/zipball/4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", + "reference": "4313d26ada5e0c4edfbd1dc481a92ff7bff91f12", "shasum": "" }, "require": { "php": "^5.3.2 || ^7.0 || ^8.0" }, "require-dev": { - "phpstan/phpstan": "^1.4", - "symfony/phpunit-bridge": "^4.2 || ^5" + "phpstan/phpstan": "^1.11", + "symfony/phpunit-bridge": "^3 || ^7" }, "type": "library", "extra": { @@ -5284,7 +5165,7 @@ "support": { "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/semver/issues", - "source": "https://github.com/composer/semver/tree/3.4.0" + "source": "https://github.com/composer/semver/tree/3.4.3" }, "funding": [ { @@ -5300,20 +5181,20 @@ "type": "tidelift" } ], - "time": "2023-08-31T09:50:34+00:00" + "time": "2024-09-19T14:15:21+00:00" }, { "name": "composer/xdebug-handler", - "version": "3.0.3", + "version": "3.0.5", "source": { "type": "git", "url": "https://github.com/composer/xdebug-handler.git", - "reference": "ced299686f41dce890debac69273b47ffe98a40c" + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/ced299686f41dce890debac69273b47ffe98a40c", - "reference": "ced299686f41dce890debac69273b47ffe98a40c", + "url": "https://api.github.com/repos/composer/xdebug-handler/zipball/6c1925561632e83d60a44492e0b344cf48ab85ef", + "reference": "6c1925561632e83d60a44492e0b344cf48ab85ef", "shasum": "" }, "require": { @@ -5324,7 +5205,7 @@ "require-dev": { "phpstan/phpstan": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^6.0" + "phpunit/phpunit": "^8.5 || ^9.6 || ^10.5" }, "type": "library", "autoload": { @@ -5348,9 +5229,9 @@ "performance" ], "support": { - "irc": "irc://irc.freenode.org/composer", + "irc": "ircs://irc.libera.chat:6697/composer", "issues": "https://github.com/composer/xdebug-handler/issues", - "source": "https://github.com/composer/xdebug-handler/tree/3.0.3" + "source": "https://github.com/composer/xdebug-handler/tree/3.0.5" }, "funding": [ { @@ -5366,7 +5247,7 @@ "type": "tidelift" } ], - "time": "2022-02-25T21:32:43+00:00" + "time": "2024-05-06T16:37:16+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -5407,29 +5288,30 @@ }, { "name": "doctrine/deprecations", - "version": "1.1.2", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931" + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/4f2d4f2836e7ec4e7a8625e75c6aa916004db931", - "reference": "4f2d4f2836e7ec4e7a8625e75c6aa916004db931", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", + "reference": "459c2f5dd3d6a4633d3b5f46ee2b1c40f57d3f38", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, + "conflict": { + "phpunit/phpunit": "<=7.5 || >=13" + }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", - "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "doctrine/coding-standard": "^9 || ^12 || ^13", + "phpstan/phpstan": "1.4.10 || 2.1.11", + "phpstan/phpstan-phpunit": "^1.0 || ^2", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6 || ^10.5 || ^11.5 || ^12", + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -5437,7 +5319,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -5448,9 +5330,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.2" + "source": "https://github.com/doctrine/deprecations/tree/1.1.5" }, - "time": "2023-09-27T20:04:15+00:00" + "time": "2025-04-07T20:06:18+00:00" }, { "name": "doctrine/instantiator", @@ -5569,16 +5451,16 @@ }, { "name": "felixfbecker/language-server-protocol", - "version": "v1.5.2", + "version": "v1.5.3", "source": { "type": "git", "url": "https://github.com/felixfbecker/php-language-server-protocol.git", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842" + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/6e82196ffd7c62f7794d778ca52b69feec9f2842", - "reference": "6e82196ffd7c62f7794d778ca52b69feec9f2842", + "url": "https://api.github.com/repos/felixfbecker/php-language-server-protocol/zipball/a9e113dbc7d849e35b8776da39edaf4313b7b6c9", + "reference": "a9e113dbc7d849e35b8776da39edaf4313b7b6c9", "shasum": "" }, "require": { @@ -5619,26 +5501,26 @@ ], "support": { "issues": "https://github.com/felixfbecker/php-language-server-protocol/issues", - "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.2" + "source": "https://github.com/felixfbecker/php-language-server-protocol/tree/v1.5.3" }, - "time": "2022-03-02T22:36:06+00:00" + "time": "2024-04-30T00:40:11+00:00" }, { "name": "hamcrest/hamcrest-php", - "version": "v2.0.1", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/hamcrest/hamcrest-php.git", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3" + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", - "reference": "8c3d0a3f6af734494ad8f6fbbee0ba92422859f3", + "url": "https://api.github.com/repos/hamcrest/hamcrest-php/zipball/f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", + "reference": "f8b1c0173b22fa6ec77a81fe63e5b01eba7e6487", "shasum": "" }, "require": { - "php": "^5.3|^7.0|^8.0" + "php": "^7.4|^8.0" }, "replace": { "cordoval/hamcrest-php": "*", @@ -5646,8 +5528,8 @@ "kodova/hamcrest-php": "*" }, "require-dev": { - "phpunit/php-file-iterator": "^1.4 || ^2.0", - "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0" + "phpunit/php-file-iterator": "^1.4 || ^2.0 || ^3.0", + "phpunit/phpunit": "^4.8.36 || ^5.7 || ^6.5 || ^7.0 || ^8.0 || ^9.0" }, "type": "library", "extra": { @@ -5670,9 +5552,9 @@ ], "support": { "issues": "https://github.com/hamcrest/hamcrest-php/issues", - "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.0.1" + "source": "https://github.com/hamcrest/hamcrest-php/tree/v2.1.1" }, - "time": "2020-07-09T08:09:16+00:00" + "time": "2025-04-30T06:54:44+00:00" }, { "name": "mockery/mockery", @@ -5748,16 +5630,16 @@ }, { "name": "myclabs/deep-copy", - "version": "1.11.1", + "version": "1.13.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", - "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/1720ddd719e16cf0db4eb1c6eca108031636d46c", + "reference": "1720ddd719e16cf0db4eb1c6eca108031636d46c", "shasum": "" }, "require": { @@ -5765,11 +5647,12 @@ }, "conflict": { "doctrine/collections": "<1.6.8", - "doctrine/common": "<2.13.3 || >=3,<3.2.2" + "doctrine/common": "<2.13.3 || >=3 <3.2.2" }, "require-dev": { "doctrine/collections": "^1.6.8", "doctrine/common": "^2.13.3 || ^3.2.2", + "phpspec/prophecy": "^1.10", "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", @@ -5795,7 +5678,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" + "source": "https://github.com/myclabs/DeepCopy/tree/1.13.1" }, "funding": [ { @@ -5803,20 +5686,20 @@ "type": "tidelift" } ], - "time": "2023-03-08T13:26:56+00:00" + "time": "2025-04-29T12:36:36+00:00" }, { "name": "netresearch/jsonmapper", - "version": "v4.2.0", + "version": "v4.5.0", "source": { "type": "git", "url": "https://github.com/cweiske/jsonmapper.git", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956" + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/f60565f8c0566a31acf06884cdaa591867ecc956", - "reference": "f60565f8c0566a31acf06884cdaa591867ecc956", + "url": "https://api.github.com/repos/cweiske/jsonmapper/zipball/8e76efb98ee8b6afc54687045e1b8dba55ac76e5", + "reference": "8e76efb98ee8b6afc54687045e1b8dba55ac76e5", "shasum": "" }, "require": { @@ -5827,7 +5710,7 @@ "php": ">=7.1" }, "require-dev": { - "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0", + "phpunit/phpunit": "~7.5 || ~8.0 || ~9.0 || ~10.0", "squizlabs/php_codesniffer": "~3.5" }, "type": "library", @@ -5852,31 +5735,31 @@ "support": { "email": "cweiske@cweiske.de", "issues": "https://github.com/cweiske/jsonmapper/issues", - "source": "https://github.com/cweiske/jsonmapper/tree/v4.2.0" + "source": "https://github.com/cweiske/jsonmapper/tree/v4.5.0" }, - "time": "2023-04-09T17:37:40+00:00" + "time": "2024-09-08T10:13:13+00:00" }, { "name": "nikic/php-parser", - "version": "v4.17.1", + "version": "v4.19.4", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d" + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", - "reference": "a6303e50c90c355c7eeee2c4a8b27fe8dc8fef1d", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/715f4d25e225bc47b293a8b997fe6ce99bf987d2", + "reference": "715f4d25e225bc47b293a8b997fe6ce99bf987d2", "shasum": "" }, "require": { "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.1" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -5908,9 +5791,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.17.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.19.4" }, - "time": "2023-08-13T19:53:39+00:00" + "time": "2024-09-29T15:01:53+00:00" }, { "name": "openlss/lib-array2xml", @@ -5967,20 +5850,21 @@ }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -6021,9 +5905,15 @@ "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" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", @@ -6131,28 +6021,35 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "version": "5.6.2", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/92dde6a5919e34835c506ac8c523ef095a95ed62", + "reference": "92dde6a5919e34835c506ac8c523ef095a95ed62", "shasum": "" }, "require": { + "doctrine/deprecations": "^1.1", "ext-filter": "*", - "php": "^7.2 || ^8.0", + "php": "^7.4 || ^8.0", "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", + "phpdocumentor/type-resolver": "^1.7", + "phpstan/phpdoc-parser": "^1.7|^2.0", "webmozart/assert": "^1.9.1" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" + "mockery/mockery": "~1.3.5 || ~1.6.0", + "phpstan/extension-installer": "^1.1", + "phpstan/phpstan": "^1.8", + "phpstan/phpstan-mockery": "^1.1", + "phpstan/phpstan-webmozart-assert": "^1.2", + "phpunit/phpunit": "^9.5", + "psalm/phar": "^5.26" }, "type": "library", "extra": { @@ -6176,35 +6073,35 @@ }, { "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "email": "opensource@ijaap.nl" } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.2" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2025-04-13T19:20:35+00:00" }, { "name": "phpdocumentor/type-resolver", - "version": "1.7.3", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419" + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", - "reference": "3219c6ee25c9ea71e3d9bbaf39c67c9ebd499419", + "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/679e3ce485b99e84c775d28e2e96fade9a7fb50a", + "reference": "679e3ce485b99e84c775d28e2e96fade9a7fb50a", "shasum": "" }, "require": { "doctrine/deprecations": "^1.0", - "php": "^7.4 || ^8.0", + "php": "^7.3 || ^8.0", "phpdocumentor/reflection-common": "^2.0", - "phpstan/phpdoc-parser": "^1.13" + "phpstan/phpdoc-parser": "^1.18|^2.0" }, "require-dev": { "ext-tokenizer": "*", @@ -6240,36 +6137,36 @@ "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", "support": { "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.7.3" + "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.10.0" }, - "time": "2023-08-12T11:01:26+00:00" + "time": "2024-11-09T15:12:26+00:00" }, { "name": "phpstan/phpdoc-parser", - "version": "1.24.4", + "version": "2.1.0", "source": { "type": "git", "url": "https://github.com/phpstan/phpdoc-parser.git", - "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496" + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/6bd0c26f3786cd9b7c359675cb789e35a8e07496", - "reference": "6bd0c26f3786cd9b7c359675cb789e35a8e07496", + "url": "https://api.github.com/repos/phpstan/phpdoc-parser/zipball/9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", + "reference": "9b30d6fd026b2c132b3985ce6b23bec09ab3aa68", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "php": "^7.4 || ^8.0" }, "require-dev": { "doctrine/annotations": "^2.0", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^5.3.0", "php-parallel-lint/php-parallel-lint": "^1.2", "phpstan/extension-installer": "^1.0", - "phpstan/phpstan": "^1.5", - "phpstan/phpstan-phpunit": "^1.1", - "phpstan/phpstan-strict-rules": "^1.0", - "phpunit/phpunit": "^9.5", + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpstan/phpstan-strict-rules": "^2.0", + "phpunit/phpunit": "^9.6", "symfony/process": "^5.2" }, "type": "library", @@ -6287,41 +6184,41 @@ "description": "PHPDoc parser with support for nullable, intersection and generic types", "support": { "issues": "https://github.com/phpstan/phpdoc-parser/issues", - "source": "https://github.com/phpstan/phpdoc-parser/tree/1.24.4" + "source": "https://github.com/phpstan/phpdoc-parser/tree/2.1.0" }, - "time": "2023-11-26T18:29:22+00:00" + "time": "2025-02-19T13:28:12+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.29", + "version": "9.2.32", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76" + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/6a3a87ac2bbe33b25042753df8195ba4aa534c76", - "reference": "6a3a87ac2bbe33b25042753df8195ba4aa534c76", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/85402a822d1ecf1db1096959413d35e1c37cf1a5", + "reference": "85402a822d1ecf1db1096959413d35e1c37cf1a5", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.15", + "nikic/php-parser": "^4.19.1 || ^5.1.0", "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" + "phpunit/php-file-iterator": "^3.0.6", + "phpunit/php-text-template": "^2.0.4", + "sebastian/code-unit-reverse-lookup": "^2.0.3", + "sebastian/complexity": "^2.0.3", + "sebastian/environment": "^5.1.5", + "sebastian/lines-of-code": "^1.0.4", + "sebastian/version": "^3.0.2", + "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.6" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -6330,7 +6227,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.2-dev" + "dev-main": "9.2.x-dev" } }, "autoload": { @@ -6359,7 +6256,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.29" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.32" }, "funding": [ { @@ -6367,7 +6264,7 @@ "type": "github" } ], - "time": "2023-09-19T04:57:46+00:00" + "time": "2024-08-22T04:23:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -6612,45 +6509,45 @@ }, { "name": "phpunit/phpunit", - "version": "9.6.15", + "version": "9.6.23", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1" + "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/05017b80304e0eb3f31d90194a563fd53a6021f1", - "reference": "05017b80304e0eb3f31d90194a563fd53a6021f1", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/43d2cb18d0675c38bd44982a5d1d88f6d53d8d95", + "reference": "43d2cb18d0675c38bd44982a5d1d88f6d53d8d95", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1 || ^2", + "doctrine/instantiator": "^1.5.0 || ^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", + "myclabs/deep-copy": "^1.13.1", + "phar-io/manifest": "^2.0.4", + "phar-io/version": "^3.2.1", "php": ">=7.3", - "phpunit/php-code-coverage": "^9.2.28", - "phpunit/php-file-iterator": "^3.0.5", + "phpunit/php-code-coverage": "^9.2.32", + "phpunit/php-file-iterator": "^3.0.6", "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", + "phpunit/php-text-template": "^2.0.4", + "phpunit/php-timer": "^5.0.3", + "sebastian/cli-parser": "^1.0.2", + "sebastian/code-unit": "^1.0.8", "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/diff": "^4.0.6", + "sebastian/environment": "^5.1.5", + "sebastian/exporter": "^4.0.6", + "sebastian/global-state": "^5.0.7", + "sebastian/object-enumerator": "^4.0.4", + "sebastian/resource-operations": "^3.0.4", + "sebastian/type": "^3.2.1", "sebastian/version": "^3.0.2" }, "suggest": { @@ -6695,7 +6592,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.15" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.23" }, "funding": [ { @@ -6706,25 +6603,33 @@ "url": "https://github.com/sebastianbergmann", "type": "github" }, + { + "url": "https://liberapay.com/sebastianbergmann", + "type": "liberapay" + }, + { + "url": "https://thanks.dev/u/gh/sebastianbergmann", + "type": "thanks_dev" + }, { "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", "type": "tidelift" } ], - "time": "2023-12-01T16:55:19+00:00" + "time": "2025-05-02T06:40:34+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "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/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -6759,7 +6664,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/1.0.2" }, "funding": [ { @@ -6767,7 +6672,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -6956,20 +6861,20 @@ }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -7001,7 +6906,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/2.0.3" }, "funding": [ { @@ -7009,20 +6914,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/74be17022044ebaaecfdf0c5cd504fc9cd5a7131", - "reference": "74be17022044ebaaecfdf0c5cd504fc9cd5a7131", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -7067,7 +6972,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.5" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -7075,7 +6980,7 @@ "type": "github" } ], - "time": "2023-05-07T05:35:17+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", @@ -7142,16 +7047,16 @@ }, { "name": "sebastian/exporter", - "version": "4.0.5", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", - "reference": "ac230ed27f0f98f597c8a2b6eb7ac563af5e5b9d", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -7207,7 +7112,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/4.0.6" }, "funding": [ { @@ -7215,20 +7120,20 @@ "type": "github" } ], - "time": "2022-09-14T06:03:37+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.6", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "bde739e7565280bda77be70044ac1047bc007e34" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bde739e7565280bda77be70044ac1047bc007e34", - "reference": "bde739e7565280bda77be70044ac1047bc007e34", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -7271,7 +7176,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.6" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -7279,24 +7184,24 @@ "type": "github" } ], - "time": "2023-08-02T09:26:13+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "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/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -7328,7 +7233,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/1.0.4" }, "funding": [ { @@ -7336,7 +7241,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -7515,16 +7420,16 @@ }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -7536,7 +7441,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -7557,8 +7462,7 @@ "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/resource-operations/tree/3.0.4" }, "funding": [ { @@ -7566,7 +7470,7 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", @@ -7679,16 +7583,16 @@ }, { "name": "theseer/tokenizer", - "version": "1.2.2", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/b2ad5003ca10d4ee50a12da31de12a5774ba6b96", - "reference": "b2ad5003ca10d4ee50a12da31de12a5774ba6b96", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -7717,7 +7621,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.2" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -7725,7 +7629,7 @@ "type": "github" } ], - "time": "2023-11-20T00:12:19+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "vimeo/psalm", @@ -7797,10 +7701,10 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev", - "dev-3.x": "3.x-dev", + "dev-1.x": "1.x-dev", "dev-2.x": "2.x-dev", - "dev-1.x": "1.x-dev" + "dev-3.x": "3.x-dev", + "dev-master": "4.x-dev" } }, "autoload": { @@ -7887,12 +7791,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": [], + "stability-flags": {}, "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^8.0" }, - "platform-dev": [], + "platform-dev": {}, "plugin-api-version": "2.6.0" }