From 2fa52725ef8de420b577635e9f26f5966ce1aa6a Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Tue, 26 Nov 2024 16:39:57 +0100 Subject: [PATCH 01/18] Refactor client manager Signed-off-by: Philipp Daun --- src/Loupe/Manager.php | 69 +++++++++++++++++++++++++++++++------------ 1 file changed, 50 insertions(+), 19 deletions(-) diff --git a/src/Loupe/Manager.php b/src/Loupe/Manager.php index 4f9e2fa..8f159e5 100644 --- a/src/Loupe/Manager.php +++ b/src/Loupe/Manager.php @@ -2,11 +2,13 @@ namespace Daun\StatamicLoupe\Loupe; -use Illuminate\Support\Facades\File; +use Exception; +use Illuminate\Filesystem\Filesystem; use Loupe\Loupe\Configuration; use Loupe\Loupe\Loupe; use Loupe\Loupe\LoupeFactory; -use Statamic\Facades\Path; + +use function Illuminate\Filesystem\join_paths; class Manager { @@ -15,16 +17,33 @@ class Manager */ protected array $clients = []; + protected LoupeFactory $factory; + + protected Filesystem $filesystem; + public function __construct( - protected readonly LoupeFactory $factory, - protected string $path, + protected string $path ) { - File::ensureDirectoryExists($this->path, mode: 0777); + $this->factory = new LoupeFactory(); + $this->filesystem = new Filesystem(); + $this->init(); + } + + protected function init(): void + { + $this->filesystem->ensureDirectoryExists($this->path); + + if (! $this->filesystem->isDirectory($this->path)) { + throw new Exception(sprintf('The Loupe path "%s" does not exist and cannot be created.', $this->path)); + } + if (! $this->filesystem->isWritable($this->path)) { + throw new Exception(sprintf('The Loupe path "%s" is not writable.', $this->path)); + } } public function get(string $index, Configuration $configuration): Loupe { - return ($this->clients[$index] ??= $this->make($index, $configuration)); + return $this->clients[$index] ??= $this->make($index, $configuration); } public function make(string $index, Configuration $configuration): Loupe @@ -34,31 +53,43 @@ public function make(string $index, Configuration $configuration): Loupe return $this->factory->create($this->indexDirectory($index), $configuration); } - public function indexDirectory(string $index): string + public function indexExists(string $index): bool { - return Path::resolve("{$this->path}/{$index}"); + return $this->filesystem->exists($this->indexPath($index)); } - public function indexPath(string $index): string + public function createIndex(string $index): void { - return Path::resolve("{$this->path}/{$index}/loupe.db"); + $dir = $this->indexDirectory($index); + $db = $this->indexPath($index); + + if (! $this->filesystem->exists($db)) { + $this->filesystem->ensureDirectoryExists($dir); + $this->filesystem->put($db, ''); + } + + if (! $this->filesystem->isFile($db)) { + throw new Exception(sprintf('The Loupe index "%s" does not exist and cannot be created.', $db)); + } + + if (! $this->filesystem->isWritable($db)) { + throw new Exception(sprintf('The Loupe index "%s" is not writable.', $db)); + } } - public function indexExists(string $index): bool + public function dropIndex(string $index): void { - return File::exists($this->indexPath($index)); + $this->get($index, Configuration::create())->deleteAllDocuments(); + // $this->filesystem->cleanDirectory($this->indexDirectory($index)); } - public function createIndex(string $index): void + public function indexDirectory(string $index): string { - File::ensureDirectoryExists($this->indexDirectory($index), mode: 0777); - if (! File::exists($db = $this->indexPath($index))) { - File::put($db, '', lock: true); - } + return join_paths($this->path, $index); } - public function dropIndex(string $index): void + public function indexPath(string $index): string { - File::cleanDirectory($this->indexDirectory($index)); + return join_paths($this->path, $index, 'loupe.db'); } } From 362c9ec9caa260e3bc0c0c736002aa6b1510806c Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Wed, 27 Nov 2024 21:15:44 +0100 Subject: [PATCH 02/18] Add coverage to ci test runs Signed-off-by: Philipp Daun --- composer.json | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/composer.json b/composer.json index 4175a2f..6fb34e4 100644 --- a/composer.json +++ b/composer.json @@ -68,8 +68,7 @@ "format": "./vendor/bin/pint", "lint": "./vendor/bin/pint --test", "test": "./vendor/bin/pest", - "test:ci": "./vendor/bin/pest", - "test:ci:coverate": "./vendor/bin/pest --coverage-clover coverage.xml", + "test:ci": "./vendor/bin/pest --coverage-clover coverage.xml", "test:coverage": "./vendor/bin/pest --coverage" } } From 01af7853fd0e1fb6e42b45f0dc795ab8276b8a97 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Wed, 27 Nov 2024 21:19:17 +0100 Subject: [PATCH 03/18] Speed up index tests Signed-off-by: Philipp Daun --- tests/Feature/IndexTest.php | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/tests/Feature/IndexTest.php b/tests/Feature/IndexTest.php index 29066f5..f6e08c7 100644 --- a/tests/Feature/IndexTest.php +++ b/tests/Feature/IndexTest.php @@ -37,8 +37,6 @@ ->data(['title' => 'Entry 2']); $entry2->save(); - sleep(1); // give it some time to process - $this->assertCount(2, $index->lookup('Entry')); }); @@ -62,8 +60,6 @@ ->data(['title' => 'Entry 2']); $entry2->save(); - sleep(1); // give it some time to process - $results = collect($index->lookup('Entry'))->pluck('title'); $this->assertContains('Entry 1', $results); @@ -71,8 +67,6 @@ $entry2->merge(['title' => 'Entry 2 Updated'])->save(); - sleep(1); // give it some time to process - $results = collect($index->lookup('Entry'))->pluck('title'); $this->assertContains('Entry 2 Updated', $results); @@ -98,8 +92,6 @@ ->data(['title' => 'Entry 2']); $entry2->save(); - sleep(1); // give it some time to process - $results = collect($index->lookup('Entry'))->pluck('title'); $this->assertContains('Entry 1', $results); @@ -107,8 +99,6 @@ $entry2->delete(); - sleep(1); // give it some time to process - $results = collect($index->lookup('Entry'))->pluck('title'); $this->assertContains('Entry 1', $results); From 656558cb3f3a10d2f2e6f88bf4ebfb9b735ccf66 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Wed, 27 Nov 2024 21:21:46 +0100 Subject: [PATCH 04/18] Avoid duplicate workflow runs Signed-off-by: Philipp Daun --- .github/workflows/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5754351..be0e6b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,6 +2,8 @@ name: CI on: push: + branches: + - main pull_request: jobs: From 733372c5bd7890a9b79f60919c1039d9c38864d6 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 12:13:24 +0100 Subject: [PATCH 05/18] Upgrade to loupe 0.9 Signed-off-by: Philipp Daun --- composer.json | 2 +- composer.lock | 1312 +++++++++++++++++++++++++++++-------------------- 2 files changed, 769 insertions(+), 545 deletions(-) diff --git a/composer.json b/composer.json index 4175a2f..10436e2 100644 --- a/composer.json +++ b/composer.json @@ -23,7 +23,7 @@ "require": { "php": "^8.1", "statamic/cms": "^4.0 || ^5.0", - "loupe/loupe": "^0.8.0" + "loupe/loupe": "^0.9.0" }, "require-dev": { "larastan/larastan": "^2.9", diff --git a/composer.lock b/composer.lock index d3ae6f4..847d6c2 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": "fe35c1999613eb51fc179e83ae39adcf", + "content-hash": "361d495d5f95ab0bb735739429ae80dd", "packages": [ { "name": "ajthinking/archetype", @@ -33,10 +33,10 @@ "type": "package", "extra": { "laravel": { - "dont-discover": [], "providers": [ "Archetype\\ServiceProvider" - ] + ], + "dont-discover": [] } }, "autoload": { @@ -356,16 +356,16 @@ }, { "name": "doctrine/dbal", - "version": "4.2.1", + "version": "4.2.2", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0" + "reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/dadd35300837a3a2184bd47d403333b15d0a9bd0", - "reference": "dadd35300837a3a2184bd47d403333b15d0a9bd0", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/19a2b7deb5fe8c2df0ff817ecea305e50acb62ec", + "reference": "19a2b7deb5fe8c2df0ff817ecea305e50acb62ec", "shasum": "" }, "require": { @@ -378,16 +378,14 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.2", - "phpstan/phpstan": "1.12.6", - "phpstan/phpstan-phpunit": "1.4.0", - "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "10.5.30", - "psalm/plugin-phpunit": "0.19.0", + "phpstan/phpstan": "2.1.1", + "phpstan/phpstan-phpunit": "2.0.3", + "phpstan/phpstan-strict-rules": "^2", + "phpunit/phpunit": "10.5.39", "slevomat/coding-standard": "8.13.1", "squizlabs/php_codesniffer": "3.10.2", "symfony/cache": "^6.3.8|^7.0", - "symfony/console": "^5.4|^6.3|^7.0", - "vimeo/psalm": "5.25.0" + "symfony/console": "^5.4|^6.3|^7.0" }, "suggest": { "symfony/console": "For helpful console commands such as SQL execution and import of files." @@ -444,7 +442,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/4.2.1" + "source": "https://github.com/doctrine/dbal/tree/4.2.2" }, "funding": [ { @@ -460,33 +458,31 @@ "type": "tidelift" } ], - "time": "2024-10-10T18:01:27+00:00" + "time": "2025-01-16T08:40:56+00:00" }, { "name": "doctrine/deprecations", - "version": "1.1.3", + "version": "1.1.4", "source": { "type": "git", "url": "https://github.com/doctrine/deprecations.git", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab" + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/deprecations/zipball/dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", - "reference": "dfbaa3c2d2e9a9df1118213f3b8b0c597bb99fab", + "url": "https://api.github.com/repos/doctrine/deprecations/zipball/31610dbb31faa98e6b5447b62340826f54fbc4e9", + "reference": "31610dbb31faa98e6b5447b62340826f54fbc4e9", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^9", - "phpstan/phpstan": "1.4.10 || 1.10.15", - "phpstan/phpstan-phpunit": "^1.0", + "doctrine/coding-standard": "^9 || ^12", + "phpstan/phpstan": "1.4.10 || 2.0.3", + "phpstan/phpstan-phpunit": "^1.0 || ^2", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", - "psalm/plugin-phpunit": "0.18.4", - "psr/log": "^1 || ^2 || ^3", - "vimeo/psalm": "4.30.0 || 5.12.0" + "psr/log": "^1 || ^2 || ^3" }, "suggest": { "psr/log": "Allows logging deprecations via PSR-3 logger implementation" @@ -494,7 +490,7 @@ "type": "library", "autoload": { "psr-4": { - "Doctrine\\Deprecations\\": "lib/Doctrine/Deprecations" + "Doctrine\\Deprecations\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -505,9 +501,9 @@ "homepage": "https://www.doctrine-project.org/", "support": { "issues": "https://github.com/doctrine/deprecations/issues", - "source": "https://github.com/doctrine/deprecations/tree/1.1.3" + "source": "https://github.com/doctrine/deprecations/tree/1.1.4" }, - "time": "2024-01-30T19:34:25+00:00" + "time": "2024-12-07T21:18:45+00:00" }, { "name": "doctrine/inflector", @@ -744,16 +740,16 @@ }, { "name": "egulias/email-validator", - "version": "4.0.2", + "version": "4.0.3", "source": { "type": "git", "url": "https://github.com/egulias/EmailValidator.git", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e" + "reference": "b115554301161fa21467629f1e1391c1936de517" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/ebaaf5be6c0286928352e054f2d5125608e5405e", - "reference": "ebaaf5be6c0286928352e054f2d5125608e5405e", + "url": "https://api.github.com/repos/egulias/EmailValidator/zipball/b115554301161fa21467629f1e1391c1936de517", + "reference": "b115554301161fa21467629f1e1391c1936de517", "shasum": "" }, "require": { @@ -799,7 +795,7 @@ ], "support": { "issues": "https://github.com/egulias/EmailValidator/issues", - "source": "https://github.com/egulias/EmailValidator/tree/4.0.2" + "source": "https://github.com/egulias/EmailValidator/tree/4.0.3" }, "funding": [ { @@ -807,7 +803,7 @@ "type": "github" } ], - "time": "2023-10-06T06:47:41+00:00" + "time": "2024-12-27T00:36:43+00:00" }, { "name": "fruitcake/php-cors", @@ -1383,16 +1379,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "2.4-dev" - }, "laravel": { - "providers": [ - "Intervention\\Image\\ImageServiceProvider" - ], "aliases": { "Image": "Intervention\\Image\\Facades\\Image" - } + }, + "providers": [ + "Intervention\\Image\\ImageServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "2.4-dev" } }, "autoload": { @@ -1564,16 +1560,16 @@ }, { "name": "laravel/framework", - "version": "v11.34.0", + "version": "v11.38.2", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "858184e8def3f20f588f9ab88355003750845a6c" + "reference": "9d290aa90fcad44048bedca5219d2b872e98772a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/858184e8def3f20f588f9ab88355003750845a6c", - "reference": "858184e8def3f20f588f9ab88355003750845a6c", + "url": "https://api.github.com/repos/laravel/framework/zipball/9d290aa90fcad44048bedca5219d2b872e98772a", + "reference": "9d290aa90fcad44048bedca5219d2b872e98772a", "shasum": "" }, "require": { @@ -1594,9 +1590,10 @@ "guzzlehttp/uri-template": "^1.0", "laravel/prompts": "^0.1.18|^0.2.0|^0.3.0", "laravel/serializable-closure": "^1.3|^2.0", - "league/commonmark": "^2.2.1", + "league/commonmark": "^2.6", "league/flysystem": "^3.25.1", "league/flysystem-local": "^3.25.1", + "league/uri": "^7.5.1", "monolog/monolog": "^3.0", "nesbot/carbon": "^2.72.2|^3.4", "nunomaduro/termwind": "^2.0", @@ -1608,7 +1605,7 @@ "symfony/console": "^7.0.3", "symfony/error-handler": "^7.0.3", "symfony/finder": "^7.0.3", - "symfony/http-foundation": "^7.0.3", + "symfony/http-foundation": "^7.2.0", "symfony/http-kernel": "^7.0.3", "symfony/mailer": "^7.0.3", "symfony/mime": "^7.0.3", @@ -1622,7 +1619,6 @@ "voku/portable-ascii": "^2.0.2" }, "conflict": { - "mockery/mockery": "1.6.8", "tightenco/collect": "<5.5.33" }, "provide": { @@ -1680,9 +1676,9 @@ "league/flysystem-read-only": "^3.25.1", "league/flysystem-sftp-v3": "^3.25.1", "mockery/mockery": "^1.6.10", - "nyholm/psr7": "^1.2", "orchestra/testbench-core": "^9.6", "pda/pheanstalk": "^5.0.6", + "php-http/discovery": "^1.15", "phpstan/phpstan": "^1.11.5", "phpunit/phpunit": "^10.5.35|^11.3.6", "predis/predis": "^2.3", @@ -1714,8 +1710,8 @@ "league/flysystem-read-only": "Required to use read-only disks (^3.25.1)", "league/flysystem-sftp-v3": "Required to use the Flysystem SFTP driver (^3.25.1).", "mockery/mockery": "Required to use mocking (^1.6).", - "nyholm/psr7": "Required to use PSR-7 bridging features (^1.2).", "pda/pheanstalk": "Required to use the beanstalk queue driver (^5.0).", + "php-http/discovery": "Required to use PSR-7 bridging features (^1.15).", "phpunit/phpunit": "Required to use assertions and run tests (^10.5|^11.0).", "predis/predis": "Required to use the predis connector (^2.3).", "psr/http-message": "Required to allow Storage::put to accept a StreamInterface (^1.0).", @@ -1736,6 +1732,7 @@ }, "autoload": { "files": [ + "src/Illuminate/Collections/functions.php", "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", "src/Illuminate/Filesystem/functions.php", @@ -1773,25 +1770,25 @@ "issues": "https://github.com/laravel/framework/issues", "source": "https://github.com/laravel/framework" }, - "time": "2024-11-26T15:11:52+00:00" + "time": "2025-01-15T00:06:46+00:00" }, { "name": "laravel/prompts", - "version": "v0.1.25", + "version": "v0.3.3", "source": { "type": "git", "url": "https://github.com/laravel/prompts.git", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95" + "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/prompts/zipball/7b4029a84c37cb2725fc7f011586e2997040bc95", - "reference": "7b4029a84c37cb2725fc7f011586e2997040bc95", + "url": "https://api.github.com/repos/laravel/prompts/zipball/749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", + "reference": "749395fcd5f8f7530fe1f00dfa84eb22c83d94ea", "shasum": "" }, "require": { + "composer-runtime-api": "^2.2", "ext-mbstring": "*", - "illuminate/collections": "^10.0|^11.0", "php": "^8.1", "symfony/console": "^6.2|^7.0" }, @@ -1800,8 +1797,9 @@ "laravel/framework": ">=10.17.0 <10.25.0" }, "require-dev": { + "illuminate/collections": "^10.0|^11.0", "mockery/mockery": "^1.5", - "pestphp/pest": "^2.3", + "pestphp/pest": "^2.3|^3.4", "phpstan/phpstan": "^1.11", "phpstan/phpstan-mockery": "^1.1" }, @@ -1811,7 +1809,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "0.1.x-dev" + "dev-main": "0.3.x-dev" } }, "autoload": { @@ -1829,22 +1827,22 @@ "description": "Add beautiful and user-friendly forms to your command-line applications.", "support": { "issues": "https://github.com/laravel/prompts/issues", - "source": "https://github.com/laravel/prompts/tree/v0.1.25" + "source": "https://github.com/laravel/prompts/tree/v0.3.3" }, - "time": "2024-08-12T22:06:33+00:00" + "time": "2024-12-30T15:53:31+00:00" }, { "name": "laravel/serializable-closure", - "version": "v2.0.0", + "version": "v2.0.1", "source": { "type": "git", "url": "https://github.com/laravel/serializable-closure.git", - "reference": "0d8d3d8086984996df86596a86dea60398093a81" + "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/0d8d3d8086984996df86596a86dea60398093a81", - "reference": "0d8d3d8086984996df86596a86dea60398093a81", + "url": "https://api.github.com/repos/laravel/serializable-closure/zipball/613b2d4998f85564d40497e05e89cb6d9bd1cbe8", + "reference": "613b2d4998f85564d40497e05e89cb6d9bd1cbe8", "shasum": "" }, "require": { @@ -1892,20 +1890,20 @@ "issues": "https://github.com/laravel/serializable-closure/issues", "source": "https://github.com/laravel/serializable-closure" }, - "time": "2024-11-19T01:38:44+00:00" + "time": "2024-12-16T15:26:28+00:00" }, { "name": "league/commonmark", - "version": "2.5.3", + "version": "2.6.1", "source": { "type": "git", "url": "https://github.com/thephpleague/commonmark.git", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0" + "reference": "d990688c91cedfb69753ffc2512727ec646df2ad" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/b650144166dfa7703e62a22e493b853b58d874b0", - "reference": "b650144166dfa7703e62a22e493b853b58d874b0", + "url": "https://api.github.com/repos/thephpleague/commonmark/zipball/d990688c91cedfb69753ffc2512727ec646df2ad", + "reference": "d990688c91cedfb69753ffc2512727ec646df2ad", "shasum": "" }, "require": { @@ -1930,8 +1928,9 @@ "phpstan/phpstan": "^1.8.2", "phpunit/phpunit": "^9.5.21 || ^10.5.9 || ^11.0.0", "scrutinizer/ocular": "^1.8.1", - "symfony/finder": "^5.3 | ^6.0 || ^7.0", - "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 || ^7.0", + "symfony/finder": "^5.3 | ^6.0 | ^7.0", + "symfony/process": "^5.4 | ^6.0 | ^7.0", + "symfony/yaml": "^2.3 | ^3.0 | ^4.0 | ^5.0 | ^6.0 | ^7.0", "unleashedtech/php-coding-standard": "^3.1.1", "vimeo/psalm": "^4.24.0 || ^5.0.0" }, @@ -1941,7 +1940,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "2.6-dev" + "dev-main": "2.7-dev" } }, "autoload": { @@ -1998,7 +1997,7 @@ "type": "tidelift" } ], - "time": "2024-08-16T11:46:16+00:00" + "time": "2024-12-29T14:10:59+00:00" }, { "name": "league/config", @@ -2084,16 +2083,16 @@ }, { "name": "league/csv", - "version": "9.18.0", + "version": "9.21.0", "source": { "type": "git", "url": "https://github.com/thephpleague/csv.git", - "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790" + "reference": "72196d11ebba22d868954cb39c0c7346207430cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/csv/zipball/b02d010e4055ae992247f6ffd1e7b103ef2a0790", - "reference": "b02d010e4055ae992247f6ffd1e7b103ef2a0790", + "url": "https://api.github.com/repos/thephpleague/csv/zipball/72196d11ebba22d868954cb39c0c7346207430cc", + "reference": "72196d11ebba22d868954cb39c0c7346207430cc", "shasum": "" }, "require": { @@ -2105,12 +2104,12 @@ "ext-xdebug": "*", "friendsofphp/php-cs-fixer": "^3.64.0", "phpbench/phpbench": "^1.3.1", - "phpstan/phpstan": "^1.12.6", + "phpstan/phpstan": "^1.12.11", "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.0", + "phpstan/phpstan-phpunit": "^1.4.1", "phpstan/phpstan-strict-rules": "^1.6.1", - "phpunit/phpunit": "^10.5.16 || ^11.4.1", - "symfony/var-dumper": "^6.4.8 || ^7.1.5" + "phpunit/phpunit": "^10.5.16 || ^11.4.3", + "symfony/var-dumper": "^6.4.8 || ^7.1.8" }, "suggest": { "ext-dom": "Required to use the XMLConverter and the HTMLConverter classes", @@ -2167,7 +2166,7 @@ "type": "github" } ], - "time": "2024-10-18T08:14:48+00:00" + "time": "2025-01-08T19:27:58+00:00" }, { "name": "league/flysystem", @@ -2303,16 +2302,16 @@ }, { "name": "league/glide", - "version": "2.3.0", + "version": "2.3.1", "source": { "type": "git", "url": "https://github.com/thephpleague/glide.git", - "reference": "2ff92c8f1edc80b74e2d3c5efccfc7223f74d407" + "reference": "62fc5ebd579e013e7573c00d1fb7e083ed395f00" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/thephpleague/glide/zipball/2ff92c8f1edc80b74e2d3c5efccfc7223f74d407", - "reference": "2ff92c8f1edc80b74e2d3c5efccfc7223f74d407", + "url": "https://api.github.com/repos/thephpleague/glide/zipball/62fc5ebd579e013e7573c00d1fb7e083ed395f00", + "reference": "62fc5ebd579e013e7573c00d1fb7e083ed395f00", "shasum": "" }, "require": { @@ -2362,9 +2361,9 @@ ], "support": { "issues": "https://github.com/thephpleague/glide/issues", - "source": "https://github.com/thephpleague/glide/tree/2.3.0" + "source": "https://github.com/thephpleague/glide/tree/2.3.1" }, - "time": "2023-07-08T06:26:07+00:00" + "time": "2024-12-17T05:40:16+00:00" }, { "name": "league/mime-type-detection", @@ -2422,18 +2421,192 @@ ], "time": "2024-09-21T08:32:55+00:00" }, + { + "name": "league/uri", + "version": "7.5.1", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri.git", + "reference": "81fb5145d2644324614cc532b28efd0215bda430" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri/zipball/81fb5145d2644324614cc532b28efd0215bda430", + "reference": "81fb5145d2644324614cc532b28efd0215bda430", + "shasum": "" + }, + "require": { + "league/uri-interfaces": "^7.5", + "php": "^8.1" + }, + "conflict": { + "league/uri-schemes": "^1.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-fileinfo": "to create Data URI from file contennts", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "jeremykendall/php-domain-parser": "to resolve Public Suffix and Top Level Domain", + "league/uri-components": "Needed to easily manipulate URI objects components", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "URI manipulation library", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "middleware", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "uri-template", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri/tree/7.5.1" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:40:02+00:00" + }, + { + "name": "league/uri-interfaces", + "version": "7.5.0", + "source": { + "type": "git", + "url": "https://github.com/thephpleague/uri-interfaces.git", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/thephpleague/uri-interfaces/zipball/08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "reference": "08cfc6c4f3d811584fb09c37e2849e6a7f9b0742", + "shasum": "" + }, + "require": { + "ext-filter": "*", + "php": "^8.1", + "psr/http-factory": "^1", + "psr/http-message": "^1.1 || ^2.0" + }, + "suggest": { + "ext-bcmath": "to improve IPV4 host parsing", + "ext-gmp": "to improve IPV4 host parsing", + "ext-intl": "to handle IDN host with the best performance", + "php-64bit": "to improve IPV4 host parsing", + "symfony/polyfill-intl-idn": "to handle IDN host via the Symfony polyfill if ext-intl is not present" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.x-dev" + } + }, + "autoload": { + "psr-4": { + "League\\Uri\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ignace Nyamagana Butera", + "email": "nyamsprod@gmail.com", + "homepage": "https://nyamsprod.com" + } + ], + "description": "Common interfaces and classes for URI representation and interaction", + "homepage": "https://uri.thephpleague.com", + "keywords": [ + "data-uri", + "file-uri", + "ftp", + "hostname", + "http", + "https", + "parse_str", + "parse_url", + "psr-7", + "query-string", + "querystring", + "rfc3986", + "rfc3987", + "rfc6570", + "uri", + "url", + "ws" + ], + "support": { + "docs": "https://uri.thephpleague.com", + "forum": "https://thephpleague.slack.com", + "issues": "https://github.com/thephpleague/uri-src/issues", + "source": "https://github.com/thephpleague/uri-interfaces/tree/7.5.0" + }, + "funding": [ + { + "url": "https://github.com/sponsors/nyamsprod", + "type": "github" + } + ], + "time": "2024-12-08T08:18:47+00:00" + }, { "name": "loupe/loupe", - "version": "0.8.1", + "version": "0.9.0", "source": { "type": "git", "url": "https://github.com/loupe-php/loupe.git", - "reference": "8a9aae9bc46cc470483e82631024567d528664d2" + "reference": "da01e0cf3b1d7a7bf27a21f33c4028d34877c8e7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/loupe-php/loupe/zipball/8a9aae9bc46cc470483e82631024567d528664d2", - "reference": "8a9aae9bc46cc470483e82631024567d528664d2", + "url": "https://api.github.com/repos/loupe-php/loupe/zipball/da01e0cf3b1d7a7bf27a21f33c4028d34877c8e7", + "reference": "da01e0cf3b1d7a7bf27a21f33c4028d34877c8e7", "shasum": "" }, "require": { @@ -2445,7 +2618,7 @@ "nitotm/efficient-language-detector": "^2.0", "php": "^8.1", "psr/log": "^2.0 || ^3.0", - "toflar/state-set-index": "^2.0.1", + "toflar/state-set-index": "^3.0", "wamania/php-stemmer": "^3.0" }, "require-dev": { @@ -2475,7 +2648,7 @@ "description": "A full text search engine with tokenization, stemming, typo tolerance, filters and geo support based on only PHP and SQLite", "support": { "issues": "https://github.com/loupe-php/loupe/issues", - "source": "https://github.com/loupe-php/loupe/tree/0.8.1" + "source": "https://github.com/loupe-php/loupe/tree/0.9.0" }, "funding": [ { @@ -2483,7 +2656,7 @@ "type": "github" } ], - "time": "2024-11-26T09:16:14+00:00" + "time": "2025-01-17T10:37:37+00:00" }, { "name": "maennchen/zipstream-php", @@ -2701,16 +2874,16 @@ }, { "name": "monolog/monolog", - "version": "3.8.0", + "version": "3.8.1", "source": { "type": "git", "url": "https://github.com/Seldaek/monolog.git", - "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67" + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/monolog/zipball/32e515fdc02cdafbe4593e30a9350d486b125b67", - "reference": "32e515fdc02cdafbe4593e30a9350d486b125b67", + "url": "https://api.github.com/repos/Seldaek/monolog/zipball/aef6ee73a77a66e404dd6540934a9ef1b3c855b4", + "reference": "aef6ee73a77a66e404dd6540934a9ef1b3c855b4", "shasum": "" }, "require": { @@ -2788,7 +2961,7 @@ ], "support": { "issues": "https://github.com/Seldaek/monolog/issues", - "source": "https://github.com/Seldaek/monolog/tree/3.8.0" + "source": "https://github.com/Seldaek/monolog/tree/3.8.1" }, "funding": [ { @@ -2800,20 +2973,20 @@ "type": "tidelift" } ], - "time": "2024-11-12T13:57:08+00:00" + "time": "2024-12-05T17:15:07+00:00" }, { "name": "nesbot/carbon", - "version": "2.72.5", + "version": "2.72.6", "source": { "type": "git", - "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed" + "url": "https://github.com/CarbonPHP/carbon.git", + "reference": "1e9d50601e7035a4c61441a208cb5bed73e108c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/afd46589c216118ecd48ff2b95d77596af1e57ed", - "reference": "afd46589c216118ecd48ff2b95d77596af1e57ed", + "url": "https://api.github.com/repos/CarbonPHP/carbon/zipball/1e9d50601e7035a4c61441a208cb5bed73e108c5", + "reference": "1e9d50601e7035a4c61441a208cb5bed73e108c5", "shasum": "" }, "require": { @@ -2833,7 +3006,7 @@ "doctrine/orm": "^2.7 || ^3.0", "friendsofphp/php-cs-fixer": "^3.0", "kylekatarnls/multi-tester": "^2.0", - "ondrejmirtes/better-reflection": "*", + "ondrejmirtes/better-reflection": "<6", "phpmd/phpmd": "^2.9", "phpstan/extension-installer": "^1.0", "phpstan/phpstan": "^0.12.99 || ^1.7.14", @@ -2846,10 +3019,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "3.x-dev", - "dev-2.x": "2.x-dev" - }, "laravel": { "providers": [ "Carbon\\Laravel\\ServiceProvider" @@ -2859,6 +3028,10 @@ "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-2.x": "2.x-dev", + "dev-master": "3.x-dev" } }, "autoload": { @@ -2907,7 +3080,7 @@ "type": "tidelift" } ], - "time": "2024-06-03T19:18:41+00:00" + "time": "2024-12-27T09:28:11+00:00" }, { "name": "nette/schema", @@ -3059,16 +3232,16 @@ }, { "name": "nikic/php-parser", - "version": "v5.3.1", + "version": "v5.4.0", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b" + "reference": "447a020a1f875a434d62f2a401f53b82a396e494" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/8eea230464783aa9671db8eea6f8c6ac5285794b", - "reference": "8eea230464783aa9671db8eea6f8c6ac5285794b", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/447a020a1f875a434d62f2a401f53b82a396e494", + "reference": "447a020a1f875a434d62f2a401f53b82a396e494", "shasum": "" }, "require": { @@ -3111,9 +3284,9 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v5.3.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.4.0" }, - "time": "2024-10-08T18:51:32+00:00" + "time": "2024-12-30T11:07:19+00:00" }, { "name": "nitotm/efficient-language-detector", @@ -4108,16 +4281,16 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "9.x-dev" - }, "laravel": { - "providers": [ - "Rebing\\GraphQL\\GraphQLServiceProvider" - ], "aliases": { "GraphQL": "Rebing\\GraphQL\\Support\\Facades\\GraphQL" - } + }, + "providers": [ + "Rebing\\GraphQL\\GraphQLServiceProvider" + ] + }, + "branch-alias": { + "dev-master": "9.x-dev" } }, "autoload": { @@ -4302,27 +4475,27 @@ }, { "name": "spatie/backtrace", - "version": "1.6.3", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/spatie/backtrace.git", - "reference": "7c18db2bc667ac84e5d7c18e33f16c38ff2d8838" + "reference": "0f2477c520e3729de58e061b8192f161c99f770b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/backtrace/zipball/7c18db2bc667ac84e5d7c18e33f16c38ff2d8838", - "reference": "7c18db2bc667ac84e5d7c18e33f16c38ff2d8838", + "url": "https://api.github.com/repos/spatie/backtrace/zipball/0f2477c520e3729de58e061b8192f161c99f770b", + "reference": "0f2477c520e3729de58e061b8192f161c99f770b", "shasum": "" }, "require": { - "php": "^7.3|^8.0" + "php": "^7.3 || ^8.0" }, "require-dev": { "ext-json": "*", - "laravel/serializable-closure": "^1.3", - "phpunit/phpunit": "^9.3", - "spatie/phpunit-snapshot-assertions": "^4.2", - "symfony/var-dumper": "^5.1" + "laravel/serializable-closure": "^1.3 || ^2.0", + "phpunit/phpunit": "^9.3 || ^11.4.3", + "spatie/phpunit-snapshot-assertions": "^4.2 || ^5.1.6", + "symfony/var-dumper": "^5.1 || ^6.0 || ^7.0" }, "type": "library", "autoload": { @@ -4349,7 +4522,7 @@ "spatie" ], "support": { - "source": "https://github.com/spatie/backtrace/tree/1.6.3" + "source": "https://github.com/spatie/backtrace/tree/1.7.1" }, "funding": [ { @@ -4361,7 +4534,7 @@ "type": "other" } ], - "time": "2024-11-18T14:58:58+00:00" + "time": "2024-12-02T13:28:15+00:00" }, { "name": "spatie/blink", @@ -4427,16 +4600,16 @@ }, { "name": "spatie/error-solutions", - "version": "1.1.1", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/spatie/error-solutions.git", - "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67" + "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/error-solutions/zipball/ae7393122eda72eed7cc4f176d1e96ea444f2d67", - "reference": "ae7393122eda72eed7cc4f176d1e96ea444f2d67", + "url": "https://api.github.com/repos/spatie/error-solutions/zipball/d239a65235a1eb128dfa0a4e4c4ef032ea11b541", + "reference": "d239a65235a1eb128dfa0a4e4c4ef032ea11b541", "shasum": "" }, "require": { @@ -4489,7 +4662,7 @@ ], "support": { "issues": "https://github.com/spatie/error-solutions/issues", - "source": "https://github.com/spatie/error-solutions/tree/1.1.1" + "source": "https://github.com/spatie/error-solutions/tree/1.1.2" }, "funding": [ { @@ -4497,20 +4670,20 @@ "type": "github" } ], - "time": "2024-07-25T11:06:04+00:00" + "time": "2024-12-11T09:51:56+00:00" }, { "name": "spatie/flare-client-php", - "version": "1.8.0", + "version": "1.10.0", "source": { "type": "git", "url": "https://github.com/spatie/flare-client-php.git", - "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122" + "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", - "reference": "180f8ca4c0d0d6fc51477bd8c53ce37ab5a96122", + "url": "https://api.github.com/repos/spatie/flare-client-php/zipball/140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", + "reference": "140a42b2c5d59ac4ecf8f5b493386a4f2eb28272", "shasum": "" }, "require": { @@ -4558,7 +4731,7 @@ ], "support": { "issues": "https://github.com/spatie/flare-client-php/issues", - "source": "https://github.com/spatie/flare-client-php/tree/1.8.0" + "source": "https://github.com/spatie/flare-client-php/tree/1.10.0" }, "funding": [ { @@ -4566,7 +4739,7 @@ "type": "github" } ], - "time": "2024-08-01T08:27:26+00:00" + "time": "2024-12-02T14:30:06+00:00" }, { "name": "spatie/ignition", @@ -4718,16 +4891,16 @@ }, { "name": "statamic/cms", - "version": "v5.39.0", + "version": "v5.45.1", "source": { "type": "git", "url": "https://github.com/statamic/cms.git", - "reference": "f52ea08f4426b4856953eae977484b3e13cc66ff" + "reference": "8a2ad86a7b7ad8a76c37db3ee3ff71ecbad45627" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/statamic/cms/zipball/f52ea08f4426b4856953eae977484b3e13cc66ff", - "reference": "f52ea08f4426b4856953eae977484b3e13cc66ff", + "url": "https://api.github.com/repos/statamic/cms/zipball/8a2ad86a7b7ad8a76c37db3ee3ff71ecbad45627", + "reference": "8a2ad86a7b7ad8a76c37db3ee3ff71ecbad45627", "shasum": "" }, "require": { @@ -4736,8 +4909,8 @@ "ext-json": "*", "guzzlehttp/guzzle": "^6.3 || ^7.0", "james-heinrich/getid3": "^1.9.21", - "laravel/framework": "^10.40 || ^11.0", - "laravel/prompts": "^0.1.16", + "laravel/framework": "^10.40 || ^11.34", + "laravel/prompts": "^0.1.16 || ^0.2.0 || ^0.3.0", "league/commonmark": "^2.2", "league/csv": "^9.0", "league/glide": "^2.3", @@ -4745,7 +4918,7 @@ "michelf/php-smartypants": "^1.8.1", "nesbot/carbon": "^2.62.1", "pixelfear/composer-dist-plugin": "^0.1.4", - "rebing/graphql-laravel": "^9.5", + "rebing/graphql-laravel": "^9.7", "rhukster/dom-sanitizer": "^1.0.6", "spatie/blink": "^1.3", "spatie/ignition": "^1.15", @@ -4755,7 +4928,7 @@ "symfony/var-exporter": "^6.0", "symfony/yaml": "^6.0 || ^7.0", "ueberdosis/tiptap-php": "^1.4", - "voku/portable-ascii": "^2.0", + "voku/portable-ascii": "^2.0.2", "wilderborn/partyline": "^1.0" }, "require-dev": { @@ -4763,13 +4936,21 @@ "fakerphp/faker": "~1.10", "google/cloud-translate": "^1.6", "laravel/pint": "1.16.0", - "mockery/mockery": "^1.3.3", - "orchestra/testbench": "^8.14 || ^9.0", - "phpunit/phpunit": "^10.0", + "mockery/mockery": "^1.6.10", + "orchestra/testbench": "^8.14 || ^9.2", + "phpunit/phpunit": "^10.5.35", "spatie/laravel-ray": "^1.37" }, "type": "library", "extra": { + "laravel": { + "aliases": { + "Statamic": "Statamic\\Statamic" + }, + "providers": [ + "Statamic\\Providers\\StatamicServiceProvider" + ] + }, "download-dist": [ { "url": "https://github.com/statamic/cms/releases/download/{$version}/dist.tar.gz", @@ -4779,15 +4960,7 @@ "url": "https://github.com/statamic/cms/releases/download/{$version}/dist-frontend.tar.gz", "path": "resources/dist-frontend" } - ], - "laravel": { - "providers": [ - "Statamic\\Providers\\StatamicServiceProvider" - ], - "aliases": { - "Statamic": "Statamic\\Statamic" - } - } + ] }, "autoload": { "files": [ @@ -4812,7 +4985,7 @@ ], "support": { "issues": "https://github.com/statamic/cms/issues", - "source": "https://github.com/statamic/cms/tree/v5.39.0" + "source": "https://github.com/statamic/cms/tree/v5.45.1" }, "funding": [ { @@ -4820,7 +4993,7 @@ "type": "github" } ], - "time": "2024-11-22T20:36:04+00:00" + "time": "2025-01-07T20:17:24+00:00" }, { "name": "statamic/stringy", @@ -4892,16 +5065,16 @@ }, { "name": "stillat/blade-parser", - "version": "v1.10.1", + "version": "v1.10.2", "source": { "type": "git", "url": "https://github.com/Stillat/blade-parser.git", - "reference": "7d0180b825c7e4f22c08575f86d9e21124b01d89" + "reference": "959cdda611e7819f9db8a49d91c7d963d702fbd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Stillat/blade-parser/zipball/7d0180b825c7e4f22c08575f86d9e21124b01d89", - "reference": "7d0180b825c7e4f22c08575f86d9e21124b01d89", + "url": "https://api.github.com/repos/Stillat/blade-parser/zipball/959cdda611e7819f9db8a49d91c7d963d702fbd4", + "reference": "959cdda611e7819f9db8a49d91c7d963d702fbd4", "shasum": "" }, "require": { @@ -4929,9 +5102,12 @@ } }, "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], "support": { "issues": "https://github.com/Stillat/blade-parser/issues", - "source": "https://github.com/Stillat/blade-parser/tree/v1.10.1" + "source": "https://github.com/Stillat/blade-parser/tree/v1.10.2" }, "funding": [ { @@ -4939,20 +5115,20 @@ "type": "github" } ], - "time": "2024-10-17T15:45:32+00:00" + "time": "2024-11-27T20:25:52+00:00" }, { "name": "symfony/console", - "version": "v7.1.8", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5" + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/ff04e5b5ba043d2badfb308197b9e6b42883fcd5", - "reference": "ff04e5b5ba043d2badfb308197b9e6b42883fcd5", + "url": "https://api.github.com/repos/symfony/console/zipball/fefcc18c0f5d0efe3ab3152f15857298868dc2c3", + "reference": "fefcc18c0f5d0efe3ab3152f15857298868dc2c3", "shasum": "" }, "require": { @@ -5016,7 +5192,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v7.1.8" + "source": "https://github.com/symfony/console/tree/v7.2.1" }, "funding": [ { @@ -5032,20 +5208,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-12-11T03:49:26+00:00" }, { "name": "symfony/css-selector", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66" + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/css-selector/zipball/4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", - "reference": "4aa4f6b3d6749c14d3aa815eef8226632e7bbc66", + "url": "https://api.github.com/repos/symfony/css-selector/zipball/601a5ce9aaad7bf10797e3663faefce9e26c24e2", + "reference": "601a5ce9aaad7bf10797e3663faefce9e26c24e2", "shasum": "" }, "require": { @@ -5081,7 +5257,7 @@ "description": "Converts CSS selectors to XPath expressions", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/css-selector/tree/v7.1.6" + "source": "https://github.com/symfony/css-selector/tree/v7.2.0" }, "funding": [ { @@ -5097,20 +5273,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/deprecation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/deprecation-contracts.git", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1" + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", - "reference": "0e0d29ce1f20deffb4ab1b016a7257c4f1e789a1", + "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", + "reference": "74c71c939a79f7d5bf3c1ce9f5ea37ba0114c6f6", "shasum": "" }, "require": { @@ -5118,12 +5294,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5148,7 +5324,7 @@ "description": "A generic function and convention to trigger deprecation notices", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/deprecation-contracts/tree/v3.5.1" }, "funding": [ { @@ -5164,20 +5340,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/error-handler", - "version": "v7.1.7", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342" + "reference": "6150b89186573046167796fa5f3f76601d5145f8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/010e44661f4c6babaf8c4862fe68c24a53903342", - "reference": "010e44661f4c6babaf8c4862fe68c24a53903342", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/6150b89186573046167796fa5f3f76601d5145f8", + "reference": "6150b89186573046167796fa5f3f76601d5145f8", "shasum": "" }, "require": { @@ -5223,7 +5399,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/v7.1.7" + "source": "https://github.com/symfony/error-handler/tree/v7.2.1" }, "funding": [ { @@ -5239,20 +5415,20 @@ "type": "tidelift" } ], - "time": "2024-11-05T15:34:55+00:00" + "time": "2024-12-07T08:50:44+00:00" }, { "name": "symfony/event-dispatcher", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", - "reference": "87254c78dd50721cfd015b62277a8281c5589702" + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/87254c78dd50721cfd015b62277a8281c5589702", - "reference": "87254c78dd50721cfd015b62277a8281c5589702", + "url": "https://api.github.com/repos/symfony/event-dispatcher/zipball/910c5db85a5356d0fea57680defec4e99eb9c8c1", + "reference": "910c5db85a5356d0fea57680defec4e99eb9c8c1", "shasum": "" }, "require": { @@ -5303,7 +5479,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/v7.1.6" + "source": "https://github.com/symfony/event-dispatcher/tree/v7.2.0" }, "funding": [ { @@ -5319,20 +5495,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/event-dispatcher-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher-contracts.git", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50" + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/8f93aec25d41b72493c6ddff14e916177c9efc50", - "reference": "8f93aec25d41b72493c6ddff14e916177c9efc50", + "url": "https://api.github.com/repos/symfony/event-dispatcher-contracts/zipball/7642f5e970b672283b7823222ae8ef8bbc160b9f", + "reference": "7642f5e970b672283b7823222ae8ef8bbc160b9f", "shasum": "" }, "require": { @@ -5341,12 +5517,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -5379,7 +5555,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.5.1" }, "funding": [ { @@ -5395,20 +5571,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/finder", - "version": "v7.1.6", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8" + "reference": "87a71856f2f56e4100373e92529eed3171695cfb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/2cb89664897be33f78c65d3d2845954c8d7a43b8", - "reference": "2cb89664897be33f78c65d3d2845954c8d7a43b8", + "url": "https://api.github.com/repos/symfony/finder/zipball/87a71856f2f56e4100373e92529eed3171695cfb", + "reference": "87a71856f2f56e4100373e92529eed3171695cfb", "shasum": "" }, "require": { @@ -5443,7 +5619,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v7.1.6" + "source": "https://github.com/symfony/finder/tree/v7.2.2" }, "funding": [ { @@ -5459,24 +5635,25 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/http-foundation", - "version": "v7.1.8", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112" + "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/f4419ec69ccfc3f725a4de7c20e4e57626d10112", - "reference": "f4419ec69ccfc3f725a4de7c20e4e57626d10112", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/62d1a43796ca3fea3f83a8470dfe63a4af3bc588", + "reference": "62d1a43796ca3fea3f83a8470dfe63a4af3bc588", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-mbstring": "~1.1", "symfony/polyfill-php83": "^1.27" }, @@ -5520,7 +5697,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v7.1.8" + "source": "https://github.com/symfony/http-foundation/tree/v7.2.2" }, "funding": [ { @@ -5536,20 +5713,20 @@ "type": "tidelift" } ], - "time": "2024-11-09T09:16:45+00:00" + "time": "2024-12-30T19:00:17+00:00" }, { "name": "symfony/http-kernel", - "version": "v7.1.8", + "version": "v7.2.2", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "33fef24e3dc79d6d30bf4936531f2f4bd2ca189e" + "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/33fef24e3dc79d6d30bf4936531f2f4bd2ca189e", - "reference": "33fef24e3dc79d6d30bf4936531f2f4bd2ca189e", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/3c432966bd8c7ec7429663105f5a02d7e75b4306", + "reference": "3c432966bd8c7ec7429663105f5a02d7e75b4306", "shasum": "" }, "require": { @@ -5578,7 +5755,7 @@ "symfony/twig-bridge": "<6.4", "symfony/validator": "<6.4", "symfony/var-dumper": "<6.4", - "twig/twig": "<3.0.4" + "twig/twig": "<3.12" }, "provide": { "psr/log-implementation": "1.0|2.0|3.0" @@ -5606,7 +5783,7 @@ "symfony/validator": "^6.4|^7.0", "symfony/var-dumper": "^6.4|^7.0", "symfony/var-exporter": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "type": "library", "autoload": { @@ -5634,7 +5811,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/v7.1.8" + "source": "https://github.com/symfony/http-kernel/tree/v7.2.2" }, "funding": [ { @@ -5650,7 +5827,7 @@ "type": "tidelift" } ], - "time": "2024-11-13T14:25:32+00:00" + "time": "2024-12-31T14:59:40+00:00" }, { "name": "symfony/lock", @@ -5733,16 +5910,16 @@ }, { "name": "symfony/mailer", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd" + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/69c9948451fb3a6a4d47dc8261d1794734e76cdd", - "reference": "69c9948451fb3a6a4d47dc8261d1794734e76cdd", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e4d358702fb66e4c8a2af08e90e7271a62de39cc", + "reference": "e4d358702fb66e4c8a2af08e90e7271a62de39cc", "shasum": "" }, "require": { @@ -5751,7 +5928,7 @@ "psr/event-dispatcher": "^1", "psr/log": "^1|^2|^3", "symfony/event-dispatcher": "^6.4|^7.0", - "symfony/mime": "^6.4|^7.0", + "symfony/mime": "^7.2", "symfony/service-contracts": "^2.5|^3" }, "conflict": { @@ -5793,7 +5970,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v7.1.6" + "source": "https://github.com/symfony/mailer/tree/v7.2.0" }, "funding": [ { @@ -5809,20 +5986,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-11-25T15:21:05+00:00" }, { "name": "symfony/mime", - "version": "v7.1.6", + "version": "v7.2.1", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598" + "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/caa1e521edb2650b8470918dfe51708c237f0598", - "reference": "caa1e521edb2650b8470918dfe51708c237f0598", + "url": "https://api.github.com/repos/symfony/mime/zipball/7f9617fcf15cb61be30f8b252695ed5e2bfac283", + "reference": "7f9617fcf15cb61be30f8b252695ed5e2bfac283", "shasum": "" }, "require": { @@ -5877,7 +6054,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v7.1.6" + "source": "https://github.com/symfony/mime/tree/v7.2.1" }, "funding": [ { @@ -5893,7 +6070,7 @@ "type": "tidelift" } ], - "time": "2024-10-25T15:11:02+00:00" + "time": "2024-12-07T08:50:44+00:00" }, { "name": "symfony/polyfill-ctype", @@ -5921,8 +6098,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6000,8 +6177,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6077,8 +6254,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6156,8 +6333,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6238,8 +6415,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6322,8 +6499,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6396,8 +6573,8 @@ "type": "metapackage", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "notification-url": "https://packagist.org/downloads/", @@ -6461,8 +6638,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6541,8 +6718,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6623,8 +6800,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { @@ -6678,16 +6855,16 @@ }, { "name": "symfony/process", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892" + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/42783370fda6e538771f7c7a36e9fa2ee3a84892", - "reference": "42783370fda6e538771f7c7a36e9fa2ee3a84892", + "url": "https://api.github.com/repos/symfony/process/zipball/d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", + "reference": "d34b22ba9390ec19d2dd966c40aa9e8462f27a7e", "shasum": "" }, "require": { @@ -6719,7 +6896,7 @@ "description": "Executes commands in sub-processes", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/process/tree/v7.1.8" + "source": "https://github.com/symfony/process/tree/v7.2.0" }, "funding": [ { @@ -6735,20 +6912,20 @@ "type": "tidelift" } ], - "time": "2024-11-06T14:23:19+00:00" + "time": "2024-11-06T14:24:19+00:00" }, { "name": "symfony/routing", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a" + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/66a2c469f6c22d08603235c46a20007c0701ea0a", - "reference": "66a2c469f6c22d08603235c46a20007c0701ea0a", + "url": "https://api.github.com/repos/symfony/routing/zipball/e10a2450fa957af6c448b9b93c9010a4e4c0725e", + "reference": "e10a2450fa957af6c448b9b93c9010a4e4c0725e", "shasum": "" }, "require": { @@ -6800,7 +6977,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v7.1.6" + "source": "https://github.com/symfony/routing/tree/v7.2.0" }, "funding": [ { @@ -6816,20 +6993,20 @@ "type": "tidelift" } ], - "time": "2024-10-01T08:31:23+00:00" + "time": "2024-11-25T11:08:51+00:00" }, { "name": "symfony/service-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/service-contracts.git", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f" + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/service-contracts/zipball/bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", - "reference": "bd1d9e59a81d8fa4acdcea3f617c581f7475a80f", + "url": "https://api.github.com/repos/symfony/service-contracts/zipball/e53260aabf78fb3d63f8d79d69ece59f80d5eda0", + "reference": "e53260aabf78fb3d63f8d79d69ece59f80d5eda0", "shasum": "" }, "require": { @@ -6842,12 +7019,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -6883,7 +7060,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/service-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/service-contracts/tree/v3.5.1" }, "funding": [ { @@ -6899,20 +7076,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/string", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/string.git", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281" + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/591ebd41565f356fcd8b090fe64dbb5878f50281", - "reference": "591ebd41565f356fcd8b090fe64dbb5878f50281", + "url": "https://api.github.com/repos/symfony/string/zipball/446e0d146f991dde3e73f45f2c97a9faad773c82", + "reference": "446e0d146f991dde3e73f45f2c97a9faad773c82", "shasum": "" }, "require": { @@ -6970,7 +7147,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v7.1.8" + "source": "https://github.com/symfony/string/tree/v7.2.0" }, "funding": [ { @@ -6986,7 +7163,7 @@ "type": "tidelift" } ], - "time": "2024-11-13T13:31:21+00:00" + "time": "2024-11-13T13:31:26+00:00" }, { "name": "symfony/translation", @@ -7085,16 +7262,16 @@ }, { "name": "symfony/translation-contracts", - "version": "v3.5.0", + "version": "v3.5.1", "source": { "type": "git", "url": "https://github.com/symfony/translation-contracts.git", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a" + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", - "reference": "b9d2189887bb6b2e0367a9fc7136c5239ab9b05a", + "url": "https://api.github.com/repos/symfony/translation-contracts/zipball/4667ff3bd513750603a09c8dedbea942487fb07c", + "reference": "4667ff3bd513750603a09c8dedbea942487fb07c", "shasum": "" }, "require": { @@ -7102,12 +7279,12 @@ }, "type": "library", "extra": { + "thanks": { + "url": "https://github.com/symfony/contracts", + "name": "symfony/contracts" + }, "branch-alias": { "dev-main": "3.5-dev" - }, - "thanks": { - "name": "symfony/contracts", - "url": "https://github.com/symfony/contracts" } }, "autoload": { @@ -7143,7 +7320,7 @@ "standards" ], "support": { - "source": "https://github.com/symfony/translation-contracts/tree/v3.5.0" + "source": "https://github.com/symfony/translation-contracts/tree/v3.5.1" }, "funding": [ { @@ -7159,20 +7336,20 @@ "type": "tidelift" } ], - "time": "2024-04-18T09:32:20+00:00" + "time": "2024-09-25T14:20:29+00:00" }, { "name": "symfony/uid", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/uid.git", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917" + "reference": "2d294d0c48df244c71c105a169d0190bfb080426" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/uid/zipball/65befb3bb2d503bbffbd08c815aa38b472999917", - "reference": "65befb3bb2d503bbffbd08c815aa38b472999917", + "url": "https://api.github.com/repos/symfony/uid/zipball/2d294d0c48df244c71c105a169d0190bfb080426", + "reference": "2d294d0c48df244c71c105a169d0190bfb080426", "shasum": "" }, "require": { @@ -7217,7 +7394,7 @@ "uuid" ], "support": { - "source": "https://github.com/symfony/uid/tree/v7.1.6" + "source": "https://github.com/symfony/uid/tree/v7.2.0" }, "funding": [ { @@ -7233,20 +7410,20 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-09-25T14:21:43+00:00" }, { "name": "symfony/var-dumper", - "version": "v7.1.8", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8" + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", - "reference": "7bb01a47b1b00428d32b5e7b4d3b2d1aa58d3db8", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/c6a22929407dec8765d6e2b6ff85b800b245879c", + "reference": "c6a22929407dec8765d6e2b6ff85b800b245879c", "shasum": "" }, "require": { @@ -7262,7 +7439,7 @@ "symfony/http-kernel": "^6.4|^7.0", "symfony/process": "^6.4|^7.0", "symfony/uid": "^6.4|^7.0", - "twig/twig": "^3.0.4" + "twig/twig": "^3.12" }, "bin": [ "Resources/bin/var-dump-server" @@ -7300,7 +7477,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v7.1.8" + "source": "https://github.com/symfony/var-dumper/tree/v7.2.0" }, "funding": [ { @@ -7316,7 +7493,7 @@ "type": "tidelift" } ], - "time": "2024-11-08T15:46:42+00:00" + "time": "2024-11-08T15:48:14+00:00" }, { "name": "symfony/var-exporter", @@ -7397,20 +7574,21 @@ }, { "name": "symfony/yaml", - "version": "v7.1.6", + "version": "v7.2.0", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671" + "reference": "099581e99f557e9f16b43c5916c26380b54abb22" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", - "reference": "3ced3f29e4f0d6bce2170ff26719f1fe9aacc671", + "url": "https://api.github.com/repos/symfony/yaml/zipball/099581e99f557e9f16b43c5916c26380b54abb22", + "reference": "099581e99f557e9f16b43c5916c26380b54abb22", "shasum": "" }, "require": { "php": ">=8.2", + "symfony/deprecation-contracts": "^2.5|^3.0", "symfony/polyfill-ctype": "^1.8" }, "conflict": { @@ -7448,7 +7626,7 @@ "description": "Loads and dumps YAML files", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/yaml/tree/v7.1.6" + "source": "https://github.com/symfony/yaml/tree/v7.2.0" }, "funding": [ { @@ -7464,7 +7642,7 @@ "type": "tidelift" } ], - "time": "2024-09-25T14:20:29+00:00" + "time": "2024-10-23T06:56:12+00:00" }, { "name": "thecodingmachine/safe", @@ -7607,31 +7785,33 @@ }, { "name": "tijsverkoyen/css-to-inline-styles", - "version": "v2.2.7", + "version": "v2.3.0", "source": { "type": "git", "url": "https://github.com/tijsverkoyen/CssToInlineStyles.git", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb" + "reference": "0d72ac1c00084279c1816675284073c5a337c20d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/83ee6f38df0a63106a9e4536e3060458b74ccedb", - "reference": "83ee6f38df0a63106a9e4536e3060458b74ccedb", + "url": "https://api.github.com/repos/tijsverkoyen/CssToInlineStyles/zipball/0d72ac1c00084279c1816675284073c5a337c20d", + "reference": "0d72ac1c00084279c1816675284073c5a337c20d", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", - "php": "^5.5 || ^7.0 || ^8.0", - "symfony/css-selector": "^2.7 || ^3.0 || ^4.0 || ^5.0 || ^6.0 || ^7.0" + "php": "^7.4 || ^8.0", + "symfony/css-selector": "^5.4 || ^6.0 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0 || ^7.5 || ^8.5.21 || ^9.5.10" + "phpstan/phpstan": "^2.0", + "phpstan/phpstan-phpunit": "^2.0", + "phpunit/phpunit": "^8.5.21 || ^9.5.10" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.2.x-dev" + "dev-master": "2.x-dev" } }, "autoload": { @@ -7654,22 +7834,22 @@ "homepage": "https://github.com/tijsverkoyen/CssToInlineStyles", "support": { "issues": "https://github.com/tijsverkoyen/CssToInlineStyles/issues", - "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.2.7" + "source": "https://github.com/tijsverkoyen/CssToInlineStyles/tree/v2.3.0" }, - "time": "2023-12-08T13:03:43+00:00" + "time": "2024-12-21T16:25:41+00:00" }, { "name": "toflar/state-set-index", - "version": "2.0.2", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/Toflar/state-set-index.git", - "reference": "a14fc43507c1366d9761f17f8551150b59645280" + "reference": "cbf92f75533c007542bb845a51d81980c964b69a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Toflar/state-set-index/zipball/a14fc43507c1366d9761f17f8551150b59645280", - "reference": "a14fc43507c1366d9761f17f8551150b59645280", + "url": "https://api.github.com/repos/Toflar/state-set-index/zipball/cbf92f75533c007542bb845a51d81980c964b69a", + "reference": "cbf92f75533c007542bb845a51d81980c964b69a", "shasum": "" }, "require": { @@ -7699,9 +7879,9 @@ "description": "Implementation of the State Set Index Algorithm", "support": { "issues": "https://github.com/Toflar/state-set-index/issues", - "source": "https://github.com/Toflar/state-set-index/tree/2.0.2" + "source": "https://github.com/Toflar/state-set-index/tree/3.0.2" }, - "time": "2024-03-18T14:40:37+00:00" + "time": "2024-12-07T09:46:08+00:00" }, { "name": "ueberdosis/tiptap-php", @@ -8142,16 +8322,16 @@ }, { "name": "webonyx/graphql-php", - "version": "v15.18.1", + "version": "v15.19.1", "source": { "type": "git", "url": "https://github.com/webonyx/graphql-php.git", - "reference": "a167afab66d8aa74b7f552759c0bbd906afb4134" + "reference": "fa01712b1a170ddc1d92047011b2f4c2bdfa8234" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/a167afab66d8aa74b7f552759c0bbd906afb4134", - "reference": "a167afab66d8aa74b7f552759c0bbd906afb4134", + "url": "https://api.github.com/repos/webonyx/graphql-php/zipball/fa01712b1a170ddc1d92047011b2f4c2bdfa8234", + "reference": "fa01712b1a170ddc1d92047011b2f4c2bdfa8234", "shasum": "" }, "require": { @@ -8164,12 +8344,12 @@ "amphp/http-server": "^2.1", "dms/phpunit-arraysubset-asserts": "dev-master", "ergebnis/composer-normalize": "^2.28", - "friendsofphp/php-cs-fixer": "3.64.0", + "friendsofphp/php-cs-fixer": "3.65.0", "mll-lab/php-cs-fixer-config": "^5.9.2", "nyholm/psr7": "^1.5", "phpbench/phpbench": "^1.2", "phpstan/extension-installer": "^1.1", - "phpstan/phpstan": "1.12.10", + "phpstan/phpstan": "1.12.12", "phpstan/phpstan-phpunit": "1.4.1", "phpstan/phpstan-strict-rules": "1.6.1", "phpunit/phpunit": "^9.5 || ^10.5.21 || ^11", @@ -8204,7 +8384,7 @@ ], "support": { "issues": "https://github.com/webonyx/graphql-php/issues", - "source": "https://github.com/webonyx/graphql-php/tree/v15.18.1" + "source": "https://github.com/webonyx/graphql-php/tree/v15.19.1" }, "funding": [ { @@ -8212,7 +8392,7 @@ "type": "open_collective" } ], - "time": "2024-11-13T16:21:54+00:00" + "time": "2024-12-19T10:52:18+00:00" }, { "name": "wilderborn/partyline", @@ -8231,12 +8411,12 @@ "type": "library", "extra": { "laravel": { - "providers": [ - "Wilderborn\\Partyline\\ServiceProvider" - ], "aliases": { "Partyline": "Wilderborn\\Partyline\\Facade" - } + }, + "providers": [ + "Wilderborn\\Partyline\\ServiceProvider" + ] } }, "autoload": { @@ -8265,16 +8445,16 @@ "packages-dev": [ { "name": "brianium/paratest", - "version": "v7.6.0", + "version": "v7.7.0", "source": { "type": "git", "url": "https://github.com/paratestphp/paratest.git", - "reference": "68ff89a8de47d086588e391a516d2a5b5fde6254" + "reference": "4fb3f73bc5a4c3146bac2850af7dc72435a32daf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/paratestphp/paratest/zipball/68ff89a8de47d086588e391a516d2a5b5fde6254", - "reference": "68ff89a8de47d086588e391a516d2a5b5fde6254", + "url": "https://api.github.com/repos/paratestphp/paratest/zipball/4fb3f73bc5a4c3146bac2850af7dc72435a32daf", + "reference": "4fb3f73bc5a4c3146bac2850af7dc72435a32daf", "shasum": "" }, "require": { @@ -8283,26 +8463,26 @@ "ext-reflection": "*", "ext-simplexml": "*", "fidry/cpu-core-counter": "^1.2.0", - "jean85/pretty-package-versions": "^2.0.6", + "jean85/pretty-package-versions": "^2.1.0", "php": "~8.2.0 || ~8.3.0 || ~8.4.0", - "phpunit/php-code-coverage": "^11.0.7", + "phpunit/php-code-coverage": "^11.0.8", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-timer": "^7.0.1", - "phpunit/phpunit": "^11.4.1", + "phpunit/phpunit": "^11.5.1", "sebastian/environment": "^7.2.0", - "symfony/console": "^6.4.11 || ^7.1.5", - "symfony/process": "^6.4.8 || ^7.1.5" + "symfony/console": "^6.4.14 || ^7.2.1", + "symfony/process": "^6.4.14 || ^7.2.0" }, "require-dev": { "doctrine/coding-standard": "^12.0.0", "ext-pcov": "*", "ext-posix": "*", - "phpstan/phpstan": "^1.12.6", - "phpstan/phpstan-deprecation-rules": "^1.2.1", - "phpstan/phpstan-phpunit": "^1.4.0", - "phpstan/phpstan-strict-rules": "^1.6.1", - "squizlabs/php_codesniffer": "^3.10.3", - "symfony/filesystem": "^6.4.9 || ^7.1.5" + "phpstan/phpstan": "^2.0.3", + "phpstan/phpstan-deprecation-rules": "^2.0.1", + "phpstan/phpstan-phpunit": "^2.0.1", + "phpstan/phpstan-strict-rules": "^2", + "squizlabs/php_codesniffer": "^3.11.1", + "symfony/filesystem": "^6.4.13 || ^7.2.0" }, "bin": [ "bin/paratest", @@ -8342,7 +8522,7 @@ ], "support": { "issues": "https://github.com/paratestphp/paratest/issues", - "source": "https://github.com/paratestphp/paratest/tree/v7.6.0" + "source": "https://github.com/paratestphp/paratest/tree/v7.7.0" }, "funding": [ { @@ -8354,7 +8534,7 @@ "type": "paypal" } ], - "time": "2024-10-15T12:38:31+00:00" + "time": "2024-12-11T14:50:44+00:00" }, { "name": "fakerphp/faker", @@ -8663,16 +8843,16 @@ }, { "name": "larastan/larastan", - "version": "v2.9.11", + "version": "v2.9.12", "source": { "type": "git", "url": "https://github.com/larastan/larastan.git", - "reference": "54eccd35d1732b9ee4392c25aec606a6a9c521e7" + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/larastan/larastan/zipball/54eccd35d1732b9ee4392c25aec606a6a9c521e7", - "reference": "54eccd35d1732b9ee4392c25aec606a6a9c521e7", + "url": "https://api.github.com/repos/larastan/larastan/zipball/19012b39fbe4dede43dbe0c126d9681827a5e908", + "reference": "19012b39fbe4dede43dbe0c126d9681827a5e908", "shasum": "" }, "require": { @@ -8686,7 +8866,7 @@ "illuminate/support": "^9.52.16 || ^10.28.0 || ^11.16", "php": "^8.0.2", "phpmyadmin/sql-parser": "^5.9.0", - "phpstan/phpstan": "^1.12.5" + "phpstan/phpstan": "^1.12.11" }, "require-dev": { "doctrine/coding-standard": "^12.0", @@ -8703,13 +8883,13 @@ }, "type": "phpstan-extension", "extra": { - "branch-alias": { - "dev-master": "2.0-dev" - }, "phpstan": { "includes": [ "extension.neon" ] + }, + "branch-alias": { + "dev-master": "2.0-dev" } }, "autoload": { @@ -8731,7 +8911,7 @@ "email": "enunomaduro@gmail.com" } ], - "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan wrapper for Laravel", + "description": "Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel", "keywords": [ "PHPStan", "code analyse", @@ -8744,27 +8924,15 @@ ], "support": { "issues": "https://github.com/larastan/larastan/issues", - "source": "https://github.com/larastan/larastan/tree/v2.9.11" + "source": "https://github.com/larastan/larastan/tree/v2.9.12" }, "funding": [ - { - "url": "https://www.paypal.com/paypalme/enunomaduro", - "type": "custom" - }, { "url": "https://github.com/canvural", "type": "github" - }, - { - "url": "https://github.com/nunomaduro", - "type": "github" - }, - { - "url": "https://www.patreon.com/nunomaduro", - "type": "patreon" } ], - "time": "2024-11-11T23:11:00+00:00" + "time": "2024-11-26T23:09:02+00:00" }, { "name": "laravel/pail", @@ -8802,13 +8970,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-main": "1.x-dev" - }, "laravel": { "providers": [ "Laravel\\Pail\\PailServiceProvider" ] + }, + "branch-alias": { + "dev-main": "1.x-dev" } }, "autoload": { @@ -8846,16 +9014,16 @@ }, { "name": "laravel/pint", - "version": "v1.18.3", + "version": "v1.20.0", "source": { "type": "git", "url": "https://github.com/laravel/pint.git", - "reference": "cef51821608239040ab841ad6e1c6ae502ae3026" + "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/pint/zipball/cef51821608239040ab841ad6e1c6ae502ae3026", - "reference": "cef51821608239040ab841ad6e1c6ae502ae3026", + "url": "https://api.github.com/repos/laravel/pint/zipball/53072e8ea22213a7ed168a8a15b96fbb8b82d44b", + "reference": "53072e8ea22213a7ed168a8a15b96fbb8b82d44b", "shasum": "" }, "require": { @@ -8866,10 +9034,10 @@ "php": "^8.1.0" }, "require-dev": { - "friendsofphp/php-cs-fixer": "^3.65.0", - "illuminate/view": "^10.48.24", - "larastan/larastan": "^2.9.11", - "laravel-zero/framework": "^10.4.0", + "friendsofphp/php-cs-fixer": "^3.66.0", + "illuminate/view": "^10.48.25", + "larastan/larastan": "^2.9.12", + "laravel-zero/framework": "^10.48.25", "mockery/mockery": "^1.6.12", "nunomaduro/termwind": "^1.17.0", "pestphp/pest": "^2.36.0" @@ -8908,7 +9076,7 @@ "issues": "https://github.com/laravel/pint/issues", "source": "https://github.com/laravel/pint" }, - "time": "2024-11-26T15:34:00+00:00" + "time": "2025-01-14T16:20:53+00:00" }, { "name": "laravel/tinker", @@ -9218,37 +9386,37 @@ }, { "name": "orchestra/canvas", - "version": "v9.1.3", + "version": "v9.2.0", "source": { "type": "git", "url": "https://github.com/orchestral/canvas.git", - "reference": "dbe51d918c4614f9c5ac9b7b7d3baac2360daf5d" + "reference": "b7156c011d780ee1e09a66eb73a38bfa23db759a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/canvas/zipball/dbe51d918c4614f9c5ac9b7b7d3baac2360daf5d", - "reference": "dbe51d918c4614f9c5ac9b7b7d3baac2360daf5d", + "url": "https://api.github.com/repos/orchestral/canvas/zipball/b7156c011d780ee1e09a66eb73a38bfa23db759a", + "reference": "b7156c011d780ee1e09a66eb73a38bfa23db759a", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "composer/semver": "^3.0", - "illuminate/console": "^11.26", - "illuminate/database": "^11.26", - "illuminate/filesystem": "^11.26", - "illuminate/support": "^11.26", + "illuminate/console": "^11.35", + "illuminate/database": "^11.35", + "illuminate/filesystem": "^11.35", + "illuminate/support": "^11.35", "orchestra/canvas-core": "^9.0", - "orchestra/testbench-core": "^9.2", + "orchestra/testbench-core": "^9.7", "php": "^8.2", - "symfony/polyfill-php83": "^1.28", - "symfony/yaml": "^7.0" + "symfony/polyfill-php83": "^1.31", + "symfony/yaml": "^7.0.3" }, "require-dev": { - "laravel/framework": "^11.26", + "laravel/framework": "^11.35", "laravel/pint": "^1.17", - "mockery/mockery": "^1.6", + "mockery/mockery": "^1.6.10", "phpstan/phpstan": "^1.11", - "phpunit/phpunit": "^11.0", + "phpunit/phpunit": "^11.3.6", "spatie/laravel-ray": "^1.35" }, "bin": [ @@ -9256,9 +9424,6 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-master": "9.0-dev" - }, "laravel": { "providers": [ "Orchestra\\Canvas\\LaravelServiceProvider" @@ -9287,9 +9452,9 @@ "description": "Code Generators for Laravel Applications and Packages", "support": { "issues": "https://github.com/orchestral/canvas/issues", - "source": "https://github.com/orchestral/canvas/tree/v9.1.3" + "source": "https://github.com/orchestral/canvas/tree/v9.2.0" }, - "time": "2024-10-02T01:00:54+00:00" + "time": "2024-11-30T15:48:36+00:00" }, { "name": "orchestra/canvas-core", @@ -9324,13 +9489,13 @@ }, "type": "library", "extra": { - "branch-alias": { - "dev-master": "9.0-dev" - }, "laravel": { "providers": [ "Orchestra\\Canvas\\Core\\LaravelServiceProvider" ] + }, + "branch-alias": { + "dev-master": "9.0-dev" } }, "autoload": { @@ -9361,25 +9526,25 @@ }, { "name": "orchestra/testbench", - "version": "v9.6.1", + "version": "v9.9.0", "source": { "type": "git", "url": "https://github.com/orchestral/testbench.git", - "reference": "97cc0e7cd52540ae9149b4a4fc512b198fed0237" + "reference": "2f3e8c687ca5c0bd4d8bc91c4448983d046ba32b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench/zipball/97cc0e7cd52540ae9149b4a4fc512b198fed0237", - "reference": "97cc0e7cd52540ae9149b4a4fc512b198fed0237", + "url": "https://api.github.com/repos/orchestral/testbench/zipball/2f3e8c687ca5c0bd4d8bc91c4448983d046ba32b", + "reference": "2f3e8c687ca5c0bd4d8bc91c4448983d046ba32b", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "fakerphp/faker": "^1.23", - "laravel/framework": "^11.33.2", + "laravel/framework": "^11.35.0", "mockery/mockery": "^1.6.10", - "orchestra/testbench-core": "^9.6.2", - "orchestra/workbench": "^9.8", + "orchestra/testbench-core": "^9.9.0", + "orchestra/workbench": "^9.13.0", "php": "^8.2", "phpunit/phpunit": "^10.5.35 || ^11.3.6", "symfony/process": "^7.0.3", @@ -9410,22 +9575,22 @@ ], "support": { "issues": "https://github.com/orchestral/testbench/issues", - "source": "https://github.com/orchestral/testbench/tree/v9.6.1" + "source": "https://github.com/orchestral/testbench/tree/v9.9.0" }, - "time": "2024-11-20T00:28:28+00:00" + "time": "2024-12-25T23:40:19+00:00" }, { "name": "orchestra/testbench-core", - "version": "v9.6.2", + "version": "v9.9.1", "source": { "type": "git", "url": "https://github.com/orchestral/testbench-core.git", - "reference": "a776c94ab989f88e44b3d7f2f9df8e7ccb242974" + "reference": "ad211dc59c830a987eb34c18742f9c7875178eae" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/a776c94ab989f88e44b3d7f2f9df8e7ccb242974", - "reference": "a776c94ab989f88e44b3d7f2f9df8e7ccb242974", + "url": "https://api.github.com/repos/orchestral/testbench-core/zipball/ad211dc59c830a987eb34c18742f9c7875178eae", + "reference": "ad211dc59c830a987eb34c18742f9c7875178eae", "shasum": "" }, "require": { @@ -9436,28 +9601,30 @@ }, "conflict": { "brianium/paratest": "<7.3.0 || >=8.0.0", - "laravel/framework": "<11.33.2 || >=12.0.0", + "laravel/framework": "<11.35.0 || >=12.0.0", "laravel/serializable-closure": "<1.3.0 || >=3.0.0", "nunomaduro/collision": "<8.0.0 || >=9.0.0", - "phpunit/phpunit": "<10.5.35 || >=11.0.0 <11.3.6 || >=11.5.0" + "orchestra/testbench-dusk": "<9.10.0 || >=10.0.0", + "phpunit/phpunit": "<10.5.35 || >=11.0.0 <11.3.6 || >=11.6.0" }, "require-dev": { - "fakerphp/faker": "^1.23", - "laravel/framework": "^11.33.2", + "fakerphp/faker": "^1.24", + "laravel/framework": "^11.35.0", "laravel/pint": "^1.17", "laravel/serializable-closure": "^1.3 || ^2.0", "mockery/mockery": "^1.6.10", "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^10.5.35 || ^11.3.6", + "spatie/laravel-ray": "^1.39", "symfony/process": "^7.0.3", "symfony/yaml": "^7.0.3", "vlucas/phpdotenv": "^5.6.1" }, "suggest": { - "brianium/paratest": "Allow using parallel tresting (^7.3).", + "brianium/paratest": "Allow using parallel testing (^7.3).", "ext-pcntl": "Required to use all features of the console signal trapping.", "fakerphp/faker": "Allow using Faker for testing (^1.23).", - "laravel/framework": "Required for testing (^11.33.2).", + "laravel/framework": "Required for testing (^11.35.0).", "mockery/mockery": "Allow using Mockery for testing (^1.6).", "nunomaduro/collision": "Allow using Laravel style tests output and parallel testing (^8.0).", "orchestra/testbench-dusk": "Allow using Laravel Dusk for testing (^9.0).", @@ -9503,34 +9670,35 @@ "issues": "https://github.com/orchestral/testbench/issues", "source": "https://github.com/orchestral/testbench-core" }, - "time": "2024-11-20T00:25:28+00:00" + "time": "2025-01-07T02:00:47+00:00" }, { "name": "orchestra/workbench", - "version": "v9.8.0", + "version": "v9.13.0", "source": { "type": "git", "url": "https://github.com/orchestral/workbench.git", - "reference": "7e098f6c09276f0ed6f774cffe11fad53cf25c3a" + "reference": "9c9a42060735bfb49b1298c39dba392f936de372" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/orchestral/workbench/zipball/7e098f6c09276f0ed6f774cffe11fad53cf25c3a", - "reference": "7e098f6c09276f0ed6f774cffe11fad53cf25c3a", + "url": "https://api.github.com/repos/orchestral/workbench/zipball/9c9a42060735bfb49b1298c39dba392f936de372", + "reference": "9c9a42060735bfb49b1298c39dba392f936de372", "shasum": "" }, "require": { "composer-runtime-api": "^2.2", "fakerphp/faker": "^1.23", - "laravel/framework": "^11.31", + "laravel/framework": "^11.35", "laravel/pail": "^1.2", "laravel/tinker": "^2.9", "nunomaduro/collision": "^8.0", "orchestra/canvas": "^9.1", - "orchestra/testbench-core": "^9.6", + "orchestra/testbench-core": "^9.9.0", "php": "^8.2", "symfony/polyfill-php83": "^1.31", "symfony/polyfill-php84": "^1.31", + "symfony/process": "^7.0.3", "symfony/yaml": "^7.0.3" }, "require-dev": { @@ -9538,7 +9706,7 @@ "mockery/mockery": "^1.6.10", "phpstan/phpstan": "^2.0", "phpunit/phpunit": "^10.5.35 || ^11.3.6", - "symfony/process": "^7.0.3" + "spatie/laravel-ray": "^1.39" }, "suggest": { "ext-pcntl": "Required to use all features of the console signal trapping." @@ -9568,44 +9736,44 @@ ], "support": { "issues": "https://github.com/orchestral/workbench/issues", - "source": "https://github.com/orchestral/workbench/tree/v9.8.0" + "source": "https://github.com/orchestral/workbench/tree/v9.13.0" }, - "time": "2024-11-18T23:21:07+00:00" + "time": "2024-12-24T11:40:02+00:00" }, { "name": "pestphp/pest", - "version": "v3.5.1", + "version": "v3.7.1", "source": { "type": "git", "url": "https://github.com/pestphp/pest.git", - "reference": "179d46ce97d52bcb3f791449ae94025c3f32e3e3" + "reference": "bf3178473dcaa53b0458f21dfdb271306ea62512" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/pestphp/pest/zipball/179d46ce97d52bcb3f791449ae94025c3f32e3e3", - "reference": "179d46ce97d52bcb3f791449ae94025c3f32e3e3", + "url": "https://api.github.com/repos/pestphp/pest/zipball/bf3178473dcaa53b0458f21dfdb271306ea62512", + "reference": "bf3178473dcaa53b0458f21dfdb271306ea62512", "shasum": "" }, "require": { - "brianium/paratest": "^7.6.0", + "brianium/paratest": "^7.7.0", "nunomaduro/collision": "^8.5.0", - "nunomaduro/termwind": "^2.2.0", + "nunomaduro/termwind": "^2.3.0", "pestphp/pest-plugin": "^3.0.0", "pestphp/pest-plugin-arch": "^3.0.0", "pestphp/pest-plugin-mutate": "^3.0.5", "php": "^8.2.0", - "phpunit/phpunit": "^11.4.3" + "phpunit/phpunit": "^11.5.1" }, "conflict": { "filp/whoops": "<2.16.0", - "phpunit/phpunit": ">11.4.3", + "phpunit/phpunit": ">11.5.1", "sebastian/exporter": "<6.0.0", "webmozart/assert": "<1.11.0" }, "require-dev": { "pestphp/pest-dev-tools": "^3.3.0", - "pestphp/pest-plugin-type-coverage": "^3.1.0", - "symfony/process": "^7.1.6" + "pestphp/pest-plugin-type-coverage": "^3.2.0", + "symfony/process": "^7.2.0" }, "bin": [ "bin/pest" @@ -9670,7 +9838,7 @@ ], "support": { "issues": "https://github.com/pestphp/pest/issues", - "source": "https://github.com/pestphp/pest/tree/v3.5.1" + "source": "https://github.com/pestphp/pest/tree/v3.7.1" }, "funding": [ { @@ -9682,7 +9850,7 @@ "type": "github" } ], - "time": "2024-10-31T16:12:45+00:00" + "time": "2024-12-12T11:52:01+00:00" }, { "name": "pestphp/pest-plugin", @@ -9850,15 +10018,15 @@ }, "type": "library", "extra": { - "laravel": { - "providers": [ - "Pest\\Laravel\\PestServiceProvider" - ] - }, "pest": { "plugins": [ "Pest\\Laravel\\Plugin" ] + }, + "laravel": { + "providers": [ + "Pest\\Laravel\\PestServiceProvider" + ] } }, "autoload": { @@ -10143,16 +10311,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "5.6.0", + "version": "5.6.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c" + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/f3558a4c23426d12bffeaab463f8a8d8b681193c", - "reference": "f3558a4c23426d12bffeaab463f8a8d8b681193c", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", + "reference": "e5e784149a09bd69d9a5e3b01c5cbd2e2bd653d8", "shasum": "" }, "require": { @@ -10201,9 +10369,9 @@ "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", "support": { "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.0" + "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.6.1" }, - "time": "2024-11-12T11:25:25+00:00" + "time": "2024-12-07T09:39:29+00:00" }, { "name": "phpdocumentor/type-resolver", @@ -10265,16 +10433,16 @@ }, { "name": "phpmyadmin/sql-parser", - "version": "5.10.1", + "version": "5.10.2", "source": { "type": "git", "url": "https://github.com/phpmyadmin/sql-parser.git", - "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17" + "reference": "72afbce7e4b421593b60d2eb7281e37a50734df8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/b14fd66496a22d8dd7f7e2791edd9e8674422f17", - "reference": "b14fd66496a22d8dd7f7e2791edd9e8674422f17", + "url": "https://api.github.com/repos/phpmyadmin/sql-parser/zipball/72afbce7e4b421593b60d2eb7281e37a50734df8", + "reference": "72afbce7e4b421593b60d2eb7281e37a50734df8", "shasum": "" }, "require": { @@ -10348,7 +10516,7 @@ "type": "other" } ], - "time": "2024-11-10T04:10:31+00:00" + "time": "2024-12-05T15:04:09+00:00" }, { "name": "phpstan/phpdoc-parser", @@ -10399,16 +10567,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.12.11", + "version": "1.12.15", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "0d1fc20a962a91be578bcfe7cf939e6e1a2ff733" + "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/0d1fc20a962a91be578bcfe7cf939e6e1a2ff733", - "reference": "0d1fc20a962a91be578bcfe7cf939e6e1a2ff733", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/c91d4e8bc056f46cf653656e6f71004b254574d1", + "reference": "c91d4e8bc056f46cf653656e6f71004b254574d1", "shasum": "" }, "require": { @@ -10453,20 +10621,20 @@ "type": "github" } ], - "time": "2024-11-17T14:08:01+00:00" + "time": "2025-01-05T16:40:22+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "11.0.7", + "version": "11.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca" + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/f7f08030e8811582cc459871d28d6f5a1a4d35ca", - "reference": "f7f08030e8811582cc459871d28d6f5a1a4d35ca", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/418c59fd080954f8c4aa5631d9502ecda2387118", + "reference": "418c59fd080954f8c4aa5631d9502ecda2387118", "shasum": "" }, "require": { @@ -10485,7 +10653,7 @@ "theseer/tokenizer": "^1.2.3" }, "require-dev": { - "phpunit/phpunit": "^11.4.1" + "phpunit/phpunit": "^11.5.0" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -10523,7 +10691,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.7" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.8" }, "funding": [ { @@ -10531,7 +10699,7 @@ "type": "github" } ], - "time": "2024-10-09T06:21:38+00:00" + "time": "2024-12-11T12:34:27+00:00" }, { "name": "phpunit/php-file-iterator", @@ -10780,16 +10948,16 @@ }, { "name": "phpunit/phpunit", - "version": "11.4.3", + "version": "11.5.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "e8e8ed1854de5d36c088ec1833beae40d2dedd76" + "reference": "2b94d4f2450b9869fa64a46fd8a6a41997aef56a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/e8e8ed1854de5d36c088ec1833beae40d2dedd76", - "reference": "e8e8ed1854de5d36c088ec1833beae40d2dedd76", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2b94d4f2450b9869fa64a46fd8a6a41997aef56a", + "reference": "2b94d4f2450b9869fa64a46fd8a6a41997aef56a", "shasum": "" }, "require": { @@ -10799,7 +10967,7 @@ "ext-mbstring": "*", "ext-xml": "*", "ext-xmlwriter": "*", - "myclabs/deep-copy": "^1.12.0", + "myclabs/deep-copy": "^1.12.1", "phar-io/manifest": "^2.0.4", "phar-io/version": "^3.2.1", "php": ">=8.2", @@ -10810,14 +10978,15 @@ "phpunit/php-timer": "^7.0.1", "sebastian/cli-parser": "^3.0.2", "sebastian/code-unit": "^3.0.1", - "sebastian/comparator": "^6.1.1", + "sebastian/comparator": "^6.2.1", "sebastian/diff": "^6.0.2", "sebastian/environment": "^7.2.0", - "sebastian/exporter": "^6.1.3", + "sebastian/exporter": "^6.3.0", "sebastian/global-state": "^7.0.2", "sebastian/object-enumerator": "^6.0.1", "sebastian/type": "^5.1.0", - "sebastian/version": "^5.0.2" + "sebastian/version": "^5.0.2", + "staabm/side-effects-detector": "^1.0.5" }, "suggest": { "ext-soap": "To be able to generate mocks based on WSDL files" @@ -10828,7 +10997,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-main": "11.4-dev" + "dev-main": "11.5-dev" } }, "autoload": { @@ -10860,7 +11029,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", "security": "https://github.com/sebastianbergmann/phpunit/security/policy", - "source": "https://github.com/sebastianbergmann/phpunit/tree/11.4.3" + "source": "https://github.com/sebastianbergmann/phpunit/tree/11.5.1" }, "funding": [ { @@ -10876,20 +11045,20 @@ "type": "tidelift" } ], - "time": "2024-10-28T13:07:50+00:00" + "time": "2024-12-11T10:52:48+00:00" }, { "name": "psy/psysh", - "version": "v0.12.4", + "version": "v0.12.7", "source": { "type": "git", "url": "https://github.com/bobthecow/psysh.git", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818" + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/bobthecow/psysh/zipball/2fd717afa05341b4f8152547f142cd2f130f6818", - "reference": "2fd717afa05341b4f8152547f142cd2f130f6818", + "url": "https://api.github.com/repos/bobthecow/psysh/zipball/d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", + "reference": "d73fa3c74918ef4522bb8a3bf9cab39161c4b57c", "shasum": "" }, "require": { @@ -10916,12 +11085,12 @@ ], "type": "library", "extra": { - "branch-alias": { - "dev-main": "0.12.x-dev" - }, "bamarni-bin": { "bin-links": false, "forward-command": false + }, + "branch-alias": { + "dev-main": "0.12.x-dev" } }, "autoload": { @@ -10953,9 +11122,9 @@ ], "support": { "issues": "https://github.com/bobthecow/psysh/issues", - "source": "https://github.com/bobthecow/psysh/tree/v0.12.4" + "source": "https://github.com/bobthecow/psysh/tree/v0.12.7" }, - "time": "2024-06-10T01:18:23+00:00" + "time": "2024-12-10T01:58:33+00:00" }, { "name": "sebastian/cli-parser", @@ -11016,23 +11185,23 @@ }, { "name": "sebastian/code-unit", - "version": "3.0.1", + "version": "3.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/code-unit.git", - "reference": "6bb7d09d6623567178cf54126afa9c2310114268" + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/6bb7d09d6623567178cf54126afa9c2310114268", - "reference": "6bb7d09d6623567178cf54126afa9c2310114268", + "url": "https://api.github.com/repos/sebastianbergmann/code-unit/zipball/ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", + "reference": "ee88b0cdbe74cf8dd3b54940ff17643c0d6543ca", "shasum": "" }, "require": { "php": ">=8.2" }, "require-dev": { - "phpunit/phpunit": "^11.0" + "phpunit/phpunit": "^11.5" }, "type": "library", "extra": { @@ -11061,7 +11230,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/code-unit/issues", "security": "https://github.com/sebastianbergmann/code-unit/security/policy", - "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.1" + "source": "https://github.com/sebastianbergmann/code-unit/tree/3.0.2" }, "funding": [ { @@ -11069,7 +11238,7 @@ "type": "github" } ], - "time": "2024-07-03T04:44:28+00:00" + "time": "2024-12-12T09:59:06+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -11129,16 +11298,16 @@ }, { "name": "sebastian/comparator", - "version": "6.2.1", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "43d129d6a0f81c78bee378b46688293eb7ea3739" + "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/43d129d6a0f81c78bee378b46688293eb7ea3739", - "reference": "43d129d6a0f81c78bee378b46688293eb7ea3739", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/d4e47a769525c4dd38cea90e5dcd435ddbbc7115", + "reference": "d4e47a769525c4dd38cea90e5dcd435ddbbc7115", "shasum": "" }, "require": { @@ -11151,6 +11320,9 @@ "require-dev": { "phpunit/phpunit": "^11.4" }, + "suggest": { + "ext-bcmath": "For comparing BcMath\\Number objects" + }, "type": "library", "extra": { "branch-alias": { @@ -11194,7 +11366,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", "security": "https://github.com/sebastianbergmann/comparator/security/policy", - "source": "https://github.com/sebastianbergmann/comparator/tree/6.2.1" + "source": "https://github.com/sebastianbergmann/comparator/tree/6.3.0" }, "funding": [ { @@ -11202,7 +11374,7 @@ "type": "github" } ], - "time": "2024-10-31T05:30:08+00:00" + "time": "2025-01-06T10:28:19+00:00" }, { "name": "sebastian/complexity", @@ -11395,16 +11567,16 @@ }, { "name": "sebastian/exporter", - "version": "6.1.3", + "version": "6.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e" + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", - "reference": "c414673eee9a8f9d51bbf8d61fc9e3ef1e85b20e", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/3473f61172093b2da7de1fb5782e1f24cc036dc3", + "reference": "3473f61172093b2da7de1fb5782e1f24cc036dc3", "shasum": "" }, "require": { @@ -11413,7 +11585,7 @@ "sebastian/recursion-context": "^6.0" }, "require-dev": { - "phpunit/phpunit": "^11.2" + "phpunit/phpunit": "^11.3" }, "type": "library", "extra": { @@ -11461,7 +11633,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", "security": "https://github.com/sebastianbergmann/exporter/security/policy", - "source": "https://github.com/sebastianbergmann/exporter/tree/6.1.3" + "source": "https://github.com/sebastianbergmann/exporter/tree/6.3.0" }, "funding": [ { @@ -11469,7 +11641,7 @@ "type": "github" } ], - "time": "2024-07-03T04:56:19+00:00" + "time": "2024-12-05T09:17:50+00:00" }, { "name": "sebastian/global-state", @@ -11880,6 +12052,58 @@ ], "time": "2024-10-09T05:16:32+00:00" }, + { + "name": "staabm/side-effects-detector", + "version": "1.0.5", + "source": { + "type": "git", + "url": "https://github.com/staabm/side-effects-detector.git", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/staabm/side-effects-detector/zipball/d8334211a140ce329c13726d4a715adbddd0a163", + "reference": "d8334211a140ce329c13726d4a715adbddd0a163", + "shasum": "" + }, + "require": { + "ext-tokenizer": "*", + "php": "^7.4 || ^8.0" + }, + "require-dev": { + "phpstan/extension-installer": "^1.4.3", + "phpstan/phpstan": "^1.12.6", + "phpunit/phpunit": "^9.6.21", + "symfony/var-dumper": "^5.4.43", + "tomasvotruba/type-coverage": "1.0.0", + "tomasvotruba/unused-public": "1.0.0" + }, + "type": "library", + "autoload": { + "classmap": [ + "lib/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "description": "A static analysis tool to detect side effects in PHP code", + "keywords": [ + "static analysis" + ], + "support": { + "issues": "https://github.com/staabm/side-effects-detector/issues", + "source": "https://github.com/staabm/side-effects-detector/tree/1.0.5" + }, + "funding": [ + { + "url": "https://github.com/staabm", + "type": "github" + } + ], + "time": "2024-10-20T05:08:20+00:00" + }, { "name": "symfony/polyfill-php84", "version": "v1.31.0", @@ -11900,8 +12124,8 @@ "type": "library", "extra": { "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" + "url": "https://github.com/symfony/polyfill", + "name": "symfony/polyfill" } }, "autoload": { From 064bacfbe0633089eee5c3810b3b06b8cd0b6e20 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 12:22:53 +0100 Subject: [PATCH 06/18] Separate methods for clearing and dropping an index Signed-off-by: Philipp Daun --- src/Loupe/Index.php | 3 +-- src/Loupe/Manager.php | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/Loupe/Index.php b/src/Loupe/Index.php index a9c7d8b..7574a05 100644 --- a/src/Loupe/Index.php +++ b/src/Loupe/Index.php @@ -157,8 +157,7 @@ protected function createIndex() protected function resetIndex() { - $this->deleteIndex(); - $this->createIndex(); + $this->manager->clearIndex($this->name); } public function extraAugmentedResultData(Result $result) diff --git a/src/Loupe/Manager.php b/src/Loupe/Manager.php index 1b205f8..236119f 100644 --- a/src/Loupe/Manager.php +++ b/src/Loupe/Manager.php @@ -80,9 +80,13 @@ public function createIndex(string $index): void } public function dropIndex(string $index): void + { + $this->filesystem->cleanDirectory($this->indexDirectory($index)); + } + + public function clearIndex(string $index): void { $this->get($index, Configuration::create())->deleteAllDocuments(); - // $this->filesystem->cleanDirectory($this->indexDirectory($index)); } public function indexDirectory(string $index): string From d215d737815d464a6d1984c1ba966fd61c090068 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 12:28:43 +0100 Subject: [PATCH 07/18] Rename to truncate Signed-off-by: Philipp Daun --- src/Loupe/Index.php | 8 ++++---- src/Loupe/Manager.php | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/Loupe/Index.php b/src/Loupe/Index.php index 7574a05..7af28b7 100644 --- a/src/Loupe/Index.php +++ b/src/Loupe/Index.php @@ -138,7 +138,7 @@ public function insertMultiple($documents) public function update() { - $this->resetIndex(); + $this->truncateIndex(); $this->searchables()->lazy()->each(fn ($searchables) => $this->insertMultiple($searchables)); @@ -147,7 +147,7 @@ public function update() protected function deleteIndex() { - $this->manager->dropIndex($this->name); + $this->manager->deleteIndex($this->name); } protected function createIndex() @@ -155,9 +155,9 @@ protected function createIndex() $this->manager->createIndex($this->name); } - protected function resetIndex() + protected function truncateIndex() { - $this->manager->clearIndex($this->name); + $this->manager->truncateIndex($this->name); } public function extraAugmentedResultData(Result $result) diff --git a/src/Loupe/Manager.php b/src/Loupe/Manager.php index 236119f..c0302b9 100644 --- a/src/Loupe/Manager.php +++ b/src/Loupe/Manager.php @@ -79,12 +79,12 @@ public function createIndex(string $index): void } } - public function dropIndex(string $index): void + public function deleteIndex(string $index): void { $this->filesystem->cleanDirectory($this->indexDirectory($index)); } - public function clearIndex(string $index): void + public function truncateIndex(string $index): void { $this->get($index, Configuration::create())->deleteAllDocuments(); } From d7308cdf99d99954a3f3f63d551cd9bacd0e6dd8 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 14:34:19 +0100 Subject: [PATCH 08/18] Update composer lock file --- composer.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/composer.lock b/composer.lock index 847d6c2..0cebc60 100644 --- a/composer.lock +++ b/composer.lock @@ -12292,12 +12292,12 @@ ], "aliases": [], "minimum-stability": "stable", - "stability-flags": {}, + "stability-flags": [], "prefer-stable": false, "prefer-lowest": false, "platform": { "php": "^8.1" }, - "platform-dev": {}, - "plugin-api-version": "2.6.0" + "platform-dev": [], + "plugin-api-version": "2.3.0" } From f56949e217b8933cc1ba1b402409fbfc8a8da1ba Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 14:34:41 +0100 Subject: [PATCH 09/18] Get rid of manager abstraction --- src/Loupe/Index.php | 78 ++++++++++++++++++++++++------- src/Loupe/Manager.php | 101 ---------------------------------------- src/ServiceProvider.php | 4 +- 3 files changed, 61 insertions(+), 122 deletions(-) delete mode 100644 src/Loupe/Manager.php diff --git a/src/Loupe/Index.php b/src/Loupe/Index.php index 7af28b7..28f3fd5 100644 --- a/src/Loupe/Index.php +++ b/src/Loupe/Index.php @@ -3,11 +3,14 @@ namespace Daun\StatamicLoupe\Loupe; use Daun\StatamicLoupe\Search\Snippets; +use Exception; +use Illuminate\Filesystem\Filesystem; use Illuminate\Support\Arr; use Illuminate\Support\Str; use Loupe\Loupe\Config\TypoTolerance; use Loupe\Loupe\Configuration; use Loupe\Loupe\Loupe; +use Loupe\Loupe\LoupeFactory; use Loupe\Loupe\SearchParameters; use Statamic\Contracts\Search\Searchable; use Statamic\Search\Documents; @@ -16,7 +19,7 @@ class Index extends BaseIndex { - protected Loupe $client; + protected ?Loupe $client = null; protected array $defaults = [ 'fields' => ['title'], @@ -37,19 +40,38 @@ class Index extends BaseIndex protected ?array $snippetAttributes = null; public function __construct( - protected Manager $manager, + protected LoupeFactory $factory, + protected Filesystem $filesystem, string $name, array $config, ?string $locale = null ) { $config = [...$this->defaults, ...$config]; parent::__construct($name, $config, $locale); + } + + protected function base(): string + { + return Str::finish($this->config['path'] ?? storage_path('statamic/loupe'), '/'); + } + + protected function dir(): string + { + return $this->base() . $this->name; + } - $this->client = $this->manager->get($this->name, $this->configuration()); + protected function path(): string + { + return $this->base() . $this->name . '/loupe.db'; } public function client(): Loupe { + if (! $this->client) { + $this->createIndex(); + $this->client = $this->factory->create($this->dir(), $this->configuration()); + } + return $this->client; } @@ -71,7 +93,7 @@ public function lookup($query) $this->config['highlight_tags'][1] ); - $result = $this->client->search($parameters); + $result = $this->client()->search($parameters); return collect($result->getHits()) ->map(fn ($hit) => [ @@ -100,22 +122,22 @@ protected function configuration(): Configuration public function delete($document) { - $this->client->deleteDocument($document->getSearchReference()); + $this->client()->deleteDocument($document->getSearchReference()); } public function exists() { - return $this->manager->indexExists($this->name); + return $this->filesystem->exists($this->path()); } protected function insertDocuments(Documents $documents) { // After upgrading Loupe, a reindex might be required - if ($this->client->needsReindex()) { - $this->resetIndex(); + if ($this->client()->needsReindex()) { + $this->truncateIndex(); } - $this->client->addDocuments($documents->all()); + $this->client()->addDocuments($documents->all()); } public function insertMultiple($documents) @@ -147,17 +169,31 @@ public function update() protected function deleteIndex() { - $this->manager->deleteIndex($this->name); + $this->filesystem->cleanDirectory($this->path()); } protected function createIndex() { - $this->manager->createIndex($this->name); + $dir = $this->dir(); + $db = $this->path(); + + if (! $this->filesystem->exists($db)) { + $this->filesystem->ensureDirectoryExists($dir); + $this->filesystem->put($db, ''); + } + + if (! $this->filesystem->isFile($db)) { + throw new Exception(sprintf('The Loupe index "%s" does not exist and cannot be created.', $db)); + } + + if (! $this->filesystem->isWritable($db)) { + throw new Exception(sprintf('The Loupe index "%s" is not writable.', $db)); + } } protected function truncateIndex() { - $this->manager->truncateIndex($this->name); + $this->client()->deleteAllDocuments(); } public function extraAugmentedResultData(Result $result) @@ -166,13 +202,19 @@ public function extraAugmentedResultData(Result $result) return [ 'search_score' => $raw['_rankingScore'] ?? null, - 'search_highlights' => Arr::only($raw['_formatted'] ?? [], $this->config['highlight_attributes']), - 'search_snippets' => $this->createSnippets($raw['_formatted'] ?? [], $this->config['snippet_attributes']), + 'search_highlights' => $this->getHighlights($raw['_formatted'] ?? []), + 'search_snippets' => $this->getSnippets($raw['_formatted'] ?? []), ]; } - protected function createSnippets(array $highlights, array $attributes): array + protected function getHighlights(array $fields): array + { + return Arr::only($fields, $this->config['highlight_attributes'] ?? []); + } + + protected function getSnippets(array $fields): array { + $attributes = $this->config['snippet_attributes'] ?? []; if (empty($attributes)) { return []; } @@ -185,11 +227,11 @@ protected function createSnippets(array $highlights, array $attributes): array [$start, $end] = $this->config['highlight_tags']; return collect($this->snippetAttributes) - ->map(function ($words, $attr) use ($highlights, $start, $end) { + ->map(function ($words, $attr) use ($fields, $start, $end) { try { - return (new Snippets($start, $end, $words))->generate($highlights[$attr]); + return (new Snippets($start, $end, $words))->generate($fields[$attr]); } catch (\Exception $e) { - return Str::limit($highlights[$attr], limit: 200, preserveWords: true); + return Str::limit($fields[$attr], limit: 200, preserveWords: true); } }) ->all(); diff --git a/src/Loupe/Manager.php b/src/Loupe/Manager.php deleted file mode 100644 index c0302b9..0000000 --- a/src/Loupe/Manager.php +++ /dev/null @@ -1,101 +0,0 @@ -factory = new LoupeFactory(); - $this->filesystem = new Filesystem(); - - $this->init(); - } - - protected function init(): void - { - $this->filesystem->ensureDirectoryExists($this->path); - - if (! $this->filesystem->isDirectory($this->path)) { - throw new Exception(sprintf('The Loupe path "%s" does not exist and cannot be created.', $this->path)); - } - - if (! $this->filesystem->isWritable($this->path)) { - throw new Exception(sprintf('The Loupe path "%s" is not writable.', $this->path)); - } - } - - public function get(string $index, Configuration $configuration): Loupe - { - return $this->clients[$index] ??= $this->make($index, $configuration); - } - - public function make(string $index, Configuration $configuration): Loupe - { - $this->createIndex($index); - - return $this->factory->create($this->indexDirectory($index), $configuration); - } - - public function indexExists(string $index): bool - { - return $this->filesystem->exists($this->indexPath($index)); - } - - public function createIndex(string $index): void - { - $dir = $this->indexDirectory($index); - $db = $this->indexPath($index); - - if (! $this->filesystem->exists($db)) { - $this->filesystem->ensureDirectoryExists($dir); - $this->filesystem->put($db, ''); - } - - if (! $this->filesystem->isFile($db)) { - throw new Exception(sprintf('The Loupe index "%s" does not exist and cannot be created.', $db)); - } - - if (! $this->filesystem->isWritable($db)) { - throw new Exception(sprintf('The Loupe index "%s" is not writable.', $db)); - } - } - - public function deleteIndex(string $index): void - { - $this->filesystem->cleanDirectory($this->indexDirectory($index)); - } - - public function truncateIndex(string $index): void - { - $this->get($index, Configuration::create())->deleteAllDocuments(); - } - - public function indexDirectory(string $index): string - { - return join_paths($this->path, $index); - } - - public function indexPath(string $index): string - { - return join_paths($this->path, $index, 'loupe.db'); - } -} diff --git a/src/ServiceProvider.php b/src/ServiceProvider.php index f7699a9..e1b5731 100644 --- a/src/ServiceProvider.php +++ b/src/ServiceProvider.php @@ -2,7 +2,6 @@ namespace Daun\StatamicLoupe; -use Daun\StatamicLoupe\Loupe\Manager; use Illuminate\Foundation\Application; use Statamic\Facades\Search; use Statamic\Providers\AddonServiceProvider; @@ -13,9 +12,8 @@ public function bootAddon(): void { Search::extend('loupe', function (Application $app, array $config, string $name, ?string $locale = null) { return $app->makeWith(Loupe\Index::class, [ - 'manager' => new Manager($config['path'] ?? storage_path('statamic/loupe')), - 'config' => $config, 'name' => $name, + 'config' => $config, 'locale' => $locale, ]); }); From 72d6690234d085267bafcf616a2c534ff51972bb Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 14:48:18 +0100 Subject: [PATCH 10/18] Autoformat --- src/Loupe/Index.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Loupe/Index.php b/src/Loupe/Index.php index 28f3fd5..29a5cbb 100644 --- a/src/Loupe/Index.php +++ b/src/Loupe/Index.php @@ -57,12 +57,12 @@ protected function base(): string protected function dir(): string { - return $this->base() . $this->name; + return $this->base().$this->name; } protected function path(): string { - return $this->base() . $this->name . '/loupe.db'; + return $this->base().$this->name.'/loupe.db'; } public function client(): Loupe From 56a2d6d282b8f712d5551f9d46f3dcd4722c549e Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 15:04:25 +0100 Subject: [PATCH 11/18] Make path members public --- src/Loupe/Index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Loupe/Index.php b/src/Loupe/Index.php index 29a5cbb..d6723ae 100644 --- a/src/Loupe/Index.php +++ b/src/Loupe/Index.php @@ -50,17 +50,17 @@ public function __construct( parent::__construct($name, $config, $locale); } - protected function base(): string + public function base(): string { return Str::finish($this->config['path'] ?? storage_path('statamic/loupe'), '/'); } - protected function dir(): string + public function dir(): string { return $this->base().$this->name; } - protected function path(): string + public function path(): string { return $this->base().$this->name.'/loupe.db'; } From 6a17f4ad0283a94e7dd76d0f3bc68b0a3cc5a9e3 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 15:04:36 +0100 Subject: [PATCH 12/18] Test index paths --- tests/Feature/IndexTest.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/tests/Feature/IndexTest.php b/tests/Feature/IndexTest.php index f6e08c7..68c61e1 100644 --- a/tests/Feature/IndexTest.php +++ b/tests/Feature/IndexTest.php @@ -6,7 +6,26 @@ use Statamic\Facades\Search; beforeEach(function () { - config(['statamic.search.drivers.loupe.path' => fixtures_path('indexes/'.random_int(11, 99999999))]); + $this->basePath = fixtures_path('indexes/'.random_int(11, 99999999)); + + config(['statamic.search.drivers.loupe.path' => $this->basePath]); +}); + +it('builds the correct paths and directories', function () { + $index = Search::index('loupe_index'); + + expect($index->base())->toEqual($this->basePath . '/'); + expect($index->dir())->toEqual($this->basePath . '/loupe_index'); + expect($index->path())->toEqual($this->basePath . '/loupe_index/loupe.db'); +}); + +it('only creates an index if required', function () { + $index = Search::index('loupe_index'); + expect($index->exists())->toBeFalse(); + + $client = $index->client(); + + expect($index->exists())->toBeTrue(); }); it('creates a Loupe client', function () { From 78d3ec074cde0faa91c83d0d42462d7f6adc804d Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 15:05:51 +0100 Subject: [PATCH 13/18] Autoformat --- tests/Feature/IndexTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/Feature/IndexTest.php b/tests/Feature/IndexTest.php index 68c61e1..98d2a1a 100644 --- a/tests/Feature/IndexTest.php +++ b/tests/Feature/IndexTest.php @@ -14,9 +14,9 @@ it('builds the correct paths and directories', function () { $index = Search::index('loupe_index'); - expect($index->base())->toEqual($this->basePath . '/'); - expect($index->dir())->toEqual($this->basePath . '/loupe_index'); - expect($index->path())->toEqual($this->basePath . '/loupe_index/loupe.db'); + expect($index->base())->toEqual($this->basePath.'/'); + expect($index->dir())->toEqual($this->basePath.'/loupe_index'); + expect($index->path())->toEqual($this->basePath.'/loupe_index/loupe.db'); }); it('only creates an index if required', function () { From c102665c25b5964ad73243b7c1c2be063483a269 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 15:20:04 +0100 Subject: [PATCH 14/18] Reorder client test --- tests/Feature/IndexTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/Feature/IndexTest.php b/tests/Feature/IndexTest.php index 98d2a1a..ff83059 100644 --- a/tests/Feature/IndexTest.php +++ b/tests/Feature/IndexTest.php @@ -19,6 +19,12 @@ expect($index->path())->toEqual($this->basePath.'/loupe_index/loupe.db'); }); +it('creates a Loupe client', function () { + $index = Search::index('loupe_index'); + + expect($index->client())->toBeInstanceOf(Loupe::class); +}); + it('only creates an index if required', function () { $index = Search::index('loupe_index'); expect($index->exists())->toBeFalse(); @@ -28,12 +34,6 @@ expect($index->exists())->toBeTrue(); }); -it('creates a Loupe client', function () { - $index = Search::index('loupe_index'); - - expect($index->client())->toBeInstanceOf(Loupe::class); -}); - it('adds documents to the index', function () { $index = Search::index('loupe_index'); From 999fe500bdcebc594565b16aa202e4c8c602c700 Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 16:22:30 +0100 Subject: [PATCH 15/18] Fix field list to exclude primary key --- src/Loupe/Index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Loupe/Index.php b/src/Loupe/Index.php index d6723ae..7955c1a 100644 --- a/src/Loupe/Index.php +++ b/src/Loupe/Index.php @@ -43,7 +43,7 @@ public function __construct( protected LoupeFactory $factory, protected Filesystem $filesystem, string $name, - array $config, + array $config = [], ?string $locale = null ) { $config = [...$this->defaults, ...$config]; @@ -103,11 +103,11 @@ public function lookup($query) ]); } - protected function configuration(): Configuration + public function configuration(): Configuration { return Configuration::create() ->withPrimaryKey('id') - ->withSearchableAttributes(Arr::except($this->config['fields'], ['id'])) + ->withSearchableAttributes(collect($this->config['fields'])->keyBy(null)->except(['id'])->values()->all()) ->withMaxQueryTokens($this->config['max_query_tokens']) ->withMinTokenLengthForPrefixSearch($this->config['min_token_length_for_prefix_search']) ->withLanguages($this->config['stemming_languages']) From 9bd485a7ff5eafd680d5c9e79dd204f7dd4a932b Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 16:23:02 +0100 Subject: [PATCH 16/18] Add tests for configuration object --- tests/Feature/ConfigurationTest.php | 61 +++++++++++++++++++++++++++ tests/Feature/IndexTest.php | 30 +++++++++---- tests/Feature/ServiceProviderTest.php | 4 +- tests/TestCase.php | 11 ++++- 4 files changed, 93 insertions(+), 13 deletions(-) create mode 100644 tests/Feature/ConfigurationTest.php diff --git a/tests/Feature/ConfigurationTest.php b/tests/Feature/ConfigurationTest.php new file mode 100644 index 0000000..f6b395f --- /dev/null +++ b/tests/Feature/ConfigurationTest.php @@ -0,0 +1,61 @@ +app->makeWith(Index::class, ['name' => 'default']); + $configuration = $index->configuration(); + + expect($configuration)->toBeInstanceOf(Configuration::class); +}); + +it('provides defaults', function () { + /** @var Index */ + $index = $this->app->makeWith(Index::class, ['name' => 'default']); + $configuration = $index->configuration(); + + expect($configuration->getPrimaryKey())->toEqual('id'); + expect($configuration->getSearchableAttributes())->toEqual(['title']); + expect($configuration->getMaxQueryTokens())->toEqual(10); + expect($configuration->getMinTokenLengthForPrefixSearch())->toEqual(2); + expect($configuration->getLanguages())->toEqual([]); + expect($configuration->getTypoTolerance()->isDisabled())->toEqual(false); + expect($configuration->getTypoTolerance()->getAlphabetSize())->toEqual(4); + expect($configuration->getTypoTolerance()->getIndexLength())->toEqual(14); +}); + +it('overrides defaults', function () { + $config = [ + 'fields' => ['id', 'summary', 'url'], // id will be ignored + 'max_query_tokens' => 11, + 'min_token_length_for_prefix_search' => 3, + 'stemming_languages' => ['de', 'fr'], + 'typo_tolerance_alphabet_size' => 5, + 'typo_tolerance_index_length' => 15, + ]; + + /** @var Index */ + $index = $this->app->makeWith(Index::class, ['name' => 'default', 'config' => $config]); + $configuration = $index->configuration(); + + expect($configuration->getSearchableAttributes())->toEqual(['summary', 'url']); + expect($configuration->getMaxQueryTokens())->toEqual(11); + expect($configuration->getMinTokenLengthForPrefixSearch())->toEqual(3); + expect($configuration->getLanguages())->toEqual(['de', 'fr']); + expect($configuration->getTypoTolerance()->isDisabled())->toEqual(false); + expect($configuration->getTypoTolerance()->getAlphabetSize())->toEqual(5); + expect($configuration->getTypoTolerance()->getIndexLength())->toEqual(15); + + // Need to test typo tolerance separately + $config = [ + 'typo_tolerance_enabled' => false, + ]; + + /** @var Index */ + $index = $this->app->makeWith(Index::class, ['name' => 'default', 'config' => $config]); + $configuration = $index->configuration(); + + expect($configuration->getTypoTolerance()->isDisabled())->toEqual(true); +}); diff --git a/tests/Feature/IndexTest.php b/tests/Feature/IndexTest.php index ff83059..86d5f69 100644 --- a/tests/Feature/IndexTest.php +++ b/tests/Feature/IndexTest.php @@ -1,5 +1,6 @@ basePath = fixtures_path('indexes/'.random_int(11, 99999999)); - config(['statamic.search.drivers.loupe.path' => $this->basePath]); }); +afterEach(function () { + File::deleteDirectory($this->basePath); +}); + it('builds the correct paths and directories', function () { - $index = Search::index('loupe_index'); + $index = Search::index(); + + expect($index->base())->toEqual($this->basePath.'/'); + expect($index->dir())->toEqual($this->basePath.'/default'); + expect($index->path())->toEqual($this->basePath.'/default/loupe.db'); +}); + +it('uses custom index name for paths and directories', function () { + $index = Search::index('pages'); expect($index->base())->toEqual($this->basePath.'/'); - expect($index->dir())->toEqual($this->basePath.'/loupe_index'); - expect($index->path())->toEqual($this->basePath.'/loupe_index/loupe.db'); + expect($index->dir())->toEqual($this->basePath.'/pages'); + expect($index->path())->toEqual($this->basePath.'/pages/loupe.db'); }); it('creates a Loupe client', function () { - $index = Search::index('loupe_index'); + $index = Search::index(); expect($index->client())->toBeInstanceOf(Loupe::class); }); it('only creates an index if required', function () { - $index = Search::index('loupe_index'); + $index = Search::index(); expect($index->exists())->toBeFalse(); $client = $index->client(); @@ -35,7 +47,7 @@ }); it('adds documents to the index', function () { - $index = Search::index('loupe_index'); + $index = Search::index(); $this->assertCount(0, $index->lookup('Entry')); @@ -60,7 +72,7 @@ }); it('updates documents in the index', function () { - $index = Search::index('loupe_index'); + $index = Search::index(); $collection = Collection::make() ->handle('pages') @@ -92,7 +104,7 @@ }); it('removes documents from the index', function () { - $index = Search::index('loupe_index'); + $index = Search::index(); $collection = Collection::make() ->handle('pages') diff --git a/tests/Feature/ServiceProviderTest.php b/tests/Feature/ServiceProviderTest.php index 75064d1..4d01ffb 100644 --- a/tests/Feature/ServiceProviderTest.php +++ b/tests/Feature/ServiceProviderTest.php @@ -9,8 +9,8 @@ $provider->bootAddon(); })->throwsNoExceptions(); -it('register a search driver', function () { - $index = Search::index('loupe_index'); +it('registers a search driver', function () { + $index = Search::index('pages'); expect($index)->toBeInstanceOf(Index::class); }); diff --git a/tests/TestCase.php b/tests/TestCase.php index 36b8786..8be83d5 100644 --- a/tests/TestCase.php +++ b/tests/TestCase.php @@ -49,8 +49,15 @@ protected function resolveApplicationConfiguration($app) // Assume pro edition for our tests $app['config']->set('statamic.editions.pro', true); - // Add search index using Loupe - $app['config']->set('statamic.search.indexes.loupe_index', [ + // Define folder for temporary index files + $app['config']->set('statamic.search.drivers.loupe.path', fixtures_path('indexes')); + + // Add search indexes using Loupe + $app['config']->set('statamic.search.indexes.default', [ + 'driver' => 'loupe', + 'searchables' => ['all'], + ]); + $app['config']->set('statamic.search.indexes.pages', [ 'driver' => 'loupe', 'searchables' => ['collection:pages'], ]); From a68a30f630a0ed4259b620a3cafd919e4f00122a Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 16:26:37 +0100 Subject: [PATCH 17/18] Formatting --- src/Loupe/Index.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Loupe/Index.php b/src/Loupe/Index.php index 7955c1a..3005842 100644 --- a/src/Loupe/Index.php +++ b/src/Loupe/Index.php @@ -107,7 +107,9 @@ public function configuration(): Configuration { return Configuration::create() ->withPrimaryKey('id') - ->withSearchableAttributes(collect($this->config['fields'])->keyBy(null)->except(['id'])->values()->all()) + ->withSearchableAttributes( + collect($this->config['fields'])->keyBy(fn ($f) => $f)->except(['id'])->values()->all() + ) ->withMaxQueryTokens($this->config['max_query_tokens']) ->withMinTokenLengthForPrefixSearch($this->config['min_token_length_for_prefix_search']) ->withLanguages($this->config['stemming_languages']) From ae5461185c319f6818d0aa07df0d76e3e538ecaa Mon Sep 17 00:00:00 2001 From: Philipp Daun Date: Fri, 17 Jan 2025 16:47:25 +0100 Subject: [PATCH 18/18] Test arguments of factory config --- src/Loupe/Factory.php | 19 +++++++++++++++++++ src/Loupe/Index.php | 7 ++++--- tests/Feature/ConfigurationTest.php | 19 +++++++++++++++++++ 3 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 src/Loupe/Factory.php diff --git a/src/Loupe/Factory.php b/src/Loupe/Factory.php new file mode 100644 index 0000000..0ecca97 --- /dev/null +++ b/src/Loupe/Factory.php @@ -0,0 +1,19 @@ +factory->create($path, $config); + } +} diff --git a/src/Loupe/Index.php b/src/Loupe/Index.php index 3005842..21840e4 100644 --- a/src/Loupe/Index.php +++ b/src/Loupe/Index.php @@ -10,7 +10,6 @@ use Loupe\Loupe\Config\TypoTolerance; use Loupe\Loupe\Configuration; use Loupe\Loupe\Loupe; -use Loupe\Loupe\LoupeFactory; use Loupe\Loupe\SearchParameters; use Statamic\Contracts\Search\Searchable; use Statamic\Search\Documents; @@ -21,6 +20,8 @@ class Index extends BaseIndex { protected ?Loupe $client = null; + protected ?Configuration $configuration = null; + protected array $defaults = [ 'fields' => ['title'], 'chunk' => 100, @@ -40,7 +41,7 @@ class Index extends BaseIndex protected ?array $snippetAttributes = null; public function __construct( - protected LoupeFactory $factory, + protected Factory $factory, protected Filesystem $filesystem, string $name, array $config = [], @@ -105,7 +106,7 @@ public function lookup($query) public function configuration(): Configuration { - return Configuration::create() + return $this->configuration ??= Configuration::create() ->withPrimaryKey('id') ->withSearchableAttributes( collect($this->config['fields'])->keyBy(fn ($f) => $f)->except(['id'])->values()->all() diff --git a/tests/Feature/ConfigurationTest.php b/tests/Feature/ConfigurationTest.php index f6b395f..ffff0bf 100644 --- a/tests/Feature/ConfigurationTest.php +++ b/tests/Feature/ConfigurationTest.php @@ -1,5 +1,6 @@ getTypoTolerance()->isDisabled())->toEqual(true); }); + +it('passes the configuration into the factory', function () { + $spy = Mockery::spy(Factory::class); + $spy->shouldReceive('create') + ->andReturn((new Factory(new LoupeFactory))->create(fixtures_path('indexes/default'), Configuration::create())); + + $this->app->instance(Factory::class, $spy); + + $index = $this->app->makeWith(Index::class, ['name' => 'default']); + $configuration = $index->configuration(); + + $client = $index->client(); + + $spy->shouldHaveReceived('create') + ->once() + ->with($index->dir(), $configuration); + +});