diff --git a/.gitignore b/.gitignore index 9662bba7..3bbd7dc2 100644 --- a/.gitignore +++ b/.gitignore @@ -15,3 +15,4 @@ npm-debug.log yarn-error.log /.idea /.vscode +docker-compose.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 34e83483..1c0d1bc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +# v1.0.1 +## New +- Make cocktail `id` attribute filterable in cocktails index +- Add `per_page` query parameter to cocktails endpoint (defaults to 15) +- Add profile update endpoint +- Search index settings are updated on docker restart + +## Fixes +- Sort shelf cocktails by name +- Document missing query parameters in OA specification + # v1.0.0 - Cover all endpoints with tests - Add coding style diff --git a/README.md b/README.md index 1077eb80..7fe905e2 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ The basic requirements are: - PHP >= 8.1 - Sqlite 3 -- Working [Meilisearch server](https://github.com/meilisearch) instance +- Working [Meilisearch server](https://github.com/meilisearch) instance (v0.29) - (Optional) Redis server instance ## Docker setup diff --git a/app/Console/Commands/BarScrape.php b/app/Console/Commands/BarScrape.php new file mode 100644 index 00000000..229ccc81 --- /dev/null +++ b/app/Console/Commands/BarScrape.php @@ -0,0 +1,107 @@ +argument('url')); + + $scrapedData = $scraper->toArray(); + + /** @var IngredientService */ + $ingredientService = app(IngredientService::class); + /** @var CocktailService */ + $cocktailService = app(CocktailService::class); + + $dbIngredients = DB::table('ingredients')->select('id', DB::raw('LOWER(name) AS name'))->get()->keyBy('name'); + $dbGlasses = DB::table('glasses')->select('id', DB::raw('LOWER(name) AS name'))->get()->keyBy('name'); + + $cocktailImages = []; + if ($scrapedData['image']['url']) { + $memImage = InterventionImage::make($scrapedData['image']['url']); + + $filepath = 'temp/' . Str::random(40) . '.jpg'; + $memImage->save(storage_path('uploads/' . $filepath)); + + $image = new Image(); + $image->copyright = $scrapedData['image']['copyright'] ?? null; + $image->file_path = $filepath; + $image->file_extension = 'jpg'; + $image->save(); + + $cocktailImages[] = $image->id; + } + + // Match ingredients + foreach ($scrapedData['ingredients'] as &$scrapedIngredient) { + if ($dbIngredients->has(strtolower($scrapedIngredient['name']))) { + $scrapedIngredient['ingredient_id'] = $dbIngredients->get(strtolower($scrapedIngredient['name']))->id; + } else { + $this->info('Creating a new ingredient: ' . $scrapedIngredient['name']); + $newIngredient = $ingredientService->createIngredient(ucfirst($scrapedIngredient['name']), 1, 1, description: 'Created by scraper from ' . $scrapedData['source']); + $dbIngredients->put(strtolower($scrapedIngredient['name']), $newIngredient->id); + $scrapedIngredient['ingredient_id'] = $newIngredient->id; + } + } + + // Match glass + $glassId = null; + if ($dbGlasses->has(strtolower($scrapedData['glass']))) { + $glassId = $dbGlasses->get(strtolower($scrapedData['glass']))->id; + } elseif ($scrapedData['glass'] !== null) { + $this->info('Creating a new glass type: ' . $scrapedData['glass']); + $newGlass = new Glass(); + $newGlass->name = ucfirst($scrapedData['glass']); + $newGlass->description = 'Created by scraper from ' . $scrapedData['source']; + $newGlass->save(); + $dbGlasses->put(strtolower($scrapedData['glass']), $newGlass->id); + $glassId = $newGlass->id; + } + + $cocktailService->createCocktail( + $scrapedData['name'], + $scrapedData['instructions'], + $scrapedData['ingredients'], + 1, + $scrapedData['description'], + $scrapedData['garnish'], + $scrapedData['source'], + $cocktailImages, + $scrapedData['tags'], + $glassId + ); + + return Command::SUCCESS; + } +} diff --git a/app/Console/Commands/BarSearchRefresh.php b/app/Console/Commands/BarSearchRefresh.php index 382220d5..50d94b65 100644 --- a/app/Console/Commands/BarSearchRefresh.php +++ b/app/Console/Commands/BarSearchRefresh.php @@ -31,17 +31,17 @@ public function handle() { // Clear indexes // SearchActions::flushSearchIndex(); // TODO: Create method to import site_index - $this->info('Removing cocktails and ingredients index...'); - Artisan::call('scout:flush', ['model' => "Kami\Cocktail\Models\Cocktail"]); - Artisan::call('scout:flush', ['model' => "Kami\Cocktail\Models\Ingredient"]); + // $this->info('Removing cocktails and ingredients index...'); + // Artisan::call('scout:flush', ['model' => "Kami\Cocktail\Models\Cocktail"]); + // Artisan::call('scout:flush', ['model' => "Kami\Cocktail\Models\Ingredient"]); // Update settings - $this->info('Updating index settings...'); + $this->info('Updating search index settings...'); SearchActions::updateIndexSettings(); - $this->info('Importing cocktails and ingredients...'); - Artisan::call('scout:import', ['model' => "Kami\Cocktail\Models\Cocktail"]); - Artisan::call('scout:import', ['model' => "Kami\Cocktail\Models\Ingredient"]); + // $this->info('Importing cocktails and ingredients...'); + // Artisan::call('scout:import', ['model' => "Kami\Cocktail\Models\Cocktail"]); + // Artisan::call('scout:import', ['model' => "Kami\Cocktail\Models\Ingredient"]); return Command::SUCCESS; } diff --git a/app/Console/Commands/TestScrap.php b/app/Console/Commands/TestScrap.php deleted file mode 100644 index 4315162b..00000000 --- a/app/Console/Commands/TestScrap.php +++ /dev/null @@ -1,41 +0,0 @@ -toArray()); - - return Command::SUCCESS; - } -} diff --git a/app/Exceptions/ScrapeException.php b/app/Exceptions/ScrapeException.php new file mode 100644 index 00000000..e095a94b --- /dev/null +++ b/app/Exceptions/ScrapeException.php @@ -0,0 +1,11 @@ + Filter by user id * - favorites -> Filter by user favorites */ public function index(Request $request): JsonResource { - $cocktails = Cocktail::with('ingredients.ingredient', 'images', 'tags'); + $cocktails = Cocktail::with('ingredients.ingredient', 'images', 'tags')->orderBy('name'); + + $perPage = $request->get('per_page', 15); if ($request->has('user_id')) { $cocktails->where('user_id', $request->get('user_id')); @@ -38,7 +40,7 @@ public function index(Request $request): JsonResource }); } - return CocktailResource::collection($cocktails->paginate(15)); + return CocktailResource::collection($cocktails->paginate($perPage)); } /** diff --git a/app/Http/Controllers/ShelfController.php b/app/Http/Controllers/ShelfController.php index c3110db9..ba217422 100644 --- a/app/Http/Controllers/ShelfController.php +++ b/app/Http/Controllers/ShelfController.php @@ -18,7 +18,10 @@ class ShelfController extends Controller { public function index(Request $request): JsonResource { - $userIngredients = $request->user()->shelfIngredients; + $userIngredients = $request->user() + ->shelfIngredients + ->sortBy('ingredient.name') + ->load('ingredient'); return UserIngredientResource::collection($userIngredients); } diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php index 6684fc41..f8b08e22 100644 --- a/app/Http/Controllers/UserController.php +++ b/app/Http/Controllers/UserController.php @@ -5,8 +5,10 @@ namespace Kami\Cocktail\Http\Controllers; use Illuminate\Http\Request; +use Illuminate\Support\Facades\Hash; use Kami\Cocktail\Http\Resources\UserResource; use Illuminate\Http\Resources\Json\JsonResource; +use Kami\Cocktail\Http\Requests\UpdateUserRequest; class UserController extends Controller { @@ -16,4 +18,21 @@ public function show(Request $request): JsonResource $request->user()->load('favorites', 'shelfIngredients', 'shoppingLists') ); } + + public function update(UpdateUserRequest $request): JsonResource + { + $currentUser = $request->user(); + $currentUser->name = $request->post('name'); + $currentUser->email = $request->post('email'); + + if ($request->has('password')) { + $currentUser->password = Hash::make($request->post('password')); + } + + $currentUser->save(); + + return new UserResource( + $request->user()->load('favorites', 'shelfIngredients', 'shoppingLists') + ); + } } diff --git a/app/Http/Requests/UpdateUserRequest.php b/app/Http/Requests/UpdateUserRequest.php new file mode 100644 index 00000000..d25d2c53 --- /dev/null +++ b/app/Http/Requests/UpdateUserRequest.php @@ -0,0 +1,35 @@ + + */ + public function rules() + { + return [ + 'email' => ['required', Rule::unique('users')->ignore($this->user()->id)], + 'name' => 'required', + 'password' => 'confirmed|nullable', + ]; + } +} diff --git a/app/Models/UserIngredient.php b/app/Models/UserIngredient.php index c7f6a0fe..7db484cc 100644 --- a/app/Models/UserIngredient.php +++ b/app/Models/UserIngredient.php @@ -5,6 +5,7 @@ namespace Kami\Cocktail\Models; use Illuminate\Database\Eloquent\Model; +use Illuminate\Database\Eloquent\Relations\BelongsTo; use Illuminate\Database\Eloquent\Factories\HasFactory; class UserIngredient extends Model @@ -12,4 +13,9 @@ class UserIngredient extends Model use HasFactory; public $timestamps = false; + + public function ingredient(): BelongsTo + { + return $this->belongsTo(Ingredient::class); + } } diff --git a/app/Scraper/AbstractSiteExtractor.php b/app/Scraper/AbstractSiteExtractor.php new file mode 100644 index 00000000..ae5d8197 --- /dev/null +++ b/app/Scraper/AbstractSiteExtractor.php @@ -0,0 +1,64 @@ +request('GET', $url); + + $this->crawler = new Crawler($browser->getResponse()->getContent()); + } + + abstract public static function getSupportedUrls(): array; + + abstract public function name(): string; + + abstract public function description(): ?string; + + abstract public function source(): ?string; + + abstract public function instructions(): ?string; + + abstract public function tags(): array; + + abstract public function glass(): ?string; + + abstract public function ingredients(): array; + + abstract public function garnish(): ?string; + + abstract public function image(): ?array; + + public function toArray(): array + { + return [ + 'name' => $this->name(), + 'description' => $this->description(), + 'source' => $this->source(), + 'glass' => $this->glass(), + 'instructions' => $this->instructions(), + 'garnish' => $this->garnish(), + 'tags' => $this->tags(), + 'image' => $this->image(), + 'ingredients' => $this->ingredients(), + ]; + } +} diff --git a/app/Scraper/Manager.php b/app/Scraper/Manager.php new file mode 100644 index 00000000..0422d5bd --- /dev/null +++ b/app/Scraper/Manager.php @@ -0,0 +1,36 @@ +supportedSites as $siteClass) { + foreach ($siteClass::getSupportedUrls() as $supportedHostname) { + if (str_starts_with($this->url, $supportedHostname)) { + return resolve($siteClass, ['url' => $this->url]); + } + } + } + + throw new ScrapeException('Scraper not supported for given site.'); + } + + public static function scrape(string $url): AbstractSiteExtractor + { + return (new self($url))->matchFirst(); + } +} diff --git a/app/Scraper/Scraper.php b/app/Scraper/Scraper.php deleted file mode 100644 index 3c4959e1..00000000 --- a/app/Scraper/Scraper.php +++ /dev/null @@ -1,124 +0,0 @@ -request('GET', $url); - $this->crawler = new Crawler($browser->getResponse()->getContent()); - } - - public function name() - { - return $this->crawler->filter('.recipe__header-title')->first()->text(); - } - - public function description() - { - return $this->crawler->filter('.recipe__header-subtitle')->first()->text(); - } - - public function source() - { - return $this->url; - } - - public function instructions() - { - $result = ''; - - $step = 1; - $this->crawler->filter('.recipe__recipe ol')->first()->filter('li')->each(function ($node) use (&$result, &$step) { - $result .= $step . ". " . $node->text() . "\n"; - $step++; - }); - - return $result; - } - - public function tags() - { - return null; - } - - public function glass() - { - $glassTag = $this->crawler->filter('.recipe__header-titles-and-icons .recipe__tag-icons a')->last()->attr('href'); - - return str_replace( - '-', - ' ', - str_replace('/tags/', '', $glassTag) - ); - } - - public function ingredients() - { - $result = []; - - $this->crawler->filter('.recipe__recipe ul')->first()->filter('li')->each(function ($node) use (&$result) { - $isGarnish = $node->filter('.amount .unit')->count() === 0; - - if ($isGarnish) { - return; - } - - $unit = $node->filter('.amount .unit')->text(); - $amount = iconv('', 'US//TRANSLIT', str_replace($unit, '', $node->filter('.amount')->text())); - - if ($unit === 'oz') { - $numbers = explode('/', $amount); - - $denominator = $numbers[1] ?? 1; - $amount = ((int) $numbers[0] / $denominator) * 30; - $unit = 'ml'; - } - - $result[] = [ - 'amount' => $amount, - 'unit' => $unit, - 'name' => $node->filter('.ingredient a')->first()->text(), - 'optional' => false, - ]; - }); - - return $result; - } - - public function garnish() - { - return null; - } - - public function toArray() - { - return [ - 'name' => $this->name(), - 'description' => $this->description(), - 'source' => $this->source(), - 'glass' => $this->glass(), - 'instructions' => $this->instructions(), - 'garnish' => $this->garnish(), - 'tags' => $this->tags(), - 'ingredients' => $this->ingredients(), - ]; - } -} diff --git a/app/Scraper/SiteExtractorContract.php b/app/Scraper/SiteExtractorContract.php new file mode 100644 index 00000000..add148dd --- /dev/null +++ b/app/Scraper/SiteExtractorContract.php @@ -0,0 +1,26 @@ +crawler->filter('.recipe__header-title')->first()->text(); + } + + public function description(): ?string + { + return $this->crawler->filter('.recipe__header-subtitle')->first()->text(); + } + + public function source(): ?string + { + return $this->url; + } + + public function instructions(): ?string + { + $result = ''; + + $step = 1; + $this->crawler->filter('.recipe__recipe ol')->first()->filter('li')->each(function ($node) use (&$result, &$step) { + $result .= trim($step . ". " . $node->text()) . "\n"; + $step++; + }); + + return $result; + } + + public function tags(): array + { + $featuredIngredient = $this->crawler->filter('.site-container div.recipe__footer div.ingredient-card div.label.label--bottom-border.ingredient-card__label a')->last()->text(); + + return $featuredIngredient ? [ucfirst($featuredIngredient)] : []; + } + + public function glass(): ?string + { + $glassTag = $this->crawler->filter('.recipe__header-titles-and-icons .recipe__tag-icons a')->last()->attr('href'); + + return str_replace( + '-', + ' ', + str_replace('/tags/', '', $glassTag) + ); + } + + public function ingredients(): array + { + $result = []; + + $this->crawler->filter('.recipe__recipe ul')->first()->filter('li')->each(function ($node) use (&$result) { + $isGarnish = str_contains($node->filter('.ingredient')->text(), 'garnish'); + + if ($isGarnish) { + return; + } + + $onlyUnits = 'part'; + if ($node->filter('.amount .unit')->count() > 0) { + $onlyUnits = $node->filter('.amount .unit')->text(); + } + + $amountAndUnits = $node->filter('.amount')->text(); + + $parsedIngredientAmount = Utils::parseIngredientAmount( + str_replace($onlyUnits, '', $amountAndUnits) . ' ' . $onlyUnits + ); + + $ingredientName = $this->hintCommonIngredients($node->filter('.ingredient a')->first()->text()); + + $result[] = [ + 'amount' => $parsedIngredientAmount['amount'], + 'units' => $parsedIngredientAmount['units'], + 'name' => $ingredientName, + 'optional' => false, + ]; + }); + + return $result; + } + + public function garnish(): ?string + { + $garnish = null; + + $this->crawler->filter('.recipe__recipe ul')->first()->filter('li')->each(function ($node) use (&$garnish) { + if ($node->filter('.amount .unit')->count() === 0) { + $garnish .= $node->filter('.ingredient')->text() . "\n\n"; + } + }); + + return $garnish; + } + + public function image(): ?array + { + $srcSet = $this->crawler->filter('.recipe__primary-image.recipe__primary-image--1')->first()->attr('srcset'); + $sources = explode(' ', $srcSet); + + if (!$sources[2]) { + return null; + } + + return [ + 'url' => $sources[2], + 'copyright' => 'TuxedoNo2', + ]; + } + + private function hintCommonIngredients(string $ingredientName): string + { + return match ($ingredientName) { + 'grenadine' => 'Grenadine syrup', + 'rye' => 'Rye whiskey', + 'bourbon' => 'Bourbon whiskey', + 'scotch' => 'Scotch whiskey', + 'angostura bitters' => 'Angostura aromatic bitters', + 'orange liqueur' => 'Triple Sec', + 'heavy cream' => 'Cream', + 'soda water' => 'Club soda', + 'coffee liqueur' => 'Kahlua coffee liqueur', + 'creme de cacao' => 'Dark Crème de Cacao', + 'fernet' => 'Fernet Branca', + 'benedictine' => 'Bénédictine', + 'herbsaint' => 'Absinthe', + 'peychaud\'s bitters' => 'Peychauds Bitters', + default => $ingredientName + }; + } +} diff --git a/app/SearchActions.php b/app/SearchActions.php index 7ad26ffa..50e88a91 100644 --- a/app/SearchActions.php +++ b/app/SearchActions.php @@ -56,7 +56,7 @@ public static function updateIndexSettings(): void $engine = app(\Laravel\Scout\EngineManager::class)->engine(); $engine->index('cocktails')->updateSettings([ - 'filterableAttributes' => ['tags', 'user_id', 'glass'], + 'filterableAttributes' => ['id', 'tags', 'user_id', 'glass'], 'sortableAttributes' => ['name', 'date'], 'searchableAttributes' => [ 'name', diff --git a/app/Services/CocktailService.php b/app/Services/CocktailService.php index 07d595fd..3d33f3e2 100644 --- a/app/Services/CocktailService.php +++ b/app/Services/CocktailService.php @@ -272,7 +272,7 @@ public function getCocktailsByUserIngredients(int $userId): Collection } } - return Cocktail::find(array_merge($cocktailIds->toArray(), $subCocktails)); + return Cocktail::orderBy('name')->find(array_merge($cocktailIds->toArray(), $subCocktails)); } /** diff --git a/app/Utils.php b/app/Utils.php new file mode 100644 index 00000000..71dfe227 --- /dev/null +++ b/app/Utils.php @@ -0,0 +1,63 @@ + $amount, + 'units' => $units, + ]; + } +} diff --git a/composer.json b/composer.json index f83099a9..08125e49 100644 --- a/composer.json +++ b/composer.json @@ -1,8 +1,4 @@ { - "name": "laravel/laravel", - "type": "project", - "description": "The Laravel Framework.", - "keywords": ["framework", "laravel"], "license": "MIT", "require": { "php": "^8.0.2", @@ -60,8 +56,8 @@ "post-create-project-cmd": [ "@php artisan key:generate --ansi" ], - "static": "vendor/bin/phpstan analyse", - "fix-style": "vendor/bin/ecs check --fix" + "static": "vendor/bin/phpstan analyse --xdebug", + "fix-style": "vendor/bin/ecs check --fix --clear-cache" }, "extra": { "laravel": { diff --git a/composer.lock b/composer.lock index 0f101cba..9a33bb82 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "16b60cecebb975bae3e1761c82bbe91f", + "content-hash": "0b5e5376fe978d7dabc4d977985d1bff", "packages": [ { "name": "brick/math", @@ -130,16 +130,16 @@ }, { "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": { @@ -150,7 +150,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": { @@ -199,29 +199,29 @@ ], "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.5", + "version": "2.0.6", "source": { "type": "git", "url": "https://github.com/doctrine/inflector.git", - "reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392" + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/inflector/zipball/ade2b3bbfb776f27f0558e26eed43b5d9fe1b392", - "reference": "ade2b3bbfb776f27f0558e26eed43b5d9fe1b392", + "url": "https://api.github.com/repos/doctrine/inflector/zipball/d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", + "reference": "d9d313a36c872fd6ee06d9a6cbcf713eaa40f024", "shasum": "" }, "require": { "php": "^7.2 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", + "doctrine/coding-standard": "^10", "phpstan/phpstan": "^1.8", "phpstan/phpstan-phpunit": "^1.1", "phpstan/phpstan-strict-rules": "^1.3", @@ -276,7 +276,7 @@ ], "support": { "issues": "https://github.com/doctrine/inflector/issues", - "source": "https://github.com/doctrine/inflector/tree/2.0.5" + "source": "https://github.com/doctrine/inflector/tree/2.0.6" }, "funding": [ { @@ -292,7 +292,7 @@ "type": "tidelift" } ], - "time": "2022-09-07T09:01:28+00:00" + "time": "2022-10-20T09:10:12+00:00" }, { "name": "doctrine/lexer", @@ -846,16 +846,16 @@ }, { "name": "guzzlehttp/psr7", - "version": "2.4.1", + "version": "2.4.3", "source": { "type": "git", "url": "https://github.com/guzzle/psr7.git", - "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379" + "reference": "67c26b443f348a51926030c83481b85718457d3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/guzzle/psr7/zipball/69568e4293f4fa993f3b0e51c9723e1e17c41379", - "reference": "69568e4293f4fa993f3b0e51c9723e1e17c41379", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/67c26b443f348a51926030c83481b85718457d3d", + "reference": "67c26b443f348a51926030c83481b85718457d3d", "shasum": "" }, "require": { @@ -945,7 +945,7 @@ ], "support": { "issues": "https://github.com/guzzle/psr7/issues", - "source": "https://github.com/guzzle/psr7/tree/2.4.1" + "source": "https://github.com/guzzle/psr7/tree/2.4.3" }, "funding": [ { @@ -961,7 +961,7 @@ "type": "tidelift" } ], - "time": "2022-08-28T14:45:39+00:00" + "time": "2022-10-26T14:07:24+00:00" }, { "name": "http-interop/http-factory-guzzle", @@ -1107,37 +1107,37 @@ }, { "name": "laravel/framework", - "version": "v9.32.0", + "version": "v9.42.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "aae3b59f82434176546c9dd10804adda16da5278" + "reference": "607d7867c93706eae20e28e46679f8a66e2a23ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/aae3b59f82434176546c9dd10804adda16da5278", - "reference": "aae3b59f82434176546c9dd10804adda16da5278", + "url": "https://api.github.com/repos/laravel/framework/zipball/607d7867c93706eae20e28e46679f8a66e2a23ec", + "reference": "607d7867c93706eae20e28e46679f8a66e2a23ec", "shasum": "" }, "require": { "doctrine/inflector": "^2.0", - "dragonmantank/cron-expression": "^3.1", - "egulias/email-validator": "^3.1", + "dragonmantank/cron-expression": "^3.3.2", + "egulias/email-validator": "^3.2.1", "ext-mbstring": "*", "ext-openssl": "*", "fruitcake/php-cors": "^1.2", - "laravel/serializable-closure": "^1.0", + "laravel/serializable-closure": "^1.2.2", "league/commonmark": "^2.2", - "league/flysystem": "^3.0.16", + "league/flysystem": "^3.8.0", "monolog/monolog": "^2.0", - "nesbot/carbon": "^2.53.1", + "nesbot/carbon": "^2.62.1", "nunomaduro/termwind": "^1.13", "php": "^8.0.2", "psr/container": "^1.1.1|^2.0.1", "psr/log": "^1.0|^2.0|^3.0", "psr/simple-cache": "^1.0|^2.0|^3.0", "ramsey/uuid": "^4.2.2", - "symfony/console": "^6.0.3", + "symfony/console": "^6.0.9", "symfony/error-handler": "^6.0", "symfony/finder": "^6.0", "symfony/http-foundation": "^6.0", @@ -1148,7 +1148,7 @@ "symfony/routing": "^6.0", "symfony/uid": "^6.0", "symfony/var-dumper": "^6.0", - "tijsverkoyen/css-to-inline-styles": "^2.2.2", + "tijsverkoyen/css-to-inline-styles": "^2.2.5", "vlucas/phpdotenv": "^5.4.1", "voku/portable-ascii": "^2.0" }, @@ -1195,26 +1195,26 @@ }, "require-dev": { "ably/ably-php": "^1.0", - "aws/aws-sdk-php": "^3.198.1", + "aws/aws-sdk-php": "^3.235.5", "doctrine/dbal": "^2.13.3|^3.1.4", "fakerphp/faker": "^1.9.2", - "guzzlehttp/guzzle": "^7.2", + "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.4.4", - "orchestra/testbench-core": "^7.1", + "mockery/mockery": "^1.5.1", + "orchestra/testbench-core": "^7.11", "pda/pheanstalk": "^4.0", "phpstan/phpstan": "^1.4.7", "phpunit/phpunit": "^9.5.8", - "predis/predis": "^1.1.9|^2.0", + "predis/predis": "^1.1.9|^2.0.2", "symfony/cache": "^6.0" }, "suggest": { "ably/ably-php": "Required to use the Ably broadcast driver (^1.0).", - "aws/aws-sdk-php": "Required to use the SQS queue driver, DynamoDb failed job storage, and SES mail driver (^3.198.1).", + "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.", @@ -1226,18 +1226,18 @@ "ext-redis": "Required to use the Redis cache and queue drivers (^4.0|^5.0).", "fakerphp/faker": "Required to use the eloquent factory builder (^1.9.1).", "filp/whoops": "Required for friendly error pages in development (^2.14.3).", - "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.2).", + "guzzlehttp/guzzle": "Required to use the HTTP Client and the ping methods on schedules (^7.5).", "laravel/tinker": "Required to use the tinker console command (^2.0).", "league/flysystem-aws-s3-v3": "Required to use the Flysystem S3 driver (^3.0).", "league/flysystem-ftp": "Required to use the Flysystem FTP driver (^3.0).", "league/flysystem-path-prefixing": "Required to use the scoped driver (^3.3).", "league/flysystem-read-only": "Required to use read-only disks (^3.3)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.0).", - "mockery/mockery": "Required to use mocking (^1.4.4).", + "mockery/mockery": "Required to use mocking (^1.5.1).", "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^4.0).", "phpunit/phpunit": "Required to use assertions and run tests (^9.5.8).", - "predis/predis": "Required to use the predis connector (^1.1.9|^2.0).", + "predis/predis": "Required to use the predis connector (^1.1.9|^2.0.2).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", "pusher/pusher-php-server": "Required to use the Pusher broadcast driver (^6.0|^7.0).", "symfony/cache": "Required to PSR-6 cache bridge (^6.0).", @@ -1289,7 +1289,7 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2022-09-27T13:32:56+00:00" + "time": "2022-11-30T16:23:52+00:00" }, { "name": "laravel/sanctum", @@ -1358,16 +1358,16 @@ }, { "name": "laravel/scout", - "version": "v9.4.11", + "version": "v9.4.12", "source": { "type": "git", "url": "https://github.com/laravel/scout.git", - "reference": "24ed5c0724078f52b04227121b26e9f15fdb04c9" + "reference": "83f0027f37dd950d50efe4ecfc84a6eb4a476e15" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/scout/zipball/24ed5c0724078f52b04227121b26e9f15fdb04c9", - "reference": "24ed5c0724078f52b04227121b26e9f15fdb04c9", + "url": "https://api.github.com/repos/laravel/scout/zipball/83f0027f37dd950d50efe4ecfc84a6eb4a476e15", + "reference": "83f0027f37dd950d50efe4ecfc84a6eb4a476e15", "shasum": "" }, "require": { @@ -1426,7 +1426,7 @@ "issues": "https://github.com/laravel/scout/issues", "source": "https://github.com/laravel/scout" }, - "time": "2022-09-27T15:42:14+00:00" + "time": "2022-10-04T14:18:55+00:00" }, { "name": "laravel/serializable-closure", @@ -1490,16 +1490,16 @@ }, { "name": "laravel/tinker", - "version": "v2.7.2", + "version": "v2.7.3", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "dff39b661e827dae6e092412f976658df82dbac5" + "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/dff39b661e827dae6e092412f976658df82dbac5", - "reference": "dff39b661e827dae6e092412f976658df82dbac5", + "url": "https://api.github.com/repos/laravel/tinker/zipball/5062061b4924af3392225dd482ca7b4d85d8b8ef", + "reference": "5062061b4924af3392225dd482ca7b4d85d8b8ef", "shasum": "" }, "require": { @@ -1552,22 +1552,22 @@ ], "support": { "issues": "https://github.com/laravel/tinker/issues", - "source": "https://github.com/laravel/tinker/tree/v2.7.2" + "source": "https://github.com/laravel/tinker/tree/v2.7.3" }, - "time": "2022-03-23T12:38:24+00:00" + "time": "2022-11-09T15:11:38+00:00" }, { "name": "league/commonmark", - "version": "2.3.5", + "version": "2.3.7", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257" + "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/84d74485fdb7074f4f9dd6f02ab957b1de513257", - "reference": "84d74485fdb7074f4f9dd6f02ab957b1de513257", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/a36bd2be4f5387c0f3a8792a0d76b7d68865abbf", + "reference": "a36bd2be4f5387c0f3a8792a0d76b7d68865abbf", "shasum": "" }, "require": { @@ -1587,7 +1587,7 @@ "erusev/parsedown": "^1.0", "ext-json": "*", "github/gfm": "0.29.0", - "michelf/php-markdown": "^1.4", + "michelf/php-markdown": "^1.4 || ^2.0", "nyholm/psr7": "^1.5", "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21", @@ -1660,7 +1660,7 @@ "type": "tidelift" } ], - "time": "2022-07-29T10:59:45+00:00" + "time": "2022-11-03T17:29:46+00:00" }, { "name": "league/config", @@ -1746,16 +1746,16 @@ }, { "name": "league/flysystem", - "version": "3.5.2", + "version": "3.10.4", "source": { "type": "git", "url": "https://github.com/thephpleague/flysystem.git", - "reference": "c73c4eb31f2e883b3897ab5591aa2dbc48112433" + "reference": "a7790f3dd1b27af81d380e6b2afa77c16ab7e181" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/c73c4eb31f2e883b3897ab5591aa2dbc48112433", - "reference": "c73c4eb31f2e883b3897ab5591aa2dbc48112433", + "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/a7790f3dd1b27af81d380e6b2afa77c16ab7e181", + "reference": "a7790f3dd1b27af81d380e6b2afa77c16ab7e181", "shasum": "" }, "require": { @@ -1771,7 +1771,7 @@ }, "require-dev": { "async-aws/s3": "^1.5", - "async-aws/simple-s3": "^1.0", + "async-aws/simple-s3": "^1.1", "aws/aws-sdk-php": "^3.198.1", "composer/semver": "^3.0", "ext-fileinfo": "*", @@ -1817,7 +1817,7 @@ ], "support": { "issues": "https://github.com/thephpleague/flysystem/issues", - "source": "https://github.com/thephpleague/flysystem/tree/3.5.2" + "source": "https://github.com/thephpleague/flysystem/tree/3.10.4" }, "funding": [ { @@ -1833,7 +1833,7 @@ "type": "tidelift" } ], - "time": "2022-09-23T18:59:16+00:00" + "time": "2022-11-26T19:48:01+00:00" }, { "name": "league/mime-type-detection", @@ -1893,16 +1893,16 @@ }, { "name": "meilisearch/meilisearch-php", - "version": "v0.25.0", + "version": "v0.25.1", "source": { "type": "git", "url": "https://github.com/meilisearch/meilisearch-php.git", - "reference": "95148ea251d4d8117c68d2faf22dc3ef2f1d6dc5" + "reference": "29dffba9ab09ead32deb33e3965c44eae1fd636e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/95148ea251d4d8117c68d2faf22dc3ef2f1d6dc5", - "reference": "95148ea251d4d8117c68d2faf22dc3ef2f1d6dc5", + "url": "https://api.github.com/repos/meilisearch/meilisearch-php/zipball/29dffba9ab09ead32deb33e3965c44eae1fd636e", + "reference": "29dffba9ab09ead32deb33e3965c44eae1fd636e", "shasum": "" }, "require": { @@ -1917,7 +1917,7 @@ "guzzlehttp/guzzle": "^7.1", "http-interop/http-factory-guzzle": "^1.0", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "^1.4", + "phpstan/phpstan": "1.9.2", "phpstan/phpstan-deprecation-rules": "^1.0", "phpstan/phpstan-phpunit": "^1.0", "phpstan/phpstan-strict-rules": "^1.1", @@ -1954,9 +1954,9 @@ ], "support": { "issues": "https://github.com/meilisearch/meilisearch-php/issues", - "source": "https://github.com/meilisearch/meilisearch-php/tree/v0.25.0" + "source": "https://github.com/meilisearch/meilisearch-php/tree/v0.25.1" }, - "time": "2022-10-03T14:09:17+00:00" + "time": "2022-11-26T14:39:21+00:00" }, { "name": "monolog/monolog", @@ -2062,16 +2062,16 @@ }, { "name": "nesbot/carbon", - "version": "2.62.1", + "version": "2.63.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a" + "reference": "ad35dd71a6a212b98e4b87e97389b6fa85f0e347" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", - "reference": "01bc4cdefe98ef58d1f9cb31bdbbddddf2a88f7a", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/ad35dd71a6a212b98e4b87e97389b6fa85f0e347", + "reference": "ad35dd71a6a212b98e4b87e97389b6fa85f0e347", "shasum": "" }, "require": { @@ -2160,29 +2160,29 @@ "type": "tidelift" } ], - "time": "2022-09-02T07:48:13+00:00" + "time": "2022-10-30T18:34:28+00:00" }, { "name": "nette/schema", - "version": "v1.2.2", + "version": "v1.2.3", "source": { "type": "git", "url": "https://github.com/nette/schema.git", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df" + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nette/schema/zipball/9a39cef03a5b34c7de64f551538cbba05c2be5df", - "reference": "9a39cef03a5b34c7de64f551538cbba05c2be5df", + "url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", + "reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", "shasum": "" }, "require": { "nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", - "php": ">=7.1 <8.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", @@ -2220,9 +2220,9 @@ ], "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.3" }, - "time": "2021-10-15T11:40:02+00:00" + "time": "2022-10-13T01:24:26+00:00" }, { "name": "nette/utils", @@ -2311,16 +2311,16 @@ }, { "name": "nikic/php-parser", - "version": "v4.15.1", + "version": "v4.15.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900" + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", - "reference": "0ef6c55a3f47f89d7a374e6f835197a0b5fcf900", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", + "reference": "f59bbe44bf7d96f24f3e2b4ddc21cd52c1d2adbc", "shasum": "" }, "require": { @@ -2361,22 +2361,22 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v4.15.2" }, - "time": "2022-09-04T07:30:47+00:00" + "time": "2022-11-12T15:38:23+00:00" }, { "name": "nunomaduro/termwind", - "version": "v1.14.0", + "version": "v1.14.2", "source": { "type": "git", "url": "https://github.com/nunomaduro/termwind.git", - "reference": "10065367baccf13b6e30f5e9246fa4f63a79eb1d" + "reference": "9a8218511eb1a0965629ff820dda25985440aefc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/10065367baccf13b6e30f5e9246fa4f63a79eb1d", - "reference": "10065367baccf13b6e30f5e9246fa4f63a79eb1d", + "url": "https://api.github.com/repos/nunomaduro/termwind/zipball/9a8218511eb1a0965629ff820dda25985440aefc", + "reference": "9a8218511eb1a0965629ff820dda25985440aefc", "shasum": "" }, "require": { @@ -2433,7 +2433,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/termwind/issues", - "source": "https://github.com/nunomaduro/termwind/tree/v1.14.0" + "source": "https://github.com/nunomaduro/termwind/tree/v1.14.2" }, "funding": [ { @@ -2449,7 +2449,7 @@ "type": "github" } ], - "time": "2022-08-01T11:03:24+00:00" + "time": "2022-10-28T22:51:32+00:00" }, { "name": "php-http/client-common", @@ -3281,16 +3281,16 @@ }, { "name": "psy/psysh", - "version": "v0.11.8", + "version": "v0.11.9", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "f455acf3645262ae389b10e9beba0c358aa6994e" + "reference": "1acec99d6684a54ff92f8b548a4e41b566963778" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/f455acf3645262ae389b10e9beba0c358aa6994e", - "reference": "f455acf3645262ae389b10e9beba0c358aa6994e", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/1acec99d6684a54ff92f8b548a4e41b566963778", + "reference": "1acec99d6684a54ff92f8b548a4e41b566963778", "shasum": "" }, "require": { @@ -3351,9 +3351,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.11.8" + "source": "https://github.com/bobthecow/psysh/tree/v0.11.9" }, - "time": "2022-07-28T14:25:11+00:00" + "time": "2022-11-06T15:29:46+00:00" }, { "name": "ralouphie/getallheaders", @@ -3480,21 +3480,20 @@ }, { "name": "ramsey/uuid", - "version": "4.5.1", + "version": "4.6.0", "source": { "type": "git", "url": "https://github.com/ramsey/uuid.git", - "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d" + "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/ramsey/uuid/zipball/a161a26d917604dc6d3aa25100fddf2556e9f35d", - "reference": "a161a26d917604dc6d3aa25100fddf2556e9f35d", + "url": "https://api.github.com/repos/ramsey/uuid/zipball/ad63bc700e7d021039e30ce464eba384c4a1d40f", + "reference": "ad63bc700e7d021039e30ce464eba384c4a1d40f", "shasum": "" }, "require": { "brick/math": "^0.8.8 || ^0.9 || ^0.10", - "ext-ctype": "*", "ext-json": "*", "php": "^8.0", "ramsey/collection": "^1.0" @@ -3526,7 +3525,6 @@ }, "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", @@ -3558,7 +3556,7 @@ ], "support": { "issues": "https://github.com/ramsey/uuid/issues", - "source": "https://github.com/ramsey/uuid/tree/4.5.1" + "source": "https://github.com/ramsey/uuid/tree/4.6.0" }, "funding": [ { @@ -3570,7 +3568,7 @@ "type": "tidelift" } ], - "time": "2022-09-16T03:22:46+00:00" + "time": "2022-11-05T23:03:38+00:00" }, { "name": "spatie/laravel-package-tools", @@ -3634,16 +3632,16 @@ }, { "name": "spatie/laravel-responsecache", - "version": "7.4.3", + "version": "7.4.4", "source": { "type": "git", "url": "https://github.com/spatie/laravel-responsecache.git", - "reference": "59b28a5898da23a44e0a1b0be83db253733a8f86" + "reference": "48cb5af1d80e023761ac4c93963cfc7d5adaa38b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-responsecache/zipball/59b28a5898da23a44e0a1b0be83db253733a8f86", - "reference": "59b28a5898da23a44e0a1b0be83db253733a8f86", + "url": "https://api.github.com/repos/spatie/laravel-responsecache/zipball/48cb5af1d80e023761ac4c93963cfc7d5adaa38b", + "reference": "48cb5af1d80e023761ac4c93963cfc7d5adaa38b", "shasum": "" }, "require": { @@ -3652,7 +3650,7 @@ "illuminate/container": "^8.71|^9.0", "illuminate/http": "^8.71|^9.0", "illuminate/support": "^8.71|^9.0", - "nesbot/carbon": "^2.35", + "nesbot/carbon": "^2.63", "php": "^8.0", "spatie/laravel-package-tools": "^1.9" }, @@ -3660,6 +3658,7 @@ "laravel/framework": "^9.0", "mockery/mockery": "^1.4", "orchestra/testbench": "^6.23|^7.0", + "pestphp/pest": "^1.22", "phpunit/phpunit": "^9.4" }, "type": "library", @@ -3701,7 +3700,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/laravel-responsecache/tree/7.4.3" + "source": "https://github.com/spatie/laravel-responsecache/tree/7.4.4" }, "funding": [ { @@ -3713,7 +3712,7 @@ "type": "github" } ], - "time": "2022-09-24T12:15:10+00:00" + "time": "2022-11-25T08:07:24+00:00" }, { "name": "spatie/laravel-sluggable", @@ -3777,16 +3776,16 @@ }, { "name": "symfony/console", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "7fccea8728aa2d431a6725b02b3ce759049fc84d" + "reference": "75d4749d9620a8fa21a2d2847800a84b5c4e7682" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/7fccea8728aa2d431a6725b02b3ce759049fc84d", - "reference": "7fccea8728aa2d431a6725b02b3ce759049fc84d", + "url": "https://api.github.com/repos/symfony/console/zipball/75d4749d9620a8fa21a2d2847800a84b5c4e7682", + "reference": "75d4749d9620a8fa21a2d2847800a84b5c4e7682", "shasum": "" }, "require": { @@ -3853,7 +3852,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.1.4" + "source": "https://github.com/symfony/console/tree/v6.2.0" }, "funding": [ { @@ -3869,20 +3868,20 @@ "type": "tidelift" } ], - "time": "2022-08-26T10:32:31+00:00" + "time": "2022-11-29T16:44:51+00:00" }, { "name": "symfony/css-selector", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443" + "reference": "91c342ffc99283c43653ed8eb47bc2a94db7f398" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/0dd5e36b80e1de97f8f74ed7023ac2b837a36443", - "reference": "0dd5e36b80e1de97f8f74ed7023ac2b837a36443", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/91c342ffc99283c43653ed8eb47bc2a94db7f398", + "reference": "91c342ffc99283c43653ed8eb47bc2a94db7f398", "shasum": "" }, "require": { @@ -3918,7 +3917,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v6.1.3" + "source": "https://github.com/symfony/css-selector/tree/v6.2.0" }, "funding": [ { @@ -3934,7 +3933,7 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2022-08-26T05:51:22+00:00" }, { "name": "symfony/deprecation-contracts", @@ -4005,16 +4004,16 @@ }, { "name": "symfony/error-handler", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "736e42db3fd586d91820355988698e434e1d8419" + "reference": "d9894724a9d20afd3329e36b36e45835b5c2ab3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/736e42db3fd586d91820355988698e434e1d8419", - "reference": "736e42db3fd586d91820355988698e434e1d8419", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/d9894724a9d20afd3329e36b36e45835b5c2ab3e", + "reference": "d9894724a9d20afd3329e36b36e45835b5c2ab3e", "shasum": "" }, "require": { @@ -4056,7 +4055,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.1.3" + "source": "https://github.com/symfony/error-handler/tree/v6.2.0" }, "funding": [ { @@ -4072,20 +4071,20 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:42:06+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v6.1.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347" + "reference": "9efb1618fabee89515fe031314e8ed5625f85a53" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/a0449a7ad7daa0f7c0acd508259f80544ab5a347", - "reference": "a0449a7ad7daa0f7c0acd508259f80544ab5a347", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/9efb1618fabee89515fe031314e8ed5625f85a53", + "reference": "9efb1618fabee89515fe031314e8ed5625f85a53", "shasum": "" }, "require": { @@ -4139,7 +4138,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.1.0" + "source": "https://github.com/symfony/event-dispatcher/tree/v6.2.0" }, "funding": [ { @@ -4155,7 +4154,7 @@ "type": "tidelift" } ], - "time": "2022-05-05T16:51:07+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/event-dispatcher-contracts", @@ -4238,16 +4237,16 @@ }, { "name": "symfony/finder", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709" + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/39696bff2c2970b3779a5cac7bf9f0b88fc2b709", - "reference": "39696bff2c2970b3779a5cac7bf9f0b88fc2b709", + "url": "https://api.github.com/repos/symfony/finder/zipball/eb2355f69519e4ef33f1835bca4c935f5d42e570", + "reference": "eb2355f69519e4ef33f1835bca4c935f5d42e570", "shasum": "" }, "require": { @@ -4282,7 +4281,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.1.3" + "source": "https://github.com/symfony/finder/tree/v6.2.0" }, "funding": [ { @@ -4298,20 +4297,20 @@ "type": "tidelift" } ], - "time": "2022-07-29T07:42:06+00:00" + "time": "2022-10-09T08:55:40+00:00" }, { "name": "symfony/http-foundation", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "18e0f106a32887bcebef757e5b39c88e39a08f20" + "reference": "edc56ed49a2955383d59e9b7043fd3bbc26f1854" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/18e0f106a32887bcebef757e5b39c88e39a08f20", - "reference": "18e0f106a32887bcebef757e5b39c88e39a08f20", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/edc56ed49a2955383d59e9b7043fd3bbc26f1854", + "reference": "edc56ed49a2955383d59e9b7043fd3bbc26f1854", "shasum": "" }, "require": { @@ -4319,6 +4318,9 @@ "symfony/deprecation-contracts": "^2.1|^3", "symfony/polyfill-mbstring": "~1.1" }, + "conflict": { + "symfony/cache": "<6.2" + }, "require-dev": { "predis/predis": "~1.0", "symfony/cache": "^5.4|^6.0", @@ -4357,7 +4359,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.1.4" + "source": "https://github.com/symfony/http-foundation/tree/v6.2.0" }, "funding": [ { @@ -4373,25 +4375,26 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:27:04+00:00" + "time": "2022-11-21T16:03:04+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "2144c53a278254af57fa1e6f71427be656fab6f4" + "reference": "e008ce658dbd995b3c3ab3d9be0555ea3b11867e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2144c53a278254af57fa1e6f71427be656fab6f4", - "reference": "2144c53a278254af57fa1e6f71427be656fab6f4", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/e008ce658dbd995b3c3ab3d9be0555ea3b11867e", + "reference": "e008ce658dbd995b3c3ab3d9be0555ea3b11867e", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/error-handler": "^6.1", "symfony/event-dispatcher": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", @@ -4402,7 +4405,7 @@ "symfony/cache": "<5.4", "symfony/config": "<6.1", "symfony/console": "<5.4", - "symfony/dependency-injection": "<6.1", + "symfony/dependency-injection": "<6.2", "symfony/doctrine-bridge": "<5.4", "symfony/form": "<5.4", "symfony/http-client": "<5.4", @@ -4422,7 +4425,7 @@ "symfony/config": "^6.1", "symfony/console": "^5.4|^6.0", "symfony/css-selector": "^5.4|^6.0", - "symfony/dependency-injection": "^6.1", + "symfony/dependency-injection": "^6.2", "symfony/dom-crawler": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/finder": "^5.4|^6.0", @@ -4467,7 +4470,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.1.4" + "source": "https://github.com/symfony/http-kernel/tree/v6.2.0" }, "funding": [ { @@ -4483,20 +4486,20 @@ "type": "tidelift" } ], - "time": "2022-08-26T14:50:30+00:00" + "time": "2022-11-30T17:37:58+00:00" }, { "name": "symfony/mailer", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "55a7cb8f8518d35e2a039daaec6e1ee20509510e" + "reference": "7b355fca167fa5302c77bccdfa0af4d7abc6bd8c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/55a7cb8f8518d35e2a039daaec6e1ee20509510e", - "reference": "55a7cb8f8518d35e2a039daaec6e1ee20509510e", + "url": "https://api.github.com/repos/symfony/mailer/zipball/7b355fca167fa5302c77bccdfa0af4d7abc6bd8c", + "reference": "7b355fca167fa5302c77bccdfa0af4d7abc6bd8c", "shasum": "" }, "require": { @@ -4505,15 +4508,19 @@ "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^5.4|^6.0", - "symfony/mime": "^5.4|^6.0", + "symfony/mime": "^6.2", "symfony/service-contracts": "^1.1|^2|^3" }, "conflict": { - "symfony/http-kernel": "<5.4" + "symfony/http-kernel": "<5.4", + "symfony/messenger": "<6.2", + "symfony/mime": "<6.2" }, "require-dev": { + "symfony/console": "^5.4|^6.0", "symfony/http-client-contracts": "^1.1|^2|^3", - "symfony/messenger": "^5.4|^6.0" + "symfony/messenger": "^6.2", + "symfony/twig-bridge": "^6.2" }, "type": "library", "autoload": { @@ -4541,7 +4548,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.1.4" + "source": "https://github.com/symfony/mailer/tree/v6.2.0" }, "funding": [ { @@ -4557,20 +4564,20 @@ "type": "tidelift" } ], - "time": "2022-08-03T05:16:05+00:00" + "time": "2022-11-28T17:18:31+00:00" }, { "name": "symfony/mime", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "5d1de2d3c52f8ca469c488f4b9e007e9e9cee0b3" + "reference": "1e8005a7cbd79fb824ad81308ef2a76592a08bc0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/5d1de2d3c52f8ca469c488f4b9e007e9e9cee0b3", - "reference": "5d1de2d3c52f8ca469c488f4b9e007e9e9cee0b3", + "url": "https://api.github.com/repos/symfony/mime/zipball/1e8005a7cbd79fb824ad81308ef2a76592a08bc0", + "reference": "1e8005a7cbd79fb824ad81308ef2a76592a08bc0", "shasum": "" }, "require": { @@ -4582,15 +4589,17 @@ "egulias/email-validator": "~3.0.0", "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", - "symfony/mailer": "<5.4" + "symfony/mailer": "<5.4", + "symfony/serializer": "<6.2" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1", + "league/html-to-markdown": "^5.0", "phpdocumentor/reflection-docblock": "^3.0|^4.0|^5.0", "symfony/dependency-injection": "^5.4|^6.0", "symfony/property-access": "^5.4|^6.0", "symfony/property-info": "^5.4|^6.0", - "symfony/serializer": "^5.4|^6.0" + "symfony/serializer": "^6.2" }, "type": "library", "autoload": { @@ -4622,7 +4631,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.1.4" + "source": "https://github.com/symfony/mime/tree/v6.2.0" }, "funding": [ { @@ -4638,20 +4647,20 @@ "type": "tidelift" } ], - "time": "2022-08-19T14:27:04+00:00" + "time": "2022-11-28T12:28:19+00:00" }, { "name": "symfony/options-resolver", - "version": "v6.1.0", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/options-resolver.git", - "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4" + "reference": "d28f02acde71ff75e957082cd36e973df395f626" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/options-resolver/zipball/a3016f5442e28386ded73c43a32a5b68586dd1c4", - "reference": "a3016f5442e28386ded73c43a32a5b68586dd1c4", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/d28f02acde71ff75e957082cd36e973df395f626", + "reference": "d28f02acde71ff75e957082cd36e973df395f626", "shasum": "" }, "require": { @@ -4689,7 +4698,7 @@ "options" ], "support": { - "source": "https://github.com/symfony/options-resolver/tree/v6.1.0" + "source": "https://github.com/symfony/options-resolver/tree/v6.2.0" }, "funding": [ { @@ -4705,20 +4714,20 @@ "type": "tidelift" } ], - "time": "2022-02-25T11:15:52+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/polyfill-ctype", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4" + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", - "reference": "6fd1b9a79f6e3cf65f9e679b23af304cd9e010d4", + "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/5bbc823adecdae860bb64756d639ecfec17b050a", + "reference": "5bbc823adecdae860bb64756d639ecfec17b050a", "shasum": "" }, "require": { @@ -4733,7 +4742,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4771,7 +4780,7 @@ "portable" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-ctype/tree/v1.27.0" }, "funding": [ { @@ -4787,20 +4796,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "433d05519ce6990bf3530fba6957499d327395c2" + "reference": "511a08c03c1960e08a883f4cffcacd219b758354" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/433d05519ce6990bf3530fba6957499d327395c2", - "reference": "433d05519ce6990bf3530fba6957499d327395c2", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/511a08c03c1960e08a883f4cffcacd219b758354", + "reference": "511a08c03c1960e08a883f4cffcacd219b758354", "shasum": "" }, "require": { @@ -4812,7 +4821,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4852,7 +4861,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.27.0" }, "funding": [ { @@ -4868,20 +4877,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8" + "reference": "639084e360537a19f9ee352433b84ce831f3d2da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/59a8d271f00dd0e4c2e518104cc7963f655a1aa8", - "reference": "59a8d271f00dd0e4c2e518104cc7963f655a1aa8", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/639084e360537a19f9ee352433b84ce831f3d2da", + "reference": "639084e360537a19f9ee352433b84ce831f3d2da", "shasum": "" }, "require": { @@ -4895,7 +4904,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -4939,7 +4948,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.27.0" }, "funding": [ { @@ -4955,20 +4964,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd" + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/219aa369ceff116e673852dce47c3a41794c14bd", - "reference": "219aa369ceff116e673852dce47c3a41794c14bd", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/19bd1e4fcd5b91116f14d8533c57831ed00571b6", + "reference": "19bd1e4fcd5b91116f14d8533c57831ed00571b6", "shasum": "" }, "require": { @@ -4980,7 +4989,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5023,7 +5032,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.27.0" }, "funding": [ { @@ -5039,20 +5048,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e" + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", - "reference": "9344f9cb97f3b19424af1a21a3b0e75b0a7d8d7e", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/8ad114f6b39e2c98a8b0e3bd907732c207c2b534", + "reference": "8ad114f6b39e2c98a8b0e3bd907732c207c2b534", "shasum": "" }, "require": { @@ -5067,7 +5076,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5106,7 +5115,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.27.0" }, "funding": [ { @@ -5122,20 +5131,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2" + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/bf44a9fd41feaac72b074de600314a93e2ae78e2", - "reference": "bf44a9fd41feaac72b074de600314a93e2ae78e2", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/869329b1e9894268a8a61dabb69153029b7a8c97", + "reference": "869329b1e9894268a8a61dabb69153029b7a8c97", "shasum": "" }, "require": { @@ -5144,7 +5153,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5182,7 +5191,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.27.0" }, "funding": [ { @@ -5198,20 +5207,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace" + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/cfa0ae98841b9e461207c13ab093d76b0fa7bace", - "reference": "cfa0ae98841b9e461207c13ab093d76b0fa7bace", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", + "reference": "7a6ff3f1959bb01aefccb463a0f2cd3d3d2fd936", "shasum": "" }, "require": { @@ -5220,7 +5229,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5265,7 +5274,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.27.0" }, "funding": [ { @@ -5281,20 +5290,20 @@ "type": "tidelift" } ], - "time": "2022-05-10T07:21:04+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1" + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/13f6d1271c663dc5ae9fb843a8f16521db7687a1", - "reference": "13f6d1271c663dc5ae9fb843a8f16521db7687a1", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/707403074c8ea6e2edaf8794b0157a0bfa52157a", + "reference": "707403074c8ea6e2edaf8794b0157a0bfa52157a", "shasum": "" }, "require": { @@ -5303,7 +5312,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5344,7 +5353,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.27.0" }, "funding": [ { @@ -5360,20 +5369,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/polyfill-uuid", - "version": "v1.26.0", + "version": "v1.27.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-uuid.git", - "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23" + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/a41886c1c81dc075a09c71fe6db5b9d68c79de23", - "reference": "a41886c1c81dc075a09c71fe6db5b9d68c79de23", + "url": "https://api.github.com/repos/symfony/polyfill-uuid/zipball/f3cf1a645c2734236ed1e2e671e273eeb3586166", + "reference": "f3cf1a645c2734236ed1e2e671e273eeb3586166", "shasum": "" }, "require": { @@ -5388,7 +5397,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "1.26-dev" + "dev-main": "1.27-dev" }, "thanks": { "name": "symfony/polyfill", @@ -5426,7 +5435,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/polyfill-uuid/tree/v1.26.0" + "source": "https://github.com/symfony/polyfill-uuid/tree/v1.27.0" }, "funding": [ { @@ -5442,20 +5451,20 @@ "type": "tidelift" } ], - "time": "2022-05-24T11:49:31+00:00" + "time": "2022-11-03T14:55:06+00:00" }, { "name": "symfony/process", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292" + "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/a6506e99cfad7059b1ab5cab395854a0a0c21292", - "reference": "a6506e99cfad7059b1ab5cab395854a0a0c21292", + "url": "https://api.github.com/repos/symfony/process/zipball/ba6e55359f8f755fe996c58a81e00eaa67a35877", + "reference": "ba6e55359f8f755fe996c58a81e00eaa67a35877", "shasum": "" }, "require": { @@ -5487,7 +5496,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v6.1.3" + "source": "https://github.com/symfony/process/tree/v6.2.0" }, "funding": [ { @@ -5503,20 +5512,20 @@ "type": "tidelift" } ], - "time": "2022-06-27T17:24:16+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/routing", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "ef9108b3a88045b7546e808fb404ddb073dd35ea" + "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/ef9108b3a88045b7546e808fb404ddb073dd35ea", - "reference": "ef9108b3a88045b7546e808fb404ddb073dd35ea", + "url": "https://api.github.com/repos/symfony/routing/zipball/857ac6f4df371470fbdefa2f5967a2618dbf1852", + "reference": "857ac6f4df371470fbdefa2f5967a2618dbf1852", "shasum": "" }, "require": { @@ -5524,14 +5533,14 @@ }, "conflict": { "doctrine/annotations": "<1.12", - "symfony/config": "<5.4", + "symfony/config": "<6.2", "symfony/dependency-injection": "<5.4", "symfony/yaml": "<5.4" }, "require-dev": { "doctrine/annotations": "^1.12", "psr/log": "^1|^2|^3", - "symfony/config": "^5.4|^6.0", + "symfony/config": "^6.2", "symfony/dependency-injection": "^5.4|^6.0", "symfony/expression-language": "^5.4|^6.0", "symfony/http-foundation": "^5.4|^6.0", @@ -5575,7 +5584,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.1.3" + "source": "https://github.com/symfony/routing/tree/v6.2.0" }, "funding": [ { @@ -5591,7 +5600,7 @@ "type": "tidelift" } ], - "time": "2022-07-20T15:00:40+00:00" + "time": "2022-11-09T13:28:29+00:00" }, { "name": "symfony/service-contracts", @@ -5680,16 +5689,16 @@ }, { "name": "symfony/string", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "290972cad7b364e3befaa74ba0ec729800fb161c" + "reference": "145702685e0d12f81d755c71127bfff7582fdd36" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/290972cad7b364e3befaa74ba0ec729800fb161c", - "reference": "290972cad7b364e3befaa74ba0ec729800fb161c", + "url": "https://api.github.com/repos/symfony/string/zipball/145702685e0d12f81d755c71127bfff7582fdd36", + "reference": "145702685e0d12f81d755c71127bfff7582fdd36", "shasum": "" }, "require": { @@ -5705,6 +5714,7 @@ "require-dev": { "symfony/error-handler": "^5.4|^6.0", "symfony/http-client": "^5.4|^6.0", + "symfony/intl": "^6.2", "symfony/translation-contracts": "^2.0|^3.0", "symfony/var-exporter": "^5.4|^6.0" }, @@ -5745,7 +5755,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.1.4" + "source": "https://github.com/symfony/string/tree/v6.2.0" }, "funding": [ { @@ -5761,20 +5771,20 @@ "type": "tidelift" } ], - "time": "2022-08-12T18:05:43+00:00" + "time": "2022-11-30T17:13:47+00:00" }, { "name": "symfony/translation", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "45d0f5bb8df7255651ca91c122fab604e776af03" + "reference": "c08de62caead8357244efcb809d0b1a2584f2198" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/45d0f5bb8df7255651ca91c122fab604e776af03", - "reference": "45d0f5bb8df7255651ca91c122fab604e776af03", + "url": "https://api.github.com/repos/symfony/translation/zipball/c08de62caead8357244efcb809d0b1a2584f2198", + "reference": "c08de62caead8357244efcb809d0b1a2584f2198", "shasum": "" }, "require": { @@ -5794,6 +5804,7 @@ "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", @@ -5808,6 +5819,7 @@ "symfony/yaml": "^5.4|^6.0" }, "suggest": { + "nikic/php-parser": "To use PhpAstExtractor", "psr/log-implementation": "To use logging capability in translator", "symfony/config": "", "symfony/yaml": "" @@ -5841,7 +5853,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.1.4" + "source": "https://github.com/symfony/translation/tree/v6.2.0" }, "funding": [ { @@ -5857,7 +5869,7 @@ "type": "tidelift" } ], - "time": "2022-08-02T16:17:38+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/translation-contracts", @@ -5942,16 +5954,16 @@ }, { "name": "symfony/uid", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "ea2ccf0fdb88c83e626105b68e5bab5c132d812b" + "reference": "4f9f537e57261519808a7ce1d941490736522bbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/ea2ccf0fdb88c83e626105b68e5bab5c132d812b", - "reference": "ea2ccf0fdb88c83e626105b68e5bab5c132d812b", + "url": "https://api.github.com/repos/symfony/uid/zipball/4f9f537e57261519808a7ce1d941490736522bbc", + "reference": "4f9f537e57261519808a7ce1d941490736522bbc", "shasum": "" }, "require": { @@ -5996,7 +6008,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v6.1.3" + "source": "https://github.com/symfony/uid/tree/v6.2.0" }, "funding": [ { @@ -6012,20 +6024,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:46:29+00:00" + "time": "2022-10-09T08:55:40+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427" + "reference": "6228b11059d7b279be699682f164a107ba9a268d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427", - "reference": "d5a5e44a2260c5eb5e746bf4f1fbd12ee6ceb427", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6228b11059d7b279be699682f164a107ba9a268d", + "reference": "6228b11059d7b279be699682f164a107ba9a268d", "shasum": "" }, "require": { @@ -6084,7 +6096,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.1.3" + "source": "https://github.com/symfony/var-dumper/tree/v6.2.0" }, "funding": [ { @@ -6100,20 +6112,20 @@ "type": "tidelift" } ], - "time": "2022-07-20T13:46:29+00:00" + "time": "2022-11-28T13:41:56+00:00" }, { "name": "symfony/yaml", - "version": "v6.1.6", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "66c6b0cf52b00f74614a2cf7ae7db08ea1095931" + "reference": "f2570f21bd4adc3589aa3133323273995109bae0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/66c6b0cf52b00f74614a2cf7ae7db08ea1095931", - "reference": "66c6b0cf52b00f74614a2cf7ae7db08ea1095931", + "url": "https://api.github.com/repos/symfony/yaml/zipball/f2570f21bd4adc3589aa3133323273995109bae0", + "reference": "f2570f21bd4adc3589aa3133323273995109bae0", "shasum": "" }, "require": { @@ -6158,7 +6170,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v6.1.6" + "source": "https://github.com/symfony/yaml/tree/v6.2.0" }, "funding": [ { @@ -6174,7 +6186,7 @@ "type": "tidelift" } ], - "time": "2022-10-07T08:04:03+00:00" + "time": "2022-11-25T19:00:27+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -6231,16 +6243,16 @@ }, { "name": "vlucas/phpdotenv", - "version": "v5.4.1", + "version": "v5.5.0", "source": { "type": "git", "url": "https://github.com/vlucas/phpdotenv.git", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f" + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/264dce589e7ce37a7ba99cb901eed8249fbec92f", - "reference": "264dce589e7ce37a7ba99cb901eed8249fbec92f", + "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", + "reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", "shasum": "" }, "require": { @@ -6255,15 +6267,19 @@ "require-dev": { "bamarni/composer-bin-plugin": "^1.4.1", "ext-filter": "*", - "phpunit/phpunit": "^7.5.20 || ^8.5.21 || ^9.5.10" + "phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25" }, "suggest": { "ext-filter": "Required to use the boolean validator." }, "type": "library", "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + }, "branch-alias": { - "dev-master": "5.4-dev" + "dev-master": "5.5-dev" } }, "autoload": { @@ -6295,7 +6311,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.5.0" }, "funding": [ { @@ -6307,7 +6323,7 @@ "type": "tidelift" } ], - "time": "2021-12-12T23:22:04+00:00" + "time": "2022-10-16T01:01:54+00:00" }, { "name": "voku/portable-ascii", @@ -6596,150 +6612,6 @@ }, "time": "2022-04-20T14:46:44+00:00" }, - { - "name": "composer/class-map-generator", - "version": "1.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/class-map-generator.git", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/class-map-generator/zipball/1e1cb2b791facb2dfe32932a7718cf2571187513", - "reference": "1e1cb2b791facb2dfe32932a7718cf2571187513", - "shasum": "" - }, - "require": { - "composer/pcre": "^2 || ^3", - "php": "^7.2 || ^8.0", - "symfony/finder": "^4.4 || ^5.3 || ^6" - }, - "require-dev": { - "phpstan/phpstan": "^1.6", - "phpstan/phpstan-deprecation-rules": "^1", - "phpstan/phpstan-phpunit": "^1", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/filesystem": "^5.4 || ^6", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\ClassMapGenerator\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "https://seld.be" - } - ], - "description": "Utilities to scan PHP code and generate class maps.", - "keywords": [ - "classmap" - ], - "support": { - "issues": "https://github.com/composer/class-map-generator/issues", - "source": "https://github.com/composer/class-map-generator/tree/1.0.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-06-19T11:31:27+00:00" - }, - { - "name": "composer/pcre", - "version": "3.0.0", - "source": { - "type": "git", - "url": "https://github.com/composer/pcre.git", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/composer/pcre/zipball/e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "reference": "e300eb6c535192decd27a85bc72a9290f0d6b3bd", - "shasum": "" - }, - "require": { - "php": "^7.4 || ^8.0" - }, - "require-dev": { - "phpstan/phpstan": "^1.3", - "phpstan/phpstan-strict-rules": "^1.1", - "symfony/phpunit-bridge": "^5" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "3.x-dev" - } - }, - "autoload": { - "psr-4": { - "Composer\\Pcre\\": "src" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Jordi Boggiano", - "email": "j.boggiano@seld.be", - "homepage": "http://seld.be" - } - ], - "description": "PCRE wrapping library that offers type-safe preg_* replacements.", - "keywords": [ - "PCRE", - "preg", - "regex", - "regular expression" - ], - "support": { - "issues": "https://github.com/composer/pcre/issues", - "source": "https://github.com/composer/pcre/tree/3.0.0" - }, - "funding": [ - { - "url": "https://packagist.com", - "type": "custom" - }, - { - "url": "https://github.com/composer", - "type": "github" - }, - { - "url": "https://tidelift.com/funding/github/packagist/composer/composer", - "type": "tidelift" - } - ], - "time": "2022-02-25T20:21:48+00:00" - }, { "name": "doctrine/instantiator", "version": "1.4.1", @@ -6879,16 +6751,16 @@ }, { "name": "filp/whoops", - "version": "2.14.5", + "version": "2.14.6", "source": { "type": "git", "url": "https://github.com/filp/whoops.git", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc" + "reference": "f7948baaa0330277c729714910336383286305da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/filp/whoops/zipball/a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", - "reference": "a63e5e8f26ebbebf8ed3c5c691637325512eb0dc", + "url": "https://api.github.com/repos/filp/whoops/zipball/f7948baaa0330277c729714910336383286305da", + "reference": "f7948baaa0330277c729714910336383286305da", "shasum": "" }, "require": { @@ -6938,7 +6810,7 @@ ], "support": { "issues": "https://github.com/filp/whoops/issues", - "source": "https://github.com/filp/whoops/tree/2.14.5" + "source": "https://github.com/filp/whoops/tree/2.14.6" }, "funding": [ { @@ -6946,7 +6818,7 @@ "type": "github" } ], - "time": "2022-01-07T12:00:00+00:00" + "time": "2022-11-02T16:23:29+00:00" }, { "name": "hamcrest/hamcrest-php", @@ -7133,16 +7005,16 @@ }, { "name": "laravel/pint", - "version": "v1.2.0", + "version": "v1.2.1", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86" + "reference": "e60e2112ee779ce60f253695b273d1646a17d6f1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/1d276e4c803397a26cc337df908f55c2a4e90d86", - "reference": "1d276e4c803397a26cc337df908f55c2a4e90d86", + "url": "https://api.github.com/repos/laravel/pint/zipball/e60e2112ee779ce60f253695b273d1646a17d6f1", + "reference": "e60e2112ee779ce60f253695b273d1646a17d6f1", "shasum": "" }, "require": { @@ -7154,10 +7026,10 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^3.11.0", - "illuminate/view": "^9.27", - "laravel-zero/framework": "^9.1.3", - "mockery/mockery": "^1.5.0", - "nunomaduro/larastan": "^2.2", + "illuminate/view": "^9.32.0", + "laravel-zero/framework": "^9.2.0", + "mockery/mockery": "^1.5.1", + "nunomaduro/larastan": "^2.2.0", "nunomaduro/termwind": "^1.14.0", "pestphp/pest": "^1.22.1" }, @@ -7195,20 +7067,20 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2022-09-13T15:07:15+00:00" + "time": "2022-11-29T16:25:20+00:00" }, { "name": "laravel/sail", - "version": "v1.16.1", + "version": "v1.16.3", "source": { "type": "git", "url": "https://github.com/laravel/sail.git", - "reference": "cd7b9b6817c871e8b85d4f42e714303ee22676da" + "reference": "0dbee8802e17911afbe29a8506316343829b056e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/sail/zipball/cd7b9b6817c871e8b85d4f42e714303ee22676da", - "reference": "cd7b9b6817c871e8b85d4f42e714303ee22676da", + "url": "https://api.github.com/repos/laravel/sail/zipball/0dbee8802e17911afbe29a8506316343829b056e", + "reference": "0dbee8802e17911afbe29a8506316343829b056e", "shasum": "" }, "require": { @@ -7255,7 +7127,7 @@ "issues": "https://github.com/laravel/sail/issues", "source": "https://github.com/laravel/sail" }, - "time": "2022-09-26T13:53:59+00:00" + "time": "2022-11-21T16:19:18+00:00" }, { "name": "masterminds/html5", @@ -7525,16 +7397,16 @@ }, { "name": "nunomaduro/collision", - "version": "v6.3.0", + "version": "v6.3.1", "source": { "type": "git", "url": "https://github.com/nunomaduro/collision.git", - "reference": "17f600e2e8872856ff2846243efb74ad4b6da531" + "reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/collision/zipball/17f600e2e8872856ff2846243efb74ad4b6da531", - "reference": "17f600e2e8872856ff2846243efb74ad4b6da531", + "url": "https://api.github.com/repos/nunomaduro/collision/zipball/0f6349c3ed5dd28467087b08fb59384bb458a22b", + "reference": "0f6349c3ed5dd28467087b08fb59384bb458a22b", "shasum": "" }, "require": { @@ -7609,25 +7481,23 @@ "type": "patreon" } ], - "time": "2022-08-29T09:11:20+00:00" + "time": "2022-09-29T12:29:49+00:00" }, { "name": "nunomaduro/larastan", - "version": "v2.2.0", + "version": "2.2.9", "source": { "type": "git", "url": "https://github.com/nunomaduro/larastan.git", - "reference": "980199077a49d71ef7c03b65b9d6bcce1f6d7bad" + "reference": "333e7915b984ce6606175749430081a372ead37e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/980199077a49d71ef7c03b65b9d6bcce1f6d7bad", - "reference": "980199077a49d71ef7c03b65b9d6bcce1f6d7bad", + "url": "https://api.github.com/repos/nunomaduro/larastan/zipball/333e7915b984ce6606175749430081a372ead37e", + "reference": "333e7915b984ce6606175749430081a372ead37e", "shasum": "" }, "require": { - "composer/class-map-generator": "^1.0", - "composer/pcre": "^3.0", "ext-json": "*", "illuminate/console": "^9", "illuminate/container": "^9", @@ -7639,7 +7509,7 @@ "mockery/mockery": "^1.4.4", "php": "^8.0.2", "phpmyadmin/sql-parser": "^5.5", - "phpstan/phpstan": "^1.8.1" + "phpstan/phpstan": "^1.9.0" }, "require-dev": { "nikic/php-parser": "^4.13.2", @@ -7688,7 +7558,7 @@ ], "support": { "issues": "https://github.com/nunomaduro/larastan/issues", - "source": "https://github.com/nunomaduro/larastan/tree/v2.2.0" + "source": "https://github.com/nunomaduro/larastan/tree/2.2.9" }, "funding": [ { @@ -7708,7 +7578,7 @@ "type": "patreon" } ], - "time": "2022-08-30T19:02:01+00:00" + "time": "2022-11-04T14:58:00+00:00" }, { "name": "opis/json-schema", @@ -8086,16 +7956,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.8.6", + "version": "1.9.2", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "c386ab2741e64cc9e21729f891b28b2b10fe6618" + "reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c386ab2741e64cc9e21729f891b28b2b10fe6618", - "reference": "c386ab2741e64cc9e21729f891b28b2b10fe6618", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/d6fdf01c53978b6429f1393ba4afeca39cc68afa", + "reference": "d6fdf01c53978b6429f1393ba4afeca39cc68afa", "shasum": "" }, "require": { @@ -8125,7 +7995,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.8.6" + "source": "https://github.com/phpstan/phpstan/tree/1.9.2" }, "funding": [ { @@ -8141,20 +8011,20 @@ "type": "tidelift" } ], - "time": "2022-09-23T09:54:39+00:00" + "time": "2022-11-10T09:56:11+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.17", + "version": "9.2.19", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8" + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/aa94dc41e8661fe90c7316849907cba3007b10d8", - "reference": "aa94dc41e8661fe90c7316849907cba3007b10d8", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/c77b56b63e3d2031bd8997fcec43c1925ae46559", + "reference": "c77b56b63e3d2031bd8997fcec43c1925ae46559", "shasum": "" }, "require": { @@ -8210,7 +8080,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.17" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.19" }, "funding": [ { @@ -8218,7 +8088,7 @@ "type": "github" } ], - "time": "2022-08-30T12:24:04+00:00" + "time": "2022-11-18T07:47:47+00:00" }, { "name": "phpunit/php-file-iterator", @@ -8463,16 +8333,16 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.25", + "version": "9.5.26", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d" + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", - "reference": "3e6f90ca7e3d02025b1d147bd8d4a89fd4ca8a1d", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/851867efcbb6a1b992ec515c71cdcf20d895e9d2", + "reference": "851867efcbb6a1b992ec515c71cdcf20d895e9d2", "shasum": "" }, "require": { @@ -8545,7 +8415,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.25" + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.26" }, "funding": [ { @@ -8561,7 +8431,7 @@ "type": "tidelift" } ], - "time": "2022-09-25T03:44:45+00:00" + "time": "2022-10-28T06:00:21+00:00" }, { "name": "sebastian/cli-parser", @@ -9591,16 +9461,16 @@ }, { "name": "spatie/flare-client-php", - "version": "1.3.0", + "version": "1.3.1", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "b1b974348750925b717fa8c8b97a0db0d1aa40ca" + "reference": "ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/b1b974348750925b717fa8c8b97a0db0d1aa40ca", - "reference": "b1b974348750925b717fa8c8b97a0db0d1aa40ca", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8", + "reference": "ebb9ae0509b75e02f128b39537eb9a3ef5ce18e8", "shasum": "" }, "require": { @@ -9648,7 +9518,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.3.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.3.1" }, "funding": [ { @@ -9656,7 +9526,7 @@ "type": "github" } ], - "time": "2022-08-08T10:10:20+00:00" + "time": "2022-11-16T08:30:20+00:00" }, { "name": "spatie/ignition", @@ -9735,16 +9605,16 @@ }, { "name": "spatie/laravel-ignition", - "version": "1.5.0", + "version": "1.6.1", "source": { "type": "git", "url": "https://github.com/spatie/laravel-ignition.git", - "reference": "192962f4d84526f6868c512530c00633e3165749" + "reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/192962f4d84526f6868c512530c00633e3165749", - "reference": "192962f4d84526f6868c512530c00633e3165749", + "url": "https://api.github.com/repos/spatie/laravel-ignition/zipball/2b79cf6ed40946b64ac6713d7d2da8a9d87f612b", + "reference": "2b79cf6ed40946b64ac6713d7d2da8a9d87f612b", "shasum": "" }, "require": { @@ -9821,20 +9691,20 @@ "type": "github" } ], - "time": "2022-09-16T13:45:54+00:00" + "time": "2022-10-26T17:39:54+00:00" }, { "name": "symfony/browser-kit", - "version": "v6.1.3", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "2e3b6a4406c2af963c634d7bd0457402b67dcc56" + "reference": "5602fcc9a2a696f1743050ffcafa30741da94227" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/2e3b6a4406c2af963c634d7bd0457402b67dcc56", - "reference": "2e3b6a4406c2af963c634d7bd0457402b67dcc56", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/5602fcc9a2a696f1743050ffcafa30741da94227", + "reference": "5602fcc9a2a696f1743050ffcafa30741da94227", "shasum": "" }, "require": { @@ -9876,7 +9746,7 @@ "description": "Simulates the behavior of a web browser, allowing you to make requests, click on links and submit forms programmatically", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/browser-kit/tree/v6.1.3" + "source": "https://github.com/symfony/browser-kit/tree/v6.2.0" }, "funding": [ { @@ -9892,20 +9762,20 @@ "type": "tidelift" } ], - "time": "2022-07-27T15:50:51+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/dom-crawler", - "version": "v6.1.4", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", - "reference": "8cb4c6e6c8d30c26f70529ed5e50d79a09576c0c" + "reference": "c079db42bed39928fc77a24307cbfff7ac7757f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/8cb4c6e6c8d30c26f70529ed5e50d79a09576c0c", - "reference": "8cb4c6e6c8d30c26f70529ed5e50d79a09576c0c", + "url": "https://api.github.com/repos/symfony/dom-crawler/zipball/c079db42bed39928fc77a24307cbfff7ac7757f7", + "reference": "c079db42bed39928fc77a24307cbfff7ac7757f7", "shasum": "" }, "require": { @@ -9946,7 +9816,7 @@ "description": "Eases DOM navigation for HTML and XML documents", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dom-crawler/tree/v6.1.4" + "source": "https://github.com/symfony/dom-crawler/tree/v6.2.0" }, "funding": [ { @@ -9962,25 +9832,26 @@ "type": "tidelift" } ], - "time": "2022-08-04T19:19:00+00:00" + "time": "2022-11-02T09:08:04+00:00" }, { "name": "symfony/http-client", - "version": "v6.1.5", + "version": "v6.2.0", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "565b0f2ce2c5882e89b3ef5e255d7e0478b9c675" + "reference": "153540b6ed72eecdcb42dc847f8d8cf2e2516e8e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/565b0f2ce2c5882e89b3ef5e255d7e0478b9c675", - "reference": "565b0f2ce2c5882e89b3ef5e255d7e0478b9c675", + "url": "https://api.github.com/repos/symfony/http-client/zipball/153540b6ed72eecdcb42dc847f8d8cf2e2516e8e", + "reference": "153540b6ed72eecdcb42dc847f8d8cf2e2516e8e", "shasum": "" }, "require": { "php": ">=8.1", "psr/log": "^1|^2|^3", + "symfony/deprecation-contracts": "^2.1|^3", "symfony/http-client-contracts": "^3", "symfony/service-contracts": "^1.0|^2|^3" }, @@ -10030,7 +9901,7 @@ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-client/tree/v6.1.5" + "source": "https://github.com/symfony/http-client/tree/v6.2.0" }, "funding": [ { @@ -10046,7 +9917,7 @@ "type": "tidelift" } ], - "time": "2022-09-09T09:34:27+00:00" + "time": "2022-11-14T10:13:36+00:00" }, { "name": "symfony/http-client-contracts", diff --git a/config/bar-assistant.php b/config/bar-assistant.php index 82620f10..6627800f 100644 --- a/config/bar-assistant.php +++ b/config/bar-assistant.php @@ -11,7 +11,7 @@ | */ - 'version' => 'v1.0.0', + 'version' => 'v1.0.1', /* |-------------------------------------------------------------------------- diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 7db6f895..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,13 +0,0 @@ -version: "3" - -services: - meilisearch: - container_name: meilisearch - image: getmeili/meilisearch - restart: unless-stopped - environment: - - MEILI_MASTER_KEY=${MEILISEARCH_KEY} - ports: - - 7700:7700 - volumes: - - ${MEILISEARCH_DATA_FOLDER}:/meili_data diff --git a/docs/open-api-spec.yml b/docs/open-api-spec.yml index dcdec372..30d4651b 100644 --- a/docs/open-api-spec.yml +++ b/docs/open-api-spec.yml @@ -322,6 +322,17 @@ paths: $ref: '#/components/schemas/Cocktail' /ingredients: get: + parameters: + - name: category_id + in: query + description: Show only ingredients in specific category + schema: + type: integer + - name: on_shopping_list + in: query + description: Show only ingredients on shopping list of current user + schema: + type: boolean tags: - Ingredients summary: 'Get a list of ingredients' @@ -799,6 +810,43 @@ paths: properties: data: $ref: '#/components/schemas/User' + post: + tags: + - "Users" + summary: "Update currently authenticated user" + description: "Updates currently authenticated user with new information. If password field is present also changes the password." + requestBody: + content: + application/json: + schema: + type: object + properties: + email: + type: string + example: new@email.com + name: + type: string + example: New name + password: + type: string + nullable: true + example: "new-password" + password_confirmation: + type: string + nullable: true + example: "new-password" + responses: + '200': + description: Successful response + content: + application/json: + schema: + type: object + properties: + data: + $ref: '#/components/schemas/User' + '422': + $ref: '#/components/responses/UnprocessableEntity' /shopping-list: get: tags: diff --git a/phpstan.neon b/phpstan.neon index 39f63359..4ad3d25a 100644 --- a/phpstan.neon +++ b/phpstan.neon @@ -9,6 +9,9 @@ parameters: # Level 9 is the highest level level: 5 + excludePaths: + - app/Console/Commands/OpenBar.php + # ignoreErrors: # - '#PHPDoc tag @var#' # diff --git a/resources/entrypoint.sh b/resources/entrypoint.sh index ff963c69..ed83fa54 100644 --- a/resources/entrypoint.sh +++ b/resources/entrypoint.sh @@ -28,6 +28,8 @@ first_time_check() { start_system() { first_time_check + php artisan bar:refresh-search + echo "Adding routes and config to cache..." php artisan config:cache diff --git a/routes/api.php b/routes/api.php index 95510c2a..5a27a013 100644 --- a/routes/api.php +++ b/routes/api.php @@ -38,6 +38,7 @@ Route::post('logout', [AuthController::class, 'logout'])->name('auth.logout'); Route::get('/user', [UserController::class, 'show']); + Route::post('/user', [UserController::class, 'update']); Route::prefix('shelf')->group(function() { Route::get('/', [ShelfController::class, 'index']); diff --git a/tests/Feature/UserControllerTest.php b/tests/Feature/UserControllerTest.php index e735682f..7e26eff8 100644 --- a/tests/Feature/UserControllerTest.php +++ b/tests/Feature/UserControllerTest.php @@ -41,4 +41,70 @@ public function test_current_user_response() $response->assertValidResponse(); } + + public function test_update_current_user_response() + { + $user = User::factory()->create(); + $this->actingAs($user); + + $response = $this->postJson('/api/user', [ + 'email' => 'new@example.com', + 'name' => 'Test Guy', + ]); + + $response->assertOk(); + $response->assertJson( + fn (AssertableJson $json) => + $json + ->has('data') + ->where('data.id', $user->id) + ->where('data.email', 'new@example.com') + ->where('data.name', 'Test Guy') + ->etc() + ); + + $response->assertValidResponse(); + } + + public function test_update_current_user_with_password_response() + { + $user = User::factory()->create(); + $this->actingAs($user); + + $response = $this->postJson('/api/user', [ + 'email' => 'new@example.com', + 'name' => 'Test Guy', + 'password' => '12345', + 'password_confirmation' => '12345', + ]); + + $response->assertOk(); + $response->assertJson( + fn (AssertableJson $json) => + $json + ->has('data') + ->where('data.id', $user->id) + ->where('data.email', 'new@example.com') + ->where('data.name', 'Test Guy') + ->etc() + ); + + $response->assertValidResponse(); + } + + public function test_update_current_user_with_password_fail_response() + { + $user = User::factory()->create(); + $this->actingAs($user); + + $response = $this->postJson('/api/user', [ + 'email' => 'new@example.com', + 'name' => 'Test Guy', + 'password' => '12345', + 'password_confirmation' => '123451', + ]); + + $response->assertUnprocessable(); + $response->assertValidResponse(); + } } diff --git a/tests/Unit/UtilsTest.php b/tests/Unit/UtilsTest.php new file mode 100644 index 00000000..183703fe --- /dev/null +++ b/tests/Unit/UtilsTest.php @@ -0,0 +1,74 @@ +assertSame([ + 'amount' => 45, + 'units' => 'ml', + ], Utils::parseIngredientAmount('1½oz')); + + $this->assertSame([ + 'amount' => 7.5, + 'units' => 'ml', + ], Utils::parseIngredientAmount('7,5 ml')); + + $this->assertSame([ + 'amount' => 0, + 'units' => 'ml', + ], Utils::parseIngredientAmount('')); + + $this->assertSame([ + 'amount' => 7.5, + 'units' => 'ml', + ], Utils::parseIngredientAmount('7.5 ml')); + + $this->assertSame([ + 'amount' => 30, + 'units' => 'ml', + ], Utils::parseIngredientAmount('30 ml')); + + $this->assertSame([ + 'amount' => 30, + 'units' => 'ml', + ], Utils::parseIngredientAmount('1 oz')); + + $this->assertSame([ + 'amount' => 22.5, + 'units' => 'ml', + ], Utils::parseIngredientAmount('¾oz')); + + $this->assertSame([ + 'amount' => 15, + 'units' => 'ml', + ], Utils::parseIngredientAmount('½ oz')); + + $this->assertSame([ + 'amount' => 2, + 'units' => 'dashes', + ], Utils::parseIngredientAmount('2 dashes')); + + $this->assertSame([ + 'amount' => 1.4, + 'units' => 'parts', + ], Utils::parseIngredientAmount('1.4 parts')); + + $this->assertSame([ + 'amount' => 45, + 'units' => 'ml', + ], Utils::parseIngredientAmount('4.5 cl')); + + $this->assertSame([ + 'amount' => 30, + 'units' => 'ml', + ], Utils::parseIngredientAmount('3 cl')); + } +}